@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.
- package/README.md +2410 -0
- package/dist/chunk-AD7T42HJ.js +3 -0
- package/dist/chunk-AD7T42HJ.js.map +1 -0
- package/dist/chunk-DKPFVGTY.js +683 -0
- package/dist/chunk-DKPFVGTY.js.map +1 -0
- package/dist/chunk-N4OQLBV6.js +135 -0
- package/dist/chunk-N4OQLBV6.js.map +1 -0
- package/dist/client-63FraVdm.d.ts +69 -0
- package/dist/client-BAoL8h4E.d.cts +69 -0
- package/dist/core/index.cjs +696 -0
- package/dist/core/index.cjs.map +1 -0
- package/dist/core/index.d.cts +3 -0
- package/dist/core/index.d.ts +3 -0
- package/dist/core/index.js +4 -0
- package/dist/core/index.js.map +1 -0
- package/dist/errors-BkUDHleb.d.cts +22 -0
- package/dist/errors-BkUDHleb.d.ts +22 -0
- package/dist/index.cjs +696 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +3 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/react/index.cjs +844 -0
- package/dist/react/index.cjs.map +1 -0
- package/dist/react/index.d.cts +104 -0
- package/dist/react/index.d.ts +104 -0
- package/dist/react/index.js +64 -0
- package/dist/react/index.js.map +1 -0
- package/dist/types-bxA1vonL.d.cts +113 -0
- package/dist/types-bxA1vonL.d.ts +113 -0
- package/dist/ui/index.cjs +1183 -0
- package/dist/ui/index.cjs.map +1 -0
- package/dist/ui/index.d.cts +241 -0
- package/dist/ui/index.d.ts +241 -0
- package/dist/ui/index.js +1109 -0
- package/dist/ui/index.js.map +1 -0
- package/package.json +81 -0
- package/src/core/client.ts +604 -0
- package/src/core/errors.ts +91 -0
- package/src/core/event-bus.ts +41 -0
- package/src/core/index.ts +5 -0
- package/src/core/internal/converters.ts +32 -0
- package/src/core/storage.ts +79 -0
- package/src/core/types.ts +87 -0
- package/src/index.ts +1 -0
- package/src/react/components/ProtectedRoute.tsx +56 -0
- package/src/react/context.tsx +126 -0
- package/src/react/hooks/useAuth.ts +75 -0
- package/src/react/hooks/useMfa.ts +19 -0
- package/src/react/hooks/useSession.ts +16 -0
- package/src/react/hooks/useUser.ts +24 -0
- package/src/react/index.ts +10 -0
- package/src/ui/components/ChangePasswordForm.tsx +105 -0
- package/src/ui/components/ForgotPasswordForm.tsx +159 -0
- package/src/ui/components/MfaSetupWizard.tsx +136 -0
- package/src/ui/components/RegisterForm.tsx +159 -0
- package/src/ui/components/SignInForm.tsx +296 -0
- package/src/ui/hooks/useChangePasswordForm.ts +81 -0
- package/src/ui/hooks/useForgotPasswordForm.ts +109 -0
- package/src/ui/hooks/useMfaSetup.ts +93 -0
- package/src/ui/hooks/useRegisterForm.ts +120 -0
- package/src/ui/hooks/useSignInForm.ts +245 -0
- 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'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 };
|