@dloizides/auth-web 1.18.3 → 1.20.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 +16 -0
- package/dist/index.d.mts +50 -4
- package/dist/index.d.ts +50 -4
- package/dist/index.js +95 -8
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +94 -9
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -341,6 +341,7 @@ var DEFAULT_REGISTER_LABELS = {
|
|
|
341
341
|
submit: "Create account",
|
|
342
342
|
submitHint: "Creates your account",
|
|
343
343
|
submitting: "Creating account...",
|
|
344
|
+
fullName: field("Your name", "Enter your full name"),
|
|
344
345
|
fields: {
|
|
345
346
|
firstName: field("First name", "Enter your first name"),
|
|
346
347
|
lastName: field("Last name", "Enter your last name"),
|
|
@@ -4100,6 +4101,18 @@ var FIELDS = [
|
|
|
4100
4101
|
{ key: "confirmPassword", testId: RegisterTestIds.confirmPasswordInput, secure: true },
|
|
4101
4102
|
{ key: "tenantName", testId: RegisterTestIds.tenantNameInput }
|
|
4102
4103
|
];
|
|
4104
|
+
var COMPACT_FIELDS = [
|
|
4105
|
+
{ key: "firstName", testId: RegisterTestIds.firstNameInput, autoComplete: "name" },
|
|
4106
|
+
{ key: "email", testId: RegisterTestIds.emailInput, autoComplete: "email", keyboardType: "email-address" },
|
|
4107
|
+
{ key: "password", testId: RegisterTestIds.passwordInput, secure: true },
|
|
4108
|
+
{ key: "tenantName", testId: RegisterTestIds.tenantNameInput }
|
|
4109
|
+
];
|
|
4110
|
+
function copyFor(key, labels, compact) {
|
|
4111
|
+
if (compact && key === "firstName" && labels.fullName !== void 0) {
|
|
4112
|
+
return labels.fullName;
|
|
4113
|
+
}
|
|
4114
|
+
return labels.fields[key];
|
|
4115
|
+
}
|
|
4103
4116
|
var OFF_SCREEN = -9999;
|
|
4104
4117
|
var HONEYPOT_SIZE = 1;
|
|
4105
4118
|
var HONEYPOT_PLACEHOLDER = "Website";
|
|
@@ -4121,11 +4134,12 @@ function RegisterFormFields({
|
|
|
4121
4134
|
styles: styles3,
|
|
4122
4135
|
onChange,
|
|
4123
4136
|
onSubmitEditing,
|
|
4124
|
-
testIdPrefix
|
|
4137
|
+
testIdPrefix,
|
|
4138
|
+
compact = false
|
|
4125
4139
|
}) {
|
|
4126
4140
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
4127
|
-
FIELDS.map((config) => {
|
|
4128
|
-
const copy =
|
|
4141
|
+
(compact ? COMPACT_FIELDS : FIELDS).map((config) => {
|
|
4142
|
+
const copy = copyFor(config.key, labels, compact);
|
|
4129
4143
|
return /* @__PURE__ */ jsxs(View, { style: styles3.fieldGroup, children: [
|
|
4130
4144
|
/* @__PURE__ */ jsx(Text, { style: styles3.label, children: copy.label }),
|
|
4131
4145
|
/* @__PURE__ */ jsx(
|
|
@@ -4178,6 +4192,9 @@ var RegisterErrorCode = /* @__PURE__ */ ((RegisterErrorCode2) => {
|
|
|
4178
4192
|
RegisterErrorCode2["UsernameTaken"] = "usernameTaken";
|
|
4179
4193
|
RegisterErrorCode2["EmailTaken"] = "emailTaken";
|
|
4180
4194
|
RegisterErrorCode2["RealmInvalid"] = "realmInvalid";
|
|
4195
|
+
RegisterErrorCode2["TenantNameTaken"] = "tenantNameTaken";
|
|
4196
|
+
RegisterErrorCode2["RateLimited"] = "rateLimited";
|
|
4197
|
+
RegisterErrorCode2["AutoLoginFailed"] = "autoLoginFailed";
|
|
4181
4198
|
RegisterErrorCode2["ValidationFailed"] = "validationFailed";
|
|
4182
4199
|
RegisterErrorCode2["Failed"] = "failed";
|
|
4183
4200
|
RegisterErrorCode2["InFlight"] = "inFlight";
|
|
@@ -4269,6 +4286,41 @@ function validateRegisterValues(values, passwordPolicy) {
|
|
|
4269
4286
|
}
|
|
4270
4287
|
return null;
|
|
4271
4288
|
}
|
|
4289
|
+
var HTTP_TOO_MANY_REQUESTS = 429;
|
|
4290
|
+
var HTTP_SERVER_ERROR_MIN = 500;
|
|
4291
|
+
var BODY_ERROR_CODES = {
|
|
4292
|
+
USER_EXISTS: "emailTaken" /* EmailTaken */,
|
|
4293
|
+
USERNAME_TAKEN: "usernameTaken" /* UsernameTaken */,
|
|
4294
|
+
EMAIL_TAKEN: "emailTaken" /* EmailTaken */,
|
|
4295
|
+
TENANT_NAME_TAKEN: "tenantNameTaken" /* TenantNameTaken */,
|
|
4296
|
+
AUTO_LOGIN_FAILED: "autoLoginFailed" /* AutoLoginFailed */,
|
|
4297
|
+
INVALID_REQUEST: "validationFailed" /* ValidationFailed */,
|
|
4298
|
+
REALM_REQUIRED: "realmInvalid" /* RealmInvalid */,
|
|
4299
|
+
REALM_INVALID: "realmInvalid" /* RealmInvalid */
|
|
4300
|
+
};
|
|
4301
|
+
function typedFailureOf(error) {
|
|
4302
|
+
if (typeof error !== "object" || error === null) {
|
|
4303
|
+
return null;
|
|
4304
|
+
}
|
|
4305
|
+
const { status, errorCode } = error;
|
|
4306
|
+
const hasStatus = typeof status === "number";
|
|
4307
|
+
const hasCode = typeof errorCode === "string";
|
|
4308
|
+
if (!hasStatus && !hasCode) {
|
|
4309
|
+
return null;
|
|
4310
|
+
}
|
|
4311
|
+
return { status: hasStatus ? status : null, errorCode: hasCode ? errorCode : null };
|
|
4312
|
+
}
|
|
4313
|
+
function mapTypedFailure(failure) {
|
|
4314
|
+
const byCode = failure.errorCode === null ? void 0 : BODY_ERROR_CODES[failure.errorCode];
|
|
4315
|
+
if (byCode !== void 0) {
|
|
4316
|
+
return byCode;
|
|
4317
|
+
}
|
|
4318
|
+
if (failure.status === HTTP_TOO_MANY_REQUESTS) {
|
|
4319
|
+
return "rateLimited" /* RateLimited */;
|
|
4320
|
+
}
|
|
4321
|
+
const isServerError = failure.status !== null && failure.status >= HTTP_SERVER_ERROR_MIN;
|
|
4322
|
+
return isServerError ? "failed" /* Failed */ : null;
|
|
4323
|
+
}
|
|
4272
4324
|
function messageOf(error) {
|
|
4273
4325
|
if (error instanceof Error) {
|
|
4274
4326
|
return error.message;
|
|
@@ -4276,6 +4328,11 @@ function messageOf(error) {
|
|
|
4276
4328
|
return typeof error === "string" ? error : "";
|
|
4277
4329
|
}
|
|
4278
4330
|
function mapRegisterErrorCode(error) {
|
|
4331
|
+
const failure = typedFailureOf(error);
|
|
4332
|
+
const typed = failure === null ? null : mapTypedFailure(failure);
|
|
4333
|
+
if (typed !== null) {
|
|
4334
|
+
return typed;
|
|
4335
|
+
}
|
|
4279
4336
|
const message = messageOf(error);
|
|
4280
4337
|
if (message === "") {
|
|
4281
4338
|
return "failed" /* Failed */;
|
|
@@ -4284,6 +4341,29 @@ function mapRegisterErrorCode(error) {
|
|
|
4284
4341
|
return match === void 0 ? "validationFailed" /* ValidationFailed */ : match[1];
|
|
4285
4342
|
}
|
|
4286
4343
|
|
|
4344
|
+
// src/hooks/registerCompact.ts
|
|
4345
|
+
var WHITESPACE_RUN = /\s+/;
|
|
4346
|
+
var UNSAFE_USERNAME_CHARS = /[^a-z0-9._-]/g;
|
|
4347
|
+
var USERNAME_REPLACEMENT = "_";
|
|
4348
|
+
function splitFullName(fullName) {
|
|
4349
|
+
const words = fullName.trim().split(WHITESPACE_RUN).filter((word) => word !== "");
|
|
4350
|
+
const [first = "", ...rest] = words;
|
|
4351
|
+
return { firstName: first, lastName: rest.length > 0 ? rest.join(" ") : first };
|
|
4352
|
+
}
|
|
4353
|
+
function deriveUsernameFromEmail(email) {
|
|
4354
|
+
return email.trim().toLowerCase().replace(UNSAFE_USERNAME_CHARS, USERNAME_REPLACEMENT);
|
|
4355
|
+
}
|
|
4356
|
+
function expandCompactRegisterValues(values) {
|
|
4357
|
+
const { firstName, lastName } = splitFullName(values.firstName);
|
|
4358
|
+
return {
|
|
4359
|
+
...values,
|
|
4360
|
+
firstName,
|
|
4361
|
+
lastName,
|
|
4362
|
+
username: deriveUsernameFromEmail(values.email),
|
|
4363
|
+
confirmPassword: values.password
|
|
4364
|
+
};
|
|
4365
|
+
}
|
|
4366
|
+
|
|
4287
4367
|
// src/hooks/useRegisterForm.ts
|
|
4288
4368
|
var EMPTY_VALUES = {
|
|
4289
4369
|
firstName: "",
|
|
@@ -4309,7 +4389,8 @@ function toSubmitValues(values) {
|
|
|
4309
4389
|
function useRegisterForm({
|
|
4310
4390
|
onSubmit,
|
|
4311
4391
|
passwordPolicy = isRegisterPasswordStrong,
|
|
4312
|
-
onSubmitAttempt
|
|
4392
|
+
onSubmitAttempt,
|
|
4393
|
+
compact = false
|
|
4313
4394
|
}) {
|
|
4314
4395
|
const [state, setState] = useState(EMPTY_VALUES);
|
|
4315
4396
|
const [isSubmitting, setIsSubmitting] = useState(false);
|
|
@@ -4323,7 +4404,8 @@ function useRegisterForm({
|
|
|
4323
4404
|
return { ok: false, error: "inFlight" /* InFlight */ };
|
|
4324
4405
|
}
|
|
4325
4406
|
onSubmitAttempt?.();
|
|
4326
|
-
const
|
|
4407
|
+
const trimmedRaw = trimRegisterValues(state);
|
|
4408
|
+
const trimmed = compact ? expandCompactRegisterValues(trimmedRaw) : trimmedRaw;
|
|
4327
4409
|
const refusal = trimmed.website === "" ? validateRegisterValues(trimmed, passwordPolicy) : "failed" /* Failed */;
|
|
4328
4410
|
if (refusal !== null) {
|
|
4329
4411
|
setError(refusal);
|
|
@@ -4343,7 +4425,7 @@ function useRegisterForm({
|
|
|
4343
4425
|
inFlight.current = false;
|
|
4344
4426
|
setIsSubmitting(false);
|
|
4345
4427
|
}
|
|
4346
|
-
}, [onSubmit, onSubmitAttempt, passwordPolicy, state]);
|
|
4428
|
+
}, [compact, onSubmit, onSubmitAttempt, passwordPolicy, state]);
|
|
4347
4429
|
return { state, setField, submit, isSubmitting, error };
|
|
4348
4430
|
}
|
|
4349
4431
|
function RegisterForm({
|
|
@@ -4355,7 +4437,8 @@ function RegisterForm({
|
|
|
4355
4437
|
labels: labelsProp,
|
|
4356
4438
|
theme: themeProp,
|
|
4357
4439
|
footer,
|
|
4358
|
-
testIdPrefix
|
|
4440
|
+
testIdPrefix,
|
|
4441
|
+
compact = false
|
|
4359
4442
|
}) {
|
|
4360
4443
|
const theme = useAuthTheme(themeProp);
|
|
4361
4444
|
const styles3 = useAuthStyles(theme);
|
|
@@ -4366,7 +4449,8 @@ function RegisterForm({
|
|
|
4366
4449
|
const { state, setField, submit, isSubmitting } = useRegisterForm({
|
|
4367
4450
|
onSubmit,
|
|
4368
4451
|
onSubmitAttempt,
|
|
4369
|
-
passwordPolicy
|
|
4452
|
+
passwordPolicy,
|
|
4453
|
+
compact
|
|
4370
4454
|
});
|
|
4371
4455
|
const handlePress = useCallback(async () => {
|
|
4372
4456
|
routeRegisterOutcome(await submit(), { onSuccess, onError });
|
|
@@ -4378,6 +4462,7 @@ function RegisterForm({
|
|
|
4378
4462
|
/* @__PURE__ */ jsx(
|
|
4379
4463
|
RegisterFormFields,
|
|
4380
4464
|
{
|
|
4465
|
+
compact,
|
|
4381
4466
|
disabled: isSubmitting,
|
|
4382
4467
|
labels,
|
|
4383
4468
|
styles: styles3,
|
|
@@ -4539,6 +4624,6 @@ function createBffChangePasswordClient(options = {}) {
|
|
|
4539
4624
|
};
|
|
4540
4625
|
}
|
|
4541
4626
|
|
|
4542
|
-
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 };
|
|
4627
|
+
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, deriveUsernameFromEmail, isAllowedPinDigits, isPasswordValid, isRegisterPasswordStrong, isValidForgotPasswordEmail, performBffLogout, readCachedPreferredMethod, readPasskeyError, readPasskeyRegistered, 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, useResetPasswordForm, validatePasswordPolicy, withTestIdPrefix };
|
|
4543
4628
|
//# sourceMappingURL=index.mjs.map
|
|
4544
4629
|
//# sourceMappingURL=index.mjs.map
|