@massimo.mazzoleni/cognito-max 1.0.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.
Files changed (64) hide show
  1. package/README.md +2410 -0
  2. package/dist/chunk-AD7T42HJ.js +3 -0
  3. package/dist/chunk-AD7T42HJ.js.map +1 -0
  4. package/dist/chunk-DKPFVGTY.js +683 -0
  5. package/dist/chunk-DKPFVGTY.js.map +1 -0
  6. package/dist/chunk-N4OQLBV6.js +135 -0
  7. package/dist/chunk-N4OQLBV6.js.map +1 -0
  8. package/dist/client-63FraVdm.d.ts +69 -0
  9. package/dist/client-BAoL8h4E.d.cts +69 -0
  10. package/dist/core/index.cjs +696 -0
  11. package/dist/core/index.cjs.map +1 -0
  12. package/dist/core/index.d.cts +3 -0
  13. package/dist/core/index.d.ts +3 -0
  14. package/dist/core/index.js +4 -0
  15. package/dist/core/index.js.map +1 -0
  16. package/dist/errors-BkUDHleb.d.cts +22 -0
  17. package/dist/errors-BkUDHleb.d.ts +22 -0
  18. package/dist/index.cjs +696 -0
  19. package/dist/index.cjs.map +1 -0
  20. package/dist/index.d.cts +3 -0
  21. package/dist/index.d.ts +3 -0
  22. package/dist/index.js +4 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/react/index.cjs +844 -0
  25. package/dist/react/index.cjs.map +1 -0
  26. package/dist/react/index.d.cts +104 -0
  27. package/dist/react/index.d.ts +104 -0
  28. package/dist/react/index.js +64 -0
  29. package/dist/react/index.js.map +1 -0
  30. package/dist/types-bxA1vonL.d.cts +113 -0
  31. package/dist/types-bxA1vonL.d.ts +113 -0
  32. package/dist/ui/index.cjs +1183 -0
  33. package/dist/ui/index.cjs.map +1 -0
  34. package/dist/ui/index.d.cts +241 -0
  35. package/dist/ui/index.d.ts +241 -0
  36. package/dist/ui/index.js +1109 -0
  37. package/dist/ui/index.js.map +1 -0
  38. package/package.json +81 -0
  39. package/src/core/client.ts +604 -0
  40. package/src/core/errors.ts +91 -0
  41. package/src/core/event-bus.ts +41 -0
  42. package/src/core/index.ts +5 -0
  43. package/src/core/internal/converters.ts +32 -0
  44. package/src/core/storage.ts +79 -0
  45. package/src/core/types.ts +87 -0
  46. package/src/index.ts +1 -0
  47. package/src/react/components/ProtectedRoute.tsx +56 -0
  48. package/src/react/context.tsx +126 -0
  49. package/src/react/hooks/useAuth.ts +75 -0
  50. package/src/react/hooks/useMfa.ts +19 -0
  51. package/src/react/hooks/useSession.ts +16 -0
  52. package/src/react/hooks/useUser.ts +24 -0
  53. package/src/react/index.ts +10 -0
  54. package/src/ui/components/ChangePasswordForm.tsx +105 -0
  55. package/src/ui/components/ForgotPasswordForm.tsx +159 -0
  56. package/src/ui/components/MfaSetupWizard.tsx +136 -0
  57. package/src/ui/components/RegisterForm.tsx +159 -0
  58. package/src/ui/components/SignInForm.tsx +296 -0
  59. package/src/ui/hooks/useChangePasswordForm.ts +81 -0
  60. package/src/ui/hooks/useForgotPasswordForm.ts +109 -0
  61. package/src/ui/hooks/useMfaSetup.ts +93 -0
  62. package/src/ui/hooks/useRegisterForm.ts +120 -0
  63. package/src/ui/hooks/useSignInForm.ts +245 -0
  64. package/src/ui/index.ts +31 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/errors.ts","../src/core/storage.ts","../src/core/event-bus.ts","../src/core/internal/converters.ts","../src/core/client.ts"],"names":[],"mappings":"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","file":"chunk-DKPFVGTY.js","sourcesContent":["export type AuthErrorCode =\n | 'NOT_AUTHORIZED'\n | 'USER_NOT_FOUND'\n | 'USER_NOT_CONFIRMED'\n | 'INVALID_PARAMETER'\n | 'INVALID_PASSWORD'\n | 'CODE_MISMATCH'\n | 'EXPIRED_CODE'\n | 'CODE_DELIVERY_FAILURE'\n | 'LIMIT_EXCEEDED'\n | 'TOO_MANY_REQUESTS'\n | 'TOO_MANY_FAILED_ATTEMPTS'\n | 'PASSWORD_RESET_REQUIRED'\n | 'MFA_METHOD_NOT_FOUND'\n | 'SOFTWARE_TOKEN_MFA_NOT_FOUND'\n | 'SESSION_EXPIRED'\n | 'NETWORK_ERROR'\n | 'UNKNOWN'\n\nexport class CognitoAuthError extends Error {\n override readonly name = 'CognitoAuthError'\n\n constructor(\n message: string,\n public readonly code: AuthErrorCode,\n public readonly originalError?: unknown,\n ) {\n super(message)\n Object.setPrototypeOf(this, new.target.prototype)\n }\n}\n\nexport class SessionExpiredError extends CognitoAuthError {\n constructor() {\n super('La sessione è scaduta, effettua nuovamente il login', 'SESSION_EXPIRED')\n Object.setPrototypeOf(this, new.target.prototype)\n }\n}\n\nexport class NotAuthorizedError extends CognitoAuthError {\n constructor(message = 'Credenziali non valide') {\n super(message, 'NOT_AUTHORIZED')\n Object.setPrototypeOf(this, new.target.prototype)\n }\n}\n\nexport class UserNotConfirmedError extends CognitoAuthError {\n constructor() {\n super('Account non confermato. Controlla la tua email.', 'USER_NOT_CONFIRMED')\n Object.setPrototypeOf(this, new.target.prototype)\n }\n}\n\nexport class InvalidCodeError extends CognitoAuthError {\n constructor(expired = false) {\n super(\n expired ? 'Il codice è scaduto' : 'Codice non valido',\n expired ? 'EXPIRED_CODE' : 'CODE_MISMATCH',\n )\n Object.setPrototypeOf(this, new.target.prototype)\n }\n}\n\n// Maps raw Cognito SDK error names to our typed errors\nexport function mapCognitoError(error: unknown): CognitoAuthError {\n if (error instanceof CognitoAuthError) return error\n\n const name: string = (error as any)?.name ?? (error as any)?.code ?? ''\n const message: string = (error as any)?.message ?? 'Si è verificato un errore di autenticazione'\n\n const codeMap: Record<string, AuthErrorCode> = {\n NotAuthorizedException: 'NOT_AUTHORIZED',\n UserNotFoundException: 'USER_NOT_FOUND',\n UserNotConfirmedException: 'USER_NOT_CONFIRMED',\n InvalidParameterException: 'INVALID_PARAMETER',\n InvalidPasswordException: 'INVALID_PASSWORD',\n CodeMismatchException: 'CODE_MISMATCH',\n ExpiredCodeException: 'EXPIRED_CODE',\n CodeDeliveryFailureException: 'CODE_DELIVERY_FAILURE',\n LimitExceededException: 'LIMIT_EXCEEDED',\n TooManyRequestsException: 'TOO_MANY_REQUESTS',\n TooManyFailedAttemptsException: 'TOO_MANY_FAILED_ATTEMPTS',\n PasswordResetRequiredException: 'PASSWORD_RESET_REQUIRED',\n MFAMethodNotFoundException: 'MFA_METHOD_NOT_FOUND',\n SoftwareTokenMFANotFoundException: 'SOFTWARE_TOKEN_MFA_NOT_FOUND',\n NetworkError: 'NETWORK_ERROR',\n FetchError: 'NETWORK_ERROR',\n }\n\n return new CognitoAuthError(message, codeMap[name] ?? 'UNKNOWN', error)\n}\n","export interface StorageAdapter {\n getItem(key: string): string | null\n setItem(key: string, value: string): void\n removeItem(key: string): void\n clear?(): void\n}\n\nexport class LocalStorageAdapter implements StorageAdapter {\n getItem(key: string): string | null {\n return localStorage.getItem(key)\n }\n setItem(key: string, value: string): void {\n localStorage.setItem(key, value)\n }\n removeItem(key: string): void {\n localStorage.removeItem(key)\n }\n clear(): void {\n localStorage.clear()\n }\n}\n\nexport class SessionStorageAdapter implements StorageAdapter {\n getItem(key: string): string | null {\n return sessionStorage.getItem(key)\n }\n setItem(key: string, value: string): void {\n sessionStorage.setItem(key, value)\n }\n removeItem(key: string): void {\n sessionStorage.removeItem(key)\n }\n clear(): void {\n sessionStorage.clear()\n }\n}\n\n// Safe for SSR / Node.js environments\nexport class InMemoryStorageAdapter implements StorageAdapter {\n private readonly store = new Map<string, string>()\n\n getItem(key: string): string | null {\n return this.store.get(key) ?? null\n }\n setItem(key: string, value: string): void {\n this.store.set(key, value)\n }\n removeItem(key: string): void {\n this.store.delete(key)\n }\n clear(): void {\n this.store.clear()\n }\n}\n\n// Uses localStorage when available, falls back to in-memory (e.g. SSR)\nexport class AutoStorageAdapter implements StorageAdapter {\n private readonly delegate: StorageAdapter\n\n constructor() {\n this.delegate =\n typeof window !== 'undefined' && window.localStorage\n ? new LocalStorageAdapter()\n : new InMemoryStorageAdapter()\n }\n\n getItem(key: string): string | null {\n return this.delegate.getItem(key)\n }\n setItem(key: string, value: string): void {\n this.delegate.setItem(key, value)\n }\n removeItem(key: string): void {\n this.delegate.removeItem(key)\n }\n clear(): void {\n this.delegate.clear?.()\n }\n}\n","type Listener<T> = T extends void ? () => void : (payload: T) => void\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class TypedEventEmitter<TEvents extends Record<keyof TEvents, any>> {\n private readonly _listeners = new Map<keyof TEvents, Set<(...args: any[]) => void>>()\n\n on<K extends keyof TEvents>(event: K, listener: Listener<TEvents[K]>): () => void {\n if (!this._listeners.has(event)) {\n this._listeners.set(event, new Set())\n }\n this._listeners.get(event)!.add(listener as (...args: any[]) => void)\n return () => this.off(event, listener)\n }\n\n off<K extends keyof TEvents>(event: K, listener: Listener<TEvents[K]>): void {\n this._listeners.get(event)?.delete(listener as (...args: any[]) => void)\n }\n\n once<K extends keyof TEvents>(event: K, listener: Listener<TEvents[K]>): () => void {\n const unsub = this.on(event, ((...args: any[]) => {\n unsub()\n ;(listener as any)(...args)\n }) as Listener<TEvents[K]>)\n return unsub\n }\n\n protected emit<K extends keyof TEvents>(\n event: K,\n ...args: TEvents[K] extends void ? [] : [TEvents[K]]\n ): void {\n this._listeners.get(event)?.forEach(l => l(...args))\n }\n\n removeAllListeners(event?: keyof TEvents): void {\n if (event !== undefined) {\n this._listeners.delete(event)\n } else {\n this._listeners.clear()\n }\n }\n}\n","import type { CognitoUserSession } from 'amazon-cognito-identity-js'\nimport type { AuthSession, AuthUser } from '../types'\n\nexport function buildAuthSession(session: CognitoUserSession): AuthSession {\n const expiresAt = new Date(session.getAccessToken().getExpiration() * 1000)\n return {\n accessToken: session.getAccessToken().getJwtToken(),\n idToken: session.getIdToken().getJwtToken(),\n refreshToken: session.getRefreshToken().getToken(),\n expiresAt,\n isValid: () => session.isValid(),\n }\n}\n\nexport function buildAuthUser(session: CognitoUserSession, fallbackUsername: string): AuthUser {\n // Estraiamo tutte le info dall'ID token senza roundtrip API\n const payload = session.getIdToken().decodePayload() as Record<string, unknown>\n\n const str = (v: unknown): string => (v != null ? String(v) : '')\n const bool = (v: unknown): boolean => v === true || v === 'true'\n\n return {\n sub: str(payload['sub']),\n username: str(payload['cognito:username'] ?? fallbackUsername),\n email: str(payload['email']),\n emailVerified: bool(payload['email_verified']),\n groups: Array.isArray(payload['cognito:groups'])\n ? (payload['cognito:groups'] as string[])\n : [],\n attributes: Object.fromEntries(Object.entries(payload).map(([k, v]) => [k, str(v)])),\n }\n}\n","import {\n AuthenticationDetails,\n CognitoRefreshToken,\n CognitoUser,\n CognitoUserAttribute,\n CognitoUserPool,\n CognitoUserSession,\n} from 'amazon-cognito-identity-js'\nimport {\n CognitoIdentityProviderClient,\n GetUserCommand,\n} from '@aws-sdk/client-cognito-identity-provider'\n\nimport { TypedEventEmitter } from './event-bus'\nimport { mapCognitoError, CognitoAuthError, SessionExpiredError } from './errors'\nimport { AutoStorageAdapter } from './storage'\nimport { buildAuthSession, buildAuthUser } from './internal/converters'\nimport type {\n AuthConfig,\n AuthEvents,\n AuthSession,\n AuthState,\n AuthUser,\n MfaPreference,\n MfaSetupResult,\n MfaType,\n ResolvedAuthConfig,\n SignInResult,\n} from './types'\n\nfunction validateConfig(config: AuthConfig): void {\n const missing = (['userPoolId', 'clientId', 'region'] as const).filter(k => !config[k])\n if (missing.length) {\n throw new CognitoAuthError(\n `AuthConfig incompleto — campi obbligatori mancanti: ${missing.join(', ')}`,\n 'INVALID_PARAMETER',\n )\n }\n if (!/^[a-z]{2}-[a-z]+-\\d$/.test(config.region)) {\n throw new CognitoAuthError(\n `AuthConfig.region non valido: \"${config.region}\" (es. eu-west-1)`,\n 'INVALID_PARAMETER',\n )\n }\n}\n\n\nexport class CognitoAuthClient extends TypedEventEmitter<AuthEvents> {\n protected readonly config: ResolvedAuthConfig\n private _state: AuthState = 'idle'\n private readonly _pool: CognitoUserPool\n private _idpClient: CognitoIdentityProviderClient | null = null\n // Mappa challengeSession-id → CognitoUser in-flight (MFA / new-password challenge)\n private readonly _pendingChallenges = new Map<string, CognitoUser>()\n private _refreshTimer: ReturnType<typeof setTimeout> | null = null\n\n constructor(config: AuthConfig) {\n super()\n validateConfig(config)\n this.config = {\n autoRefresh: true,\n refreshMarginSeconds: 300,\n totpIssuer: config.clientId,\n storage: new AutoStorageAdapter(),\n ...config,\n }\n this._pool = new CognitoUserPool({\n UserPoolId: this.config.userPoolId,\n ClientId: this.config.clientId,\n // amazon-cognito-identity-js ICognitoStorage coincide con il nostro StorageAdapter\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Storage: this.config.storage as any,\n })\n }\n\n // ─── State ─────────────────────────────────────────────────────────────────\n\n get state(): AuthState {\n return this._state\n }\n\n protected setState(next: AuthState): void {\n if (this._state === next) return\n this._state = next\n this.emit('stateChanged', next)\n }\n\n // ─── Sign-in ───────────────────────────────────────────────────────────────\n\n async signIn(email: string, password: string): Promise<SignInResult> {\n this.setState('loading')\n const cognitoUser = this._makeCognitoUser(email)\n const authDetails = new AuthenticationDetails({ Username: email, Password: password })\n\n return new Promise<SignInResult>((resolve, reject) => {\n cognitoUser.authenticateUser(authDetails, {\n onSuccess: (session) => {\n resolve(this._onAuthSuccess(cognitoUser, session))\n },\n onFailure: (err) => {\n this.setState('unauthenticated')\n reject(mapCognitoError(err))\n },\n mfaRequired: () => {\n this.setState('mfa_required')\n const challengeSession = this._storeChallengeUser(cognitoUser)\n const result: SignInResult = { status: 'MFA_REQUIRED', mfaType: 'SMS', challengeSession }\n this.emit('mfaRequired', { mfaType: 'SMS', challengeSession })\n resolve(result)\n },\n totpRequired: () => {\n this.setState('mfa_required')\n const challengeSession = this._storeChallengeUser(cognitoUser)\n const result: SignInResult = { status: 'MFA_REQUIRED', mfaType: 'TOTP', challengeSession }\n this.emit('mfaRequired', { mfaType: 'TOTP', challengeSession })\n resolve(result)\n },\n newPasswordRequired: (_userAttributes, requiredAttributes) => {\n this.setState('new_password_required')\n const challengeSession = this._storeChallengeUser(cognitoUser)\n const required: string[] = Array.isArray(requiredAttributes) ? requiredAttributes : []\n this.emit('newPasswordRequired', { requiredAttributes: required, challengeSession })\n resolve({ status: 'NEW_PASSWORD_REQUIRED', requiredAttributes: required, challengeSession })\n },\n // Cognito richiede il setup TOTP prima di completare il login\n mfaSetup: () => {\n this.setState('mfa_required')\n const challengeSession = this._storeChallengeUser(cognitoUser)\n resolve({ status: 'MFA_SETUP_REQUIRED', challengeSession })\n },\n })\n })\n }\n\n async respondToMfaChallenge(\n challengeSession: string,\n code: string,\n mfaType: MfaType,\n ): Promise<SignInResult> {\n const cognitoUser = this._takeChallengeUser(challengeSession)\n const sdkType = mfaType === 'TOTP' ? 'SOFTWARE_TOKEN_MFA' : 'SMS_MFA'\n\n return new Promise<SignInResult>((resolve, reject) => {\n cognitoUser.sendMFACode(\n code,\n {\n onSuccess: (session) => resolve(this._onAuthSuccess(cognitoUser, session)),\n onFailure: (err) => {\n this.setState('unauthenticated')\n reject(mapCognitoError(err))\n },\n },\n sdkType,\n )\n })\n }\n\n async respondToNewPasswordChallenge(\n challengeSession: string,\n newPassword: string,\n userAttributes?: Record<string, string>,\n ): Promise<SignInResult> {\n const cognitoUser = this._takeChallengeUser(challengeSession)\n\n return new Promise<SignInResult>((resolve, reject) => {\n cognitoUser.completeNewPasswordChallenge(\n newPassword,\n userAttributes ?? {}, // es. { name, family_name, given_name }\n {\n onSuccess: (session) => resolve(this._onAuthSuccess(cognitoUser, session)),\n onFailure: (err) => {\n this.setState('unauthenticated')\n reject(mapCognitoError(err))\n },\n // Cognito può richiedere MFA anche dopo il cambio password forzato\n mfaRequired: () => {\n this.setState('mfa_required')\n const newSession = this._storeChallengeUser(cognitoUser)\n this.emit('mfaRequired', { mfaType: 'SMS', challengeSession: newSession })\n resolve({ status: 'MFA_REQUIRED', mfaType: 'SMS', challengeSession: newSession })\n },\n totpRequired: () => {\n this.setState('mfa_required')\n const newSession = this._storeChallengeUser(cognitoUser)\n this.emit('mfaRequired', { mfaType: 'TOTP', challengeSession: newSession })\n resolve({ status: 'MFA_REQUIRED', mfaType: 'TOTP', challengeSession: newSession })\n },\n },\n )\n })\n }\n\n async signOut(global = false): Promise<void> {\n this._clearRefreshTimer()\n this._pendingChallenges.clear()\n\n const cognitoUser = this._pool.getCurrentUser()\n if (!cognitoUser) {\n this.setState('unauthenticated')\n this.emit('signedOut')\n return\n }\n\n if (global) {\n await new Promise<void>((resolve, reject) => {\n cognitoUser.globalSignOut({\n onSuccess: () => {\n this.setState('unauthenticated')\n this.emit('signedOut')\n resolve()\n },\n onFailure: (err) => reject(mapCognitoError(err)),\n })\n })\n } else {\n cognitoUser.signOut()\n this.setState('unauthenticated')\n this.emit('signedOut')\n }\n }\n\n // ─── Registration ──────────────────────────────────────────────────────────\n\n async signUp(\n email: string,\n password: string,\n attributes: Record<string, string> = {},\n ): Promise<void> {\n const userAttributes = Object.entries({ email, ...attributes }).map(\n ([Name, Value]) => new CognitoUserAttribute({ Name, Value }),\n )\n\n await new Promise<void>((resolve, reject) => {\n this._pool.signUp(email, password, userAttributes, [], (err) => {\n if (err) return reject(mapCognitoError(err))\n resolve()\n })\n })\n }\n\n async confirmSignUp(email: string, code: string): Promise<void> {\n const cognitoUser = this._makeCognitoUser(email)\n await new Promise<void>((resolve, reject) => {\n cognitoUser.confirmRegistration(code, true, (err) => {\n if (err) return reject(mapCognitoError(err))\n resolve()\n })\n })\n }\n\n async resendConfirmationCode(email: string): Promise<void> {\n const cognitoUser = this._makeCognitoUser(email)\n await new Promise<void>((resolve, reject) => {\n cognitoUser.resendConfirmationCode((err) => {\n if (err) return reject(mapCognitoError(err))\n resolve()\n })\n })\n }\n\n // ─── Password ──────────────────────────────────────────────────────────────\n\n async forgotPassword(email: string): Promise<void> {\n const cognitoUser = this._makeCognitoUser(email)\n await new Promise<void>((resolve, reject) => {\n cognitoUser.forgotPassword({\n // inputVerificationCode → il codice è stato inviato all'email/telefono\n inputVerificationCode: () => resolve(),\n onSuccess: () => resolve(),\n onFailure: (err) => reject(mapCognitoError(err)),\n })\n })\n }\n\n async confirmForgotPassword(\n email: string,\n code: string,\n newPassword: string,\n ): Promise<void> {\n const cognitoUser = this._makeCognitoUser(email)\n await new Promise<void>((resolve, reject) => {\n cognitoUser.confirmPassword(code, newPassword, {\n onSuccess: () => resolve(),\n onFailure: (err) => reject(mapCognitoError(err)),\n })\n })\n }\n\n async changePassword(currentPassword: string, newPassword: string): Promise<void> {\n const cognitoUser = await this._getAuthenticatedUser()\n await new Promise<void>((resolve, reject) => {\n cognitoUser.changePassword(currentPassword, newPassword, (err) => {\n if (err) return reject(mapCognitoError(err))\n resolve()\n })\n })\n }\n\n // ─── Session & User ────────────────────────────────────────────────────────\n\n async getSession(): Promise<AuthSession> {\n const cognitoUser = this._pool.getCurrentUser()\n if (!cognitoUser) throw new SessionExpiredError()\n\n const raw = await this._getRawSession(cognitoUser)\n this._scheduleRefresh(cognitoUser, raw)\n return buildAuthSession(raw)\n }\n\n async getCurrentUser(): Promise<AuthUser | null> {\n const cognitoUser = this._pool.getCurrentUser()\n if (!cognitoUser) return null\n\n try {\n const session = await this._getRawSession(cognitoUser)\n this.setState('authenticated')\n return buildAuthUser(session, cognitoUser.getUsername())\n } catch {\n return null\n }\n }\n\n async getUserAttributes(): Promise<Record<string, string>> {\n const cognitoUser = await this._getAuthenticatedUser()\n return new Promise((resolve, reject) => {\n cognitoUser.getUserAttributes((err, result) => {\n if (err) return reject(mapCognitoError(err))\n resolve(Object.fromEntries((result ?? []).map(a => [a.getName(), a.getValue()])))\n })\n })\n }\n\n async updateUserAttributes(attributes: Record<string, string>): Promise<void> {\n const cognitoUser = await this._getAuthenticatedUser()\n const attrs = Object.entries(attributes).map(\n ([Name, Value]) => new CognitoUserAttribute({ Name, Value }),\n )\n await new Promise<void>((resolve, reject) => {\n cognitoUser.updateAttributes(attrs, (err) => {\n if (err) return reject(mapCognitoError(err))\n resolve()\n })\n })\n }\n\n async verifyUserAttribute(\n attribute: 'email' | 'phone_number',\n code: string,\n ): Promise<void> {\n const cognitoUser = await this._getAuthenticatedUser()\n await new Promise<void>((resolve, reject) => {\n cognitoUser.verifyAttribute(attribute, code, {\n onSuccess: () => resolve(),\n onFailure: (err) => reject(mapCognitoError(err)),\n })\n })\n }\n\n async sendAttributeVerificationCode(attribute: 'email' | 'phone_number'): Promise<void> {\n const cognitoUser = await this._getAuthenticatedUser()\n await new Promise<void>((resolve, reject) => {\n cognitoUser.getAttributeVerificationCode(attribute, {\n onSuccess: () => resolve(),\n onFailure: (err) => reject(mapCognitoError(err)),\n inputVerificationCode: () => resolve(),\n })\n })\n }\n\n async deleteUser(): Promise<void> {\n const cognitoUser = await this._getAuthenticatedUser()\n this._clearRefreshTimer()\n await new Promise<void>((resolve, reject) => {\n cognitoUser.deleteUser((err) => {\n if (err) return reject(mapCognitoError(err))\n this.setState('unauthenticated')\n this.emit('signedOut')\n resolve()\n })\n })\n }\n\n // ─── MFA ───────────────────────────────────────────────────────────────────\n\n async setupTotp(): Promise<MfaSetupResult> {\n const cognitoUser = await this._getAuthenticatedUser()\n return new Promise<MfaSetupResult>((resolve, reject) => {\n cognitoUser.associateSoftwareToken({\n associateSecretCode: (secretCode: string) => {\n const issuer = encodeURIComponent(this.config.totpIssuer)\n const account = encodeURIComponent(cognitoUser.getUsername())\n const qrCodeUri =\n `otpauth://totp/${issuer}:${account}` +\n `?secret=${secretCode}&issuer=${issuer}`\n resolve({ secretCode, qrCodeUri })\n },\n onFailure: (err: Error) => reject(mapCognitoError(err)),\n })\n })\n }\n\n async verifyTotpSetup(code: string): Promise<void> {\n const cognitoUser = await this._getAuthenticatedUser()\n return new Promise<void>((resolve, reject) => {\n cognitoUser.verifySoftwareToken(code, this.config.totpIssuer, {\n onSuccess: () => resolve(),\n onFailure: (err: Error) => reject(mapCognitoError(err)),\n })\n })\n }\n\n async getMfaPreference(): Promise<MfaPreference> {\n const session = await this.getSession()\n try {\n const response = await this._getIdpClient().send(\n new GetUserCommand({ AccessToken: session.accessToken }),\n )\n const enabled: string[] = response.UserMFASettingList ?? []\n const preferred: string | null = response.PreferredMfaSetting ?? null\n const toSdkType = (s: string | null): MfaType | null =>\n s === 'SOFTWARE_TOKEN_MFA' ? 'TOTP' : s === 'SMS_MFA' ? 'SMS' : null\n return {\n enabled: enabled.length > 0,\n preferred: toSdkType(preferred),\n totp: enabled.includes('SOFTWARE_TOKEN_MFA'),\n sms: enabled.includes('SMS_MFA'),\n }\n } catch (err) {\n throw mapCognitoError(err)\n }\n }\n\n async setMfaPreference(type: MfaType): Promise<void> {\n const cognitoUser = await this._getAuthenticatedUser()\n const smsMfa = { Enabled: type === 'SMS', PreferredMfa: type === 'SMS' }\n const totpMfa = { Enabled: type === 'TOTP', PreferredMfa: type === 'TOTP' }\n return new Promise<void>((resolve, reject) => {\n cognitoUser.setUserMfaPreference(smsMfa, totpMfa, (err: Error | undefined) => {\n if (err) return reject(mapCognitoError(err))\n resolve()\n })\n })\n }\n\n async disableMfa(): Promise<void> {\n const cognitoUser = await this._getAuthenticatedUser()\n const off = { Enabled: false, PreferredMfa: false }\n return new Promise<void>((resolve, reject) => {\n cognitoUser.setUserMfaPreference(off, off, (err: Error | undefined) => {\n if (err) return reject(mapCognitoError(err))\n resolve()\n })\n })\n }\n\n // ─── TOTP setup durante il challenge login ─────────────────────────────────\n\n /**\n * Ottiene il secretCode/QR URI per il setup TOTP durante il flusso di login\n * (quando signIn restituisce MFA_SETUP_REQUIRED). Non richiede una sessione\n * autenticata: usa il CognitoUser in attesa nel challenge.\n */\n async setupTotpChallenge(challengeSession: string): Promise<MfaSetupResult> {\n const cognitoUser = this._peekChallengeUser(challengeSession)\n return new Promise<MfaSetupResult>((resolve, reject) => {\n cognitoUser.associateSoftwareToken({\n associateSecretCode: (secretCode: string) => {\n const issuer = encodeURIComponent(this.config.totpIssuer)\n const account = encodeURIComponent(cognitoUser.getUsername())\n const qrCodeUri =\n `otpauth://totp/${issuer}:${account}` +\n `?secret=${secretCode}&issuer=${issuer}`\n resolve({ secretCode, qrCodeUri })\n },\n onFailure: (err: Error) => reject(mapCognitoError(err)),\n })\n })\n }\n\n /**\n * Verifica il codice TOTP e completa il login. Dopo questa chiamata la\n * sessione è autenticata e il challenge viene rimosso dalla mappa.\n */\n async verifyTotpChallenge(challengeSession: string, code: string): Promise<SignInResult> {\n const cognitoUser = this._takeChallengeUser(challengeSession)\n return new Promise<SignInResult>((resolve, reject) => {\n cognitoUser.verifySoftwareToken(code, this.config.totpIssuer, {\n onSuccess: (session: CognitoUserSession) => resolve(this._onAuthSuccess(cognitoUser, session)),\n onFailure: (err: Error) => reject(mapCognitoError(err)),\n })\n })\n }\n\n // ─── Private helpers ───────────────────────────────────────────────────────\n\n private _getIdpClient(): CognitoIdentityProviderClient {\n if (!this._idpClient) {\n this._idpClient = new CognitoIdentityProviderClient({ region: this.config.region })\n }\n return this._idpClient\n }\n\n private _makeCognitoUser(username: string): CognitoUser {\n return new CognitoUser({\n Username: username,\n Pool: this._pool,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Storage: this.config.storage as any,\n })\n }\n\n private _storeChallengeUser(cognitoUser: CognitoUser): string {\n const id = crypto.randomUUID()\n this._pendingChallenges.set(id, cognitoUser)\n return id\n }\n\n private _takeChallengeUser(challengeSession: string): CognitoUser {\n const user = this._pendingChallenges.get(challengeSession)\n if (!user) {\n throw new CognitoAuthError(\n 'Challenge session non valida o scaduta',\n 'UNKNOWN',\n )\n }\n this._pendingChallenges.delete(challengeSession)\n return user\n }\n\n /** Legge il CognitoUser senza rimuoverlo dalla mappa (per setupTotpChallenge). */\n private _peekChallengeUser(challengeSession: string): CognitoUser {\n const user = this._pendingChallenges.get(challengeSession)\n if (!user) {\n throw new CognitoAuthError(\n 'Challenge session non valida o scaduta',\n 'UNKNOWN',\n )\n }\n return user\n }\n\n private _onAuthSuccess(cognitoUser: CognitoUser, session: CognitoUserSession): SignInResult {\n const authSession = buildAuthSession(session)\n const authUser = buildAuthUser(session, cognitoUser.getUsername())\n this.setState('authenticated')\n this.emit('signedIn', authUser)\n this._scheduleRefresh(cognitoUser, session)\n return { status: 'SUCCESS', user: authUser, session: authSession }\n }\n\n private _getRawSession(cognitoUser: CognitoUser): Promise<CognitoUserSession> {\n return new Promise((resolve, reject) => {\n cognitoUser.getSession((err: Error | null, session: CognitoUserSession | null) => {\n if (err || !session) {\n return reject(err ? mapCognitoError(err) : new SessionExpiredError())\n }\n if (!session.isValid()) {\n return reject(new SessionExpiredError())\n }\n resolve(session)\n })\n })\n }\n\n private async _getAuthenticatedUser(): Promise<CognitoUser> {\n const cognitoUser = this._pool.getCurrentUser()\n if (!cognitoUser) throw new SessionExpiredError()\n // getSession gestisce internamente il refresh se il token è scaduto\n await this._getRawSession(cognitoUser)\n return cognitoUser\n }\n\n private _scheduleRefresh(cognitoUser: CognitoUser, session: CognitoUserSession): void {\n if (!this.config.autoRefresh) return\n this._clearRefreshTimer()\n\n const expiresAt = session.getAccessToken().getExpiration() * 1000\n const refreshIn = expiresAt - Date.now() - this.config.refreshMarginSeconds * 1000\n\n if (refreshIn <= 0) return\n\n this._refreshTimer = setTimeout(() => {\n const refreshToken = new CognitoRefreshToken({\n RefreshToken: session.getRefreshToken().getToken(),\n })\n cognitoUser.refreshSession(refreshToken, (err, newSession: CognitoUserSession) => {\n if (err) {\n this.emit('sessionExpired')\n this.setState('unauthenticated')\n return\n }\n this.emit('tokenRefreshed', buildAuthSession(newSession))\n this._scheduleRefresh(cognitoUser, newSession)\n })\n }, refreshIn)\n }\n\n private _clearRefreshTimer(): void {\n if (this._refreshTimer !== null) {\n clearTimeout(this._refreshTimer)\n this._refreshTimer = null\n }\n }\n}\n"]}
@@ -0,0 +1,135 @@
1
+ import { CognitoAuthClient } from './chunk-DKPFVGTY.js';
2
+ import { createContext, useContext, useState, useEffect, useMemo } from 'react';
3
+ import { jsx } from 'react/jsx-runtime';
4
+
5
+ var AuthContext = createContext(null);
6
+ function useAuthContext() {
7
+ const ctx = useContext(AuthContext);
8
+ if (!ctx) {
9
+ throw new Error("useAuthContext must be used inside <AuthProvider>");
10
+ }
11
+ return ctx;
12
+ }
13
+ function AuthProvider({ config, children }) {
14
+ const [client] = useState(() => new CognitoAuthClient(config));
15
+ const [authState, setAuthState] = useState("idle");
16
+ const [user, setUser] = useState(null);
17
+ const [session, setSession] = useState(null);
18
+ useEffect(() => {
19
+ let active = true;
20
+ client.getCurrentUser().then(async (currentUser) => {
21
+ if (!active) return;
22
+ if (currentUser) {
23
+ const s = await client.getSession().catch(() => null);
24
+ if (active) {
25
+ setUser(currentUser);
26
+ setSession(s);
27
+ }
28
+ } else {
29
+ if (active) setAuthState("unauthenticated");
30
+ }
31
+ }).catch(() => {
32
+ if (active) setAuthState("unauthenticated");
33
+ });
34
+ const unsubs = [
35
+ client.on("stateChanged", (s) => {
36
+ if (active) setAuthState(s);
37
+ if (s === "unauthenticated") {
38
+ setUser(null);
39
+ setSession(null);
40
+ }
41
+ }),
42
+ client.on("signedIn", (u) => {
43
+ if (!active) return;
44
+ setUser(u);
45
+ client.getSession().then((s) => {
46
+ if (active) setSession(s);
47
+ }).catch(() => {
48
+ });
49
+ }),
50
+ client.on("signedOut", () => {
51
+ if (active) {
52
+ setUser(null);
53
+ setSession(null);
54
+ }
55
+ }),
56
+ client.on("tokenRefreshed", (s) => {
57
+ if (active) setSession(s);
58
+ }),
59
+ client.on("sessionExpired", () => {
60
+ if (active) {
61
+ setUser(null);
62
+ setSession(null);
63
+ }
64
+ })
65
+ ];
66
+ return () => {
67
+ active = false;
68
+ unsubs.forEach((unsub) => unsub());
69
+ };
70
+ }, [client]);
71
+ const value = useMemo(
72
+ () => ({
73
+ client,
74
+ state: authState,
75
+ user,
76
+ session,
77
+ isLoading: authState === "idle" || authState === "loading",
78
+ isAuthenticated: authState === "authenticated"
79
+ }),
80
+ [client, authState, user, session]
81
+ );
82
+ return /* @__PURE__ */ jsx(AuthContext.Provider, { value, children });
83
+ }
84
+ function useAuth() {
85
+ const { client, state, user, isLoading, isAuthenticated } = useAuthContext();
86
+ const actions = useMemo(
87
+ () => ({
88
+ signIn: (email, password) => client.signIn(email, password),
89
+ signOut: (global) => client.signOut(global),
90
+ signUp: (email, password, attributes) => client.signUp(email, password, attributes),
91
+ confirmSignUp: (email, code) => client.confirmSignUp(email, code),
92
+ resendConfirmationCode: (email) => client.resendConfirmationCode(email),
93
+ forgotPassword: (email) => client.forgotPassword(email),
94
+ confirmForgotPassword: (email, code, newPassword) => client.confirmForgotPassword(email, code, newPassword),
95
+ changePassword: (current, next) => client.changePassword(current, next),
96
+ respondToMfaChallenge: (challengeSession, code, mfaType) => client.respondToMfaChallenge(challengeSession, code, mfaType),
97
+ respondToNewPasswordChallenge: (challengeSession, newPassword, userAttributes) => client.respondToNewPasswordChallenge(challengeSession, newPassword, userAttributes),
98
+ setupTotpChallenge: (challengeSession) => client.setupTotpChallenge(challengeSession),
99
+ verifyTotpChallenge: (challengeSession, code) => client.verifyTotpChallenge(challengeSession, code)
100
+ }),
101
+ [client]
102
+ );
103
+ return {
104
+ // Stato
105
+ user,
106
+ state,
107
+ isLoading,
108
+ isAuthenticated,
109
+ // Azioni
110
+ ...actions,
111
+ // Client raw per casi avanzati
112
+ client
113
+ };
114
+ }
115
+
116
+ // src/react/hooks/useMfa.ts
117
+ function useMfa() {
118
+ const { client } = useAuthContext();
119
+ return {
120
+ /** Avvia il setup TOTP — restituisce secretCode e qrCodeUri per l'app authenticator */
121
+ setup: () => client.setupTotp(),
122
+ /** Conferma il codice TOTP generato dall'app per completare il setup */
123
+ verifySetup: (code) => client.verifyTotpSetup(code),
124
+ /** Legge le preferenze MFA correnti (TOTP abilitato, SMS abilitato, preferito) */
125
+ getPreference: () => client.getMfaPreference(),
126
+ /** Imposta il tipo MFA preferito ('TOTP' | 'SMS') */
127
+ setPreference: (type) => client.setMfaPreference(type),
128
+ /** Disabilita completamente il secondo fattore */
129
+ disable: () => client.disableMfa()
130
+ };
131
+ }
132
+
133
+ export { AuthProvider, useAuth, useAuthContext, useMfa };
134
+ //# sourceMappingURL=chunk-N4OQLBV6.js.map
135
+ //# sourceMappingURL=chunk-N4OQLBV6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/react/context.tsx","../src/react/hooks/useAuth.ts","../src/react/hooks/useMfa.ts"],"names":["useMemo"],"mappings":"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","file":"chunk-N4OQLBV6.js","sourcesContent":["import {\n createContext,\n useContext,\n useEffect,\n useMemo,\n useState,\n type ReactNode,\n} from 'react'\n\nimport { CognitoAuthClient } from '../core/client'\nimport type { AuthConfig, AuthSession, AuthState, AuthUser } from '../core/types'\n\n// ─── Context shape ─────────────────────────────────────────────────────────────\n\nexport interface AuthContextValue {\n client: CognitoAuthClient\n state: AuthState\n user: AuthUser | null\n session: AuthSession | null\n isLoading: boolean\n isAuthenticated: boolean\n}\n\nconst AuthContext = createContext<AuthContextValue | null>(null)\n\n// ─── Internal hook ──────────────────────────────────────────────────────────────\n\nexport function useAuthContext(): AuthContextValue {\n const ctx = useContext(AuthContext)\n if (!ctx) {\n throw new Error('useAuthContext must be used inside <AuthProvider>')\n }\n return ctx\n}\n\n// ─── Provider ──────────────────────────────────────────────────────────────────\n\nexport interface AuthProviderProps {\n config: AuthConfig\n children: ReactNode\n}\n\nexport function AuthProvider({ config, children }: AuthProviderProps) {\n // Client è stabile per tutta la vita del provider — il config viene ignorato dopo il mount\n const [client] = useState(() => new CognitoAuthClient(config))\n\n const [authState, setAuthState] = useState<AuthState>('idle')\n const [user, setUser] = useState<AuthUser | null>(null)\n const [session, setSession] = useState<AuthSession | null>(null)\n\n useEffect(() => {\n let active = true\n\n // Ripristina la sessione dallo storage (localStorage / adapter configurato)\n client\n .getCurrentUser()\n .then(async (currentUser) => {\n if (!active) return\n if (currentUser) {\n const s = await client.getSession().catch(() => null)\n if (active) {\n setUser(currentUser)\n setSession(s)\n }\n } else {\n if (active) setAuthState('unauthenticated')\n }\n })\n .catch(() => {\n if (active) setAuthState('unauthenticated')\n })\n\n const unsubs = [\n client.on('stateChanged', (s: AuthState) => {\n if (active) setAuthState(s)\n // Pulisce user/session per tutti gli stati non autenticati\n if (s === 'unauthenticated') {\n setUser(null)\n setSession(null)\n }\n }),\n client.on('signedIn', (u) => {\n if (!active) return\n setUser(u)\n client\n .getSession()\n .then((s) => { if (active) setSession(s) })\n .catch(() => {})\n }),\n client.on('signedOut', () => {\n if (active) {\n setUser(null)\n setSession(null)\n }\n }),\n client.on('tokenRefreshed', (s) => {\n if (active) setSession(s)\n }),\n client.on('sessionExpired', () => {\n if (active) {\n setUser(null)\n setSession(null)\n }\n }),\n ]\n\n return () => {\n active = false\n unsubs.forEach((unsub) => unsub())\n }\n }, [client])\n\n const value = useMemo<AuthContextValue>(\n () => ({\n client,\n state: authState,\n user,\n session,\n isLoading: authState === 'idle' || authState === 'loading',\n isAuthenticated: authState === 'authenticated',\n }),\n [client, authState, user, session],\n )\n\n return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>\n}\n","import { useMemo } from 'react'\nimport { useAuthContext } from '../context'\nimport type { MfaType, SignInResult } from '../../core/types'\n\nexport function useAuth() {\n const { client, state, user, isLoading, isAuthenticated } = useAuthContext()\n\n // useMemo garantisce riferimenti stabili tra i re-render (client non cambia mai)\n const actions = useMemo(\n () => ({\n signIn: (email: string, password: string): Promise<SignInResult> =>\n client.signIn(email, password),\n\n signOut: (global?: boolean): Promise<void> =>\n client.signOut(global),\n\n signUp: (\n email: string,\n password: string,\n attributes?: Record<string, string>,\n ): Promise<void> => client.signUp(email, password, attributes),\n\n confirmSignUp: (email: string, code: string): Promise<void> =>\n client.confirmSignUp(email, code),\n\n resendConfirmationCode: (email: string): Promise<void> =>\n client.resendConfirmationCode(email),\n\n forgotPassword: (email: string): Promise<void> =>\n client.forgotPassword(email),\n\n confirmForgotPassword: (\n email: string,\n code: string,\n newPassword: string,\n ): Promise<void> => client.confirmForgotPassword(email, code, newPassword),\n\n changePassword: (current: string, next: string): Promise<void> =>\n client.changePassword(current, next),\n\n respondToMfaChallenge: (\n challengeSession: string,\n code: string,\n mfaType: MfaType,\n ): Promise<SignInResult> =>\n client.respondToMfaChallenge(challengeSession, code, mfaType),\n\n respondToNewPasswordChallenge: (\n challengeSession: string,\n newPassword: string,\n userAttributes?: Record<string, string>,\n ): Promise<SignInResult> =>\n client.respondToNewPasswordChallenge(challengeSession, newPassword, userAttributes),\n\n setupTotpChallenge: (challengeSession: string) =>\n client.setupTotpChallenge(challengeSession),\n\n verifyTotpChallenge: (challengeSession: string, code: string): Promise<SignInResult> =>\n client.verifyTotpChallenge(challengeSession, code),\n }),\n [client],\n )\n\n return {\n // Stato\n user,\n state,\n isLoading,\n isAuthenticated,\n // Azioni\n ...actions,\n // Client raw per casi avanzati\n client,\n }\n}\n","import { useAuthContext } from '../context'\nimport type { MfaType } from '../../core/types'\n\nexport function useMfa() {\n const { client } = useAuthContext()\n\n return {\n /** Avvia il setup TOTP — restituisce secretCode e qrCodeUri per l'app authenticator */\n setup: () => client.setupTotp(),\n /** Conferma il codice TOTP generato dall'app per completare il setup */\n verifySetup: (code: string) => client.verifyTotpSetup(code),\n /** Legge le preferenze MFA correnti (TOTP abilitato, SMS abilitato, preferito) */\n getPreference: () => client.getMfaPreference(),\n /** Imposta il tipo MFA preferito ('TOTP' | 'SMS') */\n setPreference: (type: MfaType) => client.setMfaPreference(type),\n /** Disabilita completamente il secondo fattore */\n disable: () => client.disableMfa(),\n }\n}\n"]}
@@ -0,0 +1,69 @@
1
+ import { a as AuthEvents, R as ResolvedAuthConfig, A as AuthConfig, c as AuthState, h as SignInResult, g as MfaType, b as AuthSession, d as AuthUser, f as MfaSetupResult, M as MfaPreference } from './types-bxA1vonL.js';
2
+
3
+ type Listener<T> = T extends void ? () => void : (payload: T) => void;
4
+ declare class TypedEventEmitter<TEvents extends Record<keyof TEvents, any>> {
5
+ private readonly _listeners;
6
+ on<K extends keyof TEvents>(event: K, listener: Listener<TEvents[K]>): () => void;
7
+ off<K extends keyof TEvents>(event: K, listener: Listener<TEvents[K]>): void;
8
+ once<K extends keyof TEvents>(event: K, listener: Listener<TEvents[K]>): () => void;
9
+ protected emit<K extends keyof TEvents>(event: K, ...args: TEvents[K] extends void ? [] : [TEvents[K]]): void;
10
+ removeAllListeners(event?: keyof TEvents): void;
11
+ }
12
+
13
+ declare class CognitoAuthClient extends TypedEventEmitter<AuthEvents> {
14
+ protected readonly config: ResolvedAuthConfig;
15
+ private _state;
16
+ private readonly _pool;
17
+ private _idpClient;
18
+ private readonly _pendingChallenges;
19
+ private _refreshTimer;
20
+ constructor(config: AuthConfig);
21
+ get state(): AuthState;
22
+ protected setState(next: AuthState): void;
23
+ signIn(email: string, password: string): Promise<SignInResult>;
24
+ respondToMfaChallenge(challengeSession: string, code: string, mfaType: MfaType): Promise<SignInResult>;
25
+ respondToNewPasswordChallenge(challengeSession: string, newPassword: string, userAttributes?: Record<string, string>): Promise<SignInResult>;
26
+ signOut(global?: boolean): Promise<void>;
27
+ signUp(email: string, password: string, attributes?: Record<string, string>): Promise<void>;
28
+ confirmSignUp(email: string, code: string): Promise<void>;
29
+ resendConfirmationCode(email: string): Promise<void>;
30
+ forgotPassword(email: string): Promise<void>;
31
+ confirmForgotPassword(email: string, code: string, newPassword: string): Promise<void>;
32
+ changePassword(currentPassword: string, newPassword: string): Promise<void>;
33
+ getSession(): Promise<AuthSession>;
34
+ getCurrentUser(): Promise<AuthUser | null>;
35
+ getUserAttributes(): Promise<Record<string, string>>;
36
+ updateUserAttributes(attributes: Record<string, string>): Promise<void>;
37
+ verifyUserAttribute(attribute: 'email' | 'phone_number', code: string): Promise<void>;
38
+ sendAttributeVerificationCode(attribute: 'email' | 'phone_number'): Promise<void>;
39
+ deleteUser(): Promise<void>;
40
+ setupTotp(): Promise<MfaSetupResult>;
41
+ verifyTotpSetup(code: string): Promise<void>;
42
+ getMfaPreference(): Promise<MfaPreference>;
43
+ setMfaPreference(type: MfaType): Promise<void>;
44
+ disableMfa(): Promise<void>;
45
+ /**
46
+ * Ottiene il secretCode/QR URI per il setup TOTP durante il flusso di login
47
+ * (quando signIn restituisce MFA_SETUP_REQUIRED). Non richiede una sessione
48
+ * autenticata: usa il CognitoUser in attesa nel challenge.
49
+ */
50
+ setupTotpChallenge(challengeSession: string): Promise<MfaSetupResult>;
51
+ /**
52
+ * Verifica il codice TOTP e completa il login. Dopo questa chiamata la
53
+ * sessione è autenticata e il challenge viene rimosso dalla mappa.
54
+ */
55
+ verifyTotpChallenge(challengeSession: string, code: string): Promise<SignInResult>;
56
+ private _getIdpClient;
57
+ private _makeCognitoUser;
58
+ private _storeChallengeUser;
59
+ private _takeChallengeUser;
60
+ /** Legge il CognitoUser senza rimuoverlo dalla mappa (per setupTotpChallenge). */
61
+ private _peekChallengeUser;
62
+ private _onAuthSuccess;
63
+ private _getRawSession;
64
+ private _getAuthenticatedUser;
65
+ private _scheduleRefresh;
66
+ private _clearRefreshTimer;
67
+ }
68
+
69
+ export { CognitoAuthClient as C, TypedEventEmitter as T };
@@ -0,0 +1,69 @@
1
+ import { a as AuthEvents, R as ResolvedAuthConfig, A as AuthConfig, c as AuthState, h as SignInResult, g as MfaType, b as AuthSession, d as AuthUser, f as MfaSetupResult, M as MfaPreference } from './types-bxA1vonL.cjs';
2
+
3
+ type Listener<T> = T extends void ? () => void : (payload: T) => void;
4
+ declare class TypedEventEmitter<TEvents extends Record<keyof TEvents, any>> {
5
+ private readonly _listeners;
6
+ on<K extends keyof TEvents>(event: K, listener: Listener<TEvents[K]>): () => void;
7
+ off<K extends keyof TEvents>(event: K, listener: Listener<TEvents[K]>): void;
8
+ once<K extends keyof TEvents>(event: K, listener: Listener<TEvents[K]>): () => void;
9
+ protected emit<K extends keyof TEvents>(event: K, ...args: TEvents[K] extends void ? [] : [TEvents[K]]): void;
10
+ removeAllListeners(event?: keyof TEvents): void;
11
+ }
12
+
13
+ declare class CognitoAuthClient extends TypedEventEmitter<AuthEvents> {
14
+ protected readonly config: ResolvedAuthConfig;
15
+ private _state;
16
+ private readonly _pool;
17
+ private _idpClient;
18
+ private readonly _pendingChallenges;
19
+ private _refreshTimer;
20
+ constructor(config: AuthConfig);
21
+ get state(): AuthState;
22
+ protected setState(next: AuthState): void;
23
+ signIn(email: string, password: string): Promise<SignInResult>;
24
+ respondToMfaChallenge(challengeSession: string, code: string, mfaType: MfaType): Promise<SignInResult>;
25
+ respondToNewPasswordChallenge(challengeSession: string, newPassword: string, userAttributes?: Record<string, string>): Promise<SignInResult>;
26
+ signOut(global?: boolean): Promise<void>;
27
+ signUp(email: string, password: string, attributes?: Record<string, string>): Promise<void>;
28
+ confirmSignUp(email: string, code: string): Promise<void>;
29
+ resendConfirmationCode(email: string): Promise<void>;
30
+ forgotPassword(email: string): Promise<void>;
31
+ confirmForgotPassword(email: string, code: string, newPassword: string): Promise<void>;
32
+ changePassword(currentPassword: string, newPassword: string): Promise<void>;
33
+ getSession(): Promise<AuthSession>;
34
+ getCurrentUser(): Promise<AuthUser | null>;
35
+ getUserAttributes(): Promise<Record<string, string>>;
36
+ updateUserAttributes(attributes: Record<string, string>): Promise<void>;
37
+ verifyUserAttribute(attribute: 'email' | 'phone_number', code: string): Promise<void>;
38
+ sendAttributeVerificationCode(attribute: 'email' | 'phone_number'): Promise<void>;
39
+ deleteUser(): Promise<void>;
40
+ setupTotp(): Promise<MfaSetupResult>;
41
+ verifyTotpSetup(code: string): Promise<void>;
42
+ getMfaPreference(): Promise<MfaPreference>;
43
+ setMfaPreference(type: MfaType): Promise<void>;
44
+ disableMfa(): Promise<void>;
45
+ /**
46
+ * Ottiene il secretCode/QR URI per il setup TOTP durante il flusso di login
47
+ * (quando signIn restituisce MFA_SETUP_REQUIRED). Non richiede una sessione
48
+ * autenticata: usa il CognitoUser in attesa nel challenge.
49
+ */
50
+ setupTotpChallenge(challengeSession: string): Promise<MfaSetupResult>;
51
+ /**
52
+ * Verifica il codice TOTP e completa il login. Dopo questa chiamata la
53
+ * sessione è autenticata e il challenge viene rimosso dalla mappa.
54
+ */
55
+ verifyTotpChallenge(challengeSession: string, code: string): Promise<SignInResult>;
56
+ private _getIdpClient;
57
+ private _makeCognitoUser;
58
+ private _storeChallengeUser;
59
+ private _takeChallengeUser;
60
+ /** Legge il CognitoUser senza rimuoverlo dalla mappa (per setupTotpChallenge). */
61
+ private _peekChallengeUser;
62
+ private _onAuthSuccess;
63
+ private _getRawSession;
64
+ private _getAuthenticatedUser;
65
+ private _scheduleRefresh;
66
+ private _clearRefreshTimer;
67
+ }
68
+
69
+ export { CognitoAuthClient as C, TypedEventEmitter as T };