import type { AuthService, AuthSession } from './AuthService'; import type { AuthCallbackCommandDTO } from '@gridpilot/identity/application/dto/AuthCallbackCommandDTO'; import type { StartAuthCommandDTO } from '@gridpilot/identity/application/dto/StartAuthCommandDTO'; import { StartAuthUseCase } from '@gridpilot/identity/application/use-cases/StartAuthUseCase'; import { GetCurrentUserSessionUseCase } from '@gridpilot/identity/application/use-cases/GetCurrentUserSessionUseCase'; import { HandleAuthCallbackUseCase } from '@gridpilot/identity/application/use-cases/HandleAuthCallbackUseCase'; import { LogoutUseCase } from '@gridpilot/identity/application/use-cases/LogoutUseCase'; import { CookieIdentitySessionAdapter } from '@gridpilot/identity/infrastructure/session/CookieIdentitySessionAdapter'; import { IracingDemoIdentityProviderAdapter } from '@gridpilot/identity/infrastructure/providers/IracingDemoIdentityProviderAdapter'; export class InMemoryAuthService implements AuthService { async getCurrentSession(): Promise { const sessionPort = new CookieIdentitySessionAdapter(); const useCase = new GetCurrentUserSessionUseCase(sessionPort); return useCase.execute(); } async startIracingAuthRedirect( returnTo?: string, ): Promise<{ redirectUrl: string; state: string }> { const provider = new IracingDemoIdentityProviderAdapter(); const useCase = new StartAuthUseCase(provider); const command: StartAuthCommandDTO = { provider: 'IRACING_DEMO', returnTo, }; return useCase.execute(command); } async loginWithIracingCallback(params: { code: string; state: string; returnTo?: string; }): Promise { const provider = new IracingDemoIdentityProviderAdapter(); const sessionPort = new CookieIdentitySessionAdapter(); const useCase = new HandleAuthCallbackUseCase(provider, sessionPort); const command: AuthCallbackCommandDTO = { provider: 'IRACING_DEMO', code: params.code, state: params.state, returnTo: params.returnTo, }; return useCase.execute(command); } async logout(): Promise { const sessionPort = new CookieIdentitySessionAdapter(); const useCase = new LogoutUseCase(sessionPort); await useCase.execute(); } }