@dloizides/auth-web 1.22.1 → 1.23.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/CHANGELOG.md +14 -0
- package/dist/index.d.mts +73 -10
- package/dist/index.d.ts +73 -10
- package/dist/index.js +516 -101
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +510 -102
- package/dist/index.mjs.map +1 -1
- package/package.json +9 -9
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.23.0
|
|
4
|
+
|
|
5
|
+
**Opt-in shared registration (REGISTER-2 "One shared registration path").** `createSharedRegistrationClient` talks to
|
|
6
|
+
`POST /bff/register` and `POST /bff/verify-and-login`; `isRegisterAccepted` reads the result. `onSubmit` may receive a
|
|
7
|
+
second `RegisterSubmitMeta` argument (`idempotencyKey`, `formElapsedMs`), only when shared registration is on.
|
|
8
|
+
`<VerifyEmailScreen>` gains a set-new-password step and a verified-but-not-signed-in step
|
|
9
|
+
(`DEFAULT_VERIFY_NEW_PASSWORD_LABELS`, `DEFAULT_VERIFY_SIGN_IN_LABELS`). New `VerifyEmailPhase.NewPasswordRequired`,
|
|
10
|
+
four `VerifyEmailErrorCode` values (`NewPasswordRequired`, `WeakPassword`, `RateLimited`, `SignInFailed`) and
|
|
11
|
+
`ResetPasswordError.RateLimited`; an exhaustive `Record` over these enums must add the new keys. Plain `<RegisterForm>`
|
|
12
|
+
is unchanged.
|
|
13
|
+
|
|
14
|
+
Build only: devDependencies move to React 19 and React Native 0.81.5, the versions the other `@dloizides/ui-*` packages
|
|
15
|
+
use, so `npm ci` resolves without `legacy-peer-deps`. The published peer ranges are unchanged.
|
|
16
|
+
|
|
3
17
|
## 1.22.0
|
|
4
18
|
|
|
5
19
|
**`<VerifyEmailScreen>` (AGORA-VERIFY-1 "agora-web has no verify-email route").** Extracted from the erevna-web /
|
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ReactNode, ReactElement } from 'react';
|
|
2
|
-
import { BffAuthClient, BffUser, DemoCredentials, HttpClient, DemoAccount, BffLoginRequest, BffForgotPasswordRequest, BffResetPasswordRequest, BffOtpRequestResult } from '@dloizides/auth-client';
|
|
2
|
+
import { BffAuthClient, BffUser, DemoCredentials, HttpClient, DemoAccount, BffLoginRequest, BffForgotPasswordRequest, BffResetPasswordRequest, BffOtpRequestResult, BffRegisterRequest } from '@dloizides/auth-client';
|
|
3
3
|
export { BffAuthClient, BffAuthClientOptions, BffForgotPasswordRequest, BffLoginRequest, BffOtpRequestRequest, BffOtpRequestResult, BffOtpVerifyRequest, BffPinLoginRequest, BffRegisterRequest, BffResetPasswordRequest, BffUser, DemoAccount, DemoCredentials, HttpClient, HttpRequest, HttpResponse, createFetchHttpClient } from '@dloizides/auth-client';
|
|
4
4
|
import { UseMutationOptions, UseMutationResult } from '@tanstack/react-query';
|
|
5
5
|
|
|
@@ -460,6 +460,8 @@ interface ResetPasswordFormLabels {
|
|
|
460
460
|
errorTokenInvalid: string;
|
|
461
461
|
/** Error: a network / 5xx failure. */
|
|
462
462
|
errorNetwork: string;
|
|
463
|
+
/** Error: the BFF rate-limited the attempt. Falls back to `errorNetwork`. */
|
|
464
|
+
errorRateLimited?: string;
|
|
463
465
|
}
|
|
464
466
|
declare const DEFAULT_RESET_PASSWORD_LABELS: ResetPasswordFormLabels;
|
|
465
467
|
|
|
@@ -571,6 +573,11 @@ type RegisterInputField = Exclude<RegisterField, 'website'>;
|
|
|
571
573
|
* honeypot is kept (empty for real users) so the BFF can enforce it as well.
|
|
572
574
|
*/
|
|
573
575
|
type RegisterSubmitValues = Omit<RegisterFormValues, 'confirmPassword'>;
|
|
576
|
+
/** Extra request data for shared registration; only passed to `onSubmit` when it is on. */
|
|
577
|
+
interface RegisterSubmitMeta {
|
|
578
|
+
idempotencyKey: string;
|
|
579
|
+
formElapsedMs: number;
|
|
580
|
+
}
|
|
574
581
|
/** `true` when the password is acceptable. */
|
|
575
582
|
type RegisterPasswordPolicy = (password: string) => boolean;
|
|
576
583
|
type RegisterSubmitOutcome<TResult> = {
|
|
@@ -603,9 +610,20 @@ interface RegisterFormLabels {
|
|
|
603
610
|
fields: Record<RegisterInputField, RegisterFieldLabels>;
|
|
604
611
|
/** Copy for the single "Your name" input of the compact form. Defaults to English. */
|
|
605
612
|
fullName?: RegisterFieldLabels;
|
|
613
|
+
/** Heading shown after a 202 with shared registration on. Defaults to English. */
|
|
614
|
+
checkEmailTitle?: string;
|
|
615
|
+
/** Body shown after a 202 with shared registration on. Defaults to English. */
|
|
616
|
+
checkEmailBody?: string;
|
|
606
617
|
}
|
|
607
618
|
declare const DEFAULT_REGISTER_LABELS: RegisterFormLabels;
|
|
608
619
|
|
|
620
|
+
/** Copy for the verified account whose automatic sign-in failed. */
|
|
621
|
+
interface VerifySignInLabels {
|
|
622
|
+
title: string;
|
|
623
|
+
body: string;
|
|
624
|
+
action: string;
|
|
625
|
+
actionHint: string;
|
|
626
|
+
}
|
|
609
627
|
/** Strings rendered by `<VerifyEmailScreen>`. */
|
|
610
628
|
interface VerifyEmailLabels {
|
|
611
629
|
loadingTitle: string;
|
|
@@ -629,7 +647,15 @@ interface VerifyEmailLabels {
|
|
|
629
647
|
resendSubmit: string;
|
|
630
648
|
resendSubmitHint: string;
|
|
631
649
|
resendConfirmation: string;
|
|
632
|
-
|
|
650
|
+
/** Shown when the BFF rate-limits the link. Falls back to `errorGeneric`. */
|
|
651
|
+
errorRateLimited?: string;
|
|
652
|
+
/** Copy for the set-new-password step of shared registration. */
|
|
653
|
+
newPassword?: Partial<ResetPasswordFormLabels>;
|
|
654
|
+
/** Copy for the verified-but-not-signed-in step of shared registration. */
|
|
655
|
+
signIn?: Partial<VerifySignInLabels>;
|
|
656
|
+
}
|
|
657
|
+
declare const DEFAULT_VERIFY_NEW_PASSWORD_LABELS: ResetPasswordFormLabels;
|
|
658
|
+
declare const DEFAULT_VERIFY_SIGN_IN_LABELS: VerifySignInLabels;
|
|
633
659
|
declare const DEFAULT_VERIFY_EMAIL_LABELS: VerifyEmailLabels;
|
|
634
660
|
|
|
635
661
|
/**
|
|
@@ -1897,6 +1923,8 @@ declare const AuthTestIds: {
|
|
|
1897
1923
|
readonly verifyEmailSuccess: "auth-verify-email-success";
|
|
1898
1924
|
readonly verifyEmailContinue: "auth-verify-email-continue";
|
|
1899
1925
|
readonly verifyEmailError: "auth-verify-email-error";
|
|
1926
|
+
readonly verifyEmailSignIn: "auth-verify-email-sign-in";
|
|
1927
|
+
readonly verifyEmailSignInContinue: "auth-verify-email-sign-in-continue";
|
|
1900
1928
|
readonly verifyEmailResendCta: "auth-verify-email-resend-cta";
|
|
1901
1929
|
readonly verifyEmailResendForm: "auth-verify-email-resend-form";
|
|
1902
1930
|
readonly verifyEmailResendEmail: "auth-verify-email-resend-email";
|
|
@@ -2004,7 +2032,9 @@ declare const enum ResetPasswordError {
|
|
|
2004
2032
|
/** The reset token is missing, expired, or already consumed. */
|
|
2005
2033
|
TokenInvalid = "tokenInvalid",
|
|
2006
2034
|
/** A network or 5xx failure prevented the reset from completing. */
|
|
2007
|
-
Network = "network"
|
|
2035
|
+
Network = "network",
|
|
2036
|
+
/** The BFF rate-limited the attempt (HTTP 429). */
|
|
2037
|
+
RateLimited = "rateLimited"
|
|
2008
2038
|
}
|
|
2009
2039
|
|
|
2010
2040
|
interface UseResetPasswordFormArgs {
|
|
@@ -2508,7 +2538,7 @@ declare function resolveDemoAccounts(credentials?: DemoCredentials | null): Demo
|
|
|
2508
2538
|
|
|
2509
2539
|
interface RegisterFormProps<TResult> {
|
|
2510
2540
|
/** Send the registration (build the request, call the BFF). Throw on failure. */
|
|
2511
|
-
onSubmit: (values: RegisterSubmitValues) => Promise<TResult>;
|
|
2541
|
+
onSubmit: (values: RegisterSubmitValues, meta?: RegisterSubmitMeta) => Promise<TResult>;
|
|
2512
2542
|
/** Called with whatever `onSubmit` resolved to. */
|
|
2513
2543
|
onSuccess: (result: TResult) => void;
|
|
2514
2544
|
/** Called with the failure code; map it to localised copy. */
|
|
@@ -2533,7 +2563,7 @@ interface RegisterFormProps<TResult> {
|
|
|
2533
2563
|
compact?: boolean;
|
|
2534
2564
|
}
|
|
2535
2565
|
/** Themeable registration form built on `useRegisterForm`. */
|
|
2536
|
-
declare function RegisterForm<TResult>(
|
|
2566
|
+
declare function RegisterForm<TResult>(props: Readonly<RegisterFormProps<TResult>>): ReactElement;
|
|
2537
2567
|
|
|
2538
2568
|
/**
|
|
2539
2569
|
* `testID` values for `<RegisterForm>`.
|
|
@@ -2558,11 +2588,12 @@ declare const RegisterTestIds: {
|
|
|
2558
2588
|
readonly tenantNameInput: "register-tenant-name-input";
|
|
2559
2589
|
readonly submitButton: "register-submit-button";
|
|
2560
2590
|
readonly websiteInput: "register-website";
|
|
2591
|
+
readonly checkEmail: "register-check-email";
|
|
2561
2592
|
};
|
|
2562
2593
|
|
|
2563
2594
|
interface UseRegisterFormArgs<TResult> {
|
|
2564
2595
|
/** Send the registration. Throw on failure; the message is decoded to a code. */
|
|
2565
|
-
onSubmit: (values: RegisterSubmitValues) => Promise<TResult>;
|
|
2596
|
+
onSubmit: (values: RegisterSubmitValues, meta?: RegisterSubmitMeta) => Promise<TResult>;
|
|
2566
2597
|
/** Password rule. Defaults to {@link isRegisterPasswordStrong}. */
|
|
2567
2598
|
passwordPolicy?: RegisterPasswordPolicy;
|
|
2568
2599
|
/**
|
|
@@ -2575,6 +2606,8 @@ interface UseRegisterFormArgs<TResult> {
|
|
|
2575
2606
|
* (from the email) and the password confirmation are derived before validation.
|
|
2576
2607
|
*/
|
|
2577
2608
|
compact?: boolean;
|
|
2609
|
+
/** Opt-in shared registration: `onSubmit` also gets the key and form time; an accepted result clears the passwords. */
|
|
2610
|
+
sharedRegistration?: boolean;
|
|
2578
2611
|
}
|
|
2579
2612
|
interface UseRegisterFormResult<TResult> {
|
|
2580
2613
|
state: RegisterFormValues;
|
|
@@ -2585,7 +2618,7 @@ interface UseRegisterFormResult<TResult> {
|
|
|
2585
2618
|
error: RegisterErrorCode | null;
|
|
2586
2619
|
}
|
|
2587
2620
|
/** Headless registration form logic. */
|
|
2588
|
-
declare function useRegisterForm<TResult>({ onSubmit, passwordPolicy, onSubmitAttempt, compact, }: UseRegisterFormArgs<TResult>): UseRegisterFormResult<TResult>;
|
|
2621
|
+
declare function useRegisterForm<TResult>({ onSubmit, passwordPolicy, onSubmitAttempt, compact, sharedRegistration, }: UseRegisterFormArgs<TResult>): UseRegisterFormResult<TResult>;
|
|
2589
2622
|
|
|
2590
2623
|
/**
|
|
2591
2624
|
* Pure registration helpers: trimming, client-side validation and decoding of a
|
|
@@ -2919,6 +2952,10 @@ declare const enum VerifyEmailErrorCode {
|
|
|
2919
2952
|
TokenUsed = "TOKEN_USED",
|
|
2920
2953
|
KeycloakUpdateFailed = "KEYCLOAK_UPDATE_FAILED",
|
|
2921
2954
|
MissingToken = "MISSING_TOKEN",
|
|
2955
|
+
NewPasswordRequired = "NEW_PASSWORD_REQUIRED",
|
|
2956
|
+
WeakPassword = "WEAK_PASSWORD",
|
|
2957
|
+
RateLimited = "RATE_LIMITED",
|
|
2958
|
+
SignInFailed = "SIGN_IN_FAILED",
|
|
2922
2959
|
Generic = "GENERIC"
|
|
2923
2960
|
}
|
|
2924
2961
|
|
|
@@ -2932,6 +2969,7 @@ type VerifyEmailResult = {
|
|
|
2932
2969
|
interface VerifyEmailCapableClient {
|
|
2933
2970
|
verifyEmail(token: string): Promise<VerifyEmailResult>;
|
|
2934
2971
|
resendVerification(email: string, verifyUrlTemplate?: string): Promise<boolean>;
|
|
2972
|
+
setNewPassword?(token: string, newPassword: string): Promise<VerifyEmailResult>;
|
|
2935
2973
|
}
|
|
2936
2974
|
|
|
2937
2975
|
interface VerifyEmailScreenProps {
|
|
@@ -2948,11 +2986,12 @@ interface VerifyEmailScreenProps {
|
|
|
2948
2986
|
/** Verifies the emailed token on mount, then offers Continue or a resend-link form. */
|
|
2949
2987
|
declare function VerifyEmailScreen({ client, token, onContinue, theme: themeProp, labels: labelsProp, verifyUrlTemplate, onVerified, onFailed, testIdPrefix, }: Readonly<VerifyEmailScreenProps>): ReactElement;
|
|
2950
2988
|
|
|
2951
|
-
/** The
|
|
2989
|
+
/** The states the verify-email screen moves through. */
|
|
2952
2990
|
declare const enum VerifyEmailPhase {
|
|
2953
2991
|
Loading = "loading",
|
|
2954
2992
|
Success = "success",
|
|
2955
|
-
Failure = "failure"
|
|
2993
|
+
Failure = "failure",
|
|
2994
|
+
NewPasswordRequired = "newPasswordRequired"
|
|
2956
2995
|
}
|
|
2957
2996
|
|
|
2958
2997
|
interface UseVerifyEmailArgs {
|
|
@@ -3006,4 +3045,28 @@ declare function readVerifyToken(raw: string | readonly string[] | undefined): s
|
|
|
3006
3045
|
/** The failure body copy for a verification error code. */
|
|
3007
3046
|
declare function verifyEmailErrorText(code: VerifyEmailErrorCode, labels: VerifyEmailLabels): string;
|
|
3008
3047
|
|
|
3009
|
-
|
|
3048
|
+
/** What the shared `/bff/register` resolves to; `accepted` means a 202 with no session. */
|
|
3049
|
+
interface SharedRegisterResult {
|
|
3050
|
+
accepted: boolean;
|
|
3051
|
+
body: unknown;
|
|
3052
|
+
}
|
|
3053
|
+
/** `true` when `result` reports an accepted registration waiting on the emailed link. */
|
|
3054
|
+
declare function isRegisterAccepted(result: unknown): boolean;
|
|
3055
|
+
|
|
3056
|
+
declare const REGISTER_ENDPOINT = "/bff/register";
|
|
3057
|
+
declare const VERIFY_AND_LOGIN_ENDPOINT = "/bff/verify-and-login";
|
|
3058
|
+
interface SharedRegistrationClient extends VerifyEmailCapableClient {
|
|
3059
|
+
register(request: BffRegisterRequest, meta?: RegisterSubmitMeta): Promise<SharedRegisterResult>;
|
|
3060
|
+
setNewPassword(token: string, newPassword: string): Promise<VerifyEmailResult>;
|
|
3061
|
+
}
|
|
3062
|
+
/** Same-origin client for the shared registration path; never calls `/bff/verify-email`. */
|
|
3063
|
+
declare function createSharedRegistrationClient(options?: CreateBffVerifyEmailClientOptions): SharedRegistrationClient;
|
|
3064
|
+
|
|
3065
|
+
interface SharedRegisterFormProps<TResult> extends RegisterFormProps<TResult> {
|
|
3066
|
+
/** Called once when the BFF accepts the signup (202). `onSuccess` is not called then: no session exists. */
|
|
3067
|
+
onAccepted?: (result: TResult) => void;
|
|
3068
|
+
}
|
|
3069
|
+
/** `<RegisterForm>` for the shared path: `onSubmit` also gets `meta`, and a 202 shows "check your email". */
|
|
3070
|
+
declare function SharedRegisterForm<TResult>({ onSuccess, onAccepted, ...formProps }: Readonly<SharedRegisterFormProps<TResult>>): ReactElement;
|
|
3071
|
+
|
|
3072
|
+
export { type AccountSettingsChangePasswordConfig, type AccountSettingsDevicePinConfig, type AccountSettingsLabels, type AccountSettingsPasskeysConfig, type AccountSettingsPreferredMethodConfig, AccountSettingsScreen, type AccountSettingsScreenProps, AuthScreen, type AuthScreenProps, AuthTestIds, type AuthTheme, type AuthThemeColors, AuthThemeProvider, type AuthThemeProviderProps, type AuthThemeRadii, type AuthThemeSpacing, type AuthThemeTypography, BffAuthStatus, type BffDeviceState, type BffLoginConfig, type BffLogoutClient, type BuildVerifyUrlTemplateOptions, CHANGE_PASSWORD_ENDPOINT, type ChangePasswordCapableClient, ChangePasswordCard, type ChangePasswordCardProps, ChangePasswordErrorKey, type ChangePasswordRequest, type ChangePasswordResult, type CreateBffAuthClientOptions, type CreateBffChangePasswordClientOptions, type CreateBffVerifyEmailClientOptions, DEFAULT_ACCOUNT_SETTINGS_LABELS, DEFAULT_AUTH_CARD_MAX_WIDTH, DEFAULT_DEMO_CREDENTIALS_HINT_LABELS, DEFAULT_DEVICE_PIN_ENROLL_LABELS, DEFAULT_DEVICE_PIN_SETTINGS_LABELS, DEFAULT_DEVICE_PIN_UNLOCK_LABELS, DEFAULT_FORGOT_PASSWORD_FIELDS_LABELS, DEFAULT_FORGOT_PASSWORD_LABELS, DEFAULT_LOGIN_LABELS, DEFAULT_OTP_LABELS, DEFAULT_PASSKEY_LOGIN_LABELS, DEFAULT_PASSKEY_SETTINGS_LABELS, DEFAULT_PIN_LABELS, DEFAULT_PREFERRED_METHOD_HINT_LABELS, DEFAULT_PREFERRED_METHOD_SETTINGS_LABELS, DEFAULT_REGISTER_LABELS, DEFAULT_RESET_PASSWORD_LABELS, DEFAULT_VERIFY_EMAIL_LABELS, DEFAULT_VERIFY_NEW_PASSWORD_LABELS, DEFAULT_VERIFY_SIGN_IN_LABELS, DEVICE_PIN_ALLOWED_DIGITS, DEVICE_PIN_DEFAULT_DIGITS, DemoCredentialsHint, type DemoCredentialsHintLabels, type DemoCredentialsHintProps, DemoCredentialsHintVariant, type DemoCredentialsHintWiring, type DemoCredentialsLoginFormProps, type DevicePinCapableClient, type DevicePinDisableCapableClient, type DevicePinEnrollCapableClient, DevicePinEnrollErrorKey, DevicePinEnrollForm, type DevicePinEnrollFormProps, type DevicePinEnrollLabels, type DevicePinEnrollResult, DevicePinErrorKey, DevicePinInput, type DevicePinInputProps, DevicePinLengthPicker, type DevicePinLengthPickerProps, DevicePinOffer, type DevicePinOfferProps, DevicePinSettingsCard, type DevicePinSettingsCardProps, type DevicePinSettingsLabels, type DevicePinUnlockCapableClient, type DevicePinUnlockLabels, type DevicePinUnlockResult, DevicePinUnlockScreen, type DevicePinUnlockScreenProps, type DevicePinUnlockedUser, ForgotPasswordFields, type ForgotPasswordFieldsLabels, type ForgotPasswordFieldsProps, ForgotPasswordForm, type ForgotPasswordFormLabels, type ForgotPasswordFormProps, type LoginConfigCapableClient, LoginForm, type LoginFormLabels, type LoginFormProps, OtpForm, type OtpFormLabels, type OtpFormProps, OtpLoginStep, PASSWORD_MAX_LENGTH, PASSWORD_MIN_LENGTH, PasskeyCeremonyMode, PasskeyCeremonyStatus, type PasskeyErrorCode, PasskeyLoginButton, type PasskeyLoginButtonProps, type PasskeyLoginLabels, PasskeySettingsCard, type PasskeySettingsCardProps, type PasskeySettingsLabels, PasswordPolicyError, type PerformBffLogoutOptions, PinForm, type PinFormLabels, type PinFormProps, type PreferencesClientOptions, type PreferredMethodClient, PreferredMethodHint, type PreferredMethodHintLabels, type PreferredMethodHintProps, PreferredMethodSettingsCard, type PreferredMethodSettingsCardProps, type PreferredMethodSettingsLabels, PrefillIntent, REGISTER_ENDPOINT, RESEND_VERIFICATION_ENDPOINT, RegisterErrorCode, type RegisterField, type RegisterFieldLabels, RegisterForm, type RegisterFormLabels, type RegisterFormProps, type RegisterFormValues, type RegisterInputField, type RegisterPasswordPolicy, type RegisterSubmitMeta, type RegisterSubmitOutcome, type RegisterSubmitValues, RegisterTestIds, ResetPasswordError, ResetPasswordForm, type ResetPasswordFormLabels, type ResetPasswordFormProps, type RoleRoute, type RoleRouteTable, SharedRegisterForm, type SharedRegisterFormProps, type SharedRegisterResult, type SharedRegistrationClient, type SplitName, type UseBffAuthOptions, type UseBffAuthResult, type UseBffForgotPasswordOptions, type UseBffLoginConfigResult, type UseBffResetPasswordOptions, type UseChangePasswordArgs, type UseChangePasswordResult, type UseDemoCredentialsOptions, type UseDemoCredentialsResult, type UseDevicePinDisableArgs, type UseDevicePinDisableResult, type UseDevicePinEnrollArgs, type UseDevicePinEnrollResult, type UseDevicePinUnlockArgs, type UseDevicePinUnlockResult, type UseForgotPasswordSubmitArgs, type UseForgotPasswordSubmitResult, type UseOtpLoginOptions, type UseOtpLoginResult, type UsePasskeyCeremonyOptions, type UsePasskeyCeremonyResult, type UsePinLoginOptions, type UsePinLoginResult, type UsePreferredMethodSettingArgs, type UsePreferredMethodSettingResult, type UseRegisterFormArgs, type UseRegisterFormResult, type UseResendVerificationArgs, type UseResendVerificationResult, type UseResetPasswordFormArgs, type UseResetPasswordFormResult, type UseVerifyEmailArgs, type UseVerifyEmailResult, VERIFY_AND_LOGIN_ENDPOINT, VERIFY_EMAIL_ENDPOINT, VERIFY_TOKEN_PLACEHOLDER, type VerifyEmailCapableClient, VerifyEmailErrorCode, type VerifyEmailLabels, VerifyEmailPhase, type VerifyEmailResult, VerifyEmailScreen, type VerifyEmailScreenProps, type VerifySignInLabels, buildVerifyUrlTemplate, cachePreferredMethod, clearCachedPreferredMethod, collectUserRoles, createBffAuthClient, createBffChangePasswordClient, createBffVerifyEmailClient, createPreferencesClient, createSharedRegistrationClient, defaultAuthTheme, deriveUsernameFromEmail, isAllowedPinDigits, isPasswordValid, isRegisterAccepted, isRegisterPasswordStrong, isValidForgotPasswordEmail, performBffLogout, readCachedPreferredMethod, readPasskeyError, readPasskeyRegistered, readVerifyToken, resolveAccessibleRoutes, resolveAccountList, resolveDemoAccounts, resolveDemoCredentials, resolvePostLoginRoute, splitFullName, startPasskeyLogin, startPasskeyRegistration, syncPreferredMethodFromServer, useAuthTheme, useBffAuth, useBffForgotPassword, useBffLoginConfig, useBffResetPassword, useChangePassword, useDemoCredentials, useDevicePinDisable, useDevicePinEnroll, useDevicePinUnlock, useForgotPasswordSubmit, useOtpLogin, usePasskeyCeremony, usePinLogin, usePreferredMethodSetting, useRegisterForm, useResendVerification, useResetPasswordForm, useVerifyEmail, validatePasswordPolicy, verifyEmailErrorText, withTestIdPrefix };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ReactNode, ReactElement } from 'react';
|
|
2
|
-
import { BffAuthClient, BffUser, DemoCredentials, HttpClient, DemoAccount, BffLoginRequest, BffForgotPasswordRequest, BffResetPasswordRequest, BffOtpRequestResult } from '@dloizides/auth-client';
|
|
2
|
+
import { BffAuthClient, BffUser, DemoCredentials, HttpClient, DemoAccount, BffLoginRequest, BffForgotPasswordRequest, BffResetPasswordRequest, BffOtpRequestResult, BffRegisterRequest } from '@dloizides/auth-client';
|
|
3
3
|
export { BffAuthClient, BffAuthClientOptions, BffForgotPasswordRequest, BffLoginRequest, BffOtpRequestRequest, BffOtpRequestResult, BffOtpVerifyRequest, BffPinLoginRequest, BffRegisterRequest, BffResetPasswordRequest, BffUser, DemoAccount, DemoCredentials, HttpClient, HttpRequest, HttpResponse, createFetchHttpClient } from '@dloizides/auth-client';
|
|
4
4
|
import { UseMutationOptions, UseMutationResult } from '@tanstack/react-query';
|
|
5
5
|
|
|
@@ -460,6 +460,8 @@ interface ResetPasswordFormLabels {
|
|
|
460
460
|
errorTokenInvalid: string;
|
|
461
461
|
/** Error: a network / 5xx failure. */
|
|
462
462
|
errorNetwork: string;
|
|
463
|
+
/** Error: the BFF rate-limited the attempt. Falls back to `errorNetwork`. */
|
|
464
|
+
errorRateLimited?: string;
|
|
463
465
|
}
|
|
464
466
|
declare const DEFAULT_RESET_PASSWORD_LABELS: ResetPasswordFormLabels;
|
|
465
467
|
|
|
@@ -571,6 +573,11 @@ type RegisterInputField = Exclude<RegisterField, 'website'>;
|
|
|
571
573
|
* honeypot is kept (empty for real users) so the BFF can enforce it as well.
|
|
572
574
|
*/
|
|
573
575
|
type RegisterSubmitValues = Omit<RegisterFormValues, 'confirmPassword'>;
|
|
576
|
+
/** Extra request data for shared registration; only passed to `onSubmit` when it is on. */
|
|
577
|
+
interface RegisterSubmitMeta {
|
|
578
|
+
idempotencyKey: string;
|
|
579
|
+
formElapsedMs: number;
|
|
580
|
+
}
|
|
574
581
|
/** `true` when the password is acceptable. */
|
|
575
582
|
type RegisterPasswordPolicy = (password: string) => boolean;
|
|
576
583
|
type RegisterSubmitOutcome<TResult> = {
|
|
@@ -603,9 +610,20 @@ interface RegisterFormLabels {
|
|
|
603
610
|
fields: Record<RegisterInputField, RegisterFieldLabels>;
|
|
604
611
|
/** Copy for the single "Your name" input of the compact form. Defaults to English. */
|
|
605
612
|
fullName?: RegisterFieldLabels;
|
|
613
|
+
/** Heading shown after a 202 with shared registration on. Defaults to English. */
|
|
614
|
+
checkEmailTitle?: string;
|
|
615
|
+
/** Body shown after a 202 with shared registration on. Defaults to English. */
|
|
616
|
+
checkEmailBody?: string;
|
|
606
617
|
}
|
|
607
618
|
declare const DEFAULT_REGISTER_LABELS: RegisterFormLabels;
|
|
608
619
|
|
|
620
|
+
/** Copy for the verified account whose automatic sign-in failed. */
|
|
621
|
+
interface VerifySignInLabels {
|
|
622
|
+
title: string;
|
|
623
|
+
body: string;
|
|
624
|
+
action: string;
|
|
625
|
+
actionHint: string;
|
|
626
|
+
}
|
|
609
627
|
/** Strings rendered by `<VerifyEmailScreen>`. */
|
|
610
628
|
interface VerifyEmailLabels {
|
|
611
629
|
loadingTitle: string;
|
|
@@ -629,7 +647,15 @@ interface VerifyEmailLabels {
|
|
|
629
647
|
resendSubmit: string;
|
|
630
648
|
resendSubmitHint: string;
|
|
631
649
|
resendConfirmation: string;
|
|
632
|
-
|
|
650
|
+
/** Shown when the BFF rate-limits the link. Falls back to `errorGeneric`. */
|
|
651
|
+
errorRateLimited?: string;
|
|
652
|
+
/** Copy for the set-new-password step of shared registration. */
|
|
653
|
+
newPassword?: Partial<ResetPasswordFormLabels>;
|
|
654
|
+
/** Copy for the verified-but-not-signed-in step of shared registration. */
|
|
655
|
+
signIn?: Partial<VerifySignInLabels>;
|
|
656
|
+
}
|
|
657
|
+
declare const DEFAULT_VERIFY_NEW_PASSWORD_LABELS: ResetPasswordFormLabels;
|
|
658
|
+
declare const DEFAULT_VERIFY_SIGN_IN_LABELS: VerifySignInLabels;
|
|
633
659
|
declare const DEFAULT_VERIFY_EMAIL_LABELS: VerifyEmailLabels;
|
|
634
660
|
|
|
635
661
|
/**
|
|
@@ -1897,6 +1923,8 @@ declare const AuthTestIds: {
|
|
|
1897
1923
|
readonly verifyEmailSuccess: "auth-verify-email-success";
|
|
1898
1924
|
readonly verifyEmailContinue: "auth-verify-email-continue";
|
|
1899
1925
|
readonly verifyEmailError: "auth-verify-email-error";
|
|
1926
|
+
readonly verifyEmailSignIn: "auth-verify-email-sign-in";
|
|
1927
|
+
readonly verifyEmailSignInContinue: "auth-verify-email-sign-in-continue";
|
|
1900
1928
|
readonly verifyEmailResendCta: "auth-verify-email-resend-cta";
|
|
1901
1929
|
readonly verifyEmailResendForm: "auth-verify-email-resend-form";
|
|
1902
1930
|
readonly verifyEmailResendEmail: "auth-verify-email-resend-email";
|
|
@@ -2004,7 +2032,9 @@ declare const enum ResetPasswordError {
|
|
|
2004
2032
|
/** The reset token is missing, expired, or already consumed. */
|
|
2005
2033
|
TokenInvalid = "tokenInvalid",
|
|
2006
2034
|
/** A network or 5xx failure prevented the reset from completing. */
|
|
2007
|
-
Network = "network"
|
|
2035
|
+
Network = "network",
|
|
2036
|
+
/** The BFF rate-limited the attempt (HTTP 429). */
|
|
2037
|
+
RateLimited = "rateLimited"
|
|
2008
2038
|
}
|
|
2009
2039
|
|
|
2010
2040
|
interface UseResetPasswordFormArgs {
|
|
@@ -2508,7 +2538,7 @@ declare function resolveDemoAccounts(credentials?: DemoCredentials | null): Demo
|
|
|
2508
2538
|
|
|
2509
2539
|
interface RegisterFormProps<TResult> {
|
|
2510
2540
|
/** Send the registration (build the request, call the BFF). Throw on failure. */
|
|
2511
|
-
onSubmit: (values: RegisterSubmitValues) => Promise<TResult>;
|
|
2541
|
+
onSubmit: (values: RegisterSubmitValues, meta?: RegisterSubmitMeta) => Promise<TResult>;
|
|
2512
2542
|
/** Called with whatever `onSubmit` resolved to. */
|
|
2513
2543
|
onSuccess: (result: TResult) => void;
|
|
2514
2544
|
/** Called with the failure code; map it to localised copy. */
|
|
@@ -2533,7 +2563,7 @@ interface RegisterFormProps<TResult> {
|
|
|
2533
2563
|
compact?: boolean;
|
|
2534
2564
|
}
|
|
2535
2565
|
/** Themeable registration form built on `useRegisterForm`. */
|
|
2536
|
-
declare function RegisterForm<TResult>(
|
|
2566
|
+
declare function RegisterForm<TResult>(props: Readonly<RegisterFormProps<TResult>>): ReactElement;
|
|
2537
2567
|
|
|
2538
2568
|
/**
|
|
2539
2569
|
* `testID` values for `<RegisterForm>`.
|
|
@@ -2558,11 +2588,12 @@ declare const RegisterTestIds: {
|
|
|
2558
2588
|
readonly tenantNameInput: "register-tenant-name-input";
|
|
2559
2589
|
readonly submitButton: "register-submit-button";
|
|
2560
2590
|
readonly websiteInput: "register-website";
|
|
2591
|
+
readonly checkEmail: "register-check-email";
|
|
2561
2592
|
};
|
|
2562
2593
|
|
|
2563
2594
|
interface UseRegisterFormArgs<TResult> {
|
|
2564
2595
|
/** Send the registration. Throw on failure; the message is decoded to a code. */
|
|
2565
|
-
onSubmit: (values: RegisterSubmitValues) => Promise<TResult>;
|
|
2596
|
+
onSubmit: (values: RegisterSubmitValues, meta?: RegisterSubmitMeta) => Promise<TResult>;
|
|
2566
2597
|
/** Password rule. Defaults to {@link isRegisterPasswordStrong}. */
|
|
2567
2598
|
passwordPolicy?: RegisterPasswordPolicy;
|
|
2568
2599
|
/**
|
|
@@ -2575,6 +2606,8 @@ interface UseRegisterFormArgs<TResult> {
|
|
|
2575
2606
|
* (from the email) and the password confirmation are derived before validation.
|
|
2576
2607
|
*/
|
|
2577
2608
|
compact?: boolean;
|
|
2609
|
+
/** Opt-in shared registration: `onSubmit` also gets the key and form time; an accepted result clears the passwords. */
|
|
2610
|
+
sharedRegistration?: boolean;
|
|
2578
2611
|
}
|
|
2579
2612
|
interface UseRegisterFormResult<TResult> {
|
|
2580
2613
|
state: RegisterFormValues;
|
|
@@ -2585,7 +2618,7 @@ interface UseRegisterFormResult<TResult> {
|
|
|
2585
2618
|
error: RegisterErrorCode | null;
|
|
2586
2619
|
}
|
|
2587
2620
|
/** Headless registration form logic. */
|
|
2588
|
-
declare function useRegisterForm<TResult>({ onSubmit, passwordPolicy, onSubmitAttempt, compact, }: UseRegisterFormArgs<TResult>): UseRegisterFormResult<TResult>;
|
|
2621
|
+
declare function useRegisterForm<TResult>({ onSubmit, passwordPolicy, onSubmitAttempt, compact, sharedRegistration, }: UseRegisterFormArgs<TResult>): UseRegisterFormResult<TResult>;
|
|
2589
2622
|
|
|
2590
2623
|
/**
|
|
2591
2624
|
* Pure registration helpers: trimming, client-side validation and decoding of a
|
|
@@ -2919,6 +2952,10 @@ declare const enum VerifyEmailErrorCode {
|
|
|
2919
2952
|
TokenUsed = "TOKEN_USED",
|
|
2920
2953
|
KeycloakUpdateFailed = "KEYCLOAK_UPDATE_FAILED",
|
|
2921
2954
|
MissingToken = "MISSING_TOKEN",
|
|
2955
|
+
NewPasswordRequired = "NEW_PASSWORD_REQUIRED",
|
|
2956
|
+
WeakPassword = "WEAK_PASSWORD",
|
|
2957
|
+
RateLimited = "RATE_LIMITED",
|
|
2958
|
+
SignInFailed = "SIGN_IN_FAILED",
|
|
2922
2959
|
Generic = "GENERIC"
|
|
2923
2960
|
}
|
|
2924
2961
|
|
|
@@ -2932,6 +2969,7 @@ type VerifyEmailResult = {
|
|
|
2932
2969
|
interface VerifyEmailCapableClient {
|
|
2933
2970
|
verifyEmail(token: string): Promise<VerifyEmailResult>;
|
|
2934
2971
|
resendVerification(email: string, verifyUrlTemplate?: string): Promise<boolean>;
|
|
2972
|
+
setNewPassword?(token: string, newPassword: string): Promise<VerifyEmailResult>;
|
|
2935
2973
|
}
|
|
2936
2974
|
|
|
2937
2975
|
interface VerifyEmailScreenProps {
|
|
@@ -2948,11 +2986,12 @@ interface VerifyEmailScreenProps {
|
|
|
2948
2986
|
/** Verifies the emailed token on mount, then offers Continue or a resend-link form. */
|
|
2949
2987
|
declare function VerifyEmailScreen({ client, token, onContinue, theme: themeProp, labels: labelsProp, verifyUrlTemplate, onVerified, onFailed, testIdPrefix, }: Readonly<VerifyEmailScreenProps>): ReactElement;
|
|
2950
2988
|
|
|
2951
|
-
/** The
|
|
2989
|
+
/** The states the verify-email screen moves through. */
|
|
2952
2990
|
declare const enum VerifyEmailPhase {
|
|
2953
2991
|
Loading = "loading",
|
|
2954
2992
|
Success = "success",
|
|
2955
|
-
Failure = "failure"
|
|
2993
|
+
Failure = "failure",
|
|
2994
|
+
NewPasswordRequired = "newPasswordRequired"
|
|
2956
2995
|
}
|
|
2957
2996
|
|
|
2958
2997
|
interface UseVerifyEmailArgs {
|
|
@@ -3006,4 +3045,28 @@ declare function readVerifyToken(raw: string | readonly string[] | undefined): s
|
|
|
3006
3045
|
/** The failure body copy for a verification error code. */
|
|
3007
3046
|
declare function verifyEmailErrorText(code: VerifyEmailErrorCode, labels: VerifyEmailLabels): string;
|
|
3008
3047
|
|
|
3009
|
-
|
|
3048
|
+
/** What the shared `/bff/register` resolves to; `accepted` means a 202 with no session. */
|
|
3049
|
+
interface SharedRegisterResult {
|
|
3050
|
+
accepted: boolean;
|
|
3051
|
+
body: unknown;
|
|
3052
|
+
}
|
|
3053
|
+
/** `true` when `result` reports an accepted registration waiting on the emailed link. */
|
|
3054
|
+
declare function isRegisterAccepted(result: unknown): boolean;
|
|
3055
|
+
|
|
3056
|
+
declare const REGISTER_ENDPOINT = "/bff/register";
|
|
3057
|
+
declare const VERIFY_AND_LOGIN_ENDPOINT = "/bff/verify-and-login";
|
|
3058
|
+
interface SharedRegistrationClient extends VerifyEmailCapableClient {
|
|
3059
|
+
register(request: BffRegisterRequest, meta?: RegisterSubmitMeta): Promise<SharedRegisterResult>;
|
|
3060
|
+
setNewPassword(token: string, newPassword: string): Promise<VerifyEmailResult>;
|
|
3061
|
+
}
|
|
3062
|
+
/** Same-origin client for the shared registration path; never calls `/bff/verify-email`. */
|
|
3063
|
+
declare function createSharedRegistrationClient(options?: CreateBffVerifyEmailClientOptions): SharedRegistrationClient;
|
|
3064
|
+
|
|
3065
|
+
interface SharedRegisterFormProps<TResult> extends RegisterFormProps<TResult> {
|
|
3066
|
+
/** Called once when the BFF accepts the signup (202). `onSuccess` is not called then: no session exists. */
|
|
3067
|
+
onAccepted?: (result: TResult) => void;
|
|
3068
|
+
}
|
|
3069
|
+
/** `<RegisterForm>` for the shared path: `onSubmit` also gets `meta`, and a 202 shows "check your email". */
|
|
3070
|
+
declare function SharedRegisterForm<TResult>({ onSuccess, onAccepted, ...formProps }: Readonly<SharedRegisterFormProps<TResult>>): ReactElement;
|
|
3071
|
+
|
|
3072
|
+
export { type AccountSettingsChangePasswordConfig, type AccountSettingsDevicePinConfig, type AccountSettingsLabels, type AccountSettingsPasskeysConfig, type AccountSettingsPreferredMethodConfig, AccountSettingsScreen, type AccountSettingsScreenProps, AuthScreen, type AuthScreenProps, AuthTestIds, type AuthTheme, type AuthThemeColors, AuthThemeProvider, type AuthThemeProviderProps, type AuthThemeRadii, type AuthThemeSpacing, type AuthThemeTypography, BffAuthStatus, type BffDeviceState, type BffLoginConfig, type BffLogoutClient, type BuildVerifyUrlTemplateOptions, CHANGE_PASSWORD_ENDPOINT, type ChangePasswordCapableClient, ChangePasswordCard, type ChangePasswordCardProps, ChangePasswordErrorKey, type ChangePasswordRequest, type ChangePasswordResult, type CreateBffAuthClientOptions, type CreateBffChangePasswordClientOptions, type CreateBffVerifyEmailClientOptions, DEFAULT_ACCOUNT_SETTINGS_LABELS, DEFAULT_AUTH_CARD_MAX_WIDTH, DEFAULT_DEMO_CREDENTIALS_HINT_LABELS, DEFAULT_DEVICE_PIN_ENROLL_LABELS, DEFAULT_DEVICE_PIN_SETTINGS_LABELS, DEFAULT_DEVICE_PIN_UNLOCK_LABELS, DEFAULT_FORGOT_PASSWORD_FIELDS_LABELS, DEFAULT_FORGOT_PASSWORD_LABELS, DEFAULT_LOGIN_LABELS, DEFAULT_OTP_LABELS, DEFAULT_PASSKEY_LOGIN_LABELS, DEFAULT_PASSKEY_SETTINGS_LABELS, DEFAULT_PIN_LABELS, DEFAULT_PREFERRED_METHOD_HINT_LABELS, DEFAULT_PREFERRED_METHOD_SETTINGS_LABELS, DEFAULT_REGISTER_LABELS, DEFAULT_RESET_PASSWORD_LABELS, DEFAULT_VERIFY_EMAIL_LABELS, DEFAULT_VERIFY_NEW_PASSWORD_LABELS, DEFAULT_VERIFY_SIGN_IN_LABELS, DEVICE_PIN_ALLOWED_DIGITS, DEVICE_PIN_DEFAULT_DIGITS, DemoCredentialsHint, type DemoCredentialsHintLabels, type DemoCredentialsHintProps, DemoCredentialsHintVariant, type DemoCredentialsHintWiring, type DemoCredentialsLoginFormProps, type DevicePinCapableClient, type DevicePinDisableCapableClient, type DevicePinEnrollCapableClient, DevicePinEnrollErrorKey, DevicePinEnrollForm, type DevicePinEnrollFormProps, type DevicePinEnrollLabels, type DevicePinEnrollResult, DevicePinErrorKey, DevicePinInput, type DevicePinInputProps, DevicePinLengthPicker, type DevicePinLengthPickerProps, DevicePinOffer, type DevicePinOfferProps, DevicePinSettingsCard, type DevicePinSettingsCardProps, type DevicePinSettingsLabels, type DevicePinUnlockCapableClient, type DevicePinUnlockLabels, type DevicePinUnlockResult, DevicePinUnlockScreen, type DevicePinUnlockScreenProps, type DevicePinUnlockedUser, ForgotPasswordFields, type ForgotPasswordFieldsLabels, type ForgotPasswordFieldsProps, ForgotPasswordForm, type ForgotPasswordFormLabels, type ForgotPasswordFormProps, type LoginConfigCapableClient, LoginForm, type LoginFormLabels, type LoginFormProps, OtpForm, type OtpFormLabels, type OtpFormProps, OtpLoginStep, PASSWORD_MAX_LENGTH, PASSWORD_MIN_LENGTH, PasskeyCeremonyMode, PasskeyCeremonyStatus, type PasskeyErrorCode, PasskeyLoginButton, type PasskeyLoginButtonProps, type PasskeyLoginLabels, PasskeySettingsCard, type PasskeySettingsCardProps, type PasskeySettingsLabels, PasswordPolicyError, type PerformBffLogoutOptions, PinForm, type PinFormLabels, type PinFormProps, type PreferencesClientOptions, type PreferredMethodClient, PreferredMethodHint, type PreferredMethodHintLabels, type PreferredMethodHintProps, PreferredMethodSettingsCard, type PreferredMethodSettingsCardProps, type PreferredMethodSettingsLabels, PrefillIntent, REGISTER_ENDPOINT, RESEND_VERIFICATION_ENDPOINT, RegisterErrorCode, type RegisterField, type RegisterFieldLabels, RegisterForm, type RegisterFormLabels, type RegisterFormProps, type RegisterFormValues, type RegisterInputField, type RegisterPasswordPolicy, type RegisterSubmitMeta, type RegisterSubmitOutcome, type RegisterSubmitValues, RegisterTestIds, ResetPasswordError, ResetPasswordForm, type ResetPasswordFormLabels, type ResetPasswordFormProps, type RoleRoute, type RoleRouteTable, SharedRegisterForm, type SharedRegisterFormProps, type SharedRegisterResult, type SharedRegistrationClient, type SplitName, type UseBffAuthOptions, type UseBffAuthResult, type UseBffForgotPasswordOptions, type UseBffLoginConfigResult, type UseBffResetPasswordOptions, type UseChangePasswordArgs, type UseChangePasswordResult, type UseDemoCredentialsOptions, type UseDemoCredentialsResult, type UseDevicePinDisableArgs, type UseDevicePinDisableResult, type UseDevicePinEnrollArgs, type UseDevicePinEnrollResult, type UseDevicePinUnlockArgs, type UseDevicePinUnlockResult, type UseForgotPasswordSubmitArgs, type UseForgotPasswordSubmitResult, type UseOtpLoginOptions, type UseOtpLoginResult, type UsePasskeyCeremonyOptions, type UsePasskeyCeremonyResult, type UsePinLoginOptions, type UsePinLoginResult, type UsePreferredMethodSettingArgs, type UsePreferredMethodSettingResult, type UseRegisterFormArgs, type UseRegisterFormResult, type UseResendVerificationArgs, type UseResendVerificationResult, type UseResetPasswordFormArgs, type UseResetPasswordFormResult, type UseVerifyEmailArgs, type UseVerifyEmailResult, VERIFY_AND_LOGIN_ENDPOINT, VERIFY_EMAIL_ENDPOINT, VERIFY_TOKEN_PLACEHOLDER, type VerifyEmailCapableClient, VerifyEmailErrorCode, type VerifyEmailLabels, VerifyEmailPhase, type VerifyEmailResult, VerifyEmailScreen, type VerifyEmailScreenProps, type VerifySignInLabels, buildVerifyUrlTemplate, cachePreferredMethod, clearCachedPreferredMethod, collectUserRoles, createBffAuthClient, createBffChangePasswordClient, createBffVerifyEmailClient, createPreferencesClient, createSharedRegistrationClient, defaultAuthTheme, deriveUsernameFromEmail, isAllowedPinDigits, isPasswordValid, isRegisterAccepted, isRegisterPasswordStrong, isValidForgotPasswordEmail, performBffLogout, readCachedPreferredMethod, readPasskeyError, readPasskeyRegistered, readVerifyToken, resolveAccessibleRoutes, resolveAccountList, resolveDemoAccounts, resolveDemoCredentials, resolvePostLoginRoute, splitFullName, startPasskeyLogin, startPasskeyRegistration, syncPreferredMethodFromServer, useAuthTheme, useBffAuth, useBffForgotPassword, useBffLoginConfig, useBffResetPassword, useChangePassword, useDemoCredentials, useDevicePinDisable, useDevicePinEnroll, useDevicePinUnlock, useForgotPasswordSubmit, useOtpLogin, usePasskeyCeremony, usePinLogin, usePreferredMethodSetting, useRegisterForm, useResendVerification, useResetPasswordForm, useVerifyEmail, validatePasswordPolicy, verifyEmailErrorText, withTestIdPrefix };
|