@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.d.ts +1653 -670
- package/dist/index.js +1809 -1584
- package/dist/index.js.map +1 -1
- package/package.json +22 -45
- package/README.md +0 -166
- package/dist/adapters/index.d.mts +0 -85
- package/dist/adapters/index.d.ts +0 -85
- package/dist/adapters/index.js +0 -94
- package/dist/adapters/index.js.map +0 -1
- package/dist/adapters/index.mjs +0 -92
- package/dist/adapters/index.mjs.map +0 -1
- package/dist/index.d.mts +0 -825
- package/dist/index.mjs +0 -1816
- package/dist/index.mjs.map +0 -1
- package/dist/provider-DWklI8Wr.d.mts +0 -885
- package/dist/provider-DWklI8Wr.d.ts +0 -885
- package/dist/types/index.d.mts +0 -98
- package/dist/types/index.d.ts +0 -98
- package/dist/types/index.js +0 -180
- package/dist/types/index.js.map +0 -1
- package/dist/types/index.mjs +0 -170
- package/dist/types/index.mjs.map +0 -1
package/dist/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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.mjs","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"]}
|