@strapi/admin 5.34.0 → 5.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/dist/admin/admin/src/components/Layouts/HeaderLayout.js +4 -1
  2. package/dist/admin/admin/src/components/Layouts/HeaderLayout.js.map +1 -1
  3. package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs +5 -2
  4. package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs.map +1 -1
  5. package/dist/admin/admin/src/components/NpsSurvey.js +2 -0
  6. package/dist/admin/admin/src/components/NpsSurvey.js.map +1 -1
  7. package/dist/admin/admin/src/components/NpsSurvey.mjs +2 -0
  8. package/dist/admin/admin/src/components/NpsSurvey.mjs.map +1 -1
  9. package/dist/admin/admin/src/components/SubNav.js +2 -2
  10. package/dist/admin/admin/src/components/SubNav.js.map +1 -1
  11. package/dist/admin/admin/src/components/SubNav.mjs +3 -3
  12. package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
  13. package/dist/admin/admin/src/constants/theme.js +2 -0
  14. package/dist/admin/admin/src/constants/theme.js.map +1 -1
  15. package/dist/admin/admin/src/constants/theme.mjs +2 -1
  16. package/dist/admin/admin/src/constants/theme.mjs.map +1 -1
  17. package/dist/admin/admin/src/layouts/AuthenticatedLayout.js.map +1 -1
  18. package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs.map +1 -1
  19. package/dist/admin/admin/src/pages/Auth/components/Register.js +51 -11
  20. package/dist/admin/admin/src/pages/Auth/components/Register.js.map +1 -1
  21. package/dist/admin/admin/src/pages/Auth/components/Register.mjs +51 -11
  22. package/dist/admin/admin/src/pages/Auth/components/Register.mjs.map +1 -1
  23. package/dist/admin/admin/src/pages/Auth/components/ResetPassword.js +12 -3
  24. package/dist/admin/admin/src/pages/Auth/components/ResetPassword.js.map +1 -1
  25. package/dist/admin/admin/src/pages/Auth/components/ResetPassword.mjs +12 -3
  26. package/dist/admin/admin/src/pages/Auth/components/ResetPassword.mjs.map +1 -1
  27. package/dist/admin/admin/src/pages/Settings/pages/Users/utils/validation.js +12 -3
  28. package/dist/admin/admin/src/pages/Settings/pages/Users/utils/validation.js.map +1 -1
  29. package/dist/admin/admin/src/pages/Settings/pages/Users/utils/validation.mjs +12 -3
  30. package/dist/admin/admin/src/pages/Settings/pages/Users/utils/validation.mjs.map +1 -1
  31. package/dist/admin/admin/src/translations/ko.json.js +430 -96
  32. package/dist/admin/admin/src/translations/ko.json.js.map +1 -1
  33. package/dist/admin/admin/src/translations/ko.json.mjs +427 -97
  34. package/dist/admin/admin/src/translations/ko.json.mjs.map +1 -1
  35. package/dist/admin/index.js +3 -0
  36. package/dist/admin/index.js.map +1 -1
  37. package/dist/admin/index.mjs +1 -1
  38. package/dist/admin/src/constants/theme.d.ts +2 -1
  39. package/dist/admin/src/index.d.ts +1 -1
  40. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"Register.js","sources":["../../../../../../../admin/src/pages/Auth/components/Register.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Grid, Typography, Link } from '@strapi/design-system';\nimport omit from 'lodash/omit';\nimport { type MessageDescriptor, type PrimitiveType, useIntl } from 'react-intl';\nimport { NavLink, Navigate, useNavigate, useMatch, useLocation } from 'react-router-dom';\nimport { styled } from 'styled-components';\nimport * as yup from 'yup';\nimport { ValidationError } from 'yup';\n\nimport {\n Register as RegisterUser,\n RegisterAdmin,\n} from '../../../../../shared/contracts/authentication';\nimport { Form, FormHelpers } from '../../../components/Form';\nimport { InputRenderer } from '../../../components/FormInputs/Renderer';\nimport { useNpsSurveySettings } from '../../../components/NpsSurvey';\nimport { Logo } from '../../../components/UnauthenticatedLogo';\nimport { useTypedDispatch } from '../../../core/store/hooks';\nimport { useNotification } from '../../../features/Notifications';\nimport { useTracking } from '../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../hooks/useAPIErrorHandler';\nimport { LayoutContent, UnauthenticatedLayout } from '../../../layouts/UnauthenticatedLayout';\nimport { login } from '../../../reducer';\nimport {\n useGetRegistrationInfoQuery,\n useRegisterAdminMutation,\n useRegisterUserMutation,\n} from '../../../services/auth';\nimport { isBaseQueryError } from '../../../utils/baseQuery';\nimport { getOrCreateDeviceId } from '../../../utils/deviceId';\nimport { getByteSize } from '../../../utils/strings';\nimport { translatedErrors } from '../../../utils/translatedErrors';\n\nconst REGISTER_USER_SCHEMA = yup.object().shape({\n firstname: yup.string().trim().required(translatedErrors.required).nullable(),\n lastname: yup.string().nullable(),\n password: yup\n .string()\n .min(8, {\n id: translatedErrors.minLength.id,\n defaultMessage: 'Password must be at least 8 characters',\n values: { min: 8 },\n })\n .test(\n 'max-bytes',\n {\n id: 'components.Input.error.contain.maxBytes',\n defaultMessage: 'Password must be less than 73 bytes',\n },\n function (value) {\n if (!value || typeof value !== 'string') return true; // validated elsewhere\n\n const byteSize = getByteSize(value);\n return byteSize <= 72;\n }\n )\n .matches(/[a-z]/, {\n message: {\n id: 'components.Input.error.contain.lowercase',\n defaultMessage: 'Password must contain at least 1 lowercase letter',\n },\n })\n .matches(/[A-Z]/, {\n message: {\n id: 'components.Input.error.contain.uppercase',\n defaultMessage: 'Password must contain at least 1 uppercase letter',\n },\n })\n .matches(/\\d/, {\n message: {\n id: 'components.Input.error.contain.number',\n defaultMessage: 'Password must contain at least 1 number',\n },\n })\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Password is required',\n })\n .nullable(),\n confirmPassword: yup\n .string()\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Confirm password is required',\n })\n .oneOf([yup.ref('password'), null], {\n id: 'components.Input.error.password.noMatch',\n defaultMessage: 'Passwords must match',\n })\n .nullable(),\n registrationToken: yup.string().required({\n id: translatedErrors.required.id,\n defaultMessage: 'Registration token is required',\n }),\n});\n\nconst REGISTER_ADMIN_SCHEMA = yup.object().shape({\n firstname: yup\n .string()\n .trim()\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Firstname is required',\n })\n .nullable(),\n lastname: yup.string().nullable(),\n password: yup\n .string()\n .min(8, {\n id: translatedErrors.minLength.id,\n defaultMessage: 'Password must be at least 8 characters',\n values: { min: 8 },\n })\n .test(\n 'max-bytes',\n {\n id: 'components.Input.error.contain.maxBytes',\n defaultMessage: 'Password must be less than 73 bytes',\n },\n function (value) {\n if (!value) return true;\n return new TextEncoder().encode(value).length <= 72;\n }\n )\n .matches(/[a-z]/, {\n message: {\n id: 'components.Input.error.contain.lowercase',\n defaultMessage: 'Password must contain at least 1 lowercase letter',\n },\n })\n .matches(/[A-Z]/, {\n message: {\n id: 'components.Input.error.contain.uppercase',\n defaultMessage: 'Password must contain at least 1 uppercase letter',\n },\n })\n .matches(/\\d/, {\n message: {\n id: 'components.Input.error.contain.number',\n defaultMessage: 'Password must contain at least 1 number',\n },\n })\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Password is required',\n })\n .nullable(),\n confirmPassword: yup\n .string()\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Confirm password is required',\n })\n .nullable()\n .oneOf([yup.ref('password'), null], {\n id: 'components.Input.error.password.noMatch',\n defaultMessage: 'Passwords must match',\n }),\n email: yup\n .string()\n .email({\n id: translatedErrors.email.id,\n defaultMessage: 'Not a valid email',\n })\n .strict()\n .lowercase({\n id: translatedErrors.lowercase.id,\n defaultMessage: 'Email must be lowercase',\n })\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Email is required',\n })\n .nullable(),\n});\n\ninterface RegisterProps {\n hasAdmin?: boolean;\n}\n\ninterface RegisterFormValues {\n firstname: string;\n lastname: string;\n email: string;\n password: string;\n confirmPassword: string;\n registrationToken: string | undefined;\n news: boolean;\n}\n\ninterface IntlFormattedMessage extends MessageDescriptor {\n values?: Record<string, PrimitiveType>;\n}\n\nconst Register = ({ hasAdmin }: RegisterProps) => {\n const { toggleNotification } = useNotification();\n const navigate = useNavigate();\n const [submitCount, setSubmitCount] = React.useState(0);\n const [apiError, setApiError] = React.useState<string>();\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const { search: searchString } = useLocation();\n const query = React.useMemo(() => new URLSearchParams(searchString), [searchString]);\n const match = useMatch('/auth/:authType');\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n const { setNpsSurveySettings } = useNpsSurveySettings();\n\n const registrationToken = query.get('registrationToken');\n\n const { data: userInfo, error } = useGetRegistrationInfoQuery(registrationToken as string, {\n skip: !registrationToken,\n });\n\n React.useEffect(() => {\n if (error) {\n const message: string = isBaseQueryError(error)\n ? formatAPIError(error)\n : (error.message ?? '');\n\n toggleNotification({\n type: 'danger',\n message,\n });\n\n navigate(`/auth/oops?info=${encodeURIComponent(message)}`);\n }\n }, [error, formatAPIError, navigate, toggleNotification]);\n\n const [registerAdmin] = useRegisterAdminMutation();\n const [registerUser] = useRegisterUserMutation();\n const dispatch = useTypedDispatch();\n\n const handleRegisterAdmin = async (\n { news, ...body }: RegisterAdmin.Request['body'] & { news: boolean },\n setFormErrors: FormHelpers<RegisterFormValues>['setErrors']\n ) => {\n const res = await registerAdmin({ ...body, deviceId: getOrCreateDeviceId() });\n\n if ('data' in res) {\n dispatch(login({ token: res.data.token }));\n\n if (news) {\n // Only enable EE survey if user accepted the newsletter\n setNpsSurveySettings((s) => ({ ...s, enabled: true }));\n\n navigate({\n pathname: '/usecase',\n search: `?hasAdmin=${true}`,\n });\n } else {\n navigate('/');\n }\n } else {\n if (isBaseQueryError(res.error)) {\n trackUsage('didNotCreateFirstAdmin');\n\n if (res.error.name === 'ValidationError') {\n setFormErrors(formatValidationErrors(res.error));\n return;\n }\n\n setApiError(formatAPIError(res.error));\n }\n }\n };\n\n const handleRegisterUser = async (\n { news, ...body }: RegisterUser.Request['body'] & { news: boolean },\n setFormErrors: FormHelpers<RegisterFormValues>['setErrors']\n ) => {\n const res = await registerUser({ ...body, deviceId: getOrCreateDeviceId() });\n\n if ('data' in res) {\n dispatch(login({ token: res.data.token }));\n\n if (news) {\n // Only enable EE survey if user accepted the newsletter\n setNpsSurveySettings((s) => ({ ...s, enabled: true }));\n\n navigate({\n pathname: '/usecase',\n search: `?hasAdmin=${hasAdmin}`,\n });\n } else {\n navigate('/');\n }\n } else {\n if (isBaseQueryError(res.error)) {\n trackUsage('didNotCreateFirstAdmin');\n\n if (res.error.name === 'ValidationError') {\n setFormErrors(formatValidationErrors(res.error));\n return;\n }\n\n setApiError(formatAPIError(res.error));\n }\n }\n };\n\n if (\n !match ||\n (match.params.authType !== 'register' && match.params.authType !== 'register-admin')\n ) {\n return <Navigate to=\"/\" />;\n }\n\n const isAdminRegistration = match.params.authType === 'register-admin';\n\n const schema = isAdminRegistration ? REGISTER_ADMIN_SCHEMA : REGISTER_USER_SCHEMA;\n\n return (\n <UnauthenticatedLayout>\n <LayoutContent>\n <Flex direction=\"column\" alignItems=\"center\" gap={3}>\n <Logo />\n\n <Typography tag=\"h1\" variant=\"alpha\" textAlign=\"center\">\n {formatMessage({\n id: 'Auth.form.welcome.title',\n defaultMessage: 'Welcome to Strapi!',\n })}\n </Typography>\n <Typography variant=\"epsilon\" textColor=\"neutral600\" textAlign=\"center\">\n {formatMessage({\n id: 'Auth.form.register.subtitle',\n defaultMessage:\n 'Credentials are only used to authenticate in Strapi. All saved data will be stored in your database.',\n })}\n </Typography>\n {apiError ? (\n <Typography id=\"global-form-error\" role=\"alert\" tabIndex={-1} textColor=\"danger600\">\n {apiError}\n </Typography>\n ) : null}\n </Flex>\n <Form\n method=\"POST\"\n initialValues={\n {\n firstname: userInfo?.firstname || '',\n lastname: userInfo?.lastname || '',\n email: userInfo?.email || '',\n password: '',\n confirmPassword: '',\n registrationToken: registrationToken || undefined,\n news: false,\n } satisfies RegisterFormValues\n }\n onSubmit={async (data, helpers) => {\n const normalizedData = normalizeData(data);\n\n try {\n await schema.validate(normalizedData, { abortEarly: false });\n\n if (submitCount > 0 && isAdminRegistration) {\n trackUsage('didSubmitWithErrorsFirstAdmin', { count: submitCount.toString() });\n }\n\n if (normalizedData.registrationToken) {\n handleRegisterUser(\n {\n userInfo: omit(normalizedData, [\n 'registrationToken',\n 'confirmPassword',\n 'email',\n 'news',\n ]),\n registrationToken: normalizedData.registrationToken,\n news: normalizedData.news,\n },\n helpers.setErrors\n );\n } else {\n await handleRegisterAdmin(\n omit(normalizedData, ['registrationToken', 'confirmPassword']),\n helpers.setErrors\n );\n }\n } catch (err) {\n if (err instanceof ValidationError) {\n helpers.setErrors(\n err.inner.reduce<Record<string, string>>((acc, { message, path }) => {\n if (path && typeof message === 'object') {\n const typedMessage = message as IntlFormattedMessage;\n acc[path] = formatMessage(message, typedMessage.values);\n }\n return acc;\n }, {})\n );\n }\n setSubmitCount(submitCount + 1);\n }\n }}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6} marginTop={7}>\n <Grid.Root gap={4}>\n {[\n {\n label: formatMessage({\n id: 'Auth.form.firstname.label',\n defaultMessage: 'Firstname',\n }),\n name: 'firstname',\n required: true,\n size: 6,\n type: 'string' as const,\n },\n {\n label: formatMessage({\n id: 'Auth.form.lastname.label',\n defaultMessage: 'Lastname',\n }),\n name: 'lastname',\n size: 6,\n type: 'string' as const,\n },\n {\n disabled: !isAdminRegistration,\n label: formatMessage({\n id: 'Auth.form.email.label',\n defaultMessage: 'Email',\n }),\n name: 'email',\n required: true,\n size: 12,\n type: 'email' as const,\n },\n {\n hint: formatMessage({\n id: 'Auth.form.password.hint',\n defaultMessage:\n 'Must be at least 8 characters, 1 uppercase, 1 lowercase & 1 number',\n }),\n label: formatMessage({\n id: 'global.password',\n defaultMessage: 'Password',\n }),\n name: 'password',\n required: true,\n size: 12,\n type: 'password' as const,\n },\n {\n label: formatMessage({\n id: 'Auth.form.confirmPassword.label',\n defaultMessage: 'Confirm Password',\n }),\n name: 'confirmPassword',\n required: true,\n size: 12,\n type: 'password' as const,\n },\n {\n label: formatMessage(\n {\n id: 'Auth.form.register.news.label',\n defaultMessage:\n 'Keep me updated about new features & upcoming improvements (by doing this you accept the {terms} and the {policy}).',\n },\n {\n terms: (\n <A target=\"_blank\" href=\"https://strapi.io/terms\" rel=\"noreferrer\">\n {formatMessage({\n id: 'Auth.privacy-policy-agreement.terms',\n defaultMessage: 'terms',\n })}\n </A>\n ),\n policy: (\n <A target=\"_blank\" href=\"https://strapi.io/privacy\" rel=\"noreferrer\">\n {formatMessage({\n id: 'Auth.privacy-policy-agreement.policy',\n defaultMessage: 'policy',\n })}\n </A>\n ),\n }\n ),\n name: 'news',\n size: 12,\n type: 'checkbox' as const,\n },\n ].map(({ size, ...field }) => (\n <Grid.Item\n key={field.name}\n xs={12}\n m={size}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <InputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n <Button fullWidth size=\"L\" type=\"submit\">\n {formatMessage({\n id: 'Auth.form.button.register',\n defaultMessage: \"Let's start\",\n })}\n </Button>\n </Flex>\n </Form>\n {match?.params.authType === 'register' && (\n <Box paddingTop={4}>\n <Flex justifyContent=\"center\">\n <Link tag={NavLink} to=\"/auth/login\">\n {formatMessage({\n id: 'Auth.link.signin.account',\n defaultMessage: 'Already have an account?',\n })}\n </Link>\n </Flex>\n </Box>\n )}\n </LayoutContent>\n </UnauthenticatedLayout>\n );\n};\n\ninterface RegisterFormValues {\n firstname: string;\n lastname: string;\n email: string;\n password: string;\n confirmPassword: string;\n registrationToken: string | undefined;\n news: boolean;\n}\n\ntype StringKeys<T> = {\n [K in keyof T]: T[K] extends string | undefined ? K : never;\n}[keyof T];\n\n/**\n * @description Trims all values but the password & sets lastName to null if it's a falsey value.\n */\nfunction normalizeData(data: RegisterFormValues) {\n return Object.entries(data).reduce(\n (acc, [key, value]) => {\n type PasswordKeys = Extract<keyof RegisterFormValues, 'password' | 'confirmPassword'>;\n type RegisterFormStringValues = Exclude<\n keyof Pick<RegisterFormValues, StringKeys<RegisterFormValues>>,\n PasswordKeys\n >;\n\n if (!['password', 'confirmPassword'].includes(key) && typeof value === 'string') {\n acc[key as RegisterFormStringValues] = value.trim();\n\n if (key === 'lastname') {\n acc[key] = value || undefined;\n }\n } else {\n acc[key as PasswordKeys] = value;\n }\n\n return acc;\n },\n {} as {\n firstname: string;\n lastname: string | undefined;\n email: string;\n password: string;\n confirmPassword: string;\n registrationToken: string | undefined;\n news: boolean;\n }\n );\n}\n\nconst A = styled.a`\n color: ${({ theme }) => theme.colors.primary600};\n`;\n\nexport { Register };\nexport type { RegisterProps };\n"],"names":["REGISTER_USER_SCHEMA","yup","object","shape","firstname","string","trim","required","translatedErrors","nullable","lastname","password","min","id","minLength","defaultMessage","values","test","value","byteSize","getByteSize","matches","message","confirmPassword","oneOf","ref","registrationToken","REGISTER_ADMIN_SCHEMA","TextEncoder","encode","length","email","strict","lowercase","Register","hasAdmin","toggleNotification","useNotification","navigate","useNavigate","submitCount","setSubmitCount","React","useState","apiError","setApiError","trackUsage","useTracking","formatMessage","useIntl","search","searchString","useLocation","query","useMemo","URLSearchParams","match","useMatch","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","setNpsSurveySettings","useNpsSurveySettings","get","data","userInfo","error","useGetRegistrationInfoQuery","skip","useEffect","isBaseQueryError","type","encodeURIComponent","registerAdmin","useRegisterAdminMutation","registerUser","useRegisterUserMutation","dispatch","useTypedDispatch","handleRegisterAdmin","news","body","setFormErrors","res","deviceId","getOrCreateDeviceId","login","token","s","enabled","pathname","name","handleRegisterUser","params","authType","_jsx","Navigate","to","isAdminRegistration","schema","UnauthenticatedLayout","_jsxs","LayoutContent","Flex","direction","alignItems","gap","Logo","Typography","tag","variant","textAlign","textColor","role","tabIndex","Form","method","initialValues","undefined","onSubmit","helpers","normalizedData","normalizeData","validate","abortEarly","count","toString","omit","setErrors","err","ValidationError","inner","reduce","acc","path","typedMessage","marginTop","Grid","Root","label","size","disabled","hint","terms","A","target","href","rel","policy","map","field","Item","xs","m","InputRenderer","Button","fullWidth","Box","paddingTop","justifyContent","Link","NavLink","Object","entries","key","includes","styled","a","theme","colors","primary600"],"mappings":"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"}
1
+ {"version":3,"file":"Register.js","sources":["../../../../../../../admin/src/pages/Auth/components/Register.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Grid, Typography, Link } from '@strapi/design-system';\nimport omit from 'lodash/omit';\nimport { type MessageDescriptor, type PrimitiveType, useIntl } from 'react-intl';\nimport { NavLink, Navigate, useNavigate, useMatch, useLocation } from 'react-router-dom';\nimport { styled } from 'styled-components';\nimport * as yup from 'yup';\nimport { ValidationError } from 'yup';\n\nimport {\n Register as RegisterUser,\n RegisterAdmin,\n} from '../../../../../shared/contracts/authentication';\nimport { Form, FormHelpers } from '../../../components/Form';\nimport { InputRenderer } from '../../../components/FormInputs/Renderer';\nimport { useNpsSurveySettings } from '../../../components/NpsSurvey';\nimport { Logo } from '../../../components/UnauthenticatedLogo';\nimport { useTypedDispatch } from '../../../core/store/hooks';\nimport { useNotification } from '../../../features/Notifications';\nimport { useTracking } from '../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../hooks/useAPIErrorHandler';\nimport { LayoutContent, UnauthenticatedLayout } from '../../../layouts/UnauthenticatedLayout';\nimport { login } from '../../../reducer';\nimport {\n useGetRegistrationInfoQuery,\n useRegisterAdminMutation,\n useRegisterUserMutation,\n} from '../../../services/auth';\nimport { isBaseQueryError } from '../../../utils/baseQuery';\nimport { getOrCreateDeviceId } from '../../../utils/deviceId';\nimport { getByteSize } from '../../../utils/strings';\nimport { translatedErrors } from '../../../utils/translatedErrors';\n\nconst REGISTER_USER_SCHEMA = yup.object().shape({\n firstname: yup.string().trim().required(translatedErrors.required).nullable(),\n lastname: yup.string().nullable(),\n password: yup\n .string()\n .min(8, {\n id: translatedErrors.minLength.id,\n defaultMessage: 'Password must be at least 8 characters',\n values: { min: 8 },\n })\n .test(\n 'max-bytes',\n {\n id: 'components.Input.error.contain.maxBytes',\n defaultMessage: 'Password must be less than 73 bytes',\n },\n function (value) {\n if (!value || typeof value !== 'string') return true; // validated elsewhere\n\n const byteSize = getByteSize(value);\n return byteSize <= 72;\n }\n )\n .test(\n 'lowercase',\n {\n message: {\n id: 'components.Input.error.contain.lowercase',\n defaultMessage: 'Password must contain at least 1 lowercase letter',\n },\n },\n (value) => {\n if (!value) return true;\n return /[a-z]/.test(value);\n }\n )\n .test(\n 'uppercase',\n {\n message: {\n id: 'components.Input.error.contain.uppercase',\n defaultMessage: 'Password must contain at least 1 uppercase letter',\n },\n },\n (value) => {\n if (!value) return true;\n return /[A-Z]/.test(value);\n }\n )\n .test(\n 'number',\n {\n message: {\n id: 'components.Input.error.contain.number',\n defaultMessage: 'Password must contain at least 1 number',\n },\n },\n (value) => {\n if (!value) return true;\n return /\\d/.test(value);\n }\n )\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Password is required',\n })\n .nullable(),\n confirmPassword: yup\n .string()\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Confirm password is required',\n })\n .oneOf([yup.ref('password'), null], {\n id: 'components.Input.error.password.noMatch',\n defaultMessage: 'Passwords must match',\n })\n .nullable(),\n registrationToken: yup.string().required({\n id: translatedErrors.required.id,\n defaultMessage: 'Registration token is required',\n }),\n});\n\nconst REGISTER_ADMIN_SCHEMA = yup.object().shape({\n firstname: yup\n .string()\n .trim()\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Firstname is required',\n })\n .nullable(),\n lastname: yup.string().nullable(),\n password: yup\n .string()\n .min(8, {\n id: translatedErrors.minLength.id,\n defaultMessage: 'Password must be at least 8 characters',\n values: { min: 8 },\n })\n .test(\n 'max-bytes',\n {\n id: 'components.Input.error.contain.maxBytes',\n defaultMessage: 'Password must be less than 73 bytes',\n },\n function (value) {\n if (!value) return true;\n return new TextEncoder().encode(value).length <= 72;\n }\n )\n .test(\n 'lowercase',\n {\n message: {\n id: 'components.Input.error.contain.lowercase',\n defaultMessage: 'Password must contain at least 1 lowercase letter',\n },\n },\n (value) => {\n if (!value) return true;\n return /[a-z]/.test(value);\n }\n )\n .test(\n 'uppercase',\n {\n message: {\n id: 'components.Input.error.contain.uppercase',\n defaultMessage: 'Password must contain at least 1 uppercase letter',\n },\n },\n (value) => {\n if (!value) return true;\n return /[A-Z]/.test(value);\n }\n )\n .test(\n 'number',\n {\n message: {\n id: 'components.Input.error.contain.number',\n defaultMessage: 'Password must contain at least 1 number',\n },\n },\n (value) => {\n if (!value) return true;\n return /\\d/.test(value);\n }\n )\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Password is required',\n })\n .nullable(),\n confirmPassword: yup\n .string()\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Confirm password is required',\n })\n .nullable()\n .oneOf([yup.ref('password'), null], {\n id: 'components.Input.error.password.noMatch',\n defaultMessage: 'Passwords must match',\n }),\n email: yup\n .string()\n .email({\n id: translatedErrors.email.id,\n defaultMessage: 'Not a valid email',\n })\n .strict()\n .lowercase({\n id: translatedErrors.lowercase.id,\n defaultMessage: 'Email must be lowercase',\n })\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Email is required',\n })\n .nullable(),\n});\n\ninterface RegisterProps {\n hasAdmin?: boolean;\n}\n\ninterface RegisterFormValues {\n firstname: string;\n lastname: string;\n email: string;\n password: string;\n confirmPassword: string;\n registrationToken: string | undefined;\n news: boolean;\n}\n\ninterface IntlFormattedMessage extends MessageDescriptor {\n values?: Record<string, PrimitiveType>;\n}\n\nconst Register = ({ hasAdmin }: RegisterProps) => {\n const { toggleNotification } = useNotification();\n const navigate = useNavigate();\n const [submitCount, setSubmitCount] = React.useState(0);\n const [apiError, setApiError] = React.useState<string>();\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const { search: searchString } = useLocation();\n const query = React.useMemo(() => new URLSearchParams(searchString), [searchString]);\n const match = useMatch('/auth/:authType');\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n const { setNpsSurveySettings } = useNpsSurveySettings();\n\n const registrationToken = query.get('registrationToken');\n\n const { data: userInfo, error } = useGetRegistrationInfoQuery(registrationToken as string, {\n skip: !registrationToken,\n });\n\n React.useEffect(() => {\n if (error) {\n const message: string = isBaseQueryError(error)\n ? formatAPIError(error)\n : (error.message ?? '');\n\n toggleNotification({\n type: 'danger',\n message,\n });\n\n navigate(`/auth/oops?info=${encodeURIComponent(message)}`);\n }\n }, [error, formatAPIError, navigate, toggleNotification]);\n\n const [registerAdmin] = useRegisterAdminMutation();\n const [registerUser] = useRegisterUserMutation();\n const dispatch = useTypedDispatch();\n\n const handleRegisterAdmin = async (\n { news, ...body }: RegisterAdmin.Request['body'] & { news: boolean },\n setFormErrors: FormHelpers<RegisterFormValues>['setErrors']\n ) => {\n const res = await registerAdmin({ ...body, deviceId: getOrCreateDeviceId() });\n\n if ('data' in res) {\n dispatch(login({ token: res.data.token }));\n\n if (news) {\n // Only enable EE survey if user accepted the newsletter\n setNpsSurveySettings((s) => ({ ...s, enabled: true }));\n\n navigate({\n pathname: '/usecase',\n search: `?hasAdmin=${true}`,\n });\n } else {\n navigate('/');\n }\n } else {\n if (isBaseQueryError(res.error)) {\n trackUsage('didNotCreateFirstAdmin');\n\n if (res.error.name === 'ValidationError') {\n setFormErrors(formatValidationErrors(res.error));\n return;\n }\n\n setApiError(formatAPIError(res.error));\n }\n }\n };\n\n const handleRegisterUser = async (\n { news, ...body }: RegisterUser.Request['body'] & { news: boolean },\n setFormErrors: FormHelpers<RegisterFormValues>['setErrors']\n ) => {\n const res = await registerUser({ ...body, deviceId: getOrCreateDeviceId() });\n\n if ('data' in res) {\n dispatch(login({ token: res.data.token }));\n\n if (news) {\n // Only enable EE survey if user accepted the newsletter\n setNpsSurveySettings((s) => ({ ...s, enabled: true }));\n\n navigate({\n pathname: '/usecase',\n search: `?hasAdmin=${hasAdmin}`,\n });\n } else {\n navigate('/');\n }\n } else {\n if (isBaseQueryError(res.error)) {\n trackUsage('didNotCreateFirstAdmin');\n\n if (res.error.name === 'ValidationError') {\n setFormErrors(formatValidationErrors(res.error));\n return;\n }\n\n setApiError(formatAPIError(res.error));\n }\n }\n };\n\n if (\n !match ||\n (match.params.authType !== 'register' && match.params.authType !== 'register-admin')\n ) {\n return <Navigate to=\"/\" />;\n }\n\n const isAdminRegistration = match.params.authType === 'register-admin';\n\n const schema = isAdminRegistration ? REGISTER_ADMIN_SCHEMA : REGISTER_USER_SCHEMA;\n\n return (\n <UnauthenticatedLayout>\n <LayoutContent>\n <Flex direction=\"column\" alignItems=\"center\" gap={3}>\n <Logo />\n\n <Typography tag=\"h1\" variant=\"alpha\" textAlign=\"center\">\n {formatMessage({\n id: 'Auth.form.welcome.title',\n defaultMessage: 'Welcome to Strapi!',\n })}\n </Typography>\n <Typography variant=\"epsilon\" textColor=\"neutral600\" textAlign=\"center\">\n {formatMessage({\n id: 'Auth.form.register.subtitle',\n defaultMessage:\n 'Credentials are only used to authenticate in Strapi. All saved data will be stored in your database.',\n })}\n </Typography>\n {apiError ? (\n <Typography id=\"global-form-error\" role=\"alert\" tabIndex={-1} textColor=\"danger600\">\n {apiError}\n </Typography>\n ) : null}\n </Flex>\n <Form\n method=\"POST\"\n initialValues={\n {\n firstname: userInfo?.firstname || '',\n lastname: userInfo?.lastname || '',\n email: userInfo?.email || '',\n password: '',\n confirmPassword: '',\n registrationToken: registrationToken || undefined,\n news: false,\n } satisfies RegisterFormValues\n }\n onSubmit={async (data, helpers) => {\n const normalizedData = normalizeData(data);\n\n try {\n await schema.validate(normalizedData, { abortEarly: false });\n\n if (submitCount > 0 && isAdminRegistration) {\n trackUsage('didSubmitWithErrorsFirstAdmin', { count: submitCount.toString() });\n }\n\n if (normalizedData.registrationToken) {\n handleRegisterUser(\n {\n userInfo: omit(normalizedData, [\n 'registrationToken',\n 'confirmPassword',\n 'email',\n 'news',\n ]),\n registrationToken: normalizedData.registrationToken,\n news: normalizedData.news,\n },\n helpers.setErrors\n );\n } else {\n await handleRegisterAdmin(\n omit(normalizedData, ['registrationToken', 'confirmPassword']),\n helpers.setErrors\n );\n }\n } catch (err) {\n if (err instanceof ValidationError) {\n const formatDescriptor = (msg: any) => {\n try {\n if (!msg) return '';\n if (typeof msg === 'string') return msg;\n // Direct descriptor\n if ('id' in msg && 'defaultMessage' in msg) return formatMessage(msg as any);\n // Wrapped descriptor: { message: { id, defaultMessage } }\n if (msg.message && typeof msg.message === 'object' && 'id' in msg.message) {\n return formatMessage(msg.message as any);\n }\n // errors array: [{ id, defaultMessage }]\n if (Array.isArray(msg.errors) && msg.errors.length > 0) {\n const first = msg.errors[0];\n if (typeof first === 'string') return first;\n if (first && typeof first === 'object' && 'id' in first)\n return formatMessage(first as any);\n }\n // fallback to defaultMessage if present\n if ('defaultMessage' in msg) return msg.defaultMessage;\n return String(msg);\n } catch (e) {\n return String(msg);\n }\n };\n\n const computed = err.inner.reduce<Record<string, string>>(\n (acc, { message, path }) => {\n if (!path) return acc;\n acc[path] = formatDescriptor(message);\n return acc;\n },\n {}\n );\n\n helpers.setErrors(computed);\n }\n\n setSubmitCount(submitCount + 1);\n }\n }}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6} marginTop={7}>\n <Grid.Root gap={4}>\n {[\n {\n label: formatMessage({\n id: 'Auth.form.firstname.label',\n defaultMessage: 'Firstname',\n }),\n name: 'firstname',\n required: true,\n size: 6,\n type: 'string' as const,\n },\n {\n label: formatMessage({\n id: 'Auth.form.lastname.label',\n defaultMessage: 'Lastname',\n }),\n name: 'lastname',\n size: 6,\n type: 'string' as const,\n },\n {\n disabled: !isAdminRegistration,\n label: formatMessage({\n id: 'Auth.form.email.label',\n defaultMessage: 'Email',\n }),\n name: 'email',\n required: true,\n size: 12,\n type: 'email' as const,\n },\n {\n hint: formatMessage({\n id: 'Auth.form.password.hint',\n defaultMessage:\n 'Must be at least 8 characters, 1 uppercase, 1 lowercase & 1 number',\n }),\n label: formatMessage({\n id: 'global.password',\n defaultMessage: 'Password',\n }),\n name: 'password',\n required: true,\n size: 12,\n type: 'password' as const,\n },\n {\n label: formatMessage({\n id: 'Auth.form.confirmPassword.label',\n defaultMessage: 'Confirm Password',\n }),\n name: 'confirmPassword',\n required: true,\n size: 12,\n type: 'password' as const,\n },\n {\n label: formatMessage(\n {\n id: 'Auth.form.register.news.label',\n defaultMessage:\n 'Keep me updated about new features & upcoming improvements (by doing this you accept the {terms} and the {policy}).',\n },\n {\n terms: (\n <A target=\"_blank\" href=\"https://strapi.io/terms\" rel=\"noreferrer\">\n {formatMessage({\n id: 'Auth.privacy-policy-agreement.terms',\n defaultMessage: 'terms',\n })}\n </A>\n ),\n policy: (\n <A target=\"_blank\" href=\"https://strapi.io/privacy\" rel=\"noreferrer\">\n {formatMessage({\n id: 'Auth.privacy-policy-agreement.policy',\n defaultMessage: 'policy',\n })}\n </A>\n ),\n }\n ),\n name: 'news',\n size: 12,\n type: 'checkbox' as const,\n },\n ].map(({ size, ...field }) => (\n <Grid.Item\n key={field.name}\n xs={12}\n m={size}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <InputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n <Button fullWidth size=\"L\" type=\"submit\">\n {formatMessage({\n id: 'Auth.form.button.register',\n defaultMessage: \"Let's start\",\n })}\n </Button>\n </Flex>\n </Form>\n {match?.params.authType === 'register' && (\n <Box paddingTop={4}>\n <Flex justifyContent=\"center\">\n <Link tag={NavLink} to=\"/auth/login\">\n {formatMessage({\n id: 'Auth.link.signin.account',\n defaultMessage: 'Already have an account?',\n })}\n </Link>\n </Flex>\n </Box>\n )}\n </LayoutContent>\n </UnauthenticatedLayout>\n );\n};\n\ntype StringKeys<T> = {\n [K in keyof T]: T[K] extends string | undefined ? K : never;\n}[keyof T];\n\n/**\n * @description Trims all values but the password & sets lastName to null if it's a falsey value.\n */\nfunction normalizeData(data: RegisterFormValues) {\n return Object.entries(data).reduce(\n (acc, [key, value]) => {\n type PasswordKeys = Extract<keyof RegisterFormValues, 'password' | 'confirmPassword'>;\n type RegisterFormStringValues = Exclude<\n keyof Pick<RegisterFormValues, StringKeys<RegisterFormValues>>,\n PasswordKeys\n >;\n\n if (!['password', 'confirmPassword'].includes(key) && typeof value === 'string') {\n acc[key as RegisterFormStringValues] = value.trim();\n\n if (key === 'lastname') {\n acc[key] = value || undefined;\n }\n } else {\n acc[key as PasswordKeys] = value;\n }\n\n return acc;\n },\n {} as {\n firstname: string;\n lastname: string | undefined;\n email: string;\n password: string;\n confirmPassword: string;\n registrationToken: string | undefined;\n news: boolean;\n }\n );\n}\n\nconst A = styled.a`\n color: ${({ theme }) => theme.colors.primary600};\n`;\n\nexport { Register };\nexport type { RegisterProps };\n"],"names":["REGISTER_USER_SCHEMA","yup","object","shape","firstname","string","trim","required","translatedErrors","nullable","lastname","password","min","id","minLength","defaultMessage","values","test","value","byteSize","getByteSize","message","confirmPassword","oneOf","ref","registrationToken","REGISTER_ADMIN_SCHEMA","TextEncoder","encode","length","email","strict","lowercase","Register","hasAdmin","toggleNotification","useNotification","navigate","useNavigate","submitCount","setSubmitCount","React","useState","apiError","setApiError","trackUsage","useTracking","formatMessage","useIntl","search","searchString","useLocation","query","useMemo","URLSearchParams","match","useMatch","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","setNpsSurveySettings","useNpsSurveySettings","get","data","userInfo","error","useGetRegistrationInfoQuery","skip","useEffect","isBaseQueryError","type","encodeURIComponent","registerAdmin","useRegisterAdminMutation","registerUser","useRegisterUserMutation","dispatch","useTypedDispatch","handleRegisterAdmin","news","body","setFormErrors","res","deviceId","getOrCreateDeviceId","login","token","s","enabled","pathname","name","handleRegisterUser","params","authType","_jsx","Navigate","to","isAdminRegistration","schema","UnauthenticatedLayout","_jsxs","LayoutContent","Flex","direction","alignItems","gap","Logo","Typography","tag","variant","textAlign","textColor","role","tabIndex","Form","method","initialValues","undefined","onSubmit","helpers","normalizedData","normalizeData","validate","abortEarly","count","toString","omit","setErrors","err","ValidationError","formatDescriptor","msg","Array","isArray","errors","first","String","e","computed","inner","reduce","acc","path","marginTop","Grid","Root","label","size","disabled","hint","terms","A","target","href","rel","policy","map","field","Item","xs","m","InputRenderer","Button","fullWidth","Box","paddingTop","justifyContent","Link","NavLink","Object","entries","key","includes","styled","a","theme","colors","primary600"],"mappings":"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"}
@@ -39,21 +39,30 @@ const REGISTER_USER_SCHEMA = yup.object().shape({
39
39
  if (!value || typeof value !== 'string') return true; // validated elsewhere
40
40
  const byteSize = getByteSize(value);
41
41
  return byteSize <= 72;
42
- }).matches(/[a-z]/, {
42
+ }).test('lowercase', {
43
43
  message: {
44
44
  id: 'components.Input.error.contain.lowercase',
45
45
  defaultMessage: 'Password must contain at least 1 lowercase letter'
46
46
  }
47
- }).matches(/[A-Z]/, {
47
+ }, (value)=>{
48
+ if (!value) return true;
49
+ return /[a-z]/.test(value);
50
+ }).test('uppercase', {
48
51
  message: {
49
52
  id: 'components.Input.error.contain.uppercase',
50
53
  defaultMessage: 'Password must contain at least 1 uppercase letter'
51
54
  }
52
- }).matches(/\d/, {
55
+ }, (value)=>{
56
+ if (!value) return true;
57
+ return /[A-Z]/.test(value);
58
+ }).test('number', {
53
59
  message: {
54
60
  id: 'components.Input.error.contain.number',
55
61
  defaultMessage: 'Password must contain at least 1 number'
56
62
  }
63
+ }, (value)=>{
64
+ if (!value) return true;
65
+ return /\d/.test(value);
57
66
  }).required({
58
67
  id: errorsTrads.required.id,
59
68
  defaultMessage: 'Password is required'
@@ -91,21 +100,30 @@ const REGISTER_ADMIN_SCHEMA = yup.object().shape({
91
100
  }, function(value) {
92
101
  if (!value) return true;
93
102
  return new TextEncoder().encode(value).length <= 72;
94
- }).matches(/[a-z]/, {
103
+ }).test('lowercase', {
95
104
  message: {
96
105
  id: 'components.Input.error.contain.lowercase',
97
106
  defaultMessage: 'Password must contain at least 1 lowercase letter'
98
107
  }
99
- }).matches(/[A-Z]/, {
108
+ }, (value)=>{
109
+ if (!value) return true;
110
+ return /[a-z]/.test(value);
111
+ }).test('uppercase', {
100
112
  message: {
101
113
  id: 'components.Input.error.contain.uppercase',
102
114
  defaultMessage: 'Password must contain at least 1 uppercase letter'
103
115
  }
104
- }).matches(/\d/, {
116
+ }, (value)=>{
117
+ if (!value) return true;
118
+ return /[A-Z]/.test(value);
119
+ }).test('number', {
105
120
  message: {
106
121
  id: 'components.Input.error.contain.number',
107
122
  defaultMessage: 'Password must contain at least 1 number'
108
123
  }
124
+ }, (value)=>{
125
+ if (!value) return true;
126
+ return /\d/.test(value);
109
127
  }).required({
110
128
  id: errorsTrads.required.id,
111
129
  defaultMessage: 'Password is required'
@@ -317,13 +335,35 @@ const Register = ({ hasAdmin })=>{
317
335
  }
318
336
  } catch (err) {
319
337
  if (err instanceof ValidationError) {
320
- helpers.setErrors(err.inner.reduce((acc, { message, path })=>{
321
- if (path && typeof message === 'object') {
322
- const typedMessage = message;
323
- acc[path] = formatMessage(message, typedMessage.values);
338
+ const formatDescriptor = (msg)=>{
339
+ try {
340
+ if (!msg) return '';
341
+ if (typeof msg === 'string') return msg;
342
+ // Direct descriptor
343
+ if ('id' in msg && 'defaultMessage' in msg) return formatMessage(msg);
344
+ // Wrapped descriptor: { message: { id, defaultMessage } }
345
+ if (msg.message && typeof msg.message === 'object' && 'id' in msg.message) {
346
+ return formatMessage(msg.message);
347
+ }
348
+ // errors array: [{ id, defaultMessage }]
349
+ if (Array.isArray(msg.errors) && msg.errors.length > 0) {
350
+ const first = msg.errors[0];
351
+ if (typeof first === 'string') return first;
352
+ if (first && typeof first === 'object' && 'id' in first) return formatMessage(first);
353
+ }
354
+ // fallback to defaultMessage if present
355
+ if ('defaultMessage' in msg) return msg.defaultMessage;
356
+ return String(msg);
357
+ } catch (e) {
358
+ return String(msg);
324
359
  }
360
+ };
361
+ const computed = err.inner.reduce((acc, { message, path })=>{
362
+ if (!path) return acc;
363
+ acc[path] = formatDescriptor(message);
325
364
  return acc;
326
- }, {}));
365
+ }, {});
366
+ helpers.setErrors(computed);
327
367
  }
328
368
  setSubmitCount(submitCount + 1);
329
369
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Register.mjs","sources":["../../../../../../../admin/src/pages/Auth/components/Register.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Grid, Typography, Link } from '@strapi/design-system';\nimport omit from 'lodash/omit';\nimport { type MessageDescriptor, type PrimitiveType, useIntl } from 'react-intl';\nimport { NavLink, Navigate, useNavigate, useMatch, useLocation } from 'react-router-dom';\nimport { styled } from 'styled-components';\nimport * as yup from 'yup';\nimport { ValidationError } from 'yup';\n\nimport {\n Register as RegisterUser,\n RegisterAdmin,\n} from '../../../../../shared/contracts/authentication';\nimport { Form, FormHelpers } from '../../../components/Form';\nimport { InputRenderer } from '../../../components/FormInputs/Renderer';\nimport { useNpsSurveySettings } from '../../../components/NpsSurvey';\nimport { Logo } from '../../../components/UnauthenticatedLogo';\nimport { useTypedDispatch } from '../../../core/store/hooks';\nimport { useNotification } from '../../../features/Notifications';\nimport { useTracking } from '../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../hooks/useAPIErrorHandler';\nimport { LayoutContent, UnauthenticatedLayout } from '../../../layouts/UnauthenticatedLayout';\nimport { login } from '../../../reducer';\nimport {\n useGetRegistrationInfoQuery,\n useRegisterAdminMutation,\n useRegisterUserMutation,\n} from '../../../services/auth';\nimport { isBaseQueryError } from '../../../utils/baseQuery';\nimport { getOrCreateDeviceId } from '../../../utils/deviceId';\nimport { getByteSize } from '../../../utils/strings';\nimport { translatedErrors } from '../../../utils/translatedErrors';\n\nconst REGISTER_USER_SCHEMA = yup.object().shape({\n firstname: yup.string().trim().required(translatedErrors.required).nullable(),\n lastname: yup.string().nullable(),\n password: yup\n .string()\n .min(8, {\n id: translatedErrors.minLength.id,\n defaultMessage: 'Password must be at least 8 characters',\n values: { min: 8 },\n })\n .test(\n 'max-bytes',\n {\n id: 'components.Input.error.contain.maxBytes',\n defaultMessage: 'Password must be less than 73 bytes',\n },\n function (value) {\n if (!value || typeof value !== 'string') return true; // validated elsewhere\n\n const byteSize = getByteSize(value);\n return byteSize <= 72;\n }\n )\n .matches(/[a-z]/, {\n message: {\n id: 'components.Input.error.contain.lowercase',\n defaultMessage: 'Password must contain at least 1 lowercase letter',\n },\n })\n .matches(/[A-Z]/, {\n message: {\n id: 'components.Input.error.contain.uppercase',\n defaultMessage: 'Password must contain at least 1 uppercase letter',\n },\n })\n .matches(/\\d/, {\n message: {\n id: 'components.Input.error.contain.number',\n defaultMessage: 'Password must contain at least 1 number',\n },\n })\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Password is required',\n })\n .nullable(),\n confirmPassword: yup\n .string()\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Confirm password is required',\n })\n .oneOf([yup.ref('password'), null], {\n id: 'components.Input.error.password.noMatch',\n defaultMessage: 'Passwords must match',\n })\n .nullable(),\n registrationToken: yup.string().required({\n id: translatedErrors.required.id,\n defaultMessage: 'Registration token is required',\n }),\n});\n\nconst REGISTER_ADMIN_SCHEMA = yup.object().shape({\n firstname: yup\n .string()\n .trim()\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Firstname is required',\n })\n .nullable(),\n lastname: yup.string().nullable(),\n password: yup\n .string()\n .min(8, {\n id: translatedErrors.minLength.id,\n defaultMessage: 'Password must be at least 8 characters',\n values: { min: 8 },\n })\n .test(\n 'max-bytes',\n {\n id: 'components.Input.error.contain.maxBytes',\n defaultMessage: 'Password must be less than 73 bytes',\n },\n function (value) {\n if (!value) return true;\n return new TextEncoder().encode(value).length <= 72;\n }\n )\n .matches(/[a-z]/, {\n message: {\n id: 'components.Input.error.contain.lowercase',\n defaultMessage: 'Password must contain at least 1 lowercase letter',\n },\n })\n .matches(/[A-Z]/, {\n message: {\n id: 'components.Input.error.contain.uppercase',\n defaultMessage: 'Password must contain at least 1 uppercase letter',\n },\n })\n .matches(/\\d/, {\n message: {\n id: 'components.Input.error.contain.number',\n defaultMessage: 'Password must contain at least 1 number',\n },\n })\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Password is required',\n })\n .nullable(),\n confirmPassword: yup\n .string()\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Confirm password is required',\n })\n .nullable()\n .oneOf([yup.ref('password'), null], {\n id: 'components.Input.error.password.noMatch',\n defaultMessage: 'Passwords must match',\n }),\n email: yup\n .string()\n .email({\n id: translatedErrors.email.id,\n defaultMessage: 'Not a valid email',\n })\n .strict()\n .lowercase({\n id: translatedErrors.lowercase.id,\n defaultMessage: 'Email must be lowercase',\n })\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Email is required',\n })\n .nullable(),\n});\n\ninterface RegisterProps {\n hasAdmin?: boolean;\n}\n\ninterface RegisterFormValues {\n firstname: string;\n lastname: string;\n email: string;\n password: string;\n confirmPassword: string;\n registrationToken: string | undefined;\n news: boolean;\n}\n\ninterface IntlFormattedMessage extends MessageDescriptor {\n values?: Record<string, PrimitiveType>;\n}\n\nconst Register = ({ hasAdmin }: RegisterProps) => {\n const { toggleNotification } = useNotification();\n const navigate = useNavigate();\n const [submitCount, setSubmitCount] = React.useState(0);\n const [apiError, setApiError] = React.useState<string>();\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const { search: searchString } = useLocation();\n const query = React.useMemo(() => new URLSearchParams(searchString), [searchString]);\n const match = useMatch('/auth/:authType');\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n const { setNpsSurveySettings } = useNpsSurveySettings();\n\n const registrationToken = query.get('registrationToken');\n\n const { data: userInfo, error } = useGetRegistrationInfoQuery(registrationToken as string, {\n skip: !registrationToken,\n });\n\n React.useEffect(() => {\n if (error) {\n const message: string = isBaseQueryError(error)\n ? formatAPIError(error)\n : (error.message ?? '');\n\n toggleNotification({\n type: 'danger',\n message,\n });\n\n navigate(`/auth/oops?info=${encodeURIComponent(message)}`);\n }\n }, [error, formatAPIError, navigate, toggleNotification]);\n\n const [registerAdmin] = useRegisterAdminMutation();\n const [registerUser] = useRegisterUserMutation();\n const dispatch = useTypedDispatch();\n\n const handleRegisterAdmin = async (\n { news, ...body }: RegisterAdmin.Request['body'] & { news: boolean },\n setFormErrors: FormHelpers<RegisterFormValues>['setErrors']\n ) => {\n const res = await registerAdmin({ ...body, deviceId: getOrCreateDeviceId() });\n\n if ('data' in res) {\n dispatch(login({ token: res.data.token }));\n\n if (news) {\n // Only enable EE survey if user accepted the newsletter\n setNpsSurveySettings((s) => ({ ...s, enabled: true }));\n\n navigate({\n pathname: '/usecase',\n search: `?hasAdmin=${true}`,\n });\n } else {\n navigate('/');\n }\n } else {\n if (isBaseQueryError(res.error)) {\n trackUsage('didNotCreateFirstAdmin');\n\n if (res.error.name === 'ValidationError') {\n setFormErrors(formatValidationErrors(res.error));\n return;\n }\n\n setApiError(formatAPIError(res.error));\n }\n }\n };\n\n const handleRegisterUser = async (\n { news, ...body }: RegisterUser.Request['body'] & { news: boolean },\n setFormErrors: FormHelpers<RegisterFormValues>['setErrors']\n ) => {\n const res = await registerUser({ ...body, deviceId: getOrCreateDeviceId() });\n\n if ('data' in res) {\n dispatch(login({ token: res.data.token }));\n\n if (news) {\n // Only enable EE survey if user accepted the newsletter\n setNpsSurveySettings((s) => ({ ...s, enabled: true }));\n\n navigate({\n pathname: '/usecase',\n search: `?hasAdmin=${hasAdmin}`,\n });\n } else {\n navigate('/');\n }\n } else {\n if (isBaseQueryError(res.error)) {\n trackUsage('didNotCreateFirstAdmin');\n\n if (res.error.name === 'ValidationError') {\n setFormErrors(formatValidationErrors(res.error));\n return;\n }\n\n setApiError(formatAPIError(res.error));\n }\n }\n };\n\n if (\n !match ||\n (match.params.authType !== 'register' && match.params.authType !== 'register-admin')\n ) {\n return <Navigate to=\"/\" />;\n }\n\n const isAdminRegistration = match.params.authType === 'register-admin';\n\n const schema = isAdminRegistration ? REGISTER_ADMIN_SCHEMA : REGISTER_USER_SCHEMA;\n\n return (\n <UnauthenticatedLayout>\n <LayoutContent>\n <Flex direction=\"column\" alignItems=\"center\" gap={3}>\n <Logo />\n\n <Typography tag=\"h1\" variant=\"alpha\" textAlign=\"center\">\n {formatMessage({\n id: 'Auth.form.welcome.title',\n defaultMessage: 'Welcome to Strapi!',\n })}\n </Typography>\n <Typography variant=\"epsilon\" textColor=\"neutral600\" textAlign=\"center\">\n {formatMessage({\n id: 'Auth.form.register.subtitle',\n defaultMessage:\n 'Credentials are only used to authenticate in Strapi. All saved data will be stored in your database.',\n })}\n </Typography>\n {apiError ? (\n <Typography id=\"global-form-error\" role=\"alert\" tabIndex={-1} textColor=\"danger600\">\n {apiError}\n </Typography>\n ) : null}\n </Flex>\n <Form\n method=\"POST\"\n initialValues={\n {\n firstname: userInfo?.firstname || '',\n lastname: userInfo?.lastname || '',\n email: userInfo?.email || '',\n password: '',\n confirmPassword: '',\n registrationToken: registrationToken || undefined,\n news: false,\n } satisfies RegisterFormValues\n }\n onSubmit={async (data, helpers) => {\n const normalizedData = normalizeData(data);\n\n try {\n await schema.validate(normalizedData, { abortEarly: false });\n\n if (submitCount > 0 && isAdminRegistration) {\n trackUsage('didSubmitWithErrorsFirstAdmin', { count: submitCount.toString() });\n }\n\n if (normalizedData.registrationToken) {\n handleRegisterUser(\n {\n userInfo: omit(normalizedData, [\n 'registrationToken',\n 'confirmPassword',\n 'email',\n 'news',\n ]),\n registrationToken: normalizedData.registrationToken,\n news: normalizedData.news,\n },\n helpers.setErrors\n );\n } else {\n await handleRegisterAdmin(\n omit(normalizedData, ['registrationToken', 'confirmPassword']),\n helpers.setErrors\n );\n }\n } catch (err) {\n if (err instanceof ValidationError) {\n helpers.setErrors(\n err.inner.reduce<Record<string, string>>((acc, { message, path }) => {\n if (path && typeof message === 'object') {\n const typedMessage = message as IntlFormattedMessage;\n acc[path] = formatMessage(message, typedMessage.values);\n }\n return acc;\n }, {})\n );\n }\n setSubmitCount(submitCount + 1);\n }\n }}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6} marginTop={7}>\n <Grid.Root gap={4}>\n {[\n {\n label: formatMessage({\n id: 'Auth.form.firstname.label',\n defaultMessage: 'Firstname',\n }),\n name: 'firstname',\n required: true,\n size: 6,\n type: 'string' as const,\n },\n {\n label: formatMessage({\n id: 'Auth.form.lastname.label',\n defaultMessage: 'Lastname',\n }),\n name: 'lastname',\n size: 6,\n type: 'string' as const,\n },\n {\n disabled: !isAdminRegistration,\n label: formatMessage({\n id: 'Auth.form.email.label',\n defaultMessage: 'Email',\n }),\n name: 'email',\n required: true,\n size: 12,\n type: 'email' as const,\n },\n {\n hint: formatMessage({\n id: 'Auth.form.password.hint',\n defaultMessage:\n 'Must be at least 8 characters, 1 uppercase, 1 lowercase & 1 number',\n }),\n label: formatMessage({\n id: 'global.password',\n defaultMessage: 'Password',\n }),\n name: 'password',\n required: true,\n size: 12,\n type: 'password' as const,\n },\n {\n label: formatMessage({\n id: 'Auth.form.confirmPassword.label',\n defaultMessage: 'Confirm Password',\n }),\n name: 'confirmPassword',\n required: true,\n size: 12,\n type: 'password' as const,\n },\n {\n label: formatMessage(\n {\n id: 'Auth.form.register.news.label',\n defaultMessage:\n 'Keep me updated about new features & upcoming improvements (by doing this you accept the {terms} and the {policy}).',\n },\n {\n terms: (\n <A target=\"_blank\" href=\"https://strapi.io/terms\" rel=\"noreferrer\">\n {formatMessage({\n id: 'Auth.privacy-policy-agreement.terms',\n defaultMessage: 'terms',\n })}\n </A>\n ),\n policy: (\n <A target=\"_blank\" href=\"https://strapi.io/privacy\" rel=\"noreferrer\">\n {formatMessage({\n id: 'Auth.privacy-policy-agreement.policy',\n defaultMessage: 'policy',\n })}\n </A>\n ),\n }\n ),\n name: 'news',\n size: 12,\n type: 'checkbox' as const,\n },\n ].map(({ size, ...field }) => (\n <Grid.Item\n key={field.name}\n xs={12}\n m={size}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <InputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n <Button fullWidth size=\"L\" type=\"submit\">\n {formatMessage({\n id: 'Auth.form.button.register',\n defaultMessage: \"Let's start\",\n })}\n </Button>\n </Flex>\n </Form>\n {match?.params.authType === 'register' && (\n <Box paddingTop={4}>\n <Flex justifyContent=\"center\">\n <Link tag={NavLink} to=\"/auth/login\">\n {formatMessage({\n id: 'Auth.link.signin.account',\n defaultMessage: 'Already have an account?',\n })}\n </Link>\n </Flex>\n </Box>\n )}\n </LayoutContent>\n </UnauthenticatedLayout>\n );\n};\n\ninterface RegisterFormValues {\n firstname: string;\n lastname: string;\n email: string;\n password: string;\n confirmPassword: string;\n registrationToken: string | undefined;\n news: boolean;\n}\n\ntype StringKeys<T> = {\n [K in keyof T]: T[K] extends string | undefined ? K : never;\n}[keyof T];\n\n/**\n * @description Trims all values but the password & sets lastName to null if it's a falsey value.\n */\nfunction normalizeData(data: RegisterFormValues) {\n return Object.entries(data).reduce(\n (acc, [key, value]) => {\n type PasswordKeys = Extract<keyof RegisterFormValues, 'password' | 'confirmPassword'>;\n type RegisterFormStringValues = Exclude<\n keyof Pick<RegisterFormValues, StringKeys<RegisterFormValues>>,\n PasswordKeys\n >;\n\n if (!['password', 'confirmPassword'].includes(key) && typeof value === 'string') {\n acc[key as RegisterFormStringValues] = value.trim();\n\n if (key === 'lastname') {\n acc[key] = value || undefined;\n }\n } else {\n acc[key as PasswordKeys] = value;\n }\n\n return acc;\n },\n {} as {\n firstname: string;\n lastname: string | undefined;\n email: string;\n password: string;\n confirmPassword: string;\n registrationToken: string | undefined;\n news: boolean;\n }\n );\n}\n\nconst A = styled.a`\n color: ${({ theme }) => theme.colors.primary600};\n`;\n\nexport { Register };\nexport type { RegisterProps };\n"],"names":["REGISTER_USER_SCHEMA","yup","object","shape","firstname","string","trim","required","translatedErrors","nullable","lastname","password","min","id","minLength","defaultMessage","values","test","value","byteSize","getByteSize","matches","message","confirmPassword","oneOf","ref","registrationToken","REGISTER_ADMIN_SCHEMA","TextEncoder","encode","length","email","strict","lowercase","Register","hasAdmin","toggleNotification","useNotification","navigate","useNavigate","submitCount","setSubmitCount","React","useState","apiError","setApiError","trackUsage","useTracking","formatMessage","useIntl","search","searchString","useLocation","query","useMemo","URLSearchParams","match","useMatch","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","setNpsSurveySettings","useNpsSurveySettings","get","data","userInfo","error","useGetRegistrationInfoQuery","skip","useEffect","isBaseQueryError","type","encodeURIComponent","registerAdmin","useRegisterAdminMutation","registerUser","useRegisterUserMutation","dispatch","useTypedDispatch","handleRegisterAdmin","news","body","setFormErrors","res","deviceId","getOrCreateDeviceId","login","token","s","enabled","pathname","name","handleRegisterUser","params","authType","_jsx","Navigate","to","isAdminRegistration","schema","UnauthenticatedLayout","_jsxs","LayoutContent","Flex","direction","alignItems","gap","Logo","Typography","tag","variant","textAlign","textColor","role","tabIndex","Form","method","initialValues","undefined","onSubmit","helpers","normalizedData","normalizeData","validate","abortEarly","count","toString","omit","setErrors","err","ValidationError","inner","reduce","acc","path","typedMessage","marginTop","Grid","Root","label","size","disabled","hint","terms","A","target","href","rel","policy","map","field","Item","xs","m","InputRenderer","Button","fullWidth","Box","paddingTop","justifyContent","Link","NavLink","Object","entries","key","includes","styled","a","theme","colors","primary600"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAkCA,MAAMA,oBAAuBC,GAAAA,GAAAA,CAAIC,MAAM,EAAA,CAAGC,KAAK,CAAC;IAC9CC,SAAWH,EAAAA,GAAAA,CAAII,MAAM,EAAA,CAAGC,IAAI,EAAA,CAAGC,QAAQ,CAACC,WAAAA,CAAiBD,QAAQ,CAAA,CAAEE,QAAQ,EAAA;IAC3EC,QAAUT,EAAAA,GAAAA,CAAII,MAAM,EAAA,CAAGI,QAAQ,EAAA;AAC/BE,IAAAA,QAAAA,EAAUV,GACPI,CAAAA,MAAM,EACNO,CAAAA,GAAG,CAAC,CAAG,EAAA;QACNC,EAAIL,EAAAA,WAAAA,CAAiBM,SAAS,CAACD,EAAE;QACjCE,cAAgB,EAAA,wCAAA;QAChBC,MAAQ,EAAA;YAAEJ,GAAK,EAAA;AAAE;KAElBK,CAAAA,CAAAA,IAAI,CACH,WACA,EAAA;QACEJ,EAAI,EAAA,yCAAA;QACJE,cAAgB,EAAA;AAClB,KAAA,EACA,SAAUG,KAAK,EAAA;AACb,QAAA,IAAI,CAACA,KAAS,IAAA,OAAOA,UAAU,QAAU,EAAA,OAAO;AAEhD,QAAA,MAAMC,WAAWC,WAAYF,CAAAA,KAAAA,CAAAA;AAC7B,QAAA,OAAOC,QAAY,IAAA,EAAA;KAGtBE,CAAAA,CAAAA,OAAO,CAAC,OAAS,EAAA;QAChBC,OAAS,EAAA;YACPT,EAAI,EAAA,0CAAA;YACJE,cAAgB,EAAA;AAClB;KAEDM,CAAAA,CAAAA,OAAO,CAAC,OAAS,EAAA;QAChBC,OAAS,EAAA;YACPT,EAAI,EAAA,0CAAA;YACJE,cAAgB,EAAA;AAClB;KAEDM,CAAAA,CAAAA,OAAO,CAAC,IAAM,EAAA;QACbC,OAAS,EAAA;YACPT,EAAI,EAAA,uCAAA;YACJE,cAAgB,EAAA;AAClB;AACF,KAAA,CAAA,CACCR,QAAQ,CAAC;QACRM,EAAIL,EAAAA,WAAAA,CAAiBD,QAAQ,CAACM,EAAE;QAChCE,cAAgB,EAAA;AAClB,KAAA,CAAA,CACCN,QAAQ,EAAA;AACXc,IAAAA,eAAAA,EAAiBtB,GACdI,CAAAA,MAAM,EACNE,CAAAA,QAAQ,CAAC;QACRM,EAAIL,EAAAA,WAAAA,CAAiBD,QAAQ,CAACM,EAAE;QAChCE,cAAgB,EAAA;AAClB,KAAA,CAAA,CACCS,KAAK,CAAC;AAACvB,QAAAA,GAAAA,CAAIwB,GAAG,CAAC,UAAA,CAAA;AAAa,QAAA;KAAK,EAAE;QAClCZ,EAAI,EAAA,yCAAA;QACJE,cAAgB,EAAA;AAClB,KAAA,CAAA,CACCN,QAAQ,EAAA;AACXiB,IAAAA,iBAAAA,EAAmBzB,GAAII,CAAAA,MAAM,EAAGE,CAAAA,QAAQ,CAAC;QACvCM,EAAIL,EAAAA,WAAAA,CAAiBD,QAAQ,CAACM,EAAE;QAChCE,cAAgB,EAAA;AAClB,KAAA;AACF,CAAA,CAAA;AAEA,MAAMY,qBAAwB1B,GAAAA,GAAAA,CAAIC,MAAM,EAAA,CAAGC,KAAK,CAAC;AAC/CC,IAAAA,SAAAA,EAAWH,IACRI,MAAM,EAAA,CACNC,IAAI,EAAA,CACJC,QAAQ,CAAC;QACRM,EAAIL,EAAAA,WAAAA,CAAiBD,QAAQ,CAACM,EAAE;QAChCE,cAAgB,EAAA;AAClB,KAAA,CAAA,CACCN,QAAQ,EAAA;IACXC,QAAUT,EAAAA,GAAAA,CAAII,MAAM,EAAA,CAAGI,QAAQ,EAAA;AAC/BE,IAAAA,QAAAA,EAAUV,GACPI,CAAAA,MAAM,EACNO,CAAAA,GAAG,CAAC,CAAG,EAAA;QACNC,EAAIL,EAAAA,WAAAA,CAAiBM,SAAS,CAACD,EAAE;QACjCE,cAAgB,EAAA,wCAAA;QAChBC,MAAQ,EAAA;YAAEJ,GAAK,EAAA;AAAE;KAElBK,CAAAA,CAAAA,IAAI,CACH,WACA,EAAA;QACEJ,EAAI,EAAA,yCAAA;QACJE,cAAgB,EAAA;AAClB,KAAA,EACA,SAAUG,KAAK,EAAA;QACb,IAAI,CAACA,OAAO,OAAO,IAAA;AACnB,QAAA,OAAO,IAAIU,WAAcC,EAAAA,CAAAA,MAAM,CAACX,KAAAA,CAAAA,CAAOY,MAAM,IAAI,EAAA;KAGpDT,CAAAA,CAAAA,OAAO,CAAC,OAAS,EAAA;QAChBC,OAAS,EAAA;YACPT,EAAI,EAAA,0CAAA;YACJE,cAAgB,EAAA;AAClB;KAEDM,CAAAA,CAAAA,OAAO,CAAC,OAAS,EAAA;QAChBC,OAAS,EAAA;YACPT,EAAI,EAAA,0CAAA;YACJE,cAAgB,EAAA;AAClB;KAEDM,CAAAA,CAAAA,OAAO,CAAC,IAAM,EAAA;QACbC,OAAS,EAAA;YACPT,EAAI,EAAA,uCAAA;YACJE,cAAgB,EAAA;AAClB;AACF,KAAA,CAAA,CACCR,QAAQ,CAAC;QACRM,EAAIL,EAAAA,WAAAA,CAAiBD,QAAQ,CAACM,EAAE;QAChCE,cAAgB,EAAA;AAClB,KAAA,CAAA,CACCN,QAAQ,EAAA;AACXc,IAAAA,eAAAA,EAAiBtB,GACdI,CAAAA,MAAM,EACNE,CAAAA,QAAQ,CAAC;QACRM,EAAIL,EAAAA,WAAAA,CAAiBD,QAAQ,CAACM,EAAE;QAChCE,cAAgB,EAAA;KAEjBN,CAAAA,CAAAA,QAAQ,EACRe,CAAAA,KAAK,CAAC;AAACvB,QAAAA,GAAAA,CAAIwB,GAAG,CAAC,UAAA,CAAA;AAAa,QAAA;KAAK,EAAE;QAClCZ,EAAI,EAAA,yCAAA;QACJE,cAAgB,EAAA;AAClB,KAAA,CAAA;AACFgB,IAAAA,KAAAA,EAAO9B,GACJI,CAAAA,MAAM,EACN0B,CAAAA,KAAK,CAAC;QACLlB,EAAIL,EAAAA,WAAAA,CAAiBuB,KAAK,CAAClB,EAAE;QAC7BE,cAAgB,EAAA;KAEjBiB,CAAAA,CAAAA,MAAM,EACNC,CAAAA,SAAS,CAAC;QACTpB,EAAIL,EAAAA,WAAAA,CAAiByB,SAAS,CAACpB,EAAE;QACjCE,cAAgB,EAAA;AAClB,KAAA,CAAA,CACCR,QAAQ,CAAC;QACRM,EAAIL,EAAAA,WAAAA,CAAiBD,QAAQ,CAACM,EAAE;QAChCE,cAAgB,EAAA;AAClB,KAAA,CAAA,CACCN,QAAQ;AACb,CAAA,CAAA;AAoBA,MAAMyB,QAAW,GAAA,CAAC,EAAEC,QAAQ,EAAiB,GAAA;IAC3C,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;AAC/B,IAAA,MAAMC,QAAWC,GAAAA,WAAAA,EAAAA;AACjB,IAAA,MAAM,CAACC,WAAaC,EAAAA,cAAAA,CAAe,GAAGC,KAAAA,CAAMC,QAAQ,CAAC,CAAA,CAAA;AACrD,IAAA,MAAM,CAACC,QAAAA,EAAUC,WAAY,CAAA,GAAGH,MAAMC,QAAQ,EAAA;IAC9C,MAAM,EAAEG,UAAU,EAAE,GAAGC,WAAAA,EAAAA;IACvB,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAM,EAAEC,MAAAA,EAAQC,YAAY,EAAE,GAAGC,WAAAA,EAAAA;AACjC,IAAA,MAAMC,QAAQX,KAAMY,CAAAA,OAAO,CAAC,IAAM,IAAIC,gBAAgBJ,YAAe,CAAA,EAAA;AAACA,QAAAA;AAAa,KAAA,CAAA;AACnF,IAAA,MAAMK,QAAQC,QAAS,CAAA,iBAAA,CAAA;AACvB,IAAA,MAAM,EACJC,uBAAyBC,EAAAA,cAAc,EACvCC,+BAAiCC,EAAAA,sBAAsB,EACxD,GAAGC,kBAAAA,EAAAA;IACJ,MAAM,EAAEC,oBAAoB,EAAE,GAAGC,oBAAAA,EAAAA;IAEjC,MAAMtC,iBAAAA,GAAoB2B,KAAMY,CAAAA,GAAG,CAAC,mBAAA,CAAA;IAEpC,MAAM,EAAEC,MAAMC,QAAQ,EAAEC,KAAK,EAAE,GAAGC,4BAA4B3C,iBAA6B,EAAA;AACzF4C,QAAAA,IAAAA,EAAM,CAAC5C;AACT,KAAA,CAAA;AAEAgB,IAAAA,KAAAA,CAAM6B,SAAS,CAAC,IAAA;AACd,QAAA,IAAIH,KAAO,EAAA;AACT,YAAA,MAAM9C,UAAkBkD,gBAAiBJ,CAAAA,KAAAA,CAAAA,GACrCT,eAAeS,KACdA,CAAAA,GAAAA,KAAAA,CAAM9C,OAAO,IAAI,EAAA;YAEtBc,kBAAmB,CAAA;gBACjBqC,IAAM,EAAA,QAAA;AACNnD,gBAAAA;AACF,aAAA,CAAA;AAEAgB,YAAAA,QAAAA,CAAS,CAAC,gBAAgB,EAAEoC,kBAAAA,CAAmBpD,OAAU,CAAA,CAAA,CAAA,CAAA;AAC3D;KACC,EAAA;AAAC8C,QAAAA,KAAAA;AAAOT,QAAAA,cAAAA;AAAgBrB,QAAAA,QAAAA;AAAUF,QAAAA;AAAmB,KAAA,CAAA;IAExD,MAAM,CAACuC,cAAc,GAAGC,wBAAAA,EAAAA;IACxB,MAAM,CAACC,aAAa,GAAGC,uBAAAA,EAAAA;AACvB,IAAA,MAAMC,QAAWC,GAAAA,gBAAAA,EAAAA;AAEjB,IAAA,MAAMC,sBAAsB,OAC1B,EAAEC,IAAI,EAAE,GAAGC,MAAyD,EACpEC,aAAAA,GAAAA;QAEA,MAAMC,GAAAA,GAAM,MAAMV,aAAc,CAAA;AAAE,YAAA,GAAGQ,IAAI;YAAEG,QAAUC,EAAAA,mBAAAA;AAAsB,SAAA,CAAA;AAE3E,QAAA,IAAI,UAAUF,GAAK,EAAA;AACjBN,YAAAA,QAAAA,CAASS,KAAM,CAAA;gBAAEC,KAAOJ,EAAAA,GAAAA,CAAInB,IAAI,CAACuB;AAAM,aAAA,CAAA,CAAA;AAEvC,YAAA,IAAIP,IAAM,EAAA;;gBAERnB,oBAAqB,CAAA,CAAC2B,KAAO;AAAE,wBAAA,GAAGA,CAAC;wBAAEC,OAAS,EAAA;qBAAK,CAAA,CAAA;gBAEnDrD,QAAS,CAAA;oBACPsD,QAAU,EAAA,UAAA;oBACV1C,MAAQ,EAAA,CAAC,UAAU,EAAE,IAAM,CAAA;AAC7B,iBAAA,CAAA;aACK,MAAA;gBACLZ,QAAS,CAAA,GAAA,CAAA;AACX;SACK,MAAA;YACL,IAAIkC,gBAAAA,CAAiBa,GAAIjB,CAAAA,KAAK,CAAG,EAAA;gBAC/BtB,UAAW,CAAA,wBAAA,CAAA;AAEX,gBAAA,IAAIuC,GAAIjB,CAAAA,KAAK,CAACyB,IAAI,KAAK,iBAAmB,EAAA;oBACxCT,aAAcvB,CAAAA,sBAAAA,CAAuBwB,IAAIjB,KAAK,CAAA,CAAA;AAC9C,oBAAA;AACF;gBAEAvB,WAAYc,CAAAA,cAAAA,CAAe0B,IAAIjB,KAAK,CAAA,CAAA;AACtC;AACF;AACF,KAAA;AAEA,IAAA,MAAM0B,qBAAqB,OACzB,EAAEZ,IAAI,EAAE,GAAGC,MAAwD,EACnEC,aAAAA,GAAAA;QAEA,MAAMC,GAAAA,GAAM,MAAMR,YAAa,CAAA;AAAE,YAAA,GAAGM,IAAI;YAAEG,QAAUC,EAAAA,mBAAAA;AAAsB,SAAA,CAAA;AAE1E,QAAA,IAAI,UAAUF,GAAK,EAAA;AACjBN,YAAAA,QAAAA,CAASS,KAAM,CAAA;gBAAEC,KAAOJ,EAAAA,GAAAA,CAAInB,IAAI,CAACuB;AAAM,aAAA,CAAA,CAAA;AAEvC,YAAA,IAAIP,IAAM,EAAA;;gBAERnB,oBAAqB,CAAA,CAAC2B,KAAO;AAAE,wBAAA,GAAGA,CAAC;wBAAEC,OAAS,EAAA;qBAAK,CAAA,CAAA;gBAEnDrD,QAAS,CAAA;oBACPsD,QAAU,EAAA,UAAA;oBACV1C,MAAQ,EAAA,CAAC,UAAU,EAAEf,QAAU,CAAA;AACjC,iBAAA,CAAA;aACK,MAAA;gBACLG,QAAS,CAAA,GAAA,CAAA;AACX;SACK,MAAA;YACL,IAAIkC,gBAAAA,CAAiBa,GAAIjB,CAAAA,KAAK,CAAG,EAAA;gBAC/BtB,UAAW,CAAA,wBAAA,CAAA;AAEX,gBAAA,IAAIuC,GAAIjB,CAAAA,KAAK,CAACyB,IAAI,KAAK,iBAAmB,EAAA;oBACxCT,aAAcvB,CAAAA,sBAAAA,CAAuBwB,IAAIjB,KAAK,CAAA,CAAA;AAC9C,oBAAA;AACF;gBAEAvB,WAAYc,CAAAA,cAAAA,CAAe0B,IAAIjB,KAAK,CAAA,CAAA;AACtC;AACF;AACF,KAAA;AAEA,IAAA,IACE,CAACZ,KAAAA,IACAA,KAAMuC,CAAAA,MAAM,CAACC,QAAQ,KAAK,UAAA,IAAcxC,KAAMuC,CAAAA,MAAM,CAACC,QAAQ,KAAK,gBACnE,EAAA;AACA,QAAA,qBAAOC,GAACC,CAAAA,QAAAA,EAAAA;YAASC,EAAG,EAAA;;AACtB;AAEA,IAAA,MAAMC,mBAAsB5C,GAAAA,KAAAA,CAAMuC,MAAM,CAACC,QAAQ,KAAK,gBAAA;IAEtD,MAAMK,MAAAA,GAASD,sBAAsBzE,qBAAwB3B,GAAAA,oBAAAA;AAE7D,IAAA,qBACEiG,GAACK,CAAAA,qBAAAA,EAAAA;AACC,QAAA,QAAA,gBAAAC,IAACC,CAAAA,aAAAA,EAAAA;;8BACCD,IAACE,CAAAA,IAAAA,EAAAA;oBAAKC,SAAU,EAAA,QAAA;oBAASC,UAAW,EAAA,QAAA;oBAASC,GAAK,EAAA,CAAA;;sCAChDX,GAACY,CAAAA,IAAAA,EAAAA,EAAAA,CAAAA;sCAEDZ,GAACa,CAAAA,UAAAA,EAAAA;4BAAWC,GAAI,EAAA,IAAA;4BAAKC,OAAQ,EAAA,OAAA;4BAAQC,SAAU,EAAA,QAAA;sCAC5CjE,aAAc,CAAA;gCACbnC,EAAI,EAAA,yBAAA;gCACJE,cAAgB,EAAA;AAClB,6BAAA;;sCAEFkF,GAACa,CAAAA,UAAAA,EAAAA;4BAAWE,OAAQ,EAAA,SAAA;4BAAUE,SAAU,EAAA,YAAA;4BAAaD,SAAU,EAAA,QAAA;sCAC5DjE,aAAc,CAAA;gCACbnC,EAAI,EAAA,6BAAA;gCACJE,cACE,EAAA;AACJ,6BAAA;;AAED6B,wBAAAA,QAAAA,iBACCqD,GAACa,CAAAA,UAAAA,EAAAA;4BAAWjG,EAAG,EAAA,mBAAA;4BAAoBsG,IAAK,EAAA,OAAA;AAAQC,4BAAAA,QAAAA,EAAU,CAAC,CAAA;4BAAGF,SAAU,EAAA,WAAA;AACrEtE,4BAAAA,QAAAA,EAAAA;AAED,yBAAA,CAAA,GAAA;;;8BAENqD,GAACoB,CAAAA,IAAAA,EAAAA;oBACCC,MAAO,EAAA,MAAA;oBACPC,aACE,EAAA;AACEnH,wBAAAA,SAAAA,EAAW+D,UAAU/D,SAAa,IAAA,EAAA;AAClCM,wBAAAA,QAAAA,EAAUyD,UAAUzD,QAAY,IAAA,EAAA;AAChCqB,wBAAAA,KAAAA,EAAOoC,UAAUpC,KAAS,IAAA,EAAA;wBAC1BpB,QAAU,EAAA,EAAA;wBACVY,eAAiB,EAAA,EAAA;AACjBG,wBAAAA,iBAAAA,EAAmBA,iBAAqB8F,IAAAA,SAAAA;wBACxCtC,IAAM,EAAA;AACR,qBAAA;AAEFuC,oBAAAA,QAAAA,EAAU,OAAOvD,IAAMwD,EAAAA,OAAAA,GAAAA;AACrB,wBAAA,MAAMC,iBAAiBC,aAAc1D,CAAAA,IAAAA,CAAAA;wBAErC,IAAI;4BACF,MAAMmC,MAAAA,CAAOwB,QAAQ,CAACF,cAAgB,EAAA;gCAAEG,UAAY,EAAA;AAAM,6BAAA,CAAA;4BAE1D,IAAItF,WAAAA,GAAc,KAAK4D,mBAAqB,EAAA;AAC1CtD,gCAAAA,UAAAA,CAAW,+BAAiC,EAAA;AAAEiF,oCAAAA,KAAAA,EAAOvF,YAAYwF,QAAQ;AAAG,iCAAA,CAAA;AAC9E;4BAEA,IAAIL,cAAAA,CAAejG,iBAAiB,EAAE;gCACpCoE,kBACE,CAAA;AACE3B,oCAAAA,QAAAA,EAAU8D,KAAKN,cAAgB,EAAA;AAC7B,wCAAA,mBAAA;AACA,wCAAA,iBAAA;AACA,wCAAA,OAAA;AACA,wCAAA;AACD,qCAAA,CAAA;AACDjG,oCAAAA,iBAAAA,EAAmBiG,eAAejG,iBAAiB;AACnDwD,oCAAAA,IAAAA,EAAMyC,eAAezC;AACvB,iCAAA,EACAwC,QAAQQ,SAAS,CAAA;6BAEd,MAAA;gCACL,MAAMjD,mBAAAA,CACJgD,KAAKN,cAAgB,EAAA;AAAC,oCAAA,mBAAA;AAAqB,oCAAA;AAAkB,iCAAA,CAAA,EAC7DD,QAAQQ,SAAS,CAAA;AAErB;AACF,yBAAA,CAAE,OAAOC,GAAK,EAAA;AACZ,4BAAA,IAAIA,eAAeC,eAAiB,EAAA;AAClCV,gCAAAA,OAAAA,CAAQQ,SAAS,CACfC,GAAIE,CAAAA,KAAK,CAACC,MAAM,CAAyB,CAACC,GAAK,EAAA,EAAEjH,OAAO,EAAEkH,IAAI,EAAE,GAAA;oCAC9D,IAAIA,IAAAA,IAAQ,OAAOlH,OAAAA,KAAY,QAAU,EAAA;AACvC,wCAAA,MAAMmH,YAAenH,GAAAA,OAAAA;AACrBiH,wCAAAA,GAAG,CAACC,IAAK,CAAA,GAAGxF,aAAc1B,CAAAA,OAAAA,EAASmH,aAAazH,MAAM,CAAA;AACxD;oCACA,OAAOuH,GAAAA;AACT,iCAAA,EAAG,EAAC,CAAA,CAAA;AAER;AACA9F,4BAAAA,cAAAA,CAAeD,WAAc,GAAA,CAAA,CAAA;AAC/B;AACF,qBAAA;AAEA,oBAAA,QAAA,gBAAA+D,IAACE,CAAAA,IAAAA,EAAAA;wBAAKC,SAAU,EAAA,QAAA;wBAASC,UAAW,EAAA,SAAA;wBAAUC,GAAK,EAAA,CAAA;wBAAG8B,SAAW,EAAA,CAAA;;AAC/D,0CAAAzC,GAAA,CAAC0C,KAAKC,IAAI,EAAA;gCAAChC,GAAK,EAAA,CAAA;AACb,gCAAA,QAAA,EAAA;AACC,oCAAA;AACEiC,wCAAAA,KAAAA,EAAO7F,aAAc,CAAA;4CACnBnC,EAAI,EAAA,2BAAA;4CACJE,cAAgB,EAAA;AAClB,yCAAA,CAAA;wCACA8E,IAAM,EAAA,WAAA;wCACNtF,QAAU,EAAA,IAAA;wCACVuI,IAAM,EAAA,CAAA;wCACNrE,IAAM,EAAA;AACR,qCAAA;AACA,oCAAA;AACEoE,wCAAAA,KAAAA,EAAO7F,aAAc,CAAA;4CACnBnC,EAAI,EAAA,0BAAA;4CACJE,cAAgB,EAAA;AAClB,yCAAA,CAAA;wCACA8E,IAAM,EAAA,UAAA;wCACNiD,IAAM,EAAA,CAAA;wCACNrE,IAAM,EAAA;AACR,qCAAA;AACA,oCAAA;AACEsE,wCAAAA,QAAAA,EAAU,CAAC3C,mBAAAA;AACXyC,wCAAAA,KAAAA,EAAO7F,aAAc,CAAA;4CACnBnC,EAAI,EAAA,uBAAA;4CACJE,cAAgB,EAAA;AAClB,yCAAA,CAAA;wCACA8E,IAAM,EAAA,OAAA;wCACNtF,QAAU,EAAA,IAAA;wCACVuI,IAAM,EAAA,EAAA;wCACNrE,IAAM,EAAA;AACR,qCAAA;AACA,oCAAA;AACEuE,wCAAAA,IAAAA,EAAMhG,aAAc,CAAA;4CAClBnC,EAAI,EAAA,yBAAA;4CACJE,cACE,EAAA;AACJ,yCAAA,CAAA;AACA8H,wCAAAA,KAAAA,EAAO7F,aAAc,CAAA;4CACnBnC,EAAI,EAAA,iBAAA;4CACJE,cAAgB,EAAA;AAClB,yCAAA,CAAA;wCACA8E,IAAM,EAAA,UAAA;wCACNtF,QAAU,EAAA,IAAA;wCACVuI,IAAM,EAAA,EAAA;wCACNrE,IAAM,EAAA;AACR,qCAAA;AACA,oCAAA;AACEoE,wCAAAA,KAAAA,EAAO7F,aAAc,CAAA;4CACnBnC,EAAI,EAAA,iCAAA;4CACJE,cAAgB,EAAA;AAClB,yCAAA,CAAA;wCACA8E,IAAM,EAAA,iBAAA;wCACNtF,QAAU,EAAA,IAAA;wCACVuI,IAAM,EAAA,EAAA;wCACNrE,IAAM,EAAA;AACR,qCAAA;AACA,oCAAA;AACEoE,wCAAAA,KAAAA,EAAO7F,aACL,CAAA;4CACEnC,EAAI,EAAA,+BAAA;4CACJE,cACE,EAAA;yCAEJ,EAAA;AACEkI,4CAAAA,KAAAA,gBACEhD,GAACiD,CAAAA,CAAAA,EAAAA;gDAAEC,MAAO,EAAA,QAAA;gDAASC,IAAK,EAAA,yBAAA;gDAA0BC,GAAI,EAAA,YAAA;0DACnDrG,aAAc,CAAA;oDACbnC,EAAI,EAAA,qCAAA;oDACJE,cAAgB,EAAA;AAClB,iDAAA;;AAGJuI,4CAAAA,MAAAA,gBACErD,GAACiD,CAAAA,CAAAA,EAAAA;gDAAEC,MAAO,EAAA,QAAA;gDAASC,IAAK,EAAA,2BAAA;gDAA4BC,GAAI,EAAA,YAAA;0DACrDrG,aAAc,CAAA;oDACbnC,EAAI,EAAA,sCAAA;oDACJE,cAAgB,EAAA;AAClB,iDAAA;;AAGN,yCAAA,CAAA;wCAEF8E,IAAM,EAAA,MAAA;wCACNiD,IAAM,EAAA,EAAA;wCACNrE,IAAM,EAAA;AACR;iCACD,CAAC8E,GAAG,CAAC,CAAC,EAAET,IAAI,EAAE,GAAGU,KAAO,EAAA,iBACvBvD,GAAC0C,CAAAA,IAAAA,CAAKc,IAAI,EAAA;wCAERC,EAAI,EAAA,EAAA;wCACJC,CAAGb,EAAAA,IAAAA;wCACHpC,SAAU,EAAA,QAAA;wCACVC,UAAW,EAAA,SAAA;AAEX,wCAAA,QAAA,gBAAAV,GAAC2D,CAAAA,qBAAAA,EAAAA;AAAe,4CAAA,GAAGJ;;AANdA,qCAAAA,EAAAA,KAAAA,CAAM3D,IAAI,CAAA;;0CAUrBI,GAAC4D,CAAAA,MAAAA,EAAAA;gCAAOC,SAAS,EAAA,IAAA;gCAAChB,IAAK,EAAA,GAAA;gCAAIrE,IAAK,EAAA,QAAA;0CAC7BzB,aAAc,CAAA;oCACbnC,EAAI,EAAA,2BAAA;oCACJE,cAAgB,EAAA;AAClB,iCAAA;;;;;gBAILyC,KAAOuC,EAAAA,MAAAA,CAAOC,QAAa,KAAA,UAAA,kBAC1BC,GAAC8D,CAAAA,GAAAA,EAAAA;oBAAIC,UAAY,EAAA,CAAA;AACf,oBAAA,QAAA,gBAAA/D,GAACQ,CAAAA,IAAAA,EAAAA;wBAAKwD,cAAe,EAAA,QAAA;AACnB,wBAAA,QAAA,gBAAAhE,GAACiE,CAAAA,IAAAA,EAAAA;4BAAKnD,GAAKoD,EAAAA,OAAAA;4BAAShE,EAAG,EAAA,aAAA;sCACpBnD,aAAc,CAAA;gCACbnC,EAAI,EAAA,0BAAA;gCACJE,cAAgB,EAAA;AAClB,6BAAA;;;;;;;AAQhB;AAgBA;;IAGA,SAAS6G,cAAc1D,IAAwB,EAAA;IAC7C,OAAOkG,MAAAA,CAAOC,OAAO,CAACnG,IAAMoE,CAAAA,CAAAA,MAAM,CAChC,CAACC,GAAAA,EAAK,CAAC+B,GAAAA,EAAKpJ,KAAM,CAAA,GAAA;AAOhB,QAAA,IAAI,CAAC;AAAC,YAAA,UAAA;AAAY,YAAA;AAAkB,SAAA,CAACqJ,QAAQ,CAACD,GAAQ,CAAA,IAAA,OAAOpJ,UAAU,QAAU,EAAA;AAC/EqH,YAAAA,GAAG,CAAC+B,GAAAA,CAAgC,GAAGpJ,KAAAA,CAAMZ,IAAI,EAAA;AAEjD,YAAA,IAAIgK,QAAQ,UAAY,EAAA;gBACtB/B,GAAG,CAAC+B,GAAI,CAAA,GAAGpJ,KAASsG,IAAAA,SAAAA;AACtB;SACK,MAAA;YACLe,GAAG,CAAC+B,IAAoB,GAAGpJ,KAAAA;AAC7B;QAEA,OAAOqH,GAAAA;AACT,KAAA,EACA,EAAC,CAAA;AAUL;AAEA,MAAMW,CAAAA,GAAIsB,MAAOC,CAAAA,CAAC;SACT,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAMC,CAAAA,MAAM,CAACC,UAAU,CAAC;AAClD,CAAC;;;;"}
1
+ {"version":3,"file":"Register.mjs","sources":["../../../../../../../admin/src/pages/Auth/components/Register.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Grid, Typography, Link } from '@strapi/design-system';\nimport omit from 'lodash/omit';\nimport { type MessageDescriptor, type PrimitiveType, useIntl } from 'react-intl';\nimport { NavLink, Navigate, useNavigate, useMatch, useLocation } from 'react-router-dom';\nimport { styled } from 'styled-components';\nimport * as yup from 'yup';\nimport { ValidationError } from 'yup';\n\nimport {\n Register as RegisterUser,\n RegisterAdmin,\n} from '../../../../../shared/contracts/authentication';\nimport { Form, FormHelpers } from '../../../components/Form';\nimport { InputRenderer } from '../../../components/FormInputs/Renderer';\nimport { useNpsSurveySettings } from '../../../components/NpsSurvey';\nimport { Logo } from '../../../components/UnauthenticatedLogo';\nimport { useTypedDispatch } from '../../../core/store/hooks';\nimport { useNotification } from '../../../features/Notifications';\nimport { useTracking } from '../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../hooks/useAPIErrorHandler';\nimport { LayoutContent, UnauthenticatedLayout } from '../../../layouts/UnauthenticatedLayout';\nimport { login } from '../../../reducer';\nimport {\n useGetRegistrationInfoQuery,\n useRegisterAdminMutation,\n useRegisterUserMutation,\n} from '../../../services/auth';\nimport { isBaseQueryError } from '../../../utils/baseQuery';\nimport { getOrCreateDeviceId } from '../../../utils/deviceId';\nimport { getByteSize } from '../../../utils/strings';\nimport { translatedErrors } from '../../../utils/translatedErrors';\n\nconst REGISTER_USER_SCHEMA = yup.object().shape({\n firstname: yup.string().trim().required(translatedErrors.required).nullable(),\n lastname: yup.string().nullable(),\n password: yup\n .string()\n .min(8, {\n id: translatedErrors.minLength.id,\n defaultMessage: 'Password must be at least 8 characters',\n values: { min: 8 },\n })\n .test(\n 'max-bytes',\n {\n id: 'components.Input.error.contain.maxBytes',\n defaultMessage: 'Password must be less than 73 bytes',\n },\n function (value) {\n if (!value || typeof value !== 'string') return true; // validated elsewhere\n\n const byteSize = getByteSize(value);\n return byteSize <= 72;\n }\n )\n .test(\n 'lowercase',\n {\n message: {\n id: 'components.Input.error.contain.lowercase',\n defaultMessage: 'Password must contain at least 1 lowercase letter',\n },\n },\n (value) => {\n if (!value) return true;\n return /[a-z]/.test(value);\n }\n )\n .test(\n 'uppercase',\n {\n message: {\n id: 'components.Input.error.contain.uppercase',\n defaultMessage: 'Password must contain at least 1 uppercase letter',\n },\n },\n (value) => {\n if (!value) return true;\n return /[A-Z]/.test(value);\n }\n )\n .test(\n 'number',\n {\n message: {\n id: 'components.Input.error.contain.number',\n defaultMessage: 'Password must contain at least 1 number',\n },\n },\n (value) => {\n if (!value) return true;\n return /\\d/.test(value);\n }\n )\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Password is required',\n })\n .nullable(),\n confirmPassword: yup\n .string()\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Confirm password is required',\n })\n .oneOf([yup.ref('password'), null], {\n id: 'components.Input.error.password.noMatch',\n defaultMessage: 'Passwords must match',\n })\n .nullable(),\n registrationToken: yup.string().required({\n id: translatedErrors.required.id,\n defaultMessage: 'Registration token is required',\n }),\n});\n\nconst REGISTER_ADMIN_SCHEMA = yup.object().shape({\n firstname: yup\n .string()\n .trim()\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Firstname is required',\n })\n .nullable(),\n lastname: yup.string().nullable(),\n password: yup\n .string()\n .min(8, {\n id: translatedErrors.minLength.id,\n defaultMessage: 'Password must be at least 8 characters',\n values: { min: 8 },\n })\n .test(\n 'max-bytes',\n {\n id: 'components.Input.error.contain.maxBytes',\n defaultMessage: 'Password must be less than 73 bytes',\n },\n function (value) {\n if (!value) return true;\n return new TextEncoder().encode(value).length <= 72;\n }\n )\n .test(\n 'lowercase',\n {\n message: {\n id: 'components.Input.error.contain.lowercase',\n defaultMessage: 'Password must contain at least 1 lowercase letter',\n },\n },\n (value) => {\n if (!value) return true;\n return /[a-z]/.test(value);\n }\n )\n .test(\n 'uppercase',\n {\n message: {\n id: 'components.Input.error.contain.uppercase',\n defaultMessage: 'Password must contain at least 1 uppercase letter',\n },\n },\n (value) => {\n if (!value) return true;\n return /[A-Z]/.test(value);\n }\n )\n .test(\n 'number',\n {\n message: {\n id: 'components.Input.error.contain.number',\n defaultMessage: 'Password must contain at least 1 number',\n },\n },\n (value) => {\n if (!value) return true;\n return /\\d/.test(value);\n }\n )\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Password is required',\n })\n .nullable(),\n confirmPassword: yup\n .string()\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Confirm password is required',\n })\n .nullable()\n .oneOf([yup.ref('password'), null], {\n id: 'components.Input.error.password.noMatch',\n defaultMessage: 'Passwords must match',\n }),\n email: yup\n .string()\n .email({\n id: translatedErrors.email.id,\n defaultMessage: 'Not a valid email',\n })\n .strict()\n .lowercase({\n id: translatedErrors.lowercase.id,\n defaultMessage: 'Email must be lowercase',\n })\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Email is required',\n })\n .nullable(),\n});\n\ninterface RegisterProps {\n hasAdmin?: boolean;\n}\n\ninterface RegisterFormValues {\n firstname: string;\n lastname: string;\n email: string;\n password: string;\n confirmPassword: string;\n registrationToken: string | undefined;\n news: boolean;\n}\n\ninterface IntlFormattedMessage extends MessageDescriptor {\n values?: Record<string, PrimitiveType>;\n}\n\nconst Register = ({ hasAdmin }: RegisterProps) => {\n const { toggleNotification } = useNotification();\n const navigate = useNavigate();\n const [submitCount, setSubmitCount] = React.useState(0);\n const [apiError, setApiError] = React.useState<string>();\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const { search: searchString } = useLocation();\n const query = React.useMemo(() => new URLSearchParams(searchString), [searchString]);\n const match = useMatch('/auth/:authType');\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n const { setNpsSurveySettings } = useNpsSurveySettings();\n\n const registrationToken = query.get('registrationToken');\n\n const { data: userInfo, error } = useGetRegistrationInfoQuery(registrationToken as string, {\n skip: !registrationToken,\n });\n\n React.useEffect(() => {\n if (error) {\n const message: string = isBaseQueryError(error)\n ? formatAPIError(error)\n : (error.message ?? '');\n\n toggleNotification({\n type: 'danger',\n message,\n });\n\n navigate(`/auth/oops?info=${encodeURIComponent(message)}`);\n }\n }, [error, formatAPIError, navigate, toggleNotification]);\n\n const [registerAdmin] = useRegisterAdminMutation();\n const [registerUser] = useRegisterUserMutation();\n const dispatch = useTypedDispatch();\n\n const handleRegisterAdmin = async (\n { news, ...body }: RegisterAdmin.Request['body'] & { news: boolean },\n setFormErrors: FormHelpers<RegisterFormValues>['setErrors']\n ) => {\n const res = await registerAdmin({ ...body, deviceId: getOrCreateDeviceId() });\n\n if ('data' in res) {\n dispatch(login({ token: res.data.token }));\n\n if (news) {\n // Only enable EE survey if user accepted the newsletter\n setNpsSurveySettings((s) => ({ ...s, enabled: true }));\n\n navigate({\n pathname: '/usecase',\n search: `?hasAdmin=${true}`,\n });\n } else {\n navigate('/');\n }\n } else {\n if (isBaseQueryError(res.error)) {\n trackUsage('didNotCreateFirstAdmin');\n\n if (res.error.name === 'ValidationError') {\n setFormErrors(formatValidationErrors(res.error));\n return;\n }\n\n setApiError(formatAPIError(res.error));\n }\n }\n };\n\n const handleRegisterUser = async (\n { news, ...body }: RegisterUser.Request['body'] & { news: boolean },\n setFormErrors: FormHelpers<RegisterFormValues>['setErrors']\n ) => {\n const res = await registerUser({ ...body, deviceId: getOrCreateDeviceId() });\n\n if ('data' in res) {\n dispatch(login({ token: res.data.token }));\n\n if (news) {\n // Only enable EE survey if user accepted the newsletter\n setNpsSurveySettings((s) => ({ ...s, enabled: true }));\n\n navigate({\n pathname: '/usecase',\n search: `?hasAdmin=${hasAdmin}`,\n });\n } else {\n navigate('/');\n }\n } else {\n if (isBaseQueryError(res.error)) {\n trackUsage('didNotCreateFirstAdmin');\n\n if (res.error.name === 'ValidationError') {\n setFormErrors(formatValidationErrors(res.error));\n return;\n }\n\n setApiError(formatAPIError(res.error));\n }\n }\n };\n\n if (\n !match ||\n (match.params.authType !== 'register' && match.params.authType !== 'register-admin')\n ) {\n return <Navigate to=\"/\" />;\n }\n\n const isAdminRegistration = match.params.authType === 'register-admin';\n\n const schema = isAdminRegistration ? REGISTER_ADMIN_SCHEMA : REGISTER_USER_SCHEMA;\n\n return (\n <UnauthenticatedLayout>\n <LayoutContent>\n <Flex direction=\"column\" alignItems=\"center\" gap={3}>\n <Logo />\n\n <Typography tag=\"h1\" variant=\"alpha\" textAlign=\"center\">\n {formatMessage({\n id: 'Auth.form.welcome.title',\n defaultMessage: 'Welcome to Strapi!',\n })}\n </Typography>\n <Typography variant=\"epsilon\" textColor=\"neutral600\" textAlign=\"center\">\n {formatMessage({\n id: 'Auth.form.register.subtitle',\n defaultMessage:\n 'Credentials are only used to authenticate in Strapi. All saved data will be stored in your database.',\n })}\n </Typography>\n {apiError ? (\n <Typography id=\"global-form-error\" role=\"alert\" tabIndex={-1} textColor=\"danger600\">\n {apiError}\n </Typography>\n ) : null}\n </Flex>\n <Form\n method=\"POST\"\n initialValues={\n {\n firstname: userInfo?.firstname || '',\n lastname: userInfo?.lastname || '',\n email: userInfo?.email || '',\n password: '',\n confirmPassword: '',\n registrationToken: registrationToken || undefined,\n news: false,\n } satisfies RegisterFormValues\n }\n onSubmit={async (data, helpers) => {\n const normalizedData = normalizeData(data);\n\n try {\n await schema.validate(normalizedData, { abortEarly: false });\n\n if (submitCount > 0 && isAdminRegistration) {\n trackUsage('didSubmitWithErrorsFirstAdmin', { count: submitCount.toString() });\n }\n\n if (normalizedData.registrationToken) {\n handleRegisterUser(\n {\n userInfo: omit(normalizedData, [\n 'registrationToken',\n 'confirmPassword',\n 'email',\n 'news',\n ]),\n registrationToken: normalizedData.registrationToken,\n news: normalizedData.news,\n },\n helpers.setErrors\n );\n } else {\n await handleRegisterAdmin(\n omit(normalizedData, ['registrationToken', 'confirmPassword']),\n helpers.setErrors\n );\n }\n } catch (err) {\n if (err instanceof ValidationError) {\n const formatDescriptor = (msg: any) => {\n try {\n if (!msg) return '';\n if (typeof msg === 'string') return msg;\n // Direct descriptor\n if ('id' in msg && 'defaultMessage' in msg) return formatMessage(msg as any);\n // Wrapped descriptor: { message: { id, defaultMessage } }\n if (msg.message && typeof msg.message === 'object' && 'id' in msg.message) {\n return formatMessage(msg.message as any);\n }\n // errors array: [{ id, defaultMessage }]\n if (Array.isArray(msg.errors) && msg.errors.length > 0) {\n const first = msg.errors[0];\n if (typeof first === 'string') return first;\n if (first && typeof first === 'object' && 'id' in first)\n return formatMessage(first as any);\n }\n // fallback to defaultMessage if present\n if ('defaultMessage' in msg) return msg.defaultMessage;\n return String(msg);\n } catch (e) {\n return String(msg);\n }\n };\n\n const computed = err.inner.reduce<Record<string, string>>(\n (acc, { message, path }) => {\n if (!path) return acc;\n acc[path] = formatDescriptor(message);\n return acc;\n },\n {}\n );\n\n helpers.setErrors(computed);\n }\n\n setSubmitCount(submitCount + 1);\n }\n }}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6} marginTop={7}>\n <Grid.Root gap={4}>\n {[\n {\n label: formatMessage({\n id: 'Auth.form.firstname.label',\n defaultMessage: 'Firstname',\n }),\n name: 'firstname',\n required: true,\n size: 6,\n type: 'string' as const,\n },\n {\n label: formatMessage({\n id: 'Auth.form.lastname.label',\n defaultMessage: 'Lastname',\n }),\n name: 'lastname',\n size: 6,\n type: 'string' as const,\n },\n {\n disabled: !isAdminRegistration,\n label: formatMessage({\n id: 'Auth.form.email.label',\n defaultMessage: 'Email',\n }),\n name: 'email',\n required: true,\n size: 12,\n type: 'email' as const,\n },\n {\n hint: formatMessage({\n id: 'Auth.form.password.hint',\n defaultMessage:\n 'Must be at least 8 characters, 1 uppercase, 1 lowercase & 1 number',\n }),\n label: formatMessage({\n id: 'global.password',\n defaultMessage: 'Password',\n }),\n name: 'password',\n required: true,\n size: 12,\n type: 'password' as const,\n },\n {\n label: formatMessage({\n id: 'Auth.form.confirmPassword.label',\n defaultMessage: 'Confirm Password',\n }),\n name: 'confirmPassword',\n required: true,\n size: 12,\n type: 'password' as const,\n },\n {\n label: formatMessage(\n {\n id: 'Auth.form.register.news.label',\n defaultMessage:\n 'Keep me updated about new features & upcoming improvements (by doing this you accept the {terms} and the {policy}).',\n },\n {\n terms: (\n <A target=\"_blank\" href=\"https://strapi.io/terms\" rel=\"noreferrer\">\n {formatMessage({\n id: 'Auth.privacy-policy-agreement.terms',\n defaultMessage: 'terms',\n })}\n </A>\n ),\n policy: (\n <A target=\"_blank\" href=\"https://strapi.io/privacy\" rel=\"noreferrer\">\n {formatMessage({\n id: 'Auth.privacy-policy-agreement.policy',\n defaultMessage: 'policy',\n })}\n </A>\n ),\n }\n ),\n name: 'news',\n size: 12,\n type: 'checkbox' as const,\n },\n ].map(({ size, ...field }) => (\n <Grid.Item\n key={field.name}\n xs={12}\n m={size}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <InputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n <Button fullWidth size=\"L\" type=\"submit\">\n {formatMessage({\n id: 'Auth.form.button.register',\n defaultMessage: \"Let's start\",\n })}\n </Button>\n </Flex>\n </Form>\n {match?.params.authType === 'register' && (\n <Box paddingTop={4}>\n <Flex justifyContent=\"center\">\n <Link tag={NavLink} to=\"/auth/login\">\n {formatMessage({\n id: 'Auth.link.signin.account',\n defaultMessage: 'Already have an account?',\n })}\n </Link>\n </Flex>\n </Box>\n )}\n </LayoutContent>\n </UnauthenticatedLayout>\n );\n};\n\ntype StringKeys<T> = {\n [K in keyof T]: T[K] extends string | undefined ? K : never;\n}[keyof T];\n\n/**\n * @description Trims all values but the password & sets lastName to null if it's a falsey value.\n */\nfunction normalizeData(data: RegisterFormValues) {\n return Object.entries(data).reduce(\n (acc, [key, value]) => {\n type PasswordKeys = Extract<keyof RegisterFormValues, 'password' | 'confirmPassword'>;\n type RegisterFormStringValues = Exclude<\n keyof Pick<RegisterFormValues, StringKeys<RegisterFormValues>>,\n PasswordKeys\n >;\n\n if (!['password', 'confirmPassword'].includes(key) && typeof value === 'string') {\n acc[key as RegisterFormStringValues] = value.trim();\n\n if (key === 'lastname') {\n acc[key] = value || undefined;\n }\n } else {\n acc[key as PasswordKeys] = value;\n }\n\n return acc;\n },\n {} as {\n firstname: string;\n lastname: string | undefined;\n email: string;\n password: string;\n confirmPassword: string;\n registrationToken: string | undefined;\n news: boolean;\n }\n );\n}\n\nconst A = styled.a`\n color: ${({ theme }) => theme.colors.primary600};\n`;\n\nexport { Register };\nexport type { RegisterProps };\n"],"names":["REGISTER_USER_SCHEMA","yup","object","shape","firstname","string","trim","required","translatedErrors","nullable","lastname","password","min","id","minLength","defaultMessage","values","test","value","byteSize","getByteSize","message","confirmPassword","oneOf","ref","registrationToken","REGISTER_ADMIN_SCHEMA","TextEncoder","encode","length","email","strict","lowercase","Register","hasAdmin","toggleNotification","useNotification","navigate","useNavigate","submitCount","setSubmitCount","React","useState","apiError","setApiError","trackUsage","useTracking","formatMessage","useIntl","search","searchString","useLocation","query","useMemo","URLSearchParams","match","useMatch","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","setNpsSurveySettings","useNpsSurveySettings","get","data","userInfo","error","useGetRegistrationInfoQuery","skip","useEffect","isBaseQueryError","type","encodeURIComponent","registerAdmin","useRegisterAdminMutation","registerUser","useRegisterUserMutation","dispatch","useTypedDispatch","handleRegisterAdmin","news","body","setFormErrors","res","deviceId","getOrCreateDeviceId","login","token","s","enabled","pathname","name","handleRegisterUser","params","authType","_jsx","Navigate","to","isAdminRegistration","schema","UnauthenticatedLayout","_jsxs","LayoutContent","Flex","direction","alignItems","gap","Logo","Typography","tag","variant","textAlign","textColor","role","tabIndex","Form","method","initialValues","undefined","onSubmit","helpers","normalizedData","normalizeData","validate","abortEarly","count","toString","omit","setErrors","err","ValidationError","formatDescriptor","msg","Array","isArray","errors","first","String","e","computed","inner","reduce","acc","path","marginTop","Grid","Root","label","size","disabled","hint","terms","A","target","href","rel","policy","map","field","Item","xs","m","InputRenderer","Button","fullWidth","Box","paddingTop","justifyContent","Link","NavLink","Object","entries","key","includes","styled","a","theme","colors","primary600"],"mappings":"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"}
@@ -53,21 +53,30 @@ const RESET_PASSWORD_SCHEMA = yup__namespace.object().shape({
53
53
  if (!value || typeof value !== 'string') return true; // validated elsewhere
54
54
  const byteSize = strings.getByteSize(value);
55
55
  return byteSize <= 72;
56
- }).matches(/[a-z]/, {
56
+ }).test('lowercase', {
57
57
  message: {
58
58
  id: 'components.Input.error.contain.lowercase',
59
59
  defaultMessage: 'Password must contain at least 1 lowercase letter'
60
60
  }
61
- }).matches(/[A-Z]/, {
61
+ }, (value)=>{
62
+ if (!value) return true;
63
+ return /[a-z]/.test(value);
64
+ }).test('uppercase', {
62
65
  message: {
63
66
  id: 'components.Input.error.contain.uppercase',
64
67
  defaultMessage: 'Password must contain at least 1 uppercase letter'
65
68
  }
66
- }).matches(/\d/, {
69
+ }, (value)=>{
70
+ if (!value) return true;
71
+ return /[A-Z]/.test(value);
72
+ }).test('number', {
67
73
  message: {
68
74
  id: 'components.Input.error.contain.number',
69
75
  defaultMessage: 'Password must contain at least 1 number'
70
76
  }
77
+ }, (value)=>{
78
+ if (!value) return true;
79
+ return /\d/.test(value);
71
80
  }).required({
72
81
  id: translatedErrors.translatedErrors.required.id,
73
82
  defaultMessage: 'Password is required'
@@ -1 +1 @@
1
- {"version":3,"file":"ResetPassword.js","sources":["../../../../../../../admin/src/pages/Auth/components/ResetPassword.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Main, Typography, Link } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate, Navigate, useLocation } from 'react-router-dom';\nimport * as yup from 'yup';\n\nimport { ResetPassword } from '../../../../../shared/contracts/authentication';\nimport { Form } from '../../../components/Form';\nimport { InputRenderer } from '../../../components/FormInputs/Renderer';\nimport { Logo } from '../../../components/UnauthenticatedLogo';\nimport { useTypedDispatch } from '../../../core/store/hooks';\nimport { useAPIErrorHandler } from '../../../hooks/useAPIErrorHandler';\nimport {\n Column,\n LayoutContent,\n UnauthenticatedLayout,\n} from '../../../layouts/UnauthenticatedLayout';\nimport { login } from '../../../reducer';\nimport { useResetPasswordMutation } from '../../../services/auth';\nimport { isBaseQueryError } from '../../../utils/baseQuery';\nimport { getByteSize } from '../../../utils/strings';\nimport { translatedErrors } from '../../../utils/translatedErrors';\n\nconst RESET_PASSWORD_SCHEMA = yup.object().shape({\n password: yup\n .string()\n .min(8, {\n id: translatedErrors.minLength.id,\n defaultMessage: 'Password must be at least 8 characters',\n values: { min: 8 },\n })\n // bcrypt has a max length of 72 bytes (not characters!)\n .test(\n 'required-byte-size',\n {\n id: 'components.Input.error.contain.maxBytes',\n defaultMessage: 'Password must be less than 73 bytes',\n },\n function (value) {\n if (!value || typeof value !== 'string') return true; // validated elsewhere\n\n const byteSize = getByteSize(value);\n return byteSize <= 72;\n }\n )\n .matches(/[a-z]/, {\n message: {\n id: 'components.Input.error.contain.lowercase',\n defaultMessage: 'Password must contain at least 1 lowercase letter',\n },\n })\n .matches(/[A-Z]/, {\n message: {\n id: 'components.Input.error.contain.uppercase',\n defaultMessage: 'Password must contain at least 1 uppercase letter',\n },\n })\n .matches(/\\d/, {\n message: {\n id: 'components.Input.error.contain.number',\n defaultMessage: 'Password must contain at least 1 number',\n },\n })\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Password is required',\n })\n .nullable(),\n confirmPassword: yup\n .string()\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Confirm password is required',\n })\n .oneOf([yup.ref('password'), null], {\n id: 'components.Input.error.password.noMatch',\n defaultMessage: 'Passwords must match',\n })\n .nullable(),\n});\n\nconst ResetPassword = () => {\n const { formatMessage } = useIntl();\n const dispatch = useTypedDispatch();\n const navigate = useNavigate();\n const { search: searchString } = useLocation();\n const query = React.useMemo(() => new URLSearchParams(searchString), [searchString]);\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const [resetPassword, { error }] = useResetPasswordMutation();\n\n const handleSubmit = async (body: ResetPassword.Request['body']) => {\n const res = await resetPassword(body);\n\n if ('data' in res) {\n dispatch(login({ token: res.data.token }));\n navigate('/');\n }\n };\n /**\n * If someone doesn't have a reset password token\n * then they should just be redirected back to the login page.\n */\n if (!query.get('code')) {\n return <Navigate to=\"/auth/login\" />;\n }\n\n return (\n <UnauthenticatedLayout>\n <Main>\n <LayoutContent>\n <Column>\n <Logo />\n <Box paddingTop={6} paddingBottom={7}>\n <Typography tag=\"h1\" variant=\"alpha\">\n {formatMessage({\n id: 'global.reset-password',\n defaultMessage: 'Reset password',\n })}\n </Typography>\n </Box>\n {error ? (\n <Typography id=\"global-form-error\" role=\"alert\" tabIndex={-1} textColor=\"danger600\">\n {isBaseQueryError(error)\n ? formatAPIError(error)\n : formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n })}\n </Typography>\n ) : null}\n </Column>\n <Form\n method=\"POST\"\n initialValues={{\n password: '',\n confirmPassword: '',\n }}\n onSubmit={(values) => {\n // We know query.code is defined because we check for it above.\n handleSubmit({ password: values.password, resetPasswordToken: query.get('code')! });\n }}\n validationSchema={RESET_PASSWORD_SCHEMA}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {[\n {\n hint: formatMessage({\n id: 'Auth.form.password.hint',\n defaultMessage:\n 'Password must contain at least 8 characters, 1 uppercase, 1 lowercase and 1 number',\n }),\n label: formatMessage({\n id: 'global.password',\n defaultMessage: 'Password',\n }),\n name: 'password',\n required: true,\n type: 'password' as const,\n },\n {\n label: formatMessage({\n id: 'Auth.form.confirmPassword.label',\n defaultMessage: 'Confirm Password',\n }),\n name: 'confirmPassword',\n required: true,\n type: 'password' as const,\n },\n ].map((field) => (\n <InputRenderer key={field.name} {...field} />\n ))}\n <Button fullWidth type=\"submit\">\n {formatMessage({\n id: 'global.change-password',\n defaultMessage: 'Change password',\n })}\n </Button>\n </Flex>\n </Form>\n </LayoutContent>\n <Flex justifyContent=\"center\">\n <Box paddingTop={4}>\n <Link tag={NavLink} to=\"/auth/login\">\n {formatMessage({ id: 'Auth.link.ready', defaultMessage: 'Ready to sign in?' })}\n </Link>\n </Box>\n </Flex>\n </Main>\n </UnauthenticatedLayout>\n );\n};\n\nexport { ResetPassword };\n"],"names":["RESET_PASSWORD_SCHEMA","yup","object","shape","password","string","min","id","translatedErrors","minLength","defaultMessage","values","test","value","byteSize","getByteSize","matches","message","required","nullable","confirmPassword","oneOf","ref","ResetPassword","formatMessage","useIntl","dispatch","useTypedDispatch","navigate","useNavigate","search","searchString","useLocation","query","React","useMemo","URLSearchParams","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","resetPassword","error","useResetPasswordMutation","handleSubmit","body","res","login","token","data","get","_jsx","Navigate","to","UnauthenticatedLayout","_jsxs","Main","LayoutContent","Column","Logo","Box","paddingTop","paddingBottom","Typography","tag","variant","role","tabIndex","textColor","isBaseQueryError","Form","method","initialValues","onSubmit","resetPasswordToken","validationSchema","Flex","direction","alignItems","gap","hint","label","name","type","map","field","InputRenderer","Button","fullWidth","justifyContent","Link","NavLink"],"mappings":"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"}
1
+ {"version":3,"file":"ResetPassword.js","sources":["../../../../../../../admin/src/pages/Auth/components/ResetPassword.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Main, Typography, Link } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useNavigate, Navigate, useLocation } from 'react-router-dom';\nimport * as yup from 'yup';\n\nimport { ResetPassword } from '../../../../../shared/contracts/authentication';\nimport { Form } from '../../../components/Form';\nimport { InputRenderer } from '../../../components/FormInputs/Renderer';\nimport { Logo } from '../../../components/UnauthenticatedLogo';\nimport { useTypedDispatch } from '../../../core/store/hooks';\nimport { useAPIErrorHandler } from '../../../hooks/useAPIErrorHandler';\nimport {\n Column,\n LayoutContent,\n UnauthenticatedLayout,\n} from '../../../layouts/UnauthenticatedLayout';\nimport { login } from '../../../reducer';\nimport { useResetPasswordMutation } from '../../../services/auth';\nimport { isBaseQueryError } from '../../../utils/baseQuery';\nimport { getByteSize } from '../../../utils/strings';\nimport { translatedErrors } from '../../../utils/translatedErrors';\n\nconst RESET_PASSWORD_SCHEMA = yup.object().shape({\n password: yup\n .string()\n .min(8, {\n id: translatedErrors.minLength.id,\n defaultMessage: 'Password must be at least 8 characters',\n values: { min: 8 },\n })\n // bcrypt has a max length of 72 bytes (not characters!)\n .test(\n 'required-byte-size',\n {\n id: 'components.Input.error.contain.maxBytes',\n defaultMessage: 'Password must be less than 73 bytes',\n },\n function (value) {\n if (!value || typeof value !== 'string') return true; // validated elsewhere\n\n const byteSize = getByteSize(value);\n return byteSize <= 72;\n }\n )\n .test(\n 'lowercase',\n {\n message: {\n id: 'components.Input.error.contain.lowercase',\n defaultMessage: 'Password must contain at least 1 lowercase letter',\n },\n },\n (value) => {\n if (!value) return true;\n return /[a-z]/.test(value);\n }\n )\n .test(\n 'uppercase',\n {\n message: {\n id: 'components.Input.error.contain.uppercase',\n defaultMessage: 'Password must contain at least 1 uppercase letter',\n },\n },\n (value) => {\n if (!value) return true;\n return /[A-Z]/.test(value);\n }\n )\n .test(\n 'number',\n {\n message: {\n id: 'components.Input.error.contain.number',\n defaultMessage: 'Password must contain at least 1 number',\n },\n },\n (value) => {\n if (!value) return true;\n return /\\d/.test(value);\n }\n )\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Password is required',\n })\n .nullable(),\n confirmPassword: yup\n .string()\n .required({\n id: translatedErrors.required.id,\n defaultMessage: 'Confirm password is required',\n })\n .oneOf([yup.ref('password'), null], {\n id: 'components.Input.error.password.noMatch',\n defaultMessage: 'Passwords must match',\n })\n .nullable(),\n});\n\nconst ResetPassword = () => {\n const { formatMessage } = useIntl();\n const dispatch = useTypedDispatch();\n const navigate = useNavigate();\n const { search: searchString } = useLocation();\n const query = React.useMemo(() => new URLSearchParams(searchString), [searchString]);\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const [resetPassword, { error }] = useResetPasswordMutation();\n\n const handleSubmit = async (body: ResetPassword.Request['body']) => {\n const res = await resetPassword(body);\n\n if ('data' in res) {\n dispatch(login({ token: res.data.token }));\n navigate('/');\n }\n };\n /**\n * If someone doesn't have a reset password token\n * then they should just be redirected back to the login page.\n */\n if (!query.get('code')) {\n return <Navigate to=\"/auth/login\" />;\n }\n\n return (\n <UnauthenticatedLayout>\n <Main>\n <LayoutContent>\n <Column>\n <Logo />\n <Box paddingTop={6} paddingBottom={7}>\n <Typography tag=\"h1\" variant=\"alpha\">\n {formatMessage({\n id: 'global.reset-password',\n defaultMessage: 'Reset password',\n })}\n </Typography>\n </Box>\n {error ? (\n <Typography id=\"global-form-error\" role=\"alert\" tabIndex={-1} textColor=\"danger600\">\n {isBaseQueryError(error)\n ? formatAPIError(error)\n : formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred',\n })}\n </Typography>\n ) : null}\n </Column>\n <Form\n method=\"POST\"\n initialValues={{\n password: '',\n confirmPassword: '',\n }}\n onSubmit={(values) => {\n // We know query.code is defined because we check for it above.\n handleSubmit({ password: values.password, resetPasswordToken: query.get('code')! });\n }}\n validationSchema={RESET_PASSWORD_SCHEMA}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {[\n {\n hint: formatMessage({\n id: 'Auth.form.password.hint',\n defaultMessage:\n 'Password must contain at least 8 characters, 1 uppercase, 1 lowercase and 1 number',\n }),\n label: formatMessage({\n id: 'global.password',\n defaultMessage: 'Password',\n }),\n name: 'password',\n required: true,\n type: 'password' as const,\n },\n {\n label: formatMessage({\n id: 'Auth.form.confirmPassword.label',\n defaultMessage: 'Confirm Password',\n }),\n name: 'confirmPassword',\n required: true,\n type: 'password' as const,\n },\n ].map((field) => (\n <InputRenderer key={field.name} {...field} />\n ))}\n <Button fullWidth type=\"submit\">\n {formatMessage({\n id: 'global.change-password',\n defaultMessage: 'Change password',\n })}\n </Button>\n </Flex>\n </Form>\n </LayoutContent>\n <Flex justifyContent=\"center\">\n <Box paddingTop={4}>\n <Link tag={NavLink} to=\"/auth/login\">\n {formatMessage({ id: 'Auth.link.ready', defaultMessage: 'Ready to sign in?' })}\n </Link>\n </Box>\n </Flex>\n </Main>\n </UnauthenticatedLayout>\n );\n};\n\nexport { ResetPassword };\n"],"names":["RESET_PASSWORD_SCHEMA","yup","object","shape","password","string","min","id","translatedErrors","minLength","defaultMessage","values","test","value","byteSize","getByteSize","message","required","nullable","confirmPassword","oneOf","ref","ResetPassword","formatMessage","useIntl","dispatch","useTypedDispatch","navigate","useNavigate","search","searchString","useLocation","query","React","useMemo","URLSearchParams","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","resetPassword","error","useResetPasswordMutation","handleSubmit","body","res","login","token","data","get","_jsx","Navigate","to","UnauthenticatedLayout","_jsxs","Main","LayoutContent","Column","Logo","Box","paddingTop","paddingBottom","Typography","tag","variant","role","tabIndex","textColor","isBaseQueryError","Form","method","initialValues","onSubmit","resetPasswordToken","validationSchema","Flex","direction","alignItems","gap","hint","label","name","type","map","field","InputRenderer","Button","fullWidth","justifyContent","Link","NavLink"],"mappings":"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"}