@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/react/context.tsx","../../src/react/hooks/useAuth.ts","../../src/ui/hooks/useSignInForm.ts","../../src/ui/hooks/useRegisterForm.ts","../../src/ui/hooks/useForgotPasswordForm.ts","../../src/ui/hooks/useChangePasswordForm.ts","../../src/react/hooks/useMfa.ts","../../src/ui/hooks/useMfaSetup.ts","../../src/ui/components/SignInForm.tsx","../../src/ui/components/RegisterForm.tsx","../../src/ui/components/ForgotPasswordForm.tsx","../../src/ui/components/ChangePasswordForm.tsx","../../src/ui/components/MfaSetupWizard.tsx"],"names":["createContext","useContext","useMemo","useState","useCallback","useId","useRef","useEffect","jsxs","jsx","Fragment"],"mappings":"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","file":"index.cjs","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 { useCallback, useState, type FormEvent } from 'react'\nimport { useAuth } from '../../react/hooks/useAuth'\nimport type { CognitoAuthError } from '../../core/errors'\nimport type { MfaType, SignInResult } from '../../core/types'\n\nexport type SignInStep = 'credentials' | 'mfa' | 'new_password' | 'mfa_setup'\n\nexport interface UseSignInFormOptions {\n onSuccess?: (result: Extract<SignInResult, { status: 'SUCCESS' }>) => void\n onError?: (error: CognitoAuthError) => void\n}\n\nexport interface UseSignInFormReturn {\n step: SignInStep\n isLoading: boolean\n error: CognitoAuthError | null\n mfaType: MfaType | null\n\n credentials: {\n email: string\n password: string\n setEmail(v: string): void\n setPassword(v: string): void\n onSubmit(e: FormEvent): void\n }\n\n mfa: {\n code: string\n setCode(v: string): void\n onSubmit(e: FormEvent): void\n }\n\n newPassword: {\n password: string\n confirmPassword: string\n requiredAttributes: string[]\n setPassword(v: string): void\n setConfirmPassword(v: string): void\n onSubmit(e: FormEvent): void\n }\n\n mfaSetup: {\n qrCodeUri: string | null\n secretCode: string | null\n totpCode: string\n setTotpCode(v: string): void\n /** Chiama setupTotpChallenge e popola qrCodeUri / secretCode */\n start(): Promise<void>\n /** Chiama verifyTotpChallenge poi handleSignInResult */\n onVerify(e: FormEvent): void\n }\n\n reset(): void\n}\n\nexport function useSignInForm(options: UseSignInFormOptions = {}): UseSignInFormReturn {\n const {\n signIn,\n respondToMfaChallenge,\n respondToNewPasswordChallenge,\n setupTotpChallenge,\n verifyTotpChallenge,\n } = useAuth()\n\n const [step, setStep] = useState<SignInStep>('credentials')\n const [isLoading, setLoading] = useState(false)\n const [error, setError] = useState<CognitoAuthError | null>(null)\n\n const [email, setEmail] = useState('')\n const [password, setPassword] = useState('')\n\n const [mfaType, setMfaType] = useState<MfaType | null>(null)\n const [challengeSession, setChallengeSession] = useState<string | null>(null)\n const [mfaCode, setMfaCode] = useState('')\n\n const [newPwd, setNewPwd] = useState('')\n const [confirmPwd, setConfirmPwd] = useState('')\n const [requiredAttributes, setRequiredAttributes] = useState<string[]>([])\n\n // MFA setup during login (MFA_SETUP_REQUIRED challenge)\n const [mfaSetupQrCodeUri, setMfaSetupQrCodeUri] = useState<string | null>(null)\n const [mfaSetupSecretCode, setMfaSetupSecretCode] = useState<string | null>(null)\n const [mfaSetupTotpCode, setMfaSetupTotpCode] = useState('')\n\n const handleSignInResult = useCallback(\n (result: SignInResult) => {\n if (result.status === 'SUCCESS') {\n options.onSuccess?.(result)\n } else if (result.status === 'MFA_REQUIRED') {\n setMfaType(result.mfaType)\n setChallengeSession(result.challengeSession)\n setStep('mfa')\n } else if (result.status === 'NEW_PASSWORD_REQUIRED') {\n setChallengeSession(result.challengeSession)\n setRequiredAttributes(result.requiredAttributes)\n setStep('new_password')\n } else if (result.status === 'MFA_SETUP_REQUIRED') {\n setChallengeSession(result.challengeSession)\n setStep('mfa_setup')\n }\n },\n [options],\n )\n\n const handleCredentialsSubmit = useCallback(\n async (e: FormEvent) => {\n e.preventDefault()\n setError(null)\n setLoading(true)\n try {\n const result = await signIn(email, password)\n handleSignInResult(result)\n } catch (err) {\n const authErr = err as CognitoAuthError\n setError(authErr)\n options.onError?.(authErr)\n } finally {\n setLoading(false)\n }\n },\n [email, password, signIn, handleSignInResult, options],\n )\n\n const handleMfaSubmit = useCallback(\n async (e: FormEvent) => {\n e.preventDefault()\n if (!challengeSession || !mfaType) return\n setError(null)\n setLoading(true)\n try {\n const result = await respondToMfaChallenge(challengeSession, mfaCode, mfaType)\n handleSignInResult(result)\n } catch (err) {\n const authErr = err as CognitoAuthError\n setError(authErr)\n options.onError?.(authErr)\n } finally {\n setLoading(false)\n }\n },\n [challengeSession, mfaType, mfaCode, respondToMfaChallenge, handleSignInResult, options],\n )\n\n const handleNewPasswordSubmit = useCallback(\n async (e: FormEvent) => {\n e.preventDefault()\n if (!challengeSession) return\n if (newPwd !== confirmPwd) {\n setError({ message: 'Le password non coincidono', code: 'INVALID_PASSWORD' } as CognitoAuthError)\n return\n }\n setError(null)\n setLoading(true)\n try {\n const result = await respondToNewPasswordChallenge(challengeSession, newPwd)\n handleSignInResult(result)\n } catch (err) {\n const authErr = err as CognitoAuthError\n setError(authErr)\n options.onError?.(authErr)\n } finally {\n setLoading(false)\n }\n },\n [challengeSession, newPwd, confirmPwd, respondToNewPasswordChallenge, handleSignInResult, options],\n )\n\n const handleMfaSetupStart = useCallback(async () => {\n if (!challengeSession) return\n setError(null)\n setLoading(true)\n try {\n const result = await setupTotpChallenge(challengeSession)\n setMfaSetupQrCodeUri(result.qrCodeUri)\n setMfaSetupSecretCode(result.secretCode)\n } catch (err) {\n const authErr = err as CognitoAuthError\n setError(authErr)\n options.onError?.(authErr)\n } finally {\n setLoading(false)\n }\n }, [challengeSession, setupTotpChallenge, options])\n\n const handleMfaSetupVerify = useCallback(\n async (e: FormEvent) => {\n e.preventDefault()\n if (!challengeSession) return\n setError(null)\n setLoading(true)\n try {\n const result = await verifyTotpChallenge(challengeSession, mfaSetupTotpCode)\n handleSignInResult(result)\n } catch (err) {\n const authErr = err as CognitoAuthError\n setError(authErr)\n options.onError?.(authErr)\n } finally {\n setLoading(false)\n }\n },\n [challengeSession, mfaSetupTotpCode, verifyTotpChallenge, handleSignInResult, options],\n )\n\n const reset = useCallback(() => {\n setStep('credentials')\n setEmail('')\n setPassword('')\n setMfaCode('')\n setNewPwd('')\n setConfirmPwd('')\n setError(null)\n setMfaType(null)\n setChallengeSession(null)\n setMfaSetupQrCodeUri(null)\n setMfaSetupSecretCode(null)\n setMfaSetupTotpCode('')\n }, [])\n\n return {\n step,\n isLoading,\n error,\n mfaType,\n credentials: { email, password, setEmail, setPassword, onSubmit: handleCredentialsSubmit },\n mfa: { code: mfaCode, setCode: setMfaCode, onSubmit: handleMfaSubmit },\n newPassword: {\n password: newPwd,\n confirmPassword: confirmPwd,\n requiredAttributes,\n setPassword: setNewPwd,\n setConfirmPassword: setConfirmPwd,\n onSubmit: handleNewPasswordSubmit,\n },\n mfaSetup: {\n qrCodeUri: mfaSetupQrCodeUri,\n secretCode: mfaSetupSecretCode,\n totpCode: mfaSetupTotpCode,\n setTotpCode: setMfaSetupTotpCode,\n start: handleMfaSetupStart,\n onVerify: handleMfaSetupVerify,\n },\n reset,\n }\n}\n","import { useCallback, useState, type FormEvent } from 'react'\nimport { useAuth } from '../../react/hooks/useAuth'\nimport type { CognitoAuthError } from '../../core/errors'\n\nexport type RegisterStep = 'register' | 'confirm'\n\nexport interface UseRegisterFormOptions {\n onSuccess?: () => void\n onError?: (error: CognitoAuthError) => void\n /** Attributi aggiuntivi (es. name, phone_number) */\n extraAttributes?: Record<string, string>\n}\n\nexport interface UseRegisterFormReturn {\n step: RegisterStep\n isLoading: boolean\n error: CognitoAuthError | null\n\n register: {\n email: string\n password: string\n confirmPassword: string\n setEmail(v: string): void\n setPassword(v: string): void\n setConfirmPassword(v: string): void\n onSubmit(e: FormEvent): void\n }\n\n confirm: {\n email: string\n code: string\n setCode(v: string): void\n onSubmit(e: FormEvent): void\n resend(): Promise<void>\n }\n\n reset(): void\n}\n\nexport function useRegisterForm(options: UseRegisterFormOptions = {}): UseRegisterFormReturn {\n const { signUp, confirmSignUp, resendConfirmationCode } = useAuth()\n\n const [step, setStep] = useState<RegisterStep>('register')\n const [isLoading, setLoading] = useState(false)\n const [error, setError] = useState<CognitoAuthError | null>(null)\n\n const [email, setEmail] = useState('')\n const [password, setPassword] = useState('')\n const [confirmPassword, setConfirmPassword] = useState('')\n const [code, setCode] = useState('')\n\n const handleRegisterSubmit = useCallback(\n async (e: FormEvent) => {\n e.preventDefault()\n if (password !== confirmPassword) {\n setError({ message: 'Le password non coincidono', code: 'INVALID_PASSWORD' } as CognitoAuthError)\n return\n }\n setError(null)\n setLoading(true)\n try {\n await signUp(email, password, options.extraAttributes)\n setStep('confirm')\n } catch (err) {\n const authErr = err as CognitoAuthError\n setError(authErr)\n options.onError?.(authErr)\n } finally {\n setLoading(false)\n }\n },\n [email, password, confirmPassword, signUp, options],\n )\n\n const handleConfirmSubmit = useCallback(\n async (e: FormEvent) => {\n e.preventDefault()\n setError(null)\n setLoading(true)\n try {\n await confirmSignUp(email, code)\n options.onSuccess?.()\n } catch (err) {\n const authErr = err as CognitoAuthError\n setError(authErr)\n options.onError?.(authErr)\n } finally {\n setLoading(false)\n }\n },\n [email, code, confirmSignUp, options],\n )\n\n const resend = useCallback(async () => {\n setError(null)\n try {\n await resendConfirmationCode(email)\n } catch (err) {\n setError(err as CognitoAuthError)\n }\n }, [email, resendConfirmationCode])\n\n const reset = useCallback(() => {\n setStep('register')\n setEmail('')\n setPassword('')\n setConfirmPassword('')\n setCode('')\n setError(null)\n }, [])\n\n return {\n step,\n isLoading,\n error,\n register: { email, password, confirmPassword, setEmail, setPassword, setConfirmPassword, onSubmit: handleRegisterSubmit },\n confirm: { email, code, setCode, onSubmit: handleConfirmSubmit, resend },\n reset,\n }\n}\n","import { useCallback, useState, type FormEvent } from 'react'\nimport { useAuth } from '../../react/hooks/useAuth'\nimport type { CognitoAuthError } from '../../core/errors'\n\nexport type ForgotPasswordStep = 'request' | 'reset'\n\nexport interface UseForgotPasswordFormOptions {\n onSuccess?: () => void\n onError?: (error: CognitoAuthError) => void\n}\n\nexport interface UseForgotPasswordFormReturn {\n step: ForgotPasswordStep\n isLoading: boolean\n error: CognitoAuthError | null\n\n request: {\n email: string\n setEmail(v: string): void\n onSubmit(e: FormEvent): void\n }\n\n reset: {\n email: string\n code: string\n newPassword: string\n confirmPassword: string\n setCode(v: string): void\n setNewPassword(v: string): void\n setConfirmPassword(v: string): void\n onSubmit(e: FormEvent): void\n }\n\n restart(): void\n}\n\nexport function useForgotPasswordForm(\n options: UseForgotPasswordFormOptions = {},\n): UseForgotPasswordFormReturn {\n const { forgotPassword, confirmForgotPassword } = useAuth()\n\n const [step, setStep] = useState<ForgotPasswordStep>('request')\n const [isLoading, setLoading] = useState(false)\n const [error, setError] = useState<CognitoAuthError | null>(null)\n\n const [email, setEmail] = useState('')\n const [code, setCode] = useState('')\n const [newPassword, setNewPassword] = useState('')\n const [confirmPassword, setConfirmPassword] = useState('')\n\n const handleRequestSubmit = useCallback(\n async (e: FormEvent) => {\n e.preventDefault()\n setError(null)\n setLoading(true)\n try {\n await forgotPassword(email)\n setStep('reset')\n } catch (err) {\n const authErr = err as CognitoAuthError\n setError(authErr)\n options.onError?.(authErr)\n } finally {\n setLoading(false)\n }\n },\n [email, forgotPassword, options],\n )\n\n const handleResetSubmit = useCallback(\n async (e: FormEvent) => {\n e.preventDefault()\n if (newPassword !== confirmPassword) {\n setError({ message: 'Le password non coincidono', code: 'INVALID_PASSWORD' } as CognitoAuthError)\n return\n }\n setError(null)\n setLoading(true)\n try {\n await confirmForgotPassword(email, code, newPassword)\n options.onSuccess?.()\n } catch (err) {\n const authErr = err as CognitoAuthError\n setError(authErr)\n options.onError?.(authErr)\n } finally {\n setLoading(false)\n }\n },\n [email, code, newPassword, confirmPassword, confirmForgotPassword, options],\n )\n\n const restart = useCallback(() => {\n setStep('request')\n setCode('')\n setNewPassword('')\n setConfirmPassword('')\n setError(null)\n }, [])\n\n return {\n step,\n isLoading,\n error,\n request: { email, setEmail, onSubmit: handleRequestSubmit },\n reset: { email, code, newPassword, confirmPassword, setCode, setNewPassword, setConfirmPassword, onSubmit: handleResetSubmit },\n restart,\n }\n}\n","import { useCallback, useState, type FormEvent } from 'react'\nimport { useAuth } from '../../react/hooks/useAuth'\nimport type { CognitoAuthError } from '../../core/errors'\n\nexport interface UseChangePasswordFormOptions {\n onSuccess?: () => void\n onError?: (error: CognitoAuthError) => void\n}\n\nexport interface UseChangePasswordFormReturn {\n isLoading: boolean\n error: CognitoAuthError | null\n success: boolean\n currentPassword: string\n newPassword: string\n confirmPassword: string\n setCurrentPassword(v: string): void\n setNewPassword(v: string): void\n setConfirmPassword(v: string): void\n onSubmit(e: FormEvent): void\n reset(): void\n}\n\nexport function useChangePasswordForm(\n options: UseChangePasswordFormOptions = {},\n): UseChangePasswordFormReturn {\n const { changePassword } = useAuth()\n\n const [isLoading, setLoading] = useState(false)\n const [error, setError] = useState<CognitoAuthError | null>(null)\n const [success, setSuccess] = useState(false)\n const [currentPassword, setCurrentPassword] = useState('')\n const [newPassword, setNewPassword] = useState('')\n const [confirmPassword, setConfirmPassword] = useState('')\n\n const handleSubmit = useCallback(\n async (e: FormEvent) => {\n e.preventDefault()\n if (newPassword !== confirmPassword) {\n setError({ message: 'Le nuove password non coincidono', code: 'INVALID_PASSWORD' } as CognitoAuthError)\n return\n }\n setError(null)\n setLoading(true)\n try {\n await changePassword(currentPassword, newPassword)\n setSuccess(true)\n options.onSuccess?.()\n } catch (err) {\n const authErr = err as CognitoAuthError\n setError(authErr)\n options.onError?.(authErr)\n } finally {\n setLoading(false)\n }\n },\n [currentPassword, newPassword, confirmPassword, changePassword, options],\n )\n\n const reset = useCallback(() => {\n setCurrentPassword('')\n setNewPassword('')\n setConfirmPassword('')\n setError(null)\n setSuccess(false)\n }, [])\n\n return {\n isLoading,\n error,\n success,\n currentPassword,\n newPassword,\n confirmPassword,\n setCurrentPassword,\n setNewPassword,\n setConfirmPassword,\n onSubmit: handleSubmit,\n reset,\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","import { useCallback, useState, type FormEvent } from 'react'\nimport { useMfa } from '../../react/hooks/useMfa'\nimport type { CognitoAuthError } from '../../core/errors'\n\nexport type MfaSetupStep = 'idle' | 'loading' | 'scan' | 'verify' | 'done'\n\nexport interface UseMfaSetupOptions {\n onSuccess?: () => void\n onError?: (error: CognitoAuthError) => void\n}\n\nexport interface UseMfaSetupReturn {\n step: MfaSetupStep\n isLoading: boolean\n error: CognitoAuthError | null\n /** URI otpauth:// da passare a un QR code renderer */\n qrCodeUri: string | null\n /** Secret testuale (per inserimento manuale nell'app) */\n secretCode: string | null\n totpCode: string\n setTotpCode(v: string): void\n /** Avvia il setup TOTP */\n start(): Promise<void>\n /** Verifica il codice inserito dall'app authenticator */\n onVerify(e: FormEvent): void\n reset(): void\n}\n\nexport function useMfaSetup(options: UseMfaSetupOptions = {}): UseMfaSetupReturn {\n const { setup, verifySetup } = useMfa()\n\n const [step, setStep] = useState<MfaSetupStep>('idle')\n const [error, setError] = useState<CognitoAuthError | null>(null)\n const [qrCodeUri, setQrCodeUri] = useState<string | null>(null)\n const [secretCode, setSecretCode] = useState<string | null>(null)\n const [totpCode, setTotpCode] = useState('')\n\n const start = useCallback(async () => {\n setError(null)\n setStep('loading')\n try {\n const result = await setup()\n setQrCodeUri(result.qrCodeUri)\n setSecretCode(result.secretCode)\n setStep('scan')\n } catch (err) {\n const authErr = err as CognitoAuthError\n setError(authErr)\n setStep('idle')\n options.onError?.(authErr)\n }\n }, [setup, options])\n\n const handleVerify = useCallback(\n async (e: FormEvent) => {\n e.preventDefault()\n setError(null)\n setStep('loading')\n try {\n await verifySetup(totpCode)\n setStep('done')\n options.onSuccess?.()\n } catch (err) {\n const authErr = err as CognitoAuthError\n setError(authErr)\n setStep('verify')\n options.onError?.(authErr)\n }\n },\n [totpCode, verifySetup, options],\n )\n\n const reset = useCallback(() => {\n setStep('idle')\n setError(null)\n setQrCodeUri(null)\n setSecretCode(null)\n setTotpCode('')\n }, [])\n\n return {\n step,\n isLoading: step === 'loading',\n error,\n qrCodeUri,\n secretCode,\n totpCode,\n setTotpCode,\n start,\n onVerify: handleVerify,\n reset,\n }\n}\n","import { useEffect, useId, useRef, type ReactNode } from 'react'\nimport { useSignInForm, type UseSignInFormOptions } from '../hooks/useSignInForm'\n\nexport interface SignInFormProps extends UseSignInFormOptions {\n className?: string\n labels?: {\n email?: string\n password?: string\n submit?: string\n mfaCode?: string\n mfaSubmit?: string\n newPassword?: string\n confirmNewPassword?: string\n newPasswordSubmit?: string\n mfaSetupScanInstruction?: string\n mfaSetupSecretLabel?: string\n mfaSetupCode?: string\n mfaSetupSubmit?: string\n }\n /** Slot per il link \"Password dimenticata?\" */\n forgotPasswordLink?: ReactNode\n /** Slot per il link \"Crea account\" */\n registerLink?: ReactNode\n /**\n * Render del QR code per lo step mfa_setup.\n * Riceve il URI otpauth:// — usa react-qr-code o simile.\n * Default: mostra il URI come testo copiabile.\n */\n renderQrCode?: (uri: string) => ReactNode\n}\n\nexport function SignInForm({\n className,\n labels = {},\n forgotPasswordLink,\n registerLink,\n renderQrCode,\n onSuccess,\n onError,\n}: SignInFormProps) {\n const uid = useId()\n const form = useSignInForm({ onSuccess, onError })\n const firstInputRef = useRef<HTMLInputElement>(null)\n\n useEffect(() => {\n firstInputRef.current?.focus()\n // Auto-start TOTP challenge setup when step transitions to mfa_setup\n if (form.step === 'mfa_setup') {\n void form.mfaSetup.start()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [form.step])\n\n const l = {\n email: labels.email ?? 'Email',\n password: labels.password ?? 'Password',\n submit: labels.submit ?? 'Accedi',\n mfaCode: labels.mfaCode ?? 'Codice',\n mfaSubmit: labels.mfaSubmit ?? 'Verifica',\n newPassword: labels.newPassword ?? 'Nuova password',\n confirmNewPassword: labels.confirmNewPassword ?? 'Conferma password',\n newPasswordSubmit: labels.newPasswordSubmit ?? 'Imposta password',\n mfaSetupScanInstruction:\n labels.mfaSetupScanInstruction ??\n \"Scansiona il QR code con la tua app authenticator (Google Authenticator, Authy, 1Password…)\",\n mfaSetupSecretLabel: labels.mfaSetupSecretLabel ?? 'Oppure inserisci il codice manualmente',\n mfaSetupCode: labels.mfaSetupCode ?? 'Codice a 6 cifre',\n mfaSetupSubmit: labels.mfaSetupSubmit ?? 'Verifica e attiva',\n }\n\n const errorId = `${uid}-error`\n\n if (form.step === 'mfa') {\n return (\n <form\n onSubmit={form.mfa.onSubmit}\n className={className}\n aria-label=\"Verifica codice MFA\"\n >\n <p>\n Inserisci il codice{' '}\n {form.mfaType === 'TOTP' ? \"dall'app authenticator\" : 'ricevuto via SMS'}\n </p>\n <div id={errorId} role=\"alert\" aria-live=\"assertive\" aria-atomic=\"true\">\n {form.error?.message}\n </div>\n <div>\n <label htmlFor={`${uid}-mfa-code`}>{l.mfaCode}</label>\n <input\n id={`${uid}-mfa-code`}\n ref={firstInputRef}\n type=\"text\"\n inputMode=\"numeric\"\n maxLength={6}\n autoComplete=\"one-time-code\"\n autoFocus\n required\n aria-required=\"true\"\n aria-invalid={!!form.error}\n aria-describedby={form.error ? errorId : undefined}\n value={form.mfa.code}\n onChange={(e) => form.mfa.setCode(e.target.value)}\n />\n </div>\n <button type=\"submit\" disabled={form.isLoading} aria-busy={form.isLoading}>\n {form.isLoading ? (\n <>\n <span aria-hidden=\"true\">...</span>\n <span className=\"sr-only\">Caricamento...</span>\n </>\n ) : (\n l.mfaSubmit\n )}\n </button>\n </form>\n )\n }\n\n if (form.step === 'new_password') {\n return (\n <form\n onSubmit={form.newPassword.onSubmit}\n className={className}\n aria-label=\"Imposta nuova password\"\n >\n <p>Devi impostare una nuova password per continuare.</p>\n <div id={errorId} role=\"alert\" aria-live=\"assertive\" aria-atomic=\"true\">\n {form.error?.message}\n </div>\n <div>\n <label htmlFor={`${uid}-new-password`}>{l.newPassword}</label>\n <input\n id={`${uid}-new-password`}\n ref={firstInputRef}\n type=\"password\"\n autoComplete=\"new-password\"\n autoFocus\n required\n aria-required=\"true\"\n aria-invalid={!!form.error}\n aria-describedby={form.error ? errorId : undefined}\n value={form.newPassword.password}\n onChange={(e) => form.newPassword.setPassword(e.target.value)}\n />\n </div>\n <div>\n <label htmlFor={`${uid}-confirm-password`}>{l.confirmNewPassword}</label>\n <input\n id={`${uid}-confirm-password`}\n type=\"password\"\n autoComplete=\"new-password\"\n required\n aria-required=\"true\"\n aria-invalid={!!form.error}\n value={form.newPassword.confirmPassword}\n onChange={(e) => form.newPassword.setConfirmPassword(e.target.value)}\n />\n </div>\n <button type=\"submit\" disabled={form.isLoading} aria-busy={form.isLoading}>\n {form.isLoading ? (\n <>\n <span aria-hidden=\"true\">...</span>\n <span className=\"sr-only\">Caricamento...</span>\n </>\n ) : (\n l.newPasswordSubmit\n )}\n </button>\n </form>\n )\n }\n\n if (form.step === 'mfa_setup') {\n return (\n <div className={className}>\n <div id={errorId} role=\"alert\" aria-live=\"assertive\" aria-atomic=\"true\">\n {form.error?.message}\n </div>\n\n {form.isLoading && !form.mfaSetup.qrCodeUri && (\n <p aria-live=\"polite\" aria-atomic=\"true\">\n Inizializzazione in corso...\n </p>\n )}\n\n {form.mfaSetup.qrCodeUri && (\n <div>\n <p>{l.mfaSetupScanInstruction}</p>\n {renderQrCode ? (\n renderQrCode(form.mfaSetup.qrCodeUri)\n ) : (\n <code style={{ wordBreak: 'break-all', fontSize: '0.75em' }}>\n {form.mfaSetup.qrCodeUri}\n </code>\n )}\n {form.mfaSetup.secretCode && (\n <p>\n {l.mfaSetupSecretLabel}: <code>{form.mfaSetup.secretCode}</code>\n </p>\n )}\n </div>\n )}\n\n <form onSubmit={form.mfaSetup.onVerify} aria-label=\"Verifica configurazione MFA\">\n <div>\n <label htmlFor={`${uid}-totp-code`}>{l.mfaSetupCode}</label>\n <input\n id={`${uid}-totp-code`}\n ref={firstInputRef}\n type=\"text\"\n inputMode=\"numeric\"\n maxLength={6}\n autoComplete=\"one-time-code\"\n autoFocus\n required\n aria-required=\"true\"\n aria-invalid={!!form.error}\n aria-describedby={form.error ? errorId : undefined}\n disabled={form.isLoading && !form.mfaSetup.qrCodeUri}\n value={form.mfaSetup.totpCode}\n onChange={(e) => form.mfaSetup.setTotpCode(e.target.value)}\n />\n </div>\n <button\n type=\"submit\"\n disabled={form.isLoading || form.mfaSetup.totpCode.length !== 6}\n aria-busy={form.isLoading}\n >\n {form.isLoading ? (\n <>\n <span aria-hidden=\"true\">...</span>\n <span className=\"sr-only\">Caricamento...</span>\n </>\n ) : (\n l.mfaSetupSubmit\n )}\n </button>\n </form>\n </div>\n )\n }\n\n // Default: credentials step\n return (\n <form\n onSubmit={form.credentials.onSubmit}\n className={className}\n aria-label=\"Accedi al tuo account\"\n >\n <div id={errorId} role=\"alert\" aria-live=\"assertive\" aria-atomic=\"true\">\n {form.error?.message}\n </div>\n <div>\n <label htmlFor={`${uid}-email`}>{l.email}</label>\n <input\n id={`${uid}-email`}\n ref={firstInputRef}\n type=\"email\"\n autoComplete=\"email\"\n autoFocus\n required\n aria-required=\"true\"\n aria-invalid={!!form.error}\n aria-describedby={form.error ? errorId : undefined}\n value={form.credentials.email}\n onChange={(e) => form.credentials.setEmail(e.target.value)}\n />\n </div>\n <div>\n <label htmlFor={`${uid}-password`}>{l.password}</label>\n <input\n id={`${uid}-password`}\n type=\"password\"\n autoComplete=\"current-password\"\n required\n aria-required=\"true\"\n aria-invalid={!!form.error}\n value={form.credentials.password}\n onChange={(e) => form.credentials.setPassword(e.target.value)}\n />\n </div>\n {forgotPasswordLink}\n <button type=\"submit\" disabled={form.isLoading} aria-busy={form.isLoading}>\n {form.isLoading ? (\n <>\n <span aria-hidden=\"true\">...</span>\n <span className=\"sr-only\">Caricamento...</span>\n </>\n ) : (\n l.submit\n )}\n </button>\n {registerLink}\n </form>\n )\n}\n","import { useEffect, useId, useRef, type ReactNode } from 'react'\nimport { useRegisterForm, type UseRegisterFormOptions } from '../hooks/useRegisterForm'\n\nexport interface RegisterFormProps extends UseRegisterFormOptions {\n className?: string\n labels?: {\n email?: string\n password?: string\n confirmPassword?: string\n submit?: string\n code?: string\n confirmSubmit?: string\n resend?: string\n }\n signInLink?: ReactNode\n}\n\nexport function RegisterForm({\n className,\n labels = {},\n signInLink,\n onSuccess,\n onError,\n extraAttributes,\n}: RegisterFormProps) {\n const uid = useId()\n const form = useRegisterForm({ onSuccess, onError, extraAttributes })\n const firstInputRef = useRef<HTMLInputElement>(null)\n\n useEffect(() => {\n firstInputRef.current?.focus()\n }, [form.step])\n\n const l = {\n email: labels.email ?? 'Email',\n password: labels.password ?? 'Password',\n confirmPassword: labels.confirmPassword ?? 'Conferma password',\n submit: labels.submit ?? 'Registrati',\n code: labels.code ?? 'Codice di verifica',\n confirmSubmit: labels.confirmSubmit ?? 'Conferma',\n resend: labels.resend ?? 'Invia di nuovo',\n }\n\n const errorId = `${uid}-error`\n\n if (form.step === 'confirm') {\n return (\n <form\n onSubmit={form.confirm.onSubmit}\n className={className}\n aria-label=\"Conferma registrazione\"\n >\n <p>\n Controlla la tua email <strong>{form.confirm.email}</strong> e inserisci il codice\n ricevuto.\n </p>\n <div id={errorId} role=\"alert\" aria-live=\"assertive\" aria-atomic=\"true\">\n {form.error?.message}\n </div>\n <div>\n <label htmlFor={`${uid}-code`}>{l.code}</label>\n <input\n id={`${uid}-code`}\n ref={firstInputRef}\n type=\"text\"\n inputMode=\"numeric\"\n maxLength={6}\n autoComplete=\"one-time-code\"\n autoFocus\n required\n aria-required=\"true\"\n aria-invalid={!!form.error}\n aria-describedby={form.error ? errorId : undefined}\n value={form.confirm.code}\n onChange={(e) => form.confirm.setCode(e.target.value)}\n />\n </div>\n <button type=\"submit\" disabled={form.isLoading} aria-busy={form.isLoading}>\n {form.isLoading ? (\n <>\n <span aria-hidden=\"true\">...</span>\n <span className=\"sr-only\">Caricamento...</span>\n </>\n ) : (\n l.confirmSubmit\n )}\n </button>\n <button type=\"button\" onClick={form.confirm.resend}>\n {l.resend}\n </button>\n </form>\n )\n }\n\n return (\n <form\n onSubmit={form.register.onSubmit}\n className={className}\n aria-label=\"Crea un nuovo account\"\n >\n <div id={errorId} role=\"alert\" aria-live=\"assertive\" aria-atomic=\"true\">\n {form.error?.message}\n </div>\n <div>\n <label htmlFor={`${uid}-email`}>{l.email}</label>\n <input\n id={`${uid}-email`}\n ref={firstInputRef}\n type=\"email\"\n autoComplete=\"email\"\n autoFocus\n required\n aria-required=\"true\"\n aria-invalid={!!form.error}\n aria-describedby={form.error ? errorId : undefined}\n value={form.register.email}\n onChange={(e) => form.register.setEmail(e.target.value)}\n />\n </div>\n <div>\n <label htmlFor={`${uid}-password`}>{l.password}</label>\n <input\n id={`${uid}-password`}\n type=\"password\"\n autoComplete=\"new-password\"\n required\n aria-required=\"true\"\n aria-invalid={!!form.error}\n value={form.register.password}\n onChange={(e) => form.register.setPassword(e.target.value)}\n />\n </div>\n <div>\n <label htmlFor={`${uid}-confirm-password`}>{l.confirmPassword}</label>\n <input\n id={`${uid}-confirm-password`}\n type=\"password\"\n autoComplete=\"new-password\"\n required\n aria-required=\"true\"\n aria-invalid={!!form.error}\n value={form.register.confirmPassword}\n onChange={(e) => form.register.setConfirmPassword(e.target.value)}\n />\n </div>\n <button type=\"submit\" disabled={form.isLoading} aria-busy={form.isLoading}>\n {form.isLoading ? (\n <>\n <span aria-hidden=\"true\">...</span>\n <span className=\"sr-only\">Caricamento...</span>\n </>\n ) : (\n l.submit\n )}\n </button>\n {signInLink}\n </form>\n )\n}\n","import { useEffect, useId, useRef, type ReactNode } from 'react'\nimport {\n useForgotPasswordForm,\n type UseForgotPasswordFormOptions,\n} from '../hooks/useForgotPasswordForm'\n\nexport interface ForgotPasswordFormProps extends UseForgotPasswordFormOptions {\n className?: string\n labels?: {\n email?: string\n requestSubmit?: string\n code?: string\n newPassword?: string\n confirmPassword?: string\n resetSubmit?: string\n }\n signInLink?: ReactNode\n}\n\nexport function ForgotPasswordForm({\n className,\n labels = {},\n signInLink,\n onSuccess,\n onError,\n}: ForgotPasswordFormProps) {\n const uid = useId()\n const form = useForgotPasswordForm({ onSuccess, onError })\n const firstInputRef = useRef<HTMLInputElement>(null)\n\n useEffect(() => {\n firstInputRef.current?.focus()\n }, [form.step])\n\n const l = {\n email: labels.email ?? 'Email',\n requestSubmit: labels.requestSubmit ?? 'Invia codice',\n code: labels.code ?? 'Codice di verifica',\n newPassword: labels.newPassword ?? 'Nuova password',\n confirmPassword: labels.confirmPassword ?? 'Conferma password',\n resetSubmit: labels.resetSubmit ?? 'Reimposta password',\n }\n\n const errorId = `${uid}-error`\n\n if (form.step === 'reset') {\n return (\n <form\n onSubmit={form.reset.onSubmit}\n className={className}\n aria-label=\"Reimposta password\"\n >\n <p>\n Abbiamo inviato un codice a <strong>{form.reset.email}</strong>.\n </p>\n <div id={errorId} role=\"alert\" aria-live=\"assertive\" aria-atomic=\"true\">\n {form.error?.message}\n </div>\n <div>\n <label htmlFor={`${uid}-code`}>{l.code}</label>\n <input\n id={`${uid}-code`}\n ref={firstInputRef}\n type=\"text\"\n inputMode=\"numeric\"\n maxLength={6}\n autoComplete=\"one-time-code\"\n autoFocus\n required\n aria-required=\"true\"\n aria-invalid={!!form.error}\n aria-describedby={form.error ? errorId : undefined}\n value={form.reset.code}\n onChange={(e) => form.reset.setCode(e.target.value)}\n />\n </div>\n <div>\n <label htmlFor={`${uid}-new-password`}>{l.newPassword}</label>\n <input\n id={`${uid}-new-password`}\n type=\"password\"\n autoComplete=\"new-password\"\n required\n aria-required=\"true\"\n aria-invalid={!!form.error}\n value={form.reset.newPassword}\n onChange={(e) => form.reset.setNewPassword(e.target.value)}\n />\n </div>\n <div>\n <label htmlFor={`${uid}-confirm-password`}>{l.confirmPassword}</label>\n <input\n id={`${uid}-confirm-password`}\n type=\"password\"\n autoComplete=\"new-password\"\n required\n aria-required=\"true\"\n aria-invalid={!!form.error}\n value={form.reset.confirmPassword}\n onChange={(e) => form.reset.setConfirmPassword(e.target.value)}\n />\n </div>\n <button type=\"submit\" disabled={form.isLoading} aria-busy={form.isLoading}>\n {form.isLoading ? (\n <>\n <span aria-hidden=\"true\">...</span>\n <span className=\"sr-only\">Caricamento...</span>\n </>\n ) : (\n l.resetSubmit\n )}\n </button>\n <button type=\"button\" onClick={form.restart}>\n Torna all&apos;inizio\n </button>\n </form>\n )\n }\n\n return (\n <form\n onSubmit={form.request.onSubmit}\n className={className}\n aria-label=\"Richiedi codice di reimpostazione password\"\n >\n <p>Inserisci la tua email per ricevere il codice di reimpostazione.</p>\n <div id={errorId} role=\"alert\" aria-live=\"assertive\" aria-atomic=\"true\">\n {form.error?.message}\n </div>\n <div>\n <label htmlFor={`${uid}-email`}>{l.email}</label>\n <input\n id={`${uid}-email`}\n ref={firstInputRef}\n type=\"email\"\n autoComplete=\"email\"\n autoFocus\n required\n aria-required=\"true\"\n aria-invalid={!!form.error}\n aria-describedby={form.error ? errorId : undefined}\n value={form.request.email}\n onChange={(e) => form.request.setEmail(e.target.value)}\n />\n </div>\n <button type=\"submit\" disabled={form.isLoading} aria-busy={form.isLoading}>\n {form.isLoading ? (\n <>\n <span aria-hidden=\"true\">...</span>\n <span className=\"sr-only\">Caricamento...</span>\n </>\n ) : (\n l.requestSubmit\n )}\n </button>\n {signInLink}\n </form>\n )\n}\n","import { useId, useRef } from 'react'\nimport {\n useChangePasswordForm,\n type UseChangePasswordFormOptions,\n} from '../hooks/useChangePasswordForm'\n\nexport interface ChangePasswordFormProps extends UseChangePasswordFormOptions {\n className?: string\n labels?: {\n currentPassword?: string\n newPassword?: string\n confirmPassword?: string\n submit?: string\n successMessage?: string\n }\n}\n\nexport function ChangePasswordForm({\n className,\n labels = {},\n onSuccess,\n onError,\n}: ChangePasswordFormProps) {\n const uid = useId()\n const form = useChangePasswordForm({ onSuccess, onError })\n const firstInputRef = useRef<HTMLInputElement>(null)\n\n const l = {\n currentPassword: labels.currentPassword ?? 'Password attuale',\n newPassword: labels.newPassword ?? 'Nuova password',\n confirmPassword: labels.confirmPassword ?? 'Conferma nuova password',\n submit: labels.submit ?? 'Cambia password',\n successMessage: labels.successMessage ?? 'Password aggiornata con successo.',\n }\n\n const errorId = `${uid}-error`\n\n if (form.success) {\n return <p role=\"status\">{l.successMessage}</p>\n }\n\n return (\n <form\n onSubmit={form.onSubmit}\n className={className}\n aria-label=\"Cambia password\"\n >\n <div id={errorId} role=\"alert\" aria-live=\"assertive\" aria-atomic=\"true\">\n {form.error?.message}\n </div>\n <div>\n <label htmlFor={`${uid}-current-password`}>{l.currentPassword}</label>\n <input\n id={`${uid}-current-password`}\n ref={firstInputRef}\n type=\"password\"\n autoComplete=\"current-password\"\n autoFocus\n required\n aria-required=\"true\"\n aria-invalid={!!form.error}\n aria-describedby={form.error ? errorId : undefined}\n value={form.currentPassword}\n onChange={(e) => form.setCurrentPassword(e.target.value)}\n />\n </div>\n <div>\n <label htmlFor={`${uid}-new-password`}>{l.newPassword}</label>\n <input\n id={`${uid}-new-password`}\n type=\"password\"\n autoComplete=\"new-password\"\n required\n aria-required=\"true\"\n aria-invalid={!!form.error}\n value={form.newPassword}\n onChange={(e) => form.setNewPassword(e.target.value)}\n />\n </div>\n <div>\n <label htmlFor={`${uid}-confirm-password`}>{l.confirmPassword}</label>\n <input\n id={`${uid}-confirm-password`}\n type=\"password\"\n autoComplete=\"new-password\"\n required\n aria-required=\"true\"\n aria-invalid={!!form.error}\n value={form.confirmPassword}\n onChange={(e) => form.setConfirmPassword(e.target.value)}\n />\n </div>\n <button type=\"submit\" disabled={form.isLoading} aria-busy={form.isLoading}>\n {form.isLoading ? (\n <>\n <span aria-hidden=\"true\">...</span>\n <span className=\"sr-only\">Caricamento...</span>\n </>\n ) : (\n l.submit\n )}\n </button>\n </form>\n )\n}\n","import { useEffect, useId, useRef, type ReactNode } from 'react'\nimport { useMfaSetup, type UseMfaSetupOptions } from '../hooks/useMfaSetup'\n\nexport interface MfaSetupWizardProps extends UseMfaSetupOptions {\n className?: string\n labels?: {\n start?: string\n scanInstruction?: string\n manualEntry?: string\n codeLabel?: string\n verifySubmit?: string\n successMessage?: string\n }\n /**\n * Render del QR code. Riceve il URI otpauth:// — usa react-qr-code o simile.\n * Default: mostra il URI come testo copiabile.\n */\n renderQrCode?: (uri: string) => ReactNode\n}\n\nexport function MfaSetupWizard({\n className,\n labels = {},\n renderQrCode,\n onSuccess,\n onError,\n}: MfaSetupWizardProps) {\n const uid = useId()\n const wizard = useMfaSetup({ onSuccess, onError })\n const firstInputRef = useRef<HTMLInputElement>(null)\n\n useEffect(() => {\n firstInputRef.current?.focus()\n }, [wizard.step])\n\n const l = {\n start: labels.start ?? 'Configura autenticazione a due fattori (TOTP)',\n scanInstruction:\n labels.scanInstruction ??\n 'Scansiona il QR code con la tua app authenticator (Google Authenticator, Authy, 1Password…)',\n manualEntry: labels.manualEntry ?? 'Oppure inserisci il codice manualmente:',\n codeLabel: labels.codeLabel ?? 'Codice a 6 cifre',\n verifySubmit: labels.verifySubmit ?? 'Verifica e attiva',\n successMessage: labels.successMessage ?? 'Autenticazione a due fattori attivata con successo.',\n }\n\n const errorId = `${uid}-error`\n\n if (wizard.step === 'done') {\n return <p role=\"status\">{l.successMessage}</p>\n }\n\n if (wizard.step === 'idle') {\n return (\n <div className={className}>\n <div id={errorId} role=\"alert\" aria-live=\"assertive\" aria-atomic=\"true\">\n {wizard.error?.message}\n </div>\n {/* autoFocus handles focus on initial render; firstInputRef targets inputs in later steps */}\n <button type=\"button\" autoFocus onClick={wizard.start}>\n {l.start}\n </button>\n </div>\n )\n }\n\n if (wizard.step === 'loading') {\n return (\n <div className={className} aria-live=\"polite\" aria-atomic=\"true\">\n ...\n </div>\n )\n }\n\n // step === 'scan' | 'verify'\n return (\n <div className={className}>\n <div id={errorId} role=\"alert\" aria-live=\"assertive\" aria-atomic=\"true\">\n {wizard.error?.message}\n </div>\n\n {wizard.qrCodeUri && (\n <div>\n <p>{l.scanInstruction}</p>\n {renderQrCode ? (\n renderQrCode(wizard.qrCodeUri)\n ) : (\n <code style={{ wordBreak: 'break-all', fontSize: '0.75em' }}>\n {wizard.qrCodeUri}\n </code>\n )}\n {wizard.secretCode && (\n <p>\n {l.manualEntry} <code>{wizard.secretCode}</code>\n </p>\n )}\n </div>\n )}\n\n <form onSubmit={wizard.onVerify} aria-label=\"Verifica dispositivo TOTP\">\n <div>\n <label htmlFor={`${uid}-totp-code`}>{l.codeLabel}</label>\n <input\n id={`${uid}-totp-code`}\n ref={firstInputRef}\n type=\"text\"\n inputMode=\"numeric\"\n maxLength={6}\n autoComplete=\"one-time-code\"\n autoFocus\n required\n aria-required=\"true\"\n aria-invalid={!!wizard.error}\n aria-describedby={wizard.error ? errorId : undefined}\n value={wizard.totpCode}\n onChange={(e) => wizard.setTotpCode(e.target.value)}\n />\n </div>\n <button\n type=\"submit\"\n disabled={wizard.isLoading || wizard.totpCode.length !== 6}\n aria-busy={wizard.isLoading}\n >\n {wizard.isLoading ? (\n <>\n <span aria-hidden=\"true\">...</span>\n <span className=\"sr-only\">Caricamento...</span>\n </>\n ) : (\n l.verifySubmit\n )}\n </button>\n </form>\n </div>\n )\n}\n"]}
@@ -0,0 +1,241 @@
1
+ import * as react from 'react';
2
+ import { FormEvent, ReactNode } from 'react';
3
+ import { C as CognitoAuthError } from '../errors-BkUDHleb.cjs';
4
+ import { h as SignInResult, g as MfaType } from '../types-bxA1vonL.cjs';
5
+
6
+ type SignInStep = 'credentials' | 'mfa' | 'new_password' | 'mfa_setup';
7
+ interface UseSignInFormOptions {
8
+ onSuccess?: (result: Extract<SignInResult, {
9
+ status: 'SUCCESS';
10
+ }>) => void;
11
+ onError?: (error: CognitoAuthError) => void;
12
+ }
13
+ interface UseSignInFormReturn {
14
+ step: SignInStep;
15
+ isLoading: boolean;
16
+ error: CognitoAuthError | null;
17
+ mfaType: MfaType | null;
18
+ credentials: {
19
+ email: string;
20
+ password: string;
21
+ setEmail(v: string): void;
22
+ setPassword(v: string): void;
23
+ onSubmit(e: FormEvent): void;
24
+ };
25
+ mfa: {
26
+ code: string;
27
+ setCode(v: string): void;
28
+ onSubmit(e: FormEvent): void;
29
+ };
30
+ newPassword: {
31
+ password: string;
32
+ confirmPassword: string;
33
+ requiredAttributes: string[];
34
+ setPassword(v: string): void;
35
+ setConfirmPassword(v: string): void;
36
+ onSubmit(e: FormEvent): void;
37
+ };
38
+ mfaSetup: {
39
+ qrCodeUri: string | null;
40
+ secretCode: string | null;
41
+ totpCode: string;
42
+ setTotpCode(v: string): void;
43
+ /** Chiama setupTotpChallenge e popola qrCodeUri / secretCode */
44
+ start(): Promise<void>;
45
+ /** Chiama verifyTotpChallenge poi handleSignInResult */
46
+ onVerify(e: FormEvent): void;
47
+ };
48
+ reset(): void;
49
+ }
50
+ declare function useSignInForm(options?: UseSignInFormOptions): UseSignInFormReturn;
51
+
52
+ type RegisterStep = 'register' | 'confirm';
53
+ interface UseRegisterFormOptions {
54
+ onSuccess?: () => void;
55
+ onError?: (error: CognitoAuthError) => void;
56
+ /** Attributi aggiuntivi (es. name, phone_number) */
57
+ extraAttributes?: Record<string, string>;
58
+ }
59
+ interface UseRegisterFormReturn {
60
+ step: RegisterStep;
61
+ isLoading: boolean;
62
+ error: CognitoAuthError | null;
63
+ register: {
64
+ email: string;
65
+ password: string;
66
+ confirmPassword: string;
67
+ setEmail(v: string): void;
68
+ setPassword(v: string): void;
69
+ setConfirmPassword(v: string): void;
70
+ onSubmit(e: FormEvent): void;
71
+ };
72
+ confirm: {
73
+ email: string;
74
+ code: string;
75
+ setCode(v: string): void;
76
+ onSubmit(e: FormEvent): void;
77
+ resend(): Promise<void>;
78
+ };
79
+ reset(): void;
80
+ }
81
+ declare function useRegisterForm(options?: UseRegisterFormOptions): UseRegisterFormReturn;
82
+
83
+ type ForgotPasswordStep = 'request' | 'reset';
84
+ interface UseForgotPasswordFormOptions {
85
+ onSuccess?: () => void;
86
+ onError?: (error: CognitoAuthError) => void;
87
+ }
88
+ interface UseForgotPasswordFormReturn {
89
+ step: ForgotPasswordStep;
90
+ isLoading: boolean;
91
+ error: CognitoAuthError | null;
92
+ request: {
93
+ email: string;
94
+ setEmail(v: string): void;
95
+ onSubmit(e: FormEvent): void;
96
+ };
97
+ reset: {
98
+ email: string;
99
+ code: string;
100
+ newPassword: string;
101
+ confirmPassword: string;
102
+ setCode(v: string): void;
103
+ setNewPassword(v: string): void;
104
+ setConfirmPassword(v: string): void;
105
+ onSubmit(e: FormEvent): void;
106
+ };
107
+ restart(): void;
108
+ }
109
+ declare function useForgotPasswordForm(options?: UseForgotPasswordFormOptions): UseForgotPasswordFormReturn;
110
+
111
+ interface UseChangePasswordFormOptions {
112
+ onSuccess?: () => void;
113
+ onError?: (error: CognitoAuthError) => void;
114
+ }
115
+ interface UseChangePasswordFormReturn {
116
+ isLoading: boolean;
117
+ error: CognitoAuthError | null;
118
+ success: boolean;
119
+ currentPassword: string;
120
+ newPassword: string;
121
+ confirmPassword: string;
122
+ setCurrentPassword(v: string): void;
123
+ setNewPassword(v: string): void;
124
+ setConfirmPassword(v: string): void;
125
+ onSubmit(e: FormEvent): void;
126
+ reset(): void;
127
+ }
128
+ declare function useChangePasswordForm(options?: UseChangePasswordFormOptions): UseChangePasswordFormReturn;
129
+
130
+ type MfaSetupStep = 'idle' | 'loading' | 'scan' | 'verify' | 'done';
131
+ interface UseMfaSetupOptions {
132
+ onSuccess?: () => void;
133
+ onError?: (error: CognitoAuthError) => void;
134
+ }
135
+ interface UseMfaSetupReturn {
136
+ step: MfaSetupStep;
137
+ isLoading: boolean;
138
+ error: CognitoAuthError | null;
139
+ /** URI otpauth:// da passare a un QR code renderer */
140
+ qrCodeUri: string | null;
141
+ /** Secret testuale (per inserimento manuale nell'app) */
142
+ secretCode: string | null;
143
+ totpCode: string;
144
+ setTotpCode(v: string): void;
145
+ /** Avvia il setup TOTP */
146
+ start(): Promise<void>;
147
+ /** Verifica il codice inserito dall'app authenticator */
148
+ onVerify(e: FormEvent): void;
149
+ reset(): void;
150
+ }
151
+ declare function useMfaSetup(options?: UseMfaSetupOptions): UseMfaSetupReturn;
152
+
153
+ interface SignInFormProps extends UseSignInFormOptions {
154
+ className?: string;
155
+ labels?: {
156
+ email?: string;
157
+ password?: string;
158
+ submit?: string;
159
+ mfaCode?: string;
160
+ mfaSubmit?: string;
161
+ newPassword?: string;
162
+ confirmNewPassword?: string;
163
+ newPasswordSubmit?: string;
164
+ mfaSetupScanInstruction?: string;
165
+ mfaSetupSecretLabel?: string;
166
+ mfaSetupCode?: string;
167
+ mfaSetupSubmit?: string;
168
+ };
169
+ /** Slot per il link "Password dimenticata?" */
170
+ forgotPasswordLink?: ReactNode;
171
+ /** Slot per il link "Crea account" */
172
+ registerLink?: ReactNode;
173
+ /**
174
+ * Render del QR code per lo step mfa_setup.
175
+ * Riceve il URI otpauth:// — usa react-qr-code o simile.
176
+ * Default: mostra il URI come testo copiabile.
177
+ */
178
+ renderQrCode?: (uri: string) => ReactNode;
179
+ }
180
+ declare function SignInForm({ className, labels, forgotPasswordLink, registerLink, renderQrCode, onSuccess, onError, }: SignInFormProps): react.JSX.Element;
181
+
182
+ interface RegisterFormProps extends UseRegisterFormOptions {
183
+ className?: string;
184
+ labels?: {
185
+ email?: string;
186
+ password?: string;
187
+ confirmPassword?: string;
188
+ submit?: string;
189
+ code?: string;
190
+ confirmSubmit?: string;
191
+ resend?: string;
192
+ };
193
+ signInLink?: ReactNode;
194
+ }
195
+ declare function RegisterForm({ className, labels, signInLink, onSuccess, onError, extraAttributes, }: RegisterFormProps): react.JSX.Element;
196
+
197
+ interface ForgotPasswordFormProps extends UseForgotPasswordFormOptions {
198
+ className?: string;
199
+ labels?: {
200
+ email?: string;
201
+ requestSubmit?: string;
202
+ code?: string;
203
+ newPassword?: string;
204
+ confirmPassword?: string;
205
+ resetSubmit?: string;
206
+ };
207
+ signInLink?: ReactNode;
208
+ }
209
+ declare function ForgotPasswordForm({ className, labels, signInLink, onSuccess, onError, }: ForgotPasswordFormProps): react.JSX.Element;
210
+
211
+ interface ChangePasswordFormProps extends UseChangePasswordFormOptions {
212
+ className?: string;
213
+ labels?: {
214
+ currentPassword?: string;
215
+ newPassword?: string;
216
+ confirmPassword?: string;
217
+ submit?: string;
218
+ successMessage?: string;
219
+ };
220
+ }
221
+ declare function ChangePasswordForm({ className, labels, onSuccess, onError, }: ChangePasswordFormProps): react.JSX.Element;
222
+
223
+ interface MfaSetupWizardProps extends UseMfaSetupOptions {
224
+ className?: string;
225
+ labels?: {
226
+ start?: string;
227
+ scanInstruction?: string;
228
+ manualEntry?: string;
229
+ codeLabel?: string;
230
+ verifySubmit?: string;
231
+ successMessage?: string;
232
+ };
233
+ /**
234
+ * Render del QR code. Riceve il URI otpauth:// — usa react-qr-code o simile.
235
+ * Default: mostra il URI come testo copiabile.
236
+ */
237
+ renderQrCode?: (uri: string) => ReactNode;
238
+ }
239
+ declare function MfaSetupWizard({ className, labels, renderQrCode, onSuccess, onError, }: MfaSetupWizardProps): react.JSX.Element;
240
+
241
+ export { ChangePasswordForm, type ChangePasswordFormProps, ForgotPasswordForm, type ForgotPasswordFormProps, type ForgotPasswordStep, type MfaSetupStep, MfaSetupWizard, type MfaSetupWizardProps, RegisterForm, type RegisterFormProps, type RegisterStep, SignInForm, type SignInFormProps, type SignInStep, type UseChangePasswordFormOptions, type UseChangePasswordFormReturn, type UseForgotPasswordFormOptions, type UseForgotPasswordFormReturn, type UseMfaSetupOptions, type UseMfaSetupReturn, type UseRegisterFormOptions, type UseRegisterFormReturn, type UseSignInFormOptions, type UseSignInFormReturn, useChangePasswordForm, useForgotPasswordForm, useMfaSetup, useRegisterForm, useSignInForm };