@authsome/ui-core 0.1.9 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types/auth.ts","../src/types/storage.ts","../src/types/observable.ts","../src/utils/errors.ts","../src/locale/en.ts","../src/locale/utils.ts","../src/utils/validation.ts","../src/utils/tokens.ts","../src/utils/cookies.ts","../src/adapters/base-provider.ts","../src/client.ts","../src/flows/types.ts","../src/flows/engine.ts","../src/flows/configs.ts"],"names":["AuthState","AuthErrorType","OAuthProvider","TwoFactorMethod","FlowStep","FlowConfigType","FlowAction"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Core authentication types and interfaces\n */\n\n/**\n * Authentication state enum\n */\nexport enum AuthState {\n AUTHENTICATED = 'authenticated',\n UNAUTHENTICATED = 'unauthenticated',\n LOADING = 'loading',\n ERROR = 'error',\n}\n\n/**\n * User profile interface\n */\nexport interface User {\n id: string;\n email?: string;\n username?: string;\n phone?: string;\n emailVerified?: boolean;\n phoneVerified?: boolean;\n name?: string;\n firstName?: string;\n lastName?: string;\n avatar?: string;\n metadata?: Record<string, unknown>;\n createdAt?: Date;\n updatedAt?: Date;\n \n // Organization fields\n organizationId?: string;\n organizationRole?: string;\n organizationMemberships?: OrganizationMembership[];\n}\n\n/**\n * Session interface\n */\nexport interface Session {\n id: string;\n userId: string;\n token: string;\n expiresAt?: Date;\n createdAt?: Date;\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Session data with user and session combined\n * Used for efficient retrieval of both user and session in one call\n */\nexport interface SessionData {\n user: User;\n session: Session;\n expiresAt: number;\n}\n\n/**\n * Auth error types\n */\nexport enum AuthErrorType {\n INVALID_CREDENTIALS = 'invalid_credentials',\n USER_NOT_FOUND = 'user_not_found',\n USER_ALREADY_EXISTS = 'user_already_exists',\n INVALID_TOKEN = 'invalid_token',\n TOKEN_EXPIRED = 'token_expired',\n NETWORK_ERROR = 'network_error',\n VALIDATION_ERROR = 'validation_error',\n MFA_REQUIRED = 'mfa_required',\n EMAIL_NOT_VERIFIED = 'email_not_verified',\n PHONE_NOT_VERIFIED = 'phone_not_verified',\n RATE_LIMIT_EXCEEDED = 'rate_limit_exceeded',\n UNKNOWN_ERROR = 'unknown_error',\n}\n\n/**\n * Auth error class\n * \n * Extends Error to provide proper error handling with auth-specific context\n */\nexport class AuthError extends Error {\n public readonly type: AuthErrorType;\n public readonly details?: Record<string, unknown>;\n public readonly code?: string | number;\n public readonly originalError?: unknown;\n\n constructor(\n message: string,\n type: AuthErrorType = AuthErrorType.UNKNOWN_ERROR,\n options?: {\n details?: Record<string, unknown>;\n code?: string | number;\n originalError?: unknown;\n }\n ) {\n super(message);\n this.name = 'AuthError';\n this.type = type;\n this.details = options?.details;\n this.code = options?.code;\n this.originalError = options?.originalError;\n\n // Maintains proper stack trace for where our error was thrown (only available on V8)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, AuthError);\n }\n }\n}\n\n/**\n * Auth context state\n */\nexport interface AuthContext {\n state: AuthState;\n user: User | null;\n session: Session | null;\n error: AuthError | null;\n isAuthenticated: boolean;\n isLoading: boolean;\n}\n\n/**\n * OAuth provider types\n */\nexport enum OAuthProvider {\n GOOGLE = 'google',\n GITHUB = 'github',\n FACEBOOK = 'facebook',\n TWITTER = 'twitter',\n MICROSOFT = 'microsoft',\n APPLE = 'apple',\n LINKEDIN = 'linkedin',\n DISCORD = 'discord',\n}\n\n/**\n * OAuth configuration\n */\nexport interface OAuthConfig {\n provider: OAuthProvider;\n clientId: string;\n redirectUri: string;\n scope?: string[];\n state?: string;\n}\n\n/**\n * 2FA method types\n */\nexport enum TwoFactorMethod {\n TOTP = 'totp',\n SMS = 'sms',\n EMAIL = 'email',\n BACKUP_CODE = 'backup_code',\n}\n\n/**\n * 2FA configuration\n */\nexport interface TwoFactorConfig {\n method: TwoFactorMethod;\n enabled: boolean;\n verified?: boolean;\n}\n\n/**\n * Passkey/WebAuthn types\n */\nexport interface PasskeyCredential {\n id: string;\n name?: string;\n createdAt?: Date;\n lastUsedAt?: Date;\n}\n\n/**\n * Validation error\n */\nexport interface ValidationError {\n field: string;\n message: string;\n code?: string;\n}\n\n/**\n * Organization interface\n */\nexport interface Organization {\n id: string;\n name: string;\n slug: string;\n logoUrl?: string;\n createdAt?: Date;\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Organization membership interface\n */\nexport interface OrganizationMembership {\n organization: Organization;\n role: 'owner' | 'admin' | 'member';\n permissions?: string[];\n}\n\n/**\n * Device Flow types (RFC 8628 - OAuth 2.0 Device Authorization Grant)\n */\n\n/**\n * Request to initiate device flow\n * Used by CLI/device applications to start the authorization process\n */\nexport interface DeviceFlowInitiateRequest {\n clientId: string;\n scope?: string;\n}\n\n/**\n * Response from device flow initiation\n * Contains codes and URIs needed for user authorization\n */\nexport interface DeviceFlowInitiateResponse {\n /** The device verification code (long, secret code for polling) */\n deviceCode: string;\n /** The user-facing code to enter in browser (short, easy-to-type) */\n userCode: string;\n /** The URL to visit for verification */\n verificationUri: string;\n /** Optional complete URL with user_code pre-filled */\n verificationUriComplete?: string;\n /** Lifetime of device_code and user_code in seconds */\n expiresIn: number;\n /** Minimum polling interval in seconds */\n interval: number;\n}\n\n/**\n * Request to verify a user-entered device code\n * Used by the web UI when user enters their code\n */\nexport interface DeviceCodeVerifyRequest {\n userCode: string;\n}\n\n/**\n * Response from device code verification\n * Contains information about the pending authorization\n */\nexport interface DeviceCodeVerifyResponse {\n /** Whether the code is valid */\n valid: boolean;\n /** Client application name requesting access */\n clientName?: string;\n /** Scopes being requested */\n scopes?: string[];\n /** Time remaining before code expires */\n expiresIn?: number;\n}\n\n/**\n * Request to authorize/deny a device\n * Used when user approves or denies the authorization request\n */\nexport interface DeviceAuthorizeRequest {\n userCode: string;\n action: 'approve' | 'deny';\n}\n\n/**\n * Request to poll for device token\n * Used by CLI/device to check if user has authorized\n */\nexport interface DeviceTokenPollRequest {\n deviceCode: string;\n clientId: string;\n}\n\n/**\n * Status returned when polling is not yet complete\n */\nexport type DeviceTokenPollStatus = \n | 'authorization_pending' // User hasn't authorized yet\n | 'slow_down' // Polling too frequently\n | 'expired_token' // Device code expired\n | 'access_denied'; // User denied authorization\n\n/**\n * Response from device token polling\n * Either contains the auth response or a status indicator\n */\nexport interface DeviceTokenPollResponse {\n status: DeviceTokenPollStatus;\n}\n","/**\n * Storage abstraction for auth tokens and data\n */\n\n/**\n * Storage interface\n */\nexport interface Storage {\n /**\n * Get item from storage\n */\n getItem(key: string): Promise<string | null> | string | null;\n\n /**\n * Set item in storage\n */\n setItem(key: string, value: string): Promise<void> | void;\n\n /**\n * Remove item from storage\n */\n removeItem(key: string): Promise<void> | void;\n\n /**\n * Clear all items from storage\n */\n clear(): Promise<void> | void;\n}\n\n/**\n * Storage adapter for localStorage\n */\nexport class LocalStorageAdapter implements Storage {\n getItem(key: string): string | null {\n if (typeof window === 'undefined') return null;\n return window.localStorage.getItem(key);\n }\n\n setItem(key: string, value: string): void {\n if (typeof window === 'undefined') return;\n window.localStorage.setItem(key, value);\n }\n\n removeItem(key: string): void {\n if (typeof window === 'undefined') return;\n window.localStorage.removeItem(key);\n }\n\n clear(): void {\n if (typeof window === 'undefined') return;\n window.localStorage.clear();\n }\n}\n\n/**\n * Storage adapter for sessionStorage\n */\nexport class SessionStorageAdapter implements Storage {\n getItem(key: string): string | null {\n if (typeof window === 'undefined') return null;\n return window.sessionStorage.getItem(key);\n }\n\n setItem(key: string, value: string): void {\n if (typeof window === 'undefined') return;\n window.sessionStorage.setItem(key, value);\n }\n\n removeItem(key: string): void {\n if (typeof window === 'undefined') return;\n window.sessionStorage.removeItem(key);\n }\n\n clear(): void {\n if (typeof window === 'undefined') return;\n window.sessionStorage.clear();\n }\n}\n\n/**\n * In-memory storage adapter (for testing or SSR)\n */\nexport class MemoryStorageAdapter implements Storage {\n private store: Map<string, string> = new Map();\n\n getItem(key: string): string | null {\n return this.store.get(key) ?? null;\n }\n\n setItem(key: string, value: string): void {\n this.store.set(key, value);\n }\n\n removeItem(key: string): void {\n this.store.delete(key);\n }\n\n clear(): void {\n this.store.clear();\n }\n}\n\n","/**\n * Observable pattern for state management across frameworks\n */\n\nexport type Listener<T> = (value: T) => void;\nexport type Unsubscribe = () => void;\n\n/**\n * Observable state container\n */\nexport class Observable<T> {\n private value: T;\n private listeners: Set<Listener<T>> = new Set();\n\n constructor(initialValue: T) {\n this.value = initialValue;\n }\n\n /**\n * Get current value\n */\n getValue(): T {\n return this.value;\n }\n\n /**\n * Set new value and notify listeners\n */\n setValue(newValue: T): void {\n if (this.value !== newValue) {\n this.value = newValue;\n this.notify();\n }\n }\n\n /**\n * Update value with a function\n */\n update(updater: (current: T) => T): void {\n this.setValue(updater(this.value));\n }\n\n /**\n * Subscribe to value changes\n */\n subscribe(listener: Listener<T>): Unsubscribe {\n this.listeners.add(listener);\n // Immediately call listener with current value\n listener(this.value);\n\n // Return unsubscribe function\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n /**\n * Notify all listeners\n */\n private notify(): void {\n this.listeners.forEach((listener) => listener(this.value));\n }\n\n /**\n * Clear all listeners\n */\n clearListeners(): void {\n this.listeners.clear();\n }\n\n /**\n * Get number of listeners\n */\n getListenerCount(): number {\n return this.listeners.size;\n }\n}\n\n","/**\n * Error handling utilities\n */\n\nimport { AuthError, AuthErrorType } from '../types';\n\n/**\n * Create an auth error\n * \n * @deprecated Use `new AuthError()` directly instead\n */\nexport function createAuthError(\n type: AuthErrorType,\n message: string,\n details?: Record<string, unknown>,\n code?: string | number\n): AuthError {\n return new AuthError(message, type, { details, code });\n}\n\n/**\n * Check if an error is an auth error\n */\nexport function isAuthError(error: unknown): error is AuthError {\n return error instanceof AuthError;\n}\n\n/**\n * Convert unknown error to auth error\n */\nexport function toAuthError(error: unknown): AuthError {\n if (isAuthError(error)) {\n return error;\n }\n\n if (error instanceof Error) {\n return new AuthError(error.message, AuthErrorType.UNKNOWN_ERROR, {\n details: {\n originalError: error.name,\n stack: error.stack,\n },\n });\n }\n\n if (typeof error === 'string') {\n return new AuthError(error, AuthErrorType.UNKNOWN_ERROR);\n }\n\n return new AuthError(\n 'An unknown error occurred',\n AuthErrorType.UNKNOWN_ERROR,\n { details: { error } }\n );\n}\n\n/**\n * Check if error is a network error\n */\nexport function isNetworkError(error: unknown): boolean {\n if (error instanceof Error) {\n return (\n error.name === 'NetworkError' ||\n error.message.includes('network') ||\n error.message.includes('fetch')\n );\n }\n return false;\n}\n\n/**\n * Check if error indicates authentication is required\n */\nexport function isUnauthenticatedError(error: unknown): boolean {\n if (isAuthError(error)) {\n return (\n error.type === AuthErrorType.INVALID_TOKEN ||\n error.type === AuthErrorType.TOKEN_EXPIRED\n );\n }\n return false;\n}\n\n/**\n * Check if error requires MFA\n */\nexport function isMFARequiredError(error: unknown): boolean {\n if (isAuthError(error)) {\n return error.type === AuthErrorType.MFA_REQUIRED;\n }\n return false;\n}\n","/**\n * English (US) locale - Default translations\n */\n\nimport type { AuthLocale } from './index';\n\nexport const enLocale: AuthLocale = {\n common: {\n loading: 'Loading...',\n submit: 'Submit',\n cancel: 'Cancel',\n continue: 'Continue',\n back: 'Back',\n or: 'or',\n optional: 'optional',\n },\n \n auth: {\n signIn: 'Sign In',\n signUp: 'Sign Up',\n signOut: 'Sign Out',\n email: 'Email',\n password: 'Password',\n confirmPassword: 'Confirm Password',\n username: 'Username',\n phone: 'Phone',\n rememberMe: 'Remember me',\n forgotPassword: 'Forgot password?',\n continueWith: 'Continue with {provider}',\n orContinueWith: 'Or continue with',\n },\n \n oauth: {\n google: 'Google',\n github: 'GitHub',\n microsoft: 'Microsoft',\n facebook: 'Facebook',\n apple: 'Apple',\n discord: 'Discord',\n twitter: 'Twitter',\n linkedin: 'LinkedIn',\n chooseProvider: 'Choose Your Provider',\n signInPreferred: 'Sign in with your preferred account',\n },\n \n magicLink: {\n sendLink: 'Send magic link',\n checkEmail: 'Check your email',\n linkSent: 'Magic link sent! Check your email to continue.',\n enterEmail: 'Enter your email to receive a magic link',\n },\n \n phone: {\n enterPhone: 'Enter your phone number',\n sendCode: 'Send code',\n enterCode: 'Enter verification code',\n verifyPhone: 'Verify phone number',\n codeLabel: 'Verification code',\n },\n \n mfa: {\n required: 'Two-factor authentication required',\n selectMethod: 'Select verification method',\n verify: 'Verify',\n enterCode: 'Enter verification code',\n sms: 'SMS',\n authenticator: 'Authenticator app',\n email: 'Email',\n },\n \n passkey: {\n signInWith: 'Sign in with passkey',\n register: 'Register passkey',\n usePasskey: 'Use passkey',\n },\n \n deviceFlow: {\n title: 'Authorize Device',\n subtitle: 'Enter the code displayed on your device',\n enterCode: 'Authorize Device',\n enterCodeDescription: 'Enter the code displayed on your device or CLI',\n codeLabel: 'Device Code',\n codePlaceholder: 'XXXX-XXXX',\n codeHint: 'Enter the 8-character code shown on your device',\n verify: 'Verify Code',\n verifyCode: 'Verify Code',\n invalidCode: 'Invalid code. Please check and try again.',\n noCode: \"Don't have a code?\",\n getCodeHelp: 'Get help',\n authorizationTitle: 'Authorize Application',\n authorizationSubtitle: 'An application is requesting access to your account',\n authorizeTitle: 'Authorize Device',\n authorizeDescription: 'An application is requesting access to your account',\n requestingAccess: 'is requesting access to:',\n codeConfirm: 'Confirm this is your code:',\n requestedPermissions: 'Requested permissions:',\n securityWarning: 'Only approve this request if you initiated it',\n scopes: 'Requested permissions',\n approve: 'Approve',\n deny: 'Deny',\n authorizedTitle: 'Device Authorized',\n authorizedMessage: 'You can now return to your device to continue',\n authorizedDescription: 'Your device has been successfully authorized',\n authorizedHint: 'You can close this window and return to your CLI or device',\n returnToCli: 'Return to CLI',\n deniedTitle: 'Access Denied',\n deniedMessage: 'You have denied access to this device',\n deniedDescription: 'The device authorization request has been denied',\n deniedHint: 'You can close this window',\n },\n \n signUp: {\n title: 'Create Account',\n subtitle: 'Get started with your account',\n haveAccount: 'Already have an account?',\n signInLink: 'Sign in',\n agreeToTerms: 'I agree to the {terms}',\n terms: 'terms and conditions',\n },\n \n signIn: {\n title: 'Sign In',\n subtitle: 'Enter your email to continue',\n noAccount: \"Don't have an account?\",\n signUpLink: 'Sign up',\n enterEmail: 'Enter your email to continue',\n },\n \n validation: {\n emailRequired: 'Email is required',\n emailInvalid: 'Invalid email address',\n passwordRequired: 'Password is required',\n passwordTooShort: 'Password must be at least {min} characters',\n passwordRequireUppercase: 'Password must contain an uppercase letter',\n passwordRequireLowercase: 'Password must contain a lowercase letter',\n passwordRequireNumber: 'Password must contain a number',\n passwordRequireSpecial: 'Password must contain a special character',\n passwordMismatch: 'Passwords do not match',\n usernameRequired: 'Username is required',\n usernameInvalid: 'Username must be 3-30 characters and contain only letters, numbers, underscores, and hyphens',\n phoneRequired: 'Phone number is required',\n phoneInvalid: 'Invalid phone number',\n codeRequired: 'Verification code is required',\n codeInvalid: 'Invalid verification code',\n fieldRequired: '{field} is required',\n termsRequired: 'You must agree to the terms and conditions',\n },\n \n errors: {\n invalidCredentials: 'Invalid email or password',\n userNotFound: 'User not found',\n userExists: 'User already exists',\n invalidToken: 'Invalid or expired token',\n tokenExpired: 'Token has expired',\n networkError: 'Network error. Please try again.',\n mfaRequired: 'Two-factor authentication required',\n emailNotVerified: 'Email not verified',\n phoneNotVerified: 'Phone number not verified',\n rateLimitExceeded: 'Too many attempts. Please try again later.',\n unknownError: 'An unknown error occurred',\n generic: 'Something went wrong. Please try again.',\n },\n \n success: {\n signedIn: 'Successfully signed in',\n signedUp: 'Account created successfully',\n signedOut: 'Successfully signed out',\n linkSent: 'Link sent successfully',\n codeSent: 'Verification code sent',\n verified: 'Successfully verified',\n welcome: 'Welcome, {name}!',\n },\n \n placeholders: {\n email: 'john@example.com',\n password: 'Enter your password',\n confirmPassword: 'Confirm your password',\n username: 'johndoe',\n phone: '+1234567890',\n code: '123456',\n fullName: 'John Doe',\n },\n};\n\n","/**\n * Locale utility functions\n */\n\nimport type { AuthLocale, DeepPartial } from './index';\nimport { enLocale } from './en';\n\n/**\n * Default locale (English)\n */\nexport const defaultLocale = enLocale;\n\n/**\n * Deep merge two objects\n */\nfunction deepMerge<T extends Record<string, any>>(target: T, source: DeepPartial<T>): T {\n const result = { ...target };\n \n for (const key in source) {\n if (source[key] !== undefined) {\n if (\n typeof source[key] === 'object' &&\n source[key] !== null &&\n !Array.isArray(source[key]) &&\n typeof result[key] === 'object' &&\n result[key] !== null\n ) {\n result[key] = deepMerge(result[key] as any, source[key] as any);\n } else {\n result[key] = source[key] as any;\n }\n }\n }\n \n return result;\n}\n\n/**\n * Create a complete locale by merging overrides with the default English locale\n * \n * @param overrides - Partial locale object with custom translations\n * @returns Complete locale object with all required keys\n * \n * @example\n * ```typescript\n * const spanishLocale = createLocale({\n * auth: {\n * signIn: 'Iniciar sesión',\n * signUp: 'Registrarse',\n * }\n * });\n * ```\n */\nexport function createLocale(overrides?: DeepPartial<AuthLocale>): AuthLocale {\n if (!overrides) {\n return defaultLocale;\n }\n \n return deepMerge(defaultLocale, overrides);\n}\n\n/**\n * Interpolate template string with values\n * \n * Replaces {key} placeholders with corresponding values from the provided object.\n * \n * @param template - Template string with {key} placeholders\n * @param values - Object with key-value pairs for interpolation\n * @returns Interpolated string\n * \n * @example\n * ```typescript\n * interpolate('Hello, {name}!', { name: 'John' })\n * // Returns: \"Hello, John!\"\n * \n * interpolate('Password must be at least {min} characters', { min: '8' })\n * // Returns: \"Password must be at least 8 characters\"\n * ```\n */\nexport function interpolate(template: string, values: Record<string, string | number>): string {\n return template.replace(/\\{(\\w+)\\}/g, (match, key) => {\n return values[key] !== undefined ? String(values[key]) : match;\n });\n}\n\n/**\n * Get a nested property from an object using dot notation\n * \n * @param obj - Object to search\n * @param path - Dot-notation path (e.g., 'auth.signIn')\n * @returns Value at path or undefined\n */\nexport function getNestedProperty(obj: any, path: string): any {\n return path.split('.').reduce((current, key) => current?.[key], obj);\n}\n\n","/**\n * Validation utilities\n */\n\nimport { ValidationError } from '../types';\nimport type { AuthLocale } from '../locale';\nimport { defaultLocale, interpolate } from '../locale/utils';\n\n/**\n * Email regex pattern\n */\nconst EMAIL_REGEX = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\n/**\n * Phone regex pattern (basic international format)\n */\nconst PHONE_REGEX = /^\\+?[1-9]\\d{1,14}$/;\n\n/**\n * Username regex pattern (alphanumeric, underscores, hyphens, 3-30 chars)\n */\nconst USERNAME_REGEX = /^[a-zA-Z0-9_-]{3,30}$/;\n\n/**\n * Validate email address\n */\nexport function validateEmail(email: string, locale?: AuthLocale): ValidationError | null {\n const messages = locale?.validation || defaultLocale.validation;\n \n if (!email) {\n return { field: 'email', message: messages.emailRequired };\n }\n\n if (!EMAIL_REGEX.test(email)) {\n return { field: 'email', message: messages.emailInvalid };\n }\n\n return null;\n}\n\n/**\n * Validate password\n */\nexport function validatePassword(\n password: string,\n options: {\n minLength?: number;\n requireUppercase?: boolean;\n requireLowercase?: boolean;\n requireNumber?: boolean;\n requireSpecial?: boolean;\n locale?: AuthLocale;\n } = {}\n): ValidationError | null {\n const {\n minLength = 8,\n requireUppercase = true,\n requireLowercase = true,\n requireNumber = true,\n requireSpecial = false,\n locale,\n } = options;\n \n const messages = locale?.validation || defaultLocale.validation;\n\n if (!password) {\n return { field: 'password', message: messages.passwordRequired };\n }\n\n if (password.length < minLength) {\n return {\n field: 'password',\n message: interpolate(messages.passwordTooShort, { min: minLength.toString() }),\n };\n }\n\n if (requireUppercase && !/[A-Z]/.test(password)) {\n return {\n field: 'password',\n message: messages.passwordRequireUppercase,\n };\n }\n\n if (requireLowercase && !/[a-z]/.test(password)) {\n return {\n field: 'password',\n message: messages.passwordRequireLowercase,\n };\n }\n\n if (requireNumber && !/\\d/.test(password)) {\n return { field: 'password', message: messages.passwordRequireNumber };\n }\n\n if (requireSpecial && !/[!@#$%^&*(),.?\":{}|<>]/.test(password)) {\n return {\n field: 'password',\n message: messages.passwordRequireSpecial,\n };\n }\n\n return null;\n}\n\n/**\n * Validate phone number\n */\nexport function validatePhone(phone: string, locale?: AuthLocale): ValidationError | null {\n const messages = locale?.validation || defaultLocale.validation;\n \n if (!phone) {\n return { field: 'phone', message: messages.phoneRequired };\n }\n\n if (!PHONE_REGEX.test(phone)) {\n return {\n field: 'phone',\n message: messages.phoneInvalid,\n };\n }\n\n return null;\n}\n\n/**\n * Validate username\n */\nexport function validateUsername(username: string, locale?: AuthLocale): ValidationError | null {\n const messages = locale?.validation || defaultLocale.validation;\n \n if (!username) {\n return { field: 'username', message: messages.usernameRequired };\n }\n\n if (!USERNAME_REGEX.test(username)) {\n return {\n field: 'username',\n message: messages.usernameInvalid,\n };\n }\n\n return null;\n}\n\n/**\n * Validate 2FA code\n */\nexport function validate2FACode(code: string, locale?: AuthLocale): ValidationError | null {\n const messages = locale?.validation || defaultLocale.validation;\n \n if (!code) {\n return { field: 'code', message: messages.codeRequired };\n }\n\n // TOTP codes are typically 6 digits\n if (!/^\\d{6}$/.test(code)) {\n return { field: 'code', message: messages.codeInvalid };\n }\n\n return null;\n}\n\n/**\n * Validate required field\n */\nexport function validateRequired(\n value: unknown,\n fieldName: string,\n locale?: AuthLocale\n): ValidationError | null {\n const messages = locale?.validation || defaultLocale.validation;\n \n if (!value || (typeof value === 'string' && !value.trim())) {\n return { \n field: fieldName, \n message: interpolate(messages.fieldRequired, { field: fieldName }) \n };\n }\n return null;\n}\n\n","/**\n * Token management utilities\n */\n\nimport { Storage, LocalStorageAdapter } from '../types';\n\nconst TOKEN_KEY = 'authsome_token';\nconst REFRESH_TOKEN_KEY = 'authsome_refresh_token';\n\n/**\n * Token manager class\n */\nexport class TokenManager {\n private storage: Storage;\n\n constructor(storage: Storage = new LocalStorageAdapter()) {\n this.storage = storage;\n }\n\n /**\n * Get access token\n */\n async getToken(): Promise<string | null> {\n return await Promise.resolve(this.storage.getItem(TOKEN_KEY));\n }\n\n /**\n * Set access token\n */\n async setToken(token: string): Promise<void> {\n await Promise.resolve(this.storage.setItem(TOKEN_KEY, token));\n }\n\n /**\n * Remove access token\n */\n async removeToken(): Promise<void> {\n await Promise.resolve(this.storage.removeItem(TOKEN_KEY));\n }\n\n /**\n * Get refresh token\n */\n async getRefreshToken(): Promise<string | null> {\n return await Promise.resolve(this.storage.getItem(REFRESH_TOKEN_KEY));\n }\n\n /**\n * Set refresh token\n */\n async setRefreshToken(token: string): Promise<void> {\n await Promise.resolve(this.storage.setItem(REFRESH_TOKEN_KEY, token));\n }\n\n /**\n * Remove refresh token\n */\n async removeRefreshToken(): Promise<void> {\n await Promise.resolve(this.storage.removeItem(REFRESH_TOKEN_KEY));\n }\n\n /**\n * Clear all tokens\n */\n async clearTokens(): Promise<void> {\n await this.removeToken();\n await this.removeRefreshToken();\n }\n\n /**\n * Check if token is expired\n */\n isTokenExpired(token: string): boolean {\n try {\n const payload = this.decodeToken(token);\n if (!payload.exp) return false;\n\n // Check if token expires in the next 60 seconds\n const expiresAt = (payload.exp as number) * 1000;\n const now = Date.now();\n return (expiresAt - now) < 60000;\n } catch {\n return true;\n }\n }\n\n /**\n * Decode JWT token (without verification)\n */\n private decodeToken(token: string): Record<string, unknown> {\n const parts = token.split('.');\n if (parts.length !== 3) {\n throw new Error('Invalid token format');\n }\n\n const payload = parts[1];\n const decoded = atob(payload);\n return JSON.parse(decoded);\n }\n}\n\n","/**\n * Cookie utility functions\n * Framework-agnostic helpers for cookie parsing and serialization\n */\n\nimport type { CookieData } from '../types';\n\n/**\n * Parse Set-Cookie header value into CookieData\n * @param setCookieHeader - The Set-Cookie header value\n * @returns Parsed cookie data\n */\nexport function parseCookie(setCookieHeader: string): CookieData | null {\n if (!setCookieHeader) return null;\n\n const parts = setCookieHeader.split(';').map(p => p.trim());\n if (parts.length === 0) return null;\n\n const [nameValue] = parts;\n const [name, value] = nameValue.split('=');\n if (!name || value === undefined) return null;\n\n const cookieData: CookieData = { name, value };\n\n // Parse options\n const options: CookieData['options'] = {};\n for (let i = 1; i < parts.length; i++) {\n const part = parts[i];\n const lowerPart = part.toLowerCase();\n \n if (lowerPart === 'httponly') {\n options.httpOnly = true;\n } else if (lowerPart === 'secure') {\n options.secure = true;\n } else if (lowerPart.startsWith('path=')) {\n options.path = part.substring(5);\n } else if (lowerPart.startsWith('domain=')) {\n options.domain = part.substring(7);\n } else if (lowerPart.startsWith('max-age=')) {\n const maxAge = parseInt(part.substring(8), 10);\n if (!isNaN(maxAge)) {\n options.maxAge = maxAge;\n }\n } else if (lowerPart.startsWith('expires=')) {\n const expiresStr = part.substring(8);\n const expiresDate = new Date(expiresStr);\n if (!isNaN(expiresDate.getTime())) {\n options.expires = expiresDate;\n }\n } else if (lowerPart.startsWith('samesite=')) {\n const sameSiteValue = lowerPart.substring(9);\n if (sameSiteValue === 'strict' || sameSiteValue === 'lax' || sameSiteValue === 'none') {\n options.sameSite = sameSiteValue;\n }\n }\n }\n\n if (Object.keys(options).length > 0) {\n cookieData.options = options;\n }\n\n return cookieData;\n}\n\n/**\n * Extract multiple cookies from Set-Cookie headers\n * @param setCookieHeaders - Array of Set-Cookie header values or single string\n * @returns Array of parsed cookies\n */\nexport function extractCookiesFromHeaders(setCookieHeaders: string | string[]): CookieData[] {\n const headers = Array.isArray(setCookieHeaders) ? setCookieHeaders : [setCookieHeaders];\n const cookies: CookieData[] = [];\n\n for (const header of headers) {\n const cookie = parseCookie(header);\n if (cookie) {\n cookies.push(cookie);\n }\n }\n\n return cookies;\n}\n\n/**\n * Serialize a CookieData object into a Set-Cookie header value\n * @param cookie - The cookie data to serialize\n * @returns Set-Cookie header value\n */\nexport function serializeCookie(cookie: CookieData): string {\n const parts: string[] = [`${cookie.name}=${cookie.value}`];\n\n if (cookie.options) {\n const opts = cookie.options;\n\n if (opts.path) {\n parts.push(`Path=${opts.path}`);\n }\n\n if (opts.domain) {\n parts.push(`Domain=${opts.domain}`);\n }\n\n if (opts.expires) {\n parts.push(`Expires=${opts.expires.toUTCString()}`);\n }\n\n if (opts.maxAge !== undefined) {\n parts.push(`Max-Age=${opts.maxAge}`);\n }\n\n if (opts.httpOnly) {\n parts.push('HttpOnly');\n }\n\n if (opts.secure) {\n parts.push('Secure');\n }\n\n if (opts.sameSite) {\n const sameSite = opts.sameSite.charAt(0).toUpperCase() + opts.sameSite.slice(1);\n parts.push(`SameSite=${sameSite}`);\n }\n }\n\n return parts.join('; ');\n}\n\n/**\n * Parse Cookie header value into key-value pairs\n * @param cookieHeader - The Cookie header value\n * @returns Object with cookie name-value pairs\n */\nexport function parseCookieOptions(cookieHeader: string): Record<string, string> {\n const cookies: Record<string, string> = {};\n\n if (!cookieHeader) return cookies;\n\n const pairs = cookieHeader.split(';').map(p => p.trim());\n for (const pair of pairs) {\n const [name, value] = pair.split('=');\n if (name && value !== undefined) {\n cookies[name.trim()] = value.trim();\n }\n }\n\n return cookies;\n}\n\n/**\n * Convert cookie object to Cookie header string\n * @param cookies - Object with cookie name-value pairs\n * @returns Cookie header value\n */\nexport function serializeCookies(cookies: Record<string, string>): string {\n return Object.entries(cookies)\n .map(([key, value]) => `${key}=${value}`)\n .join('; ');\n}\n\n","/**\n * Base auth provider implementation\n */\n\nimport type {\n AuthProvider,\n AuthResponse,\n SignInRequest,\n SignUpRequest,\n UpdateUserRequest,\n PasswordChangeRequest,\n PasswordResetRequest,\n PasswordResetConfirmRequest,\n OAuthSignInRequest,\n OAuthCallbackRequest,\n MagicLinkRequest,\n MagicLinkVerifyRequest,\n PhoneAuthRequest,\n PhoneVerifyRequest,\n TwoFactorSetupRequest,\n TwoFactorSetupResponse,\n TwoFactorVerifyRequest,\n PasskeyRegisterRequest,\n PasskeyAuthRequest,\n User,\n Session,\n SessionData,\n OAuthProvider,\n TwoFactorMethod,\n PasskeyCredential,\n AuthError,\n ProviderConfig,\n RequestContext,\n CookieData,\n DeviceFlowInitiateRequest,\n DeviceFlowInitiateResponse,\n DeviceCodeVerifyRequest,\n DeviceCodeVerifyResponse,\n DeviceAuthorizeRequest,\n DeviceTokenPollRequest,\n DeviceTokenPollResponse,\n} from '../types';\nimport { toAuthError } from '../utils';\n\n/**\n * Base provider class with common functionality\n */\nexport abstract class BaseAuthProvider implements AuthProvider {\n abstract readonly name: string;\n protected config: ProviderConfig = {};\n protected initialized = false;\n\n /**\n * Initialize the provider\n */\n async initialize(config: ProviderConfig): Promise<void> {\n this.config = config;\n this.initialized = true;\n }\n\n /**\n * Ensure provider is initialized\n */\n protected ensureInitialized(): void {\n if (!this.initialized) {\n throw new Error(`Provider ${this.name} is not initialized`);\n }\n }\n\n /**\n * Make HTTP request\n */\n protected async request<T>(\n url: string,\n options: RequestInit = {}\n ): Promise<T> {\n const response = await fetch(url, {\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({\n message: response.statusText,\n }));\n throw error;\n }\n\n return response.json();\n }\n\n // Abstract methods that must be implemented by subclasses\n abstract signIn(request: SignInRequest): Promise<AuthResponse>;\n abstract signUp(request: SignUpRequest): Promise<AuthResponse>;\n abstract signOut(): Promise<void>;\n abstract getCurrentUser(): Promise<User | null>;\n abstract getCurrentSession(): Promise<Session | null>;\n abstract getCurrentSessionData(): Promise<SessionData | null>;\n abstract refreshSession(): Promise<Session>;\n abstract updateUser(request: UpdateUserRequest): Promise<User>;\n abstract changePassword(request: PasswordChangeRequest): Promise<void>;\n abstract requestPasswordReset(request: PasswordResetRequest): Promise<void>;\n abstract confirmPasswordReset(request: PasswordResetConfirmRequest): Promise<void>;\n abstract oauthSignIn(request: OAuthSignInRequest): Promise<string>;\n abstract oauthCallback(request: OAuthCallbackRequest): Promise<AuthResponse>;\n abstract getOAuthProviders(): Promise<OAuthProvider[]>;\n abstract sendMagicLink(request: MagicLinkRequest): Promise<void>;\n abstract verifyMagicLink(request: MagicLinkVerifyRequest): Promise<AuthResponse>;\n abstract sendPhoneCode(request: PhoneAuthRequest): Promise<void>;\n abstract verifyPhoneCode(request: PhoneVerifyRequest): Promise<AuthResponse>;\n abstract setupTwoFactor(request: TwoFactorSetupRequest): Promise<TwoFactorSetupResponse>;\n abstract verifyTwoFactor(request: TwoFactorVerifyRequest): Promise<AuthResponse>;\n abstract disableTwoFactor(): Promise<void>;\n abstract getTwoFactorStatus(): Promise<TwoFactorMethod[]>;\n abstract registerPasskey(request: PasskeyRegisterRequest): Promise<PasskeyCredential>;\n abstract authenticatePasskey(request: PasskeyAuthRequest): Promise<AuthResponse>;\n abstract listPasskeys(): Promise<PasskeyCredential[]>;\n abstract deletePasskey(credentialId: string): Promise<void>;\n\n // Device Flow methods (RFC 8628 - OAuth 2.0 Device Authorization Grant)\n /**\n * Initiate device authorization flow\n * Returns device code, user code, and verification URI\n */\n abstract initiateDeviceFlow(request: DeviceFlowInitiateRequest): Promise<DeviceFlowInitiateResponse>;\n \n /**\n * Verify a user-entered device code\n * Called by web UI when user enters the code shown on their device\n */\n abstract verifyDeviceCode(request: DeviceCodeVerifyRequest): Promise<DeviceCodeVerifyResponse>;\n \n /**\n * Authorize or deny the device request\n * Called when user approves or denies the authorization\n */\n abstract authorizeDevice(request: DeviceAuthorizeRequest): Promise<void>;\n \n /**\n * Poll for device token (used by CLI/device)\n * Returns auth response when authorized, or status when still pending\n */\n abstract pollDeviceToken(request: DeviceTokenPollRequest): Promise<AuthResponse | DeviceTokenPollResponse>;\n\n /**\n * Optional edge runtime context methods\n * Default implementations do nothing - subclasses can override\n */\n setContext?(context: RequestContext): void;\n getCookies?(): CookieData[];\n clearContext?(): void;\n\n /**\n * Normalize error to AuthError\n */\n normalizeError(error: unknown): AuthError {\n return toAuthError(error);\n }\n}\n\n","/**\n * AuthClient - Core authentication client\n * \n * This is the main entry point for the auth system.\n * It manages the auth provider and observable state.\n */\n\nimport type {\n AuthProvider,\n AuthContext,\n \n User,\n Session,\n AuthError,\n SignInRequest,\n SignUpRequest,\n UpdateUserRequest,\n PasswordChangeRequest,\n PasswordResetRequest,\n PasswordResetConfirmRequest,\n OAuthSignInRequest,\n OAuthCallbackRequest,\n MagicLinkRequest,\n MagicLinkVerifyRequest,\n PhoneAuthRequest,\n PhoneVerifyRequest,\n TwoFactorSetupRequest,\n TwoFactorVerifyRequest,\n PasskeyRegisterRequest,\n PasskeyAuthRequest,\n OAuthProvider,\n TwoFactorMethod,\n PasskeyCredential,\n Organization,\n OrganizationMembership,\n} from './types';\nimport { Observable } from './types';\nimport { AuthState, AuthErrorType } from './types';\n\n/**\n * Auth client configuration\n */\nexport interface AuthClientConfig {\n provider: AuthProvider;\n autoRefresh?: boolean;\n refreshInterval?: number; // in milliseconds\n}\n\n/**\n * Auth client class\n */\nexport class AuthClient {\n private provider: AuthProvider;\n private autoRefresh: boolean;\n private refreshInterval: number;\n private refreshTimer?: ReturnType<typeof setTimeout>;\n\n // Observable state\n public readonly state: Observable<AuthContext>;\n \n // Expose adapter for accessing provider-specific methods\n public get adapter(): AuthProvider {\n return this.provider;\n }\n\n constructor(config: AuthClientConfig) {\n this.provider = config.provider;\n this.autoRefresh = config.autoRefresh ?? true;\n this.refreshInterval = config.refreshInterval ?? 5 * 60 * 1000; // 5 minutes\n\n // Initialize observable state\n this.state = new Observable<AuthContext>({\n state: AuthState.LOADING,\n user: null,\n session: null,\n error: null,\n isAuthenticated: false,\n isLoading: true,\n });\n }\n\n /**\n * Initialize the auth client\n */\n async initialize(): Promise<void> {\n try {\n // Try to restore session\n const user = await this.provider.getCurrentUser();\n const session = await this.provider.getCurrentSession();\n\n if (user && session) {\n this.updateState({\n state: AuthState.AUTHENTICATED,\n user,\n session,\n error: null,\n isAuthenticated: true,\n isLoading: false,\n });\n\n // Start auto-refresh if enabled\n if (this.autoRefresh) {\n this.startAutoRefresh();\n }\n } else {\n this.updateState({\n state: AuthState.UNAUTHENTICATED,\n user: null,\n session: null,\n error: null,\n isAuthenticated: false,\n isLoading: false,\n });\n }\n } catch (error) {\n this.handleError(error);\n }\n }\n\n /**\n * Sign in with credentials\n */\n async signIn(request: SignInRequest): Promise<void> {\n try {\n this.setLoading();\n const response = await this.provider.signIn(request);\n\n if (response.requiresTwoFactor) {\n // Store user temporarily for 2FA verification\n this.updateState({\n state: AuthState.UNAUTHENTICATED,\n user: response.user,\n session: null,\n error: null,\n isAuthenticated: false,\n isLoading: false,\n });\n return;\n }\n\n this.updateState({\n state: AuthState.AUTHENTICATED,\n user: response.user,\n session: response.session,\n error: null,\n isAuthenticated: true,\n isLoading: false,\n });\n\n if (this.autoRefresh) {\n this.startAutoRefresh();\n }\n } catch (error) {\n this.handleError(error);\n }\n }\n\n /**\n * Sign up with credentials\n */\n async signUp(request: SignUpRequest): Promise<void> {\n try {\n this.setLoading();\n const response = await this.provider.signUp(request);\n\n this.updateState({\n state: AuthState.AUTHENTICATED,\n user: response.user,\n session: response.session,\n error: null,\n isAuthenticated: true,\n isLoading: false,\n });\n\n if (this.autoRefresh) {\n this.startAutoRefresh();\n }\n } catch (error) {\n this.handleError(error);\n }\n }\n\n /**\n * Sign out\n */\n async signOut(): Promise<void> {\n try {\n this.stopAutoRefresh();\n await this.provider.signOut();\n\n this.updateState({\n state: AuthState.UNAUTHENTICATED,\n user: null,\n session: null,\n error: null,\n isAuthenticated: false,\n isLoading: false,\n });\n } catch (error) {\n this.handleError(error);\n }\n }\n\n /**\n * Update user profile\n */\n async updateUser(request: UpdateUserRequest): Promise<void> {\n try {\n const user = await this.provider.updateUser(request);\n const currentState = this.state.getValue();\n\n this.updateState({\n ...currentState,\n user,\n });\n } catch (error) {\n this.handleError(error);\n }\n }\n\n /**\n * Change password\n */\n async changePassword(request: PasswordChangeRequest): Promise<void> {\n try {\n await this.provider.changePassword(request);\n } catch (error) {\n throw this.provider.normalizeError(error);\n }\n }\n\n /**\n * Request password reset\n */\n async requestPasswordReset(request: PasswordResetRequest): Promise<void> {\n try {\n await this.provider.requestPasswordReset(request);\n } catch (error) {\n throw this.provider.normalizeError(error);\n }\n }\n\n /**\n * Confirm password reset\n */\n async confirmPasswordReset(request: PasswordResetConfirmRequest): Promise<void> {\n try {\n await this.provider.confirmPasswordReset(request);\n } catch (error) {\n throw this.provider.normalizeError(error);\n }\n }\n\n /**\n * Get OAuth sign in URL\n */\n async getOAuthUrl(request: OAuthSignInRequest): Promise<string> {\n return this.provider.oauthSignIn(request);\n }\n\n /**\n * Handle OAuth callback\n */\n async handleOAuthCallback(request: OAuthCallbackRequest): Promise<void> {\n try {\n this.setLoading();\n const response = await this.provider.oauthCallback(request);\n\n this.updateState({\n state: AuthState.AUTHENTICATED,\n user: response.user,\n session: response.session,\n error: null,\n isAuthenticated: true,\n isLoading: false,\n });\n\n if (this.autoRefresh) {\n this.startAutoRefresh();\n }\n } catch (error) {\n this.handleError(error);\n }\n }\n\n /**\n * Get available OAuth providers\n */\n async getOAuthProviders(): Promise<OAuthProvider[]> {\n return this.provider.getOAuthProviders();\n }\n\n /**\n * Send magic link\n */\n async sendMagicLink(request: MagicLinkRequest): Promise<void> {\n try {\n await this.provider.sendMagicLink(request);\n } catch (error) {\n throw this.provider.normalizeError(error);\n }\n }\n\n /**\n * Verify magic link\n */\n async verifyMagicLink(request: MagicLinkVerifyRequest): Promise<void> {\n try {\n this.setLoading();\n const response = await this.provider.verifyMagicLink(request);\n\n this.updateState({\n state: AuthState.AUTHENTICATED,\n user: response.user,\n session: response.session,\n error: null,\n isAuthenticated: true,\n isLoading: false,\n });\n\n if (this.autoRefresh) {\n this.startAutoRefresh();\n }\n } catch (error) {\n this.handleError(error);\n }\n }\n\n /**\n * Send phone verification code\n */\n async sendPhoneCode(request: PhoneAuthRequest): Promise<void> {\n try {\n await this.provider.sendPhoneCode(request);\n } catch (error) {\n throw this.provider.normalizeError(error);\n }\n }\n\n /**\n * Verify phone code\n */\n async verifyPhoneCode(request: PhoneVerifyRequest): Promise<void> {\n try {\n this.setLoading();\n const response = await this.provider.verifyPhoneCode(request);\n\n this.updateState({\n state: AuthState.AUTHENTICATED,\n user: response.user,\n session: response.session,\n error: null,\n isAuthenticated: true,\n isLoading: false,\n });\n\n if (this.autoRefresh) {\n this.startAutoRefresh();\n }\n } catch (error) {\n this.handleError(error);\n }\n }\n\n /**\n * Setup 2FA\n */\n async setupTwoFactor(request: TwoFactorSetupRequest) {\n return this.provider.setupTwoFactor(request);\n }\n\n /**\n * Verify 2FA code\n */\n async verifyTwoFactor(request: TwoFactorVerifyRequest): Promise<void> {\n try {\n this.setLoading();\n const response = await this.provider.verifyTwoFactor(request);\n\n this.updateState({\n state: AuthState.AUTHENTICATED,\n user: response.user,\n session: response.session,\n error: null,\n isAuthenticated: true,\n isLoading: false,\n });\n\n if (this.autoRefresh) {\n this.startAutoRefresh();\n }\n } catch (error) {\n this.handleError(error);\n }\n }\n\n /**\n * Disable 2FA\n */\n async disableTwoFactor(): Promise<void> {\n return this.provider.disableTwoFactor();\n }\n\n /**\n * Get 2FA status\n */\n async getTwoFactorStatus(): Promise<TwoFactorMethod[]> {\n return this.provider.getTwoFactorStatus();\n }\n\n /**\n * Register passkey\n */\n async registerPasskey(request: PasskeyRegisterRequest): Promise<PasskeyCredential> {\n return this.provider.registerPasskey(request);\n }\n\n /**\n * Authenticate with passkey\n */\n async authenticatePasskey(request: PasskeyAuthRequest): Promise<void> {\n try {\n this.setLoading();\n const response = await this.provider.authenticatePasskey(request);\n\n this.updateState({\n state: AuthState.AUTHENTICATED,\n user: response.user,\n session: response.session,\n error: null,\n isAuthenticated: true,\n isLoading: false,\n });\n\n if (this.autoRefresh) {\n this.startAutoRefresh();\n }\n } catch (error) {\n this.handleError(error);\n }\n }\n\n /**\n * List passkeys\n */\n async listPasskeys(): Promise<PasskeyCredential[]> {\n return this.provider.listPasskeys();\n }\n\n /**\n * Delete passkey\n */\n async deletePasskey(credentialId: string): Promise<void> {\n return this.provider.deletePasskey(credentialId);\n }\n\n /**\n * Get all organizations the user belongs to\n * Only available if the provider supports organizations\n */\n async getOrganizations(): Promise<Organization[]> {\n if (!this.provider.getOrganizations) {\n throw this.createUnsupportedError('Organization support');\n }\n return this.provider.getOrganizations();\n }\n\n /**\n * Get the currently active organization\n * Only available if the provider supports organizations\n */\n async getActiveOrganization(): Promise<Organization | null> {\n if (!this.provider.getActiveOrganization) {\n throw this.createUnsupportedError('Organization support');\n }\n return this.provider.getActiveOrganization();\n }\n\n /**\n * Set the active organization and refresh user state\n * Only available if the provider supports organizations\n */\n async setActiveOrganization(organizationId: string): Promise<void> {\n if (!this.provider.setActiveOrganization) {\n throw this.createUnsupportedError('Organization support');\n }\n \n await this.provider.setActiveOrganization(organizationId);\n \n // Refresh session to get updated user with new org context\n await this.refreshSession();\n }\n\n /**\n * Get organization memberships with roles and permissions\n * Only available if the provider supports organizations\n */\n async getOrganizationMemberships(): Promise<OrganizationMembership[]> {\n if (!this.provider.getOrganizationMemberships) {\n throw this.createUnsupportedError('Organization memberships');\n }\n return this.provider.getOrganizationMemberships();\n }\n\n /**\n * Check if the provider supports organizations\n */\n supportsOrganizations(): boolean {\n return !!(\n this.provider.getOrganizations &&\n this.provider.getActiveOrganization &&\n this.provider.setActiveOrganization\n );\n }\n\n /**\n * Refresh session\n */\n async refreshSession(): Promise<void> {\n try {\n const session = await this.provider.refreshSession();\n const currentState = this.state.getValue();\n\n this.updateState({\n ...currentState,\n session,\n });\n } catch (error) {\n // Session refresh failed - log error but DON'T sign out\n // In cookie-based auth, the backend manages the session\n // A failed refresh might be temporary (network error, etc.)\n console.warn('[AuthClient] Session refresh failed:', error);\n // Backend session cookie may still be valid - don't destroy it\n }\n }\n\n /**\n * Get current user\n */\n getUser(): User | null {\n return this.state.getValue().user;\n }\n\n /**\n * Get current session\n */\n getSession(): Session | null {\n return this.state.getValue().session;\n }\n\n /**\n * Check if authenticated\n */\n isAuthenticated(): boolean {\n return this.state.getValue().isAuthenticated;\n }\n\n /**\n * Get current error\n */\n getError(): AuthError | null {\n return this.state.getValue().error;\n }\n\n /**\n * Clear error\n */\n clearError(): void {\n const currentState = this.state.getValue();\n this.updateState({\n ...currentState,\n error: null,\n });\n }\n\n /**\n * Subscribe to auth state changes\n */\n subscribe(listener: (context: AuthContext) => void) {\n return this.state.subscribe(listener);\n }\n\n /**\n * Cleanup resources\n */\n destroy(): void {\n this.stopAutoRefresh();\n this.state.clearListeners();\n }\n\n // Private methods\n\n private updateState(newState: AuthContext): void {\n this.state.setValue(newState);\n }\n\n private setLoading(): void {\n const currentState = this.state.getValue();\n this.updateState({\n ...currentState,\n state: AuthState.LOADING,\n isLoading: true,\n error: null,\n });\n }\n\n private handleError(error: unknown): never {\n const authError = this.provider.normalizeError(error);\n const currentState = this.state.getValue();\n\n this.updateState({\n ...currentState,\n state: AuthState.ERROR,\n error: authError,\n isLoading: false,\n });\n\n // Re-throw the error so callers can handle it\n throw authError;\n }\n\n private startAutoRefresh(): void {\n this.stopAutoRefresh();\n this.refreshTimer = setInterval(() => {\n this.refreshSession();\n }, this.refreshInterval);\n }\n\n private stopAutoRefresh(): void {\n if (this.refreshTimer) {\n clearInterval(this.refreshTimer);\n this.refreshTimer = undefined;\n }\n }\n\n private createUnsupportedError(feature: string): AuthError {\n return {\n name: 'AuthError',\n message: `${feature} is not available with this auth provider`,\n type: AuthErrorType.UNKNOWN_ERROR,\n } as AuthError;\n }\n}\n\n","/**\n * Authentication flow types and state machine\n */\n\nimport type { User, Session, AuthError, OAuthProvider, TwoFactorMethod } from '../types';\n\n/**\n * Available authentication flow steps\n */\nexport enum FlowStep {\n // Initial entry points\n SIGN_IN = 'sign_in',\n SIGN_UP = 'sign_up',\n \n // Email/Password flows\n EMAIL_PASSWORD_SIGN_IN = 'email_password_sign_in',\n EMAIL_PASSWORD_SIGN_UP = 'email_password_sign_up',\n \n // OAuth flows\n OAUTH_SELECT = 'oauth_select',\n OAUTH_CALLBACK = 'oauth_callback',\n \n // Magic link flows\n MAGIC_LINK_REQUEST = 'magic_link_request',\n MAGIC_LINK_VERIFY = 'magic_link_verify',\n MAGIC_LINK_SENT = 'magic_link_sent',\n \n // Phone flows\n PHONE_REQUEST = 'phone_request',\n PHONE_VERIFY = 'phone_verify',\n \n // Username flows\n USERNAME_SIGN_IN = 'username_sign_in',\n USERNAME_SIGN_UP = 'username_sign_up',\n \n // Passkey flows\n PASSKEY_REGISTER = 'passkey_register',\n PASSKEY_AUTHENTICATE = 'passkey_authenticate',\n \n // MFA flows\n MFA_REQUIRED = 'mfa_required',\n MFA_SETUP = 'mfa_setup',\n MFA_VERIFY = 'mfa_verify',\n MFA_SELECT_METHOD = 'mfa_select_method',\n \n // Verification flows\n EMAIL_VERIFICATION_REQUIRED = 'email_verification_required',\n EMAIL_VERIFICATION_SENT = 'email_verification_sent',\n PHONE_VERIFICATION_REQUIRED = 'phone_verification_required',\n \n // Password management\n PASSWORD_RESET_REQUEST = 'password_reset_request',\n PASSWORD_RESET_SENT = 'password_reset_sent',\n PASSWORD_RESET_CONFIRM = 'password_reset_confirm',\n PASSWORD_CHANGE = 'password_change',\n \n // Profile management\n PROFILE_UPDATE = 'profile_update',\n PROFILE_COMPLETE = 'profile_complete',\n \n // Device flow (RFC 8628 - OAuth 2.0 Device Authorization Grant)\n DEVICE_FLOW_INITIATE = 'device_flow_initiate',\n DEVICE_CODE_ENTRY = 'device_code_entry',\n DEVICE_CODE_VERIFY = 'device_code_verify',\n DEVICE_AUTHORIZE = 'device_authorize',\n DEVICE_POLLING = 'device_polling',\n DEVICE_AUTHORIZED = 'device_authorized',\n DEVICE_DENIED = 'device_denied',\n \n // Terminal states\n SUCCESS = 'success',\n ERROR = 'error',\n CANCELLED = 'cancelled',\n}\n\n/**\n * Flow state data that can be passed between steps\n */\nexport interface FlowState {\n // Current step\n currentStep: FlowStep;\n \n // Previous step (for back navigation)\n previousStep?: FlowStep;\n \n // User data (populated after successful auth)\n user?: User;\n session?: Session;\n \n // Temporary data during flow\n email?: string;\n phone?: string;\n username?: string;\n \n // General-purpose token (e.g., password reset token, email verification link token)\n token?: string;\n \n // MFA context\n mfaRequired?: boolean;\n mfaMethods?: TwoFactorMethod[];\n mfaToken?: string;\n \n // OAuth context\n oauthProvider?: OAuthProvider;\n oauthRedirectUrl?: string;\n \n // Verification context\n verificationRequired?: boolean;\n verificationToken?: string;\n verificationSent?: boolean;\n \n // Device flow context (RFC 8628)\n deviceCode?: string;\n userCode?: string;\n verificationUri?: string;\n verificationUriComplete?: string;\n deviceCodeExpiresIn?: number;\n devicePollingInterval?: number;\n deviceClientId?: string;\n deviceScopes?: string[];\n deviceAuthorized?: boolean;\n \n // Error context\n error?: AuthError;\n \n // Custom metadata\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Flow transition result\n */\nexport interface FlowTransition {\n nextStep: FlowStep;\n state: Partial<FlowState>;\n}\n\n/**\n * Flow configuration for a specific authentication journey\n */\nexport interface FlowConfig {\n name: string;\n description?: string;\n \n // Initial step\n initialStep: FlowStep;\n \n // Allowed steps in this flow\n allowedSteps: FlowStep[];\n \n // Step transitions\n transitions: {\n [key in FlowStep]?: {\n onSuccess?: FlowStep;\n onError?: FlowStep;\n onCancel?: FlowStep;\n onBack?: FlowStep;\n // Conditional transitions based on state\n conditions?: Array<{\n when: (state: FlowState) => boolean;\n then: FlowStep;\n }>;\n };\n };\n \n // Callbacks\n onStepChange?: (step: FlowStep, state: FlowState) => void;\n onComplete?: (user: User, session: Session) => void;\n onError?: (error: AuthError, state: FlowState) => void;\n onCancel?: (state: FlowState) => void;\n}\n\n/**\n * Predefined flow configurations\n */\nexport enum FlowConfigType {\n // Basic flows\n SIMPLE_SIGN_IN = 'simple_sign_in',\n SIMPLE_SIGN_UP = 'simple_sign_up',\n \n // Complete flows with verification\n SIGN_UP_WITH_EMAIL_VERIFICATION = 'sign_up_with_email_verification',\n SIGN_IN_WITH_MFA = 'sign_in_with_mfa',\n \n // OAuth flows\n OAUTH_SIGN_IN = 'oauth_sign_in',\n \n // Passwordless flows\n MAGIC_LINK_FLOW = 'magic_link_flow',\n PHONE_AUTH_FLOW = 'phone_auth_flow',\n \n // Advanced flows\n COMPLETE_SIGN_UP_FLOW = 'complete_sign_up_flow', // signup → verify email → complete profile\n SECURE_SIGN_IN_FLOW = 'secure_sign_in_flow', // signin → MFA → success\n \n // Password management\n PASSWORD_RESET_FLOW = 'password_reset_flow',\n \n // Email verification\n EMAIL_VERIFICATION_FLOW = 'email_verification_flow',\n \n // Device flow\n DEVICE_FLOW = 'device_flow',\n \n // Custom\n CUSTOM = 'custom',\n}\n\n/**\n * Flow action types\n */\nexport enum FlowAction {\n START = 'start',\n NEXT = 'next',\n BACK = 'back',\n CANCEL = 'cancel',\n ERROR = 'error',\n RESET = 'reset',\n}\n\n/**\n * Flow event for state machine\n */\nexport interface FlowEvent {\n action: FlowAction;\n data?: Partial<FlowState>;\n error?: AuthError;\n}\n\n","/**\n * Authentication flow state machine engine\n */\n\nimport type { FlowConfig, FlowState, FlowStep, FlowEvent } from './types';\nimport { AuthError, AuthErrorType } from '../types';\n\n/**\n * Flow engine that manages authentication flow state transitions\n */\nexport class FlowEngine {\n private config: FlowConfig;\n private state: FlowState;\n private history: FlowStep[] = [];\n\n constructor(config: FlowConfig, initialState?: Partial<FlowState>) {\n this.config = config;\n this.state = {\n currentStep: config.initialStep,\n ...initialState,\n };\n this.history.push(this.state.currentStep);\n }\n\n /**\n * Get current flow state\n */\n getState(): FlowState {\n return { ...this.state };\n }\n\n /**\n * Get current step\n */\n getCurrentStep(): FlowStep {\n return this.state.currentStep;\n }\n\n /**\n * Check if step is allowed in this flow\n */\n isStepAllowed(step: FlowStep): boolean {\n return this.config.allowedSteps.includes(step);\n }\n\n /**\n * Transition to next step based on action\n */\n async transition(event: FlowEvent): Promise<FlowState> {\n const { action, data, error } = event;\n\n switch (action) {\n case 'start':\n return this.handleStart(data);\n \n case 'next':\n return this.handleNext(data);\n \n case 'back':\n return this.handleBack();\n \n case 'cancel':\n return this.handleCancel();\n \n case 'error':\n return this.handleError(error);\n \n case 'reset':\n return this.handleReset();\n \n default:\n throw new AuthError(\n `Unknown flow action: ${action}`,\n AuthErrorType.VALIDATION_ERROR\n );\n }\n }\n\n /**\n * Start or restart the flow\n */\n private handleStart(data?: Partial<FlowState>): FlowState {\n this.state = {\n currentStep: this.config.initialStep,\n ...data,\n };\n this.history = [this.state.currentStep];\n \n if (this.config.onStepChange) {\n this.config.onStepChange(this.state.currentStep, this.state);\n }\n \n return this.getState();\n }\n\n /**\n * Move to next step\n */\n private handleNext(data?: Partial<FlowState>): FlowState {\n // Update state with new data\n this.state = {\n ...this.state,\n ...data,\n previousStep: this.state.currentStep,\n };\n\n // Get transition config for current step\n const transitionConfig = this.config.transitions[this.state.currentStep];\n \n if (!transitionConfig) {\n throw new AuthError(\n `No transition configured for step: ${this.state.currentStep}`,\n AuthErrorType.VALIDATION_ERROR\n );\n }\n\n // Check conditional transitions first\n if (transitionConfig.conditions) {\n for (const condition of transitionConfig.conditions) {\n if (condition.when(this.state)) {\n return this.moveToStep(condition.then);\n }\n }\n }\n\n // Use default onSuccess transition\n if (transitionConfig.onSuccess) {\n return this.moveToStep(transitionConfig.onSuccess);\n }\n\n throw new AuthError(\n `No valid transition found for step: ${this.state.currentStep}`,\n AuthErrorType.VALIDATION_ERROR\n );\n }\n\n /**\n * Go back to previous step\n */\n private handleBack(): FlowState {\n if (this.history.length < 2) {\n throw new AuthError(\n 'Cannot go back - already at first step',\n AuthErrorType.VALIDATION_ERROR\n );\n }\n\n // Remove current step from history\n this.history.pop();\n \n // Get previous step\n const previousStep = this.history[this.history.length - 1];\n \n // Get transition config\n const transitionConfig = this.config.transitions[this.state.currentStep];\n \n // Use configured back step if available, otherwise use history\n const targetStep = transitionConfig?.onBack || previousStep;\n \n return this.moveToStep(targetStep, false); // Don't add to history\n }\n\n /**\n * Cancel the flow\n */\n private handleCancel(): FlowState {\n const transitionConfig = this.config.transitions[this.state.currentStep];\n const targetStep = transitionConfig?.onCancel;\n\n if (this.config.onCancel) {\n this.config.onCancel(this.state);\n }\n\n if (targetStep) {\n return this.moveToStep(targetStep);\n }\n\n // Default to cancelled state\n this.state.currentStep = 'cancelled' as FlowStep;\n return this.getState();\n }\n\n /**\n * Handle error in flow\n */\n private handleError(error?: AuthError): FlowState {\n this.state.error = error;\n\n const transitionConfig = this.config.transitions[this.state.currentStep];\n const targetStep = transitionConfig?.onError;\n\n if (this.config.onError) {\n this.config.onError(error!, this.state);\n }\n\n if (targetStep) {\n return this.moveToStep(targetStep);\n }\n\n // Stay on current step with error\n return this.getState();\n }\n\n /**\n * Reset flow to initial state\n */\n private handleReset(): FlowState {\n return this.handleStart();\n }\n\n /**\n * Move to a specific step\n */\n private moveToStep(step: FlowStep, addToHistory = true): FlowState {\n if (!this.isStepAllowed(step)) {\n throw new AuthError(\n `Step ${step} is not allowed in this flow`,\n AuthErrorType.VALIDATION_ERROR\n );\n }\n\n this.state.currentStep = step;\n \n if (addToHistory) {\n this.history.push(step);\n }\n\n if (this.config.onStepChange) {\n this.config.onStepChange(step, this.state);\n }\n\n // Check if flow is complete\n if (step === 'success' && this.state.user && this.state.session) {\n if (this.config.onComplete) {\n this.config.onComplete(this.state.user, this.state.session);\n }\n }\n\n return this.getState();\n }\n\n /**\n * Get flow history\n */\n getHistory(): FlowStep[] {\n return [...this.history];\n }\n\n /**\n * Check if can go back\n */\n canGoBack(): boolean {\n return this.history.length > 1;\n }\n}\n\n","/**\n * Predefined flow configurations\n */\n\nimport type { FlowConfig } from './types';\nimport { FlowStep, FlowConfigType } from './types';\n\n/**\n * Simple sign-in flow (email/password only)\n */\nexport const simpleSignInFlow: FlowConfig = {\n name: 'Simple Sign In',\n description: 'Basic email/password sign-in',\n initialStep: FlowStep.EMAIL_PASSWORD_SIGN_IN,\n allowedSteps: [\n FlowStep.EMAIL_PASSWORD_SIGN_IN,\n FlowStep.EMAIL_VERIFICATION_REQUIRED,\n FlowStep.EMAIL_VERIFICATION_SENT,\n FlowStep.PASSWORD_RESET_REQUEST,\n FlowStep.PASSWORD_RESET_SENT,\n FlowStep.SUCCESS,\n FlowStep.ERROR,\n ],\n transitions: {\n [FlowStep.EMAIL_PASSWORD_SIGN_IN]: {\n onSuccess: FlowStep.SUCCESS,\n onError: FlowStep.EMAIL_PASSWORD_SIGN_IN,\n },\n [FlowStep.EMAIL_VERIFICATION_REQUIRED]: {\n onSuccess: FlowStep.EMAIL_VERIFICATION_SENT,\n onError: FlowStep.EMAIL_VERIFICATION_REQUIRED,\n },\n [FlowStep.EMAIL_VERIFICATION_SENT]: {\n onSuccess: FlowStep.EMAIL_PASSWORD_SIGN_IN,\n onError: FlowStep.EMAIL_VERIFICATION_REQUIRED,\n },\n [FlowStep.PASSWORD_RESET_REQUEST]: {\n onSuccess: FlowStep.PASSWORD_RESET_SENT,\n onBack: FlowStep.EMAIL_PASSWORD_SIGN_IN,\n },\n [FlowStep.PASSWORD_RESET_SENT]: {\n onSuccess: FlowStep.EMAIL_PASSWORD_SIGN_IN,\n },\n },\n};\n\n/**\n * Sign-in with MFA support\n */\nexport const signInWithMFAFlow: FlowConfig = {\n name: 'Sign In with MFA',\n description: 'Sign-in that handles MFA if enabled',\n initialStep: FlowStep.EMAIL_PASSWORD_SIGN_IN,\n allowedSteps: [\n FlowStep.EMAIL_PASSWORD_SIGN_IN,\n FlowStep.EMAIL_VERIFICATION_REQUIRED,\n FlowStep.EMAIL_VERIFICATION_SENT,\n FlowStep.MFA_REQUIRED,\n FlowStep.MFA_SELECT_METHOD,\n FlowStep.MFA_VERIFY,\n FlowStep.PASSWORD_RESET_REQUEST,\n FlowStep.PASSWORD_RESET_SENT,\n FlowStep.SUCCESS,\n FlowStep.ERROR,\n ],\n transitions: {\n [FlowStep.EMAIL_PASSWORD_SIGN_IN]: {\n onSuccess: FlowStep.SUCCESS,\n onError: FlowStep.EMAIL_PASSWORD_SIGN_IN,\n conditions: [\n {\n when: (state) => state.mfaRequired === true,\n then: FlowStep.MFA_REQUIRED,\n },\n ],\n },\n [FlowStep.EMAIL_VERIFICATION_REQUIRED]: {\n onSuccess: FlowStep.EMAIL_VERIFICATION_SENT,\n onError: FlowStep.EMAIL_VERIFICATION_REQUIRED,\n },\n [FlowStep.EMAIL_VERIFICATION_SENT]: {\n onSuccess: FlowStep.EMAIL_PASSWORD_SIGN_IN,\n onError: FlowStep.EMAIL_VERIFICATION_REQUIRED,\n },\n [FlowStep.MFA_REQUIRED]: {\n onSuccess: FlowStep.MFA_VERIFY,\n conditions: [\n {\n when: (state) => (state.mfaMethods?.length || 0) > 1,\n then: FlowStep.MFA_SELECT_METHOD,\n },\n ],\n },\n [FlowStep.MFA_SELECT_METHOD]: {\n onSuccess: FlowStep.MFA_VERIFY,\n onBack: FlowStep.EMAIL_PASSWORD_SIGN_IN,\n },\n [FlowStep.MFA_VERIFY]: {\n onSuccess: FlowStep.SUCCESS,\n onError: FlowStep.MFA_VERIFY,\n onBack: FlowStep.MFA_SELECT_METHOD,\n },\n [FlowStep.PASSWORD_RESET_REQUEST]: {\n onSuccess: FlowStep.PASSWORD_RESET_SENT,\n onBack: FlowStep.EMAIL_PASSWORD_SIGN_IN,\n },\n },\n};\n\n/**\n * Complete sign-up flow with email verification\n */\nexport const completeSignUpFlow: FlowConfig = {\n name: 'Complete Sign Up',\n description: 'Sign-up with email verification and profile completion',\n initialStep: FlowStep.EMAIL_PASSWORD_SIGN_UP,\n allowedSteps: [\n FlowStep.EMAIL_PASSWORD_SIGN_UP,\n FlowStep.EMAIL_VERIFICATION_REQUIRED,\n FlowStep.EMAIL_VERIFICATION_SENT,\n FlowStep.PROFILE_COMPLETE,\n FlowStep.SUCCESS,\n FlowStep.ERROR,\n ],\n transitions: {\n [FlowStep.EMAIL_PASSWORD_SIGN_UP]: {\n onSuccess: FlowStep.EMAIL_VERIFICATION_REQUIRED,\n onError: FlowStep.EMAIL_PASSWORD_SIGN_UP,\n conditions: [\n {\n when: (state) => state.verificationRequired === false,\n then: FlowStep.PROFILE_COMPLETE,\n },\n ],\n },\n [FlowStep.EMAIL_VERIFICATION_REQUIRED]: {\n onSuccess: FlowStep.EMAIL_VERIFICATION_SENT,\n },\n [FlowStep.EMAIL_VERIFICATION_SENT]: {\n onSuccess: FlowStep.PROFILE_COMPLETE,\n },\n [FlowStep.PROFILE_COMPLETE]: {\n onSuccess: FlowStep.SUCCESS,\n onError: FlowStep.PROFILE_COMPLETE,\n },\n },\n};\n\n/**\n * Magic link authentication flow\n */\nexport const magicLinkFlow: FlowConfig = {\n name: 'Magic Link',\n description: 'Passwordless authentication via email',\n initialStep: FlowStep.MAGIC_LINK_REQUEST,\n allowedSteps: [\n FlowStep.MAGIC_LINK_REQUEST,\n FlowStep.MAGIC_LINK_SENT,\n FlowStep.MAGIC_LINK_VERIFY,\n FlowStep.SUCCESS,\n FlowStep.ERROR,\n ],\n transitions: {\n [FlowStep.MAGIC_LINK_REQUEST]: {\n onSuccess: FlowStep.MAGIC_LINK_SENT,\n onError: FlowStep.MAGIC_LINK_REQUEST,\n },\n [FlowStep.MAGIC_LINK_SENT]: {\n onSuccess: FlowStep.MAGIC_LINK_VERIFY,\n },\n [FlowStep.MAGIC_LINK_VERIFY]: {\n onSuccess: FlowStep.SUCCESS,\n onError: FlowStep.MAGIC_LINK_REQUEST,\n },\n },\n};\n\n/**\n * Phone authentication flow\n */\nexport const phoneAuthFlow: FlowConfig = {\n name: 'Phone Authentication',\n description: 'SMS-based authentication',\n initialStep: FlowStep.PHONE_REQUEST,\n allowedSteps: [\n FlowStep.PHONE_REQUEST,\n FlowStep.PHONE_VERIFY,\n FlowStep.SUCCESS,\n FlowStep.ERROR,\n ],\n transitions: {\n [FlowStep.PHONE_REQUEST]: {\n onSuccess: FlowStep.PHONE_VERIFY,\n onError: FlowStep.PHONE_REQUEST,\n },\n [FlowStep.PHONE_VERIFY]: {\n onSuccess: FlowStep.SUCCESS,\n onError: FlowStep.PHONE_VERIFY,\n onBack: FlowStep.PHONE_REQUEST,\n },\n },\n};\n\n/**\n * OAuth sign-in flow\n */\nexport const oauthSignInFlow: FlowConfig = {\n name: 'OAuth Sign In',\n description: 'Third-party OAuth authentication',\n initialStep: FlowStep.OAUTH_SELECT,\n allowedSteps: [\n FlowStep.OAUTH_SELECT,\n FlowStep.OAUTH_CALLBACK,\n FlowStep.SUCCESS,\n FlowStep.ERROR,\n ],\n transitions: {\n [FlowStep.OAUTH_SELECT]: {\n onSuccess: FlowStep.OAUTH_CALLBACK,\n onError: FlowStep.OAUTH_SELECT,\n },\n [FlowStep.OAUTH_CALLBACK]: {\n onSuccess: FlowStep.SUCCESS,\n onError: FlowStep.OAUTH_SELECT,\n },\n },\n};\n\n/**\n * Password reset flow\n */\nexport const passwordResetFlow: FlowConfig = {\n name: 'Password Reset',\n description: 'Reset forgotten password',\n initialStep: FlowStep.PASSWORD_RESET_REQUEST,\n allowedSteps: [\n FlowStep.PASSWORD_RESET_REQUEST,\n FlowStep.PASSWORD_RESET_SENT,\n FlowStep.PASSWORD_RESET_CONFIRM,\n FlowStep.SUCCESS,\n FlowStep.ERROR,\n ],\n transitions: {\n [FlowStep.PASSWORD_RESET_REQUEST]: {\n onSuccess: FlowStep.PASSWORD_RESET_SENT,\n onError: FlowStep.PASSWORD_RESET_REQUEST,\n },\n [FlowStep.PASSWORD_RESET_SENT]: {\n onSuccess: FlowStep.PASSWORD_RESET_CONFIRM,\n },\n [FlowStep.PASSWORD_RESET_CONFIRM]: {\n onSuccess: FlowStep.SUCCESS,\n onError: FlowStep.PASSWORD_RESET_CONFIRM,\n },\n },\n};\n\n/**\n * Email verification flow\n */\nexport const emailVerificationFlow: FlowConfig = {\n name: 'Email Verification',\n description: 'Verify email address with code or link',\n initialStep: FlowStep.EMAIL_VERIFICATION_REQUIRED,\n allowedSteps: [\n FlowStep.EMAIL_VERIFICATION_REQUIRED,\n FlowStep.EMAIL_VERIFICATION_SENT,\n FlowStep.SUCCESS,\n FlowStep.ERROR,\n ],\n transitions: {\n [FlowStep.EMAIL_VERIFICATION_REQUIRED]: {\n onSuccess: FlowStep.EMAIL_VERIFICATION_SENT,\n onError: FlowStep.EMAIL_VERIFICATION_REQUIRED,\n },\n [FlowStep.EMAIL_VERIFICATION_SENT]: {\n onSuccess: FlowStep.SUCCESS,\n onError: FlowStep.EMAIL_VERIFICATION_REQUIRED,\n },\n },\n};\n\n/**\n * Device flow (RFC 8628 - OAuth 2.0 Device Authorization Grant)\n * \n * Used for CLI tools, smart TVs, and other input-constrained devices.\n * The user visits a URL and enters a code to authorize the device.\n * \n * Flow:\n * 1. DEVICE_CODE_ENTRY - User enters the code shown on their device\n * 2. DEVICE_CODE_VERIFY - Code is verified and consent screen is shown\n * 3. DEVICE_AUTHORIZE - User approves or denies the authorization\n * 4. SUCCESS/DEVICE_DENIED - Authorization result\n */\nexport const deviceFlow: FlowConfig = {\n name: 'Device Flow',\n description: 'OAuth 2.0 Device Authorization Grant for CLI/device login',\n initialStep: FlowStep.DEVICE_CODE_ENTRY,\n allowedSteps: [\n FlowStep.DEVICE_CODE_ENTRY,\n FlowStep.DEVICE_CODE_VERIFY,\n FlowStep.DEVICE_AUTHORIZE,\n FlowStep.DEVICE_AUTHORIZED,\n FlowStep.DEVICE_DENIED,\n FlowStep.SUCCESS,\n FlowStep.ERROR,\n ],\n transitions: {\n [FlowStep.DEVICE_CODE_ENTRY]: {\n onSuccess: FlowStep.DEVICE_CODE_VERIFY,\n onError: FlowStep.DEVICE_CODE_ENTRY,\n onCancel: FlowStep.CANCELLED,\n },\n [FlowStep.DEVICE_CODE_VERIFY]: {\n onSuccess: FlowStep.DEVICE_AUTHORIZE,\n onError: FlowStep.DEVICE_CODE_ENTRY,\n onBack: FlowStep.DEVICE_CODE_ENTRY,\n },\n [FlowStep.DEVICE_AUTHORIZE]: {\n onSuccess: FlowStep.DEVICE_AUTHORIZED,\n onError: FlowStep.DEVICE_DENIED,\n onCancel: FlowStep.DEVICE_DENIED,\n },\n [FlowStep.DEVICE_AUTHORIZED]: {\n onSuccess: FlowStep.SUCCESS,\n },\n [FlowStep.DEVICE_DENIED]: {\n onSuccess: FlowStep.ERROR,\n },\n },\n};\n\n/**\n * Device flow initiation (for CLI/device side)\n * \n * Used by CLI tools to initiate the device flow and begin polling.\n * This flow is run on the device side, not the browser.\n */\nexport const deviceFlowInitiation: FlowConfig = {\n name: 'Device Flow Initiation',\n description: 'Initiate device flow and poll for authorization',\n initialStep: FlowStep.DEVICE_FLOW_INITIATE,\n allowedSteps: [\n FlowStep.DEVICE_FLOW_INITIATE,\n FlowStep.DEVICE_POLLING,\n FlowStep.SUCCESS,\n FlowStep.ERROR,\n ],\n transitions: {\n [FlowStep.DEVICE_FLOW_INITIATE]: {\n onSuccess: FlowStep.DEVICE_POLLING,\n onError: FlowStep.ERROR,\n },\n [FlowStep.DEVICE_POLLING]: {\n onSuccess: FlowStep.SUCCESS,\n onError: FlowStep.ERROR,\n onCancel: FlowStep.CANCELLED,\n },\n },\n};\n\n/**\n * Get predefined flow configuration by type\n */\nexport function getFlowConfig(type: FlowConfigType): FlowConfig {\n switch (type) {\n case FlowConfigType.SIMPLE_SIGN_IN:\n return simpleSignInFlow;\n \n case FlowConfigType.SIGN_IN_WITH_MFA:\n return signInWithMFAFlow;\n \n case FlowConfigType.COMPLETE_SIGN_UP_FLOW:\n return completeSignUpFlow;\n \n case FlowConfigType.MAGIC_LINK_FLOW:\n return magicLinkFlow;\n \n case FlowConfigType.PHONE_AUTH_FLOW:\n return phoneAuthFlow;\n \n case FlowConfigType.OAUTH_SIGN_IN:\n return oauthSignInFlow;\n \n case FlowConfigType.PASSWORD_RESET_FLOW:\n return passwordResetFlow;\n \n case FlowConfigType.EMAIL_VERIFICATION_FLOW:\n return emailVerificationFlow;\n \n case FlowConfigType.DEVICE_FLOW:\n return deviceFlow;\n \n default:\n throw new Error(`Unknown flow type: ${type}`);\n }\n}\n\n/**\n * Export all predefined flows\n */\nexport const predefinedFlows = {\n [FlowConfigType.SIMPLE_SIGN_IN]: simpleSignInFlow,\n [FlowConfigType.SIGN_IN_WITH_MFA]: signInWithMFAFlow,\n [FlowConfigType.COMPLETE_SIGN_UP_FLOW]: completeSignUpFlow,\n [FlowConfigType.MAGIC_LINK_FLOW]: magicLinkFlow,\n [FlowConfigType.PHONE_AUTH_FLOW]: phoneAuthFlow,\n [FlowConfigType.OAUTH_SIGN_IN]: oauthSignInFlow,\n [FlowConfigType.PASSWORD_RESET_FLOW]: passwordResetFlow,\n [FlowConfigType.EMAIL_VERIFICATION_FLOW]: emailVerificationFlow,\n [FlowConfigType.DEVICE_FLOW]: deviceFlow,\n};\n\n"]}
1
+ {"version":3,"sources":["../src/generated/api-client.ts","../src/client.ts","../src/auth.ts","../src/webauthn.ts"],"sourcesContent":["// Code generated by authsome sdkgen. DO NOT EDIT.\n\nimport type {\n ACSRequest,\n AdminDeleteUserRequest,\n AdminGetUserRequest,\n AdminImpersonateRequest,\n AdminListOrgsRequest,\n AdminListUsersRequest,\n AdminStatsRequest,\n AdminStatsResponse,\n AdminStopImpersonationRequest,\n AdminUnbanUserRequest,\n AdminUserListResponse,\n AuthMethod,\n AuthResponse,\n BulkError,\n BulkImportResult,\n BulkRevokeSessionsRequest,\n BulkRevokeSessionsResponse,\n CallbackRequest,\n CallbackResponse,\n ChallengeRequest,\n ChallengeResponse,\n CheckSlugRequest,\n ClientConfigBranding,\n ClientConfigFieldValidation,\n ClientConfigMFA,\n ClientConfigResponse,\n ClientConfigSSO,\n ClientConfigSSOConnection,\n ClientConfigSelectOption,\n ClientConfigSignupField,\n ClientConfigSocial,\n ClientConfigSocialProvider,\n ClientConfigToggle,\n CloneEnvironmentResponse,\n Config,\n CreateKeyRequest,\n CreateKeyResponse,\n CredentialInfo,\n Definition,\n DefinitionGroup,\n DeleteAccountRequest,\n DeleteAppClientConfigRequest,\n DeleteAppSessionConfigRequest,\n DeleteDeviceRequest,\n DeleteOrgRequest,\n DeleteRequest,\n DeleteResponse,\n DeleteSettingRequest,\n DeleteTeamRequest,\n DeleteWebhookRequest,\n Device,\n DeviceListResponse,\n DisableRequest,\n DisableResponse,\n EnrollRequest,\n EnrollResponse,\n Environment,\n EnvironmentListResponse,\n EnvironmentSettingsResponse,\n ExportDataRequest,\n ForgotPasswordResponse,\n GetAppClientConfigRequest,\n GetAppSessionConfigRequest,\n GetClientConfigRequest,\n GetDeviceRequest,\n GetMeRequest,\n GetOrgRequest,\n GetTeamRequest,\n GetWebhookRequest,\n HealthResponse,\n Invitation,\n InvitationListResponse,\n KeyListItem,\n ListAuthMethodsRequest,\n ListAuthMethodsResponse,\n ListDefinitionsResponse,\n ListDevicesRequest,\n ListEnvironmentsRequest,\n ListInvitationsRequest,\n ListKeysRequest,\n ListKeysResponse,\n ListMembersRequest,\n ListNamespaceDefinitionsRequest,\n ListOrgsRequest,\n ListRequest,\n ListResponse,\n ListRolesRequest,\n ListSessionsRequest,\n ListSettingsDefinitionsRequest,\n ListTeamsRequest,\n ListWebhooksRequest,\n LoginBeginRequest,\n LoginBeginResponse,\n LoginFinishRequest,\n LoginFinishResponse,\n LoginRequest,\n LoginResponse,\n Member,\n MemberListResponse,\n Object,\n ObjectFieldDef,\n OrgListResponse,\n Organization,\n Permission,\n PermissionListResponse,\n RecoveryRegenerateRequest,\n RecoveryRegenerateResponse,\n RecoveryVerifyRequest,\n RecoveryVerifyResponse,\n RegisterBeginRequest,\n RegisterBeginResponse,\n RegisterFinishRequest,\n RegisterFinishResponse,\n RemoveMemberRequest,\n ResolveSettingRequest,\n ResolveSettingsRequest,\n ResolvedSetting,\n ResolvedSettingResponse,\n ResolvedSettingsResponse,\n RevokeKeyRequest,\n RevokeSessionRequest,\n Role,\n RoleListResponse,\n SMSSendRequest,\n SMSSendResponse,\n SMSVerifyRequest,\n SMSVerifyResponse,\n ScopeValue,\n SelectOption,\n SendRequest,\n SendResponse,\n SessionListResponse,\n SettingValueResponse,\n Settings,\n SignOutRequest,\n SlugAvailableResponse,\n StartRequest,\n StartResponse,\n StatusResponse,\n Team,\n TeamListResponse,\n TokenResponse,\n TrustDeviceRequest,\n UIMetadata,\n UnenforceSettingRequest,\n UnlinkAuthMethodRequest,\n UnlinkAuthMethodResponse,\n User,\n UserRoleListResponse,\n Validation,\n VerifyMFARequest,\n VerifyMFAResponse,\n VerifyRequest,\n VerifyResponse,\n VisibilityCondition,\n Webhook,\n WebhookListResponse,\n SetAppClientConfigRequest,\n SetAppSessionConfigRequest,\n AdminBulkRevokeSessionsRequest,\n AdminBulkImportUsersRequest,\n EnforceSettingRequest,\n SetSettingRequest,\n AdminBanUserRequest,\n ChangePasswordRequest,\n CreateEnvironmentRequest,\n UpdateEnvironmentRequest,\n CloneEnvironmentRequest,\n UpdateEnvironmentSettingsRequest,\n ForgotPasswordRequest,\n CreateAPIKeyRequest,\n RevokeAPIKeyRequest,\n SendMagicLinkRequest,\n VerifyMagicLinkRequest,\n UpdateMeRequest,\n DeleteMeRequest,\n ChallengeMFARequest,\n EnrollMFARequest,\n DisableMFARequest,\n RegenerateMFARecoveryCodesRequest,\n VerifyRecoveryCodeRequest,\n SendSMSCodeRequest,\n VerifySMSCodeRequest,\n CreateOrganizationRequest,\n AcceptInvitationRequest,\n DeclineInvitationRequest,\n UpdateOrganizationRequest,\n DeleteOrganizationRequest,\n CreateInvitationRequest,\n AddMemberRequest,\n UpdateMemberRequest,\n CreateTeamRequest,\n UpdateTeamRequest,\n PasskeyLoginBeginRequest,\n PasskeyLoginFinishRequest,\n PasskeyRegisterBeginRequest,\n PasskeyRegisterFinishRequest,\n DeletePasskeyRequest,\n RefreshRequest,\n ResetPasswordRequest,\n AuthsomeCreateRoleRequest,\n AuthsomeUpdateRoleRequest,\n AuthsomeAssignRoleRequest,\n AuthsomeAddPermissionRequest,\n AuthsomeUnassignRoleRequest,\n SignInRequest,\n SignUpRequest,\n StartOAuthRequest,\n SsoACSRequest,\n SsoCallbackRequest,\n StartSSOLoginRequest,\n VerifyEmailRequest,\n CreateWebhookRequest,\n UpdateWebhookRequest,\n} from './api-types';\n\nexport interface AuthClientConfig {\n /** Base URL of the AuthSome API (e.g., \"https://api.example.com\") */\n baseURL: string;\n /** Optional custom fetch implementation */\n fetch?: typeof globalThis.fetch;\n}\n\nexport class AuthClient {\n private baseURL: string;\n private fetchFn: typeof globalThis.fetch;\n\n constructor(config: AuthClientConfig | Pick<{ baseURL: string; fetch?: typeof globalThis.fetch }, 'baseURL' | 'fetch'>) {\n this.baseURL = config.baseURL.replace(/\\/+$/, '');\n this.fetchFn = config.fetch ?? globalThis.fetch.bind(globalThis);\n }\n\n // ──────────────────────────────────────────────────\n // Generated methods\n // ──────────────────────────────────────────────────\n\n /**\n * Get AuthSome manifest\n * GET /.well-known/authsome/manifest\n */\n async getManifest(): Promise<Record<string, unknown>> {\n const path = \"/.well-known/authsome/manifest\";\n return this.request<Record<string, unknown>>(\n 'GET',\n path,\n undefined,\n );\n }\n\n /**\n * Get OpenAPI specification\n * GET /.well-known/authsome/openapi\n */\n async getOpenAPI(): Promise<Record<string, unknown>> {\n const path = \"/.well-known/authsome/openapi\";\n return this.request<Record<string, unknown>>(\n 'GET',\n path,\n undefined,\n );\n }\n\n /**\n * Get per-app client config overrides\n * GET /v1/admin/apps/{appId}/client-config\n */\n async getAppClientConfig(appId: string, token: string): Promise<Config> {\n const path = `/v1/admin/apps/${appId}/client-config`;\n return this.request<Config>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Set per-app client config overrides\n * PUT /v1/admin/apps/{appId}/client-config\n */\n async setAppClientConfig(appId: string, body: SetAppClientConfigRequest, token: string): Promise<Config> {\n const path = `/v1/admin/apps/${appId}/client-config`;\n return this.request<Config>(\n 'PUT',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete per-app client config overrides\n * DELETE /v1/admin/apps/{appId}/client-config\n */\n async deleteAppClientConfig(appId: string, body: DeleteAppClientConfigRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/admin/apps/${appId}/client-config`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Get per-app session config\n * GET /v1/admin/apps/{appId}/session-config\n */\n async getAppSessionConfig(appId: string, token: string): Promise<Config> {\n const path = `/v1/admin/apps/${appId}/session-config`;\n return this.request<Config>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Set per-app session config\n * PUT /v1/admin/apps/{appId}/session-config\n */\n async setAppSessionConfig(appId: string, body: SetAppSessionConfigRequest, token: string): Promise<Config> {\n const path = `/v1/admin/apps/${appId}/session-config`;\n return this.request<Config>(\n 'PUT',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete per-app session config\n * DELETE /v1/admin/apps/{appId}/session-config\n */\n async deleteAppSessionConfig(appId: string, body: DeleteAppSessionConfigRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/admin/apps/${appId}/session-config`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Bulk revoke sessions (admin)\n * DELETE /v1/admin/bulk/sessions\n */\n async adminBulkRevokeSessions(body: AdminBulkRevokeSessionsRequest, token: string): Promise<BulkRevokeSessionsResponse> {\n const path = \"/v1/admin/bulk/sessions\";\n return this.request<BulkRevokeSessionsResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Bulk import users (admin)\n * POST /v1/admin/bulk/users/import\n */\n async adminBulkImportUsers(body: AdminBulkImportUsersRequest, token: string): Promise<BulkImportResult> {\n const path = \"/v1/admin/bulk/users/import\";\n return this.request<BulkImportResult>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Stop impersonation (admin)\n * POST /v1/admin/impersonate/stop\n */\n async adminStopImpersonation(body: AdminStopImpersonationRequest, token: string): Promise<StatusResponse> {\n const path = \"/v1/admin/impersonate/stop\";\n return this.request<StatusResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Impersonate user (admin)\n * POST /v1/admin/impersonate/{userId}\n */\n async adminImpersonate(userId: string, body: AdminImpersonateRequest, token: string): Promise<AuthResponse> {\n const path = `/v1/admin/impersonate/${userId}`;\n return this.request<AuthResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * List organizations (admin)\n * GET /v1/admin/orgs\n */\n async adminListOrgs(token: string): Promise<OrgListResponse> {\n const path = \"/v1/admin/orgs\";\n return this.request<OrgListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * List all setting definitions\n * GET /v1/admin/settings/definitions\n */\n async listSettingsDefinitions(token: string): Promise<ListDefinitionsResponse> {\n const path = \"/v1/admin/settings/definitions\";\n return this.request<ListDefinitionsResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * List definitions for a namespace\n * GET /v1/admin/settings/definitions/{namespace}\n */\n async listNamespaceSettingsDefinitions(namespace: string, token: string): Promise<ListDefinitionsResponse> {\n const path = `/v1/admin/settings/definitions/${namespace}`;\n return this.request<ListDefinitionsResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Enforce a setting value at a scope\n * PUT /v1/admin/settings/enforce/{key}\n */\n async enforceSetting(key: string, body: EnforceSettingRequest, token: string): Promise<SettingValueResponse> {\n const path = `/v1/admin/settings/enforce/${key}`;\n return this.request<SettingValueResponse>(\n 'PUT',\n path,\n body,\n token,\n );\n }\n\n /**\n * Remove enforcement from a setting\n * DELETE /v1/admin/settings/enforce/{key}\n */\n async unenforceSetting(key: string, body: UnenforceSettingRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/admin/settings/enforce/${key}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Resolve all settings at a scope\n * GET /v1/admin/settings/resolve\n */\n async resolveSettings(token: string): Promise<ResolvedSettingsResponse> {\n const path = \"/v1/admin/settings/resolve\";\n return this.request<ResolvedSettingsResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Resolve one setting with cascade details\n * GET /v1/admin/settings/resolve/{key}\n */\n async resolveSetting(key: string, token: string): Promise<ResolvedSettingResponse> {\n const path = `/v1/admin/settings/resolve/${key}`;\n return this.request<ResolvedSettingResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Set a setting value at a scope\n * PUT /v1/admin/settings/values/{key}\n */\n async setSetting(key: string, body: SetSettingRequest, token: string): Promise<SettingValueResponse> {\n const path = `/v1/admin/settings/values/${key}`;\n return this.request<SettingValueResponse>(\n 'PUT',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete a setting override at a scope\n * DELETE /v1/admin/settings/values/{key}\n */\n async deleteSetting(key: string, body: DeleteSettingRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/admin/settings/values/${key}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Get stats (admin)\n * GET /v1/admin/stats\n */\n async adminGetStats(token: string): Promise<AdminStatsResponse> {\n const path = \"/v1/admin/stats\";\n return this.request<AdminStatsResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * List users (admin)\n * GET /v1/admin/users\n */\n async adminListUsers(token: string): Promise<AdminUserListResponse> {\n const path = \"/v1/admin/users\";\n return this.request<AdminUserListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Get user (admin)\n * GET /v1/admin/users/{userId}\n */\n async adminGetUser(userId: string, token: string): Promise<User> {\n const path = `/v1/admin/users/${userId}`;\n return this.request<User>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Delete user (admin)\n * DELETE /v1/admin/users/{userId}\n */\n async adminDeleteUser(userId: string, body: AdminDeleteUserRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/admin/users/${userId}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Ban user (admin)\n * POST /v1/admin/users/{userId}/ban\n */\n async adminBanUser(userId: string, body: AdminBanUserRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/admin/users/${userId}/ban`;\n return this.request<StatusResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Unban user (admin)\n * POST /v1/admin/users/{userId}/unban\n */\n async adminUnbanUser(userId: string, body: AdminUnbanUserRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/admin/users/${userId}/unban`;\n return this.request<StatusResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Change password\n * POST /v1/change-password\n */\n async changePassword(body: ChangePasswordRequest, token: string): Promise<StatusResponse> {\n const path = \"/v1/change-password\";\n return this.request<StatusResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Get client configuration\n * GET /v1/client-config\n */\n async getClientConfig(token: string): Promise<ClientConfigResponse> {\n const path = \"/v1/client-config\";\n return this.request<ClientConfigResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * List devices\n * GET /v1/devices\n */\n async listDevices(token: string): Promise<DeviceListResponse> {\n const path = \"/v1/devices\";\n return this.request<DeviceListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Get device\n * GET /v1/devices/{deviceId}\n */\n async getDevice(deviceId: string, token: string): Promise<Device> {\n const path = `/v1/devices/${deviceId}`;\n return this.request<Device>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Delete device\n * DELETE /v1/devices/{deviceId}\n */\n async deleteDevice(deviceId: string, body: DeleteDeviceRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/devices/${deviceId}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Trust device\n * PATCH /v1/devices/{deviceId}/trust\n */\n async trustDevice(deviceId: string, body: TrustDeviceRequest, token: string): Promise<Device> {\n const path = `/v1/devices/${deviceId}/trust`;\n return this.request<Device>(\n 'PATCH',\n path,\n body,\n token,\n );\n }\n\n /**\n * List environments\n * GET /v1/environments\n */\n async listEnvironments(token: string): Promise<EnvironmentListResponse> {\n const path = \"/v1/environments\";\n return this.request<EnvironmentListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create environment\n * POST /v1/environments\n */\n async createEnvironment(body: CreateEnvironmentRequest, token: string): Promise<Environment> {\n const path = \"/v1/environments\";\n return this.request<Environment>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Get environment\n * GET /v1/environments/{envId}\n */\n async getEnvironment(envId: string, token: string): Promise<Environment> {\n const path = `/v1/environments/${envId}`;\n return this.request<Environment>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Update environment\n * PATCH /v1/environments/{envId}\n */\n async updateEnvironment(envId: string, body: UpdateEnvironmentRequest, token: string): Promise<Environment> {\n const path = `/v1/environments/${envId}`;\n return this.request<Environment>(\n 'PATCH',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete environment\n * DELETE /v1/environments/{envId}\n */\n async deleteEnvironment(envId: string, token: string): Promise<StatusResponse> {\n const path = `/v1/environments/${envId}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Clone environment\n * POST /v1/environments/{envId}/clone\n */\n async cloneEnvironment(envId: string, body: CloneEnvironmentRequest, token: string): Promise<CloneEnvironmentResponse> {\n const path = `/v1/environments/${envId}/clone`;\n return this.request<CloneEnvironmentResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Set default environment\n * POST /v1/environments/{envId}/set-default\n */\n async setDefaultEnvironment(envId: string, token: string): Promise<StatusResponse> {\n const path = `/v1/environments/${envId}/set-default`;\n return this.request<StatusResponse>(\n 'POST',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Get environment settings\n * GET /v1/environments/{envId}/settings\n */\n async getEnvironmentSettings(envId: string, token: string): Promise<EnvironmentSettingsResponse> {\n const path = `/v1/environments/${envId}/settings`;\n return this.request<EnvironmentSettingsResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Update environment settings\n * PATCH /v1/environments/{envId}/settings\n */\n async updateEnvironmentSettings(envId: string, body: UpdateEnvironmentSettingsRequest, token: string): Promise<Environment> {\n const path = `/v1/environments/${envId}/settings`;\n return this.request<Environment>(\n 'PATCH',\n path,\n body,\n token,\n );\n }\n\n /**\n * Forgot password\n * POST /v1/forgot-password\n */\n async forgotPassword(body: ForgotPasswordRequest): Promise<ForgotPasswordResponse> {\n const path = \"/v1/forgot-password\";\n return this.request<ForgotPasswordResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Health check\n * GET /v1/health\n */\n async getHealth(): Promise<HealthResponse> {\n const path = \"/v1/health\";\n return this.request<HealthResponse>(\n 'GET',\n path,\n undefined,\n );\n }\n\n /**\n * List API keys\n * GET /v1/keys\n */\n async listAPIKeys(token: string): Promise<ListKeysResponse> {\n const path = \"/v1/keys\";\n return this.request<ListKeysResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create API key\n * POST /v1/keys\n */\n async createAPIKey(body: CreateAPIKeyRequest, token: string): Promise<CreateKeyResponse> {\n const path = \"/v1/keys\";\n return this.request<CreateKeyResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Revoke API key\n * DELETE /v1/keys/{keyId}\n */\n async revokeAPIKey(keyId: string, body: RevokeAPIKeyRequest, token: string): Promise<void> {\n const path = `/v1/keys/${keyId}`;\n return this.request<void>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Send magic link\n * POST /v1/magic-link/send\n */\n async sendMagicLink(body: SendMagicLinkRequest): Promise<SendResponse> {\n const path = \"/v1/magic-link/send\";\n return this.request<SendResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Verify magic link\n * POST /v1/magic-link/verify\n */\n async verifyMagicLink(body: VerifyMagicLinkRequest): Promise<VerifyResponse> {\n const path = \"/v1/magic-link/verify\";\n return this.request<VerifyResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Get current user\n * GET /v1/me\n */\n async getMe(token: string): Promise<User> {\n const path = \"/v1/me\";\n return this.request<User>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Update current user\n * PATCH /v1/me\n */\n async updateMe(body: UpdateMeRequest, token: string): Promise<User> {\n const path = \"/v1/me\";\n return this.request<User>(\n 'PATCH',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete account\n * DELETE /v1/me\n */\n async deleteMe(body: DeleteMeRequest, token: string): Promise<StatusResponse> {\n const path = \"/v1/me\";\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * List linked auth methods\n * GET /v1/me/auth-methods\n */\n async listAuthMethods(token: string): Promise<ListAuthMethodsResponse> {\n const path = \"/v1/me/auth-methods\";\n return this.request<ListAuthMethodsResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Unlink an auth method\n * DELETE /v1/me/auth-methods/{provider}\n */\n async unlinkAuthMethod(provider: string, body: UnlinkAuthMethodRequest, token: string): Promise<UnlinkAuthMethodResponse> {\n const path = `/v1/me/auth-methods/${provider}`;\n return this.request<UnlinkAuthMethodResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Export user data\n * GET /v1/me/export\n */\n async exportMyData(token: string): Promise<Record<string, unknown>> {\n const path = \"/v1/me/export\";\n return this.request<Record<string, unknown>>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * MFA challenge\n * POST /v1/mfa/challenge\n */\n async challengeMFA(body: ChallengeMFARequest): Promise<ChallengeResponse> {\n const path = \"/v1/mfa/challenge\";\n return this.request<ChallengeResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Enroll in MFA\n * POST /v1/mfa/enroll\n */\n async enrollMFA(body: EnrollMFARequest, token: string): Promise<EnrollResponse> {\n const path = \"/v1/mfa/enroll\";\n return this.request<EnrollResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Disable MFA\n * DELETE /v1/mfa/enrollment\n */\n async disableMFA(body: DisableMFARequest, token: string): Promise<DisableResponse> {\n const path = \"/v1/mfa/enrollment\";\n return this.request<DisableResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Regenerate MFA recovery codes\n * POST /v1/mfa/recovery/regenerate\n */\n async regenerateMFARecoveryCodes(body: RegenerateMFARecoveryCodesRequest, token: string): Promise<RecoveryRegenerateResponse> {\n const path = \"/v1/mfa/recovery/regenerate\";\n return this.request<RecoveryRegenerateResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Verify MFA recovery code\n * POST /v1/mfa/recovery/verify\n */\n async verifyRecoveryCode(body: VerifyRecoveryCodeRequest): Promise<RecoveryVerifyResponse> {\n const path = \"/v1/mfa/recovery/verify\";\n return this.request<RecoveryVerifyResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Send SMS verification code\n * POST /v1/mfa/sms/send\n */\n async sendSMSCode(body: SendSMSCodeRequest, token: string): Promise<SMSSendResponse> {\n const path = \"/v1/mfa/sms/send\";\n return this.request<SMSSendResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Verify SMS code\n * POST /v1/mfa/sms/verify\n */\n async verifySMSCode(body: VerifySMSCodeRequest, token: string): Promise<SMSVerifyResponse> {\n const path = \"/v1/mfa/sms/verify\";\n return this.request<SMSVerifyResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Verify MFA code\n * POST /v1/mfa/verify\n */\n async verifyMFA(body: VerifyMFARequest): Promise<VerifyMFAResponse> {\n const path = \"/v1/mfa/verify\";\n return this.request<VerifyMFAResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * List organizations\n * GET /v1/orgs\n */\n async listOrganizations(token: string): Promise<OrgListResponse> {\n const path = \"/v1/orgs\";\n return this.request<OrgListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create organization\n * POST /v1/orgs\n */\n async createOrganization(body: CreateOrganizationRequest, token: string): Promise<Organization> {\n const path = \"/v1/orgs\";\n return this.request<Organization>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Check slug availability\n * GET /v1/orgs/check-slug\n */\n async checkOrgSlug(token: string): Promise<SlugAvailableResponse> {\n const path = \"/v1/orgs/check-slug\";\n return this.request<SlugAvailableResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Accept invitation\n * POST /v1/orgs/invitations/accept\n */\n async acceptInvitation(body: AcceptInvitationRequest, token: string): Promise<Member> {\n const path = \"/v1/orgs/invitations/accept\";\n return this.request<Member>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Decline invitation\n * POST /v1/orgs/invitations/decline\n */\n async declineInvitation(body: DeclineInvitationRequest, token: string): Promise<StatusResponse> {\n const path = \"/v1/orgs/invitations/decline\";\n return this.request<StatusResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Get organization\n * GET /v1/orgs/{orgId}\n */\n async getOrganization(orgId: string, token: string): Promise<Organization> {\n const path = `/v1/orgs/${orgId}`;\n return this.request<Organization>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Update organization\n * PATCH /v1/orgs/{orgId}\n */\n async updateOrganization(orgId: string, body: UpdateOrganizationRequest, token: string): Promise<Organization> {\n const path = `/v1/orgs/${orgId}`;\n return this.request<Organization>(\n 'PATCH',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete organization\n * DELETE /v1/orgs/{orgId}\n */\n async deleteOrganization(orgId: string, body: DeleteOrganizationRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/orgs/${orgId}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * List invitations\n * GET /v1/orgs/{orgId}/invitations\n */\n async listInvitations(orgId: string, token: string): Promise<InvitationListResponse> {\n const path = `/v1/orgs/${orgId}/invitations`;\n return this.request<InvitationListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create invitation\n * POST /v1/orgs/{orgId}/invitations\n */\n async createInvitation(orgId: string, body: CreateInvitationRequest, token: string): Promise<Invitation> {\n const path = `/v1/orgs/${orgId}/invitations`;\n return this.request<Invitation>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * List members\n * GET /v1/orgs/{orgId}/members\n */\n async listMembers(orgId: string, token: string): Promise<MemberListResponse> {\n const path = `/v1/orgs/${orgId}/members`;\n return this.request<MemberListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Add member\n * POST /v1/orgs/{orgId}/members\n */\n async addMember(orgId: string, body: AddMemberRequest, token: string): Promise<Member> {\n const path = `/v1/orgs/${orgId}/members`;\n return this.request<Member>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Update member role\n * PATCH /v1/orgs/{orgId}/members/{memberId}\n */\n async updateMember(orgId: string, memberId: string, body: UpdateMemberRequest, token: string): Promise<Member> {\n const path = `/v1/orgs/${orgId}/members/${memberId}`;\n return this.request<Member>(\n 'PATCH',\n path,\n body,\n token,\n );\n }\n\n /**\n * Remove member\n * DELETE /v1/orgs/{orgId}/members/{memberId}\n */\n async removeMember(orgId: string, memberId: string, body: RemoveMemberRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/orgs/${orgId}/members/${memberId}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * List teams\n * GET /v1/orgs/{orgId}/teams\n */\n async listTeams(orgId: string, token: string): Promise<TeamListResponse> {\n const path = `/v1/orgs/${orgId}/teams`;\n return this.request<TeamListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create team\n * POST /v1/orgs/{orgId}/teams\n */\n async createTeam(orgId: string, body: CreateTeamRequest, token: string): Promise<Team> {\n const path = `/v1/orgs/${orgId}/teams`;\n return this.request<Team>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Get team\n * GET /v1/orgs/{orgId}/teams/{teamId}\n */\n async getTeam(orgId: string, teamId: string, token: string): Promise<Team> {\n const path = `/v1/orgs/${orgId}/teams/${teamId}`;\n return this.request<Team>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Update team\n * PATCH /v1/orgs/{orgId}/teams/{teamId}\n */\n async updateTeam(orgId: string, teamId: string, body: UpdateTeamRequest, token: string): Promise<Team> {\n const path = `/v1/orgs/${orgId}/teams/${teamId}`;\n return this.request<Team>(\n 'PATCH',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete team\n * DELETE /v1/orgs/{orgId}/teams/{teamId}\n */\n async deleteTeam(orgId: string, teamId: string, body: DeleteTeamRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/orgs/${orgId}/teams/${teamId}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * List passkeys\n * GET /v1/passkeys/\n */\n async listPasskeys(token: string): Promise<ListResponse> {\n const path = \"/v1/passkeys/\";\n return this.request<ListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Begin passkey login\n * POST /v1/passkeys/login/begin\n */\n async passkeyLoginBegin(body: PasskeyLoginBeginRequest): Promise<LoginBeginResponse> {\n const path = \"/v1/passkeys/login/begin\";\n return this.request<LoginBeginResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Complete passkey login\n * POST /v1/passkeys/login/finish\n */\n async passkeyLoginFinish(body: PasskeyLoginFinishRequest): Promise<LoginFinishResponse> {\n const path = \"/v1/passkeys/login/finish\";\n return this.request<LoginFinishResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Begin passkey registration\n * POST /v1/passkeys/register/begin\n */\n async passkeyRegisterBegin(body: PasskeyRegisterBeginRequest, token: string): Promise<RegisterBeginResponse> {\n const path = \"/v1/passkeys/register/begin\";\n return this.request<RegisterBeginResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Complete passkey registration\n * POST /v1/passkeys/register/finish\n */\n async passkeyRegisterFinish(body: PasskeyRegisterFinishRequest, token: string): Promise<RegisterFinishResponse> {\n const path = \"/v1/passkeys/register/finish\";\n return this.request<RegisterFinishResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete passkey\n * DELETE /v1/passkeys/{credentialId}\n */\n async deletePasskey(credentialId: string, body: DeletePasskeyRequest, token: string): Promise<DeleteResponse> {\n const path = `/v1/passkeys/${credentialId}`;\n return this.request<DeleteResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Refresh tokens\n * POST /v1/refresh\n */\n async refresh(body: RefreshRequest): Promise<TokenResponse> {\n const path = \"/v1/refresh\";\n return this.request<TokenResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Reset password\n * POST /v1/reset-password\n */\n async resetPassword(body: ResetPasswordRequest): Promise<StatusResponse> {\n const path = \"/v1/reset-password\";\n return this.request<StatusResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * List roles\n * GET /v1/roles\n */\n async authsomeListRoles(token: string): Promise<RoleListResponse> {\n const path = \"/v1/roles\";\n return this.request<RoleListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create role\n * POST /v1/roles\n */\n async authsomeCreateRole(body: AuthsomeCreateRoleRequest, token: string): Promise<Role> {\n const path = \"/v1/roles\";\n return this.request<Role>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Get role\n * GET /v1/roles/{roleId}\n */\n async authsomeGetRole(roleId: string, token: string): Promise<Role> {\n const path = `/v1/roles/${roleId}`;\n return this.request<Role>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Update role\n * PATCH /v1/roles/{roleId}\n */\n async authsomeUpdateRole(roleId: string, body: AuthsomeUpdateRoleRequest, token: string): Promise<Role> {\n const path = `/v1/roles/${roleId}`;\n return this.request<Role>(\n 'PATCH',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete role\n * DELETE /v1/roles/{roleId}\n */\n async authsomeDeleteRole(roleId: string, token: string): Promise<StatusResponse> {\n const path = `/v1/roles/${roleId}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Assign role to user\n * POST /v1/roles/{roleId}/assign\n */\n async authsomeAssignRole(roleId: string, body: AuthsomeAssignRoleRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/roles/${roleId}/assign`;\n return this.request<StatusResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * List role permissions\n * GET /v1/roles/{roleId}/permissions\n */\n async authsomeListRolePermissions(roleId: string, token: string): Promise<PermissionListResponse> {\n const path = `/v1/roles/${roleId}/permissions`;\n return this.request<PermissionListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Add permission to role\n * POST /v1/roles/{roleId}/permissions\n */\n async authsomeAddPermission(roleId: string, body: AuthsomeAddPermissionRequest, token: string): Promise<Permission> {\n const path = `/v1/roles/${roleId}/permissions`;\n return this.request<Permission>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Remove permission from role\n * DELETE /v1/roles/{roleId}/permissions/{permissionId}\n */\n async authsomeRemovePermission(roleId: string, permissionId: string, token: string): Promise<StatusResponse> {\n const path = `/v1/roles/${roleId}/permissions/${permissionId}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Unassign role from user\n * POST /v1/roles/{roleId}/unassign\n */\n async authsomeUnassignRole(roleId: string, body: AuthsomeUnassignRoleRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/roles/${roleId}/unassign`;\n return this.request<StatusResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * List sessions\n * GET /v1/sessions\n */\n async listSessions(token: string): Promise<SessionListResponse> {\n const path = \"/v1/sessions\";\n return this.request<SessionListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Revoke session\n * DELETE /v1/sessions/{sessionId}\n */\n async revokeSession(sessionId: string, body: RevokeSessionRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/sessions/${sessionId}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Sign in\n * POST /v1/signin\n */\n async signIn(body: SignInRequest): Promise<AuthResponse> {\n const path = \"/v1/signin\";\n return this.request<AuthResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Sign out\n * POST /v1/signout\n */\n async signOut(body: SignOutRequest, token: string): Promise<StatusResponse> {\n const path = \"/v1/signout\";\n return this.request<StatusResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Sign up\n * POST /v1/signup\n */\n async signUp(body: SignUpRequest): Promise<AuthResponse> {\n const path = \"/v1/signup\";\n return this.request<AuthResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Start OAuth flow\n * POST /v1/social/{provider}\n */\n async startOAuth(provider: string, body: StartOAuthRequest): Promise<StartResponse> {\n const path = `/v1/social/${provider}`;\n return this.request<StartResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * OAuth callback\n * GET /v1/social/{provider}/callback\n */\n async oauthCallback(provider: string): Promise<CallbackResponse> {\n const path = `/v1/social/${provider}/callback`;\n return this.request<CallbackResponse>(\n 'GET',\n path,\n undefined,\n );\n }\n\n /**\n * SSO SAML ACS endpoint\n * POST /v1/sso/{provider}/acs\n */\n async ssoACS(provider: string, body: SsoACSRequest): Promise<CallbackResponse> {\n const path = `/v1/sso/${provider}/acs`;\n return this.request<CallbackResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * SSO callback (OIDC)\n * POST /v1/sso/{provider}/callback\n */\n async ssoCallback(provider: string, body: SsoCallbackRequest): Promise<CallbackResponse> {\n const path = `/v1/sso/${provider}/callback`;\n return this.request<CallbackResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Start SSO login flow\n * POST /v1/sso/{provider}/login\n */\n async startSSOLogin(provider: string, body: StartSSOLoginRequest): Promise<LoginResponse> {\n const path = `/v1/sso/${provider}/login`;\n return this.request<LoginResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * List user roles\n * GET /v1/users/{userId}/roles\n */\n async authsomeListUserRoles(userId: string, token: string): Promise<UserRoleListResponse> {\n const path = `/v1/users/${userId}/roles`;\n return this.request<UserRoleListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Verify email\n * POST /v1/verify-email\n */\n async verifyEmail(body: VerifyEmailRequest): Promise<StatusResponse> {\n const path = \"/v1/verify-email\";\n return this.request<StatusResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * List webhooks\n * GET /v1/webhooks\n */\n async listWebhooks(token: string): Promise<WebhookListResponse> {\n const path = \"/v1/webhooks\";\n return this.request<WebhookListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create webhook\n * POST /v1/webhooks\n */\n async createWebhook(body: CreateWebhookRequest, token: string): Promise<Webhook> {\n const path = \"/v1/webhooks\";\n return this.request<Webhook>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Get webhook\n * GET /v1/webhooks/{webhookId}\n */\n async getWebhook(webhookId: string, token: string): Promise<Webhook> {\n const path = `/v1/webhooks/${webhookId}`;\n return this.request<Webhook>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Update webhook\n * PATCH /v1/webhooks/{webhookId}\n */\n async updateWebhook(webhookId: string, body: UpdateWebhookRequest, token: string): Promise<Webhook> {\n const path = `/v1/webhooks/${webhookId}`;\n return this.request<Webhook>(\n 'PATCH',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete webhook\n * DELETE /v1/webhooks/{webhookId}\n */\n async deleteWebhook(webhookId: string, body: DeleteWebhookRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/webhooks/${webhookId}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n // ──────────────────────────────────────────────────\n // Internal request helper\n // ──────────────────────────────────────────────────\n\n\n private async request<T>(\n method: string,\n path: string,\n body?: unknown,\n token?: string,\n ): Promise<T> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'Accept': 'application/json',\n };\n\n if (token) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n\n const response = await this.fetchFn(`${this.baseURL}${path}`, {\n method,\n headers,\n body: body !== undefined ? JSON.stringify(body) : undefined,\n });\n\n if (!response.ok) {\n let apiError: { error?: string; code?: number } | undefined;\n try {\n apiError = await response.json();\n } catch {\n // Response body is not JSON.\n }\n throw new AuthClientError(\n apiError?.error ?? `Request failed with status ${response.status}`,\n apiError?.code ?? response.status,\n );\n }\n\n if (response.status === 204) {\n return undefined as T;\n }\n\n return response.json() as Promise<T>;\n }\n}\n\nexport class AuthClientError extends Error {\n code?: number;\n\n constructor(message: string, code?: number) {\n super(message);\n this.name = 'AuthClientError';\n this.code = code;\n }\n}\n\n","/**\n * AuthClient adapter — thin wrapper over the auto-generated API client.\n *\n * The generated client lives in ./generated/api-client.ts and covers all\n * core + plugin endpoints. This file extends it with a few convenience\n * overrides so that auth.ts (and downstream consumers) keep working\n * without changes.\n */\n\nimport {\n AuthClient as GeneratedClient,\n AuthClientError,\n type AuthClientConfig,\n} from \"./generated/api-client\";\nimport type { ClientConfig } from \"./types\";\n\n// ── Re-exports ───────────────────────────────────────\n\nexport { AuthClientError };\nexport type { AuthClientConfig };\n\n// Re-export generated request types used by auth.ts\nexport type { SignInRequest, SignUpRequest } from \"./generated/api-types\";\n\n// Re-export all generated API model types\nexport type {\n AuthResponse,\n Device,\n EnrollResponse,\n Invitation,\n KeyListItem,\n Member,\n Organization,\n TokenResponse,\n User,\n} from \"./generated/api-types\";\n\n// Backward-compatible type aliases for types renamed in the dynamic spec.\nexport type { KeyListItem as APIKey } from \"./generated/api-types\";\nexport type { EnrollResponse as MFAEnrollment } from \"./generated/api-types\";\n\n// Re-export all generated request types\nexport type {\n AdminBanUserRequest,\n ChangePasswordRequest,\n ForgotPasswordRequest,\n CreateAPIKeyRequest,\n SendMagicLinkRequest,\n VerifyMagicLinkRequest,\n UpdateMeRequest,\n ChallengeMFARequest,\n EnrollMFARequest,\n SendSMSCodeRequest,\n VerifySMSCodeRequest,\n VerifyMFARequest,\n CreateOrganizationRequest,\n UpdateOrganizationRequest,\n CreateInvitationRequest,\n AddMemberRequest,\n RefreshRequest,\n ResetPasswordRequest,\n SsoACSRequest,\n SsoCallbackRequest,\n VerifyEmailRequest,\n VerifyRecoveryCodeRequest,\n} from \"./generated/api-types\";\n\n// Backward-compatible request type aliases\nexport type { SendMagicLinkRequest as MagicLinkSendRequest } from \"./generated/api-types\";\nexport type { VerifyMagicLinkRequest as MagicLinkVerifyRequest } from \"./generated/api-types\";\nexport type { ChallengeMFARequest as MfaChallengeRequest } from \"./generated/api-types\";\nexport type { EnrollMFARequest as MfaEnrollRequest } from \"./generated/api-types\";\nexport type { SendSMSCodeRequest as MfaSMSSendRequest } from \"./generated/api-types\";\nexport type { VerifySMSCodeRequest as MfaSMSVerifyRequest } from \"./generated/api-types\";\nexport type { VerifyMFARequest as MfaVerifyRequest } from \"./generated/api-types\";\nexport type { CreateOrganizationRequest as CreateOrgRequest } from \"./generated/api-types\";\nexport type { UpdateOrganizationRequest as UpdateOrgRequest } from \"./generated/api-types\";\n\n// ── Manual types (not in the OpenAPI spec) ───────────\n\n/** Options for paginated list endpoints. */\nexport interface ListOptions {\n limit?: number;\n offset?: number;\n}\n\n/** Paginated list response. */\nexport interface ListResponse<T> {\n items: T[];\n total: number;\n}\n\n// ── AuthClient adapter ──────────────────────────────\n\n/**\n * AuthClient extends the auto-generated client with backward-compatible\n * convenience methods that auth.ts depends on.\n *\n * All 80+ generated endpoints are inherited as-is. Only two methods\n * are overridden to preserve the simpler call-site signatures used by\n * the auth state machine.\n */\nexport class AuthClient extends GeneratedClient {\n /**\n * Refresh session tokens.\n *\n * Accepts a raw refresh-token string (used by auth.ts) or the full\n * RefreshRequest body.\n */\n override async refresh(body: { refresh_token: string } | string): Promise<any> {\n const req = typeof body === \"string\" ? { refresh_token: body } : body;\n return super.refresh(req);\n }\n\n /**\n * Sign out.\n *\n * Accepts a raw token string (used by auth.ts) or the full\n * (body, token) pair from the generated client.\n */\n override async signOut(bodyOrToken: unknown, token?: string): Promise<any> {\n if (typeof bodyOrToken === \"string\") {\n return super.signOut({} as any, bodyOrToken);\n }\n return super.signOut(bodyOrToken as any, token!);\n }\n\n /**\n * MFA challenge — bridge for auth.ts.\n *\n * auth.ts calls `mfaChallenge({ enrollment_id, code })` and expects\n * an AuthResponse back. The generated client uses `challengeMFA`.\n */\n async mfaChallenge(body: { enrollment_id?: string; code: string }): Promise<any> {\n return super.challengeMFA(body as any);\n }\n\n /**\n * Verify an MFA recovery code.\n *\n * Accepts a raw code string (used by auth.ts) or the full request body.\n */\n override async verifyRecoveryCode(body: { code: string } | string): Promise<any> {\n const req = typeof body === \"string\" ? { code: body } : body;\n return super.verifyRecoveryCode(req);\n }\n\n /**\n * Send an SMS code for MFA — bridge for auth.ts.\n *\n * Simplifies the call-site by accepting just the session token.\n */\n async sendSMSCodeForMFA(token: string): Promise<any> {\n return super.sendSMSCode({}, token);\n }\n\n /**\n * Verify an SMS code for MFA — bridge for auth.ts.\n *\n * Simplifies the call-site by accepting code + token directly.\n */\n async verifySMSCodeForMFA(code: string, token: string): Promise<any> {\n return super.verifySMSCode({ code }, token);\n }\n\n /**\n * Fetch the client configuration from the backend.\n *\n * The config describes which auth methods are enabled so SDK\n * components can auto-configure without manual props.\n */\n async fetchClientConfig(publishableKey?: string): Promise<ClientConfig> {\n const url = new URL(\"/v1/client-config\", (this as any).config.baseURL);\n if (publishableKey) {\n url.searchParams.set(\"key\", publishableKey);\n }\n const fetchFn = (this as any).config.fetch ?? globalThis.fetch;\n const res = await fetchFn(url.toString(), {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\" },\n });\n if (!res.ok) {\n throw new AuthClientError(\"Failed to fetch client config\", res.status);\n }\n return res.json();\n }\n}\n","/**\n * Framework-agnostic authentication state machine.\n *\n * Manages sign-in/sign-up flows, token persistence, automatic refresh,\n * and MFA challenges. Framework adapters (React, Vue, etc.) wrap this\n * class and expose reactive state.\n */\n\nimport { AuthClient, type SignInRequest, type SignUpRequest, AuthClientError } from \"./client\";\nimport type { AuthConfig, AuthState, ClientConfig, Session, TokenStorage, User } from \"./types\";\n\nconst SESSION_KEY = \"authsome:session\";\nconst CONFIG_KEY = \"authsome:client_config\";\nconst REFRESH_BEFORE_MS = 60_000; // Refresh 60 s before expiry.\nconst CONFIG_TTL_MS = 5 * 60_000; // Cache client config for 5 minutes.\n\n/** Default in-memory storage (lost on page reload). */\nconst memoryStorage: TokenStorage = (() => {\n const store = new Map<string, string>();\n return {\n getItem: (key: string) => store.get(key) ?? null,\n setItem: (key: string, value: string) => {\n store.set(key, value);\n },\n removeItem: (key: string) => {\n store.delete(key);\n },\n };\n})();\n\n/** Try to use localStorage, fall back to memory. */\nfunction defaultStorage(): TokenStorage {\n try {\n if (typeof window !== \"undefined\" && window.localStorage) {\n return window.localStorage;\n }\n } catch {\n // SSR or restricted environments.\n }\n return memoryStorage;\n}\n\n/**\n * AuthManager is the core state machine that drives authentication.\n *\n * Usage:\n * ```ts\n * const auth = new AuthManager({ baseURL: \"https://api.example.com\" });\n * auth.subscribe((state) => console.log(state));\n * await auth.initialize(); // hydrate from storage\n * await auth.signIn({ email, password });\n * ```\n */\nexport class AuthManager {\n private client: AuthClient;\n private storage: TokenStorage;\n private state: AuthState = { status: \"idle\" };\n private listeners = new Set<(state: AuthState) => void>();\n private refreshTimer: ReturnType<typeof setTimeout> | null = null;\n private onError?: (error: { error: string; code?: number }) => void;\n\n private publishableKey?: string;\n private clientConfig: ClientConfig | null = null;\n private configListeners = new Set<(config: ClientConfig | null) => void>();\n private configFetchPromise: Promise<ClientConfig> | null = null;\n\n constructor(config: AuthConfig) {\n this.client = new AuthClient(config);\n this.storage = config.storage ?? defaultStorage();\n this.onError = config.onError;\n this.publishableKey = config.publishableKey;\n\n if (config.initialClientConfig) {\n this.clientConfig = config.initialClientConfig;\n }\n\n if (config.onStateChange) {\n this.listeners.add(config.onStateChange);\n }\n }\n\n // ── Public API ────────────────────────────────────\n\n /** Current auth state (snapshot). */\n getState(): AuthState {\n return this.state;\n }\n\n /** Subscribe to state changes. Returns an unsubscribe function. */\n subscribe(listener: (state: AuthState) => void): () => void {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n /** Access the underlying HTTP client. */\n getClient(): AuthClient {\n return this.client;\n }\n\n /**\n * Initialize by hydrating the session from storage.\n * When a publishableKey is set, also fetches client config in parallel.\n * Call this once on app start.\n */\n async initialize(): Promise<void> {\n // Kick off config fetch in parallel (non-blocking).\n if (this.publishableKey && !this.clientConfig) {\n void this.fetchClientConfig();\n }\n\n try {\n const raw = await this.storage.getItem(SESSION_KEY);\n if (!raw) {\n this.setState({ status: \"unauthenticated\" });\n return;\n }\n\n const session: Session = JSON.parse(raw);\n const expiresAt = new Date(session.expires_at).getTime();\n\n if (Date.now() >= expiresAt) {\n // Token expired — try refresh.\n await this.refreshSession(session.refresh_token);\n return;\n }\n\n // Token still valid — fetch user profile.\n this.setState({ status: \"loading\" });\n const user = await this.client.getMe(session.session_token);\n this.setState({ status: \"authenticated\", user, session });\n this.scheduleRefresh(session);\n } catch {\n await this.clearSession();\n this.setState({ status: \"unauthenticated\" });\n }\n }\n\n /** Sign in with email & password. */\n async signIn(credentials: SignInRequest): Promise<void> {\n this.setState({ status: \"loading\" });\n try {\n const res = await this.client.signIn(credentials);\n const session: Session = {\n session_token: res.session_token,\n refresh_token: res.refresh_token,\n expires_at: new Date(Date.now() + 3600_000).toISOString(), // fallback\n };\n await this.handleAuthResponse(res.user, session);\n } catch (err) {\n this.handleError(err);\n throw err;\n }\n }\n\n /** Sign up with email & password. */\n async signUp(data: SignUpRequest): Promise<void> {\n this.setState({ status: \"loading\" });\n try {\n const res = await this.client.signUp(data);\n const session: Session = {\n session_token: res.session_token,\n refresh_token: res.refresh_token,\n expires_at: new Date(Date.now() + 3600_000).toISOString(),\n };\n await this.handleAuthResponse(res.user, session);\n } catch (err) {\n this.handleError(err);\n throw err;\n }\n }\n\n /** Sign out and clear the session. */\n async signOut(): Promise<void> {\n const token = this.getSessionToken();\n if (token) {\n try {\n await this.client.signOut(token);\n } catch {\n // Best-effort server sign-out.\n }\n }\n this.clearRefreshTimer();\n await this.clearSession();\n this.setState({ status: \"unauthenticated\" });\n }\n\n /** Submit an MFA challenge code. */\n async submitMFACode(enrollmentId: string, code: string): Promise<void> {\n this.setState({ status: \"loading\" });\n try {\n const res = await this.client.mfaChallenge({ enrollment_id: enrollmentId, code });\n const session: Session = {\n session_token: res.session_token,\n refresh_token: res.refresh_token,\n expires_at: new Date(Date.now() + 3600_000).toISOString(),\n };\n await this.handleAuthResponse(res.user, session);\n } catch (err) {\n this.handleError(err);\n }\n }\n\n /** Submit an MFA recovery code. */\n async submitRecoveryCode(code: string): Promise<void> {\n this.setState({ status: \"loading\" });\n try {\n const res = await this.client.verifyRecoveryCode(code);\n const session: Session = {\n session_token: res.session_token,\n refresh_token: res.refresh_token,\n expires_at: new Date(Date.now() + 3600_000).toISOString(),\n };\n await this.handleAuthResponse(res.user, session);\n } catch (err) {\n this.handleError(err);\n }\n }\n\n /** Send an SMS code for MFA verification. Returns masked phone + expiry info. */\n async sendSMSCode(): Promise<{ sent: boolean; phone_masked: string; expires_in_seconds: number }> {\n const token = this.getSessionToken();\n if (!token) throw new Error(\"No session token available\");\n return this.client.sendSMSCodeForMFA(token);\n }\n\n /** Submit an SMS verification code during MFA challenge. */\n async submitSMSCode(code: string): Promise<void> {\n this.setState({ status: \"loading\" });\n try {\n const token = this.getSessionToken();\n if (!token) throw new Error(\"No session token available\");\n const res = await this.client.verifySMSCodeForMFA(code, token);\n const session: Session = {\n session_token: res.session_token,\n refresh_token: res.refresh_token,\n expires_at: new Date(Date.now() + 3600_000).toISOString(),\n };\n await this.handleAuthResponse(res.user, session);\n } catch (err) {\n this.handleError(err);\n }\n }\n\n /** Refresh the current session manually. */\n async refreshNow(): Promise<void> {\n const state = this.state;\n if (state.status !== \"authenticated\") return;\n await this.refreshSession(state.session.refresh_token);\n }\n\n /** Get the current session token (if authenticated). */\n getSessionToken(): string | null {\n if (this.state.status === \"authenticated\") {\n return this.state.session.session_token;\n }\n if (this.state.status === \"mfa_required\") {\n return this.state.session.session_token;\n }\n return null;\n }\n\n /** Get the current user (if authenticated). */\n getUser(): User | null {\n if (this.state.status === \"authenticated\") {\n return this.state.user;\n }\n return null;\n }\n\n // ── Client Config API ────────────────────────────\n\n /** Get the cached client config (or null if not yet fetched). */\n getClientConfig(): ClientConfig | null {\n return this.clientConfig;\n }\n\n /** Subscribe to client config changes. Returns an unsubscribe function. */\n subscribeConfig(listener: (config: ClientConfig | null) => void): () => void {\n this.configListeners.add(listener);\n return () => {\n this.configListeners.delete(listener);\n };\n }\n\n /**\n * Fetch client config from the backend.\n * Deduplicates concurrent calls and caches the result with a TTL.\n */\n async fetchClientConfig(): Promise<ClientConfig> {\n // Deduplicate concurrent fetches.\n if (this.configFetchPromise) {\n return this.configFetchPromise;\n }\n\n // Check storage cache.\n try {\n const cached = await this.storage.getItem(CONFIG_KEY);\n if (cached) {\n const { config, fetchedAt } = JSON.parse(cached) as { config: ClientConfig; fetchedAt: number };\n if (Date.now() - fetchedAt < CONFIG_TTL_MS) {\n this.setClientConfig(config);\n return config;\n }\n }\n } catch {\n // Cache miss or parse error — fetch fresh.\n }\n\n this.configFetchPromise = this.client\n .fetchClientConfig(this.publishableKey)\n .then(async (config) => {\n this.setClientConfig(config);\n // Cache with timestamp.\n try {\n await this.storage.setItem(\n CONFIG_KEY,\n JSON.stringify({ config, fetchedAt: Date.now() }),\n );\n } catch {\n // Storage write failure is non-fatal.\n }\n return config;\n })\n .finally(() => {\n this.configFetchPromise = null;\n });\n\n return this.configFetchPromise;\n }\n\n /** Tear down: clear timers and listeners. */\n destroy(): void {\n this.clearRefreshTimer();\n this.listeners.clear();\n this.configListeners.clear();\n }\n\n // ── Internals ─────────────────────────────────────\n\n private async handleAuthResponse(user: User, session: Session): Promise<void> {\n await this.persistSession(session);\n this.setState({ status: \"authenticated\", user, session });\n this.scheduleRefresh(session);\n }\n\n private async refreshSession(refreshToken: string): Promise<void> {\n try {\n const newSession = await this.client.refresh(refreshToken);\n const user = await this.client.getMe(newSession.session_token);\n await this.persistSession(newSession);\n this.setState({ status: \"authenticated\", user, session: newSession });\n this.scheduleRefresh(newSession);\n } catch {\n await this.clearSession();\n this.setState({ status: \"unauthenticated\" });\n }\n }\n\n private scheduleRefresh(session: Session): void {\n this.clearRefreshTimer();\n const expiresAt = new Date(session.expires_at).getTime();\n const delay = expiresAt - Date.now() - REFRESH_BEFORE_MS;\n\n if (delay <= 0) {\n // Already near expiry — refresh immediately.\n void this.refreshSession(session.refresh_token);\n return;\n }\n\n this.refreshTimer = setTimeout(() => {\n void this.refreshSession(session.refresh_token);\n }, delay);\n }\n\n private clearRefreshTimer(): void {\n if (this.refreshTimer !== null) {\n clearTimeout(this.refreshTimer);\n this.refreshTimer = null;\n }\n }\n\n private async persistSession(session: Session): Promise<void> {\n await this.storage.setItem(SESSION_KEY, JSON.stringify(session));\n }\n\n private async clearSession(): Promise<void> {\n await this.storage.removeItem(SESSION_KEY);\n }\n\n private setClientConfig(config: ClientConfig): void {\n this.clientConfig = config;\n for (const listener of this.configListeners) {\n try {\n listener(config);\n } catch {\n // Listener errors should not break the config flow.\n }\n }\n }\n\n private setState(newState: AuthState): void {\n this.state = newState;\n for (const listener of this.listeners) {\n try {\n listener(newState);\n } catch {\n // Listener errors should not break the state machine.\n }\n }\n }\n\n private handleError(err: unknown): void {\n const message = err instanceof AuthClientError ? err.message : \"An unexpected error occurred\";\n const code = err instanceof AuthClientError ? err.code : undefined;\n\n // MFA required is returned as a specific error code.\n if (code === 403 && message.toLowerCase().includes(\"mfa\")) {\n const token = this.getSessionToken();\n if (token) {\n this.setState({\n status: \"mfa_required\",\n session: {\n session_token: token,\n refresh_token: \"\",\n expires_at: new Date(Date.now() + 300_000).toISOString(),\n },\n });\n return;\n }\n }\n\n this.setState({ status: \"error\", error: message });\n this.onError?.({ error: message, code });\n }\n}\n","/**\n * WebAuthn encoding helpers.\n *\n * The go-webauthn backend serialises binary fields (challenge, user.id,\n * credential IDs, …) as **base64url strings** in JSON. The browser\n * WebAuthn API requires those same fields as ArrayBuffer / Uint8Array.\n *\n * These helpers bridge the gap in both directions:\n * begin response → browser API (base64url string → ArrayBuffer)\n * browser API → finish POST (ArrayBuffer → base64url string)\n */\n\n// ── low-level codecs ──────────────────────────────────────────────\n\n/** Decode a base64url-encoded string into a Uint8Array. */\nexport function base64urlToBuffer(base64url: string): Uint8Array {\n const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const padded = base64 + \"=\".repeat((4 - (base64.length % 4)) % 4);\n const binary = atob(padded);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n}\n\n/** Encode an ArrayBuffer (or Uint8Array) to a base64url string (no padding). */\nexport function bufferToBase64url(\n buffer: ArrayBuffer | Uint8Array,\n): string {\n const bytes =\n buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);\n let binary = \"\";\n for (let i = 0; i < bytes.byteLength; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary)\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=+$/, \"\");\n}\n\n// ── begin → browser helpers ────────────────────────────────────────\n\n/**\n * Prepare the options object returned by `/passkeys/register/begin`\n * for `navigator.credentials.create({ publicKey })`.\n *\n * Converts base64url strings → Uint8Array for:\n * challenge, user.id, excludeCredentials[].id\n */\nexport function prepareCreationOptions(\n options: Record<string, unknown>,\n): PublicKeyCredentialCreationOptions {\n const publicKey = (options.publicKey ?? options) as Record<string, unknown>;\n\n const out: Record<string, unknown> = { ...publicKey };\n\n // challenge\n if (typeof out.challenge === \"string\") {\n out.challenge = base64urlToBuffer(out.challenge);\n }\n\n // user.id\n if (out.user && typeof out.user === \"object\") {\n const user = { ...(out.user as Record<string, unknown>) };\n if (typeof user.id === \"string\") {\n user.id = base64urlToBuffer(user.id);\n }\n out.user = user;\n }\n\n // excludeCredentials[].id\n if (Array.isArray(out.excludeCredentials)) {\n out.excludeCredentials = (\n out.excludeCredentials as Record<string, unknown>[]\n ).map((c) => {\n if (typeof c.id === \"string\") {\n return { ...c, id: base64urlToBuffer(c.id) };\n }\n return c;\n });\n }\n\n return out as unknown as PublicKeyCredentialCreationOptions;\n}\n\n/**\n * Prepare the options object returned by `/passkeys/login/begin`\n * for `navigator.credentials.get({ publicKey })`.\n *\n * Converts base64url strings → Uint8Array for:\n * challenge, allowCredentials[].id\n */\nexport function prepareRequestOptions(\n options: Record<string, unknown>,\n): PublicKeyCredentialRequestOptions {\n const publicKey = (options.publicKey ?? options) as Record<string, unknown>;\n\n const out: Record<string, unknown> = { ...publicKey };\n\n // challenge\n if (typeof out.challenge === \"string\") {\n out.challenge = base64urlToBuffer(out.challenge);\n }\n\n // allowCredentials[].id\n if (Array.isArray(out.allowCredentials)) {\n out.allowCredentials = (\n out.allowCredentials as Record<string, unknown>[]\n ).map((c) => {\n if (typeof c.id === \"string\") {\n return { ...c, id: base64urlToBuffer(c.id) };\n }\n return c;\n });\n }\n\n return out as unknown as PublicKeyCredentialRequestOptions;\n}\n\n// ── browser → finish helpers ───────────────────────────────────────\n\n/**\n * Serialize a PublicKeyCredential returned by navigator.credentials\n * into a plain object suitable for POSTing to the `/finish` endpoint.\n *\n * Converts ArrayBuffer fields → base64url strings so they survive\n * JSON.stringify and match what go-webauthn expects.\n */\nexport function serializeCredential(\n credential: Credential,\n): Record<string, unknown> {\n const cred = credential as PublicKeyCredential;\n const response = cred.response;\n\n const result: Record<string, unknown> = {\n id: cred.id,\n rawId: bufferToBase64url(cred.rawId),\n type: cred.type,\n response: {} as Record<string, unknown>,\n };\n\n const serializedResponse: Record<string, unknown> = {\n clientDataJSON: bufferToBase64url(response.clientDataJSON),\n };\n\n // Attestation response (register finish)\n if (\"attestationObject\" in response) {\n const attestation = response as AuthenticatorAttestationResponse;\n serializedResponse.attestationObject = bufferToBase64url(\n attestation.attestationObject,\n );\n }\n\n // Assertion response (login finish)\n if (\"authenticatorData\" in response) {\n const assertion = response as AuthenticatorAssertionResponse;\n serializedResponse.authenticatorData = bufferToBase64url(\n assertion.authenticatorData,\n );\n serializedResponse.signature = bufferToBase64url(assertion.signature);\n if (assertion.userHandle) {\n serializedResponse.userHandle = bufferToBase64url(assertion.userHandle);\n }\n }\n\n result.response = serializedResponse;\n\n // Include authenticatorAttachment if present\n if (cred.authenticatorAttachment) {\n result.authenticatorAttachment = cred.authenticatorAttachment;\n }\n\n return result;\n}\n"],"mappings":"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","names":["AuthClient","AuthClient"]}