import { BaseClient } from './BaseClient'; import { LoginWithAppPasswordRequest, InitiateOAuthSignInRequest, CompleteOAuthSignInRequest, RefreshAccessTokenRequest, GenerateExtensionTokensRequest, LoginWithAppPasswordResponse, InitiateOAuthSignInResponse, CompleteOAuthSignInResponse, RefreshAccessTokenResponse, GenerateExtensionTokensResponse, } from '../types'; export class UserClient extends BaseClient { async loginWithAppPassword( request: LoginWithAppPasswordRequest, ): Promise { return this.request( 'POST', '/api/users/login/app-password', request, ); } async initiateOAuthSignIn( request?: InitiateOAuthSignInRequest, ): Promise { const params = new URLSearchParams(); if (request?.handle) { params.set('handle', request.handle); } const queryString = params.toString(); const endpoint = queryString ? `/api/users/login?${queryString}` : '/api/users/login'; return this.request('GET', endpoint); } async completeOAuthSignIn( request: CompleteOAuthSignInRequest, ): Promise { const params = new URLSearchParams({ code: request.code, state: request.state, iss: request.iss, }); return this.request( 'GET', `/api/users/oauth/callback?${params}`, ); } async refreshAccessToken( request: RefreshAccessTokenRequest, ): Promise { return this.request( 'POST', '/api/users/oauth/refresh', request, ); } async generateExtensionTokens( request?: GenerateExtensionTokensRequest, ): Promise { return this.request( 'GET', '/api/users/extension/tokens', ); } async logout(): Promise<{ success: boolean; message: string }> { if (!this.tokenManager) { throw new Error('TokenManager is required for logout'); } const refreshToken = await this.tokenManager.getRefreshToken(); return this.request<{ success: boolean; message: string }>( 'POST', '/api/users/logout', { refreshToken }, ); } }