id"; $cachedToken = Cache::get($cacheKey); if ($cachedToken) { return $cachedToken; } if (! $account->username || ! $account->password || ! $account->instance_url) { throw new PlatformAuthException(PlatformEnum::LEMMY, 'Missing credentials for account: ' . $account->username); } $api = new LemmyApiService($account->instance_url); $token = $api->login($account->username, $account->password); if (!$token) { throw new PlatformAuthException(PlatformEnum::LEMMY, 'Login failed for account: ' . $account->username); } // Cache for 50 minutes (3000 seconds) to allow buffer before token expires Cache::put($cacheKey, $token, 3000); return $token; } /** * Authenticate with Lemmy API and return user data with JWT * @throws PlatformAuthException */ public function authenticate(string $instanceUrl, string $username, string $password): array { try { $api = new LemmyApiService($instanceUrl); $token = $api->login($username, $password); if (!$token) { // Throw a clean exception that will be caught and handled by the controller throw new PlatformAuthException(PlatformEnum::LEMMY, 'Invalid credentials'); } // Get user info with the token // For now, we'll return a basic response structure // In a real implementation, you might want to fetch user details return [ 'jwt' => $token, 'person_view' => [ 'person' => [ 'id' => 0, // Would need API call to get actual user info 'display_name' => null, 'bio' => null, ] ] ]; } catch (PlatformAuthException $e) { // Re-throw PlatformAuthExceptions as-is to avoid nesting throw $e; } catch (Exception $e) { // Check if it's a rate limit error if (str_contains($e->getMessage(), 'Rate limited by')) { throw new PlatformAuthException(PlatformEnum::LEMMY, $e->getMessage()); } // For other exceptions, throw a clean PlatformAuthException throw new PlatformAuthException(PlatformEnum::LEMMY, 'Connection failed'); } } }