false, 'message' => 'انتهت صلاحية الجلسة', 'code' => 'TOKEN_EXPIRED', 'redirect'=> '/login.php' ]); exit; } // Defence in depth for mobile requests: prove the caller also holds the // per-device secret, so a stolen bearer token on its own is not enough. // Controlled by HMAC_ENFORCE in .env - see HmacMiddleware. if (($decoded['source'] ?? null) === 'mobile') { HmacMiddleware::verify($decoded); } return $decoded; } }