@dainprotocol/oauth2-token-manager
Version:
A scalable OAuth2 token management library with multi-system support
1 lines • 64.3 kB
Source Map (JSON)
{"version":3,"sources":["../src/strategies/standard-authorization-url.strategy.ts","../src/strategies/standard-token-exchange.strategy.ts","../src/providers/base.provider.ts","../src/providers/generic.provider.ts","../src/profile/base-profile-fetcher.ts","../src/profile/google-profile-fetcher.ts","../src/profile/github-profile-fetcher.ts","../src/profile/microsoft-profile-fetcher.ts","../src/profile/generic-profile-fetcher.ts","../src/profile/profile-fetcher-factory.ts","../src/providers/provider.factory.ts","../src/storage/memory.adapter.ts","../src/utils/crypto.ts","../src/facade/oauth2.facade.ts","../src/utils/seal.ts"],"names":["StandardAuthorizationUrlStrategy","params","value","key","config","state","codeChallenge","extraParams","StandardTokenExchangeStrategy","code","codeVerifier","response","errorText","data","tokenData","now","expiresIn","refreshToken","OAuth2Provider","authUrlStrategy","tokenStrategy","profileFetcher","accessToken","GenericOAuth2Provider","BaseProfileFetcher","profileEndpoint","rawData","GoogleProfileFetcher","GitHubProfileFetcher","_a","MicrosoftProfileFetcher","GenericProfileFetcher","mapping","additionalHeaders","obj","path","current","ProfileFetcherFactory","providerType","options","profileUrl","providerName","OAuth2ProviderFactory","_OAuth2ProviderFactory","type","presetConfig","mergedConfig","name","InMemoryStorageAdapter","input","existingToken","updatedToken","newToken","query","tokens","t","provider","email","id","userId","update","token","expiredTokens","newState","maxAge","expiredStates","fetcher","createCodeVerifier","randomBytes","createCodeChallenge","verifier","createHash","generateState","OAuth2Client","_b","_c","customFetcher","authUrl","authState","providerInstance","profile","error","savedToken","storedToken","queryWithExpired","expirationBuffer","expiresAt","s","refreshPromises","bufferMs","shouldRefreshAt","seal","d","sealData","unseal","unsealData"],"mappings":"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","file":"index.cjs","sourcesContent":["import { OAuth2Config } from '../types';\nimport { AuthorizationUrlStrategy } from './authorization-url.strategy';\n\nexport class StandardAuthorizationUrlStrategy implements AuthorizationUrlStrategy {\n protected buildUrlParams(params: Record<string, string | undefined>): string {\n const filtered = Object.entries(params)\n .filter(([, value]) => value !== undefined)\n\n .map(([key, value]) => `${key}=${encodeURIComponent(value as string)}`);\n\n return filtered.join('&');\n }\n\n generateAuthorizationUrl(config: OAuth2Config, state: string, codeChallenge?: string): string {\n const params: Record<string, string | undefined> = {\n client_id: config.clientId,\n redirect_uri: config.redirectUri,\n response_type: 'code',\n scope: config.scopes.join(' '),\n state,\n };\n\n // Add PKCE parameters\n if ((config.usePKCE || config.pkce) && codeChallenge) {\n params.code_challenge = codeChallenge;\n params.code_challenge_method = 'S256';\n }\n\n // Merge additional parameters (for both additionalParams and extraAuthParams)\n const extraParams = {\n ...config.additionalParams,\n ...config.extraAuthParams,\n };\n\n Object.assign(params, extraParams);\n\n return `${config.authorizationUrl}?${this.buildUrlParams(params)}`;\n }\n}\n","import { OAuth2Config, OAuth2Token } from '../types';\nimport { TokenExchangeStrategy } from './token-exchange.strategy';\n\nexport class StandardTokenExchangeStrategy implements TokenExchangeStrategy {\n protected buildUrlParams(params: Record<string, string | undefined>): string {\n const filtered = Object.entries(params)\n .filter(([, value]) => value !== undefined)\n .map(([key, value]) => `${key}=${encodeURIComponent(value as string)}`);\n\n return filtered.join('&');\n }\n\n async exchangeCodeForToken(\n code: string,\n config: OAuth2Config,\n codeVerifier?: string,\n ): Promise<OAuth2Token> {\n const params: Record<string, string | undefined> = {\n grant_type: 'authorization_code',\n code,\n redirect_uri: config.redirectUri,\n client_id: config.clientId,\n };\n\n // Handle PKCE\n if ((config.usePKCE || config.pkce) && codeVerifier) {\n params.code_verifier = codeVerifier;\n } else if (config.clientSecret) {\n params.client_secret = config.clientSecret;\n }\n\n const response = await fetch(config.tokenUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: this.buildUrlParams(params),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(`Token exchange failed: ${response.statusText} - ${errorText}`);\n }\n\n const data = await response.json();\n\n // Handle nested response (e.g., Outlook might nest tokens)\n const tokenData = config.responseRootKey ? data[config.responseRootKey] : data;\n\n const now = Date.now();\n const expiresIn = tokenData.expires_in || 3600;\n\n return {\n accessToken: tokenData.access_token,\n refreshToken: tokenData.refresh_token,\n expiresAt: new Date(now + expiresIn * 1000),\n expiresIn: expiresIn,\n tokenType: tokenData.token_type || 'Bearer',\n scope: tokenData.scope,\n createdAt: now,\n raw: data,\n };\n }\n\n async refreshToken(refreshToken: string, config: OAuth2Config): Promise<OAuth2Token> {\n const params: Record<string, string | undefined> = {\n grant_type: 'refresh_token',\n refresh_token: refreshToken,\n client_id: config.clientId,\n };\n\n // Only add client_secret if not using PKCE\n if (!(config.usePKCE || config.pkce) && config.clientSecret) {\n params.client_secret = config.clientSecret;\n }\n\n const response = await fetch(config.tokenUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: this.buildUrlParams(params),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(`Token refresh failed: ${response.statusText} - ${errorText}`);\n }\n\n const data = await response.json();\n const tokenData = config.responseRootKey ? data[config.responseRootKey] : data;\n\n const now = Date.now();\n const expiresIn = tokenData.expires_in || 3600;\n\n return {\n accessToken: tokenData.access_token,\n refreshToken: tokenData.refresh_token || refreshToken,\n expiresAt: new Date(now + expiresIn * 1000),\n expiresIn: expiresIn,\n tokenType: tokenData.token_type || 'Bearer',\n scope: tokenData.scope,\n createdAt: now,\n raw: data,\n };\n }\n}\n","import { OAuth2Config, OAuth2Token } from '../types';\n\nimport { AuthorizationUrlStrategy } from '../strategies/authorization-url.strategy';\nimport { TokenExchangeStrategy } from '../strategies/token-exchange.strategy';\nimport { UserProfile } from './interfaces/profile-fetcher.interface';\nimport { BaseProfileFetcher } from '../profile/base-profile-fetcher';\n\nexport abstract class OAuth2Provider {\n protected authUrlStrategy: AuthorizationUrlStrategy;\n protected tokenStrategy: TokenExchangeStrategy;\n protected profileFetcher?: BaseProfileFetcher;\n\n constructor(\n protected config: OAuth2Config,\n authUrlStrategy?: AuthorizationUrlStrategy,\n tokenStrategy?: TokenExchangeStrategy,\n profileFetcher?: BaseProfileFetcher,\n ) {\n this.authUrlStrategy = authUrlStrategy || this.createAuthorizationUrlStrategy();\n this.tokenStrategy = tokenStrategy || this.createTokenExchangeStrategy();\n this.profileFetcher = profileFetcher;\n }\n\n // Factory methods\n protected abstract createAuthorizationUrlStrategy(): AuthorizationUrlStrategy;\n protected abstract createTokenExchangeStrategy(): TokenExchangeStrategy;\n\n // Profile fetching methods\n async fetchProfile(accessToken: string): Promise<UserProfile> {\n if (!this.profileFetcher) {\n throw new Error('Profile fetcher not configured for this provider');\n }\n return this.profileFetcher.fetchUserInfo(accessToken);\n }\n\n getProfileEndpoint(): string {\n if (!this.profileFetcher) {\n throw new Error('Profile fetcher not configured for this provider');\n }\n return this.profileFetcher.getEndpoint();\n }\n\n setProfileFetcher(profileFetcher: BaseProfileFetcher): void {\n this.profileFetcher = profileFetcher;\n }\n\n hasProfileFetcher(): boolean {\n return !!this.profileFetcher;\n }\n\n generateAuthorizationUrl(state: string, codeChallenge?: string): string {\n return this.authUrlStrategy.generateAuthorizationUrl(this.config, state, codeChallenge);\n }\n\n async exchangeCodeForToken(code: string, codeVerifier?: string): Promise<OAuth2Token> {\n return this.tokenStrategy.exchangeCodeForToken(code, this.config, codeVerifier);\n }\n\n async refreshToken(refreshToken: string): Promise<OAuth2Token> {\n return this.tokenStrategy.refreshToken(refreshToken, this.config);\n }\n}\n","import { AuthorizationUrlStrategy } from '../strategies/authorization-url.strategy';\nimport { StandardAuthorizationUrlStrategy } from '../strategies/standard-authorization-url.strategy';\nimport { StandardTokenExchangeStrategy } from '../strategies/standard-token-exchange.strategy';\nimport { TokenExchangeStrategy } from '../strategies/token-exchange.strategy';\nimport { OAuth2Provider } from './base.provider';\nimport { BaseProfileFetcher } from '../profile/base-profile-fetcher';\n\nexport class GenericOAuth2Provider extends OAuth2Provider {\n constructor(\n config: any,\n authUrlStrategy?: AuthorizationUrlStrategy,\n tokenStrategy?: TokenExchangeStrategy,\n profileFetcher?: BaseProfileFetcher,\n ) {\n super(config, authUrlStrategy, tokenStrategy, profileFetcher);\n }\n\n protected createAuthorizationUrlStrategy(): AuthorizationUrlStrategy {\n return new StandardAuthorizationUrlStrategy();\n }\n\n protected createTokenExchangeStrategy(): TokenExchangeStrategy {\n return new StandardTokenExchangeStrategy();\n }\n}\n","import { UserProfile } from '../providers/interfaces/profile-fetcher.interface';\n\nexport abstract class BaseProfileFetcher {\n constructor(protected profileEndpoint: string) {}\n\n /**\n * Fetch user profile information from the OAuth provider\n * @param accessToken The OAuth access token\n * @returns Promise resolving to standardized user profile\n */\n async fetchUserInfo(accessToken: string): Promise<UserProfile> {\n const response = await fetch(this.profileEndpoint, {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n Accept: 'application/json',\n ...this.getAdditionalHeaders(),\n },\n });\n\n if (!response.ok) {\n throw new Error(\n `Failed to fetch profile from ${this.profileEndpoint}: ${response.statusText}`,\n );\n }\n\n const rawData = await response.json();\n return this.mapToUserProfile(rawData);\n }\n\n /**\n * Map the raw API response to our standardized UserProfile structure\n * Override this method to customize mapping for different providers\n */\n protected abstract mapToUserProfile(rawData: any): UserProfile;\n\n /**\n * Get additional headers if needed for the profile request\n * Override this method to add provider-specific headers\n */\n protected getAdditionalHeaders(): Record<string, string> {\n return {};\n }\n\n /**\n * Get the profile endpoint URL\n */\n getEndpoint(): string {\n return this.profileEndpoint;\n }\n}\n","import { BaseProfileFetcher } from './base-profile-fetcher';\nimport { UserProfile } from '../providers/interfaces/profile-fetcher.interface';\n\nexport class GoogleProfileFetcher extends BaseProfileFetcher {\n constructor() {\n super('https://www.googleapis.com/oauth2/v2/userinfo');\n }\n\n mapToUserProfile(rawData: any): UserProfile {\n return {\n email: rawData.email,\n name: rawData.name,\n id: rawData.id,\n avatar: rawData.picture,\n username: rawData.email,\n raw: rawData,\n };\n }\n}\n","import { BaseProfileFetcher } from './base-profile-fetcher';\nimport { UserProfile } from '../providers/interfaces/profile-fetcher.interface';\n\nexport class GitHubProfileFetcher extends BaseProfileFetcher {\n constructor() {\n super('https://api.github.com/user');\n }\n\n protected mapToUserProfile(rawData: any): UserProfile {\n return {\n email: rawData.email,\n name: rawData.name || rawData.login,\n id: rawData.id?.toString(),\n avatar: rawData.avatar_url,\n username: rawData.login,\n raw: rawData,\n };\n }\n\n protected getAdditionalHeaders(): Record<string, string> {\n return {\n 'User-Agent': 'OAuth2-Token-Manager', // GitHub requires User-Agent\n };\n }\n}\n","import { BaseProfileFetcher } from './base-profile-fetcher';\nimport { UserProfile } from '../providers/interfaces/profile-fetcher.interface';\n\nexport class MicrosoftProfileFetcher extends BaseProfileFetcher {\n constructor() {\n super('https://graph.microsoft.com/v1.0/me');\n }\n\n protected mapToUserProfile(rawData: any): UserProfile {\n return {\n email: rawData.mail || rawData.userPrincipalName,\n name: rawData.displayName,\n id: rawData.id,\n avatar: undefined, // Microsoft Graph doesn't include avatar in basic profile\n username: rawData.userPrincipalName,\n raw: rawData,\n };\n }\n}\n","import { BaseProfileFetcher } from './base-profile-fetcher';\nimport { UserProfile } from '../providers/interfaces/profile-fetcher.interface';\n\nexport interface ProfileMapping {\n email: string;\n name?: string;\n id?: string;\n avatar?: string;\n username?: string;\n}\n\nexport class GenericProfileFetcher extends BaseProfileFetcher {\n constructor(\n profileEndpoint: string,\n private mapping?: ProfileMapping,\n private additionalHeaders?: Record<string, string>,\n ) {\n super(profileEndpoint);\n }\n\n protected mapToUserProfile(rawData: any): UserProfile {\n if (this.mapping) {\n return {\n email: this.getNestedProperty(rawData, this.mapping.email),\n name: this.mapping.name ? this.getNestedProperty(rawData, this.mapping.name) : undefined,\n id: this.mapping.id ? this.getNestedProperty(rawData, this.mapping.id) : undefined,\n avatar: this.mapping.avatar\n ? this.getNestedProperty(rawData, this.mapping.avatar)\n : undefined,\n username: this.mapping.username\n ? this.getNestedProperty(rawData, this.mapping.username)\n : undefined,\n raw: rawData,\n };\n }\n\n // Default generic mapping\n return {\n email: rawData.email || rawData.mail || rawData.emailAddress,\n name: rawData.name || rawData.displayName || rawData.full_name,\n id: rawData.id || rawData.sub || rawData.user_id,\n avatar: rawData.avatar || rawData.picture || rawData.avatar_url,\n username: rawData.username || rawData.login || rawData.preferred_username,\n raw: rawData,\n };\n }\n\n protected getAdditionalHeaders(): Record<string, string> {\n return this.additionalHeaders || {};\n }\n\n private getNestedProperty(obj: any, path: string): any {\n return path.split('.').reduce((current, key) => current?.[key], obj);\n }\n}\n","import { BaseProfileFetcher } from './base-profile-fetcher';\nimport { GoogleProfileFetcher } from './google-profile-fetcher';\nimport { GitHubProfileFetcher } from './github-profile-fetcher';\nimport { MicrosoftProfileFetcher } from './microsoft-profile-fetcher';\nimport { GenericProfileFetcher, ProfileMapping } from './generic-profile-fetcher';\nimport { ProviderType } from '../providers/provider.factory';\nimport { OAuth2Config } from '../types';\n\nexport interface ProfileFetcherOptions {\n profileUrl?: string;\n profileMapping?: ProfileMapping;\n profileHeaders?: Record<string, string>;\n}\n\nexport class ProfileFetcherFactory {\n static createProfileFetcher(\n providerType: ProviderType,\n config: OAuth2Config,\n options?: ProfileFetcherOptions,\n ): BaseProfileFetcher {\n // If custom options are provided, use GenericProfileFetcher\n if (options?.profileUrl) {\n return new GenericProfileFetcher(\n options.profileUrl,\n options.profileMapping,\n options.profileHeaders,\n );\n }\n\n // Use provider-specific fetchers for known providers\n switch (providerType) {\n case 'google':\n return new GoogleProfileFetcher();\n case 'github':\n return new GitHubProfileFetcher();\n case 'microsoft':\n case 'outlook':\n return new MicrosoftProfileFetcher();\n case 'facebook':\n return new GenericProfileFetcher(\n 'https://graph.facebook.com/me?fields=id,name,email,picture',\n );\n case 'generic':\n default:\n // For generic providers, use the profileUrl from config\n const profileUrl = config.profileUrl || config.userInfoUrl;\n if (!profileUrl) {\n throw new Error(`Profile URL must be provided for ${providerType} provider`);\n }\n return new GenericProfileFetcher(profileUrl);\n }\n }\n\n static registerCustomProfileFetcher(\n providerName: string,\n profileFetcher: BaseProfileFetcher,\n ): void {\n // Store custom profile fetchers for later use\n this.customFetchers.set(providerName, profileFetcher);\n }\n\n private static customFetchers = new Map<string, BaseProfileFetcher>();\n\n static getCustomProfileFetcher(providerName: string): BaseProfileFetcher | undefined {\n return this.customFetchers.get(providerName);\n }\n}\n","import { OAuth2Config } from '../types';\nimport { OAuth2Provider } from './base.provider';\nimport { GenericOAuth2Provider } from './generic.provider';\nimport { ProfileFetcherFactory } from '../profile/profile-fetcher-factory';\n\nexport type ProviderType = 'google' | 'github' | 'microsoft' | 'outlook' | 'facebook' | 'generic';\n\nexport interface ProviderFactory {\n createProvider(type: ProviderType, config: OAuth2Config): OAuth2Provider;\n}\n\nexport class OAuth2ProviderFactory implements ProviderFactory {\n private static presetConfigs: Record<string, Partial<OAuth2Config>> = {\n google: {\n authorizationUrl: 'https://accounts.google.com/o/oauth2/v2/auth',\n tokenUrl: 'https://oauth2.googleapis.com/token',\n profileUrl: 'https://www.googleapis.com/oauth2/v2/userinfo',\n usePKCE: true,\n extraAuthParams: {\n access_type: 'offline',\n prompt: 'consent',\n },\n },\n github: {\n authorizationUrl: 'https://github.com/login/oauth/authorize',\n tokenUrl: 'https://github.com/login/oauth/access_token',\n profileUrl: 'https://api.github.com/user',\n },\n microsoft: {\n authorizationUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',\n tokenUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/token',\n profileUrl: 'https://graph.microsoft.com/v1.0/me',\n usePKCE: true,\n },\n outlook: {\n authorizationUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',\n tokenUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/token',\n profileUrl: 'https://graph.microsoft.com/v1.0/me',\n usePKCE: true,\n extraAuthParams: {\n prompt: 'select_account',\n },\n },\n facebook: {\n authorizationUrl: 'https://www.facebook.com/v12.0/dialog/oauth',\n tokenUrl: 'https://graph.facebook.com/v12.0/oauth/access_token',\n profileUrl: 'https://graph.facebook.com/me?fields=id,name,email,picture',\n },\n };\n\n createProvider(type: ProviderType, config: OAuth2Config): OAuth2Provider {\n const presetConfig = type !== 'generic' ? OAuth2ProviderFactory.presetConfigs[type] || {} : {};\n\n // Only override preset values if the user explicitly provides them (not empty strings)\n const mergedConfig: OAuth2Config = {\n ...presetConfig,\n ...config,\n // Don't override preset URLs with empty strings\n authorizationUrl: config.authorizationUrl || presetConfig.authorizationUrl || '',\n tokenUrl: config.tokenUrl || presetConfig.tokenUrl || '',\n profileUrl: config.profileUrl || presetConfig.profileUrl,\n extraAuthParams: {\n ...(presetConfig.extraAuthParams || {}),\n ...(config.extraAuthParams || {}),\n },\n };\n\n const profileFetcher = ProfileFetcherFactory.createProfileFetcher(type, mergedConfig);\n\n return new GenericOAuth2Provider(mergedConfig, undefined, undefined, profileFetcher);\n }\n\n static registerPreset(name: string, config: Partial<OAuth2Config>): void {\n OAuth2ProviderFactory.presetConfigs[name] = config;\n }\n\n static getPresetConfig(name: string): Partial<OAuth2Config> | undefined {\n return OAuth2ProviderFactory.presetConfigs[name];\n }\n}\n","import { AuthorizationState } from '../types';\nimport {\n StorageAdapter,\n StoredToken,\n SaveTokenInput,\n UpdateTokenInput,\n TokenQuery,\n} from './interfaces';\nimport { BaseProfileFetcher } from '../profile/base-profile-fetcher';\n\nexport class InMemoryStorageAdapter implements StorageAdapter {\n private tokens: Map<string, StoredToken> = new Map();\n private states: Map<string, AuthorizationState> = new Map();\n private profileFetchers: Map<string, BaseProfileFetcher> = new Map();\n\n private generateId(): string {\n return Math.random().toString(36).substring(2) + Date.now().toString(36);\n }\n\n // Token operations\n async saveToken(input: SaveTokenInput): Promise<StoredToken> {\n // Check if token with same provider + email exists\n const existingToken = await this.getToken(input.provider, input.email);\n\n if (existingToken) {\n // Replace existing token\n const updatedToken: StoredToken = {\n ...existingToken,\n ...input,\n id: existingToken.id,\n createdAt: existingToken.createdAt,\n updatedAt: new Date(),\n };\n this.tokens.set(existingToken.id, updatedToken);\n return updatedToken;\n }\n\n // Create new token\n const newToken: StoredToken = {\n ...input,\n id: this.generateId(),\n createdAt: new Date(),\n updatedAt: new Date(),\n };\n this.tokens.set(newToken.id, newToken);\n return newToken;\n }\n\n async queryTokens(query: TokenQuery): Promise<StoredToken[]> {\n let tokens = Array.from(this.tokens.values());\n\n // Apply filters\n if (query.id) {\n tokens = tokens.filter((t) => t.id === query.id);\n }\n if (query.provider) {\n tokens = tokens.filter((t) => t.provider === query.provider);\n }\n if (query.userId) {\n tokens = tokens.filter((t) => t.userId === query.userId);\n }\n if (query.email) {\n tokens = tokens.filter((t) => t.email === query.email);\n }\n\n // Filter out expired tokens unless explicitly requested\n if (!query.includeExpired) {\n const now = new Date().getTime();\n tokens = tokens.filter((t) => {\n const expiresAt = new Date(t.token.expiresAt).getTime();\n return expiresAt >= now;\n });\n }\n\n // Apply pagination\n if (query.offset !== undefined) {\n tokens = tokens.slice(query.offset);\n }\n if (query.limit !== undefined) {\n tokens = tokens.slice(0, query.limit);\n }\n\n return tokens;\n }\n\n async getToken(provider: string, email: string): Promise<StoredToken | null> {\n const results = await this.queryTokens({ provider, email, includeExpired: true });\n return results[0] || null;\n }\n\n async getTokenById(id: string): Promise<StoredToken | null> {\n const results = await this.queryTokens({ id, includeExpired: true });\n return results[0] || null;\n }\n\n async getTokensByUserId(userId: string): Promise<StoredToken[]> {\n return this.queryTokens({ userId });\n }\n\n async getTokensByEmail(email: string): Promise<StoredToken[]> {\n return this.queryTokens({ email });\n }\n\n async getTokensByProvider(provider: string): Promise<StoredToken[]> {\n return this.queryTokens({ provider });\n }\n\n async getAccounts(userId: string, provider: string): Promise<StoredToken[]> {\n return this.queryTokens({ userId, provider });\n }\n\n async getTokensForEmail(\n userId: string,\n provider: string,\n email: string,\n ): Promise<StoredToken | null> {\n const results = await this.queryTokens({ userId, provider, email });\n return results[0] || null;\n }\n\n async getTokens(userId: string, provider: string): Promise<StoredToken[]> {\n return this.queryTokens({ userId, provider });\n }\n\n async updateToken(id: string, update: UpdateTokenInput): Promise<StoredToken | null> {\n const token = this.tokens.get(id);\n if (!token) return null;\n\n const updatedToken: StoredToken = {\n ...token,\n ...(update.token && { token: update.token }),\n ...(update.metadata && { metadata: { ...token.metadata, ...update.metadata } }),\n updatedAt: new Date(),\n };\n this.tokens.set(id, updatedToken);\n return updatedToken;\n }\n\n async deleteToken(id: string): Promise<boolean> {\n return this.tokens.delete(id);\n }\n\n async deleteTokenByProviderEmail(provider: string, email: string): Promise<boolean> {\n const token = await this.getToken(provider, email);\n if (!token) return false;\n return this.tokens.delete(token.id);\n }\n\n async deleteExpiredTokens(): Promise<number> {\n const now = new Date().getTime();\n const expiredTokens = Array.from(this.tokens.entries())\n .filter(([, token]) => {\n const expiresAt = new Date(token.token.expiresAt).getTime();\n return expiresAt < now;\n })\n .map(([id]) => id);\n\n expiredTokens.forEach((id) => this.tokens.delete(id));\n return expiredTokens.length;\n }\n\n // Authorization state operations\n async saveAuthorizationState(\n state: Omit<AuthorizationState, 'createdAt'>,\n ): Promise<AuthorizationState> {\n const newState: AuthorizationState = {\n ...state,\n createdAt: new Date(Date.now()),\n };\n this.states.set(state.state, newState);\n return newState;\n }\n\n async getAuthorizationState(state: string): Promise<AuthorizationState | null> {\n return this.states.get(state) || null;\n }\n\n async deleteAuthorizationState(state: string): Promise<boolean> {\n return this.states.delete(state);\n }\n\n async cleanupExpiredStates(): Promise<number> {\n const now = new Date().getTime();\n const maxAge = 10 * 60 * 1000; // 10 minutes\n\n const expiredStates = Array.from(this.states.entries())\n .filter(([, state]) => {\n const stateAge = now - state.createdAt.getTime();\n return stateAge > maxAge;\n })\n .map(([key]) => key);\n\n expiredStates.forEach((key) => this.states.delete(key));\n return expiredStates.length;\n }\n\n // Profile fetcher operations\n registerProfileFetcher(providerName: string, fetcher: BaseProfileFetcher): void {\n