@tatchi-xyz/sdk 0.16.0 → 0.18.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/EmailRecovery/emailRecoveryPendingStore.js +69 -0
- package/dist/cjs/core/EmailRecovery/emailRecoveryPendingStore.js.map +1 -0
- package/dist/cjs/core/EmailRecovery/index.js +32 -13
- package/dist/cjs/core/EmailRecovery/index.js.map +1 -1
- package/dist/cjs/core/IndexedDBManager/passkeyClientDB.js +35 -36
- package/dist/cjs/core/IndexedDBManager/passkeyClientDB.js.map +1 -1
- package/dist/cjs/core/NearClient.js +2 -1
- package/dist/cjs/core/NearClient.js.map +1 -1
- package/dist/cjs/core/TatchiPasskey/emailRecovery.js +557 -377
- package/dist/cjs/core/TatchiPasskey/emailRecovery.js.map +1 -1
- package/dist/cjs/core/TatchiPasskey/faucets/createAccountRelayServer.js +1 -0
- package/dist/cjs/core/TatchiPasskey/faucets/createAccountRelayServer.js.map +1 -1
- package/dist/cjs/core/TatchiPasskey/index.js +26 -0
- package/dist/cjs/core/TatchiPasskey/index.js.map +1 -1
- package/dist/cjs/core/TatchiPasskey/linkDevice.js +2 -0
- package/dist/cjs/core/TatchiPasskey/linkDevice.js.map +1 -1
- package/dist/cjs/core/TatchiPasskey/login.js +15 -4
- package/dist/cjs/core/TatchiPasskey/login.js.map +1 -1
- package/dist/cjs/core/TatchiPasskey/recoverAccount.js +1 -0
- package/dist/cjs/core/TatchiPasskey/recoverAccount.js.map +1 -1
- package/dist/cjs/core/TatchiPasskey/relay.js +23 -1
- package/dist/cjs/core/TatchiPasskey/relay.js.map +1 -1
- package/dist/cjs/core/TatchiPasskey/scanDevice.js +1 -0
- package/dist/cjs/core/TatchiPasskey/scanDevice.js.map +1 -1
- package/dist/cjs/core/WalletIframe/client/IframeTransport.js +3 -0
- package/dist/cjs/core/WalletIframe/client/IframeTransport.js.map +1 -1
- package/dist/cjs/core/WalletIframe/client/router.js +15 -2
- package/dist/cjs/core/WalletIframe/client/router.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/LitComponents/IframeTxConfirmer/viewer-drawer.js +1 -1
- package/dist/cjs/core/WebAuthnManager/LitComponents/IframeTxConfirmer/viewer-drawer.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/LitComponents/IframeTxConfirmer/viewer-modal.js +52 -52
- package/dist/cjs/core/WebAuthnManager/LitComponents/IframeTxConfirmer/viewer-modal.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/SignerWorkerManager/getDeviceNumber.js +10 -1
- package/dist/cjs/core/WebAuthnManager/SignerWorkerManager/getDeviceNumber.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/SignerWorkerManager/handlers/checkCanRegisterUser.js +1 -0
- package/dist/cjs/core/WebAuthnManager/SignerWorkerManager/handlers/checkCanRegisterUser.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/SignerWorkerManager/handlers/decryptPrivateKeyWithPrf.js +1 -0
- package/dist/cjs/core/WebAuthnManager/SignerWorkerManager/handlers/decryptPrivateKeyWithPrf.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/SignerWorkerManager/handlers/deriveNearKeypairAndEncryptFromSerialized.js +1 -0
- package/dist/cjs/core/WebAuthnManager/SignerWorkerManager/handlers/deriveNearKeypairAndEncryptFromSerialized.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/SignerWorkerManager/handlers/exportNearKeypairUi.js +1 -0
- package/dist/cjs/core/WebAuthnManager/SignerWorkerManager/handlers/exportNearKeypairUi.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/SignerWorkerManager/handlers/registerDevice2WithDerivedKey.js +2 -1
- package/dist/cjs/core/WebAuthnManager/SignerWorkerManager/handlers/registerDevice2WithDerivedKey.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/SignerWorkerManager/handlers/signDelegateAction.js +1 -0
- package/dist/cjs/core/WebAuthnManager/SignerWorkerManager/handlers/signDelegateAction.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/SignerWorkerManager/handlers/signNep413Message.js +1 -0
- package/dist/cjs/core/WebAuthnManager/SignerWorkerManager/handlers/signNep413Message.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/SignerWorkerManager/handlers/signTransactionsWithActions.js +1 -0
- package/dist/cjs/core/WebAuthnManager/SignerWorkerManager/handlers/signTransactionsWithActions.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/SignerWorkerManager/handlers/validation.js +2 -0
- package/dist/cjs/core/WebAuthnManager/SignerWorkerManager/handlers/validation.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/SignerWorkerManager/index.js +1 -0
- package/dist/cjs/core/WebAuthnManager/SignerWorkerManager/index.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/vrf.js +1 -0
- package/dist/cjs/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/vrf.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/webauthn.js +6 -0
- package/dist/cjs/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/webauthn.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/determineConfirmationConfig.js +2 -1
- package/dist/cjs/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/determineConfirmationConfig.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/localOnly.js +1 -0
- package/dist/cjs/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/localOnly.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/registration.js +1 -0
- package/dist/cjs/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/registration.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/transactions.js +4 -15
- package/dist/cjs/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/transactions.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/VrfWorkerManager/handlers/deriveVrfKeypairFromPrf.js +1 -0
- package/dist/cjs/core/WebAuthnManager/VrfWorkerManager/handlers/deriveVrfKeypairFromPrf.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/VrfWorkerManager/handlers/generateVrfChallenge.js +1 -0
- package/dist/cjs/core/WebAuthnManager/VrfWorkerManager/handlers/generateVrfChallenge.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/VrfWorkerManager/handlers/generateVrfKeypairBootstrap.js +1 -0
- package/dist/cjs/core/WebAuthnManager/VrfWorkerManager/handlers/generateVrfKeypairBootstrap.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/WebAuthnFallbacks/index.js +17 -0
- package/dist/cjs/core/WebAuthnManager/WebAuthnFallbacks/index.js.map +1 -0
- package/dist/cjs/core/WebAuthnManager/WebAuthnFallbacks/safari-fallbacks.js +64 -54
- package/dist/cjs/core/WebAuthnManager/WebAuthnFallbacks/safari-fallbacks.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/credentialsHelpers.js +12 -2
- package/dist/cjs/core/WebAuthnManager/credentialsHelpers.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/index.js +6 -1
- package/dist/cjs/core/WebAuthnManager/index.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/touchIdPrompt.js +209 -201
- package/dist/cjs/core/WebAuthnManager/touchIdPrompt.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/userHandle.js +2 -1
- package/dist/cjs/core/WebAuthnManager/userHandle.js.map +1 -1
- package/dist/cjs/core/defaultConfigs.js +1 -1
- package/dist/cjs/core/defaultConfigs.js.map +1 -1
- package/dist/cjs/core/rpcCalls.js +8 -0
- package/dist/cjs/core/rpcCalls.js.map +1 -1
- package/dist/cjs/core/types/vrf-worker.js +10 -1
- package/dist/cjs/core/types/vrf-worker.js.map +1 -1
- package/dist/cjs/index.js +6 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/react/components/AccountMenuButton/{LinkedDevicesModal-STvIsylA.css → LinkedDevicesModal-CSSowiHP.css} +1 -1
- package/dist/{esm/react/components/AccountMenuButton/LinkedDevicesModal-STvIsylA.css.map → cjs/react/components/AccountMenuButton/LinkedDevicesModal-CSSowiHP.css.map} +1 -1
- package/dist/cjs/react/components/AccountMenuButton/{ProfileDropdown-iARgUwK1.css → ProfileDropdown-CEPMZ1gY.css} +1 -1
- package/dist/{esm/react/components/AccountMenuButton/ProfileDropdown-iARgUwK1.css.map → cjs/react/components/AccountMenuButton/ProfileDropdown-CEPMZ1gY.css.map} +1 -1
- package/dist/cjs/react/components/AccountMenuButton/{Web3AuthProfileButton-Db3NeoAC.css → Web3AuthProfileButton-DopOg7Xc.css} +1 -1
- package/dist/cjs/react/components/AccountMenuButton/{Web3AuthProfileButton-Db3NeoAC.css.map → Web3AuthProfileButton-DopOg7Xc.css.map} +1 -1
- package/dist/cjs/react/components/AccountMenuButton/icons/{TouchIcon-BXM5NR4A.css → TouchIcon-BQWentvJ.css} +1 -1
- package/dist/cjs/react/components/AccountMenuButton/icons/{TouchIcon-BXM5NR4A.css.map → TouchIcon-BQWentvJ.css.map} +1 -1
- package/dist/cjs/react/components/PasskeyAuthMenu/{PasskeyAuthMenu-De1qTSmU.css → PasskeyAuthMenu-DwrzWMYx.css} +14 -1
- package/dist/cjs/react/components/PasskeyAuthMenu/{PasskeyAuthMenu-De1qTSmU.css.map → PasskeyAuthMenu-DwrzWMYx.css.map} +1 -1
- package/dist/cjs/react/components/PasskeyAuthMenu/ui/EmailRecoverySlide.js +122 -53
- package/dist/cjs/react/components/PasskeyAuthMenu/ui/EmailRecoverySlide.js.map +1 -1
- package/dist/cjs/react/components/{ShowQRCode-DCnR__fx.css → ShowQRCode-CCN4h6Uv.css} +1 -1
- package/dist/cjs/react/components/{ShowQRCode-DCnR__fx.css.map → ShowQRCode-CCN4h6Uv.css.map} +1 -1
- package/dist/cjs/react/deviceDetection.js +75 -92
- package/dist/cjs/react/deviceDetection.js.map +1 -1
- package/dist/cjs/react/hooks/useQRCamera.js +1 -0
- package/dist/cjs/react/hooks/useQRCamera.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/EmailRecovery/emailRecoveryPendingStore.js +69 -0
- package/dist/cjs/react/sdk/src/core/EmailRecovery/emailRecoveryPendingStore.js.map +1 -0
- package/dist/cjs/react/sdk/src/core/EmailRecovery/index.js +32 -13
- package/dist/cjs/react/sdk/src/core/EmailRecovery/index.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/IndexedDBManager/passkeyClientDB.js +35 -36
- package/dist/cjs/react/sdk/src/core/IndexedDBManager/passkeyClientDB.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/NearClient.js +2 -1
- package/dist/cjs/react/sdk/src/core/NearClient.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/TatchiPasskey/emailRecovery.js +557 -377
- package/dist/cjs/react/sdk/src/core/TatchiPasskey/emailRecovery.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/TatchiPasskey/faucets/createAccountRelayServer.js +1 -0
- package/dist/cjs/react/sdk/src/core/TatchiPasskey/faucets/createAccountRelayServer.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/TatchiPasskey/index.js +26 -0
- package/dist/cjs/react/sdk/src/core/TatchiPasskey/index.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/TatchiPasskey/linkDevice.js +2 -0
- package/dist/cjs/react/sdk/src/core/TatchiPasskey/linkDevice.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/TatchiPasskey/login.js +15 -4
- package/dist/cjs/react/sdk/src/core/TatchiPasskey/login.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/TatchiPasskey/recoverAccount.js +1 -0
- package/dist/cjs/react/sdk/src/core/TatchiPasskey/recoverAccount.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/TatchiPasskey/relay.js +23 -1
- package/dist/cjs/react/sdk/src/core/TatchiPasskey/relay.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/TatchiPasskey/scanDevice.js +1 -0
- package/dist/cjs/react/sdk/src/core/TatchiPasskey/scanDevice.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/WalletIframe/client/IframeTransport.js +3 -0
- package/dist/cjs/react/sdk/src/core/WalletIframe/client/IframeTransport.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/WalletIframe/client/router.js +15 -2
- package/dist/cjs/react/sdk/src/core/WalletIframe/client/router.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/LitComponents/IframeTxConfirmer/viewer-drawer.js +1 -1
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/LitComponents/IframeTxConfirmer/viewer-drawer.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/LitComponents/IframeTxConfirmer/viewer-modal.js +52 -52
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/LitComponents/IframeTxConfirmer/viewer-modal.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/getDeviceNumber.js +10 -1
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/getDeviceNumber.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/checkCanRegisterUser.js +1 -0
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/checkCanRegisterUser.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/decryptPrivateKeyWithPrf.js +1 -0
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/decryptPrivateKeyWithPrf.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/deriveNearKeypairAndEncryptFromSerialized.js +1 -0
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/deriveNearKeypairAndEncryptFromSerialized.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/exportNearKeypairUi.js +1 -0
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/exportNearKeypairUi.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/registerDevice2WithDerivedKey.js +2 -1
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/registerDevice2WithDerivedKey.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/signDelegateAction.js +1 -0
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/signDelegateAction.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/signNep413Message.js +1 -0
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/signNep413Message.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/signTransactionsWithActions.js +1 -0
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/signTransactionsWithActions.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/validation.js +2 -0
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/validation.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/index.js +1 -0
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/index.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/vrf.js +1 -0
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/vrf.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/webauthn.js +6 -0
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/webauthn.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/determineConfirmationConfig.js +2 -1
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/determineConfirmationConfig.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/localOnly.js +1 -0
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/localOnly.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/registration.js +1 -0
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/registration.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/transactions.js +4 -15
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/transactions.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/VrfWorkerManager/handlers/deriveVrfKeypairFromPrf.js +1 -0
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/VrfWorkerManager/handlers/deriveVrfKeypairFromPrf.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/VrfWorkerManager/handlers/generateVrfChallenge.js +1 -0
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/VrfWorkerManager/handlers/generateVrfChallenge.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/VrfWorkerManager/handlers/generateVrfKeypairBootstrap.js +1 -0
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/VrfWorkerManager/handlers/generateVrfKeypairBootstrap.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/WebAuthnFallbacks/index.js +17 -0
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/WebAuthnFallbacks/index.js.map +1 -0
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/WebAuthnFallbacks/safari-fallbacks.js +64 -54
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/WebAuthnFallbacks/safari-fallbacks.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/credentialsHelpers.js +12 -2
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/credentialsHelpers.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/index.js +6 -1
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/index.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/touchIdPrompt.js +209 -201
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/touchIdPrompt.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/userHandle.js +2 -1
- package/dist/cjs/react/sdk/src/core/WebAuthnManager/userHandle.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/defaultConfigs.js +1 -1
- package/dist/cjs/react/sdk/src/core/defaultConfigs.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/rpcCalls.js +8 -0
- package/dist/cjs/react/sdk/src/core/rpcCalls.js.map +1 -1
- package/dist/cjs/react/sdk/src/core/types/vrf-worker.js +10 -1
- package/dist/cjs/react/sdk/src/core/types/vrf-worker.js.map +1 -1
- package/dist/cjs/react/sdk/src/utils/index.js +13 -3
- package/dist/cjs/server/email-recovery/emailEncryptor.js +11 -0
- package/dist/cjs/server/email-recovery/emailEncryptor.js.map +1 -1
- package/dist/cjs/server/email-recovery/emailParsers.js +57 -0
- package/dist/cjs/server/email-recovery/emailParsers.js.map +1 -1
- package/dist/cjs/server/email-recovery/index.js +1 -1
- package/dist/cjs/server/email-recovery/index.js.map +1 -1
- package/dist/cjs/server/email-recovery/rpcCalls.js +14 -1
- package/dist/cjs/server/email-recovery/rpcCalls.js.map +1 -1
- package/dist/cjs/server/index.js +1 -0
- 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 +1 -1
- package/dist/cjs/server/sdk/src/core/defaultConfigs.js.map +1 -1
- package/dist/cjs/utils/index.js +13 -3
- package/dist/esm/core/EmailRecovery/emailRecoveryPendingStore.js +63 -0
- package/dist/esm/core/EmailRecovery/emailRecoveryPendingStore.js.map +1 -0
- package/dist/esm/core/EmailRecovery/index.js +28 -14
- package/dist/esm/core/EmailRecovery/index.js.map +1 -1
- package/dist/esm/core/IndexedDBManager/passkeyClientDB.js +35 -36
- package/dist/esm/core/IndexedDBManager/passkeyClientDB.js.map +1 -1
- package/dist/esm/core/NearClient.js +2 -1
- package/dist/esm/core/NearClient.js.map +1 -1
- package/dist/esm/core/TatchiPasskey/emailRecovery.js +557 -377
- package/dist/esm/core/TatchiPasskey/emailRecovery.js.map +1 -1
- package/dist/esm/core/TatchiPasskey/faucets/createAccountRelayServer.js +2 -1
- package/dist/esm/core/TatchiPasskey/faucets/createAccountRelayServer.js.map +1 -1
- package/dist/esm/core/TatchiPasskey/index.js +28 -2
- package/dist/esm/core/TatchiPasskey/index.js.map +1 -1
- package/dist/esm/core/TatchiPasskey/linkDevice.js +4 -2
- package/dist/esm/core/TatchiPasskey/linkDevice.js.map +1 -1
- package/dist/esm/core/TatchiPasskey/login.js +13 -7
- package/dist/esm/core/TatchiPasskey/login.js.map +1 -1
- package/dist/esm/core/TatchiPasskey/recoverAccount.js +2 -1
- package/dist/esm/core/TatchiPasskey/recoverAccount.js.map +1 -1
- package/dist/esm/core/TatchiPasskey/relay.js +23 -1
- package/dist/esm/core/TatchiPasskey/relay.js.map +1 -1
- package/dist/esm/core/TatchiPasskey/scanDevice.js +2 -1
- package/dist/esm/core/TatchiPasskey/scanDevice.js.map +1 -1
- package/dist/esm/core/WalletIframe/client/IframeTransport.js +4 -1
- package/dist/esm/core/WalletIframe/client/IframeTransport.js.map +1 -1
- package/dist/esm/core/WalletIframe/client/router.js +16 -3
- package/dist/esm/core/WalletIframe/client/router.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/LitComponents/IframeTxConfirmer/viewer-drawer.js +1 -1
- package/dist/esm/core/WebAuthnManager/LitComponents/IframeTxConfirmer/viewer-drawer.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/LitComponents/IframeTxConfirmer/viewer-modal.js +52 -52
- package/dist/esm/core/WebAuthnManager/LitComponents/IframeTxConfirmer/viewer-modal.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/SignerWorkerManager/getDeviceNumber.js +6 -2
- package/dist/esm/core/WebAuthnManager/SignerWorkerManager/handlers/checkCanRegisterUser.js +2 -1
- package/dist/esm/core/WebAuthnManager/SignerWorkerManager/handlers/checkCanRegisterUser.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/SignerWorkerManager/handlers/decryptPrivateKeyWithPrf.js +2 -1
- package/dist/esm/core/WebAuthnManager/SignerWorkerManager/handlers/decryptPrivateKeyWithPrf.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/SignerWorkerManager/handlers/deriveNearKeypairAndEncryptFromSerialized.js +2 -1
- package/dist/esm/core/WebAuthnManager/SignerWorkerManager/handlers/deriveNearKeypairAndEncryptFromSerialized.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/SignerWorkerManager/handlers/exportNearKeypairUi.js +2 -1
- package/dist/esm/core/WebAuthnManager/SignerWorkerManager/handlers/exportNearKeypairUi.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/SignerWorkerManager/handlers/registerDevice2WithDerivedKey.js +2 -1
- package/dist/esm/core/WebAuthnManager/SignerWorkerManager/handlers/registerDevice2WithDerivedKey.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/SignerWorkerManager/handlers/signDelegateAction.js +2 -1
- package/dist/esm/core/WebAuthnManager/SignerWorkerManager/handlers/signDelegateAction.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/SignerWorkerManager/handlers/signNep413Message.js +2 -1
- package/dist/esm/core/WebAuthnManager/SignerWorkerManager/handlers/signNep413Message.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/SignerWorkerManager/handlers/signTransactionsWithActions.js +2 -1
- package/dist/esm/core/WebAuthnManager/SignerWorkerManager/handlers/signTransactionsWithActions.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/SignerWorkerManager/handlers/validation.js +4 -2
- package/dist/esm/core/WebAuthnManager/SignerWorkerManager/handlers/validation.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/SignerWorkerManager/index.js +2 -1
- package/dist/esm/core/WebAuthnManager/SignerWorkerManager/index.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/vrf.js +1 -0
- package/dist/esm/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/vrf.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/webauthn.js +8 -2
- package/dist/esm/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/webauthn.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/determineConfirmationConfig.js +2 -1
- package/dist/esm/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/determineConfirmationConfig.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/localOnly.js +2 -1
- package/dist/esm/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/localOnly.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/registration.js +2 -1
- package/dist/esm/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/registration.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/transactions.js +5 -16
- package/dist/esm/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/transactions.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/VrfWorkerManager/handlers/deriveVrfKeypairFromPrf.js +2 -1
- package/dist/esm/core/WebAuthnManager/VrfWorkerManager/handlers/deriveVrfKeypairFromPrf.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/VrfWorkerManager/handlers/generateVrfChallenge.js +2 -1
- package/dist/esm/core/WebAuthnManager/VrfWorkerManager/handlers/generateVrfChallenge.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/VrfWorkerManager/handlers/generateVrfKeypairBootstrap.js +2 -1
- package/dist/esm/core/WebAuthnManager/VrfWorkerManager/handlers/generateVrfKeypairBootstrap.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/WebAuthnFallbacks/index.js +12 -0
- package/dist/esm/core/WebAuthnManager/WebAuthnFallbacks/index.js.map +1 -0
- package/dist/esm/core/WebAuthnManager/WebAuthnFallbacks/safari-fallbacks.js +61 -55
- package/dist/esm/core/WebAuthnManager/WebAuthnFallbacks/safari-fallbacks.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/credentialsHelpers.js +8 -3
- package/dist/esm/core/WebAuthnManager/index.js +8 -3
- package/dist/esm/core/WebAuthnManager/index.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/touchIdPrompt.js +207 -204
- package/dist/esm/core/WebAuthnManager/touchIdPrompt.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/userHandle.js +2 -1
- package/dist/esm/core/WebAuthnManager/userHandle.js.map +1 -1
- package/dist/esm/core/defaultConfigs.js +1 -1
- package/dist/esm/core/defaultConfigs.js.map +1 -1
- package/dist/esm/core/rpcCalls.js +8 -1
- package/dist/esm/core/rpcCalls.js.map +1 -1
- package/dist/esm/core/types/vrf-worker.js +6 -2
- package/dist/esm/index.js +4 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/react/components/AccountMenuButton/{LinkedDevicesModal-STvIsylA.css → LinkedDevicesModal-CSSowiHP.css} +1 -1
- package/dist/{cjs/react/components/AccountMenuButton/LinkedDevicesModal-STvIsylA.css.map → esm/react/components/AccountMenuButton/LinkedDevicesModal-CSSowiHP.css.map} +1 -1
- package/dist/esm/react/components/AccountMenuButton/{ProfileDropdown-iARgUwK1.css → ProfileDropdown-CEPMZ1gY.css} +1 -1
- package/dist/{cjs/react/components/AccountMenuButton/ProfileDropdown-iARgUwK1.css.map → esm/react/components/AccountMenuButton/ProfileDropdown-CEPMZ1gY.css.map} +1 -1
- package/dist/esm/react/components/AccountMenuButton/{Web3AuthProfileButton-Db3NeoAC.css → Web3AuthProfileButton-DopOg7Xc.css} +1 -1
- package/dist/esm/react/components/AccountMenuButton/{Web3AuthProfileButton-Db3NeoAC.css.map → Web3AuthProfileButton-DopOg7Xc.css.map} +1 -1
- package/dist/esm/react/components/AccountMenuButton/icons/{TouchIcon-BXM5NR4A.css → TouchIcon-BQWentvJ.css} +1 -1
- package/dist/esm/react/components/AccountMenuButton/icons/{TouchIcon-BXM5NR4A.css.map → TouchIcon-BQWentvJ.css.map} +1 -1
- package/dist/esm/react/components/PasskeyAuthMenu/{PasskeyAuthMenu-De1qTSmU.css → PasskeyAuthMenu-DwrzWMYx.css} +14 -1
- package/dist/esm/react/components/PasskeyAuthMenu/{PasskeyAuthMenu-De1qTSmU.css.map → PasskeyAuthMenu-DwrzWMYx.css.map} +1 -1
- package/dist/esm/react/components/PasskeyAuthMenu/ui/EmailRecoverySlide.js +123 -54
- package/dist/esm/react/components/PasskeyAuthMenu/ui/EmailRecoverySlide.js.map +1 -1
- package/dist/esm/react/components/{ShowQRCode-DCnR__fx.css → ShowQRCode-CCN4h6Uv.css} +1 -1
- package/dist/esm/react/components/{ShowQRCode-DCnR__fx.css.map → ShowQRCode-CCN4h6Uv.css.map} +1 -1
- package/dist/esm/react/deviceDetection.js +72 -93
- package/dist/esm/react/deviceDetection.js.map +1 -1
- package/dist/esm/react/hooks/useQRCamera.js +2 -1
- package/dist/esm/react/hooks/useQRCamera.js.map +1 -1
- package/dist/esm/react/sdk/src/core/EmailRecovery/emailRecoveryPendingStore.js +63 -0
- package/dist/esm/react/sdk/src/core/EmailRecovery/emailRecoveryPendingStore.js.map +1 -0
- package/dist/esm/react/sdk/src/core/EmailRecovery/index.js +28 -14
- package/dist/esm/react/sdk/src/core/EmailRecovery/index.js.map +1 -1
- package/dist/esm/react/sdk/src/core/IndexedDBManager/passkeyClientDB.js +35 -36
- package/dist/esm/react/sdk/src/core/IndexedDBManager/passkeyClientDB.js.map +1 -1
- package/dist/esm/react/sdk/src/core/NearClient.js +2 -1
- package/dist/esm/react/sdk/src/core/NearClient.js.map +1 -1
- package/dist/esm/react/sdk/src/core/TatchiPasskey/emailRecovery.js +557 -377
- package/dist/esm/react/sdk/src/core/TatchiPasskey/emailRecovery.js.map +1 -1
- package/dist/esm/react/sdk/src/core/TatchiPasskey/faucets/createAccountRelayServer.js +2 -1
- package/dist/esm/react/sdk/src/core/TatchiPasskey/faucets/createAccountRelayServer.js.map +1 -1
- package/dist/esm/react/sdk/src/core/TatchiPasskey/index.js +28 -2
- package/dist/esm/react/sdk/src/core/TatchiPasskey/index.js.map +1 -1
- package/dist/esm/react/sdk/src/core/TatchiPasskey/linkDevice.js +4 -2
- package/dist/esm/react/sdk/src/core/TatchiPasskey/linkDevice.js.map +1 -1
- package/dist/esm/react/sdk/src/core/TatchiPasskey/login.js +13 -7
- package/dist/esm/react/sdk/src/core/TatchiPasskey/login.js.map +1 -1
- package/dist/esm/react/sdk/src/core/TatchiPasskey/recoverAccount.js +2 -1
- package/dist/esm/react/sdk/src/core/TatchiPasskey/recoverAccount.js.map +1 -1
- package/dist/esm/react/sdk/src/core/TatchiPasskey/relay.js +23 -1
- package/dist/esm/react/sdk/src/core/TatchiPasskey/relay.js.map +1 -1
- package/dist/esm/react/sdk/src/core/TatchiPasskey/scanDevice.js +2 -1
- package/dist/esm/react/sdk/src/core/TatchiPasskey/scanDevice.js.map +1 -1
- package/dist/esm/react/sdk/src/core/WalletIframe/client/IframeTransport.js +4 -1
- package/dist/esm/react/sdk/src/core/WalletIframe/client/IframeTransport.js.map +1 -1
- package/dist/esm/react/sdk/src/core/WalletIframe/client/router.js +16 -3
- package/dist/esm/react/sdk/src/core/WalletIframe/client/router.js.map +1 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/LitComponents/IframeTxConfirmer/viewer-drawer.js +1 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/LitComponents/IframeTxConfirmer/viewer-drawer.js.map +1 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/LitComponents/IframeTxConfirmer/viewer-modal.js +52 -52
- package/dist/esm/react/sdk/src/core/WebAuthnManager/LitComponents/IframeTxConfirmer/viewer-modal.js.map +1 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/getDeviceNumber.js +6 -2
- package/dist/esm/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/checkCanRegisterUser.js +2 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/checkCanRegisterUser.js.map +1 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/decryptPrivateKeyWithPrf.js +2 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/decryptPrivateKeyWithPrf.js.map +1 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/deriveNearKeypairAndEncryptFromSerialized.js +2 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/deriveNearKeypairAndEncryptFromSerialized.js.map +1 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/exportNearKeypairUi.js +2 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/exportNearKeypairUi.js.map +1 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/registerDevice2WithDerivedKey.js +2 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/registerDevice2WithDerivedKey.js.map +1 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/signDelegateAction.js +2 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/signDelegateAction.js.map +1 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/signNep413Message.js +2 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/signNep413Message.js.map +1 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/signTransactionsWithActions.js +2 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/signTransactionsWithActions.js.map +1 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/validation.js +4 -2
- package/dist/esm/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/handlers/validation.js.map +1 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/index.js +2 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/SignerWorkerManager/index.js.map +1 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/vrf.js +1 -0
- package/dist/esm/react/sdk/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/vrf.js.map +1 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/webauthn.js +8 -2
- package/dist/esm/react/sdk/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/webauthn.js.map +1 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/determineConfirmationConfig.js +2 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/determineConfirmationConfig.js.map +1 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/localOnly.js +2 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/localOnly.js.map +1 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/registration.js +2 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/registration.js.map +1 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/transactions.js +5 -16
- package/dist/esm/react/sdk/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/transactions.js.map +1 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/VrfWorkerManager/handlers/deriveVrfKeypairFromPrf.js +2 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/VrfWorkerManager/handlers/deriveVrfKeypairFromPrf.js.map +1 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/VrfWorkerManager/handlers/generateVrfChallenge.js +2 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/VrfWorkerManager/handlers/generateVrfChallenge.js.map +1 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/VrfWorkerManager/handlers/generateVrfKeypairBootstrap.js +2 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/VrfWorkerManager/handlers/generateVrfKeypairBootstrap.js.map +1 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/WebAuthnFallbacks/index.js +12 -0
- package/dist/esm/react/sdk/src/core/WebAuthnManager/WebAuthnFallbacks/index.js.map +1 -0
- package/dist/esm/react/sdk/src/core/WebAuthnManager/WebAuthnFallbacks/safari-fallbacks.js +61 -55
- package/dist/esm/react/sdk/src/core/WebAuthnManager/WebAuthnFallbacks/safari-fallbacks.js.map +1 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/credentialsHelpers.js +8 -3
- package/dist/esm/react/sdk/src/core/WebAuthnManager/index.js +8 -3
- package/dist/esm/react/sdk/src/core/WebAuthnManager/index.js.map +1 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/touchIdPrompt.js +207 -204
- package/dist/esm/react/sdk/src/core/WebAuthnManager/touchIdPrompt.js.map +1 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/userHandle.js +2 -1
- package/dist/esm/react/sdk/src/core/WebAuthnManager/userHandle.js.map +1 -1
- package/dist/esm/react/sdk/src/core/defaultConfigs.js +1 -1
- package/dist/esm/react/sdk/src/core/defaultConfigs.js.map +1 -1
- package/dist/esm/react/sdk/src/core/rpcCalls.js +8 -1
- package/dist/esm/react/sdk/src/core/rpcCalls.js.map +1 -1
- package/dist/esm/react/sdk/src/core/types/vrf-worker.js +6 -2
- package/dist/esm/react/sdk/src/utils/index.js +10 -4
- package/dist/esm/react/styles/styles.css +13 -0
- package/dist/esm/sdk/{safari-fallbacks-oQKu9xUs.js → WebAuthnFallbacks-Bl4BTsNt.js} +131 -135
- package/dist/esm/sdk/{createAdapters-pNiL2KNq.js → createAdapters-BumKM2ft.js} +59 -54
- package/dist/esm/sdk/createAdapters-BumKM2ft.js.map +1 -0
- package/dist/esm/sdk/{createAdapters-BWLe9Ddo.js → createAdapters-qVGD6i0g.js} +10 -3
- package/dist/esm/sdk/{defaultConfigs-VzvDejmy.js → defaultConfigs-DpslkAQd.js} +1 -1
- package/dist/esm/sdk/{getDeviceNumber-CkWRT17I.js → getDeviceNumber-fXizNGQl.js} +2 -2
- package/dist/esm/sdk/getDeviceNumber-fXizNGQl.js.map +1 -0
- package/dist/esm/sdk/{getDeviceNumber-CfmlgfMX.js → getDeviceNumber-zsOHT_Um.js} +6 -3
- package/dist/esm/sdk/{localOnly-DnpSyDaF.js → localOnly-Byi3AK7A.js} +2 -2
- package/dist/esm/sdk/{localOnly-DnpSyDaF.js.map → localOnly-Byi3AK7A.js.map} +1 -1
- package/dist/esm/sdk/{localOnly-BdumO2st.js → localOnly-pXMTqh1m.js} +5 -4
- package/dist/esm/sdk/offline-export-app.js +46 -44
- package/dist/esm/sdk/offline-export-app.js.map +1 -1
- package/dist/esm/sdk/{overlay-BTqPGG-o.js → overlay-ZGbucXIa.js} +2 -0
- package/dist/esm/sdk/{registration-C633u6x8.js → registration-CBiS4Ua_.js} +2 -2
- package/dist/esm/sdk/{registration-C633u6x8.js.map → registration-CBiS4Ua_.js.map} +1 -1
- package/dist/esm/sdk/{registration-xyYUFRqk.js → registration-DLPLsGCz.js} +5 -4
- package/dist/esm/sdk/{requestHelpers-DLBGBHMw.js → requestHelpers-Dh1hEYL9.js} +206 -204
- package/dist/esm/sdk/{router-BG6KC_p7.js → router-DuGYOd3G.js} +19 -4
- package/dist/esm/sdk/{rpcCalls-fLObBbbz.js → rpcCalls-BQrJMTdg.js} +3 -3
- package/dist/esm/sdk/{rpcCalls-CAU5XYEF.js → rpcCalls-YVeUVMk2.js} +9 -2
- package/dist/esm/sdk/{transactions-jH38BZ-Q.js → transactions-BIqKZeR0.js} +6 -18
- package/dist/esm/sdk/transactions-BIqKZeR0.js.map +1 -0
- package/dist/esm/sdk/{transactions-CzZAt1Yn.js → transactions-Bk-VavcV.js} +10 -21
- package/dist/esm/sdk/tx-confirm-ui.js +53 -53
- package/dist/esm/sdk/{tx-confirmer-wrapper-CqfVBUaA.js → tx-confirmer-wrapper-lHNgz9i4.js} +53 -53
- package/dist/esm/sdk/tx-confirmer.css +6 -4
- package/dist/esm/sdk/w3a-tx-confirmer.js +1 -1
- package/dist/esm/sdk/wallet-iframe-host.js +782 -447
- package/dist/esm/server/email-recovery/emailEncryptor.js +11 -1
- package/dist/esm/server/email-recovery/emailEncryptor.js.map +1 -1
- package/dist/esm/server/email-recovery/emailParsers.js +55 -1
- package/dist/esm/server/email-recovery/emailParsers.js.map +1 -1
- package/dist/esm/server/email-recovery/index.js +2 -2
- package/dist/esm/server/email-recovery/index.js.map +1 -1
- package/dist/esm/server/email-recovery/rpcCalls.js +14 -1
- package/dist/esm/server/email-recovery/rpcCalls.js.map +1 -1
- package/dist/esm/server/index.js +2 -2
- 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 +1 -1
- package/dist/esm/server/sdk/src/core/defaultConfigs.js.map +1 -1
- package/dist/esm/utils/index.js +10 -4
- package/dist/esm/wasm_vrf_worker/pkg/wasm_vrf_worker.js +3 -0
- package/dist/esm/wasm_vrf_worker/pkg/wasm_vrf_worker_bg.wasm +0 -0
- package/dist/types/src/core/EmailRecovery/emailRecoveryPendingStore.d.ts +25 -0
- package/dist/types/src/core/EmailRecovery/emailRecoveryPendingStore.d.ts.map +1 -0
- package/dist/types/src/core/EmailRecovery/index.d.ts +1 -0
- package/dist/types/src/core/EmailRecovery/index.d.ts.map +1 -1
- package/dist/types/src/core/IndexedDBManager/passkeyClientDB.d.ts +11 -21
- package/dist/types/src/core/IndexedDBManager/passkeyClientDB.d.ts.map +1 -1
- package/dist/types/src/core/TatchiPasskey/emailRecovery.d.ts +45 -5
- package/dist/types/src/core/TatchiPasskey/emailRecovery.d.ts.map +1 -1
- package/dist/types/src/core/TatchiPasskey/index.d.ts +10 -2
- package/dist/types/src/core/TatchiPasskey/index.d.ts.map +1 -1
- package/dist/types/src/core/TatchiPasskey/relay.d.ts +2 -1
- package/dist/types/src/core/TatchiPasskey/relay.d.ts.map +1 -1
- package/dist/types/src/core/WalletIframe/TatchiPasskeyIframe.d.ts +4 -0
- package/dist/types/src/core/WalletIframe/TatchiPasskeyIframe.d.ts.map +1 -1
- package/dist/types/src/core/WalletIframe/client/router.d.ts +7 -3
- package/dist/types/src/core/WalletIframe/client/router.d.ts.map +1 -1
- package/dist/types/src/core/WalletIframe/host/wallet-iframe-handlers.d.ts.map +1 -1
- package/dist/types/src/core/WalletIframe/shared/messages.d.ts +6 -2
- package/dist/types/src/core/WalletIframe/shared/messages.d.ts.map +1 -1
- package/dist/types/src/core/WebAuthnManager/LitComponents/IframeTxConfirmer/viewer-drawer.d.ts.map +1 -1
- package/dist/types/src/core/WebAuthnManager/LitComponents/IframeTxConfirmer/viewer-modal.d.ts.map +1 -1
- package/dist/types/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/vrf.d.ts.map +1 -1
- package/dist/types/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/webauthn.d.ts.map +1 -1
- package/dist/types/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/transactions.d.ts.map +1 -1
- package/dist/types/src/core/WebAuthnManager/index.d.ts.map +1 -1
- package/dist/types/src/core/defaultConfigs.d.ts.map +1 -1
- package/dist/types/src/core/rpcCalls.d.ts +9 -0
- package/dist/types/src/core/rpcCalls.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +1 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/react/components/PasskeyAuthMenu/ui/EmailRecoverySlide.d.ts.map +1 -1
- package/dist/types/src/server/email-recovery/emailEncryptor.d.ts +4 -0
- package/dist/types/src/server/email-recovery/emailEncryptor.d.ts.map +1 -1
- package/dist/types/src/server/email-recovery/emailParsers.d.ts +7 -0
- package/dist/types/src/server/email-recovery/emailParsers.d.ts.map +1 -1
- package/dist/types/src/server/email-recovery/index.d.ts +1 -1
- package/dist/types/src/server/email-recovery/rpcCalls.d.ts +1 -1
- package/dist/types/src/server/email-recovery/rpcCalls.d.ts.map +1 -1
- package/dist/types/src/wasm_vrf_worker/pkg/wasm_vrf_worker.d.ts.map +1 -1
- package/dist/workers/wasm_vrf_worker_bg.wasm +0 -0
- package/dist/workers/web3authn-vrf.worker.js +3 -0
- package/package.json +1 -1
- package/dist/esm/sdk/createAdapters-pNiL2KNq.js.map +0 -1
- package/dist/esm/sdk/getDeviceNumber-CkWRT17I.js.map +0 -1
- package/dist/esm/sdk/transactions-jH38BZ-Q.js.map +0 -1
|
@@ -2,7 +2,13 @@ const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.js');
|
|
|
2
2
|
const require_validation = require('../../utils/validation.js');
|
|
3
3
|
const require_accountIds = require('../types/accountIds.js');
|
|
4
4
|
const require_index = require('../IndexedDBManager/index.js');
|
|
5
|
+
const require_vrf_worker = require('../types/vrf-worker.js');
|
|
5
6
|
const require_sdkSentEvents = require('../types/sdkSentEvents.js');
|
|
7
|
+
const require_rpc = require('../types/rpc.js');
|
|
8
|
+
const require_getDeviceNumber = require('../WebAuthnManager/SignerWorkerManager/getDeviceNumber.js');
|
|
9
|
+
const require_login = require('./login.js');
|
|
10
|
+
const require_emailRecoveryPendingStore = require('../EmailRecovery/emailRecoveryPendingStore.js');
|
|
11
|
+
const require_index$1 = require('../EmailRecovery/index.js');
|
|
6
12
|
|
|
7
13
|
//#region src/core/TatchiPasskey/emailRecovery.ts
|
|
8
14
|
var emailRecovery_exports = {};
|
|
@@ -44,9 +50,15 @@ var init_emailRecovery = require_rolldown_runtime.__esm({ "src/core/TatchiPasske
|
|
|
44
50
|
require_validation.init_validation();
|
|
45
51
|
require_accountIds.init_accountIds();
|
|
46
52
|
require_sdkSentEvents.init_sdkSentEvents();
|
|
53
|
+
require_vrf_worker.init_vrf_worker();
|
|
54
|
+
require_rpc.init_rpc();
|
|
55
|
+
require_getDeviceNumber.init_getDeviceNumber();
|
|
56
|
+
require_login.init_login();
|
|
57
|
+
require_index$1.init_EmailRecovery();
|
|
47
58
|
EmailRecoveryFlow = class {
|
|
48
59
|
context;
|
|
49
60
|
options;
|
|
61
|
+
pendingStore;
|
|
50
62
|
pending = null;
|
|
51
63
|
phase = require_sdkSentEvents.EmailRecoveryPhase.STEP_1_PREPARATION;
|
|
52
64
|
pollingTimer;
|
|
@@ -57,6 +69,7 @@ var init_emailRecovery = require_rolldown_runtime.__esm({ "src/core/TatchiPasske
|
|
|
57
69
|
constructor(context, options) {
|
|
58
70
|
this.context = context;
|
|
59
71
|
this.options = options;
|
|
72
|
+
this.pendingStore = options?.pendingStore ?? new require_emailRecoveryPendingStore.EmailRecoveryPendingStore({ getPendingTtlMs: () => this.getConfig().pendingTtlMs });
|
|
60
73
|
}
|
|
61
74
|
setOptions(options) {
|
|
62
75
|
if (!options) return;
|
|
@@ -64,6 +77,7 @@ var init_emailRecovery = require_rolldown_runtime.__esm({ "src/core/TatchiPasske
|
|
|
64
77
|
...this.options || {},
|
|
65
78
|
...options
|
|
66
79
|
};
|
|
80
|
+
if (options.pendingStore) this.pendingStore = options.pendingStore;
|
|
67
81
|
}
|
|
68
82
|
emit(event) {
|
|
69
83
|
this.options?.onEvent?.(event);
|
|
@@ -82,18 +96,139 @@ var init_emailRecovery = require_rolldown_runtime.__esm({ "src/core/TatchiPasske
|
|
|
82
96
|
this.options?.onError?.(err);
|
|
83
97
|
return err;
|
|
84
98
|
}
|
|
99
|
+
async fail(step, message) {
|
|
100
|
+
const err = this.emitError(step, message);
|
|
101
|
+
await this.options?.afterCall?.(false);
|
|
102
|
+
throw err;
|
|
103
|
+
}
|
|
104
|
+
async assertValidAccountIdOrFail(step, accountId) {
|
|
105
|
+
const validation = require_validation.validateNearAccountId(accountId);
|
|
106
|
+
if (!validation.valid) await this.fail(step, `Invalid NEAR account ID: ${validation.error}`);
|
|
107
|
+
return require_accountIds.toAccountId(accountId);
|
|
108
|
+
}
|
|
109
|
+
async resolvePendingOrFail(step, args, options) {
|
|
110
|
+
const { allowErrorStatus = true, missingMessage = "No pending email recovery record found for this account", errorStatusMessage = "Pending email recovery is in an error state; please restart the flow" } = options ?? {};
|
|
111
|
+
let rec = this.pending;
|
|
112
|
+
if (!rec || rec.accountId !== args.accountId || args.nearPublicKey && rec.nearPublicKey !== args.nearPublicKey) {
|
|
113
|
+
rec = await this.loadPending(args.accountId, args.nearPublicKey);
|
|
114
|
+
this.pending = rec;
|
|
115
|
+
}
|
|
116
|
+
if (!rec) await this.fail(step, missingMessage);
|
|
117
|
+
const resolved = rec;
|
|
118
|
+
if (!allowErrorStatus && resolved.status === "error") await this.fail(step, errorStatusMessage);
|
|
119
|
+
return resolved;
|
|
120
|
+
}
|
|
85
121
|
getConfig() {
|
|
86
122
|
return getEmailRecoveryConfig(this.context.configs);
|
|
87
123
|
}
|
|
88
|
-
|
|
124
|
+
toBigInt(value) {
|
|
125
|
+
if (typeof value === "bigint") return value;
|
|
126
|
+
if (typeof value === "number") return BigInt(value);
|
|
127
|
+
if (typeof value === "string" && value.length > 0) return BigInt(value);
|
|
128
|
+
return BigInt(0);
|
|
129
|
+
}
|
|
130
|
+
computeAvailableBalance(accountView) {
|
|
131
|
+
const STORAGE_PRICE_PER_BYTE = BigInt("10000000000000000000");
|
|
132
|
+
const amount = this.toBigInt(accountView.amount);
|
|
133
|
+
const locked = this.toBigInt(accountView.locked);
|
|
134
|
+
const storageUsage = this.toBigInt(accountView.storage_usage);
|
|
135
|
+
const storageCost = storageUsage * STORAGE_PRICE_PER_BYTE;
|
|
136
|
+
const rawAvailable = amount - locked - storageCost;
|
|
137
|
+
return rawAvailable > 0 ? rawAvailable : BigInt(0);
|
|
138
|
+
}
|
|
139
|
+
async assertSufficientBalance(nearAccountId) {
|
|
140
|
+
const { minBalanceYocto } = this.getConfig();
|
|
141
|
+
try {
|
|
142
|
+
const accountView = await this.context.nearClient.viewAccount(nearAccountId);
|
|
143
|
+
const available = this.computeAvailableBalance(accountView);
|
|
144
|
+
if (available < BigInt(minBalanceYocto)) await this.fail(1, `This account does not have enough NEAR to finalize recovery. Available: ${available.toString()} yocto; required: ${String(minBalanceYocto)}. Please top up and try again.`);
|
|
145
|
+
} catch (e) {
|
|
146
|
+
await this.fail(1, e?.message || "Failed to fetch account balance for recovery");
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
async getCanonicalRecoveryEmailOrFail(recoveryEmail) {
|
|
150
|
+
const canonicalEmail = String(recoveryEmail || "").trim().toLowerCase();
|
|
151
|
+
if (!canonicalEmail) await this.fail(1, "Recovery email is required for email-based account recovery");
|
|
152
|
+
return canonicalEmail;
|
|
153
|
+
}
|
|
154
|
+
async getNextDeviceNumberFromContract(nearAccountId) {
|
|
155
|
+
try {
|
|
156
|
+
const { syncAuthenticatorsContractCall } = await Promise.resolve().then(() => require("../rpcCalls.js"));
|
|
157
|
+
const authenticators = await syncAuthenticatorsContractCall(this.context.nearClient, this.context.configs.contractId, nearAccountId);
|
|
158
|
+
const numbers = authenticators.map((a) => a?.authenticator?.deviceNumber).filter((n) => typeof n === "number" && Number.isFinite(n));
|
|
159
|
+
const max = numbers.length > 0 ? Math.max(...numbers) : 0;
|
|
160
|
+
return max + 1;
|
|
161
|
+
} catch {
|
|
162
|
+
return 1;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
async collectRecoveryCredentialOrFail(nearAccountId, deviceNumber) {
|
|
166
|
+
const confirmerText = {
|
|
167
|
+
title: this.options?.confirmerText?.title ?? "Register New Recovery Account",
|
|
168
|
+
body: this.options?.confirmerText?.body ?? "Create a recovery account and send an encrypted email to recover your account."
|
|
169
|
+
};
|
|
170
|
+
const confirm = await this.context.webAuthnManager.requestRegistrationCredentialConfirmation({
|
|
171
|
+
nearAccountId,
|
|
172
|
+
deviceNumber,
|
|
173
|
+
confirmerText,
|
|
174
|
+
confirmationConfigOverride: this.options?.confirmationConfig
|
|
175
|
+
});
|
|
176
|
+
if (!confirm.confirmed || !confirm.credential) await this.fail(2, "User cancelled email recovery TouchID confirmation");
|
|
177
|
+
return {
|
|
178
|
+
credential: confirm.credential,
|
|
179
|
+
vrfChallenge: confirm.vrfChallenge || void 0
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
async deriveRecoveryKeysOrFail(nearAccountId, deviceNumber, credential) {
|
|
183
|
+
const vrfDerivationResult = await this.context.webAuthnManager.deriveVrfKeypair({
|
|
184
|
+
credential,
|
|
185
|
+
nearAccountId
|
|
186
|
+
});
|
|
187
|
+
if (!vrfDerivationResult.success || !vrfDerivationResult.encryptedVrfKeypair) await this.fail(2, "Failed to derive VRF keypair from PRF for email recovery");
|
|
188
|
+
const nearKeyResult = await this.context.webAuthnManager.deriveNearKeypairAndEncryptFromSerialized({
|
|
189
|
+
nearAccountId,
|
|
190
|
+
credential,
|
|
191
|
+
options: { deviceNumber }
|
|
192
|
+
});
|
|
193
|
+
if (!nearKeyResult.success || !nearKeyResult.publicKey) await this.fail(2, "Failed to derive NEAR keypair for email recovery");
|
|
194
|
+
return {
|
|
195
|
+
encryptedVrfKeypair: vrfDerivationResult.encryptedVrfKeypair,
|
|
196
|
+
serverEncryptedVrfKeypair: vrfDerivationResult.serverEncryptedVrfKeypair || null,
|
|
197
|
+
vrfPublicKey: vrfDerivationResult.vrfPublicKey,
|
|
198
|
+
nearPublicKey: nearKeyResult.publicKey
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
emitAwaitEmail(rec, mailtoUrl) {
|
|
202
|
+
this.phase = require_sdkSentEvents.EmailRecoveryPhase.STEP_3_AWAIT_EMAIL;
|
|
203
|
+
this.emit({
|
|
204
|
+
step: 3,
|
|
205
|
+
phase: require_sdkSentEvents.EmailRecoveryPhase.STEP_3_AWAIT_EMAIL,
|
|
206
|
+
status: require_sdkSentEvents.EmailRecoveryStatus.PROGRESS,
|
|
207
|
+
message: "New device key created; please send the recovery email from your registered address.",
|
|
208
|
+
data: {
|
|
209
|
+
accountId: rec.accountId,
|
|
210
|
+
recoveryEmail: rec.recoveryEmail,
|
|
211
|
+
nearPublicKey: rec.nearPublicKey,
|
|
212
|
+
requestId: rec.requestId,
|
|
213
|
+
mailtoUrl
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
emitAutoLoginEvent(status, message, data) {
|
|
218
|
+
this.emit({
|
|
219
|
+
step: 5,
|
|
220
|
+
phase: require_sdkSentEvents.EmailRecoveryPhase.STEP_5_FINALIZING_REGISTRATION,
|
|
221
|
+
status,
|
|
222
|
+
message,
|
|
223
|
+
data
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
async checkViaDkimViewMethod(rec) {
|
|
89
227
|
const { dkimVerifierAccountId, verificationViewMethod } = this.getConfig();
|
|
90
228
|
if (!dkimVerifierAccountId) return null;
|
|
91
229
|
try {
|
|
92
|
-
const
|
|
93
|
-
|
|
94
|
-
method: verificationViewMethod,
|
|
95
|
-
args: { request_id: rec.requestId }
|
|
96
|
-
});
|
|
230
|
+
const { getEmailRecoveryVerificationResult } = await Promise.resolve().then(() => require("../rpcCalls.js"));
|
|
231
|
+
const result = await getEmailRecoveryVerificationResult(this.context.nearClient, dkimVerifierAccountId, verificationViewMethod, rec.requestId);
|
|
97
232
|
if (!result) return {
|
|
98
233
|
completed: false,
|
|
99
234
|
success: false
|
|
@@ -103,49 +238,100 @@ var init_emailRecovery = require_rolldown_runtime.__esm({ "src/core/TatchiPasske
|
|
|
103
238
|
return {
|
|
104
239
|
completed: true,
|
|
105
240
|
success: false,
|
|
106
|
-
errorMessage
|
|
241
|
+
errorMessage,
|
|
242
|
+
transactionHash: result.transaction_hash
|
|
107
243
|
};
|
|
108
244
|
}
|
|
109
245
|
if (result.account_id && result.account_id !== rec.accountId) return {
|
|
110
246
|
completed: true,
|
|
111
247
|
success: false,
|
|
112
|
-
errorMessage: "Email verification account_id does not match requested account."
|
|
248
|
+
errorMessage: "Email verification account_id does not match requested account.",
|
|
249
|
+
transactionHash: result.transaction_hash
|
|
113
250
|
};
|
|
114
251
|
if (result.new_public_key && result.new_public_key !== rec.nearPublicKey) return {
|
|
115
252
|
completed: true,
|
|
116
253
|
success: false,
|
|
117
|
-
errorMessage: "Email verification new_public_key does not match expected recovery key."
|
|
254
|
+
errorMessage: "Email verification new_public_key does not match expected recovery key.",
|
|
255
|
+
transactionHash: result.transaction_hash
|
|
118
256
|
};
|
|
119
257
|
return {
|
|
120
258
|
completed: true,
|
|
121
|
-
success: true
|
|
259
|
+
success: true,
|
|
260
|
+
transactionHash: result.transaction_hash
|
|
122
261
|
};
|
|
123
262
|
} catch (err) {
|
|
124
|
-
console.warn("[EmailRecoveryFlow] get_verification_result view failed;
|
|
263
|
+
console.warn("[EmailRecoveryFlow] get_verification_result view failed; will retry", err);
|
|
125
264
|
return null;
|
|
126
265
|
}
|
|
127
266
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
267
|
+
buildPollingEventData(rec, details) {
|
|
268
|
+
return {
|
|
269
|
+
accountId: rec.accountId,
|
|
270
|
+
requestId: rec.requestId,
|
|
271
|
+
nearPublicKey: rec.nearPublicKey,
|
|
272
|
+
transactionHash: details.transactionHash,
|
|
273
|
+
elapsedMs: details.elapsedMs,
|
|
274
|
+
pollCount: details.pollCount
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
async sleepForPollInterval(ms) {
|
|
278
|
+
await new Promise((resolve) => {
|
|
279
|
+
this.pollIntervalResolver = resolve;
|
|
280
|
+
this.pollingTimer = setTimeout(() => {
|
|
281
|
+
this.pollIntervalResolver = void 0;
|
|
282
|
+
this.pollingTimer = void 0;
|
|
283
|
+
resolve();
|
|
284
|
+
}, ms);
|
|
285
|
+
}).finally(() => {
|
|
286
|
+
this.pollIntervalResolver = void 0;
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
async pollUntil(args) {
|
|
290
|
+
const now = args.now ?? Date.now;
|
|
291
|
+
const sleep = args.sleep ?? this.sleepForPollInterval.bind(this);
|
|
292
|
+
const startedAt = now();
|
|
293
|
+
let pollCount = 0;
|
|
294
|
+
while (!args.isCancelled()) {
|
|
295
|
+
pollCount += 1;
|
|
296
|
+
const elapsedMs$1 = now() - startedAt;
|
|
297
|
+
if (elapsedMs$1 > args.timeoutMs) return {
|
|
298
|
+
status: "timedOut",
|
|
299
|
+
elapsedMs: elapsedMs$1,
|
|
300
|
+
pollCount
|
|
301
|
+
};
|
|
302
|
+
const result = await args.tick({
|
|
303
|
+
elapsedMs: elapsedMs$1,
|
|
304
|
+
pollCount
|
|
305
|
+
});
|
|
306
|
+
if (result.done) return {
|
|
307
|
+
status: "completed",
|
|
308
|
+
value: result.value,
|
|
309
|
+
elapsedMs: elapsedMs$1,
|
|
310
|
+
pollCount
|
|
311
|
+
};
|
|
312
|
+
if (args.isCancelled()) return {
|
|
313
|
+
status: "cancelled",
|
|
314
|
+
elapsedMs: elapsedMs$1,
|
|
315
|
+
pollCount
|
|
316
|
+
};
|
|
317
|
+
await sleep(args.intervalMs);
|
|
137
318
|
}
|
|
138
|
-
|
|
319
|
+
const elapsedMs = now() - startedAt;
|
|
320
|
+
return {
|
|
321
|
+
status: "cancelled",
|
|
322
|
+
elapsedMs,
|
|
323
|
+
pollCount
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
async loadPending(accountId, nearPublicKey) {
|
|
327
|
+
return this.pendingStore.get(accountId, nearPublicKey);
|
|
139
328
|
}
|
|
140
329
|
async savePending(rec) {
|
|
141
|
-
|
|
142
|
-
await require_index.IndexedDBManager.clientDB.setAppState(key, rec);
|
|
330
|
+
await this.pendingStore.set(rec);
|
|
143
331
|
this.pending = rec;
|
|
144
332
|
}
|
|
145
333
|
async clearPending(accountId, nearPublicKey) {
|
|
146
|
-
|
|
147
|
-
const key = nearPublicKey ? `${keyPrefix}:${nearPublicKey}` : keyPrefix;
|
|
148
|
-
await require_index.IndexedDBManager.clientDB.setAppState(key, void 0);
|
|
334
|
+
await this.pendingStore.clear(accountId, nearPublicKey);
|
|
149
335
|
if (this.pending && this.pending.accountId === accountId && (!nearPublicKey || this.pending.nearPublicKey === nearPublicKey)) this.pending = null;
|
|
150
336
|
}
|
|
151
337
|
getState() {
|
|
@@ -159,48 +345,14 @@ var init_emailRecovery = require_rolldown_runtime.__esm({ "src/core/TatchiPasske
|
|
|
159
345
|
const { accountId, nearPublicKey } = args;
|
|
160
346
|
this.cancelled = false;
|
|
161
347
|
this.error = void 0;
|
|
162
|
-
const
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
const nearAccountId = require_accountIds.toAccountId(accountId);
|
|
169
|
-
let rec = this.pending;
|
|
170
|
-
if (!rec || rec.accountId !== nearAccountId || nearPublicKey && rec.nearPublicKey !== nearPublicKey) {
|
|
171
|
-
rec = await this.loadPending(nearAccountId, nearPublicKey);
|
|
172
|
-
this.pending = rec;
|
|
173
|
-
}
|
|
174
|
-
if (!rec) {
|
|
175
|
-
const err = this.emitError(3, "No pending email recovery record found for this account");
|
|
176
|
-
await this.options?.afterCall?.(false);
|
|
177
|
-
throw err;
|
|
178
|
-
}
|
|
179
|
-
if (rec.status === "error") {
|
|
180
|
-
const err = this.emitError(3, "Pending email recovery is in an error state; please restart the flow");
|
|
181
|
-
await this.options?.afterCall?.(false);
|
|
182
|
-
throw err;
|
|
183
|
-
}
|
|
184
|
-
if (rec.status === "finalizing" || rec.status === "complete") {
|
|
185
|
-
const err = this.emitError(3, "Recovery email has already been processed on-chain for this request");
|
|
186
|
-
await this.options?.afterCall?.(false);
|
|
187
|
-
throw err;
|
|
188
|
-
}
|
|
348
|
+
const nearAccountId = await this.assertValidAccountIdOrFail(3, accountId);
|
|
349
|
+
const rec = await this.resolvePendingOrFail(3, {
|
|
350
|
+
accountId: nearAccountId,
|
|
351
|
+
nearPublicKey
|
|
352
|
+
}, { allowErrorStatus: false });
|
|
353
|
+
if (rec.status === "finalizing" || rec.status === "complete") await this.fail(3, "Recovery email has already been processed on-chain for this request");
|
|
189
354
|
const mailtoUrl = rec.status === "awaiting-email" ? await this.buildMailtoUrlAndUpdateStatus(rec) : this.buildMailtoUrlInternal(rec);
|
|
190
|
-
this.
|
|
191
|
-
this.emit({
|
|
192
|
-
step: 3,
|
|
193
|
-
phase: require_sdkSentEvents.EmailRecoveryPhase.STEP_3_AWAIT_EMAIL,
|
|
194
|
-
status: require_sdkSentEvents.EmailRecoveryStatus.PROGRESS,
|
|
195
|
-
message: "New device key created; please send the recovery email from your registered address.",
|
|
196
|
-
data: {
|
|
197
|
-
accountId: rec.accountId,
|
|
198
|
-
recoveryEmail: rec.recoveryEmail,
|
|
199
|
-
nearPublicKey: rec.nearPublicKey,
|
|
200
|
-
requestId: rec.requestId,
|
|
201
|
-
mailtoUrl
|
|
202
|
-
}
|
|
203
|
-
});
|
|
355
|
+
this.emitAwaitEmail(rec, mailtoUrl);
|
|
204
356
|
await this.options?.afterCall?.(true, void 0);
|
|
205
357
|
return mailtoUrl;
|
|
206
358
|
}
|
|
@@ -215,49 +367,10 @@ var init_emailRecovery = require_rolldown_runtime.__esm({ "src/core/TatchiPasske
|
|
|
215
367
|
status: require_sdkSentEvents.EmailRecoveryStatus.PROGRESS,
|
|
216
368
|
message: "Preparing email recovery..."
|
|
217
369
|
});
|
|
218
|
-
const
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
throw err;
|
|
223
|
-
}
|
|
224
|
-
const nearAccountId = require_accountIds.toAccountId(accountId);
|
|
225
|
-
const { minBalanceYocto } = this.getConfig();
|
|
226
|
-
const STORAGE_PRICE_PER_BYTE = BigInt("10000000000000000000");
|
|
227
|
-
try {
|
|
228
|
-
const accountView = await this.context.nearClient.viewAccount(nearAccountId);
|
|
229
|
-
const amount = BigInt(accountView.amount || "0");
|
|
230
|
-
const locked = BigInt(accountView.locked || "0");
|
|
231
|
-
const storageUsage = BigInt(accountView.storage_usage || 0);
|
|
232
|
-
const storageCost = storageUsage * STORAGE_PRICE_PER_BYTE;
|
|
233
|
-
const rawAvailable = amount - locked - storageCost;
|
|
234
|
-
const available = rawAvailable > 0 ? rawAvailable : BigInt(0);
|
|
235
|
-
if (available < BigInt(minBalanceYocto)) {
|
|
236
|
-
const err = this.emitError(1, `This account does not have enough NEAR to finalize recovery. Available: ${available.toString()} yocto; required: ${String(minBalanceYocto)}. Please top up and try again.`);
|
|
237
|
-
await this.options?.afterCall?.(false);
|
|
238
|
-
throw err;
|
|
239
|
-
}
|
|
240
|
-
} catch (e) {
|
|
241
|
-
const err = this.emitError(1, e?.message || "Failed to fetch account balance for recovery");
|
|
242
|
-
await this.options?.afterCall?.(false);
|
|
243
|
-
throw err;
|
|
244
|
-
}
|
|
245
|
-
const canonicalEmail = String(recoveryEmail || "").trim().toLowerCase();
|
|
246
|
-
if (!canonicalEmail) {
|
|
247
|
-
const err = this.emitError(1, "Recovery email is required for email-based account recovery");
|
|
248
|
-
await this.options?.afterCall?.(false);
|
|
249
|
-
throw err;
|
|
250
|
-
}
|
|
251
|
-
let deviceNumber = 1;
|
|
252
|
-
try {
|
|
253
|
-
const { syncAuthenticatorsContractCall } = await Promise.resolve().then(() => require("../rpcCalls.js"));
|
|
254
|
-
const authenticators = await syncAuthenticatorsContractCall(this.context.nearClient, this.context.configs.contractId, nearAccountId);
|
|
255
|
-
const numbers = authenticators.map((a) => a?.authenticator?.deviceNumber).filter((n) => typeof n === "number" && Number.isFinite(n));
|
|
256
|
-
const max = numbers.length > 0 ? Math.max(...numbers) : 0;
|
|
257
|
-
deviceNumber = max + 1;
|
|
258
|
-
} catch {
|
|
259
|
-
deviceNumber = 1;
|
|
260
|
-
}
|
|
370
|
+
const nearAccountId = await this.assertValidAccountIdOrFail(1, accountId);
|
|
371
|
+
await this.assertSufficientBalance(nearAccountId);
|
|
372
|
+
const canonicalEmail = await this.getCanonicalRecoveryEmailOrFail(recoveryEmail);
|
|
373
|
+
const deviceNumber = await this.getNextDeviceNumberFromContract(nearAccountId);
|
|
261
374
|
this.phase = require_sdkSentEvents.EmailRecoveryPhase.STEP_2_TOUCH_ID_REGISTRATION;
|
|
262
375
|
this.emit({
|
|
263
376
|
step: 2,
|
|
@@ -266,66 +379,24 @@ var init_emailRecovery = require_rolldown_runtime.__esm({ "src/core/TatchiPasske
|
|
|
266
379
|
message: "Collecting passkey for email recovery..."
|
|
267
380
|
});
|
|
268
381
|
try {
|
|
269
|
-
const
|
|
270
|
-
const
|
|
271
|
-
nearAccountId,
|
|
272
|
-
deviceNumber,
|
|
273
|
-
confirmerText,
|
|
274
|
-
confirmationConfigOverride: this.options?.confirmationConfig
|
|
275
|
-
});
|
|
276
|
-
if (!confirm.confirmed || !confirm.credential) {
|
|
277
|
-
const err = this.emitError(2, "User cancelled email recovery TouchID confirmation");
|
|
278
|
-
await this.options?.afterCall?.(false);
|
|
279
|
-
throw err;
|
|
280
|
-
}
|
|
281
|
-
const vrfDerivationResult = await this.context.webAuthnManager.deriveVrfKeypair({
|
|
282
|
-
credential: confirm.credential,
|
|
283
|
-
nearAccountId
|
|
284
|
-
});
|
|
285
|
-
if (!vrfDerivationResult.success || !vrfDerivationResult.encryptedVrfKeypair) {
|
|
286
|
-
const err = this.emitError(2, "Failed to derive VRF keypair from PRF for email recovery");
|
|
287
|
-
await this.options?.afterCall?.(false);
|
|
288
|
-
throw err;
|
|
289
|
-
}
|
|
290
|
-
const nearKeyResult = await this.context.webAuthnManager.deriveNearKeypairAndEncryptFromSerialized({
|
|
291
|
-
nearAccountId,
|
|
292
|
-
credential: confirm.credential,
|
|
293
|
-
options: { deviceNumber }
|
|
294
|
-
});
|
|
295
|
-
if (!nearKeyResult.success || !nearKeyResult.publicKey) {
|
|
296
|
-
const err = this.emitError(2, "Failed to derive NEAR keypair for email recovery");
|
|
297
|
-
await this.options?.afterCall?.(false);
|
|
298
|
-
throw err;
|
|
299
|
-
}
|
|
382
|
+
const confirm = await this.collectRecoveryCredentialOrFail(nearAccountId, deviceNumber);
|
|
383
|
+
const derivedKeys = await this.deriveRecoveryKeysOrFail(nearAccountId, deviceNumber, confirm.credential);
|
|
300
384
|
const rec = {
|
|
301
385
|
accountId: nearAccountId,
|
|
302
386
|
recoveryEmail: canonicalEmail,
|
|
303
387
|
deviceNumber,
|
|
304
|
-
nearPublicKey:
|
|
388
|
+
nearPublicKey: derivedKeys.nearPublicKey,
|
|
305
389
|
requestId: generateEmailRecoveryRequestId(),
|
|
306
|
-
encryptedVrfKeypair:
|
|
307
|
-
serverEncryptedVrfKeypair:
|
|
308
|
-
vrfPublicKey:
|
|
390
|
+
encryptedVrfKeypair: derivedKeys.encryptedVrfKeypair,
|
|
391
|
+
serverEncryptedVrfKeypair: derivedKeys.serverEncryptedVrfKeypair,
|
|
392
|
+
vrfPublicKey: derivedKeys.vrfPublicKey,
|
|
309
393
|
credential: confirm.credential,
|
|
310
394
|
vrfChallenge: confirm.vrfChallenge || void 0,
|
|
311
395
|
createdAt: Date.now(),
|
|
312
396
|
status: "awaiting-email"
|
|
313
397
|
};
|
|
314
398
|
const mailtoUrl = await this.buildMailtoUrlAndUpdateStatus(rec);
|
|
315
|
-
this.
|
|
316
|
-
this.emit({
|
|
317
|
-
step: 3,
|
|
318
|
-
phase: require_sdkSentEvents.EmailRecoveryPhase.STEP_3_AWAIT_EMAIL,
|
|
319
|
-
status: require_sdkSentEvents.EmailRecoveryStatus.PROGRESS,
|
|
320
|
-
message: "New device key created; please send the recovery email from your registered address.",
|
|
321
|
-
data: {
|
|
322
|
-
accountId: rec.accountId,
|
|
323
|
-
recoveryEmail: rec.recoveryEmail,
|
|
324
|
-
nearPublicKey: rec.nearPublicKey,
|
|
325
|
-
requestId: rec.requestId,
|
|
326
|
-
mailtoUrl
|
|
327
|
-
}
|
|
328
|
-
});
|
|
399
|
+
this.emitAwaitEmail(rec, mailtoUrl);
|
|
329
400
|
await this.options?.afterCall?.(true, void 0);
|
|
330
401
|
return {
|
|
331
402
|
mailtoUrl,
|
|
@@ -353,28 +424,11 @@ var init_emailRecovery = require_rolldown_runtime.__esm({ "src/core/TatchiPasske
|
|
|
353
424
|
const { accountId, nearPublicKey } = args;
|
|
354
425
|
this.cancelled = false;
|
|
355
426
|
this.error = void 0;
|
|
356
|
-
const
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
}
|
|
362
|
-
const nearAccountId = require_accountIds.toAccountId(accountId);
|
|
363
|
-
let rec = this.pending;
|
|
364
|
-
if (!rec || rec.accountId !== nearAccountId || nearPublicKey && rec.nearPublicKey !== nearPublicKey) {
|
|
365
|
-
rec = await this.loadPending(nearAccountId, nearPublicKey);
|
|
366
|
-
this.pending = rec;
|
|
367
|
-
}
|
|
368
|
-
if (!rec) {
|
|
369
|
-
const err = this.emitError(4, "No pending email recovery record found for this account");
|
|
370
|
-
await this.options?.afterCall?.(false);
|
|
371
|
-
throw err;
|
|
372
|
-
}
|
|
373
|
-
if (rec.status === "error") {
|
|
374
|
-
const err = this.emitError(4, "Pending email recovery is in an error state; please restart the flow");
|
|
375
|
-
await this.options?.afterCall?.(false);
|
|
376
|
-
throw err;
|
|
377
|
-
}
|
|
427
|
+
const nearAccountId = await this.assertValidAccountIdOrFail(4, accountId);
|
|
428
|
+
const rec = await this.resolvePendingOrFail(4, {
|
|
429
|
+
accountId: nearAccountId,
|
|
430
|
+
nearPublicKey
|
|
431
|
+
}, { allowErrorStatus: false });
|
|
378
432
|
if (rec.status === "complete" || rec.status === "finalizing") {
|
|
379
433
|
await this.options?.afterCall?.(true, void 0);
|
|
380
434
|
return;
|
|
@@ -394,27 +448,31 @@ var init_emailRecovery = require_rolldown_runtime.__esm({ "src/core/TatchiPasske
|
|
|
394
448
|
this.pollIntervalResolver = void 0;
|
|
395
449
|
}
|
|
396
450
|
}
|
|
451
|
+
/**
|
|
452
|
+
* Best-effort cancellation and local state reset so callers can retry.
|
|
453
|
+
* This does not remove any passkey created in the browser/OS (WebAuthn has no delete API),
|
|
454
|
+
* but it will stop polling and clear the pending IndexedDB record for the given key.
|
|
455
|
+
*/
|
|
456
|
+
async cancelAndReset(args) {
|
|
457
|
+
this.stopPolling();
|
|
458
|
+
const normalizedAccountId = (args?.accountId || this.pending?.accountId || "").toString().trim();
|
|
459
|
+
const nearPublicKey = (args?.nearPublicKey || this.pending?.nearPublicKey || "").toString().trim();
|
|
460
|
+
if (normalizedAccountId) try {
|
|
461
|
+
await this.clearPending(require_accountIds.toAccountId(normalizedAccountId), nearPublicKey);
|
|
462
|
+
} catch {}
|
|
463
|
+
this.pending = null;
|
|
464
|
+
this.error = void 0;
|
|
465
|
+
this.phase = require_sdkSentEvents.EmailRecoveryPhase.STEP_1_PREPARATION;
|
|
466
|
+
}
|
|
397
467
|
async finalize(args) {
|
|
398
468
|
const { accountId, nearPublicKey } = args;
|
|
399
469
|
this.cancelled = false;
|
|
400
470
|
this.error = void 0;
|
|
401
|
-
const
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
}
|
|
407
|
-
const nearAccountId = require_accountIds.toAccountId(accountId);
|
|
408
|
-
let rec = this.pending;
|
|
409
|
-
if (!rec || rec.accountId !== nearAccountId || nearPublicKey && rec.nearPublicKey !== nearPublicKey) {
|
|
410
|
-
rec = await this.loadPending(nearAccountId, nearPublicKey);
|
|
411
|
-
this.pending = rec;
|
|
412
|
-
}
|
|
413
|
-
if (!rec) {
|
|
414
|
-
const err = this.emitError(4, "No pending email recovery record found for this account");
|
|
415
|
-
await this.options?.afterCall?.(false);
|
|
416
|
-
throw err;
|
|
417
|
-
}
|
|
471
|
+
const nearAccountId = await this.assertValidAccountIdOrFail(4, accountId);
|
|
472
|
+
const rec = await this.resolvePendingOrFail(4, {
|
|
473
|
+
accountId: nearAccountId,
|
|
474
|
+
nearPublicKey
|
|
475
|
+
}, { allowErrorStatus: true });
|
|
418
476
|
this.emit({
|
|
419
477
|
step: 0,
|
|
420
478
|
phase: require_sdkSentEvents.EmailRecoveryPhase.RESUMED_FROM_PENDING,
|
|
@@ -450,141 +508,318 @@ var init_emailRecovery = require_rolldown_runtime.__esm({ "src/core/TatchiPasske
|
|
|
450
508
|
}
|
|
451
509
|
this.phase = require_sdkSentEvents.EmailRecoveryPhase.STEP_4_POLLING_VERIFICATION_RESULT;
|
|
452
510
|
this.pollingStartedAt = Date.now();
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
const
|
|
511
|
+
const pollResult = await this.pollUntil({
|
|
512
|
+
intervalMs: pollingIntervalMs,
|
|
513
|
+
timeoutMs: maxPollingDurationMs,
|
|
514
|
+
isCancelled: () => this.cancelled,
|
|
515
|
+
tick: async ({ elapsedMs, pollCount }) => {
|
|
516
|
+
const verification = await this.checkViaDkimViewMethod(rec);
|
|
517
|
+
const completed = verification?.completed === true;
|
|
518
|
+
const success = verification?.success === true;
|
|
519
|
+
this.emit({
|
|
520
|
+
step: 4,
|
|
521
|
+
phase: require_sdkSentEvents.EmailRecoveryPhase.STEP_4_POLLING_VERIFICATION_RESULT,
|
|
522
|
+
status: require_sdkSentEvents.EmailRecoveryStatus.PROGRESS,
|
|
523
|
+
message: completed && success ? `Email verified for request ${rec.requestId}; finalizing registration` : `Waiting for email verification for request ${rec.requestId}`,
|
|
524
|
+
data: this.buildPollingEventData(rec, {
|
|
525
|
+
transactionHash: verification?.transactionHash,
|
|
526
|
+
elapsedMs,
|
|
527
|
+
pollCount
|
|
528
|
+
})
|
|
529
|
+
});
|
|
530
|
+
if (!completed) return { done: false };
|
|
531
|
+
if (!success) return {
|
|
532
|
+
done: true,
|
|
533
|
+
value: {
|
|
534
|
+
outcome: "failed",
|
|
535
|
+
errorMessage: verification?.errorMessage || "Email verification failed"
|
|
536
|
+
}
|
|
537
|
+
};
|
|
538
|
+
return {
|
|
539
|
+
done: true,
|
|
540
|
+
value: { outcome: "verified" }
|
|
541
|
+
};
|
|
542
|
+
}
|
|
543
|
+
});
|
|
544
|
+
if (pollResult.status === "completed") {
|
|
545
|
+
if (pollResult.value.outcome === "failed") {
|
|
546
|
+
const err$1 = this.emitError(4, pollResult.value.errorMessage);
|
|
459
547
|
rec.status = "error";
|
|
460
548
|
await this.savePending(rec);
|
|
461
549
|
await this.options?.afterCall?.(false);
|
|
462
550
|
throw err$1;
|
|
463
551
|
}
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
requestId: rec.requestId,
|
|
475
|
-
nearPublicKey: rec.nearPublicKey,
|
|
476
|
-
elapsedMs: elapsed,
|
|
477
|
-
pollCount
|
|
478
|
-
}
|
|
479
|
-
});
|
|
480
|
-
if (completed) {
|
|
481
|
-
if (!success) {
|
|
482
|
-
const err$1 = this.emitError(4, verification?.errorMessage || "Email verification failed");
|
|
483
|
-
rec.status = "error";
|
|
484
|
-
await this.savePending(rec);
|
|
485
|
-
await this.options?.afterCall?.(false);
|
|
486
|
-
throw err$1;
|
|
487
|
-
}
|
|
488
|
-
rec.status = "finalizing";
|
|
489
|
-
await this.savePending(rec);
|
|
490
|
-
return;
|
|
491
|
-
}
|
|
492
|
-
await new Promise((resolve) => {
|
|
493
|
-
this.pollIntervalResolver = resolve;
|
|
494
|
-
this.pollingTimer = setTimeout(() => {
|
|
495
|
-
this.pollIntervalResolver = void 0;
|
|
496
|
-
this.pollingTimer = void 0;
|
|
497
|
-
resolve();
|
|
498
|
-
}, pollingIntervalMs);
|
|
499
|
-
}).finally(() => {
|
|
500
|
-
this.pollIntervalResolver = void 0;
|
|
501
|
-
});
|
|
552
|
+
rec.status = "finalizing";
|
|
553
|
+
await this.savePending(rec);
|
|
554
|
+
return;
|
|
555
|
+
}
|
|
556
|
+
if (pollResult.status === "timedOut") {
|
|
557
|
+
const err$1 = this.emitError(4, "Timed out waiting for recovery email to be processed on-chain");
|
|
558
|
+
rec.status = "error";
|
|
559
|
+
await this.savePending(rec);
|
|
560
|
+
await this.options?.afterCall?.(false);
|
|
561
|
+
throw err$1;
|
|
502
562
|
}
|
|
503
563
|
const err = this.emitError(4, "Email recovery polling was cancelled");
|
|
504
564
|
await this.options?.afterCall?.(false);
|
|
505
565
|
throw err;
|
|
506
566
|
}
|
|
507
|
-
|
|
508
|
-
this.phase = require_sdkSentEvents.EmailRecoveryPhase.STEP_5_FINALIZING_REGISTRATION;
|
|
509
|
-
this.emit({
|
|
510
|
-
step: 5,
|
|
511
|
-
phase: require_sdkSentEvents.EmailRecoveryPhase.STEP_5_FINALIZING_REGISTRATION,
|
|
512
|
-
status: require_sdkSentEvents.EmailRecoveryStatus.PROGRESS,
|
|
513
|
-
message: "Finalizing email recovery registration...",
|
|
514
|
-
data: {
|
|
515
|
-
accountId: rec.accountId,
|
|
516
|
-
nearPublicKey: rec.nearPublicKey
|
|
517
|
-
}
|
|
518
|
-
});
|
|
567
|
+
initializeNonceManager(rec) {
|
|
519
568
|
const nonceManager = this.context.webAuthnManager.getNonceManager();
|
|
520
569
|
const accountId = require_accountIds.toAccountId(rec.accountId);
|
|
521
570
|
nonceManager.initializeUser(accountId, rec.nearPublicKey);
|
|
571
|
+
return {
|
|
572
|
+
nonceManager,
|
|
573
|
+
accountId
|
|
574
|
+
};
|
|
575
|
+
}
|
|
576
|
+
async signRegistrationTx(rec, accountId) {
|
|
577
|
+
const vrfChallenge = rec.vrfChallenge;
|
|
578
|
+
if (!vrfChallenge) return this.fail(5, "Missing VRF challenge for email recovery registration");
|
|
579
|
+
const registrationResult = await this.context.webAuthnManager.signDevice2RegistrationWithStoredKey({
|
|
580
|
+
nearAccountId: accountId,
|
|
581
|
+
credential: rec.credential,
|
|
582
|
+
vrfChallenge,
|
|
583
|
+
deterministicVrfPublicKey: rec.vrfPublicKey,
|
|
584
|
+
deviceNumber: rec.deviceNumber
|
|
585
|
+
});
|
|
586
|
+
if (!registrationResult.success || !registrationResult.signedTransaction) await this.fail(5, registrationResult.error || "Failed to sign email recovery registration transaction");
|
|
587
|
+
return registrationResult.signedTransaction;
|
|
588
|
+
}
|
|
589
|
+
async broadcastRegistrationTxAndWaitFinal(rec, signedTx) {
|
|
522
590
|
try {
|
|
523
|
-
|
|
524
|
-
const err = this.emitError(5, "Missing VRF challenge for email recovery registration");
|
|
525
|
-
await this.options?.afterCall?.(false);
|
|
526
|
-
throw err;
|
|
527
|
-
}
|
|
528
|
-
const registrationResult = await this.context.webAuthnManager.signDevice2RegistrationWithStoredKey({
|
|
529
|
-
nearAccountId: accountId,
|
|
530
|
-
credential: rec.credential,
|
|
531
|
-
vrfChallenge: rec.vrfChallenge,
|
|
532
|
-
deterministicVrfPublicKey: rec.vrfPublicKey,
|
|
533
|
-
deviceNumber: rec.deviceNumber
|
|
534
|
-
});
|
|
535
|
-
if (!registrationResult.success || !registrationResult.signedTransaction) {
|
|
536
|
-
const err = this.emitError(5, registrationResult.error || "Failed to sign email recovery registration transaction");
|
|
537
|
-
await this.options?.afterCall?.(false);
|
|
538
|
-
throw err;
|
|
539
|
-
}
|
|
540
|
-
const signedTx = registrationResult.signedTransaction;
|
|
591
|
+
const txResult = await this.context.nearClient.sendTransaction(signedTx, require_rpc.DEFAULT_WAIT_STATUS.linkDeviceRegistration);
|
|
541
592
|
try {
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
593
|
+
const txHash = txResult?.transaction?.hash || txResult?.transaction_hash;
|
|
594
|
+
if (txHash) this.emit({
|
|
595
|
+
step: 5,
|
|
596
|
+
phase: require_sdkSentEvents.EmailRecoveryPhase.STEP_5_FINALIZING_REGISTRATION,
|
|
597
|
+
status: require_sdkSentEvents.EmailRecoveryStatus.PROGRESS,
|
|
598
|
+
message: "Registration transaction confirmed",
|
|
599
|
+
data: {
|
|
600
|
+
accountId: rec.accountId,
|
|
601
|
+
nearPublicKey: rec.nearPublicKey,
|
|
602
|
+
transactionHash: txHash
|
|
603
|
+
}
|
|
604
|
+
});
|
|
605
|
+
return txHash;
|
|
552
606
|
} catch {}
|
|
553
|
-
|
|
554
|
-
|
|
607
|
+
} catch (e) {
|
|
608
|
+
const msg = String(e?.message || "");
|
|
609
|
+
await this.fail(5, msg || "Failed to broadcast email recovery registration transaction (insufficient funds or RPC error)");
|
|
610
|
+
}
|
|
611
|
+
return void 0;
|
|
612
|
+
}
|
|
613
|
+
async persistRecoveredUserRecordBestEffort(rec, accountId) {
|
|
614
|
+
try {
|
|
615
|
+
await require_index.IndexedDBManager.clientDB.storeWebAuthnUserData({
|
|
555
616
|
nearAccountId: accountId,
|
|
556
617
|
deviceNumber: rec.deviceNumber,
|
|
557
618
|
clientNearPublicKey: rec.nearPublicKey,
|
|
558
|
-
lastUpdated: Date.now(),
|
|
559
619
|
passkeyCredential: {
|
|
560
620
|
id: rec.credential.id,
|
|
561
621
|
rawId: rec.credential.rawId
|
|
562
622
|
},
|
|
563
|
-
encryptedVrfKeypair:
|
|
564
|
-
encryptedVrfDataB64u: rec.encryptedVrfKeypair.encryptedVrfDataB64u,
|
|
565
|
-
chacha20NonceB64u: rec.encryptedVrfKeypair.chacha20NonceB64u
|
|
566
|
-
},
|
|
623
|
+
encryptedVrfKeypair: rec.encryptedVrfKeypair,
|
|
567
624
|
serverEncryptedVrfKeypair: rec.serverEncryptedVrfKeypair || void 0
|
|
568
625
|
});
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
626
|
+
return true;
|
|
627
|
+
} catch (err) {
|
|
628
|
+
console.warn("[EmailRecoveryFlow] Failed to store recovery user record:", err);
|
|
629
|
+
return false;
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
mapAuthenticatorsFromContract(authenticators) {
|
|
633
|
+
return authenticators.map(({ authenticator }) => ({
|
|
634
|
+
credentialId: authenticator.credentialId,
|
|
635
|
+
credentialPublicKey: authenticator.credentialPublicKey,
|
|
636
|
+
transports: authenticator.transports,
|
|
637
|
+
name: authenticator.name,
|
|
638
|
+
registered: authenticator.registered.toISOString(),
|
|
639
|
+
vrfPublicKey: authenticator.vrfPublicKeys?.[0] || "",
|
|
640
|
+
deviceNumber: authenticator.deviceNumber
|
|
641
|
+
}));
|
|
642
|
+
}
|
|
643
|
+
async syncAuthenticatorsBestEffort(accountId) {
|
|
644
|
+
try {
|
|
645
|
+
const { syncAuthenticatorsContractCall } = await Promise.resolve().then(() => require("../rpcCalls.js"));
|
|
646
|
+
const authenticators = await syncAuthenticatorsContractCall(this.context.nearClient, this.context.configs.contractId, accountId);
|
|
647
|
+
const mappedAuthenticators = this.mapAuthenticatorsFromContract(authenticators);
|
|
648
|
+
await require_index.IndexedDBManager.clientDB.syncAuthenticatorsFromContract(accountId, mappedAuthenticators);
|
|
649
|
+
return true;
|
|
650
|
+
} catch (err) {
|
|
651
|
+
console.warn("[EmailRecoveryFlow] Failed to sync authenticators after recovery:", err);
|
|
652
|
+
return false;
|
|
653
|
+
}
|
|
654
|
+
}
|
|
655
|
+
async setLastUserBestEffort(accountId, deviceNumber) {
|
|
656
|
+
try {
|
|
657
|
+
await require_index.IndexedDBManager.clientDB.setLastUser(accountId, deviceNumber);
|
|
658
|
+
return true;
|
|
659
|
+
} catch (err) {
|
|
660
|
+
console.warn("[EmailRecoveryFlow] Failed to set last user after recovery:", err);
|
|
661
|
+
return false;
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
async updateNonceBestEffort(nonceManager, signedTx) {
|
|
665
|
+
try {
|
|
666
|
+
const txNonce = signedTx.transaction?.nonce;
|
|
667
|
+
if (txNonce != null) await nonceManager.updateNonceFromBlockchain(this.context.nearClient, String(txNonce));
|
|
668
|
+
} catch {}
|
|
669
|
+
}
|
|
670
|
+
async persistRecoveredUserData(rec, accountId) {
|
|
671
|
+
const { webAuthnManager } = this.context;
|
|
672
|
+
const payload = {
|
|
673
|
+
nearAccountId: accountId,
|
|
674
|
+
deviceNumber: rec.deviceNumber,
|
|
675
|
+
clientNearPublicKey: rec.nearPublicKey,
|
|
676
|
+
lastUpdated: Date.now(),
|
|
677
|
+
passkeyCredential: {
|
|
678
|
+
id: rec.credential.id,
|
|
679
|
+
rawId: rec.credential.rawId
|
|
680
|
+
},
|
|
681
|
+
encryptedVrfKeypair: {
|
|
682
|
+
encryptedVrfDataB64u: rec.encryptedVrfKeypair.encryptedVrfDataB64u,
|
|
683
|
+
chacha20NonceB64u: rec.encryptedVrfKeypair.chacha20NonceB64u
|
|
684
|
+
},
|
|
685
|
+
serverEncryptedVrfKeypair: rec.serverEncryptedVrfKeypair || void 0
|
|
686
|
+
};
|
|
687
|
+
await webAuthnManager.storeUserData(payload);
|
|
688
|
+
}
|
|
689
|
+
async persistAuthenticatorBestEffort(rec, accountId) {
|
|
690
|
+
try {
|
|
691
|
+
const { webAuthnManager } = this.context;
|
|
692
|
+
const attestationB64u = rec.credential.response.attestationObject;
|
|
693
|
+
const credentialPublicKey = await webAuthnManager.extractCosePublicKey(attestationB64u);
|
|
694
|
+
await webAuthnManager.storeAuthenticator({
|
|
695
|
+
nearAccountId: accountId,
|
|
696
|
+
deviceNumber: rec.deviceNumber,
|
|
697
|
+
credentialId: rec.credential.rawId,
|
|
698
|
+
credentialPublicKey,
|
|
699
|
+
transports: ["internal"],
|
|
700
|
+
name: `Device ${rec.deviceNumber} Passkey for ${rec.accountId.split(".")[0]}`,
|
|
701
|
+
registered: (/* @__PURE__ */ new Date()).toISOString(),
|
|
702
|
+
syncedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
703
|
+
vrfPublicKey: rec.vrfPublicKey
|
|
704
|
+
});
|
|
705
|
+
} catch {}
|
|
706
|
+
}
|
|
707
|
+
async markCompleteAndClearPending(rec) {
|
|
708
|
+
rec.status = "complete";
|
|
709
|
+
await this.savePending(rec);
|
|
710
|
+
await this.clearPending(rec.accountId, rec.nearPublicKey);
|
|
711
|
+
}
|
|
712
|
+
async assertVrfActiveForAccount(accountId, message) {
|
|
713
|
+
const vrfStatus = await this.context.webAuthnManager.checkVrfStatus();
|
|
714
|
+
const vrfActiveForAccount = vrfStatus.active && vrfStatus.nearAccountId && String(vrfStatus.nearAccountId) === String(accountId);
|
|
715
|
+
if (!vrfActiveForAccount) throw new Error(message);
|
|
716
|
+
}
|
|
717
|
+
async finalizeLocalLoginState(accountId, deviceNumber) {
|
|
718
|
+
const { webAuthnManager } = this.context;
|
|
719
|
+
await webAuthnManager.setLastUser(accountId, deviceNumber);
|
|
720
|
+
await webAuthnManager.initializeCurrentUser(accountId, this.context.nearClient);
|
|
721
|
+
try {
|
|
722
|
+
await require_login.getLoginSession(this.context, accountId);
|
|
723
|
+
} catch {}
|
|
724
|
+
}
|
|
725
|
+
async tryShamirUnlock(rec, accountId, deviceNumber) {
|
|
726
|
+
if (!rec.serverEncryptedVrfKeypair || !rec.serverEncryptedVrfKeypair.serverKeyId || !this.context.configs.vrfWorkerConfigs?.shamir3pass?.relayServerUrl) return false;
|
|
727
|
+
try {
|
|
728
|
+
const { webAuthnManager } = this.context;
|
|
729
|
+
const unlockResult = await webAuthnManager.shamir3PassDecryptVrfKeypair({
|
|
730
|
+
nearAccountId: accountId,
|
|
731
|
+
kek_s_b64u: rec.serverEncryptedVrfKeypair.kek_s_b64u,
|
|
732
|
+
ciphertextVrfB64u: rec.serverEncryptedVrfKeypair.ciphertextVrfB64u,
|
|
733
|
+
serverKeyId: rec.serverEncryptedVrfKeypair.serverKeyId
|
|
734
|
+
});
|
|
735
|
+
if (!unlockResult.success) return false;
|
|
736
|
+
await this.assertVrfActiveForAccount(accountId, "VRF session inactive after Shamir3Pass unlock");
|
|
737
|
+
await this.finalizeLocalLoginState(accountId, deviceNumber);
|
|
738
|
+
return true;
|
|
739
|
+
} catch (err) {
|
|
740
|
+
console.warn("[EmailRecoveryFlow] Shamir 3-pass unlock failed, falling back to TouchID", err);
|
|
741
|
+
return false;
|
|
742
|
+
}
|
|
743
|
+
}
|
|
744
|
+
async tryTouchIdUnlock(rec, accountId, deviceNumber) {
|
|
745
|
+
try {
|
|
746
|
+
const { webAuthnManager } = this.context;
|
|
747
|
+
const authChallenge = require_vrf_worker.createRandomVRFChallenge();
|
|
748
|
+
const storedCredentialId = String(rec.credential?.rawId || rec.credential?.id || "").trim();
|
|
749
|
+
const credentialIds = storedCredentialId ? [storedCredentialId] : [];
|
|
750
|
+
const authenticators = credentialIds.length > 0 ? [] : await webAuthnManager.getAuthenticatorsByUser(accountId);
|
|
751
|
+
const authCredential = await webAuthnManager.getAuthenticationCredentialsSerializedDualPrf({
|
|
752
|
+
nearAccountId: accountId,
|
|
753
|
+
challenge: authChallenge,
|
|
754
|
+
credentialIds: credentialIds.length > 0 ? credentialIds : authenticators.map((a) => a.credentialId)
|
|
755
|
+
});
|
|
756
|
+
if (storedCredentialId && authCredential.rawId !== storedCredentialId) return {
|
|
757
|
+
success: false,
|
|
758
|
+
reason: "Wrong passkey selected during recovery auto-login; please use the newly recovered passkey."
|
|
759
|
+
};
|
|
760
|
+
const vrfUnlockResult = await webAuthnManager.unlockVRFKeypair({
|
|
761
|
+
nearAccountId: accountId,
|
|
762
|
+
encryptedVrfKeypair: rec.encryptedVrfKeypair,
|
|
763
|
+
credential: authCredential
|
|
764
|
+
});
|
|
765
|
+
if (!vrfUnlockResult.success) return {
|
|
766
|
+
success: false,
|
|
767
|
+
reason: vrfUnlockResult.error || "VRF unlock failed during auto-login"
|
|
768
|
+
};
|
|
769
|
+
await this.assertVrfActiveForAccount(accountId, "VRF session inactive after TouchID unlock");
|
|
770
|
+
await this.finalizeLocalLoginState(accountId, deviceNumber);
|
|
771
|
+
return { success: true };
|
|
772
|
+
} catch (err) {
|
|
773
|
+
return {
|
|
774
|
+
success: false,
|
|
775
|
+
reason: err?.message || String(err)
|
|
776
|
+
};
|
|
777
|
+
}
|
|
778
|
+
}
|
|
779
|
+
async handleAutoLoginFailure(reason, err) {
|
|
780
|
+
console.warn("[EmailRecoveryFlow] Auto-login failed after recovery", err ?? reason);
|
|
781
|
+
try {
|
|
782
|
+
await this.context.webAuthnManager.clearVrfSession();
|
|
783
|
+
} catch {}
|
|
784
|
+
return {
|
|
785
|
+
success: false,
|
|
786
|
+
reason
|
|
787
|
+
};
|
|
788
|
+
}
|
|
789
|
+
async finalizeRegistration(rec) {
|
|
790
|
+
this.phase = require_sdkSentEvents.EmailRecoveryPhase.STEP_5_FINALIZING_REGISTRATION;
|
|
791
|
+
this.emit({
|
|
792
|
+
step: 5,
|
|
793
|
+
phase: require_sdkSentEvents.EmailRecoveryPhase.STEP_5_FINALIZING_REGISTRATION,
|
|
794
|
+
status: require_sdkSentEvents.EmailRecoveryStatus.PROGRESS,
|
|
795
|
+
message: "Finalizing email recovery registration...",
|
|
796
|
+
data: {
|
|
797
|
+
accountId: rec.accountId,
|
|
798
|
+
nearPublicKey: rec.nearPublicKey
|
|
799
|
+
}
|
|
800
|
+
});
|
|
801
|
+
try {
|
|
802
|
+
const { nonceManager, accountId } = this.initializeNonceManager(rec);
|
|
803
|
+
const signedTx = await this.signRegistrationTx(rec, accountId);
|
|
804
|
+
const txHash = await this.broadcastRegistrationTxAndWaitFinal(rec, signedTx);
|
|
805
|
+
if (txHash) {
|
|
806
|
+
const storedUser = await this.persistRecoveredUserRecordBestEffort(rec, accountId);
|
|
807
|
+
if (storedUser) {
|
|
808
|
+
const syncedAuthenticators = await this.syncAuthenticatorsBestEffort(accountId);
|
|
809
|
+
if (syncedAuthenticators) await this.setLastUserBestEffort(accountId, rec.deviceNumber);
|
|
810
|
+
}
|
|
811
|
+
}
|
|
812
|
+
await this.updateNonceBestEffort(nonceManager, signedTx);
|
|
813
|
+
await this.persistRecoveredUserData(rec, accountId);
|
|
814
|
+
await this.persistAuthenticatorBestEffort(rec, accountId);
|
|
815
|
+
this.emitAutoLoginEvent(require_sdkSentEvents.EmailRecoveryStatus.PROGRESS, "Attempting auto-login with recovered device...", { autoLogin: "progress" });
|
|
816
|
+
const autoLoginResult = await this.attemptAutoLogin(rec);
|
|
817
|
+
if (autoLoginResult.success) this.emitAutoLoginEvent(require_sdkSentEvents.EmailRecoveryStatus.SUCCESS, `Welcome ${accountId}`, { autoLogin: "success" });
|
|
818
|
+
else this.emitAutoLoginEvent(require_sdkSentEvents.EmailRecoveryStatus.ERROR, "Auto-login failed; please log in manually on this device.", {
|
|
819
|
+
error: autoLoginResult.reason,
|
|
820
|
+
autoLogin: "error"
|
|
821
|
+
});
|
|
822
|
+
await this.markCompleteAndClearPending(rec);
|
|
588
823
|
this.phase = require_sdkSentEvents.EmailRecoveryPhase.STEP_6_COMPLETE;
|
|
589
824
|
this.emit({
|
|
590
825
|
step: 6,
|
|
@@ -604,77 +839,22 @@ var init_emailRecovery = require_rolldown_runtime.__esm({ "src/core/TatchiPasske
|
|
|
604
839
|
}
|
|
605
840
|
async attemptAutoLogin(rec) {
|
|
606
841
|
try {
|
|
607
|
-
this.emit({
|
|
608
|
-
step: 5,
|
|
609
|
-
phase: require_sdkSentEvents.EmailRecoveryPhase.STEP_5_FINALIZING_REGISTRATION,
|
|
610
|
-
status: require_sdkSentEvents.EmailRecoveryStatus.PROGRESS,
|
|
611
|
-
message: "Attempting auto-login with recovered device...",
|
|
612
|
-
data: { autoLogin: "progress" }
|
|
613
|
-
});
|
|
614
|
-
const { webAuthnManager } = this.context;
|
|
615
842
|
const accountId = require_accountIds.toAccountId(rec.accountId);
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
status: require_sdkSentEvents.EmailRecoveryStatus.SUCCESS,
|
|
630
|
-
message: `Welcome ${accountId}`,
|
|
631
|
-
data: { autoLogin: "success" }
|
|
632
|
-
});
|
|
633
|
-
return;
|
|
634
|
-
}
|
|
635
|
-
} catch (err) {
|
|
636
|
-
console.warn("[EmailRecoveryFlow] Shamir 3-pass unlock failed, falling back to TouchID", err);
|
|
637
|
-
}
|
|
638
|
-
const { txBlockHash, txBlockHeight } = await webAuthnManager.getNonceManager().getNonceBlockHashAndHeight(this.context.nearClient);
|
|
639
|
-
const authChallenge = await webAuthnManager.generateVrfChallengeOnce({
|
|
640
|
-
userId: accountId,
|
|
641
|
-
rpId: webAuthnManager.getRpId(),
|
|
642
|
-
blockHash: txBlockHash,
|
|
643
|
-
blockHeight: txBlockHeight
|
|
644
|
-
});
|
|
645
|
-
const authenticators = await webAuthnManager.getAuthenticatorsByUser(accountId);
|
|
646
|
-
const authCredential = await webAuthnManager.getAuthenticationCredentialsSerializedDualPrf({
|
|
647
|
-
nearAccountId: accountId,
|
|
648
|
-
challenge: authChallenge,
|
|
649
|
-
credentialIds: authenticators.map((a) => a.credentialId)
|
|
650
|
-
});
|
|
651
|
-
const vrfUnlockResult = await webAuthnManager.unlockVRFKeypair({
|
|
652
|
-
nearAccountId: accountId,
|
|
653
|
-
encryptedVrfKeypair: rec.encryptedVrfKeypair,
|
|
654
|
-
credential: authCredential
|
|
655
|
-
});
|
|
656
|
-
if (!vrfUnlockResult.success) throw new Error(vrfUnlockResult.error || "VRF unlock failed during auto-login");
|
|
657
|
-
await webAuthnManager.initializeCurrentUser(accountId, this.context.nearClient);
|
|
658
|
-
await webAuthnManager.setLastUser(accountId, rec.deviceNumber);
|
|
659
|
-
this.emit({
|
|
660
|
-
step: 5,
|
|
661
|
-
phase: require_sdkSentEvents.EmailRecoveryPhase.STEP_5_FINALIZING_REGISTRATION,
|
|
662
|
-
status: require_sdkSentEvents.EmailRecoveryStatus.SUCCESS,
|
|
663
|
-
message: `Welcome ${accountId}`,
|
|
664
|
-
data: { autoLogin: "success" }
|
|
665
|
-
});
|
|
843
|
+
const deviceNumber = require_getDeviceNumber.parseDeviceNumber(rec.deviceNumber, { min: 1 });
|
|
844
|
+
if (deviceNumber === null) return this.handleAutoLoginFailure(`Invalid deviceNumber for auto-login: ${String(rec.deviceNumber)}`);
|
|
845
|
+
const shamirUnlocked = await this.tryShamirUnlock(rec, accountId, deviceNumber);
|
|
846
|
+
if (shamirUnlocked) return {
|
|
847
|
+
success: true,
|
|
848
|
+
method: "shamir"
|
|
849
|
+
};
|
|
850
|
+
const touchIdResult = await this.tryTouchIdUnlock(rec, accountId, deviceNumber);
|
|
851
|
+
if (touchIdResult.success) return {
|
|
852
|
+
success: true,
|
|
853
|
+
method: "touchid"
|
|
854
|
+
};
|
|
855
|
+
return this.handleAutoLoginFailure(touchIdResult.reason || "Auto-login failed");
|
|
666
856
|
} catch (err) {
|
|
667
|
-
|
|
668
|
-
this.emit({
|
|
669
|
-
step: 5,
|
|
670
|
-
phase: require_sdkSentEvents.EmailRecoveryPhase.STEP_5_FINALIZING_REGISTRATION,
|
|
671
|
-
status: require_sdkSentEvents.EmailRecoveryStatus.ERROR,
|
|
672
|
-
message: "Auto-login failed; please log in manually on this device.",
|
|
673
|
-
data: {
|
|
674
|
-
error: err?.message || String(err),
|
|
675
|
-
autoLogin: "error"
|
|
676
|
-
}
|
|
677
|
-
});
|
|
857
|
+
return this.handleAutoLoginFailure(err?.message || String(err), err);
|
|
678
858
|
}
|
|
679
859
|
}
|
|
680
860
|
};
|