@alore/auth-react-ui 1.2.0-alpha.22 → 1.2.0-alpha.24

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 (79) hide show
  1. package/dist/cjs/auth/ForgotPassword.js +24 -4
  2. package/dist/cjs/auth/ForgotPassword.js.map +1 -1
  3. package/dist/cjs/auth/Login.js +79 -72
  4. package/dist/cjs/auth/Login.js.map +1 -1
  5. package/dist/cjs/auth/Register.js +109 -66
  6. package/dist/cjs/auth/Register.js.map +1 -1
  7. package/dist/cjs/components/Auth.js +7 -2
  8. package/dist/cjs/components/Auth.js.map +1 -1
  9. package/dist/cjs/components/AuthProvider.d.ts +16 -0
  10. package/dist/cjs/components/BackButton.js +1 -1
  11. package/dist/cjs/components/BackButton.js.map +1 -1
  12. package/dist/cjs/components/CheckboxForm.js +2 -2
  13. package/dist/cjs/components/CheckboxForm.js.map +1 -1
  14. package/dist/cjs/components/InputForm.d.ts +2 -1
  15. package/dist/cjs/components/InputForm.js +2 -2
  16. package/dist/cjs/components/InputForm.js.map +1 -1
  17. package/dist/cjs/components/InputOTP.js +1 -1
  18. package/dist/cjs/components/InputOTP.js.map +1 -1
  19. package/dist/cjs/components/LinkButton.d.ts +14 -0
  20. package/dist/cjs/components/LinkButton.js +29 -0
  21. package/dist/cjs/components/LinkButton.js.map +1 -0
  22. package/dist/cjs/components/index.d.ts +1 -0
  23. package/dist/cjs/components/index.js +3 -1
  24. package/dist/cjs/components/index.js.map +1 -1
  25. package/dist/cjs/dictionaries/en.json +1 -0
  26. package/dist/cjs/dictionaries/pt.json +8 -7
  27. package/dist/cjs/get-dictionary.d.ts +3 -0
  28. package/dist/cjs/hooks/useAuthService.d.ts +48 -0
  29. package/dist/cjs/hooks/useAuthServiceInstance.d.ts +16 -0
  30. package/dist/cjs/hooks/useDictionary.d.ts +1 -0
  31. package/dist/cjs/machine/index.d.ts +32 -0
  32. package/dist/cjs/machine/index.js +58 -0
  33. package/dist/cjs/machine/index.js.map +1 -1
  34. package/dist/cjs/machine/types.d.ts +13 -1
  35. package/dist/cjs/styles/themes.js +2 -2
  36. package/dist/cjs/styles/themes.js.map +1 -1
  37. package/dist/cjs/utils/passkeyExtensions.d.ts +55 -0
  38. package/dist/cjs/utils/passkeyExtensions.js +77 -0
  39. package/dist/cjs/utils/passkeyExtensions.js.map +1 -0
  40. package/dist/mjs/auth/ForgotPassword.js +25 -5
  41. package/dist/mjs/auth/ForgotPassword.js.map +1 -1
  42. package/dist/mjs/auth/Login.js +79 -71
  43. package/dist/mjs/auth/Login.js.map +1 -1
  44. package/dist/mjs/auth/Register.js +110 -67
  45. package/dist/mjs/auth/Register.js.map +1 -1
  46. package/dist/mjs/components/Auth.js +7 -2
  47. package/dist/mjs/components/Auth.js.map +1 -1
  48. package/dist/mjs/components/AuthProvider.d.ts +16 -0
  49. package/dist/mjs/components/BackButton.js +1 -1
  50. package/dist/mjs/components/BackButton.js.map +1 -1
  51. package/dist/mjs/components/CheckboxForm.js +2 -2
  52. package/dist/mjs/components/CheckboxForm.js.map +1 -1
  53. package/dist/mjs/components/InputForm.d.ts +2 -1
  54. package/dist/mjs/components/InputForm.js +2 -2
  55. package/dist/mjs/components/InputForm.js.map +1 -1
  56. package/dist/mjs/components/InputOTP.js +1 -1
  57. package/dist/mjs/components/InputOTP.js.map +1 -1
  58. package/dist/mjs/components/LinkButton.d.ts +14 -0
  59. package/dist/mjs/components/LinkButton.js +10 -0
  60. package/dist/mjs/components/LinkButton.js.map +1 -0
  61. package/dist/mjs/components/index.d.ts +1 -0
  62. package/dist/mjs/components/index.js +1 -0
  63. package/dist/mjs/components/index.js.map +1 -1
  64. package/dist/mjs/dictionaries/en.json +1 -0
  65. package/dist/mjs/dictionaries/pt.json +8 -7
  66. package/dist/mjs/get-dictionary.d.ts +3 -0
  67. package/dist/mjs/hooks/useAuthService.d.ts +48 -0
  68. package/dist/mjs/hooks/useAuthServiceInstance.d.ts +16 -0
  69. package/dist/mjs/hooks/useDictionary.d.ts +1 -0
  70. package/dist/mjs/machine/index.d.ts +32 -0
  71. package/dist/mjs/machine/index.js +55 -0
  72. package/dist/mjs/machine/index.js.map +1 -1
  73. package/dist/mjs/machine/types.d.ts +13 -1
  74. package/dist/mjs/styles/themes.js +3 -2
  75. package/dist/mjs/styles/themes.js.map +1 -1
  76. package/dist/mjs/utils/passkeyExtensions.d.ts +55 -0
  77. package/dist/mjs/utils/passkeyExtensions.js +71 -0
  78. package/dist/mjs/utils/passkeyExtensions.js.map +1 -0
  79. package/package.json +6 -4
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ /**
3
+ * JOO-1792 / joori#2670: PRF and largeBlob WebAuthn extensions exist to transport the
4
+ * wallet encryption secret. They must only be requested — and only be REQUIRED — when
5
+ * wallet creation is enabled. With wallets disabled (the Joori deployment shape), a
6
+ * passkey without PRF support must register and log in normally instead of freezing or
7
+ * failing (previously the first-auth and login ceremonies requested prf unconditionally
8
+ * and treated a missing secret as fatal, freezing the signup spinner after the account
9
+ * had already been created server-side).
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.resolveWalletSecret = exports.buildWalletExtensions = void 0;
13
+ const PRF_SALT = 'Alore';
14
+ /**
15
+ * Build the WebAuthn extension request for a ceremony. Returns an empty object when
16
+ * wallet creation is disabled so no PRF/largeBlob negotiation happens at all.
17
+ */
18
+ function buildWalletExtensions(purpose, enableWalletCreation, options = {}) {
19
+ if (!enableWalletCreation) {
20
+ return {};
21
+ }
22
+ const prf = { eval: { first: new TextEncoder().encode(PRF_SALT) } };
23
+ if (purpose === 'registration') {
24
+ return { prf, largeBlob: { support: 'preferred' } };
25
+ }
26
+ if (purpose === 'first-auth') {
27
+ const extensions = { prf };
28
+ if (options.singleAllowCredential && options.largeBlobWriteSecret) {
29
+ extensions.largeBlob = { write: options.largeBlobWriteSecret };
30
+ }
31
+ return extensions;
32
+ }
33
+ return { prf, largeBlob: { read: true } };
34
+ }
35
+ exports.buildWalletExtensions = buildWalletExtensions;
36
+ /**
37
+ * Resolve the wallet secret from a ceremony's client extension results. With wallets
38
+ * disabled the outcome is always supported (no secret is needed or derivable). With
39
+ * wallets enabled the previous semantics are preserved exactly, including the Safari
40
+ * largeBlob workaround.
41
+ */
42
+ function resolveWalletSecret(enableWalletCreation,
43
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
44
+ extensionResults, options = {}) {
45
+ var _a, _b, _c, _d;
46
+ if (!enableWalletCreation) {
47
+ return { supported: true };
48
+ }
49
+ const prfSecret = (_b = (_a = extensionResults === null || extensionResults === void 0 ? void 0 : extensionResults.prf) === null || _a === void 0 ? void 0 : _a.results) === null || _b === void 0 ? void 0 : _b.first;
50
+ // first-auth (write mode): the secret is the blob we wrote, not a returned value.
51
+ const blobWritten = !!((_c = extensionResults === null || extensionResults === void 0 ? void 0 : extensionResults.largeBlob) === null || _c === void 0 ? void 0 : _c.written);
52
+ // login (read mode): largeBlob.blob is the stored secret itself.
53
+ const blobRead = (_d = extensionResults === null || extensionResults === void 0 ? void 0 : extensionResults.largeBlob) === null || _d === void 0 ? void 0 : _d.blob;
54
+ // Safari quirk (preserved from the original implementation): when Safari reports
55
+ // a largeBlob result alongside PRF, the blob wins — pre-refactor wallets on Safari
56
+ // derived their key from the blob, so preferring PRF would break them.
57
+ if (options.isSafari) {
58
+ if (blobWritten && options.largeBlobWriteSecret) {
59
+ return { supported: true, secret: options.largeBlobWriteSecret };
60
+ }
61
+ if (blobRead) {
62
+ return { supported: true, secret: blobRead };
63
+ }
64
+ }
65
+ if (prfSecret) {
66
+ return { supported: true, secret: prfSecret };
67
+ }
68
+ if (blobWritten && options.largeBlobWriteSecret) {
69
+ return { supported: true, secret: options.largeBlobWriteSecret };
70
+ }
71
+ if (blobRead) {
72
+ return { supported: true, secret: blobRead };
73
+ }
74
+ return { supported: false };
75
+ }
76
+ exports.resolveWalletSecret = resolveWalletSecret;
77
+ //# sourceMappingURL=passkeyExtensions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passkeyExtensions.js","sourceRoot":"","sources":["../../../src/utils/passkeyExtensions.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAEH,MAAM,QAAQ,GAAG,OAAO,CAAC;AAgBzB;;;GAGG;AACH,SAAgB,qBAAqB,CACnC,OAA+B,EAC/B,oBAA6B,EAC7B,UAAwC,EAAE;IAE1C,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;IAEpE,IAAI,OAAO,KAAK,cAAc,EAAE,CAAC;QAC/B,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,WAAoB,EAAE,EAAE,CAAC;IAC/D,CAAC;IAED,IAAI,OAAO,KAAK,YAAY,EAAE,CAAC;QAC7B,MAAM,UAAU,GAA4B,EAAE,GAAG,EAAE,CAAC;QACpD,IAAI,OAAO,CAAC,qBAAqB,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;YAClE,UAAU,CAAC,SAAS,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,oBAAoB,EAAE,CAAC;QACjE,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,IAAa,EAAE,EAAE,CAAC;AACrD,CAAC;AAxBD,sDAwBC;AAiBD;;;;;GAKG;AACH,SAAgB,mBAAmB,CACjC,oBAA6B;AAC7B,8DAA8D;AAC9D,gBAAqB,EACrB,UAAsC,EAAE;;IAExC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM,SAAS,GAAG,MAAA,MAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,GAAG,0CAAE,OAAO,0CAAE,KAA+B,CAAC;IAClF,kFAAkF;IAClF,MAAM,WAAW,GAAG,CAAC,CAAC,CAAA,MAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,SAAS,0CAAE,OAAO,CAAA,CAAC;IAC3D,iEAAiE;IACjE,MAAM,QAAQ,GAAG,MAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,SAAS,0CAAE,IAA8B,CAAC;IAE7E,iFAAiF;IACjF,mFAAmF;IACnF,uEAAuE;IACvE,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,IAAI,WAAW,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;YAChD,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,oBAAoB,EAAE,CAAC;QACnE,CAAC;QACD,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAChD,CAAC;IAED,IAAI,WAAW,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;QAChD,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,oBAAoB,EAAE,CAAC;IACnE,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC/C,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC9B,CAAC;AAzCD,kDAyCC"}
@@ -4,7 +4,7 @@ import { EnvelopeIcon, LockClosedIcon } from '@heroicons/react/20/solid';
4
4
  import { yupResolver } from '@hookform/resolvers/yup';
5
5
  import { useActor } from '@xstate/react';
6
6
  import { Button, Card, Spinner } from 'flowbite-react';
7
- import React, { useMemo } from 'react';
7
+ import React, { useEffect, useMemo } from 'react';
8
8
  import { useForm, useWatch } from 'react-hook-form';
9
9
  import { twMerge } from 'tailwind-merge';
10
10
  import * as yup from 'yup';
@@ -15,6 +15,7 @@ import { aloreLogoBlack, authErrorImage } from '../utils';
15
15
  const InputForm = React.lazy(() => import('../components/InputForm'));
16
16
  const BackButton = React.lazy(() => import('../components/BackButton'));
17
17
  const FormRules = React.lazy(() => import('../components/FormRules'));
18
+ const LinkButton = React.lazy(() => import('../components/LinkButton'));
18
19
  const envelopIcon = () => React.createElement(EnvelopeIcon, { className: "size-4 text-gray-500" });
19
20
  const lockClosedIcon = () => React.createElement(LockClosedIcon, { className: "size-4 text-gray-500" });
20
21
  const ForgotPassword = ({ locale = 'pt', authServiceInstance, forgeId, logoImage, cryptoUtils, contentAlignment = 'center', titleSpacing = 'gap-y-2 sm:gap-y-7', customClassName, customStyles, logoContainerClassName, }) => {
@@ -61,6 +62,24 @@ const ForgotPassword = ({ locale = 'pt', authServiceInstance, forgeId, logoImage
61
62
  useWatch({ control: passwordControl, name: ['confirmPassword'] });
62
63
  const isLoading = useMemo(() => authState.matches('active.forgotPassword.sendingCode') ||
63
64
  authState.matches('active.forgotPassword.savingPassword'), [authState.value]);
65
+ const canGoBack = useMemo(() => authState.matches('active.forgotPassword.idle') ||
66
+ authState.matches('active.forgotPassword.codeSent') ||
67
+ authState.matches('active.forgotPassword.newPassword'), [authState.value]);
68
+ useEffect(() => {
69
+ if (typeof window === 'undefined')
70
+ return undefined;
71
+ const handleEscape = (event) => {
72
+ if (event.key === 'Escape' && canGoBack && !isLoading) {
73
+ event.preventDefault();
74
+ sendAuth('BACK');
75
+ window.history.replaceState({}, '', window.location.pathname);
76
+ }
77
+ };
78
+ window.addEventListener('keydown', handleEscape);
79
+ return () => {
80
+ window.removeEventListener('keydown', handleEscape);
81
+ };
82
+ }, [canGoBack, isLoading, sendAuth]);
64
83
  const onSubmitEmail = async (data) => {
65
84
  const { email } = data;
66
85
  sendAuth({
@@ -190,9 +209,10 @@ const ForgotPassword = ({ locale = 'pt', authServiceInstance, forgeId, logoImage
190
209
  isLoading && React.createElement(Spinner, { className: "mr-3 !h-5 w-full !fill-gray-300" }),
191
210
  forgotPasswordDictionary?.sendCode)),
192
211
  React.createElement("div", { className: "h-[0.5px] w-full bg-gray-300" }),
193
- React.createElement("span", { className: `text-sm font-medium ${getTextAlignmentClass}` },
212
+ React.createElement("p", { className: `text-sm font-medium ${getTextAlignmentClass}` },
194
213
  dictionary?.auth.login?.dontHaveAccount,
195
- React.createElement("div", { "data-testid": "sign-up-button", className: "cursor-pointer text-[var(--primary-color)] hover:text-[var(--primary-hover)]", onClick: () => {
214
+ ' ',
215
+ React.createElement(LinkButton, { "data-testid": "sign-up-button", className: "text-sm", onClick: () => {
196
216
  sendAuth(['RESET', { type: 'INITIALIZE', forgeId }, 'SIGN_UP']);
197
217
  } }, dictionary?.auth.login?.signUp)))));
198
218
  }, [
@@ -232,8 +252,8 @@ const ForgotPassword = ({ locale = 'pt', authServiceInstance, forgeId, logoImage
232
252
  React.createElement("span", { className: `font-poppins text-alr-grey mb-5 text-xl font-bold ${getTextAlignmentClass}` }, forgotPasswordDictionary?.newPasswordTitle),
233
253
  React.createElement("span", { className: `text-alr-grey mb-5 text-sm font-medium ${getTextAlignmentClass}` }, forgotPasswordDictionary?.newPasswordDescription),
234
254
  React.createElement("form", { onSubmit: handleSubmitPassword((data) => onSubmitPassword(data)), className: "flex flex-col gap-y-4" },
235
- React.createElement(InputForm, { control: passwordControl, errors: passwordErrors, name: "password", autoFocus: true, icon: lockClosedIcon, placeholder: forgotPasswordDictionary?.passwordLabel, label: forgotPasswordDictionary?.passwordLabel, type: "password", "data-testid": "forgot-password-password-input", disabled: isLoading }),
236
- React.createElement(InputForm, { control: passwordControl, errors: passwordErrors, name: "confirmPassword", placeholder: forgotPasswordDictionary?.confirmPasswordLabel, label: forgotPasswordDictionary?.confirmPasswordLabel, icon: lockClosedIcon, type: "password", "data-testid": "forgot-password-confirm-password-input", disabled: isLoading }),
255
+ React.createElement(InputForm, { control: passwordControl, errors: passwordErrors, name: "password", autoFocus: true, icon: lockClosedIcon, placeholder: forgotPasswordDictionary?.passwordLabel, label: forgotPasswordDictionary?.passwordLabel, type: "password", passwordToggleLabel: dictionary?.auth.togglePasswordVisibility, "data-testid": "forgot-password-password-input", disabled: isLoading }),
256
+ React.createElement(InputForm, { control: passwordControl, errors: passwordErrors, name: "confirmPassword", placeholder: forgotPasswordDictionary?.confirmPasswordLabel, label: forgotPasswordDictionary?.confirmPasswordLabel, icon: lockClosedIcon, type: "password", passwordToggleLabel: dictionary?.auth.togglePasswordVisibility, "data-testid": "forgot-password-confirm-password-input", disabled: isLoading }),
237
257
  React.createElement(FormRules, { locale: locale, className: "!gap-y-1 md:!gap-y-2", passwordValues: getValuesPassword(), userValues: { email: getValuesEmail('email') } }),
238
258
  React.createElement(Button, { "data-testid": "forgot-password-submit-button", type: "submit", disabled: isPasswordSubmitDisabled || isLoading },
239
259
  isLoading && React.createElement(Spinner, { className: "mr-3 !h-5 w-full !fill-gray-300" }),
@@ -1 +1 @@
1
- {"version":3,"file":"ForgotPassword.js","sourceRoot":"","sources":["../../../src/auth/ForgotPassword.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ForgotPassword.js","sourceRoot":"","sources":["../../../src/auth/ForgotPassword.tsx"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import { useMsal } from '@azure/msal-react';
3
3
  import { ArrowRightIcon, EnvelopeIcon, KeyIcon, LockClosedIcon } from '@heroicons/react/20/solid';
4
4
  import { LockOpenIcon } from '@heroicons/react/24/outline';
5
5
  import { yupResolver } from '@hookform/resolvers/yup';
6
- import { useGoogleLogin } from '@react-oauth/google';
6
+ import { GoogleLogin } from '@react-oauth/google';
7
7
  import { useActor } from '@xstate/react';
8
8
  import { Button, Card, Spinner } from 'flowbite-react';
9
9
  import React, { useEffect, useMemo, useRef, useState } from 'react';
@@ -12,11 +12,13 @@ import { twMerge } from 'tailwind-merge';
12
12
  import * as yup from 'yup';
13
13
  import { verifyEmptyValues } from '../helpers';
14
14
  import useDictionary from '../hooks/useDictionary';
15
- import { aloreLogoBlack, authErrorImage, fingerprint, fingerprintError, google, metamaskLogo, microsoftLogo, walletConnectLogo, } from '../utils';
15
+ import { aloreLogoBlack, authErrorImage, fingerprint, fingerprintError, metamaskLogo, microsoftLogo, walletConnectLogo, } from '../utils';
16
+ import { buildWalletExtensions, resolveWalletSecret } from '../utils/passkeyExtensions';
16
17
  /* eslint-disable @next/next/no-img-element */
17
18
  const InputForm = React.lazy(() => import('../components/InputForm'));
18
19
  const InputOTP = React.lazy(() => import('../components/InputOTP'));
19
20
  const BackButton = React.lazy(() => import('../components/BackButton'));
21
+ const LinkButton = React.lazy(() => import('../components/LinkButton'));
20
22
  const envelopIcon = () => React.createElement(EnvelopeIcon, { className: "size-4 text-gray-500" });
21
23
  const lockClosedIcon = () => React.createElement(LockClosedIcon, { className: "size-4 text-gray-500" });
22
24
  const HARDWARE = 1;
@@ -33,7 +35,7 @@ const Login = ({ locale = 'pt', authServiceInstance, forgeId, logoImage, keyshar
33
35
  // Single UI-facing error message derived from the error object
34
36
  const displayError = errorObj?.message || '';
35
37
  const hasDisplayError = !!displayError;
36
- const { enablePasskeys, requireEmailVerification, enablePasswords, socialProviders } = authProviderConfigs || {};
38
+ const { enablePasskeys, requireEmailVerification, enablePasswords, socialProviders, enableWalletCreation, } = authProviderConfigs || {};
37
39
  const [currentDevice, setCurrentDevice] = useState('');
38
40
  const [loading, setLoading] = useState(false);
39
41
  const [trustDevice, setTrustDevice] = useState(true);
@@ -48,29 +50,17 @@ const Login = ({ locale = 'pt', authServiceInstance, forgeId, logoImage, keyshar
48
50
  const onlyPasskeyLogin = useMemo(() => {
49
51
  return enablePasskeys && !enablePasswords;
50
52
  }, [enablePasskeys, enablePasswords]);
51
- const googleLogin = useGoogleLogin({
52
- onSuccess: (tokenResponse) => {
53
- resetEmail();
54
- sendAuth({
55
- type: 'GOOGLE_LOGIN',
56
- payload: {
57
- accessToken: tokenResponse.access_token,
58
- providerName: 'google',
59
- },
60
- });
61
- },
62
- });
63
53
  const microsoftLogin = () => {
64
54
  instance
65
55
  .loginPopup({
66
56
  scopes: ['user.read'],
67
57
  })
68
58
  .then((response) => {
69
- console.info('Login success:', response);
59
+ resetEmail();
70
60
  sendAuth({
71
- type: 'GOOGLE_LOGIN',
61
+ type: 'SOCIAL_LOGIN',
72
62
  payload: {
73
- accessToken: response.accessToken,
63
+ idToken: response.idToken,
74
64
  providerName: 'microsoft',
75
65
  },
76
66
  });
@@ -79,8 +69,19 @@ const Login = ({ locale = 'pt', authServiceInstance, forgeId, logoImage, keyshar
79
69
  console.error('Login failed:', error);
80
70
  });
81
71
  };
82
- const handleGoogleLogin = () => googleLogin();
83
72
  const handleMicrosoftLogin = () => microsoftLogin();
73
+ const handleGoogleCredential = (credentialResponse) => {
74
+ if (!credentialResponse.credential)
75
+ return;
76
+ resetEmail();
77
+ sendAuth({
78
+ type: 'SOCIAL_LOGIN',
79
+ payload: {
80
+ idToken: credentialResponse.credential,
81
+ providerName: 'google',
82
+ },
83
+ });
84
+ };
84
85
  const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
85
86
  const hasPasskeySupportWithPRFOrLargeBlob = () => {
86
87
  if (window.PublicKeyCredential &&
@@ -115,24 +116,12 @@ const Login = ({ locale = 'pt', authServiceInstance, forgeId, logoImage, keyshar
115
116
  // eslint-disable-next-line no-undef
116
117
  const sendSignedCredential = async (credential) => {
117
118
  const extensionResults = credential.getClientExtensionResults();
118
- let secretFromCredential;
119
- // @ts-ignore
120
- const hasPrf = !!extensionResults?.prf?.results?.first;
121
- // @ts-ignore
122
- const hasLargeBlob = !!extensionResults?.largeBlob?.blob;
123
- if (hasPrf) {
124
- // @ts-ignore
125
- secretFromCredential = extensionResults?.prf?.results?.first;
126
- }
127
- else if (hasLargeBlob) {
128
- // @ts-ignore
129
- secretFromCredential = extensionResults?.largeBlob?.blob;
130
- }
131
- if (hasLargeBlob && isSafari) {
132
- // @ts-ignore
133
- secretFromCredential = extensionResults?.largeBlob?.blob;
134
- }
135
- if (!secretFromCredential) {
119
+ // JOO-1792: with wallets disabled no secret is required (none was requested);
120
+ // with wallets enabled the previous PRF/largeBlob/Safari semantics are preserved.
121
+ const { supported: walletSecretSupported, secret: secretFromCredential } = resolveWalletSecret(!!enableWalletCreation, extensionResults, {
122
+ isSafari,
123
+ });
124
+ if (!walletSecretSupported) {
136
125
  sendAuth({
137
126
  type: 'PASSKEY_NOT_SUPPORTED',
138
127
  payload: { error: loginDictionary?.passkeyNotSupported },
@@ -161,7 +150,7 @@ const Login = ({ locale = 'pt', authServiceInstance, forgeId, logoImage, keyshar
161
150
  },
162
151
  },
163
152
  });
164
- if (keyshareWorker) {
153
+ if (keyshareWorker && secretFromCredential) {
165
154
  keyshareWorker.postMessage({
166
155
  method: 'derive-password',
167
156
  payload: {
@@ -178,12 +167,7 @@ const Login = ({ locale = 'pt', authServiceInstance, forgeId, logoImage, keyshar
178
167
  }
179
168
  cancelConditionalCredentialRequest();
180
169
  const { publicKey } = RCRPublicKey;
181
- const extensions = {
182
- prf: { eval: { first: new TextEncoder().encode('Alore') } },
183
- largeBlob: {
184
- read: true,
185
- },
186
- };
170
+ const extensions = buildWalletExtensions('login', !!enableWalletCreation);
187
171
  // eslint-disable-next-line no-undef
188
172
  const credentialOptions = {
189
173
  publicKey: {
@@ -264,6 +248,7 @@ const Login = ({ locale = 'pt', authServiceInstance, forgeId, logoImage, keyshar
264
248
  authState.matches('active.login.verifyingEmail2fa') ||
265
249
  authState.matches('active.login.resendingEmailCode') ||
266
250
  authState.matches('active.login.googleLogin') ||
251
+ authState.matches('active.login.socialLogin') ||
267
252
  authState.matches('active.login.verifyingGoogleLogin') ||
268
253
  authState.matches('active.login.verifyingRegisterPublicKeyCredential') ||
269
254
  authState.matches('active.login.retrievingCredentialRCR') ||
@@ -287,6 +272,25 @@ const Login = ({ locale = 'pt', authServiceInstance, forgeId, logoImage, keyshar
287
272
  window.removeEventListener('keydown', handleMethodSelectionEnter);
288
273
  };
289
274
  }, [authState.value, isLoading, selectLoginMethod]);
275
+ const canGoBack = useMemo(() => authState.matches('active.login.loginMethodSelection') ||
276
+ authState.matches('active.login.inputPassword') ||
277
+ authState.matches('active.login.email2fa') ||
278
+ authState.matches('active.login.hardware2fa') ||
279
+ authState.matches('active.login.software2fa'), [authState.value]);
280
+ useEffect(() => {
281
+ if (typeof window === 'undefined')
282
+ return undefined;
283
+ const handleEscape = (event) => {
284
+ if (event.key === 'Escape' && canGoBack && !isLoading) {
285
+ event.preventDefault();
286
+ sendAuth('BACK');
287
+ }
288
+ };
289
+ window.addEventListener('keydown', handleEscape);
290
+ return () => {
291
+ window.removeEventListener('keydown', handleEscape);
292
+ };
293
+ }, [canGoBack, isLoading, sendAuth]);
290
294
  useEffect(() => {
291
295
  if (typeof window !== 'undefined') {
292
296
  hasPasskeySupportWithPRFOrLargeBlob();
@@ -612,13 +616,14 @@ const Login = ({ locale = 'pt', authServiceInstance, forgeId, logoImage, keyshar
612
616
  displayError?.includes('beta') ? (React.createElement("span", { className: "font-poppins text-alr-red text-center text-xl font-bold" }, displayError)) : (React.createElement(React.Fragment, null,
613
617
  React.createElement("span", { className: "font-poppins text-alr-red text-center text-xl font-bold" }, authErrorTitle),
614
618
  React.createElement("span", { className: "text-alr-grey text-center font-medium" }, authErrorDescription),
615
- errorObj?.code && (React.createElement("span", { className: "mt-1 text-center text-xs text-gray-500" }, `${loginDictionary?.errorCode} ${errorObj.code}`)))))) : (React.createElement("h1", { className: loginTitleClassName || 'font-inter text-center text-xl font-bold text-gray-700' }, loginTitle || (forgeId ? loginDictionary?.forgeLogin : loginDictionary?.loginAccount))),
619
+ errorObj?.code && (React.createElement("span", { className: "mt-1 text-center text-xs text-gray-500" }, `${loginDictionary?.errorCode} ${errorObj.code}`)))))) : (React.createElement("h1", { className: loginTitleClassName ||
620
+ `font-inter text-xl font-bold text-gray-700 ${getTextAlignment}` }, loginTitle || (forgeId ? loginDictionary?.forgeLogin : loginDictionary?.loginAccount))),
616
621
  React.createElement("div", { className: "mt-4 flex flex-col gap-y-5" },
617
622
  !onlyPasskeyLogin && requireEmailVerification && (React.createElement("form", { className: "flex flex-col gap-y-5", onSubmit: handleSubmitEmail((data) => onSubmitEmail(data)) },
618
- React.createElement(InputForm, { className: "my-1", inputClassName: inputClassName, control: emailControl, errors: emailErrors, name: "email", type: "text", placeholder: emailInputLabel || loginDictionary?.enterEmail, "data-testid": "login-email-input", icon: envelopIcon, autoComplete: authAbortController && isConditionalMediationAvailable
623
+ React.createElement(InputForm, { inputClassName: inputClassName, control: emailControl, errors: emailErrors, name: "email", type: "text", placeholder: emailInputLabel || loginDictionary?.enterEmail, "data-testid": "login-email-input", icon: envelopIcon, autoComplete: authAbortController && isConditionalMediationAvailable
619
624
  ? 'username webauthn'
620
625
  : undefined, autoFocus: true }),
621
- React.createElement("span", { onClick: () => sendAuth('FORGOT_PASSWORD'), className: "cursor-pointer text-xs font-medium text-[var(--primary-color)] hover:text-[var(--primary-hover)]" }, loginDictionary?.forgotPassword),
626
+ React.createElement(LinkButton, { "data-testid": "forgot-password-link", onClick: () => sendAuth('FORGOT_PASSWORD'), className: "text-xs" }, loginDictionary?.forgotPassword),
622
627
  React.createElement(Button, { type: "submit", "data-testid": "login-button", disabled: verifyEmptyValues(getValuesEmail('email')) },
623
628
  isLoading && React.createElement(Spinner, { className: "mr-3 !h-5 w-full !fill-gray-300" }),
624
629
  onlyPasskeyLogin ? loginDictionary?.passkeyLogin : loginDictionary?.login))),
@@ -628,12 +633,17 @@ const Login = ({ locale = 'pt', authServiceInstance, forgeId, logoImage, keyshar
628
633
  React.createElement("span", { className: "font-semibold text-white" }, loginDictionary?.passkeyLogin)))),
629
634
  React.createElement("div", { className: "h-[0.5px] w-full bg-gray-300" }),
630
635
  socialProviders?.length && (React.createElement(React.Fragment, null,
631
- React.createElement("div", { className: "flex w-full flex-row gap-4" }, socialProviders.map((provider) => (React.createElement(Button, { key: provider.id, color: "light", "data-testid": `login-social-${provider.providerName}-button`, className: "w-full", onClick: provider.providerName === 'google' ? handleGoogleLogin : handleMicrosoftLogin, outline: true },
636
+ React.createElement("div", { className: "flex w-full flex-row gap-4" }, socialProviders.map((provider) => provider.providerName === 'google' ? (
637
+ // Google's own button, because the credential it returns IS
638
+ // the id_token. The custom button below cannot produce one:
639
+ // useGoogleLogin yields an access_token, whose audience the
640
+ // backend has no way to verify. Styling is limited to what
641
+ // Google exposes here.
642
+ React.createElement("div", { key: provider.id, className: "w-full", "data-testid": "login-social-google-button" },
643
+ React.createElement(GoogleLogin, { onSuccess: handleGoogleCredential, onError: () => console.error('Google sign-in failed'), shape: "rectangular", size: "large", width: "100%", text: "continue_with", locale: locale }))) : (React.createElement(Button, { key: provider.id, color: "light", "data-testid": `login-social-${provider.providerName}-button`, className: "w-full", onClick: handleMicrosoftLogin, outline: true },
632
644
  React.createElement("div", { className: "flex flex-row items-center justify-center gap-2" },
633
- React.createElement("img", { src: provider.providerName === 'google' ? google : microsoftLogo, alt: provider.providerName === 'google' ? 'google logo' : 'microsoft logo', width: 16 }),
634
- provider.providerName === 'google'
635
- ? dictionary?.auth.continueGoogle
636
- : dictionary?.auth.continueMicrosoft))))),
645
+ React.createElement("img", { src: microsoftLogo, alt: "microsoft logo", width: 16 }),
646
+ dictionary?.auth.continueMicrosoft))))),
637
647
  React.createElement("div", { className: "h-[0.5px] w-full bg-gray-300" }))),
638
648
  forgeId && (React.createElement(Button, { color: "light", onClick: () => sendAuth('LOGIN_WITH_WEB3CONNECTOR'), outline: true },
639
649
  React.createElement("div", { className: "flex flex-row items-center justify-center gap-2" },
@@ -641,9 +651,9 @@ const Login = ({ locale = 'pt', authServiceInstance, forgeId, logoImage, keyshar
641
651
  React.createElement("img", { src: metamaskLogo, alt: "metamask logo", width: 20, className: "absolute right-3" }),
642
652
  React.createElement("img", { src: walletConnectLogo, alt: "walletconnect logo", width: 20 })),
643
653
  loginDictionary?.metamaskWalletConnect))),
644
- React.createElement("span", { className: "text-center text-sm font-medium" },
645
- loginDictionary?.dontHaveAccount,
646
- React.createElement("div", { "data-testid": "sign-up-button", className: "cursor-pointer text-[var(--primary-color)] hover:text-[var(--primary-hover)]", onClick: () => {
654
+ React.createElement("div", { className: "flex flex-col items-center gap-0.5 text-center text-sm font-medium" },
655
+ React.createElement("span", null, loginDictionary?.dontHaveAccount),
656
+ React.createElement(LinkButton, { "data-testid": "sign-up-button", className: "text-sm", onClick: () => {
647
657
  sendAuth(['RESET', { type: 'INITIALIZE', forgeId }, 'SIGN_UP']);
648
658
  } }, loginDictionary?.signUp)))));
649
659
  }, [
@@ -666,12 +676,13 @@ const Login = ({ locale = 'pt', authServiceInstance, forgeId, logoImage, keyshar
666
676
  handleSubmitEmail,
667
677
  onSubmitEmail,
668
678
  handlePasskeyButton,
669
- handleGoogleLogin,
679
+ handleGoogleCredential,
670
680
  handleMicrosoftLogin,
671
681
  onlyPasskeyLogin,
672
682
  requireEmailVerification,
673
683
  errorObj,
674
684
  hasDisplayError,
685
+ getTextAlignment,
675
686
  ]);
676
687
  const SelectLoginMethod = useMemo(() => {
677
688
  const { authErrorTitle, authErrorDescription } = getAuthError();
@@ -725,14 +736,14 @@ const Login = ({ locale = 'pt', authServiceInstance, forgeId, logoImage, keyshar
725
736
  React.createElement("span", { className: "text-alr-grey text-center font-medium" }, authErrorDescription),
726
737
  errorObj?.code && (React.createElement("span", { className: "text-center text-xs text-gray-500" }, `${loginDictionary?.errorCode} ${errorObj.code}`))))),
727
738
  React.createElement("form", { onSubmit: handleSubmitPassword((data) => onSubmitLogin(data)), className: "flex flex-col gap-y-5", "data-testid": "login-password-step" },
728
- React.createElement(InputForm, { inputClassName: inputClassName, control: passwordControl, errors: passwordErrors, name: "password", placeholder: loginDictionary?.enterPassword, icon: lockClosedIcon, type: "password", label: dictionary?.password, "data-testid": "login-password" }),
729
- React.createElement("span", { onClick: () => sendAuth('FORGOT_PASSWORD'), className: "cursor-pointer text-xs font-medium text-[var(--primary-color)] hover:text-[var(--primary-hover)]" }, loginDictionary?.forgotPassword),
739
+ React.createElement(InputForm, { inputClassName: inputClassName, control: passwordControl, errors: passwordErrors, name: "password", placeholder: loginDictionary?.enterPassword, icon: lockClosedIcon, type: "password", label: dictionary?.password, passwordToggleLabel: dictionary?.auth.togglePasswordVisibility, "data-testid": "login-password" }),
740
+ React.createElement(LinkButton, { "data-testid": "forgot-password-link", onClick: () => sendAuth('FORGOT_PASSWORD'), className: "text-xs" }, loginDictionary?.forgotPassword),
730
741
  React.createElement(Button, { type: "submit", "data-testid": "login-submit", disabled: isLoginSubmitDisabled },
731
742
  isLoading && React.createElement(Spinner, { className: "mr-3 !h-5 w-full !fill-gray-300" }),
732
743
  loginDictionary?.login),
733
- React.createElement("span", { className: "text-center text-sm font-medium" },
734
- loginDictionary?.dontHaveAccount,
735
- React.createElement("div", { className: "cursor-pointer text-[--primary-color]", onClick: () => {
744
+ React.createElement("div", { className: "flex flex-col items-center gap-0.5 text-center text-sm font-medium" },
745
+ React.createElement("span", null, loginDictionary?.dontHaveAccount),
746
+ React.createElement(LinkButton, { "data-testid": "sign-up-button", className: "text-sm", onClick: () => {
736
747
  sendAuth(['RESET', { type: 'INITIALIZE', forgeId }, 'SIGN_UP']);
737
748
  } }, loginDictionary?.signUp)))));
738
749
  }, [
@@ -754,6 +765,7 @@ const Login = ({ locale = 'pt', authServiceInstance, forgeId, logoImage, keyshar
754
765
  onSubmitLogin,
755
766
  forgeId,
756
767
  isLoginSubmitDisabled,
768
+ getTextAlignment,
757
769
  ]);
758
770
  const VerifyEmail = useMemo(() => (React.createElement("div", { "data-testid": "login-verify-email-step" },
759
771
  React.createElement(BackButton, { className: "mb-4", disabled: isLoading, onClick: () => sendAuth('BACK') }, dictionary?.back),
@@ -768,9 +780,7 @@ const Login = ({ locale = 'pt', authServiceInstance, forgeId, logoImage, keyshar
768
780
  React.createElement(Button, { "data-testid": "secure-code-submit", onClick: () => onClickSecureCodeSubmit(), className: "group relative mb-6 flex w-full items-center justify-center rounded-lg border border-transparent bg-[--primary-color] p-0.5 text-center font-medium text-white duration-300 hover:bg-[--primary-hover] focus:z-10 focus:outline-none focus:ring-2 focus:ring-red-300 enabled:hover:bg-red-700 disabled:hover:bg-red-900 dark:bg-red-600 dark:hover:bg-red-700 dark:focus:ring-red-900 dark:enabled:hover:bg-red-700 dark:disabled:hover:bg-red-600", disabled: secureCode2FA.length !== 6 || isLoading },
769
781
  isLoading && React.createElement(Spinner, { className: "mr-3 !h-5 w-full !fill-gray-300" }),
770
782
  loginDictionary?.confirmCode),
771
- React.createElement("span", { onClick: () => resendSecureCode(), className: twMerge(`text-base font-medium text-gray-700 duration-300`, sendEmailCooldown > 0
772
- ? 'pointer-events-none opacity-50'
773
- : 'cursor-pointer opacity-100 hover:text-[--primary-hover]') }, `${loginDictionary?.resendCode}${sendEmailCooldown ? ` (${sendEmailCooldown}s)` : ''}`)))), [
783
+ React.createElement(LinkButton, { "data-testid": "resend-code-button", onClick: () => resendSecureCode(), disabled: sendEmailCooldown > 0, className: twMerge(`text-base`, sendEmailCooldown > 0 ? 'opacity-50' : 'opacity-100') }, `${loginDictionary?.resendCode}${sendEmailCooldown ? ` (${sendEmailCooldown}s)` : ''}`)))), [
774
784
  secureCode2FA,
775
785
  sendEmailCooldown,
776
786
  isLoading,
@@ -793,16 +803,16 @@ const Login = ({ locale = 'pt', authServiceInstance, forgeId, logoImage, keyshar
793
803
  React.createElement(Button, { className: "bg-alr-red hover:bg-alr-dark-red group relative flex w-full items-center justify-center rounded-lg border border-transparent p-0.5 text-center font-medium text-white duration-300 focus:z-10 focus:outline-none focus:ring-2 focus:ring-red-300 enabled:hover:bg-red-700 disabled:hover:bg-red-900 dark:bg-red-600 dark:hover:bg-red-700 dark:focus:ring-red-900 dark:enabled:hover:bg-red-700 dark:disabled:hover:bg-red-600", onClick: () => startHwAuth(0) }, loginDictionary?.tryAgain),
794
804
  activeHw2fa?.length > 1 && (React.createElement(React.Fragment, null,
795
805
  React.createElement("span", null, loginDictionary?.tryHardware),
796
- React.createElement("div", { className: "text-alr-red flex cursor-pointer items-center gap-x-1 text-base font-semibold", onClick: () => startHwAuth(1) },
806
+ React.createElement(LinkButton, { "data-testid": "use-another-hardware-button", className: "flex items-center gap-x-1 text-base font-semibold", onClick: () => startHwAuth(1) },
797
807
  loginDictionary?.useAnotherHardware,
798
808
  React.createElement(ArrowRightIcon, { className: "size-5" })))),
799
- activeSw2fa && (React.createElement("div", { className: "text-alr-red flex cursor-pointer items-center gap-x-1 text-base font-semibold", onClick: () => sendAuth('USE_SOFTWARE_2FA') },
809
+ activeSw2fa && (React.createElement(LinkButton, { "data-testid": "use-software-2fa-button", className: "flex items-center gap-x-1 text-base font-semibold", onClick: () => sendAuth('USE_SOFTWARE_2FA') },
800
810
  loginDictionary?.useSw2fa,
801
811
  React.createElement(ArrowRightIcon, { className: "size-5" }))))) : (React.createElement("div", { className: `flex w-full flex-col ${getAlignmentClasses}` },
802
812
  React.createElement("span", { className: `font-poppins text-alr-grey mb-10 mt-12 text-[1.3rem] font-bold ${getTextAlignment}` }, loginDictionary?.touchHardware),
803
813
  React.createElement("span", { className: `text-alr-grey mb-10 w-60 text-sm font-normal ${getTextAlignment}` }, loginDictionary?.touchHardwareDescription),
804
814
  React.createElement("img", { alt: "usb indicator", src: fingerprint }),
805
- activeSw2fa && (React.createElement("div", { className: "text-alr-red mt-9 flex cursor-pointer items-center gap-x-1 text-base font-semibold", onClick: () => sendAuth('USE_SOFTWARE_2FA') },
815
+ activeSw2fa && (React.createElement(LinkButton, { "data-testid": "use-software-2fa-button", className: "mt-9 flex items-center gap-x-1 text-base font-semibold", onClick: () => sendAuth('USE_SOFTWARE_2FA') },
806
816
  loginDictionary?.useSw2fa,
807
817
  React.createElement(ArrowRightIcon, { className: "size-5" }))))))), [
808
818
  isLoading,
@@ -825,7 +835,7 @@ const Login = ({ locale = 'pt', authServiceInstance, forgeId, logoImage, keyshar
825
835
  React.createElement(Button, { "data-testid": "secure-code-2FA-submit", onClick: () => onSubmitSecureCode2FA(), className: "bg-alr-red hover:bg-alr-dark-red group relative mb-6 flex w-full items-center justify-center rounded-lg border border-transparent p-0.5 text-center font-medium text-white duration-300 focus:z-10 focus:outline-none focus:ring-2 focus:ring-red-300 enabled:hover:bg-red-700 disabled:hover:bg-red-900 dark:bg-red-600 dark:hover:bg-red-700 dark:focus:ring-red-900 dark:enabled:hover:bg-red-700 dark:disabled:hover:bg-red-600", disabled: secureCode2FA.length !== 6 },
826
836
  isLoading && React.createElement(Spinner, { className: "mr-3 !h-5 w-full !fill-gray-300" }),
827
837
  loginDictionary?.confirmCode),
828
- active2fa?.find((item) => item.twoFaTypeId === HARDWARE) && (React.createElement("div", { className: "text-alr-red mt-9 flex cursor-pointer items-center gap-x-1 text-base font-semibold", onClick: () => sendAuth('USE_HARDWARE_2FA') },
838
+ active2fa?.find((item) => item.twoFaTypeId === HARDWARE) && (React.createElement(LinkButton, { "data-testid": "use-hardware-2fa-button", className: "mt-9 flex items-center gap-x-1 text-base font-semibold", onClick: () => sendAuth('USE_HARDWARE_2FA') },
829
839
  loginDictionary?.useHw2fa,
830
840
  React.createElement(ArrowRightIcon, { className: "size-5" })))))), [
831
841
  secureCode2FA,
@@ -850,9 +860,7 @@ const Login = ({ locale = 'pt', authServiceInstance, forgeId, logoImage, keyshar
850
860
  React.createElement(Button, { "data-testid": "secure-code-email-submit", onClick: () => onSubmitSecureCodeEmail(), className: "bg-alr-red hover:bg-alr-dark-red group relative mb-6 flex w-full items-center justify-center rounded-lg border border-transparent p-0.5 text-center font-medium text-white duration-300 focus:z-10 focus:outline-none focus:ring-2 focus:ring-red-300 enabled:hover:bg-red-700 disabled:hover:bg-red-900 dark:bg-red-600 dark:hover:bg-red-700 dark:focus:ring-red-900 dark:enabled:hover:bg-red-700 dark:disabled:hover:bg-red-600", disabled: secureCodeEmail.length !== 6 },
851
861
  isLoading && React.createElement(Spinner, { className: "mr-3 !h-5 w-full !fill-gray-300" }),
852
862
  loginDictionary?.confirmCode),
853
- React.createElement("span", { onClick: () => resendSecureCode(), className: twMerge(`text-base font-medium duration-300`, sendEmailCooldown > 0
854
- ? 'pointer-events-none opacity-50'
855
- : 'hover:text-alr-red cursor-pointer opacity-100') }, `${loginDictionary?.resendCode}${sendEmailCooldown ? ` (${sendEmailCooldown}s)` : ''}`)))), [
863
+ React.createElement(LinkButton, { "data-testid": "resend-code-button", onClick: () => resendSecureCode(), disabled: sendEmailCooldown > 0, className: twMerge(`text-base`, sendEmailCooldown > 0 ? 'opacity-50' : 'opacity-100') }, `${loginDictionary?.resendCode}${sendEmailCooldown ? ` (${sendEmailCooldown}s)` : ''}`)))), [
856
864
  secureCodeEmail,
857
865
  sendEmailCooldown,
858
866
  isLoading,