@dloizides/auth-web 1.17.0 → 1.18.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,6 +1,7 @@
1
1
  import { StyleSheet, Platform, View, Text, TextInput, TouchableOpacity, ActivityIndicator, Pressable, ScrollView } from 'react-native';
2
2
  import { createContext, useContext, useMemo, useState, useRef, useEffect, useCallback } from 'react';
3
3
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
4
+ import { Button } from '@dloizides/ui-buttons';
4
5
  import { useMutation } from '@tanstack/react-query';
5
6
  import { BffAuthClient, createFetchHttpClient } from '@dloizides/auth-client';
6
7
  export { BffAuthClient, createFetchHttpClient } from '@dloizides/auth-client';
@@ -330,6 +331,27 @@ var DEFAULT_ACCOUNT_SETTINGS_LABELS = {
330
331
  errorFailed: "Could not change your password. Try again later."
331
332
  };
332
333
 
334
+ // src/components/labels/registerLabels.ts
335
+ function field(label, placeholder) {
336
+ return { label, placeholder, hint: placeholder, inputLabel: label };
337
+ }
338
+ var DEFAULT_REGISTER_LABELS = {
339
+ title: "Create account",
340
+ subtitle: "Sign up to get started",
341
+ submit: "Create account",
342
+ submitHint: "Creates your account",
343
+ submitting: "Creating account...",
344
+ fields: {
345
+ firstName: field("First name", "Enter your first name"),
346
+ lastName: field("Last name", "Enter your last name"),
347
+ username: field("Username", "Choose a username"),
348
+ email: field("Email", "Enter your email"),
349
+ password: field("Password", "Choose a password"),
350
+ confirmPassword: field("Confirm password", "Repeat your password"),
351
+ tenantName: field("Organisation name", "Enter your organisation name")
352
+ }
353
+ };
354
+
333
355
  // src/components/testIds.ts
334
356
  var AuthTestIds = {
335
357
  loginForm: "auth-login-form",
@@ -753,7 +775,6 @@ function LoginForm({
753
775
  missingFieldsLabel: labels.missingFields,
754
776
  invalidCredentialsLabel: labels.invalidCredentials
755
777
  });
756
- const submitButtonStyle = isSubmitting ? [styles3.primaryButton, styles3.primaryButtonDisabled] : styles3.primaryButton;
757
778
  const content = /* @__PURE__ */ jsxs(Fragment, { children: [
758
779
  /* @__PURE__ */ jsx(Text, { style: styles3.title, children: labels.title }),
759
780
  /* @__PURE__ */ jsx(Text, { style: styles3.subtitle, children: labels.subtitle }),
@@ -817,19 +838,18 @@ function LoginForm({
817
838
  children: /* @__PURE__ */ jsx(Text, { style: styles3.linkText, children: labels.forgotPassword })
818
839
  }
819
840
  ) : null,
820
- /* @__PURE__ */ jsx(
821
- TouchableOpacity,
841
+ /* @__PURE__ */ jsx(View, { style: styles3.fieldGroup, children: /* @__PURE__ */ jsx(
842
+ Button,
822
843
  {
844
+ fullWidth: true,
823
845
  accessibilityHint: labels.submit,
824
846
  accessibilityLabel: isSubmitting ? labels.submitting : labels.submit,
825
- accessibilityRole: "button",
826
- disabled: isSubmitting,
827
- style: submitButtonStyle,
847
+ label: labels.submit,
848
+ loading: isSubmitting,
828
849
  testID: withTestIdPrefix(AuthTestIds.loginSubmitButton, testIdPrefix),
829
- onPress: handleSubmit,
830
- children: isSubmitting ? /* @__PURE__ */ jsx(ActivityIndicator, { color: theme.colors.onPrimary, size: "small" }) : /* @__PURE__ */ jsx(Text, { style: styles3.primaryButtonText, children: labels.submit })
850
+ onPress: handleSubmit
831
851
  }
832
- ),
852
+ ) }),
833
853
  onSignUp !== void 0 ? /* @__PURE__ */ jsx(
834
854
  TouchableOpacity,
835
855
  {
@@ -4030,6 +4050,327 @@ function useDemoCredentials({
4030
4050
  [filled, prefillNonce, prefillIntent, credentials, accounts, handleUse]
4031
4051
  );
4032
4052
  }
4053
+
4054
+ // src/components/registerTestIds.ts
4055
+ var RegisterTestIds = {
4056
+ form: "register-form",
4057
+ firstNameInput: "register-first-name-input",
4058
+ lastNameInput: "register-last-name-input",
4059
+ usernameInput: "register-username-input",
4060
+ emailInput: "register-email-input",
4061
+ passwordInput: "register-password-input",
4062
+ confirmPasswordInput: "register-confirm-password-input",
4063
+ tenantNameInput: "register-tenant-name-input",
4064
+ submitButton: "register-submit-button",
4065
+ websiteInput: "register-website"
4066
+ };
4067
+ var FIELDS = [
4068
+ { key: "firstName", testId: RegisterTestIds.firstNameInput, autoComplete: "name" },
4069
+ { key: "lastName", testId: RegisterTestIds.lastNameInput, autoComplete: "name" },
4070
+ { key: "username", testId: RegisterTestIds.usernameInput, autoComplete: "username" },
4071
+ { key: "email", testId: RegisterTestIds.emailInput, autoComplete: "email", keyboardType: "email-address" },
4072
+ { key: "password", testId: RegisterTestIds.passwordInput, secure: true },
4073
+ { key: "confirmPassword", testId: RegisterTestIds.confirmPasswordInput, secure: true },
4074
+ { key: "tenantName", testId: RegisterTestIds.tenantNameInput }
4075
+ ];
4076
+ var OFF_SCREEN = -9999;
4077
+ var HONEYPOT_SIZE = 1;
4078
+ var HONEYPOT_PLACEHOLDER = "Website";
4079
+ var honeypotStyles = StyleSheet.create({
4080
+ honeypot: {
4081
+ position: "absolute",
4082
+ left: OFF_SCREEN,
4083
+ top: OFF_SCREEN,
4084
+ width: HONEYPOT_SIZE,
4085
+ height: HONEYPOT_SIZE,
4086
+ opacity: 0
4087
+ }
4088
+ });
4089
+ function RegisterFormFields({
4090
+ values,
4091
+ labels,
4092
+ disabled,
4093
+ theme,
4094
+ styles: styles3,
4095
+ onChange,
4096
+ testIdPrefix
4097
+ }) {
4098
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
4099
+ FIELDS.map((config) => {
4100
+ const copy = labels.fields[config.key];
4101
+ return /* @__PURE__ */ jsxs(View, { style: styles3.fieldGroup, children: [
4102
+ /* @__PURE__ */ jsx(Text, { style: styles3.label, children: copy.label }),
4103
+ /* @__PURE__ */ jsx(
4104
+ TextInput,
4105
+ {
4106
+ accessibilityHint: copy.hint,
4107
+ accessibilityLabel: copy.inputLabel,
4108
+ autoCapitalize: "none",
4109
+ autoComplete: config.autoComplete,
4110
+ autoCorrect: false,
4111
+ editable: !disabled,
4112
+ keyboardType: config.keyboardType ?? "default",
4113
+ placeholder: copy.placeholder,
4114
+ placeholderTextColor: theme.colors.textSecondary,
4115
+ secureTextEntry: config.secure === true,
4116
+ style: styles3.input,
4117
+ testID: withTestIdPrefix(config.testId, testIdPrefix),
4118
+ value: values[config.key],
4119
+ onChangeText: (text) => onChange(config.key, text)
4120
+ }
4121
+ )
4122
+ ] }, config.key);
4123
+ }),
4124
+ /* @__PURE__ */ jsx(
4125
+ TextInput,
4126
+ {
4127
+ accessibilityElementsHidden: true,
4128
+ accessibilityRole: "none",
4129
+ autoComplete: "off",
4130
+ focusable: false,
4131
+ importantForAccessibility: "no-hide-descendants",
4132
+ placeholder: HONEYPOT_PLACEHOLDER,
4133
+ style: honeypotStyles.honeypot,
4134
+ testID: withTestIdPrefix(RegisterTestIds.websiteInput, testIdPrefix),
4135
+ value: values.website,
4136
+ onChangeText: (text) => onChange("website", text)
4137
+ }
4138
+ )
4139
+ ] });
4140
+ }
4141
+
4142
+ // src/hooks/RegisterErrorCode.ts
4143
+ var RegisterErrorCode = /* @__PURE__ */ ((RegisterErrorCode2) => {
4144
+ RegisterErrorCode2["MissingFields"] = "missingFields";
4145
+ RegisterErrorCode2["InvalidEmail"] = "invalidEmail";
4146
+ RegisterErrorCode2["WeakPassword"] = "weakPassword";
4147
+ RegisterErrorCode2["PasswordMismatch"] = "passwordMismatch";
4148
+ RegisterErrorCode2["UsernameTaken"] = "usernameTaken";
4149
+ RegisterErrorCode2["EmailTaken"] = "emailTaken";
4150
+ RegisterErrorCode2["RealmInvalid"] = "realmInvalid";
4151
+ RegisterErrorCode2["ValidationFailed"] = "validationFailed";
4152
+ RegisterErrorCode2["Failed"] = "failed";
4153
+ RegisterErrorCode2["InFlight"] = "inFlight";
4154
+ return RegisterErrorCode2;
4155
+ })(RegisterErrorCode || {});
4156
+
4157
+ // src/hooks/routeRegisterOutcome.ts
4158
+ function routeRegisterOutcome(outcome, handlers) {
4159
+ if (outcome.ok) {
4160
+ handlers.onSuccess(outcome.result);
4161
+ return;
4162
+ }
4163
+ if (outcome.error !== "inFlight" /* InFlight */) {
4164
+ handlers.onError?.(outcome.error);
4165
+ }
4166
+ }
4167
+
4168
+ // src/hooks/registerErrors.ts
4169
+ var MIN_PASSWORD_LENGTH = 8;
4170
+ var WHITESPACE_REGEX = /\s/;
4171
+ var EMAIL_PART_COUNT = 2;
4172
+ var PASSWORD_LETTER_REGEX = /[a-zA-Z]/;
4173
+ var PASSWORD_DIGIT_REGEX = /\d/;
4174
+ var PASSWORD_SPECIAL_REGEX = /[^a-zA-Z0-9]/;
4175
+ var SERVER_ERROR_CODES = [
4176
+ ["USERNAME_TAKEN", "usernameTaken" /* UsernameTaken */],
4177
+ ["EMAIL_TAKEN", "emailTaken" /* EmailTaken */],
4178
+ ["REALM_REQUIRED", "realmInvalid" /* RealmInvalid */],
4179
+ ["REALM_INVALID", "realmInvalid" /* RealmInvalid */]
4180
+ ];
4181
+ function isRegisterPasswordStrong(password) {
4182
+ if (password.length < MIN_PASSWORD_LENGTH) {
4183
+ return false;
4184
+ }
4185
+ if (!PASSWORD_LETTER_REGEX.test(password)) {
4186
+ return false;
4187
+ }
4188
+ if (!PASSWORD_DIGIT_REGEX.test(password)) {
4189
+ return false;
4190
+ }
4191
+ return PASSWORD_SPECIAL_REGEX.test(password);
4192
+ }
4193
+ function isEmailShaped(email) {
4194
+ if (WHITESPACE_REGEX.test(email)) {
4195
+ return false;
4196
+ }
4197
+ const parts = email.split("@");
4198
+ if (parts.length !== EMAIL_PART_COUNT) {
4199
+ return false;
4200
+ }
4201
+ const [local = "", domain = ""] = parts;
4202
+ return local !== "" && domain.slice(1, -1).includes(".");
4203
+ }
4204
+ function trimRegisterValues(values) {
4205
+ return {
4206
+ firstName: values.firstName.trim(),
4207
+ lastName: values.lastName.trim(),
4208
+ username: values.username.trim(),
4209
+ email: values.email.trim(),
4210
+ password: values.password,
4211
+ confirmPassword: values.confirmPassword,
4212
+ tenantName: values.tenantName.trim(),
4213
+ website: values.website.trim()
4214
+ };
4215
+ }
4216
+ function hasMissingRequiredField(values) {
4217
+ const required = [
4218
+ values.firstName,
4219
+ values.lastName,
4220
+ values.username,
4221
+ values.email,
4222
+ values.password,
4223
+ values.tenantName
4224
+ ];
4225
+ return required.some((value) => value === "");
4226
+ }
4227
+ function validateRegisterValues(values, passwordPolicy) {
4228
+ if (hasMissingRequiredField(values)) {
4229
+ return "missingFields" /* MissingFields */;
4230
+ }
4231
+ if (!isEmailShaped(values.email)) {
4232
+ return "invalidEmail" /* InvalidEmail */;
4233
+ }
4234
+ if (!passwordPolicy(values.password)) {
4235
+ return "weakPassword" /* WeakPassword */;
4236
+ }
4237
+ if (values.password !== values.confirmPassword) {
4238
+ return "passwordMismatch" /* PasswordMismatch */;
4239
+ }
4240
+ return null;
4241
+ }
4242
+ function messageOf(error) {
4243
+ if (error instanceof Error) {
4244
+ return error.message;
4245
+ }
4246
+ return typeof error === "string" ? error : "";
4247
+ }
4248
+ function mapRegisterErrorCode(error) {
4249
+ const message = messageOf(error);
4250
+ if (message === "") {
4251
+ return "failed" /* Failed */;
4252
+ }
4253
+ const match = SERVER_ERROR_CODES.find(([code]) => message.includes(code));
4254
+ return match === void 0 ? "validationFailed" /* ValidationFailed */ : match[1];
4255
+ }
4256
+
4257
+ // src/hooks/useRegisterForm.ts
4258
+ var EMPTY_VALUES = {
4259
+ firstName: "",
4260
+ lastName: "",
4261
+ username: "",
4262
+ email: "",
4263
+ password: "",
4264
+ confirmPassword: "",
4265
+ tenantName: "",
4266
+ website: ""
4267
+ };
4268
+ function toSubmitValues(values) {
4269
+ return {
4270
+ firstName: values.firstName,
4271
+ lastName: values.lastName,
4272
+ username: values.username,
4273
+ email: values.email,
4274
+ password: values.password,
4275
+ tenantName: values.tenantName,
4276
+ website: values.website
4277
+ };
4278
+ }
4279
+ function useRegisterForm({
4280
+ onSubmit,
4281
+ passwordPolicy = isRegisterPasswordStrong,
4282
+ onSubmitAttempt
4283
+ }) {
4284
+ const [state, setState] = useState(EMPTY_VALUES);
4285
+ const [isSubmitting, setIsSubmitting] = useState(false);
4286
+ const [error, setError] = useState(null);
4287
+ const inFlight = useRef(false);
4288
+ const setField = useCallback((field2, value) => {
4289
+ setState((prev) => ({ ...prev, [field2]: value }));
4290
+ }, []);
4291
+ const submit = useCallback(async () => {
4292
+ if (inFlight.current) {
4293
+ return { ok: false, error: "inFlight" /* InFlight */ };
4294
+ }
4295
+ onSubmitAttempt?.();
4296
+ const trimmed = trimRegisterValues(state);
4297
+ const refusal = trimmed.website === "" ? validateRegisterValues(trimmed, passwordPolicy) : "failed" /* Failed */;
4298
+ if (refusal !== null) {
4299
+ setError(refusal);
4300
+ return { ok: false, error: refusal };
4301
+ }
4302
+ inFlight.current = true;
4303
+ setError(null);
4304
+ setIsSubmitting(true);
4305
+ try {
4306
+ const result = await onSubmit(toSubmitValues(trimmed));
4307
+ return { ok: true, result };
4308
+ } catch (caught) {
4309
+ const code = mapRegisterErrorCode(caught);
4310
+ setError(code);
4311
+ return { ok: false, error: code };
4312
+ } finally {
4313
+ inFlight.current = false;
4314
+ setIsSubmitting(false);
4315
+ }
4316
+ }, [onSubmit, onSubmitAttempt, passwordPolicy, state]);
4317
+ return { state, setField, submit, isSubmitting, error };
4318
+ }
4319
+ function RegisterForm({
4320
+ onSubmit,
4321
+ onSuccess,
4322
+ onError,
4323
+ onSubmitAttempt,
4324
+ passwordPolicy,
4325
+ labels: labelsProp,
4326
+ theme: themeProp,
4327
+ footer,
4328
+ testIdPrefix
4329
+ }) {
4330
+ const theme = useAuthTheme(themeProp);
4331
+ const styles3 = useAuthStyles(theme);
4332
+ const labels = useMemo(
4333
+ () => ({ ...DEFAULT_REGISTER_LABELS, ...labelsProp }),
4334
+ [labelsProp]
4335
+ );
4336
+ const { state, setField, submit, isSubmitting } = useRegisterForm({
4337
+ onSubmit,
4338
+ onSubmitAttempt,
4339
+ passwordPolicy
4340
+ });
4341
+ const handlePress = useCallback(async () => {
4342
+ routeRegisterOutcome(await submit(), { onSuccess, onError });
4343
+ }, [onError, onSuccess, submit]);
4344
+ return /* @__PURE__ */ jsx(View, { style: styles3.screen, children: /* @__PURE__ */ jsxs(View, { style: styles3.card, testID: withTestIdPrefix(RegisterTestIds.form, testIdPrefix), children: [
4345
+ /* @__PURE__ */ jsx(Text, { style: styles3.title, children: labels.title }),
4346
+ /* @__PURE__ */ jsx(Text, { style: styles3.subtitle, children: labels.subtitle }),
4347
+ /* @__PURE__ */ jsx(
4348
+ RegisterFormFields,
4349
+ {
4350
+ disabled: isSubmitting,
4351
+ labels,
4352
+ styles: styles3,
4353
+ testIdPrefix,
4354
+ theme,
4355
+ values: state,
4356
+ onChange: setField
4357
+ }
4358
+ ),
4359
+ /* @__PURE__ */ jsx(View, { style: styles3.fieldGroup, children: /* @__PURE__ */ jsx(
4360
+ Button,
4361
+ {
4362
+ fullWidth: true,
4363
+ accessibilityHint: labels.submitHint,
4364
+ accessibilityLabel: isSubmitting ? labels.submitting : labels.submit,
4365
+ label: labels.submit,
4366
+ loading: isSubmitting,
4367
+ testID: withTestIdPrefix(RegisterTestIds.submitButton, testIdPrefix),
4368
+ onPress: handlePress
4369
+ }
4370
+ ) }),
4371
+ footer
4372
+ ] }) });
4373
+ }
4033
4374
  async function lazyFetchHttpClient(request) {
4034
4375
  const fetchImpl = typeof fetch === "function" ? fetch.bind(globalThis) : void 0;
4035
4376
  if (fetchImpl === void 0) {
@@ -4166,6 +4507,6 @@ function createBffChangePasswordClient(options = {}) {
4166
4507
  };
4167
4508
  }
4168
4509
 
4169
- export { AccountSettingsScreen, AuthScreen, AuthTestIds, AuthThemeProvider, BffAuthStatus, CHANGE_PASSWORD_ENDPOINT, ChangePasswordCard, ChangePasswordErrorKey, 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_RESET_PASSWORD_LABELS, DEVICE_PIN_ALLOWED_DIGITS, DEVICE_PIN_DEFAULT_DIGITS, DemoCredentialsHint, DemoCredentialsHintVariant, DevicePinEnrollErrorKey, DevicePinEnrollForm, DevicePinErrorKey, DevicePinInput, DevicePinLengthPicker, DevicePinOffer, DevicePinSettingsCard, DevicePinUnlockScreen, ForgotPasswordFields, ForgotPasswordForm, LoginForm, OtpForm, OtpLoginStep, PASSWORD_MAX_LENGTH, PASSWORD_MIN_LENGTH, PasskeyCeremonyMode, PasskeyCeremonyStatus, PasskeyLoginButton, PasskeySettingsCard, PasswordPolicyError, PinForm, PreferredMethodHint, PreferredMethodSettingsCard, PrefillIntent, ResetPasswordError, ResetPasswordForm, cachePreferredMethod, clearCachedPreferredMethod, collectUserRoles, createBffAuthClient, createBffChangePasswordClient, createPreferencesClient, defaultAuthTheme, isAllowedPinDigits, isPasswordValid, isValidForgotPasswordEmail, performBffLogout, readCachedPreferredMethod, readPasskeyError, readPasskeyRegistered, resolveAccessibleRoutes, resolveAccountList, resolveDemoAccounts, resolveDemoCredentials, resolvePostLoginRoute, startPasskeyLogin, startPasskeyRegistration, syncPreferredMethodFromServer, useAuthTheme, useBffAuth, useBffForgotPassword, useBffLoginConfig, useBffResetPassword, useChangePassword, useDemoCredentials, useDevicePinDisable, useDevicePinEnroll, useDevicePinUnlock, useForgotPasswordSubmit, useOtpLogin, usePasskeyCeremony, usePinLogin, usePreferredMethodSetting, useResetPasswordForm, validatePasswordPolicy, withTestIdPrefix };
4510
+ export { AccountSettingsScreen, AuthScreen, AuthTestIds, AuthThemeProvider, BffAuthStatus, CHANGE_PASSWORD_ENDPOINT, ChangePasswordCard, ChangePasswordErrorKey, 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, DEVICE_PIN_ALLOWED_DIGITS, DEVICE_PIN_DEFAULT_DIGITS, DemoCredentialsHint, DemoCredentialsHintVariant, DevicePinEnrollErrorKey, DevicePinEnrollForm, DevicePinErrorKey, DevicePinInput, DevicePinLengthPicker, DevicePinOffer, DevicePinSettingsCard, DevicePinUnlockScreen, ForgotPasswordFields, ForgotPasswordForm, LoginForm, OtpForm, OtpLoginStep, PASSWORD_MAX_LENGTH, PASSWORD_MIN_LENGTH, PasskeyCeremonyMode, PasskeyCeremonyStatus, PasskeyLoginButton, PasskeySettingsCard, PasswordPolicyError, PinForm, PreferredMethodHint, PreferredMethodSettingsCard, PrefillIntent, RegisterErrorCode, RegisterForm, RegisterTestIds, ResetPasswordError, ResetPasswordForm, cachePreferredMethod, clearCachedPreferredMethod, collectUserRoles, createBffAuthClient, createBffChangePasswordClient, createPreferencesClient, defaultAuthTheme, isAllowedPinDigits, isPasswordValid, isRegisterPasswordStrong, isValidForgotPasswordEmail, performBffLogout, readCachedPreferredMethod, readPasskeyError, readPasskeyRegistered, resolveAccessibleRoutes, resolveAccountList, resolveDemoAccounts, resolveDemoCredentials, resolvePostLoginRoute, startPasskeyLogin, startPasskeyRegistration, syncPreferredMethodFromServer, useAuthTheme, useBffAuth, useBffForgotPassword, useBffLoginConfig, useBffResetPassword, useChangePassword, useDemoCredentials, useDevicePinDisable, useDevicePinEnroll, useDevicePinUnlock, useForgotPasswordSubmit, useOtpLogin, usePasskeyCeremony, usePinLogin, usePreferredMethodSetting, useRegisterForm, useResetPasswordForm, validatePasswordPolicy, withTestIdPrefix };
4170
4511
  //# sourceMappingURL=index.mjs.map
4171
4512
  //# sourceMappingURL=index.mjs.map