user(); if (! $user || ! ApiTokenLifetime::isExpired($user, $portal)) { return $next($request); } try { if (method_exists($user, 'token') && $user->token()) { $user->token()->revoke(); } } catch (\Throwable $e) { // Continue with 401 even if revoke fails. } return response()->json([ 'status' => 'failed', 'message' => 'Sesi tamat. Sila log masuk semula.', ], 401); } }