@tatchi-xyz/sdk 0.20.0 → 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/core/TatchiPasskey/emailRecovery.js +67 -45
- package/dist/cjs/core/TatchiPasskey/emailRecovery.js.map +1 -1
- package/dist/cjs/core/TatchiPasskey/index.js +2 -1
- package/dist/cjs/core/TatchiPasskey/index.js.map +1 -1
- package/dist/cjs/core/TatchiPasskey/linkDevice.js +2 -1
- package/dist/cjs/core/TatchiPasskey/linkDevice.js.map +1 -1
- package/dist/cjs/core/TatchiPasskey/scanDevice.js +5 -3
- package/dist/cjs/core/TatchiPasskey/scanDevice.js.map +1 -1
- package/dist/cjs/core/WalletIframe/client/router.js +1 -1
- package/dist/cjs/core/WalletIframe/client/router.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/SignerWorkerManager/handlers/validation.js +3 -4
- package/dist/cjs/core/WebAuthnManager/SignerWorkerManager/handlers/validation.js.map +1 -1
- package/dist/cjs/core/defaultConfigs.js +3 -7
- package/dist/cjs/core/defaultConfigs.js.map +1 -1
- package/dist/cjs/core/nearCrypto.js +29 -5
- package/dist/cjs/core/nearCrypto.js.map +1 -1
- package/dist/cjs/core/rpcCalls.js +56 -26
- package/dist/cjs/core/rpcCalls.js.map +1 -1
- package/dist/cjs/react/components/AccountMenuButton/{LinkedDevicesModal-BCrFe5p3.css → LinkedDevicesModal-BRtht0XI.css} +1 -1
- package/dist/{esm/react/components/AccountMenuButton/LinkedDevicesModal-BCrFe5p3.css.map → cjs/react/components/AccountMenuButton/LinkedDevicesModal-BRtht0XI.css.map} +1 -1
- package/dist/cjs/react/components/AccountMenuButton/{ProfileDropdown-CRJrtxDb.css → ProfileDropdown-BG_6hcim.css} +1 -1
- package/dist/{esm/react/components/AccountMenuButton/ProfileDropdown-CRJrtxDb.css.map → cjs/react/components/AccountMenuButton/ProfileDropdown-BG_6hcim.css.map} +1 -1
- package/dist/cjs/react/components/AccountMenuButton/{Web3AuthProfileButton-DXFRw8ND.css → Web3AuthProfileButton-k8_FAYFq.css} +1 -1
- package/dist/cjs/react/components/AccountMenuButton/{Web3AuthProfileButton-DXFRw8ND.css.map → Web3AuthProfileButton-k8_FAYFq.css.map} +1 -1
- package/dist/cjs/react/components/AccountMenuButton/icons/{TouchIcon-DNgbAK_i.css → TouchIcon-C-RcGfr5.css} +1 -1
- package/dist/cjs/react/components/AccountMenuButton/icons/{TouchIcon-DNgbAK_i.css.map → TouchIcon-C-RcGfr5.css.map} +1 -1
- package/dist/cjs/react/components/PasskeyAuthMenu/{PasskeyAuthMenu-DRwSoF8q.css → PasskeyAuthMenu-DKMiLeT9.css} +59 -4
- package/dist/cjs/react/components/PasskeyAuthMenu/{PasskeyAuthMenu-DRwSoF8q.css.map → PasskeyAuthMenu-DKMiLeT9.css.map} +1 -1
- package/dist/cjs/react/components/PasskeyAuthMenu/adapters/tatchi.js +1 -0
- package/dist/cjs/react/components/PasskeyAuthMenu/adapters/tatchi.js.map +1 -1
- package/dist/cjs/react/components/PasskeyAuthMenu/client.js +30 -8
- package/dist/cjs/react/components/PasskeyAuthMenu/client.js.map +1 -1
- package/dist/cjs/react/components/PasskeyAuthMenu/controller/useSDKEvents.js +22 -0
- package/dist/cjs/react/components/PasskeyAuthMenu/controller/useSDKEvents.js.map +1 -0
- package/dist/cjs/react/components/PasskeyAuthMenu/ui/ContentSwitcher.js +17 -4
- package/dist/cjs/react/components/PasskeyAuthMenu/ui/ContentSwitcher.js.map +1 -1
- package/dist/cjs/react/components/PasskeyAuthMenu/ui/EmailRecoverySlide.js +254 -140
- package/dist/cjs/react/components/PasskeyAuthMenu/ui/EmailRecoverySlide.js.map +1 -1
- package/dist/cjs/react/components/{ShowQRCode-CL4gsszN.css → ShowQRCode-CB0UCQ_h.css} +1 -1
- package/dist/cjs/react/components/{ShowQRCode-CL4gsszN.css.map → ShowQRCode-CB0UCQ_h.css.map} +1 -1
- package/dist/cjs/react/context/useSDKFlowRuntime.js +183 -0
- package/dist/cjs/react/context/useSDKFlowRuntime.js.map +1 -0
- package/dist/cjs/react/context/useTatchiContextValue.js +24 -15
- package/dist/cjs/react/context/useTatchiContextValue.js.map +1 -1
- package/dist/cjs/react/context/useTatchiWithSdkFlow.js +96 -0
- package/dist/cjs/react/context/useTatchiWithSdkFlow.js.map +1 -0
- package/dist/cjs/react/sdk/src/core/EmailRecovery/index.js +1 -0
- package/dist/cjs/react/sdk/src/core/TatchiPasskey/emailRecovery.js +67 -45
- package/dist/cjs/react/sdk/src/core/TatchiPasskey/emailRecovery.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/TatchiPasskey/index.js +2 -1
- package/dist/cjs/react/sdk/src/core/TatchiPasskey/index.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/TatchiPasskey/linkDevice.js +2 -1
- package/dist/cjs/react/sdk/src/core/TatchiPasskey/linkDevice.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/TatchiPasskey/scanDevice.js +5 -3
- package/dist/cjs/react/sdk/src/core/TatchiPasskey/scanDevice.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/WalletIframe/client/router.js +1 -1
- package/dist/cjs/react/sdk/src/core/WalletIframe/client/router.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/validation.js +3 -4
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/validation.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/defaultConfigs.js +3 -7
- package/dist/cjs/react/sdk/src/core/defaultConfigs.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/nearCrypto.js +29 -5
- package/dist/cjs/react/sdk/src/core/nearCrypto.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/rpcCalls.js +56 -26
- package/dist/cjs/react/sdk/src/core/rpcCalls.js.map +1 -1
- package/dist/cjs/server/email-recovery/emailParsers.js +2 -1
- package/dist/cjs/server/email-recovery/emailParsers.js.map +1 -1
- package/dist/cjs/server/email-recovery/index.js +6 -6
- package/dist/cjs/server/email-recovery/index.js.map +1 -1
- package/dist/cjs/server/email-recovery/rpcCalls.js +22 -3
- package/dist/cjs/server/email-recovery/rpcCalls.js.map +1 -1
- package/dist/cjs/server/router/cloudflare.js +8 -3
- package/dist/cjs/server/router/cloudflare.js.map +1 -1
- package/dist/cjs/server/router/express.js.map +1 -1
- package/dist/cjs/server/sdk/src/core/defaultConfigs.js +2 -4
- package/dist/cjs/server/sdk/src/core/defaultConfigs.js.map +1 -1
- package/dist/cjs/server/sdk/src/core/nearCrypto.js +26 -7
- package/dist/cjs/server/sdk/src/core/nearCrypto.js.map +1 -1
- package/dist/esm/core/TatchiPasskey/emailRecovery.js +67 -45
- package/dist/esm/core/TatchiPasskey/emailRecovery.js.map +1 -1
- package/dist/esm/core/TatchiPasskey/index.js +2 -1
- package/dist/esm/core/TatchiPasskey/index.js.map +1 -1
- package/dist/esm/core/TatchiPasskey/linkDevice.js +2 -1
- package/dist/esm/core/TatchiPasskey/linkDevice.js.map +1 -1
- package/dist/esm/core/TatchiPasskey/scanDevice.js +5 -3
- package/dist/esm/core/TatchiPasskey/scanDevice.js.map +1 -1
- package/dist/esm/core/WalletIframe/client/router.js +1 -1
- package/dist/esm/core/WalletIframe/client/router.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/SignerWorkerManager/handlers/validation.js +2 -3
- package/dist/esm/core/WebAuthnManager/SignerWorkerManager/handlers/validation.js.map +1 -1
- package/dist/esm/core/defaultConfigs.js +3 -7
- package/dist/esm/core/defaultConfigs.js.map +1 -1
- package/dist/esm/core/nearCrypto.js +24 -6
- package/dist/esm/core/nearCrypto.js.map +1 -1
- package/dist/esm/core/rpcCalls.js +56 -26
- package/dist/esm/core/rpcCalls.js.map +1 -1
- package/dist/esm/react/components/AccountMenuButton/{LinkedDevicesModal-BCrFe5p3.css → LinkedDevicesModal-BRtht0XI.css} +1 -1
- package/dist/{cjs/react/components/AccountMenuButton/LinkedDevicesModal-BCrFe5p3.css.map → esm/react/components/AccountMenuButton/LinkedDevicesModal-BRtht0XI.css.map} +1 -1
- package/dist/esm/react/components/AccountMenuButton/{ProfileDropdown-CRJrtxDb.css → ProfileDropdown-BG_6hcim.css} +1 -1
- package/dist/{cjs/react/components/AccountMenuButton/ProfileDropdown-CRJrtxDb.css.map → esm/react/components/AccountMenuButton/ProfileDropdown-BG_6hcim.css.map} +1 -1
- package/dist/esm/react/components/AccountMenuButton/{Web3AuthProfileButton-DXFRw8ND.css → Web3AuthProfileButton-k8_FAYFq.css} +1 -1
- package/dist/esm/react/components/AccountMenuButton/{Web3AuthProfileButton-DXFRw8ND.css.map → Web3AuthProfileButton-k8_FAYFq.css.map} +1 -1
- package/dist/esm/react/components/AccountMenuButton/icons/{TouchIcon-DNgbAK_i.css → TouchIcon-C-RcGfr5.css} +1 -1
- package/dist/esm/react/components/AccountMenuButton/icons/{TouchIcon-DNgbAK_i.css.map → TouchIcon-C-RcGfr5.css.map} +1 -1
- package/dist/esm/react/components/PasskeyAuthMenu/{PasskeyAuthMenu-DRwSoF8q.css → PasskeyAuthMenu-DKMiLeT9.css} +59 -4
- package/dist/esm/react/components/PasskeyAuthMenu/{PasskeyAuthMenu-DRwSoF8q.css.map → PasskeyAuthMenu-DKMiLeT9.css.map} +1 -1
- package/dist/esm/react/components/PasskeyAuthMenu/adapters/tatchi.js +1 -0
- package/dist/esm/react/components/PasskeyAuthMenu/adapters/tatchi.js.map +1 -1
- package/dist/esm/react/components/PasskeyAuthMenu/client.js +30 -8
- package/dist/esm/react/components/PasskeyAuthMenu/client.js.map +1 -1
- package/dist/esm/react/components/PasskeyAuthMenu/controller/useSDKEvents.js +20 -0
- package/dist/esm/react/components/PasskeyAuthMenu/controller/useSDKEvents.js.map +1 -0
- package/dist/esm/react/components/PasskeyAuthMenu/ui/ContentSwitcher.js +17 -4
- package/dist/esm/react/components/PasskeyAuthMenu/ui/ContentSwitcher.js.map +1 -1
- package/dist/esm/react/components/PasskeyAuthMenu/ui/EmailRecoverySlide.js +254 -140
- package/dist/esm/react/components/PasskeyAuthMenu/ui/EmailRecoverySlide.js.map +1 -1
- package/dist/esm/react/components/{ShowQRCode-CL4gsszN.css → ShowQRCode-CB0UCQ_h.css} +1 -1
- package/dist/esm/react/components/{ShowQRCode-CL4gsszN.css.map → ShowQRCode-CB0UCQ_h.css.map} +1 -1
- package/dist/esm/react/context/useSDKFlowRuntime.js +181 -0
- package/dist/esm/react/context/useSDKFlowRuntime.js.map +1 -0
- package/dist/esm/react/context/useTatchiContextValue.js +25 -16
- package/dist/esm/react/context/useTatchiContextValue.js.map +1 -1
- package/dist/esm/react/context/useTatchiWithSdkFlow.js +94 -0
- package/dist/esm/react/context/useTatchiWithSdkFlow.js.map +1 -0
- package/dist/esm/react/sdk/src/core/EmailRecovery/index.js +1 -1
- package/dist/esm/react/sdk/src/core/TatchiPasskey/emailRecovery.js +67 -45
- package/dist/esm/react/sdk/src/core/TatchiPasskey/emailRecovery.js.map +1 -1
- package/dist/esm/react/sdk/src/core/TatchiPasskey/index.js +2 -1
- package/dist/esm/react/sdk/src/core/TatchiPasskey/index.js.map +1 -1
- package/dist/esm/react/sdk/src/core/TatchiPasskey/linkDevice.js +2 -1
- package/dist/esm/react/sdk/src/core/TatchiPasskey/linkDevice.js.map +1 -1
- package/dist/esm/react/sdk/src/core/TatchiPasskey/scanDevice.js +5 -3
- package/dist/esm/react/sdk/src/core/TatchiPasskey/scanDevice.js.map +1 -1
- package/dist/esm/react/sdk/src/core/WalletIframe/client/router.js +1 -1
- package/dist/esm/react/sdk/src/core/WalletIframe/client/router.js.map +1 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/validation.js +2 -3
- package/dist/esm/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/validation.js.map +1 -1
- package/dist/esm/react/sdk/src/core/defaultConfigs.js +3 -7
- package/dist/esm/react/sdk/src/core/defaultConfigs.js.map +1 -1
- package/dist/esm/react/sdk/src/core/nearCrypto.js +24 -6
- package/dist/esm/react/sdk/src/core/nearCrypto.js.map +1 -1
- package/dist/esm/react/sdk/src/core/rpcCalls.js +56 -26
- package/dist/esm/react/sdk/src/core/rpcCalls.js.map +1 -1
- package/dist/esm/react/styles/styles.css +58 -3
- package/dist/esm/sdk/{defaultConfigs-DpslkAQd.js → defaultConfigs-CfQDV-ya.js} +3 -7
- package/dist/esm/sdk/{getDeviceNumber-fXizNGQl.js → getDeviceNumber-BpernPnM.js} +4 -8
- package/dist/esm/sdk/getDeviceNumber-BpernPnM.js.map +1 -0
- package/dist/esm/sdk/offline-export-app.js +23 -6
- package/dist/esm/sdk/offline-export-app.js.map +1 -1
- package/dist/esm/sdk/{router-DuGYOd3G.js → router-BWtacLJg.js} +1 -1
- package/dist/esm/sdk/{rpcCalls-BQrJMTdg.js → rpcCalls-CYGJSCgm.js} +3 -3
- package/dist/esm/sdk/{rpcCalls-YVeUVMk2.js → rpcCalls-DZZSa-sk.js} +57 -27
- package/dist/esm/sdk/{transactions-bqaAwL4k.js → transactions-Cn9xTWlK.js} +2 -2
- package/dist/esm/sdk/{transactions-bqaAwL4k.js.map → transactions-Cn9xTWlK.js.map} +1 -1
- package/dist/esm/sdk/{transactions-BalIhtJ9.js → transactions-DfdwDQCn.js} +1 -1
- package/dist/esm/sdk/wallet-iframe-host.js +549 -557
- package/dist/esm/server/email-recovery/emailParsers.js +3 -1
- package/dist/esm/server/email-recovery/emailParsers.js.map +1 -1
- package/dist/esm/server/email-recovery/index.js +6 -6
- package/dist/esm/server/email-recovery/index.js.map +1 -1
- package/dist/esm/server/email-recovery/rpcCalls.js +22 -3
- package/dist/esm/server/email-recovery/rpcCalls.js.map +1 -1
- package/dist/esm/server/router/cloudflare.js +8 -3
- package/dist/esm/server/router/cloudflare.js.map +1 -1
- package/dist/esm/server/router/express.js.map +1 -1
- package/dist/esm/server/sdk/src/core/defaultConfigs.js +2 -4
- package/dist/esm/server/sdk/src/core/defaultConfigs.js.map +1 -1
- package/dist/esm/server/sdk/src/core/nearCrypto.js +26 -8
- package/dist/esm/server/sdk/src/core/nearCrypto.js.map +1 -1
- package/dist/esm/wasm_vrf_worker/pkg/wasm_vrf_worker_bg.wasm +0 -0
- package/dist/types/src/core/TatchiPasskey/emailRecovery.d.ts +5 -4
- package/dist/types/src/core/TatchiPasskey/emailRecovery.d.ts.map +1 -1
- package/dist/types/src/core/TatchiPasskey/index.d.ts +1 -1
- package/dist/types/src/core/TatchiPasskey/index.d.ts.map +1 -1
- package/dist/types/src/core/TatchiPasskey/scanDevice.d.ts.map +1 -1
- package/dist/types/src/core/WalletIframe/TatchiPasskeyIframe.d.ts +1 -1
- package/dist/types/src/core/WalletIframe/TatchiPasskeyIframe.d.ts.map +1 -1
- package/dist/types/src/core/WalletIframe/client/router.d.ts +1 -1
- package/dist/types/src/core/WalletIframe/client/router.d.ts.map +1 -1
- package/dist/types/src/core/WalletIframe/shared/messages.d.ts +1 -1
- package/dist/types/src/core/WalletIframe/shared/messages.d.ts.map +1 -1
- package/dist/types/src/core/WebAuthnManager/SignerWorkerManager/handlers/validation.d.ts +2 -1
- package/dist/types/src/core/WebAuthnManager/SignerWorkerManager/handlers/validation.d.ts.map +1 -1
- package/dist/types/src/core/defaultConfigs.d.ts.map +1 -1
- package/dist/types/src/core/nearCrypto.d.ts +14 -0
- package/dist/types/src/core/nearCrypto.d.ts.map +1 -1
- package/dist/types/src/core/rpcCalls.d.ts +11 -8
- package/dist/types/src/core/rpcCalls.d.ts.map +1 -1
- package/dist/types/src/core/types/tatchi.d.ts +0 -4
- package/dist/types/src/core/types/tatchi.d.ts.map +1 -1
- package/dist/types/src/react/components/PasskeyAuthMenu/adapters/tatchi.d.ts +2 -0
- package/dist/types/src/react/components/PasskeyAuthMenu/adapters/tatchi.d.ts.map +1 -1
- package/dist/types/src/react/components/PasskeyAuthMenu/client.d.ts.map +1 -1
- package/dist/types/src/react/components/PasskeyAuthMenu/controller/useSDKEvents.d.ts +10 -0
- package/dist/types/src/react/components/PasskeyAuthMenu/controller/useSDKEvents.d.ts.map +1 -0
- package/dist/types/src/react/components/PasskeyAuthMenu/types.d.ts +8 -3
- package/dist/types/src/react/components/PasskeyAuthMenu/types.d.ts.map +1 -1
- package/dist/types/src/react/components/PasskeyAuthMenu/ui/ContentSwitcher.d.ts +2 -0
- package/dist/types/src/react/components/PasskeyAuthMenu/ui/ContentSwitcher.d.ts.map +1 -1
- package/dist/types/src/react/components/PasskeyAuthMenu/ui/EmailRecoverySlide.d.ts +1 -1
- package/dist/types/src/react/components/PasskeyAuthMenu/ui/EmailRecoverySlide.d.ts.map +1 -1
- package/dist/types/src/react/context/useSDKFlowRuntime.d.ts +10 -0
- package/dist/types/src/react/context/useSDKFlowRuntime.d.ts.map +1 -0
- package/dist/types/src/react/context/useTatchiContextValue.d.ts.map +1 -1
- package/dist/types/src/react/context/useTatchiWithSdkFlow.d.ts +9 -0
- package/dist/types/src/react/context/useTatchiWithSdkFlow.d.ts.map +1 -0
- package/dist/types/src/react/types.d.ts +31 -0
- package/dist/types/src/react/types.d.ts.map +1 -1
- package/dist/types/src/server/email-recovery/emailParsers.d.ts.map +1 -1
- package/dist/types/src/server/email-recovery/index.d.ts +5 -6
- package/dist/types/src/server/email-recovery/index.d.ts.map +1 -1
- package/dist/types/src/server/email-recovery/rpcCalls.d.ts +1 -0
- package/dist/types/src/server/email-recovery/rpcCalls.d.ts.map +1 -1
- package/dist/types/src/server/router/cloudflare-adaptor.d.ts.map +1 -1
- package/dist/workers/wasm_vrf_worker_bg.wasm +0 -0
- package/package.json +1 -1
- package/dist/esm/sdk/getDeviceNumber-fXizNGQl.js.map +0 -1
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.js');
|
|
2
|
+
const require_sdkSentEvents = require('../sdk/src/core/types/sdkSentEvents.js');
|
|
3
|
+
let react = require("react");
|
|
4
|
+
react = require_rolldown_runtime.__toESM(react);
|
|
5
|
+
|
|
6
|
+
//#region src/react/context/useTatchiWithSdkFlow.ts
|
|
7
|
+
require_sdkSentEvents.init_sdkSentEvents();
|
|
8
|
+
function useTatchiWithSdkFlow(args) {
|
|
9
|
+
const { tatchi, beginSdkFlow, appendSdkEventMessage, endSdkFlow } = args;
|
|
10
|
+
return (0, react.useMemo)(() => {
|
|
11
|
+
const loginAndCreateSessionWithSdkFlow = async (nearAccountId, options) => {
|
|
12
|
+
const seq = beginSdkFlow("login", nearAccountId);
|
|
13
|
+
const wrappedOptions = {
|
|
14
|
+
...options,
|
|
15
|
+
onEvent: (event) => {
|
|
16
|
+
appendSdkEventMessage(seq, event.message);
|
|
17
|
+
if (event.phase === require_sdkSentEvents.LoginPhase.STEP_4_LOGIN_COMPLETE && event.status === require_sdkSentEvents.LoginStatus.SUCCESS) endSdkFlow("login", seq, "success");
|
|
18
|
+
else if (event.phase === require_sdkSentEvents.LoginPhase.LOGIN_ERROR || event.status === require_sdkSentEvents.LoginStatus.ERROR) {
|
|
19
|
+
const error = "error" in event ? event.error : event.message;
|
|
20
|
+
endSdkFlow("login", seq, "error", error || event.message);
|
|
21
|
+
}
|
|
22
|
+
options?.onEvent?.(event);
|
|
23
|
+
},
|
|
24
|
+
onError: (error) => {
|
|
25
|
+
appendSdkEventMessage(seq, error.message);
|
|
26
|
+
endSdkFlow("login", seq, "error", error.message);
|
|
27
|
+
options?.onError?.(error);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
return await tatchi.loginAndCreateSession(nearAccountId, wrappedOptions);
|
|
31
|
+
};
|
|
32
|
+
const registerPasskeyWithSdkFlow = async (nearAccountId, options) => {
|
|
33
|
+
const seq = beginSdkFlow("register", nearAccountId);
|
|
34
|
+
const wrappedOptions = {
|
|
35
|
+
...options,
|
|
36
|
+
onEvent: (event) => {
|
|
37
|
+
appendSdkEventMessage(seq, event.message);
|
|
38
|
+
if (event.phase === require_sdkSentEvents.RegistrationPhase.STEP_8_REGISTRATION_COMPLETE && event.status === require_sdkSentEvents.RegistrationStatus.SUCCESS) endSdkFlow("register", seq, "success");
|
|
39
|
+
else if (event.phase === require_sdkSentEvents.RegistrationPhase.REGISTRATION_ERROR || event.status === require_sdkSentEvents.RegistrationStatus.ERROR) {
|
|
40
|
+
const error = "error" in event ? event.error : event.message;
|
|
41
|
+
endSdkFlow("register", seq, "error", error || event.message);
|
|
42
|
+
}
|
|
43
|
+
options?.onEvent?.(event);
|
|
44
|
+
},
|
|
45
|
+
onError: (error) => {
|
|
46
|
+
appendSdkEventMessage(seq, error.message);
|
|
47
|
+
endSdkFlow("register", seq, "error", error.message);
|
|
48
|
+
options?.onError?.(error);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
return await tatchi.registerPasskey(nearAccountId, wrappedOptions);
|
|
52
|
+
};
|
|
53
|
+
const recoverAccountFlowWithSdkFlow = async (args$1) => {
|
|
54
|
+
const seq = beginSdkFlow("recover", args$1?.accountId);
|
|
55
|
+
const options = args$1?.options;
|
|
56
|
+
const wrappedOptions = {
|
|
57
|
+
...options,
|
|
58
|
+
onEvent: (event) => {
|
|
59
|
+
appendSdkEventMessage(seq, event.message);
|
|
60
|
+
if (event.phase === require_sdkSentEvents.AccountRecoveryPhase.STEP_5_ACCOUNT_RECOVERY_COMPLETE && event.status === require_sdkSentEvents.AccountRecoveryStatus.SUCCESS) endSdkFlow("recover", seq, "success");
|
|
61
|
+
else if (event.phase === require_sdkSentEvents.AccountRecoveryPhase.ERROR || event.status === require_sdkSentEvents.AccountRecoveryStatus.ERROR) {
|
|
62
|
+
const error = "error" in event ? event.error : event.message;
|
|
63
|
+
endSdkFlow("recover", seq, "error", error || event.message);
|
|
64
|
+
}
|
|
65
|
+
options?.onEvent?.(event);
|
|
66
|
+
},
|
|
67
|
+
onError: (error) => {
|
|
68
|
+
appendSdkEventMessage(seq, error.message);
|
|
69
|
+
endSdkFlow("recover", seq, "error", error.message);
|
|
70
|
+
options?.onError?.(error);
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
return await tatchi.recoverAccountFlow({
|
|
74
|
+
...args$1,
|
|
75
|
+
options: wrappedOptions
|
|
76
|
+
});
|
|
77
|
+
};
|
|
78
|
+
return new Proxy(tatchi, { get(target, prop, receiver) {
|
|
79
|
+
if (prop === "loginAndCreateSession") return loginAndCreateSessionWithSdkFlow;
|
|
80
|
+
if (prop === "registerPasskey") return registerPasskeyWithSdkFlow;
|
|
81
|
+
if (prop === "recoverAccountFlow") return recoverAccountFlowWithSdkFlow;
|
|
82
|
+
const value = Reflect.get(target, prop, receiver);
|
|
83
|
+
if (typeof value === "function") return value.bind(target);
|
|
84
|
+
return value;
|
|
85
|
+
} });
|
|
86
|
+
}, [
|
|
87
|
+
appendSdkEventMessage,
|
|
88
|
+
beginSdkFlow,
|
|
89
|
+
endSdkFlow,
|
|
90
|
+
tatchi
|
|
91
|
+
]);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
//#endregion
|
|
95
|
+
exports.useTatchiWithSdkFlow = useTatchiWithSdkFlow;
|
|
96
|
+
//# sourceMappingURL=useTatchiWithSdkFlow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTatchiWithSdkFlow.js","names":["loginAndCreateSessionWithSdkFlow: LoginAndCreateSessionFn","wrappedOptions: LoginHooksOptions","LoginPhase","LoginStatus","registerPasskeyWithSdkFlow: RegisterPasskeyFn","wrappedOptions: RegistrationHooksOptions","RegistrationPhase","RegistrationStatus","recoverAccountFlowWithSdkFlow: RecoverAccountFlowFn","args","options: AccountRecoveryHooksOptions | undefined","wrappedOptions: AccountRecoveryHooksOptions","AccountRecoveryPhase","AccountRecoveryStatus","value: unknown"],"sources":["../../../../src/react/context/useTatchiWithSdkFlow.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport type { TatchiPasskey } from '@/core/TatchiPasskey';\nimport {\n AccountRecoveryPhase,\n AccountRecoveryStatus,\n type AccountRecoveryHooksOptions,\n type AccountRecoverySSEEvent,\n LoginPhase,\n LoginStatus,\n type LoginHooksOptions,\n type LoginSSEvent,\n RegistrationPhase,\n RegistrationStatus,\n type RegistrationHooksOptions,\n type RegistrationSSEEvent,\n} from '@/core/types/sdkSentEvents';\n\nexport function useTatchiWithSdkFlow(args: {\n tatchi: TatchiPasskey;\n beginSdkFlow: (kind: 'login' | 'register' | 'recover', accountId?: string) => number;\n appendSdkEventMessage: (seq: number, message: string) => void;\n endSdkFlow: (kind: 'login' | 'register' | 'recover', seq: number, status: 'success' | 'error', error?: string) => void;\n}): TatchiPasskey {\n const { tatchi, beginSdkFlow, appendSdkEventMessage, endSdkFlow } = args;\n\n return useMemo(() => {\n /**\n * We use a `Proxy` to instrument a few core flow entrypoints (login/register/recover)\n * while preserving the full `TatchiPasskey` API surface.\n *\n * This lets *all* callers (not just PasskeyAuthMenu) use `ctx.tatchi.*` directly and\n * still have `sdkFlow` update as events stream in.\n */\n type LoginAndCreateSessionFn = TatchiPasskey['loginAndCreateSession'];\n type RegisterPasskeyFn = TatchiPasskey['registerPasskey'];\n type RecoverAccountFlowFn = TatchiPasskey['recoverAccountFlow'];\n\n const loginAndCreateSessionWithSdkFlow: LoginAndCreateSessionFn = async (\n nearAccountId,\n options,\n ) => {\n const seq = beginSdkFlow('login', nearAccountId);\n const wrappedOptions: LoginHooksOptions = {\n ...options,\n onEvent: (event: LoginSSEvent) => {\n appendSdkEventMessage(seq, event.message);\n if (event.phase === LoginPhase.STEP_4_LOGIN_COMPLETE && event.status === LoginStatus.SUCCESS) {\n endSdkFlow('login', seq, 'success');\n } else if (event.phase === LoginPhase.LOGIN_ERROR || event.status === LoginStatus.ERROR) {\n const error = 'error' in event ? event.error : event.message;\n endSdkFlow('login', seq, 'error', error || event.message);\n }\n options?.onEvent?.(event);\n },\n onError: (error: Error) => {\n appendSdkEventMessage(seq, error.message);\n endSdkFlow('login', seq, 'error', error.message);\n options?.onError?.(error);\n },\n };\n\n return await tatchi.loginAndCreateSession(nearAccountId, wrappedOptions);\n };\n\n const registerPasskeyWithSdkFlow: RegisterPasskeyFn = async (\n nearAccountId,\n options,\n ) => {\n const seq = beginSdkFlow('register', nearAccountId);\n const wrappedOptions: RegistrationHooksOptions = {\n ...options,\n onEvent: (event: RegistrationSSEEvent) => {\n appendSdkEventMessage(seq, event.message);\n if (\n event.phase === RegistrationPhase.STEP_8_REGISTRATION_COMPLETE &&\n event.status === RegistrationStatus.SUCCESS\n ) {\n endSdkFlow('register', seq, 'success');\n } else if (event.phase === RegistrationPhase.REGISTRATION_ERROR || event.status === RegistrationStatus.ERROR) {\n const error = 'error' in event ? event.error : event.message;\n endSdkFlow('register', seq, 'error', error || event.message);\n }\n options?.onEvent?.(event);\n },\n onError: (error: Error) => {\n appendSdkEventMessage(seq, error.message);\n endSdkFlow('register', seq, 'error', error.message);\n options?.onError?.(error);\n },\n };\n\n return await tatchi.registerPasskey(nearAccountId, wrappedOptions);\n };\n\n const recoverAccountFlowWithSdkFlow: RecoverAccountFlowFn = async (args) => {\n const seq = beginSdkFlow('recover', args?.accountId);\n const options: AccountRecoveryHooksOptions | undefined = args?.options;\n\n const wrappedOptions: AccountRecoveryHooksOptions = {\n ...options,\n onEvent: (event: AccountRecoverySSEEvent) => {\n appendSdkEventMessage(seq, event.message);\n if (\n event.phase === AccountRecoveryPhase.STEP_5_ACCOUNT_RECOVERY_COMPLETE &&\n event.status === AccountRecoveryStatus.SUCCESS\n ) {\n endSdkFlow('recover', seq, 'success');\n } else if (event.phase === AccountRecoveryPhase.ERROR || event.status === AccountRecoveryStatus.ERROR) {\n const error = 'error' in event ? event.error : event.message;\n endSdkFlow('recover', seq, 'error', error || event.message);\n }\n options?.onEvent?.(event);\n },\n onError: (error: Error) => {\n appendSdkEventMessage(seq, error.message);\n endSdkFlow('recover', seq, 'error', error.message);\n options?.onError?.(error);\n },\n };\n\n return await tatchi.recoverAccountFlow({\n ...args,\n options: wrappedOptions,\n });\n };\n\n return new Proxy(tatchi, {\n get(target, prop, receiver) {\n if (prop === 'loginAndCreateSession') {\n return loginAndCreateSessionWithSdkFlow;\n }\n\n if (prop === 'registerPasskey') {\n return registerPasskeyWithSdkFlow;\n }\n\n if (prop === 'recoverAccountFlow') {\n return recoverAccountFlowWithSdkFlow;\n }\n\n const value: unknown = Reflect.get(target as object, prop, receiver);\n // For non-wrapped methods, bind to preserve `this` on the class instance.\n if (typeof value === 'function') return (value as (...args: unknown[]) => unknown).bind(target);\n return value;\n },\n });\n }, [appendSdkEventMessage, beginSdkFlow, endSdkFlow, tatchi]);\n}\n\nexport default useTatchiWithSdkFlow;\n"],"mappings":";;;;;;;AAiBA,SAAgB,qBAAqB,MAKnB;CAChB,MAAM,EAAE,QAAQ,cAAc,uBAAuB,eAAe;AAEpE,iCAAqB;EAYnB,MAAMA,mCAA4D,OAChE,eACA,YACG;GACH,MAAM,MAAM,aAAa,SAAS;GAClC,MAAMC,iBAAoC;IACxC,GAAG;IACH,UAAU,UAAwB;AAChC,2BAAsB,KAAK,MAAM;AACjC,SAAI,MAAM,UAAUC,iCAAW,yBAAyB,MAAM,WAAWC,kCAAY,QACnF,YAAW,SAAS,KAAK;cAChB,MAAM,UAAUD,iCAAW,eAAe,MAAM,WAAWC,kCAAY,OAAO;MACvF,MAAM,QAAQ,WAAW,QAAQ,MAAM,QAAQ,MAAM;AACrD,iBAAW,SAAS,KAAK,SAAS,SAAS,MAAM;;AAEnD,cAAS,UAAU;;IAErB,UAAU,UAAiB;AACzB,2BAAsB,KAAK,MAAM;AACjC,gBAAW,SAAS,KAAK,SAAS,MAAM;AACxC,cAAS,UAAU;;;AAIvB,UAAO,MAAM,OAAO,sBAAsB,eAAe;;EAG3D,MAAMC,6BAAgD,OACpD,eACA,YACG;GACH,MAAM,MAAM,aAAa,YAAY;GACrC,MAAMC,iBAA2C;IAC/C,GAAG;IACH,UAAU,UAAgC;AACxC,2BAAsB,KAAK,MAAM;AACjC,SACE,MAAM,UAAUC,wCAAkB,gCAClC,MAAM,WAAWC,yCAAmB,QAEpC,YAAW,YAAY,KAAK;cACnB,MAAM,UAAUD,wCAAkB,sBAAsB,MAAM,WAAWC,yCAAmB,OAAO;MAC5G,MAAM,QAAQ,WAAW,QAAQ,MAAM,QAAQ,MAAM;AACrD,iBAAW,YAAY,KAAK,SAAS,SAAS,MAAM;;AAEtD,cAAS,UAAU;;IAErB,UAAU,UAAiB;AACzB,2BAAsB,KAAK,MAAM;AACjC,gBAAW,YAAY,KAAK,SAAS,MAAM;AAC3C,cAAS,UAAU;;;AAIvB,UAAO,MAAM,OAAO,gBAAgB,eAAe;;EAGrD,MAAMC,gCAAsD,OAAO,WAAS;GAC1E,MAAM,MAAM,aAAa,WAAWC,QAAM;GAC1C,MAAMC,UAAmDD,QAAM;GAE/D,MAAME,iBAA8C;IAClD,GAAG;IACH,UAAU,UAAmC;AAC3C,2BAAsB,KAAK,MAAM;AACjC,SACE,MAAM,UAAUC,2CAAqB,oCACrC,MAAM,WAAWC,4CAAsB,QAEvC,YAAW,WAAW,KAAK;cAClB,MAAM,UAAUD,2CAAqB,SAAS,MAAM,WAAWC,4CAAsB,OAAO;MACrG,MAAM,QAAQ,WAAW,QAAQ,MAAM,QAAQ,MAAM;AACrD,iBAAW,WAAW,KAAK,SAAS,SAAS,MAAM;;AAErD,cAAS,UAAU;;IAErB,UAAU,UAAiB;AACzB,2BAAsB,KAAK,MAAM;AACjC,gBAAW,WAAW,KAAK,SAAS,MAAM;AAC1C,cAAS,UAAU;;;AAIvB,UAAO,MAAM,OAAO,mBAAmB;IACrC,GAAGJ;IACH,SAAS;;;AAIb,SAAO,IAAI,MAAM,QAAQ,EACvB,IAAI,QAAQ,MAAM,UAAU;AAC1B,OAAI,SAAS,wBACX,QAAO;AAGT,OAAI,SAAS,kBACX,QAAO;AAGT,OAAI,SAAS,qBACX,QAAO;GAGT,MAAMK,QAAiB,QAAQ,IAAI,QAAkB,MAAM;AAE3D,OAAI,OAAO,UAAU,WAAY,QAAQ,MAA0C,KAAK;AACxF,UAAO;;IAGV;EAAC;EAAuB;EAAc;EAAY"}
|
|
@@ -102,6 +102,7 @@ var init_EmailRecovery = require_rolldown_runtime.__esm({ "src/core/EmailRecover
|
|
|
102
102
|
//#endregion
|
|
103
103
|
init_EmailRecovery();
|
|
104
104
|
exports.bytesToHex = bytesToHex;
|
|
105
|
+
exports.canonicalizeEmail = canonicalizeEmail;
|
|
105
106
|
exports.getLocalRecoveryEmails = getLocalRecoveryEmails;
|
|
106
107
|
Object.defineProperty(exports, 'init_EmailRecovery', {
|
|
107
108
|
enumerable: true,
|
|
@@ -6,7 +6,9 @@ const require_vrf_worker = require('../types/vrf-worker.js');
|
|
|
6
6
|
const require_errors = require('../../utils/errors.js');
|
|
7
7
|
const require_sdkSentEvents = require('../types/sdkSentEvents.js');
|
|
8
8
|
const require_rpc = require('../types/rpc.js');
|
|
9
|
+
const require_rpcCalls = require('../rpcCalls.js');
|
|
9
10
|
const require_getDeviceNumber = require('../WebAuthnManager/SignerWorkerManager/getDeviceNumber.js');
|
|
11
|
+
const require_nearCrypto = require('../nearCrypto.js');
|
|
10
12
|
const require_login = require('./login.js');
|
|
11
13
|
const require_emailRecoveryPendingStore = require('../EmailRecovery/emailRecoveryPendingStore.js');
|
|
12
14
|
const require_index$1 = require('../EmailRecovery/index.js');
|
|
@@ -25,16 +27,12 @@ function getEmailRecoveryConfig(configs) {
|
|
|
25
27
|
const maxPollingDurationMs = Number(relayerEmailCfg.maxPollingDurationMs);
|
|
26
28
|
const pendingTtlMs = Number(relayerEmailCfg.pendingTtlMs);
|
|
27
29
|
const mailtoAddress = String(relayerEmailCfg.mailtoAddress);
|
|
28
|
-
const dkimVerifierAccountId = String(relayerEmailCfg.dkimVerifierAccountId);
|
|
29
|
-
const verificationViewMethod = String(relayerEmailCfg.verificationViewMethod);
|
|
30
30
|
return {
|
|
31
31
|
minBalanceYocto,
|
|
32
32
|
pollingIntervalMs,
|
|
33
33
|
maxPollingDurationMs,
|
|
34
34
|
pendingTtlMs,
|
|
35
|
-
mailtoAddress
|
|
36
|
-
dkimVerifierAccountId,
|
|
37
|
-
verificationViewMethod
|
|
35
|
+
mailtoAddress
|
|
38
36
|
};
|
|
39
37
|
}
|
|
40
38
|
function generateEmailRecoveryRequestId() {
|
|
@@ -59,6 +57,8 @@ var init_emailRecovery = require_rolldown_runtime.__esm({ "src/core/TatchiPasske
|
|
|
59
57
|
require_login.init_login();
|
|
60
58
|
require_index$1.init_EmailRecovery();
|
|
61
59
|
require_emailRecovery.init_emailRecovery();
|
|
60
|
+
require_rpcCalls.init_rpcCalls();
|
|
61
|
+
require_nearCrypto.init_nearCrypto();
|
|
62
62
|
EmailRecoveryFlow = class {
|
|
63
63
|
context;
|
|
64
64
|
options;
|
|
@@ -151,10 +151,9 @@ var init_emailRecovery = require_rolldown_runtime.__esm({ "src/core/TatchiPasske
|
|
|
151
151
|
await this.fail(1, require_errors.errorMessage(err) || "Failed to fetch account balance for recovery");
|
|
152
152
|
}
|
|
153
153
|
}
|
|
154
|
-
|
|
154
|
+
getCanonicalRecoveryEmail(recoveryEmail) {
|
|
155
155
|
const canonicalEmail = String(recoveryEmail || "").trim().toLowerCase();
|
|
156
|
-
|
|
157
|
-
return canonicalEmail;
|
|
156
|
+
return canonicalEmail || void 0;
|
|
158
157
|
}
|
|
159
158
|
async getNextDeviceNumberFromContract(nearAccountId) {
|
|
160
159
|
try {
|
|
@@ -212,7 +211,7 @@ var init_emailRecovery = require_rolldown_runtime.__esm({ "src/core/TatchiPasske
|
|
|
212
211
|
message: "New device key created; please send the recovery email from your registered address.",
|
|
213
212
|
data: {
|
|
214
213
|
accountId: rec.accountId,
|
|
215
|
-
recoveryEmail: rec.recoveryEmail,
|
|
214
|
+
...rec.recoveryEmail ? { recoveryEmail: rec.recoveryEmail } : {},
|
|
216
215
|
nearPublicKey: rec.nearPublicKey,
|
|
217
216
|
requestId: rec.requestId,
|
|
218
217
|
mailtoUrl
|
|
@@ -228,44 +227,57 @@ var init_emailRecovery = require_rolldown_runtime.__esm({ "src/core/TatchiPasske
|
|
|
228
227
|
data
|
|
229
228
|
});
|
|
230
229
|
}
|
|
231
|
-
async
|
|
232
|
-
const { dkimVerifierAccountId, verificationViewMethod } = this.getConfig();
|
|
233
|
-
if (!dkimVerifierAccountId) return null;
|
|
230
|
+
async checkViaEmailRecovererAttempt(rec) {
|
|
234
231
|
try {
|
|
235
|
-
const
|
|
236
|
-
|
|
237
|
-
if (!result) return {
|
|
232
|
+
const attempt = await require_rpcCalls.getEmailRecoveryAttempt(this.context.nearClient, rec.accountId, rec.requestId);
|
|
233
|
+
if (!attempt) return {
|
|
238
234
|
completed: false,
|
|
239
|
-
success: false
|
|
235
|
+
success: false,
|
|
236
|
+
missing: true
|
|
240
237
|
};
|
|
241
|
-
if (
|
|
242
|
-
|
|
243
|
-
|
|
238
|
+
if (attempt.request_id && attempt.request_id !== rec.requestId) return {
|
|
239
|
+
completed: true,
|
|
240
|
+
success: false,
|
|
241
|
+
errorMessage: "Email recovery attempt request_id does not match requested requestId."
|
|
242
|
+
};
|
|
243
|
+
if (attempt.new_public_key && attempt.new_public_key !== rec.nearPublicKey) {
|
|
244
|
+
const expected = require_nearCrypto.ensureEd25519Prefix(rec.nearPublicKey);
|
|
245
|
+
const actual = require_nearCrypto.ensureEd25519Prefix(attempt.new_public_key);
|
|
246
|
+
if (actual === expected) {} else return {
|
|
244
247
|
completed: true,
|
|
245
248
|
success: false,
|
|
246
|
-
errorMessage:
|
|
247
|
-
transactionHash: result.transaction_hash
|
|
249
|
+
errorMessage: `Email recovery new_public_key mismatch for request ${rec.requestId}. Expected ${expected}; got ${actual}. This usually means the recovery email you sent was generated for a different device/attempt.`
|
|
248
250
|
};
|
|
249
251
|
}
|
|
250
|
-
|
|
252
|
+
const normalized = attempt.status.toLowerCase();
|
|
253
|
+
if (normalized === "complete" || normalized === "completed") return {
|
|
251
254
|
completed: true,
|
|
252
|
-
success:
|
|
253
|
-
errorMessage: "Email verification account_id does not match requested account.",
|
|
254
|
-
transactionHash: result.transaction_hash
|
|
255
|
+
success: true
|
|
255
256
|
};
|
|
256
|
-
if (
|
|
257
|
+
if (normalized.includes("failed")) return {
|
|
257
258
|
completed: true,
|
|
258
259
|
success: false,
|
|
259
|
-
errorMessage:
|
|
260
|
-
transactionHash: result.transaction_hash
|
|
260
|
+
errorMessage: attempt.error || `Email recovery failed (${attempt.status || "unknown status"})`
|
|
261
261
|
};
|
|
262
262
|
return {
|
|
263
|
-
completed:
|
|
264
|
-
success:
|
|
265
|
-
transactionHash: result.transaction_hash
|
|
263
|
+
completed: false,
|
|
264
|
+
success: false
|
|
266
265
|
};
|
|
267
266
|
} catch (err) {
|
|
268
|
-
console.warn("[EmailRecoveryFlow]
|
|
267
|
+
console.warn("[EmailRecoveryFlow] get_recovery_attempt view failed; will retry", err);
|
|
268
|
+
return null;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
async isRecoveryAccessKeyPresent(rec) {
|
|
272
|
+
try {
|
|
273
|
+
await this.context.nearClient.viewAccessKey(rec.accountId, rec.nearPublicKey);
|
|
274
|
+
return true;
|
|
275
|
+
} catch (err) {
|
|
276
|
+
const kind = typeof err?.kind === "string" ? String(err.kind) : "";
|
|
277
|
+
const short = typeof err?.short === "string" ? String(err.short) : "";
|
|
278
|
+
const msg = typeof err?.message === "string" ? String(err.message) : "";
|
|
279
|
+
if (/AccessKeyDoesNotExist/i.test(kind) || /AccessKeyDoesNotExist/i.test(short) || /access key does not exist/i.test(msg) || /access key .*does not exist/i.test(msg)) return false;
|
|
280
|
+
console.warn("[EmailRecoveryFlow] view_access_key failed while checking recovery key; will retry", err);
|
|
269
281
|
return null;
|
|
270
282
|
}
|
|
271
283
|
}
|
|
@@ -374,7 +386,7 @@ var init_emailRecovery = require_rolldown_runtime.__esm({ "src/core/TatchiPasske
|
|
|
374
386
|
});
|
|
375
387
|
const nearAccountId = await this.assertValidAccountIdOrFail(1, accountId);
|
|
376
388
|
await this.assertSufficientBalance(nearAccountId);
|
|
377
|
-
const canonicalEmail =
|
|
389
|
+
const canonicalEmail = this.getCanonicalRecoveryEmail(recoveryEmail);
|
|
378
390
|
const deviceNumber = await this.getNextDeviceNumberFromContract(nearAccountId);
|
|
379
391
|
this.phase = require_sdkSentEvents.EmailRecoveryPhase.STEP_2_TOUCH_ID_REGISTRATION;
|
|
380
392
|
this.emit({
|
|
@@ -505,29 +517,39 @@ var init_emailRecovery = require_rolldown_runtime.__esm({ "src/core/TatchiPasske
|
|
|
505
517
|
await this.options?.afterCall?.(true, void 0);
|
|
506
518
|
}
|
|
507
519
|
async pollUntilAddKey(rec) {
|
|
508
|
-
const { pollingIntervalMs, maxPollingDurationMs
|
|
509
|
-
if (!dkimVerifierAccountId) {
|
|
510
|
-
const err$1 = this.emitError(4, "Email recovery verification contract (dkimVerifierAccountId) is not configured");
|
|
511
|
-
await this.options?.afterCall?.(false);
|
|
512
|
-
throw err$1;
|
|
513
|
-
}
|
|
520
|
+
const { pollingIntervalMs, maxPollingDurationMs } = this.getConfig();
|
|
514
521
|
this.phase = require_sdkSentEvents.EmailRecoveryPhase.STEP_4_POLLING_VERIFICATION_RESULT;
|
|
515
522
|
this.pollingStartedAt = Date.now();
|
|
523
|
+
let sawAttempt = false;
|
|
516
524
|
const pollResult = await this.pollUntil({
|
|
517
525
|
intervalMs: pollingIntervalMs,
|
|
518
526
|
timeoutMs: maxPollingDurationMs,
|
|
519
527
|
isCancelled: () => this.cancelled,
|
|
520
528
|
tick: async ({ elapsedMs, pollCount }) => {
|
|
521
|
-
const verification = await this.
|
|
522
|
-
|
|
523
|
-
|
|
529
|
+
const verification = await this.checkViaEmailRecovererAttempt(rec);
|
|
530
|
+
if (verification && !verification.missing) sawAttempt = true;
|
|
531
|
+
let completed = verification?.completed === true;
|
|
532
|
+
let success = verification?.success === true;
|
|
533
|
+
let errorMessage$1 = verification?.errorMessage;
|
|
534
|
+
let transactionHash;
|
|
535
|
+
if (verification?.missing) {
|
|
536
|
+
const hasKey = await this.isRecoveryAccessKeyPresent(rec);
|
|
537
|
+
if (hasKey === true) {
|
|
538
|
+
completed = true;
|
|
539
|
+
success = true;
|
|
540
|
+
} else if (hasKey === false && sawAttempt) {
|
|
541
|
+
completed = true;
|
|
542
|
+
success = false;
|
|
543
|
+
errorMessage$1 = "Email recovery attempt was cleared on-chain before completion. Please resend the recovery email or restart the flow.";
|
|
544
|
+
} else if (hasKey === null) return { done: false };
|
|
545
|
+
}
|
|
524
546
|
this.emit({
|
|
525
547
|
step: 4,
|
|
526
548
|
phase: require_sdkSentEvents.EmailRecoveryPhase.STEP_4_POLLING_VERIFICATION_RESULT,
|
|
527
549
|
status: require_sdkSentEvents.EmailRecoveryStatus.PROGRESS,
|
|
528
|
-
message: completed && success ? `Email
|
|
550
|
+
message: completed && success ? `Email recovery completed for request ${rec.requestId}; finalizing registration` : `Waiting for email recovery for request ${rec.requestId}`,
|
|
529
551
|
data: this.buildPollingEventData(rec, {
|
|
530
|
-
transactionHash
|
|
552
|
+
transactionHash,
|
|
531
553
|
elapsedMs,
|
|
532
554
|
pollCount
|
|
533
555
|
})
|
|
@@ -537,7 +559,7 @@ var init_emailRecovery = require_rolldown_runtime.__esm({ "src/core/TatchiPasske
|
|
|
537
559
|
done: true,
|
|
538
560
|
value: {
|
|
539
561
|
outcome: "failed",
|
|
540
|
-
errorMessage:
|
|
562
|
+
errorMessage: errorMessage$1 || "Email recovery failed"
|
|
541
563
|
}
|
|
542
564
|
};
|
|
543
565
|
return {
|