@alore/auth-react-ui 1.0.0-alpha

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 (144) hide show
  1. package/LICENSE +504 -0
  2. package/dist/cjs/Auth.d.ts +18 -0
  3. package/dist/cjs/Auth.js +74 -0
  4. package/dist/cjs/Auth.js.map +1 -0
  5. package/dist/cjs/auth/Login.d.ts +15 -0
  6. package/dist/cjs/auth/Login.js +714 -0
  7. package/dist/cjs/auth/Login.js.map +1 -0
  8. package/dist/cjs/auth/Register.d.ts +16 -0
  9. package/dist/cjs/auth/Register.js +633 -0
  10. package/dist/cjs/auth/Register.js.map +1 -0
  11. package/dist/cjs/components/AuthProvider.d.ts +473 -0
  12. package/dist/cjs/components/AuthProvider.js +36 -0
  13. package/dist/cjs/components/AuthProvider.js.map +1 -0
  14. package/dist/cjs/components/BackButton.d.ts +9 -0
  15. package/dist/cjs/components/BackButton.js +28 -0
  16. package/dist/cjs/components/BackButton.js.map +1 -0
  17. package/dist/cjs/components/CheckboxForm.d.ts +12 -0
  18. package/dist/cjs/components/CheckboxForm.js +29 -0
  19. package/dist/cjs/components/CheckboxForm.js.map +1 -0
  20. package/dist/cjs/components/FormRules/helpers/index.d.ts +13 -0
  21. package/dist/cjs/components/FormRules/helpers/index.js +52 -0
  22. package/dist/cjs/components/FormRules/helpers/index.js.map +1 -0
  23. package/dist/cjs/components/FormRules/index.d.ts +11 -0
  24. package/dist/cjs/components/FormRules/index.js +19 -0
  25. package/dist/cjs/components/FormRules/index.js.map +1 -0
  26. package/dist/cjs/components/InputErrorHelperText.d.ts +7 -0
  27. package/dist/cjs/components/InputErrorHelperText.js +10 -0
  28. package/dist/cjs/components/InputErrorHelperText.js.map +1 -0
  29. package/dist/cjs/components/InputForm.d.ts +14 -0
  30. package/dist/cjs/components/InputForm.js +80 -0
  31. package/dist/cjs/components/InputForm.js.map +1 -0
  32. package/dist/cjs/components/InputOTP.d.ts +12 -0
  33. package/dist/cjs/components/InputOTP.js +118 -0
  34. package/dist/cjs/components/InputOTP.js.map +1 -0
  35. package/dist/cjs/components/TermsModal.d.ts +10 -0
  36. package/dist/cjs/components/TermsModal.js +27 -0
  37. package/dist/cjs/components/TermsModal.js.map +1 -0
  38. package/dist/cjs/components/index.d.ts +6 -0
  39. package/dist/cjs/components/index.js +19 -0
  40. package/dist/cjs/components/index.js.map +1 -0
  41. package/dist/cjs/dictionaries/en.json +116 -0
  42. package/dist/cjs/dictionaries/pt.json +116 -0
  43. package/dist/cjs/get-dictionary.d.ts +356 -0
  44. package/dist/cjs/get-dictionary.js +46 -0
  45. package/dist/cjs/get-dictionary.js.map +1 -0
  46. package/dist/cjs/helpers/index.d.ts +8 -0
  47. package/dist/cjs/helpers/index.js +27 -0
  48. package/dist/cjs/helpers/index.js.map +1 -0
  49. package/dist/cjs/hooks/useAuthService.d.ts +1400 -0
  50. package/dist/cjs/hooks/useAuthService.js +15 -0
  51. package/dist/cjs/hooks/useAuthService.js.map +1 -0
  52. package/dist/cjs/hooks/useAuthServiceInstance.d.ts +469 -0
  53. package/dist/cjs/hooks/useAuthServiceInstance.js +13 -0
  54. package/dist/cjs/hooks/useAuthServiceInstance.js.map +1 -0
  55. package/dist/cjs/hooks/useDictionary.d.ts +118 -0
  56. package/dist/cjs/hooks/useDictionary.js +15 -0
  57. package/dist/cjs/hooks/useDictionary.js.map +1 -0
  58. package/dist/cjs/index.d.ts +7 -0
  59. package/dist/cjs/index.js +13 -0
  60. package/dist/cjs/index.js.map +1 -0
  61. package/dist/cjs/machine/index.d.ts +937 -0
  62. package/dist/cjs/machine/index.js +1208 -0
  63. package/dist/cjs/machine/index.js.map +1 -0
  64. package/dist/cjs/machine/index.typegen.d.ts +164 -0
  65. package/dist/cjs/machine/index.typegen.js +4 -0
  66. package/dist/cjs/machine/index.typegen.js.map +1 -0
  67. package/dist/cjs/machine/types.d.ts +324 -0
  68. package/dist/cjs/machine/types.js +3 -0
  69. package/dist/cjs/machine/types.js.map +1 -0
  70. package/dist/cjs/utils/index.d.ts +7 -0
  71. package/dist/cjs/utils/index.js +19 -0
  72. package/dist/cjs/utils/index.js.map +1 -0
  73. package/dist/mjs/Auth.d.ts +18 -0
  74. package/dist/mjs/Auth.js +46 -0
  75. package/dist/mjs/Auth.js.map +1 -0
  76. package/dist/mjs/auth/Login.d.ts +15 -0
  77. package/dist/mjs/auth/Login.js +688 -0
  78. package/dist/mjs/auth/Login.js.map +1 -0
  79. package/dist/mjs/auth/Register.d.ts +16 -0
  80. package/dist/mjs/auth/Register.js +603 -0
  81. package/dist/mjs/auth/Register.js.map +1 -0
  82. package/dist/mjs/components/AuthProvider.d.ts +473 -0
  83. package/dist/mjs/components/AuthProvider.js +9 -0
  84. package/dist/mjs/components/AuthProvider.js.map +1 -0
  85. package/dist/mjs/components/BackButton.d.ts +9 -0
  86. package/dist/mjs/components/BackButton.js +9 -0
  87. package/dist/mjs/components/BackButton.js.map +1 -0
  88. package/dist/mjs/components/CheckboxForm.d.ts +12 -0
  89. package/dist/mjs/components/CheckboxForm.js +10 -0
  90. package/dist/mjs/components/CheckboxForm.js.map +1 -0
  91. package/dist/mjs/components/FormRules/helpers/index.d.ts +13 -0
  92. package/dist/mjs/components/FormRules/helpers/index.js +48 -0
  93. package/dist/mjs/components/FormRules/helpers/index.js.map +1 -0
  94. package/dist/mjs/components/FormRules/index.d.ts +11 -0
  95. package/dist/mjs/components/FormRules/index.js +14 -0
  96. package/dist/mjs/components/FormRules/index.js.map +1 -0
  97. package/dist/mjs/components/InputErrorHelperText.d.ts +7 -0
  98. package/dist/mjs/components/InputErrorHelperText.js +5 -0
  99. package/dist/mjs/components/InputErrorHelperText.js.map +1 -0
  100. package/dist/mjs/components/InputForm.d.ts +14 -0
  101. package/dist/mjs/components/InputForm.js +58 -0
  102. package/dist/mjs/components/InputForm.js.map +1 -0
  103. package/dist/mjs/components/InputOTP.d.ts +12 -0
  104. package/dist/mjs/components/InputOTP.js +93 -0
  105. package/dist/mjs/components/InputOTP.js.map +1 -0
  106. package/dist/mjs/components/TermsModal.d.ts +10 -0
  107. package/dist/mjs/components/TermsModal.js +21 -0
  108. package/dist/mjs/components/TermsModal.js.map +1 -0
  109. package/dist/mjs/components/index.d.ts +6 -0
  110. package/dist/mjs/components/index.js +7 -0
  111. package/dist/mjs/components/index.js.map +1 -0
  112. package/dist/mjs/dictionaries/en.json +116 -0
  113. package/dist/mjs/dictionaries/pt.json +116 -0
  114. package/dist/mjs/get-dictionary.d.ts +356 -0
  115. package/dist/mjs/get-dictionary.js +10 -0
  116. package/dist/mjs/get-dictionary.js.map +1 -0
  117. package/dist/mjs/helpers/index.d.ts +8 -0
  118. package/dist/mjs/helpers/index.js +23 -0
  119. package/dist/mjs/helpers/index.js.map +1 -0
  120. package/dist/mjs/hooks/useAuthService.d.ts +1400 -0
  121. package/dist/mjs/hooks/useAuthService.js +13 -0
  122. package/dist/mjs/hooks/useAuthService.js.map +1 -0
  123. package/dist/mjs/hooks/useAuthServiceInstance.d.ts +469 -0
  124. package/dist/mjs/hooks/useAuthServiceInstance.js +11 -0
  125. package/dist/mjs/hooks/useAuthServiceInstance.js.map +1 -0
  126. package/dist/mjs/hooks/useDictionary.d.ts +118 -0
  127. package/dist/mjs/hooks/useDictionary.js +13 -0
  128. package/dist/mjs/hooks/useDictionary.js.map +1 -0
  129. package/dist/mjs/index.d.ts +7 -0
  130. package/dist/mjs/index.js +6 -0
  131. package/dist/mjs/index.js.map +1 -0
  132. package/dist/mjs/machine/index.d.ts +937 -0
  133. package/dist/mjs/machine/index.js +1189 -0
  134. package/dist/mjs/machine/index.js.map +1 -0
  135. package/dist/mjs/machine/index.typegen.d.ts +164 -0
  136. package/dist/mjs/machine/index.typegen.js +3 -0
  137. package/dist/mjs/machine/index.typegen.js.map +1 -0
  138. package/dist/mjs/machine/types.d.ts +324 -0
  139. package/dist/mjs/machine/types.js +2 -0
  140. package/dist/mjs/machine/types.js.map +1 -0
  141. package/dist/mjs/utils/index.d.ts +7 -0
  142. package/dist/mjs/utils/index.js +16 -0
  143. package/dist/mjs/utils/index.js.map +1 -0
  144. package/package.json +46 -0
@@ -0,0 +1,633 @@
1
+ "use strict";
2
+ 'use client';
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || function (mod) {
20
+ if (mod && mod.__esModule) return mod;
21
+ var result = {};
22
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
23
+ __setModuleDefault(result, mod);
24
+ return result;
25
+ };
26
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
27
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
28
+ return new (P || (P = Promise))(function (resolve, reject) {
29
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
30
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
31
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
32
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
33
+ });
34
+ };
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.Register = void 0;
40
+ const solid_1 = require("@heroicons/react/20/solid");
41
+ const outline_1 = require("@heroicons/react/24/outline");
42
+ const yup_1 = require("@hookform/resolvers/yup");
43
+ const google_1 = require("@react-oauth/google");
44
+ const react_1 = require("@xstate/react");
45
+ const crypto_1 = require("crypto");
46
+ const flowbite_react_1 = require("flowbite-react");
47
+ const jwt_decode_1 = __importDefault(require("jwt-decode"));
48
+ const react_2 = __importStar(require("react"));
49
+ const react_hook_form_1 = require("react-hook-form");
50
+ const tailwind_merge_1 = require("tailwind-merge");
51
+ const yup = __importStar(require("yup"));
52
+ const helpers_1 = require("../components/FormRules/helpers");
53
+ const helpers_2 = require("../helpers");
54
+ const useDictionary_1 = __importDefault(require("../hooks/useDictionary"));
55
+ const utils_1 = require("../utils");
56
+ const InputForm = react_2.default.lazy(() => Promise.resolve().then(() => __importStar(require('../components/InputForm'))));
57
+ const InputOTP = react_2.default.lazy(() => Promise.resolve().then(() => __importStar(require('../components/InputOTP'))));
58
+ const BackButton = react_2.default.lazy(() => Promise.resolve().then(() => __importStar(require('../components/BackButton'))));
59
+ const CheckboxForm = react_2.default.lazy(() => Promise.resolve().then(() => __importStar(require('../components/CheckboxForm'))));
60
+ const TermsModal = react_2.default.lazy(() => Promise.resolve().then(() => __importStar(require('../components/TermsModal'))));
61
+ const FormRules = react_2.default.lazy(() => Promise.resolve().then(() => __importStar(require('../components/FormRules'))));
62
+ const envelopIcon = () => react_2.default.createElement(solid_1.EnvelopeIcon, { className: "size-4 text-gray-500" });
63
+ const Register = ({ locale = 'pt', authServiceInstance, forgeId, logoImage, inviteToken, keyshareWorker, cryptoUtils, }) => {
64
+ const { hashUserInfo, generateSecureHash } = cryptoUtils;
65
+ const dictionary = (0, useDictionary_1.default)(locale);
66
+ const registerDictionary = dictionary === null || dictionary === void 0 ? void 0 : dictionary.auth.register;
67
+ const [secureCode, setSecureCode] = (0, react_2.useState)('');
68
+ const [sendEmailCooldown, setSendEmailCooldown] = (0, react_2.useState)(0);
69
+ const [cooldownMultiplier, setCooldownMultiplier] = (0, react_2.useState)(1);
70
+ const [authState, sendAuth] = (0, react_1.useActor)(authServiceInstance);
71
+ const intervalRef = (0, react_2.useRef)();
72
+ const { salt, error: authError, registerUser, googleUser, sessionUser, CCRPublicKey, RCRPublicKey, } = authState.context;
73
+ const [userSalt, setUserSalt] = (0, react_2.useState)('');
74
+ const [registrationMethod, setRegistrationMethod] = (0, react_2.useState)('password');
75
+ const login = (0, google_1.useGoogleLogin)({
76
+ onSuccess: (tokenResponse) => {
77
+ resetUserInfo();
78
+ sendAuth({
79
+ type: 'GOOGLE_LOGIN',
80
+ googleToken: tokenResponse.access_token,
81
+ });
82
+ },
83
+ });
84
+ const handleLogin = () => login();
85
+ const selectRegisterMethod = () => {
86
+ if (registrationMethod === 'password') {
87
+ sendAuth('SELECT_PASSWORD');
88
+ }
89
+ else {
90
+ const nickname = registerUser ? registerUser.nickname : userInfoGetValues('nickname');
91
+ const email = registerUser ? registerUser.email : userInfoGetValues('email');
92
+ const device = hashUserInfo(window.navigator.userAgent);
93
+ sendAuth({
94
+ type: 'START_PASSKEY_REGISTER',
95
+ payload: {
96
+ email,
97
+ nickname,
98
+ device,
99
+ },
100
+ });
101
+ }
102
+ };
103
+ const finishPasskeyRegistration = () => __awaiter(void 0, void 0, void 0, function* () {
104
+ var _a, _b;
105
+ const publicKey = CCRPublicKey === null || CCRPublicKey === void 0 ? void 0 : CCRPublicKey.publicKey;
106
+ if (!publicKey || !navigator.credentials) {
107
+ sendAuth({
108
+ type: 'PASSKEY_NOT_SUPPORTED',
109
+ payload: { error: registerDictionary === null || registerDictionary === void 0 ? void 0 : registerDictionary.passkeyNotSupported },
110
+ });
111
+ return;
112
+ }
113
+ // TODO: Validate prf on ios/macos when 18.0 drops
114
+ const email = registerUser ? registerUser.email : userInfoGetValues('email');
115
+ const nickname = registerUser ? registerUser.nickname : userInfoGetValues('nickname');
116
+ const device = hashUserInfo(window.navigator.userAgent);
117
+ const extensions = {
118
+ prf: {
119
+ eval: {
120
+ first: new TextEncoder().encode('Alore'),
121
+ },
122
+ },
123
+ largeBlob: {
124
+ support: 'preferred',
125
+ },
126
+ };
127
+ // eslint-disable-next-line no-undef
128
+ const credentialCreationOptions = {
129
+ publicKey: Object.assign(Object.assign({}, publicKey), {
130
+ // @ts-ignore
131
+ challenge: Buffer.from(publicKey.challenge, 'base64'), user: {
132
+ // @ts-ignore
133
+ id: Buffer.from(publicKey.user.id, 'base64'),
134
+ name: email,
135
+ displayName: nickname,
136
+ }, authenticatorSelection: {
137
+ requireResidentKey: true,
138
+ residentKey: 'required',
139
+ userVerification: 'required',
140
+ }, timeout: 10000,
141
+ // @ts-ignore
142
+ extensions }),
143
+ };
144
+ try {
145
+ const _registerCredential = yield navigator.credentials
146
+ .create(credentialCreationOptions)
147
+ .catch((err) => {
148
+ console.error('err', err);
149
+ });
150
+ if (!_registerCredential) {
151
+ sendAuth({
152
+ type: 'PASSKEY_NOT_SUPPORTED',
153
+ payload: { error: registerDictionary === null || registerDictionary === void 0 ? void 0 : registerDictionary.passkeyNotSupported },
154
+ });
155
+ return;
156
+ }
157
+ // eslint-disable-next-line no-undef
158
+ const registerCredential = _registerCredential;
159
+ const extensionResults = registerCredential.getClientExtensionResults();
160
+ // @ts-ignore
161
+ const prfSupported = !!((_a = extensionResults === null || extensionResults === void 0 ? void 0 : extensionResults.prf) === null || _a === void 0 ? void 0 : _a.enabled);
162
+ // @ts-ignore
163
+ const largeBlobSupported = !!((_b = extensionResults === null || extensionResults === void 0 ? void 0 : extensionResults.largeBlob) === null || _b === void 0 ? void 0 : _b.supported);
164
+ if (!prfSupported && !largeBlobSupported) {
165
+ sendAuth({
166
+ type: 'PASSKEY_NOT_SUPPORTED',
167
+ payload: { error: registerDictionary === null || registerDictionary === void 0 ? void 0 : registerDictionary.passkeyNotSupported },
168
+ });
169
+ }
170
+ else {
171
+ sendAuth([
172
+ {
173
+ type: 'FINISH_PASSKEY_REGISTER',
174
+ payload: {
175
+ passkeyRegistration: {
176
+ id: registerCredential.id,
177
+ rawId: Buffer.from(registerCredential.rawId).toString('base64'),
178
+ response: {
179
+ attestationObject: Buffer.from(
180
+ // eslint-disable-next-line no-undef
181
+ registerCredential.response
182
+ .attestationObject).toString('base64'),
183
+ clientDataJSON: Buffer.from(
184
+ // eslint-disable-next-line no-undef
185
+ registerCredential.response
186
+ .clientDataJSON).toString('base64'),
187
+ },
188
+ type: 'public-key',
189
+ },
190
+ email,
191
+ device,
192
+ nickname,
193
+ },
194
+ },
195
+ ]);
196
+ }
197
+ }
198
+ catch (_err) {
199
+ sendAuth({
200
+ type: 'PASSKEY_NOT_SUPPORTED',
201
+ payload: { error: registerDictionary === null || registerDictionary === void 0 ? void 0 : registerDictionary.passkeyNotSupported },
202
+ });
203
+ }
204
+ });
205
+ const finishPasskeyFirstAuth = () => __awaiter(void 0, void 0, void 0, function* () {
206
+ var _c, _d, _e, _f, _g, _h;
207
+ const publicKey = RCRPublicKey === null || RCRPublicKey === void 0 ? void 0 : RCRPublicKey.publicKey;
208
+ if (!publicKey || !navigator.credentials) {
209
+ sendAuth('BACK_TO_IDLE');
210
+ return;
211
+ }
212
+ const largeBlob = new Uint8Array((0, crypto_1.randomBytes)(32));
213
+ const extensions = {
214
+ prf: { eval: { first: new TextEncoder().encode('Alore') } },
215
+ largeBlob: {
216
+ write: largeBlob,
217
+ },
218
+ };
219
+ try {
220
+ const firstLoginCredential = (yield navigator.credentials.get({
221
+ publicKey: Object.assign(Object.assign({}, publicKey), {
222
+ // @ts-ignore
223
+ challenge: Buffer.from(publicKey.challenge, 'base64'),
224
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
225
+ allowCredentials: (_c = publicKey.allowCredentials) === null || _c === void 0 ? void 0 : _c.map((cred) => (Object.assign(Object.assign({}, cred), { id: Buffer.from(cred.id, 'base64') }))), extensions: Object.assign(Object.assign({}, publicKey.extensions), extensions) }),
226
+ // eslint-disable-next-line no-undef
227
+ }));
228
+ if (!firstLoginCredential) {
229
+ sendAuth('BACK_TO_IDLE');
230
+ return;
231
+ }
232
+ const extensionResults = firstLoginCredential.getClientExtensionResults();
233
+ // @ts-ignore
234
+ const prfWritten = !!((_e = (_d = extensionResults === null || extensionResults === void 0 ? void 0 : extensionResults.prf) === null || _d === void 0 ? void 0 : _d.results) === null || _e === void 0 ? void 0 : _e.first);
235
+ // @ts-ignore
236
+ const blobWritten = !!((_f = extensionResults === null || extensionResults === void 0 ? void 0 : extensionResults.largeBlob) === null || _f === void 0 ? void 0 : _f.written);
237
+ let secretFromCredential;
238
+ if (prfWritten) {
239
+ // @ts-ignore
240
+ secretFromCredential = (_h = (_g = extensionResults === null || extensionResults === void 0 ? void 0 : extensionResults.prf) === null || _g === void 0 ? void 0 : _g.results) === null || _h === void 0 ? void 0 : _h.first;
241
+ }
242
+ else if (blobWritten) {
243
+ secretFromCredential = largeBlob;
244
+ }
245
+ const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
246
+ if (blobWritten && isSafari) {
247
+ secretFromCredential = largeBlob;
248
+ }
249
+ if (!secretFromCredential) {
250
+ sendAuth({
251
+ type: 'PASSKEY_NOT_SUPPORTED',
252
+ payload: { error: registerDictionary === null || registerDictionary === void 0 ? void 0 : registerDictionary.passkeyNotSupported },
253
+ });
254
+ return;
255
+ }
256
+ sendAuth({
257
+ type: 'FINISH_PASSKEY_AUTH',
258
+ payload: {
259
+ passkeyAuth: {
260
+ id: firstLoginCredential.id,
261
+ rawId: Buffer.from(firstLoginCredential.rawId).toString('base64'),
262
+ response: {
263
+ authenticatorData: Buffer.from(
264
+ // eslint-disable-next-line no-undef
265
+ firstLoginCredential.response.authenticatorData).toString('base64'),
266
+ clientDataJSON: Buffer.from(
267
+ // eslint-disable-next-line no-undef
268
+ firstLoginCredential.response.clientDataJSON).toString('base64'),
269
+ signature: Buffer.from(
270
+ // eslint-disable-next-line no-undef
271
+ firstLoginCredential.response.signature).toString('base64'),
272
+ userHandle: Buffer.from(
273
+ // @ts-ignore
274
+ firstLoginCredential.response.userHandle || [0]).toString('base64'),
275
+ },
276
+ type: 'public-key',
277
+ },
278
+ },
279
+ });
280
+ if (keyshareWorker) {
281
+ keyshareWorker.postMessage({
282
+ method: 'derive-password',
283
+ payload: {
284
+ password: new TextDecoder().decode(secretFromCredential),
285
+ email: firstLoginCredential.id,
286
+ },
287
+ });
288
+ }
289
+ }
290
+ catch (_err) {
291
+ sendAuth('BACK_TO_IDLE');
292
+ }
293
+ });
294
+ (0, react_2.useEffect)(() => {
295
+ if (authState.matches('active.register.localCCRSign')) {
296
+ finishPasskeyRegistration();
297
+ }
298
+ }, [authState.matches('active.register.localCCRSign')]);
299
+ (0, react_2.useEffect)(() => {
300
+ if (authState.matches('active.register.localRCRSign')) {
301
+ finishPasskeyFirstAuth();
302
+ }
303
+ }, [authState.matches('active.register.localRCRSign')]);
304
+ (0, react_2.useEffect)(() => {
305
+ if (authState.matches('active.register.waitingForRCR')) {
306
+ sendAuth({
307
+ type: 'START_PASSKEY_LOGIN',
308
+ payload: {
309
+ email: registerUser ? registerUser.email : userInfoGetValues('email'),
310
+ },
311
+ });
312
+ }
313
+ }, [authState.matches('active.register.waitingForRCR')]);
314
+ const userInfoFormSchema = yup
315
+ .object({
316
+ email: yup
317
+ .string()
318
+ .required(dictionary === null || dictionary === void 0 ? void 0 : dictionary.formValidation.required)
319
+ .email(dictionary === null || dictionary === void 0 ? void 0 : dictionary.formValidation.invalidEmail),
320
+ nickname: yup
321
+ .string()
322
+ .matches(/^[a-zA-Z].*$/, dictionary === null || dictionary === void 0 ? void 0 : dictionary.formValidation.validName)
323
+ .max(40)
324
+ .required(dictionary === null || dictionary === void 0 ? void 0 : dictionary.formValidation.required),
325
+ agreedWithTerms: yup.boolean().isTrue(dictionary === null || dictionary === void 0 ? void 0 : dictionary.formValidation.agreeTerms),
326
+ })
327
+ .required();
328
+ const passwordFormSchema = yup
329
+ .object({
330
+ password: yup.string().required(dictionary === null || dictionary === void 0 ? void 0 : dictionary.formValidation.required),
331
+ confirmPassword: yup.string().required(dictionary === null || dictionary === void 0 ? void 0 : dictionary.formValidation.required),
332
+ })
333
+ .required();
334
+ const userInfoDefaultValues = {
335
+ email: '',
336
+ nickname: '',
337
+ agreedWithTerms: false,
338
+ };
339
+ const { control: userInfoControl, formState: { errors: userInfoErrors, dirtyFields: userInfoDirtyFields }, handleSubmit: userInfoHandleSubmit, setValue: userInfoSetValue, getValues: userInfoGetValues, reset: resetUserInfo, } = (0, react_hook_form_1.useForm)({
340
+ resolver: (0, yup_1.yupResolver)(userInfoFormSchema),
341
+ defaultValues: userInfoDefaultValues,
342
+ });
343
+ const passwordDefaultValues = {
344
+ password: '',
345
+ confirmPassword: '',
346
+ };
347
+ const { control: passwordControl, formState: { errors: passwordErrors, dirtyFields: passwordDirtyFields }, handleSubmit: passwordHandleSubmit, getValues: passwordGetValues, } = (0, react_hook_form_1.useForm)({
348
+ resolver: (0, yup_1.yupResolver)(passwordFormSchema),
349
+ defaultValues: passwordDefaultValues,
350
+ });
351
+ (0, react_hook_form_1.useWatch)({ control: passwordControl, name: 'password' });
352
+ (0, react_hook_form_1.useWatch)({ control: passwordControl, name: 'confirmPassword' });
353
+ const isLoading = (0, react_2.useMemo)(() => authState.matches('active.register.completingRegistration') ||
354
+ authState.matches('active.register.sendingEmail') ||
355
+ authState.matches('active.register.verifyingEmail') ||
356
+ authState.matches('active.register.resendingRegistrationEmail') ||
357
+ authState.matches('active.register.googleLogin') ||
358
+ authState.matches('active.register.retrievingCCR') ||
359
+ authState.matches('active.register.retrievingRCR') ||
360
+ authState.matches('active.register.localCCRSign') ||
361
+ authState.matches('active.register.localRCRSign') ||
362
+ authState.matches('active.register.waitingForRCR') ||
363
+ authState.matches('active.register.sendingPublicCredential') ||
364
+ authState.matches('active.register.sendingAuthPublicCredential') ||
365
+ authState.matches('active.web3Connector.verifyingClaimNftEmail2fa') ||
366
+ authState.matches('active.web3Connector.verifyingEmailEligibility'), [authState.value]);
367
+ (0, react_2.useEffect)(() => {
368
+ if (registerUser) {
369
+ sendAuth([{ type: 'INITIALIZE', forgeId }, 'SIGN_UP', 'ADVANCE_TO_PASSWORD']);
370
+ }
371
+ else
372
+ sendAuth([{ type: 'INITIALIZE', forgeId }, 'SIGN_UP']);
373
+ }, []);
374
+ (0, react_2.useEffect)(() => {
375
+ if (inviteToken) {
376
+ try {
377
+ const decoded = (0, jwt_decode_1.default)(inviteToken);
378
+ const { email, nickname } = decoded;
379
+ userInfoSetValue('email', email);
380
+ userInfoSetValue('nickname', nickname);
381
+ setUserSalt(decoded.salt);
382
+ }
383
+ catch (err) {
384
+ console.error('Invalid inviteToken');
385
+ }
386
+ }
387
+ }, [inviteToken]);
388
+ // TODO new social login logic
389
+ // useEffect(() => {
390
+ // if (
391
+ // status === 'authenticated' &&
392
+ // // @ts-ignore
393
+ // session.user?.provider === 'google' &&
394
+ // authState.matches('active.register.idle')
395
+ // ) {
396
+ // const sessionUser: any = session?.user;
397
+ // signOut({ redirect: false });
398
+ // sendAuth({
399
+ // type: 'GOOGLE_LOGIN',
400
+ // // @ts-ignore
401
+ // googleToken: session?.accessToken,
402
+ // googleUser: {
403
+ // email: sessionUser?.email || '',
404
+ // nickname: sessionUser?.name || '',
405
+ // },
406
+ // });
407
+ // }
408
+ // }, [session]);
409
+ (0, react_2.useEffect)(() => {
410
+ if (googleUser) {
411
+ sendAuth(['RESET', 'INITIALIZE']);
412
+ }
413
+ }, [googleUser]);
414
+ (0, react_2.useEffect)(() => {
415
+ if (secureCode.length === 6) {
416
+ onClickSecureCodeSubmit();
417
+ }
418
+ }, [secureCode]);
419
+ (0, react_2.useEffect)(() => {
420
+ if (sendEmailCooldown <= 0) {
421
+ clearInterval(intervalRef.current);
422
+ }
423
+ }, [sendEmailCooldown]);
424
+ function onClickSecureCodeSubmit() {
425
+ sendAuth({ type: 'VERIFY_EMAIL', payload: { secureCode } });
426
+ setSecureCode('');
427
+ }
428
+ function resendSecureCode() {
429
+ const { email, nickname } = userInfoGetValues();
430
+ sendAuth({
431
+ type: 'RESEND_CODE',
432
+ payload: { email, nickname, isForgeClaim: !!forgeId, locale },
433
+ });
434
+ setSendEmailCooldown(15 * cooldownMultiplier);
435
+ intervalRef.current = setInterval(() => setSendEmailCooldown((state) => state - 1), 1000);
436
+ setCooldownMultiplier((state) => state + 1);
437
+ }
438
+ function onSubmitUserData(data) {
439
+ return __awaiter(this, void 0, void 0, function* () {
440
+ if (inviteToken) {
441
+ sendAuth('ADVANCE_TO_PASSWORD');
442
+ }
443
+ else {
444
+ const { email, nickname } = data;
445
+ sendAuth({
446
+ type: 'SEND_REGISTRATION_EMAIL',
447
+ payload: {
448
+ email,
449
+ nickname,
450
+ isForgeClaim: !!forgeId,
451
+ locale,
452
+ },
453
+ });
454
+ }
455
+ });
456
+ }
457
+ function onSubmitPassword(data) {
458
+ return __awaiter(this, void 0, void 0, function* () {
459
+ const { password } = data;
460
+ const email = registerUser ? registerUser.email : userInfoGetValues('email');
461
+ const nickname = registerUser ? registerUser.nickname : userInfoGetValues('nickname');
462
+ const { userAgent } = window.navigator;
463
+ const device = hashUserInfo(userAgent);
464
+ const saltWallet = registerUser ? registerUser.salt : salt || userSalt;
465
+ if (saltWallet) {
466
+ if (keyshareWorker) {
467
+ keyshareWorker.postMessage({
468
+ method: 'derive-password',
469
+ payload: { password, email },
470
+ });
471
+ const secureHashArgon2d = yield generateSecureHash(password, saltWallet, 'argon2d');
472
+ sendAuth({
473
+ type: 'COMPLETE_REGISTRATION',
474
+ payload: {
475
+ email,
476
+ passwordHash: secureHashArgon2d,
477
+ device,
478
+ nickname,
479
+ },
480
+ });
481
+ }
482
+ }
483
+ });
484
+ }
485
+ const isUserInfoSubmitDisabled = (0, react_2.useMemo)(() => (0, helpers_2.verifyEmptyValues)(userInfoGetValues()), [userInfoGetValues(), userInfoDirtyFields]);
486
+ const isPasswordSubmitDisabled = (0, react_2.useMemo)(() => {
487
+ const passwordValues = passwordGetValues();
488
+ const userInfoValues = registerUser || userInfoGetValues();
489
+ let isValid = true;
490
+ helpers_1.passwordRules.forEach((rule) => {
491
+ if (!(0, helpers_1.ruleValidation)(rule, passwordValues, userInfoValues)) {
492
+ isValid = false;
493
+ }
494
+ });
495
+ return !isValid;
496
+ }, [passwordGetValues(), passwordDirtyFields]);
497
+ const UserInfo = (0, react_2.useMemo)(() => (react_2.default.createElement(react_2.default.Fragment, null,
498
+ inviteToken ? (react_2.default.createElement("div", { className: "flex flex-col gap-2.5" },
499
+ react_2.default.createElement("h1", { className: "text-alr-grey mb-1 text-center text-[1.75rem] font-bold" }, registerDictionary === null || registerDictionary === void 0 ? void 0 : registerDictionary.welcome),
500
+ react_2.default.createElement("div", { className: "mb-5 text-gray-600" }, registerDictionary === null || registerDictionary === void 0 ? void 0 :
501
+ registerDictionary.invitedBy,
502
+ react_2.default.createElement("span", { className: "font-semibold" }, " 0xCarbon "), registerDictionary === null || registerDictionary === void 0 ? void 0 :
503
+ registerDictionary.toJoin,
504
+ react_2.default.createElement("span", { className: "text-alr-red" }, " Alore.")))) : (react_2.default.createElement("h1", { className: "font-inter mb-1 text-center font-semibold text-gray-600 md:text-lg" }, forgeId ? registerDictionary === null || registerDictionary === void 0 ? void 0 : registerDictionary.forgeTitle : registerDictionary === null || registerDictionary === void 0 ? void 0 : registerDictionary.title)),
505
+ (authError === null || authError === void 0 ? void 0 : authError.includes('beta')) && (react_2.default.createElement("span", { className: "font-poppins text-alr-red text-center text-xl font-bold" }, authError)),
506
+ react_2.default.createElement("form", { onSubmit: userInfoHandleSubmit((data) => onSubmitUserData(data)), className: "mb-1 flex flex-col gap-y-5", "data-test": "register-new-account-step" },
507
+ react_2.default.createElement(InputForm, { control: userInfoControl, errors: userInfoErrors, name: "email", type: "email", placeholder: inviteToken
508
+ ? `${registerDictionary === null || registerDictionary === void 0 ? void 0 : registerDictionary.emailInvitePlaceholder}`
509
+ : `${registerDictionary === null || registerDictionary === void 0 ? void 0 : registerDictionary.emailLabel}`, "data-test": "register-email", icon: envelopIcon, autoFocus: true, disabled: isLoading || !!inviteToken }),
510
+ react_2.default.createElement(InputForm, { control: userInfoControl, errors: userInfoErrors, name: "nickname", type: "text", placeholder: registerDictionary === null || registerDictionary === void 0 ? void 0 : registerDictionary.nicknameLabel, "data-test": "register-first-name", disabled: isLoading }),
511
+ react_2.default.createElement(CheckboxForm, { className: "flex items-center justify-center", control: userInfoControl, name: "agreedWithTerms", "data-test": "register-agreed-with-terms", label: react_2.default.createElement("span", { className: "text-xs font-light text-gray-400 md:text-sm md:font-normal" }, registerDictionary === null || registerDictionary === void 0 ? void 0 :
512
+ registerDictionary.agreeTermsPart1,
513
+ react_2.default.createElement("span", { onClick: () => sendAuth('SHOW_TERMS_MODAL'), className: "text-alr-red cursor-pointer underline", "data-test": "terms-of-service" }, registerDictionary === null || registerDictionary === void 0 ? void 0 : registerDictionary.agreeTermsPart2)) }),
514
+ react_2.default.createElement(flowbite_react_1.Button, { "data-test": "register-button", type: "submit", disabled: isUserInfoSubmitDisabled || isLoading, className: "bg-alr-red hover:bg-alr-dark-red group relative flex 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" },
515
+ isLoading && react_2.default.createElement(flowbite_react_1.Spinner, { className: "mr-2 !h-5 w-6 !fill-gray-300" }), registerDictionary === null || registerDictionary === void 0 ? void 0 :
516
+ registerDictionary.buttonStart)),
517
+ react_2.default.createElement("div", { className: "flex w-full cursor-pointer flex-row items-center justify-center gap-1.5 text-sm text-gray-500", onClick: () => {
518
+ sendAuth(['RESET', { type: 'INITIALIZE', forgeId }, 'LOGIN']);
519
+ } },
520
+ react_2.default.createElement("span", { className: "font-inter font-semibold" }, registerDictionary === null || registerDictionary === void 0 ? void 0 : registerDictionary.alreadyHaveAccount),
521
+ react_2.default.createElement(solid_1.ArrowRightIcon, { className: "size-4" })),
522
+ forgeId && (react_2.default.createElement(react_2.default.Fragment, null,
523
+ react_2.default.createElement("div", { className: "h-[0.5px] w-full bg-gray-300" }),
524
+ react_2.default.createElement(flowbite_react_1.Button, { color: "light", onClick: handleLogin, outline: true },
525
+ react_2.default.createElement("div", { className: "flex flex-row items-center justify-center gap-2" },
526
+ react_2.default.createElement("img", { src: utils_1.google, alt: "google logo", width: 16 }), dictionary === null || dictionary === void 0 ? void 0 :
527
+ dictionary.auth.continueGoogle)),
528
+ react_2.default.createElement(flowbite_react_1.Button, { color: "light", onClick: () => sendAuth('LOGIN_WITH_WEB3CONNECTOR'), outline: true },
529
+ react_2.default.createElement("div", { className: "flex flex-row items-center justify-center gap-2" },
530
+ react_2.default.createElement("div", { className: "relative flex flex-row" },
531
+ react_2.default.createElement("img", { src: utils_1.metamaskLogo, alt: "metamask logo", width: 20, className: "absolute right-3" }),
532
+ react_2.default.createElement("img", { src: utils_1.walletConnectLogo, alt: "walletconnect logo", width: 20 })),
533
+ "Metamask/WalletConnect")))))), [
534
+ isUserInfoSubmitDisabled,
535
+ userInfoControl,
536
+ userInfoErrors,
537
+ userInfoGetValues(),
538
+ userInfoDirtyFields,
539
+ isLoading,
540
+ ]);
541
+ const VerifyEmail = (0, react_2.useMemo)(() => (react_2.default.createElement(react_2.default.Fragment, null,
542
+ react_2.default.createElement(BackButton, { disabled: isLoading, onClick: () => sendAuth('BACK') }),
543
+ react_2.default.createElement("div", { className: "flex w-full flex-col items-center", "data-test": "register-verify-email-step" },
544
+ react_2.default.createElement("span", { className: "font-poppins text-alr-grey mb-6 text-2xl font-bold md:text-[1.75rem]" }, registerDictionary === null || registerDictionary === void 0 ? void 0 : registerDictionary.verifyEmail),
545
+ react_2.default.createElement("span", { className: "text-alr-grey mb-6 w-full text-center font-medium" }, registerDictionary === null || registerDictionary === void 0 ? void 0 : registerDictionary.informCode),
546
+ react_2.default.createElement("div", { className: "mb-6 flex" },
547
+ react_2.default.createElement(InputOTP, { className: "child:gap-x-3 md:child:gap-x-5 [&>div>input]:!h-9 [&>div>input]:!w-9", value: secureCode, onChange: (value) => setSecureCode(value), inputLength: 6, "data-test": "secure-code", errorMessage: (authError === null || authError === void 0 ? void 0 : authError.includes('wrong')) ? `${registerDictionary === null || registerDictionary === void 0 ? void 0 : registerDictionary.wrongCode}` : undefined, disabled: isLoading })),
548
+ react_2.default.createElement(flowbite_react_1.Button, { "data-test": "secure-code-submit", onClick: () => onClickSecureCodeSubmit(), 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: secureCode.length !== 6 || isLoading },
549
+ isLoading && react_2.default.createElement(flowbite_react_1.Spinner, { className: "mr-3 !h-5 w-full !fill-gray-300" }), registerDictionary === null || registerDictionary === void 0 ? void 0 :
550
+ registerDictionary.confirmCode),
551
+ react_2.default.createElement("span", { onClick: () => resendSecureCode(), className: (0, tailwind_merge_1.twMerge)(`text-base font-medium duration-300`, sendEmailCooldown > 0
552
+ ? 'pointer-events-none opacity-50'
553
+ : 'hover:text-alr-red cursor-pointer opacity-100') }, `${registerDictionary === null || registerDictionary === void 0 ? void 0 : registerDictionary.resendCode}${sendEmailCooldown ? ` (${sendEmailCooldown}s)` : ''}`)))), [secureCode, sendEmailCooldown, isLoading]);
554
+ const SelectRegisterMethod = (0, react_2.useMemo)(() => (react_2.default.createElement("div", null,
555
+ react_2.default.createElement(BackButton, { disabled: isLoading, onClick: () => sendAuth('BACK') }),
556
+ react_2.default.createElement("div", { className: "mt-2 flex w-full flex-col items-center", "data-test": "register-method-selection-step" },
557
+ isLoading && react_2.default.createElement(flowbite_react_1.Spinner, { className: "mr-3 !h-5 w-full !fill-gray-300" }),
558
+ (authError === null || authError === void 0 ? void 0 : authError.toLocaleLowerCase().includes('passkey')) && (react_2.default.createElement("span", { className: "font-poppins text-alr-red mb-4 text-center text-xl font-bold" }, registerDictionary === null || registerDictionary === void 0 ? void 0 : registerDictionary.passkeyNotSupported)),
559
+ react_2.default.createElement("span", { className: "font-poppins text-alr-grey mb-6 text-2xl font-bold md:text-[1.75rem]" }, registerDictionary === null || registerDictionary === void 0 ? void 0 : registerDictionary.selectMethodTitle),
560
+ react_2.default.createElement("span", { className: "text-alr-grey mb-6 w-full text-center font-medium" }, registerDictionary === null || registerDictionary === void 0 ? void 0 : registerDictionary.selectMethodDescription),
561
+ react_2.default.createElement("div", { className: "flex flex-col gap-5" },
562
+ react_2.default.createElement("div", { className: "flex w-full gap-2" },
563
+ react_2.default.createElement(flowbite_react_1.Button, { "data-test": "register-method-selection-password", onClick: () => setRegistrationMethod('password'), color: "light", className: `${registrationMethod === 'password' ? '!border-alr-red' : '!border-gray-500'} child:h-full w-full cursor-pointer items-start border focus:ring-0` },
564
+ react_2.default.createElement("div", { className: "flex flex-col items-start justify-center gap-2" },
565
+ react_2.default.createElement(outline_1.LockOpenIcon, { className: `${registrationMethod === 'password' ? 'text-alr-red' : 'text-gray-500'} size-7` }),
566
+ react_2.default.createElement("span", { className: "font-semibold text-gray-900" }, registerDictionary === null || registerDictionary === void 0 ? void 0 : registerDictionary.password),
567
+ react_2.default.createElement("span", { className: "text-start text-xs font-normal text-gray-600" }, registerDictionary === null || registerDictionary === void 0 ? void 0 : registerDictionary.selectMethodPassword))),
568
+ react_2.default.createElement(flowbite_react_1.Button, { disabled: typeof window.PublicKeyCredential === 'undefined', "data-test": "register-method-selection-passkey", onClick: () => setRegistrationMethod('passkey'), color: "light", className: `${registrationMethod === 'passkey' ? '!border-alr-red' : '!border-gray-500'} child:h-full w-full cursor-pointer items-start border focus:ring-0` },
569
+ react_2.default.createElement("div", { className: "flex flex-col items-start justify-center gap-2" },
570
+ react_2.default.createElement(outline_1.KeyIcon, { className: `${registrationMethod === 'passkey' ? 'text-alr-red' : 'text-gray-500'} size-7` }),
571
+ react_2.default.createElement("span", { className: "font-semibold text-gray-900" }, registerDictionary === null || registerDictionary === void 0 ? void 0 : registerDictionary.passkey),
572
+ react_2.default.createElement("span", { className: "text-start text-xs font-normal text-gray-600" }, registerDictionary === null || registerDictionary === void 0 ? void 0 : registerDictionary.selectMethodPasskey)))),
573
+ react_2.default.createElement(flowbite_react_1.Button, { "data-test": "register-method-selection-submit", onClick: () => selectRegisterMethod(), className: "bg-alr-red text-alr-white mb-6 flex w-full cursor-pointer items-center" }, registerDictionary === null || registerDictionary === void 0 ? void 0 : registerDictionary.continue))))), [isLoading, registrationMethod]);
574
+ const Password = (0, react_2.useMemo)(() => (react_2.default.createElement(react_2.default.Fragment, null,
575
+ react_2.default.createElement(BackButton, { disabled: isLoading, onClick: () => sendAuth(inviteToken || registerUser ? 'BACK_TO_IDLE' : 'BACK') }, userInfoGetValues('email')),
576
+ react_2.default.createElement("div", { className: "flex w-full flex-col", "data-test": "register-password-step" },
577
+ react_2.default.createElement("span", { className: "font-poppins text-alr-grey mb-5 text-center font-bold" }, registerDictionary === null || registerDictionary === void 0 ? void 0 : registerDictionary.createPassword),
578
+ react_2.default.createElement("form", { onSubmit: passwordHandleSubmit((data) => onSubmitPassword(data)), className: "flex flex-col gap-y-4" },
579
+ react_2.default.createElement(InputForm, { control: passwordControl, errors: passwordErrors, name: "password", autoFocus: true, placeholder: registerDictionary === null || registerDictionary === void 0 ? void 0 : registerDictionary.passwordPlaceholder, label: registerDictionary === null || registerDictionary === void 0 ? void 0 : registerDictionary.passwordLabel, type: "password", "data-test": "register-password", disabled: isLoading }),
580
+ react_2.default.createElement(InputForm, { control: passwordControl, errors: passwordErrors, name: "confirmPassword", placeholder: registerDictionary === null || registerDictionary === void 0 ? void 0 : registerDictionary.passwordConfirmPlaceholder, label: registerDictionary === null || registerDictionary === void 0 ? void 0 : registerDictionary.passwordConfirmLabel, type: "password", "data-test": "register-confirm-password", disabled: isLoading }),
581
+ react_2.default.createElement(FormRules, { locale: locale, className: "!gap-y-1 md:!gap-y-2", passwordValues: passwordGetValues(), userValues: registerUser || userInfoGetValues() }),
582
+ react_2.default.createElement(flowbite_react_1.Button, { "data-test": "password-submit", type: "submit", className: "bg-alr-red hover:bg-alr-dark-red group relative flex 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: isPasswordSubmitDisabled || isLoading },
583
+ isLoading && react_2.default.createElement(flowbite_react_1.Spinner, { className: "mr-3 !h-5 w-full !fill-gray-300" }), dictionary === null || dictionary === void 0 ? void 0 :
584
+ dictionary.next))))), [
585
+ isPasswordSubmitDisabled,
586
+ passwordControl,
587
+ passwordErrors,
588
+ passwordGetValues(),
589
+ passwordDirtyFields,
590
+ isLoading,
591
+ registerUser,
592
+ ]);
593
+ return (react_2.default.createElement("div", { className: "flex size-full min-h-screen flex-col items-center justify-center gap-y-2 sm:gap-y-7", "data-test": "register-page" },
594
+ react_2.default.createElement(TermsModal, { locale: locale, show: authState.matches('active.register.termsModal'), onClose: () => sendAuth('CLOSE_TERMS_MODAL'), onSubmit: () => {
595
+ userInfoSetValue('agreedWithTerms', true);
596
+ sendAuth('CLOSE_TERMS_MODAL');
597
+ } }),
598
+ forgeId ? (react_2.default.createElement("div", { className: "flex flex-col" },
599
+ react_2.default.createElement("span", { className: "font-poppins text-alr-grey text-center text-2xl font-black" }, "Tardezinha com Thiaguinho"),
600
+ react_2.default.createElement("div", { className: "flex w-full flex-row items-center justify-center gap-2" },
601
+ react_2.default.createElement("span", { className: "font-inter text-sm font-medium text-gray-900" }, dictionary === null || dictionary === void 0 ? void 0 : dictionary.auth.poweredBy),
602
+ react_2.default.createElement("img", { src: utils_1.aloreLogoBlack, alt: "alore logo", width: "60" })))) : (logoImage || (react_2.default.createElement("img", { src: utils_1.aloreLogoBlack, alt: "alore logo", width: authState.matches('active.login.newDevice') ? 153 : 201 }))),
603
+ react_2.default.createElement(flowbite_react_1.Card, { className: (0, tailwind_merge_1.twMerge)(`md:child:!px-9 mx-5 flex min-w-[20rem] py-2 md:mx-7 md:w-96`, isLoading ? 'pointer-events-none opacity-50' : '') },
604
+ forgeId && authState.matches('active.web3Connector') && 'TODO',
605
+ (authState.matches('active.register.idle') ||
606
+ authState.matches('active.register.termsModal') ||
607
+ authState.matches('active.register.googleLogin') ||
608
+ authState.matches('active.register.sendingEmail')) &&
609
+ UserInfo,
610
+ (authState.matches('active.register.emailValidation') ||
611
+ authState.matches('active.register.verifyingEmail') ||
612
+ authState.matches('active.register.resendingRegistrationEmail')) &&
613
+ VerifyEmail,
614
+ (authState.matches('active.register.registerMethodSelection') ||
615
+ authState.matches('active.register.retrievingCCR') ||
616
+ authState.matches('active.register.retrievingRCR') ||
617
+ authState.matches('active.register.localCCRSign') ||
618
+ authState.matches('active.register.localRCRSign') ||
619
+ authState.matches('active.register.waitingForRCR') ||
620
+ authState.matches('active.register.sendingAuthPublicCredential') ||
621
+ authState.matches('active.register.sendingPublicCredential')) &&
622
+ SelectRegisterMethod,
623
+ (authState.matches('active.register.createPassword') ||
624
+ authState.matches('active.register.completingRegistration')) &&
625
+ Password,
626
+ authState.matches('active.register.userCreated') && (react_2.default.createElement("div", { className: "flex flex-col items-center justify-center gap-4" },
627
+ react_2.default.createElement("div", { className: "flex flex-row items-center justify-center gap-2" },
628
+ react_2.default.createElement("span", null, "Registration complete for"),
629
+ react_2.default.createElement("span", { className: "font-semibold" }, sessionUser === null || sessionUser === void 0 ? void 0 : sessionUser.nickname)),
630
+ react_2.default.createElement(flowbite_react_1.Button, { className: "bg-alr-red hover:bg-alr-dark-red group relative flex 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: () => sendAuth(['RESET_CONTEXT', 'INITIALIZE']) }, "LOGOUT"))))));
631
+ };
632
+ exports.Register = Register;
633
+ //# sourceMappingURL=Register.js.map