@seams/wallet 0.17.0 → 0.19.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/README.md +4 -5
- package/dist/.build-inputs.sha256 +1 -1
- package/dist/esm/SeamsWeb/index.js +1 -1
- package/dist/esm/SeamsWeb/walletIframe/client/inboundMessages.js +1 -1
- package/dist/esm/SeamsWeb/walletIframe/client/router.js +10 -4
- package/dist/esm/SeamsWeb/walletIframe/coordinator.js +23 -1
- package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/AuthMenuFooter.js +5 -4
- package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/AuthMenuSurface.js +121 -246
- package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/icons.js +37 -1
- package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/mountAuthMenuSurface.js +4 -2
- package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/presentation.js +117 -0
- package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/recovery-code-input.js +60 -0
- package/dist/esm/SeamsWeb/walletIframe/shared/facadeBoundary.js +2 -0
- package/dist/esm/core/browser/walletIframe/events.js +6 -0
- package/dist/esm/core/config/configBuilder.js +2 -0
- package/dist/esm/core/signingEngine/uiConfirm/ui/appearance.js +27 -0
- package/dist/esm/core/signingEngine/uiConfirm/ui/export-private-key-reveal.js +155 -0
- package/dist/esm/core/signingEngine/uiConfirm/ui/export-viewer-host.js +209 -0
- package/dist/esm/core/signingEngine/uiConfirm/ui/preact/ConfirmContent.js +7 -4
- package/dist/esm/core/signingEngine/uiConfirm/ui/preact/ConfirmHeader.js +10 -6
- package/dist/esm/core/signingEngine/uiConfirm/ui/preact/ConfirmationBody.js +9 -6
- package/dist/esm/core/signingEngine/uiConfirm/ui/preact/ConfirmationContent.js +9 -6
- package/dist/esm/core/signingEngine/uiConfirm/ui/preact/ConfirmationDrawer.js +7 -4
- package/dist/esm/core/signingEngine/uiConfirm/ui/preact/ConfirmationModal.js +4 -1
- package/dist/esm/core/signingEngine/uiConfirm/ui/preact/EmailOtpContent.js +4 -1
- package/dist/esm/core/signingEngine/uiConfirm/ui/preact/EmailOtpInput.js +5 -4
- package/dist/esm/core/signingEngine/uiConfirm/ui/preact/ExportPrivateKeySurface.js +319 -0
- package/dist/esm/core/signingEngine/uiConfirm/ui/preact/PasskeyRegistrationContent.js +10 -7
- package/dist/esm/core/signingEngine/uiConfirm/ui/preact/PasskeyRegistrationDetails.js +9 -5
- package/dist/esm/core/signingEngine/uiConfirm/ui/preact/RecoveryCodeBackupSurface.js +28 -22
- package/dist/esm/core/signingEngine/uiConfirm/ui/preact/ReviewDisclosure.js +2 -1
- package/dist/esm/core/signingEngine/uiConfirm/ui/preact/TransactionLabel.js +51 -26
- package/dist/esm/core/signingEngine/uiConfirm/ui/preact/TransactionReceipt.js +42 -27
- package/dist/esm/core/signingEngine/uiConfirm/ui/preact/TransactionReview.js +25 -18
- package/dist/esm/core/signingEngine/uiConfirm/ui/preact/TransactionTree.js +8 -5
- package/dist/esm/core/signingEngine/uiConfirm/ui/preact/WalletLocale.js +24 -0
- package/dist/esm/core/signingEngine/uiConfirm/ui/preact/mountConfirmationSurface.js +6 -4
- package/dist/esm/core/signingEngine/uiConfirm/ui/preact/mountExportPrivateKeySurface.js +92 -0
- package/dist/esm/core/signingEngine/uiConfirm/ui/preact/mountRecoveryCodeBackupSurface.js +4 -2
- package/dist/esm/core/signingEngine/uiConfirm/ui/surface-measurement-binding.js +12 -0
- package/dist/esm/core/ui/locale.js +10 -0
- package/dist/esm/core/ui/messages.js +698 -0
- package/dist/esm/index.js +3 -2
- package/dist/esm/react/components/AccountMenuButton/AccountMenuButtonMock.js +7 -3
- package/dist/esm/react/components/AccountMenuButton/AccountMenuButtonView.js +7 -4
- package/dist/esm/react/components/AccountMenuButton/AccountMenuDeviceDetails.js +4 -3
- package/dist/esm/react/components/AccountMenuButton/AccountMenuDialog.js +5 -2
- package/dist/esm/react/components/AccountMenuButton/AccountMenuMockScreens.js +31 -27
- package/dist/esm/react/components/AccountMenuButton/AccountMenuScreen.js +6 -3
- package/dist/esm/react/components/AccountMenuButton/AccountsSection.js +6 -3
- package/dist/esm/react/components/AccountMenuButton/AuthenticationMethodRow.js +5 -4
- package/dist/esm/react/components/AccountMenuButton/AuthenticationMethodsModal.js +33 -27
- package/dist/esm/react/components/AccountMenuButton/AuthenticationMethodsView.js +5 -2
- package/dist/esm/react/components/AccountMenuButton/ExportKeysScreen.js +5 -3
- package/dist/esm/react/components/AccountMenuButton/ExportKeysSection.css +20 -0
- package/dist/esm/react/components/AccountMenuButton/ExportKeysSection.js +4 -3
- package/dist/esm/react/components/AccountMenuButton/LinkedDevicesModal.css +9 -3
- package/dist/esm/react/components/AccountMenuButton/LinkedDevicesModal.js +50 -41
- package/dist/esm/react/components/AccountMenuButton/LockMenuItem.js +2 -1
- package/dist/esm/react/components/AccountMenuButton/MenuItem.js +3 -2
- package/dist/esm/react/components/AccountMenuButton/ProfileDropdown.js +8 -4
- package/dist/esm/react/components/AccountMenuButton/RecoveryCodeAcknowledgement.js +3 -2
- package/dist/esm/react/components/AccountMenuButton/RecoveryCodeActions.js +4 -3
- package/dist/esm/react/components/AccountMenuButton/SegmentedControl.js +2 -1
- package/dist/esm/react/components/AccountMenuButton/TransactionSettingsSection.js +11 -10
- package/dist/esm/react/components/AccountMenuButton/UserAccountButton.css +1 -0
- package/dist/esm/react/components/AccountMenuButton/UserAccountButton.js +8 -4
- package/dist/esm/react/components/AccountMenuButton/WalletRegionSection.js +22 -15
- package/dist/esm/react/components/AccountMenuButton/WalletSettingsLayout.js +20 -16
- package/dist/esm/react/components/AccountMenuButton/Web3AuthProfileButton.css +15 -0
- package/dist/esm/react/components/AccountMenuButton/index.js +18 -15
- package/dist/esm/react/components/HostedSeamsAuthMenu/SeamsAuthMenuMock.js +30 -26
- package/dist/esm/react/components/QRCodeScanner.js +28 -23
- package/dist/esm/react/components/ShowQRCode.js +39 -31
- package/dist/esm/react/components/theme/ThemeProvider.js +3 -0
- package/dist/esm/react/context/WalletLocale.js +15 -0
- package/dist/esm/react/context/index.js +8 -3
- package/dist/esm/react/styles/styles.css +36 -0
- package/dist/esm/sdk/ConfirmationDrawer-DCw0m-Iv.js +1 -0
- package/dist/{public/sdk/NonceCoordinator-DuDKN-B8.js → esm/sdk/NonceCoordinator-Dq-FZpBz.js} +1 -1
- package/dist/{public/sdk/accountLifecycle-D61FIpFS.js → esm/sdk/accountLifecycle-fLNUdjct.js} +1 -1
- package/dist/{public/sdk/activeWalletSession-Ba6X4CUN.js → esm/sdk/activeWalletSession-BpbnpU9s.js} +1 -1
- package/dist/esm/sdk/adapters-BNmcyf9K.js +2 -0
- package/dist/esm/sdk/appearance-token-vars-DxBm_cKA.js +2 -0
- package/dist/esm/sdk/{canonicalPrimitives-BOzRXzfv.js → canonicalPrimitives-BMP5yILS.js} +1 -1
- package/dist/esm/sdk/{challengeDelivery-FD9GHK1T.js → challengeDelivery-CG2J5Qxs.js} +1 -1
- package/dist/{public/sdk/clientSessionPersistenceState-BHRUSWMt.js → esm/sdk/clientSessionPersistenceState-BgO4P6CZ.js} +1 -1
- package/dist/esm/sdk/{commitQueue-DOIaR0Hr.js → commitQueue-BW7BpYyA.js} +1 -1
- package/dist/esm/sdk/configBuilder-BMNShuOu.js +1 -0
- package/dist/esm/sdk/{configHelpers-BXdl5Mxs.js → configHelpers-D50F_Txb.js} +1 -1
- package/dist/esm/sdk/{digestEncoding-CbEFYvlJ.js → digestEncoding-aC4dSf_x.js} +1 -1
- package/dist/esm/sdk/{display-CY_aJEn6.js → display-WtILOPQR.js} +1 -1
- package/dist/{public/sdk/ecdsaCapabilityManifest-DzA996y9.js → esm/sdk/ecdsaCapabilityManifest-DRc423SV.js} +1 -1
- package/dist/{public/sdk/ecdsaDerivationClientWasm-DQlajPpE.js → esm/sdk/ecdsaDerivationClientWasm-DmwKWUEb.js} +1 -1
- package/dist/{public/sdk/ecdsaDerivationExport-DyugdheE.js → esm/sdk/ecdsaDerivationExport-DX89rq_u.js} +1 -1
- package/dist/esm/sdk/{ecdsaWalletRecords-C_v74n5X.js → ecdsaWalletRecords-CxxUt3fS.js} +1 -1
- package/dist/{public/sdk/emailOtpEcdsaDerivationIdentity-BDVjvnmO.js → esm/sdk/emailOtpEcdsaDerivationIdentity-CupWCKNg.js} +1 -1
- package/dist/esm/sdk/{export-viewer-host-DsRaS0UH.js → export-viewer-host-DsdzagKK.js} +1 -1
- package/dist/{public/sdk/exportKeypairOperation-SJPysnE1.js → esm/sdk/exportKeypairOperation-BwW_E4Lt.js} +1 -1
- package/dist/esm/sdk/{helpers-D3CUEdHI.js → helpers-DS0bksx9.js} +1 -1
- package/dist/esm/sdk/{host-GPb_mSAQ.js → host-DMR4KDy9.js} +1 -1
- package/dist/esm/sdk/{intentDigest-CGLrsMgj.js → intentDigest-Rh5Mg8X7.js} +1 -1
- package/dist/esm/sdk/{lanes-DJKIHJBm.js → lanes-BzU7cv2T.js} +1 -1
- package/dist/esm/sdk/localOnly-DO191vDh.js +1 -0
- package/dist/esm/sdk/mountExportPrivateKeySurface-DQzFzhNu.js +1 -0
- package/dist/esm/sdk/mountRecoveryCodeBackupSurface-B1D0ovqx.js +2 -0
- package/dist/{public/sdk/nearEd25519YaoMaterialActivation-J6EHFScV.js → esm/sdk/nearEd25519YaoMaterialActivation-DgWDGRI_.js} +1 -1
- package/dist/{public/sdk/nearEd25519YaoSigningPreparation-CqBNMG87.js → esm/sdk/nearEd25519YaoSigningPreparation-yKDLQXBS.js} +1 -1
- package/dist/esm/sdk/{nonceLaneKeys-D18nlLjh.js → nonceLaneKeys-BzMBVxMU.js} +1 -1
- package/dist/esm/sdk/{operationFingerprint-Boa9DQ51.js → operationFingerprint-C4VX-0NI.js} +1 -1
- package/dist/{public/sdk/passkey-custody-CBSal3E9.js → esm/sdk/passkey-custody-Ba-NQ_4C.js} +1 -1
- package/dist/esm/sdk/{pendingWalletRecoveryCodeBackup-CvsrXbzn.js → pendingWalletRecoveryCodeBackup-DOeIn_Qj.js} +1 -1
- package/dist/{public/sdk/presignaturePool-CQNt13kE.js → esm/sdk/presignaturePool-BHoxnbOA.js} +1 -1
- package/dist/esm/sdk/{prfCache-DJ93rtDv.js → prfCache-BAFh1skJ.js} +1 -1
- package/dist/esm/sdk/{primitives-cC0a9GRC.js → primitives-CTmDwMNc.js} +1 -1
- package/dist/esm/sdk/{recovery-entrypoint-nj7Zo3CR.js → recovery-entrypoint-DWghFZrZ.js} +1 -1
- package/dist/esm/sdk/{registration-49OGU_GZ.js → registration-DknFwoqn.js} +1 -1
- package/dist/esm/sdk/{registration-C7tywPXF.js → registration-sQndIWRF.js} +1 -1
- package/dist/esm/sdk/{registrationAccounts-9GFI0Ger.js → registrationAccounts-CD1u1ZqZ.js} +1 -1
- package/dist/esm/sdk/{registrationIds-Br-zI4_5.js → registrationIds-B1OpqRAt.js} +1 -1
- package/dist/{public/sdk/registrationIntent-PqmcTEE3.js → esm/sdk/registrationIntent-D4YDjf2U.js} +1 -1
- package/dist/esm/sdk/{requireStepUpAuth-C4PGTly-.js → requireStepUpAuth-CnSCFSOZ.js} +1 -1
- package/dist/{public/sdk/routerAbNormalSigning-xxATTIh5.js → esm/sdk/routerAbNormalSigning-BV1t27aB.js} +1 -1
- package/dist/esm/sdk/router_ab_ed25519_yao_client_bg.wasm +0 -0
- package/dist/esm/sdk/runtime-auth-BxG-J-BB.js +1 -0
- package/dist/esm/sdk/runtime-device-link-Dn_5hPCq.js +1 -0
- package/dist/esm/sdk/runtime-ecdsa-tempo-lTFTb9Rh.js +1 -0
- package/dist/esm/sdk/runtime-email-otp-CPqTCH8Q.js +1 -0
- package/dist/esm/sdk/runtime-export-Brz53_oi.js +1 -0
- package/dist/esm/sdk/runtime-near-Da_xFUXx.js +1 -0
- package/dist/esm/sdk/runtime-preferences-riUZGaTs.js +1 -0
- package/dist/esm/sdk/runtime-recovery-CTj4nDAM.js +1 -0
- package/dist/esm/sdk/{runtime-recovery-codes-LR4mg7-k.js → runtime-recovery-codes-D8T9LQ7-.js} +1 -1
- package/dist/esm/sdk/{secp256k1-BldUPNQI.js → secp256k1-wOOHtPcK.js} +1 -1
- package/dist/esm/sdk/{secureRandomId-LwBFx84B.js → secureRandomId-8LSc91aN.js} +1 -1
- package/dist/esm/sdk/sessionObservationRevision-C7v-wN8_.js +1 -0
- package/dist/esm/sdk/shared-hx7KVyeq.js +6 -0
- package/dist/esm/sdk/{signEvmFamily-C_RvEnDB.js → signEvmFamily-DT34Vtpa.js} +1 -1
- package/dist/esm/sdk/{signEvmFamilyWithUiConfirmForTempo-CUKdq5dE.js → signEvmFamilyWithUiConfirmForTempo-NYCFU6Li.js} +1 -1
- package/dist/esm/sdk/{signEvmWithUiConfirm-CxXzcvj2.js → signEvmWithUiConfirm-D6nmJr_L.js} +1 -1
- package/dist/{public/sdk/signNear-Dno7NsP_.js → esm/sdk/signNear-B000QxBd.js} +1 -1
- package/dist/{public/sdk/signingFlow-DtugI_2z.js → esm/sdk/signingFlow-gl85GOW4.js} +1 -1
- package/dist/esm/sdk/{signingQueue-C1Pb07gm.js → signingQueue-gW7wmOuL.js} +1 -1
- package/dist/esm/sdk/{singletons-DxIyVhNb.js → singletons-CAsc9LvA.js} +1 -1
- package/dist/{public/sdk/thresholdEcdsa-murTq-xz.js → esm/sdk/thresholdEcdsa-Ci7yz395.js} +1 -1
- package/dist/{public/sdk/transactionState-XbZm9Zon.js → esm/sdk/transactionState-lB2qpkOm.js} +1 -1
- package/dist/esm/sdk/tx-confirm-ui.js +1799 -432
- package/dist/esm/sdk/wallet-iframe-host-ecdsa.js +1 -1
- package/dist/esm/sdk/wallet-iframe-host-full.js +1 -1
- package/dist/esm/sdk/wallet-iframe-host-near.js +1 -1
- package/dist/esm/sdk/wallet-iframe-host-runtime.js +1 -1
- package/dist/esm/sdk/{wallet-recovery-CVUalZ3p.js → wallet-recovery-DFaS3geI.js} +1 -1
- package/dist/esm/sdk/wallet-ui.css +1 -1
- package/dist/{public/sdk/walletAuthMethodRecord-Bv68Vq-g.js → esm/sdk/walletAuthMethodRecord-CWdqdY_s.js} +1 -1
- package/dist/{public/sdk/walletAuthority-v5wvv3IB.js → esm/sdk/walletAuthority-BY3kyKQ-.js} +1 -1
- package/dist/{public/sdk/walletCustodyEcdsaContinuity-rRHExT_R.js → esm/sdk/walletCustodyEcdsaContinuity-mGh1Ysko.js} +1 -1
- package/dist/esm/sdk/{walletDbName-DRzPv5Ir.js → walletDbName-BxWApBQF.js} +1 -1
- package/dist/{public/sdk/walletOwnershipGeneration-pMmmJ6XA.js → esm/sdk/walletOwnershipGeneration-DSGfjuV2.js} +1 -1
- package/dist/esm/sdk/{walletRecoveryCommit-DvC6WlGz.js → walletRecoveryCommit-DQA_wveK.js} +1 -1
- package/dist/esm/sdk/{walletRecoveryRotate-Dd3prJpr.js → walletRecoveryRotate-zvQThn37.js} +1 -1
- package/dist/esm/sdk/walletRegistrationSetupPrewarm-DdVpKccU.js +1 -0
- package/dist/{public/sdk/walletSessionAuthorizationStatus-DVV3xkAx.js → esm/sdk/walletSessionAuthorizationStatus-ONPRiEbK.js} +1 -1
- package/dist/{public/sdk/walletSessionAuthorizationStore-D-MhJ0PC.js → esm/sdk/walletSessionAuthorizationStore-DnUMtkev.js} +1 -1
- package/dist/esm/sdk/warmSessionHydration-D8Vdro9n.js +1 -0
- package/dist/{public/sdk/webauthnP256-XgYu-Y6E.js → esm/sdk/webauthnP256-_ajaNl90.js} +1 -1
- package/dist/esm/sdk/{webauthnPromptCoordinator-D5sP8Q7e.js → webauthnPromptCoordinator-9bVeHcTZ.js} +1 -1
- package/dist/esm/wasm/router_ab_ed25519_yao_client/pkg/router_ab_ed25519_yao_client_bg.wasm +0 -0
- package/dist/public/headers.manifest.json +1 -1
- package/dist/public/sdk/ConfirmationDrawer-DCw0m-Iv.js +1 -0
- package/dist/{esm/sdk/NonceCoordinator-DuDKN-B8.js → public/sdk/NonceCoordinator-Dq-FZpBz.js} +1 -1
- package/dist/{esm/sdk/accountLifecycle-D61FIpFS.js → public/sdk/accountLifecycle-fLNUdjct.js} +1 -1
- package/dist/{esm/sdk/activeWalletSession-Ba6X4CUN.js → public/sdk/activeWalletSession-BpbnpU9s.js} +1 -1
- package/dist/public/sdk/adapters-BNmcyf9K.js +2 -0
- package/dist/public/sdk/appearance-token-vars-DxBm_cKA.js +2 -0
- package/dist/public/sdk/{canonicalPrimitives-BOzRXzfv.js → canonicalPrimitives-BMP5yILS.js} +1 -1
- package/dist/public/sdk/{challengeDelivery-FD9GHK1T.js → challengeDelivery-CG2J5Qxs.js} +1 -1
- package/dist/{esm/sdk/clientSessionPersistenceState-BHRUSWMt.js → public/sdk/clientSessionPersistenceState-BgO4P6CZ.js} +1 -1
- package/dist/public/sdk/{commitQueue-DOIaR0Hr.js → commitQueue-BW7BpYyA.js} +1 -1
- package/dist/public/sdk/configBuilder-BMNShuOu.js +1 -0
- package/dist/public/sdk/{configHelpers-BXdl5Mxs.js → configHelpers-D50F_Txb.js} +1 -1
- package/dist/public/sdk/{digestEncoding-CbEFYvlJ.js → digestEncoding-aC4dSf_x.js} +1 -1
- package/dist/public/sdk/{display-CY_aJEn6.js → display-WtILOPQR.js} +1 -1
- package/dist/{esm/sdk/ecdsaCapabilityManifest-DzA996y9.js → public/sdk/ecdsaCapabilityManifest-DRc423SV.js} +1 -1
- package/dist/{esm/sdk/ecdsaDerivationClientWasm-DQlajPpE.js → public/sdk/ecdsaDerivationClientWasm-DmwKWUEb.js} +1 -1
- package/dist/{esm/sdk/ecdsaDerivationExport-DyugdheE.js → public/sdk/ecdsaDerivationExport-DX89rq_u.js} +1 -1
- package/dist/public/sdk/{ecdsaWalletRecords-C_v74n5X.js → ecdsaWalletRecords-CxxUt3fS.js} +1 -1
- package/dist/{esm/sdk/emailOtpEcdsaDerivationIdentity-BDVjvnmO.js → public/sdk/emailOtpEcdsaDerivationIdentity-CupWCKNg.js} +1 -1
- package/dist/public/sdk/{export-viewer-host-DsRaS0UH.js → export-viewer-host-DsdzagKK.js} +1 -1
- package/dist/{esm/sdk/exportKeypairOperation-SJPysnE1.js → public/sdk/exportKeypairOperation-BwW_E4Lt.js} +1 -1
- package/dist/public/sdk/{helpers-D3CUEdHI.js → helpers-DS0bksx9.js} +1 -1
- package/dist/public/sdk/{host-GPb_mSAQ.js → host-DMR4KDy9.js} +1 -1
- package/dist/public/sdk/{intentDigest-CGLrsMgj.js → intentDigest-Rh5Mg8X7.js} +1 -1
- package/dist/public/sdk/{lanes-DJKIHJBm.js → lanes-BzU7cv2T.js} +1 -1
- package/dist/public/sdk/localOnly-DO191vDh.js +1 -0
- package/dist/public/sdk/mountExportPrivateKeySurface-DQzFzhNu.js +1 -0
- package/dist/public/sdk/mountRecoveryCodeBackupSurface-B1D0ovqx.js +2 -0
- package/dist/{esm/sdk/nearEd25519YaoMaterialActivation-J6EHFScV.js → public/sdk/nearEd25519YaoMaterialActivation-DgWDGRI_.js} +1 -1
- package/dist/{esm/sdk/nearEd25519YaoSigningPreparation-CqBNMG87.js → public/sdk/nearEd25519YaoSigningPreparation-yKDLQXBS.js} +1 -1
- package/dist/public/sdk/{nonceLaneKeys-D18nlLjh.js → nonceLaneKeys-BzMBVxMU.js} +1 -1
- package/dist/public/sdk/{operationFingerprint-Boa9DQ51.js → operationFingerprint-C4VX-0NI.js} +1 -1
- package/dist/{esm/sdk/passkey-custody-CBSal3E9.js → public/sdk/passkey-custody-Ba-NQ_4C.js} +1 -1
- package/dist/public/sdk/{pendingWalletRecoveryCodeBackup-CvsrXbzn.js → pendingWalletRecoveryCodeBackup-DOeIn_Qj.js} +1 -1
- package/dist/{esm/sdk/presignaturePool-CQNt13kE.js → public/sdk/presignaturePool-BHoxnbOA.js} +1 -1
- package/dist/public/sdk/{prfCache-DJ93rtDv.js → prfCache-BAFh1skJ.js} +1 -1
- package/dist/public/sdk/{primitives-cC0a9GRC.js → primitives-CTmDwMNc.js} +1 -1
- package/dist/public/sdk/{recovery-entrypoint-nj7Zo3CR.js → recovery-entrypoint-DWghFZrZ.js} +1 -1
- package/dist/public/sdk/{registration-49OGU_GZ.js → registration-DknFwoqn.js} +1 -1
- package/dist/public/sdk/{registration-C7tywPXF.js → registration-sQndIWRF.js} +1 -1
- package/dist/public/sdk/{registrationAccounts-9GFI0Ger.js → registrationAccounts-CD1u1ZqZ.js} +1 -1
- package/dist/public/sdk/{registrationIds-Br-zI4_5.js → registrationIds-B1OpqRAt.js} +1 -1
- package/dist/{esm/sdk/registrationIntent-PqmcTEE3.js → public/sdk/registrationIntent-D4YDjf2U.js} +1 -1
- package/dist/public/sdk/{requireStepUpAuth-C4PGTly-.js → requireStepUpAuth-CnSCFSOZ.js} +1 -1
- package/dist/{esm/sdk/routerAbNormalSigning-xxATTIh5.js → public/sdk/routerAbNormalSigning-BV1t27aB.js} +1 -1
- package/dist/public/sdk/router_ab_ed25519_yao_client_bg.wasm +0 -0
- package/dist/public/sdk/runtime-auth-BxG-J-BB.js +1 -0
- package/dist/public/sdk/runtime-device-link-Dn_5hPCq.js +1 -0
- package/dist/public/sdk/runtime-ecdsa-tempo-lTFTb9Rh.js +1 -0
- package/dist/public/sdk/runtime-email-otp-CPqTCH8Q.js +1 -0
- package/dist/public/sdk/runtime-export-Brz53_oi.js +1 -0
- package/dist/public/sdk/runtime-near-Da_xFUXx.js +1 -0
- package/dist/public/sdk/runtime-preferences-riUZGaTs.js +1 -0
- package/dist/public/sdk/runtime-recovery-CTj4nDAM.js +1 -0
- package/dist/public/sdk/{runtime-recovery-codes-LR4mg7-k.js → runtime-recovery-codes-D8T9LQ7-.js} +1 -1
- package/dist/public/sdk/{secp256k1-BldUPNQI.js → secp256k1-wOOHtPcK.js} +1 -1
- package/dist/public/sdk/{secureRandomId-LwBFx84B.js → secureRandomId-8LSc91aN.js} +1 -1
- package/dist/public/sdk/sessionObservationRevision-C7v-wN8_.js +1 -0
- package/dist/public/sdk/shared-hx7KVyeq.js +6 -0
- package/dist/public/sdk/{signEvmFamily-C_RvEnDB.js → signEvmFamily-DT34Vtpa.js} +1 -1
- package/dist/public/sdk/{signEvmFamilyWithUiConfirmForTempo-CUKdq5dE.js → signEvmFamilyWithUiConfirmForTempo-NYCFU6Li.js} +1 -1
- package/dist/public/sdk/{signEvmWithUiConfirm-CxXzcvj2.js → signEvmWithUiConfirm-D6nmJr_L.js} +1 -1
- package/dist/{esm/sdk/signNear-Dno7NsP_.js → public/sdk/signNear-B000QxBd.js} +1 -1
- package/dist/{esm/sdk/signingFlow-DtugI_2z.js → public/sdk/signingFlow-gl85GOW4.js} +1 -1
- package/dist/public/sdk/{signingQueue-C1Pb07gm.js → signingQueue-gW7wmOuL.js} +1 -1
- package/dist/public/sdk/{singletons-DxIyVhNb.js → singletons-CAsc9LvA.js} +1 -1
- package/dist/{esm/sdk/thresholdEcdsa-murTq-xz.js → public/sdk/thresholdEcdsa-Ci7yz395.js} +1 -1
- package/dist/{esm/sdk/transactionState-XbZm9Zon.js → public/sdk/transactionState-lB2qpkOm.js} +1 -1
- package/dist/public/sdk/tx-confirm-ui.js +1799 -432
- package/dist/public/sdk/wallet-iframe-host-ecdsa.js +1 -1
- package/dist/public/sdk/wallet-iframe-host-full.js +1 -1
- package/dist/public/sdk/wallet-iframe-host-near.js +1 -1
- package/dist/public/sdk/wallet-iframe-host-runtime.js +1 -1
- package/dist/public/sdk/{wallet-recovery-CVUalZ3p.js → wallet-recovery-DFaS3geI.js} +1 -1
- package/dist/public/sdk/wallet-ui.css +1 -1
- package/dist/{esm/sdk/walletAuthMethodRecord-Bv68Vq-g.js → public/sdk/walletAuthMethodRecord-CWdqdY_s.js} +1 -1
- package/dist/{esm/sdk/walletAuthority-v5wvv3IB.js → public/sdk/walletAuthority-BY3kyKQ-.js} +1 -1
- package/dist/{esm/sdk/walletCustodyEcdsaContinuity-rRHExT_R.js → public/sdk/walletCustodyEcdsaContinuity-mGh1Ysko.js} +1 -1
- package/dist/public/sdk/{walletDbName-DRzPv5Ir.js → walletDbName-BxWApBQF.js} +1 -1
- package/dist/{esm/sdk/walletOwnershipGeneration-pMmmJ6XA.js → public/sdk/walletOwnershipGeneration-DSGfjuV2.js} +1 -1
- package/dist/public/sdk/{walletRecoveryCommit-DvC6WlGz.js → walletRecoveryCommit-DQA_wveK.js} +1 -1
- package/dist/public/sdk/{walletRecoveryRotate-Dd3prJpr.js → walletRecoveryRotate-zvQThn37.js} +1 -1
- package/dist/public/sdk/walletRegistrationSetupPrewarm-DdVpKccU.js +1 -0
- package/dist/{esm/sdk/walletSessionAuthorizationStatus-DVV3xkAx.js → public/sdk/walletSessionAuthorizationStatus-ONPRiEbK.js} +1 -1
- package/dist/{esm/sdk/walletSessionAuthorizationStore-D-MhJ0PC.js → public/sdk/walletSessionAuthorizationStore-DnUMtkev.js} +1 -1
- package/dist/public/sdk/warmSessionHydration-D8Vdro9n.js +1 -0
- package/dist/{esm/sdk/webauthnP256-XgYu-Y6E.js → public/sdk/webauthnP256-_ajaNl90.js} +1 -1
- package/dist/public/sdk/{webauthnPromptCoordinator-D5sP8Q7e.js → webauthnPromptCoordinator-9bVeHcTZ.js} +1 -1
- package/dist/public/sdk/workers/router_ab_ed25519_yao_client_bg.wasm +0 -0
- package/dist/public/sdk/workers/wallet_custody_ceremony_bg.wasm +0 -0
- package/dist/public/wallet-assets.manifest.json +192 -192
- package/dist/public/wallet-service/index.html +4 -4
- package/dist/types/wallet/src/SeamsWeb/walletIframe/coordinator.d.ts +2 -1
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/auth-menu/domain.d.ts +20 -3
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/auth-menu/session.d.ts +3 -0
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/ui/auth-menu/AuthMenuFooter.d.ts +0 -1
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/ui/auth-menu/AuthMenuSurface.d.ts +5 -6
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/ui/auth-menu/icons.d.ts +2 -0
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/ui/auth-menu/presentation.d.ts +35 -0
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/ui/auth-menu/recovery-code-input.d.ts +17 -0
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/ConfirmContent.d.ts +3 -1
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/ConfirmHeader.d.ts +0 -1
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/ConfirmationBody.d.ts +3 -1
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/ConfirmationContent.d.ts +3 -1
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/ConfirmationDrawer.d.ts +0 -1
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/ConfirmationModal.d.ts +0 -1
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/EmailOtpInput.d.ts +0 -1
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/ExportPrivateKeySurface.d.ts +1 -1
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/PasskeyRegistrationContent.d.ts +3 -1
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/PasskeyRegistrationDetails.d.ts +0 -1
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/RecoveryCodeBackupSurface.d.ts +3 -1
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/ReviewDisclosure.d.ts +0 -1
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/TransactionLabel.d.ts +0 -1
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/TransactionReceipt.d.ts +3 -1
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/TransactionReview.d.ts +3 -1
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/TransactionTree.d.ts +0 -1
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/WalletLocale.d.ts +18 -0
- package/dist/types/wallet/src/core/types/seams.d.ts +3 -0
- package/dist/types/wallet/src/core/ui/locale.d.ts +5 -0
- package/dist/types/wallet/src/core/ui/messages.d.ts +8 -0
- package/dist/types/wallet/src/index.d.ts +3 -1
- package/dist/types/wallet/src/react/components/AccountMenuButton/AccountMenuButtonMock.d.ts +1 -0
- package/dist/types/wallet/src/react/components/AccountMenuButton/WalletRegionSection.d.ts +3 -0
- package/dist/types/wallet/src/react/components/AccountMenuButton/WalletSettingsLayout.d.ts +4 -1
- package/dist/types/wallet/src/react/components/HostedSeamsAuthMenu/SeamsAuthMenuMock.d.ts +2 -1
- package/dist/types/wallet/src/react/context/WalletLocale.d.ts +16 -0
- package/dist/workers/router_ab_ed25519_yao_client_bg.wasm +0 -0
- package/dist/workers/wallet_custody_ceremony_bg.wasm +0 -0
- package/package.json +1 -1
- package/dist/esm/sdk/ConfirmationDrawer-CXVNmfTy.js +0 -1
- package/dist/esm/sdk/adapters-CTlDBRJy.js +0 -2
- package/dist/esm/sdk/configBuilder-BMawmNpz.js +0 -1
- package/dist/esm/sdk/jsxRuntime.module-DKsgiFjd.js +0 -2
- package/dist/esm/sdk/localOnly-CPmpw381.js +0 -1
- package/dist/esm/sdk/mountExportPrivateKeySurface-C8_tpDHF.js +0 -1
- package/dist/esm/sdk/mountRecoveryCodeBackupSurface-BtNFtmSj.js +0 -2
- package/dist/esm/sdk/runtime-auth-CpjGW90U.js +0 -1
- package/dist/esm/sdk/runtime-device-link-CKgfGi7D.js +0 -1
- package/dist/esm/sdk/runtime-ecdsa-tempo-5VV9xSEh.js +0 -1
- package/dist/esm/sdk/runtime-email-otp-D1hYZNn6.js +0 -1
- package/dist/esm/sdk/runtime-export-B92wQD25.js +0 -1
- package/dist/esm/sdk/runtime-near-CUuKg38M.js +0 -1
- package/dist/esm/sdk/runtime-preferences-EdL3G_MO.js +0 -1
- package/dist/esm/sdk/runtime-recovery-uyw8sywI.js +0 -1
- package/dist/esm/sdk/sessionObservationRevision-DmmNV25w.js +0 -1
- package/dist/esm/sdk/shared-ha31XIdc.js +0 -6
- package/dist/esm/sdk/walletRegistrationSetupPrewarm-DcbhVNMQ.js +0 -1
- package/dist/esm/sdk/warmSessionHydration-CsQpQVuy.js +0 -1
- package/dist/public/sdk/ConfirmationDrawer-CXVNmfTy.js +0 -1
- package/dist/public/sdk/adapters-CTlDBRJy.js +0 -2
- package/dist/public/sdk/configBuilder-BMawmNpz.js +0 -1
- package/dist/public/sdk/jsxRuntime.module-DKsgiFjd.js +0 -2
- package/dist/public/sdk/localOnly-CPmpw381.js +0 -1
- package/dist/public/sdk/mountExportPrivateKeySurface-C8_tpDHF.js +0 -1
- package/dist/public/sdk/mountRecoveryCodeBackupSurface-BtNFtmSj.js +0 -2
- package/dist/public/sdk/runtime-auth-CpjGW90U.js +0 -1
- package/dist/public/sdk/runtime-device-link-CKgfGi7D.js +0 -1
- package/dist/public/sdk/runtime-ecdsa-tempo-5VV9xSEh.js +0 -1
- package/dist/public/sdk/runtime-email-otp-D1hYZNn6.js +0 -1
- package/dist/public/sdk/runtime-export-B92wQD25.js +0 -1
- package/dist/public/sdk/runtime-near-CUuKg38M.js +0 -1
- package/dist/public/sdk/runtime-preferences-EdL3G_MO.js +0 -1
- package/dist/public/sdk/runtime-recovery-uyw8sywI.js +0 -1
- package/dist/public/sdk/sessionObservationRevision-DmmNV25w.js +0 -1
- package/dist/public/sdk/shared-ha31XIdc.js +0 -6
- package/dist/public/sdk/walletRegistrationSetupPrewarm-DcbhVNMQ.js +0 -1
- package/dist/public/sdk/warmSessionHydration-CsQpQVuy.js +0 -1
- /package/dist/esm/sdk/{base64-DW79QA0h.js → base64-BmKR3UqU.js} +0 -0
- /package/dist/esm/sdk/{signingSessionSeal-DX41aXUL.js → signingSessionSeal-DqbjG8c8.js} +0 -0
- /package/dist/esm/sdk/{theme-BKaFqCAj.js → theme-os0Salmo.js} +0 -0
- /package/dist/public/sdk/{base64-DW79QA0h.js → base64-BmKR3UqU.js} +0 -0
- /package/dist/public/sdk/{signingSessionSeal-DX41aXUL.js → signingSessionSeal-DqbjG8c8.js} +0 -0
- /package/dist/public/sdk/{theme-BKaFqCAj.js → theme-os0Salmo.js} +0 -0
|
@@ -39,6 +39,42 @@ function passkeyRingIcon() {
|
|
|
39
39
|
})]
|
|
40
40
|
});
|
|
41
41
|
}
|
|
42
|
+
/** The passkey ring as it closes and fills behind a check. */
|
|
43
|
+
function passkeySuccessIcon() {
|
|
44
|
+
return /* @__PURE__ */ jsxs("svg", {
|
|
45
|
+
class: "seams-success-ring",
|
|
46
|
+
viewBox: "0 0 56 56",
|
|
47
|
+
fill: "none",
|
|
48
|
+
"aria-hidden": "true",
|
|
49
|
+
focusable: "false",
|
|
50
|
+
children: [
|
|
51
|
+
/* @__PURE__ */ jsx("circle", {
|
|
52
|
+
class: "seams-passkey-ring-track",
|
|
53
|
+
cx: "28",
|
|
54
|
+
cy: "28",
|
|
55
|
+
r: "26.75"
|
|
56
|
+
}),
|
|
57
|
+
/* @__PURE__ */ jsx("circle", {
|
|
58
|
+
class: "seams-success-ring-arc",
|
|
59
|
+
cx: "28",
|
|
60
|
+
cy: "28",
|
|
61
|
+
r: "26.75",
|
|
62
|
+
pathLength: "100"
|
|
63
|
+
}),
|
|
64
|
+
/* @__PURE__ */ jsx("circle", {
|
|
65
|
+
class: "seams-success-ring-seal",
|
|
66
|
+
cx: "28",
|
|
67
|
+
cy: "28",
|
|
68
|
+
r: "28"
|
|
69
|
+
}),
|
|
70
|
+
/* @__PURE__ */ jsx("path", {
|
|
71
|
+
class: "seams-success-ring-check",
|
|
72
|
+
d: "M36.7 21.5 24.75 33.4l-5.4-5.4",
|
|
73
|
+
pathLength: "1"
|
|
74
|
+
})
|
|
75
|
+
]
|
|
76
|
+
});
|
|
77
|
+
}
|
|
42
78
|
function accountDropdownIcon() {
|
|
43
79
|
return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("svg", {
|
|
44
80
|
class: "seams-account-dropdown-arrow",
|
|
@@ -153,6 +189,6 @@ function alertIcon() {
|
|
|
153
189
|
}));
|
|
154
190
|
}
|
|
155
191
|
//#endregion
|
|
156
|
-
export { accountDropdownIcon, alertIcon, backIcon, chevronIcon, fingerprintIcon, googleIcon, linkDeviceIcon, linkFailedIcon, mailIcon, passkeyRingIcon, recoveryIcon, rerollIcon, shieldIcon };
|
|
192
|
+
export { accountDropdownIcon, alertIcon, backIcon, chevronIcon, fingerprintIcon, googleIcon, linkDeviceIcon, linkFailedIcon, mailIcon, passkeyRingIcon, passkeySuccessIcon, recoveryIcon, rerollIcon, shieldIcon };
|
|
157
193
|
|
|
158
194
|
//# sourceMappingURL=icons.js.map
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { appearanceTokenCssRule } from "../../../../../core/signingEngine/uiConfirm/ui/appearance-token-vars.js";
|
|
2
2
|
import { createCspStylesheetManager, getDefaultCspNonce } from "../../../../../core/browser/walletIframe/csp-stylesheet.js";
|
|
3
|
+
import { withWalletLocale } from "../../../../../core/signingEngine/uiConfirm/ui/preact/WalletLocale.js";
|
|
3
4
|
import { AuthMenuSurface } from "./AuthMenuSurface.js";
|
|
4
5
|
import { render } from "preact";
|
|
5
6
|
import { jsx } from "preact/jsx-runtime";
|
|
@@ -45,14 +46,15 @@ var MountedAuthMenuSurface = class {
|
|
|
45
46
|
}
|
|
46
47
|
update(viewModel) {
|
|
47
48
|
if (this.state.kind === "disposed") return;
|
|
49
|
+
this.element.lang = viewModel.appearance.locale ?? "en";
|
|
48
50
|
this.element.dataset.theme = viewModel.appearance.theme.mode;
|
|
49
51
|
this.styles.setDynamicRule(this.element.id + "-appearance", appearanceTokenCssRule(this.element.id, viewModel.appearance));
|
|
50
|
-
render(/* @__PURE__ */ jsx(AuthMenuSurface, {
|
|
52
|
+
render(withWalletLocale(viewModel.appearance.locale ?? "en", /* @__PURE__ */ jsx(AuthMenuSurface, {
|
|
51
53
|
element: this.element,
|
|
52
54
|
viewModel,
|
|
53
55
|
onIntent: this.state.onIntent,
|
|
54
56
|
styles: this.styles
|
|
55
|
-
}), this.element);
|
|
57
|
+
})), this.element);
|
|
56
58
|
}
|
|
57
59
|
dispose() {
|
|
58
60
|
if (this.state.kind === "disposed") return;
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { demoEmailOtpCodeFromDelivery } from "../../../../../core/signingEngine/session/emailOtp/challengeDelivery.js";
|
|
2
|
+
import { WalletText } from "../../../../../core/signingEngine/uiConfirm/ui/preact/WalletLocale.js";
|
|
3
|
+
import { resolveAuthMenuLoginAccount } from "../../auth-menu/domain.js";
|
|
4
|
+
import { Fragment, jsx, jsxs } from "preact/jsx-runtime";
|
|
5
|
+
//#region src/SeamsWeb/walletIframe/host/ui/auth-menu/presentation.tsx
|
|
6
|
+
function renderDemoEmailCode(delivery) {
|
|
7
|
+
const code = demoEmailOtpCodeFromDelivery(delivery);
|
|
8
|
+
if (code === null) return null;
|
|
9
|
+
return /* @__PURE__ */ jsxs("p", {
|
|
10
|
+
class: "seams-otp-description",
|
|
11
|
+
children: [
|
|
12
|
+
/* @__PURE__ */ jsx(WalletText, { message: "Demo email code:" }),
|
|
13
|
+
" ",
|
|
14
|
+
/* @__PURE__ */ jsx("code", { children: code })
|
|
15
|
+
]
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
const AUTH_MENU_TITLE_ID = "seams-auth-menu-title";
|
|
19
|
+
const AUTH_MENU_ACCOUNT_LIST_ID = "seams-auth-menu-account-list";
|
|
20
|
+
function otpCodeDigits(code, length = 6) {
|
|
21
|
+
return code.padEnd(length, " ").slice(0, length).split("");
|
|
22
|
+
}
|
|
23
|
+
function recoveryCaretAtPoint(root, clientX, clientY, codeLength) {
|
|
24
|
+
let nearest = null;
|
|
25
|
+
for (const slot of root.querySelectorAll("[data-recovery-slot]")) {
|
|
26
|
+
const index = Number(slot.dataset.recoverySlot);
|
|
27
|
+
const box = slot.getBoundingClientRect();
|
|
28
|
+
const dx = clientX < box.left ? box.left - clientX : Math.max(0, clientX - box.right);
|
|
29
|
+
const dy = clientY < box.top ? box.top - clientY : Math.max(0, clientY - box.bottom);
|
|
30
|
+
const distance = dx * dx + dy * dy;
|
|
31
|
+
if (nearest === null || distance < nearest.distance) nearest = {
|
|
32
|
+
index,
|
|
33
|
+
distance,
|
|
34
|
+
after: clientX > box.left + box.width / 2
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
if (nearest === null) return null;
|
|
38
|
+
return Math.min(nearest.after ? nearest.index + 1 : nearest.index, codeLength);
|
|
39
|
+
}
|
|
40
|
+
function renderOtpCodeDigit(digit) {
|
|
41
|
+
return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("span", {
|
|
42
|
+
class: `seams-otp-slot ${digit.trim() ? "is-filled" : ""}`,
|
|
43
|
+
children: digit
|
|
44
|
+
}) });
|
|
45
|
+
}
|
|
46
|
+
function authViewKey(viewModel) {
|
|
47
|
+
const stage = viewModel.kind === "recovery" ? `:${viewModel.stage}` : "";
|
|
48
|
+
return `${viewModel.kind}:${viewModel.mode}:${viewModel.status.kind}${stage}`;
|
|
49
|
+
}
|
|
50
|
+
function recoveryAnnouncement(viewModel) {
|
|
51
|
+
if (viewModel.status.kind === "succeeded") return "";
|
|
52
|
+
if (viewModel.status.kind === "busy") return viewModel.status.headline;
|
|
53
|
+
if (viewModel.status.kind === "recoverable") return viewModel.status.message;
|
|
54
|
+
if (viewModel.stage === "passkey_ready") return "Recovery code accepted.";
|
|
55
|
+
if (viewModel.stage === "sign_in_ready") return "Wallet recovered. Unlock it to continue.";
|
|
56
|
+
return "";
|
|
57
|
+
}
|
|
58
|
+
function recoveryBackLabel(viewModel) {
|
|
59
|
+
if (viewModel.kind !== "recovery") return "Back";
|
|
60
|
+
return viewModel.stage === "choose_method" ? "Back to recovery code" : "Back to unlock wallet";
|
|
61
|
+
}
|
|
62
|
+
function recoveryNavigationLocked(viewModel) {
|
|
63
|
+
return viewModel.kind === "recovery" && viewModel.stage === "finalizing";
|
|
64
|
+
}
|
|
65
|
+
function modeSwitchCopy(mode) {
|
|
66
|
+
return mode === "register" ? {
|
|
67
|
+
prompt: "Already have a wallet?",
|
|
68
|
+
action: "Unlock wallet",
|
|
69
|
+
nextMode: "login"
|
|
70
|
+
} : {
|
|
71
|
+
prompt: "Don't have a wallet?",
|
|
72
|
+
action: "Create a wallet",
|
|
73
|
+
nextMode: "register"
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function modeLabel(mode) {
|
|
77
|
+
return mode === "register" ? "Create a wallet" : "Unlock wallet";
|
|
78
|
+
}
|
|
79
|
+
function passkeyButtonLabel(mode) {
|
|
80
|
+
return mode === "register" ? "Create wallet with passkey" : "Unlock with passkey";
|
|
81
|
+
}
|
|
82
|
+
/** The failure the footer strip reports. Only the menu itself reports there. */
|
|
83
|
+
function menuNotice(viewModel) {
|
|
84
|
+
if (viewModel.kind === "google_otp_login" || viewModel.kind === "google_registration") return viewModel.error || null;
|
|
85
|
+
return viewModel.kind === "passkey" && viewModel.status.kind === "recoverable" && viewModel.status.reason === "error" ? viewModel.status.message : null;
|
|
86
|
+
}
|
|
87
|
+
function selectedLoginAccount(viewModel) {
|
|
88
|
+
return resolveAuthMenuLoginAccount(viewModel.accountOptions, viewModel.selectedAccount).selectedAccount;
|
|
89
|
+
}
|
|
90
|
+
function selectedAccountPrimaryText(account) {
|
|
91
|
+
return account.walletId;
|
|
92
|
+
}
|
|
93
|
+
function accountSecondaryText(account) {
|
|
94
|
+
return account.authMethod === "email_otp" ? account.emailAddress : null;
|
|
95
|
+
}
|
|
96
|
+
function savedAccountsTriggerLabel(account) {
|
|
97
|
+
if (!account) return "Saved wallets";
|
|
98
|
+
const emailAddress = accountSecondaryText(account);
|
|
99
|
+
return emailAddress ? `Saved wallets. Selected wallet ID ${account.walletId}, email ${emailAddress}` : `Saved wallets. Selected ${account.walletId}`;
|
|
100
|
+
}
|
|
101
|
+
function accountGroups(options) {
|
|
102
|
+
const passkeyAccounts = options.filter((option) => option.authMethod === "passkey");
|
|
103
|
+
const emailOtpAccounts = options.filter((option) => option.authMethod === "email_otp");
|
|
104
|
+
return [{
|
|
105
|
+
authMethod: "passkey",
|
|
106
|
+
label: "Passkey",
|
|
107
|
+
accounts: passkeyAccounts
|
|
108
|
+
}, {
|
|
109
|
+
authMethod: "email_otp",
|
|
110
|
+
label: "Email OTP",
|
|
111
|
+
accounts: emailOtpAccounts
|
|
112
|
+
}].filter((group) => group.accounts.length > 0);
|
|
113
|
+
}
|
|
114
|
+
//#endregion
|
|
115
|
+
export { AUTH_MENU_ACCOUNT_LIST_ID, AUTH_MENU_TITLE_ID, accountGroups, accountSecondaryText, authViewKey, menuNotice, modeLabel, modeSwitchCopy, otpCodeDigits, passkeyButtonLabel, recoveryAnnouncement, recoveryBackLabel, recoveryCaretAtPoint, recoveryNavigationLocked, renderDemoEmailCode, renderOtpCodeDigit, savedAccountsTriggerLabel, selectedAccountPrimaryText, selectedLoginAccount };
|
|
116
|
+
|
|
117
|
+
//# sourceMappingURL=presentation.js.map
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { EMAIL_OTP_RECOVERY_KEY_ALPHABET } from "../../../../../shared-ts/src/utils/emailOtpRecoveryKey.js";
|
|
2
|
+
import "../../../../../shared-ts/src/wallet-recovery/recoveryCodes.js";
|
|
3
|
+
import { jsx } from "preact/jsx-runtime";
|
|
4
|
+
//#region src/SeamsWeb/walletIframe/host/ui/auth-menu/recovery-code-input.tsx
|
|
5
|
+
const RECOVERY_CODE_CHARACTERS = new Set(EMAIL_OTP_RECOVERY_KEY_ALPHABET);
|
|
6
|
+
function recoveryInputCharacters(code) {
|
|
7
|
+
let characters = "";
|
|
8
|
+
for (const character of code.toUpperCase()) {
|
|
9
|
+
const read = character === "O" ? "0" : character === "I" || character === "L" ? "1" : character;
|
|
10
|
+
if (RECOVERY_CODE_CHARACTERS.has(read)) characters += read;
|
|
11
|
+
}
|
|
12
|
+
return characters;
|
|
13
|
+
}
|
|
14
|
+
const RECOVERY_CODE_SEPARATOR = /[\s\-\u2010-\u2015\u2212]/;
|
|
15
|
+
/** Characters the input dropped because no recovery code contains them, such as U. */
|
|
16
|
+
function rejectedRecoveryCharacters(input) {
|
|
17
|
+
const rejected = /* @__PURE__ */ new Set();
|
|
18
|
+
for (const character of input.toUpperCase()) {
|
|
19
|
+
if (RECOVERY_CODE_SEPARATOR.test(character)) continue;
|
|
20
|
+
if (recoveryInputCharacters(character)) continue;
|
|
21
|
+
rejected.add(character);
|
|
22
|
+
}
|
|
23
|
+
return Array.from(rejected).slice(0, 3);
|
|
24
|
+
}
|
|
25
|
+
function renderRecoveryCodeGroups(code, selection, arrival) {
|
|
26
|
+
const caret = selection && selection.start === selection.end ? selection.start : null;
|
|
27
|
+
const lastIndex = 31;
|
|
28
|
+
const focusIndex = selection === null ? null : Math.min(selection.start, lastIndex);
|
|
29
|
+
const groups = [];
|
|
30
|
+
for (let start = 0; start < 32; start += 4) {
|
|
31
|
+
const end = start + 4;
|
|
32
|
+
const slots = [];
|
|
33
|
+
for (let index = start; index < end; index += 1) {
|
|
34
|
+
const character = code[index] ?? "";
|
|
35
|
+
const classes = ["seams-otp-slot"];
|
|
36
|
+
if (character) classes.push("is-filled");
|
|
37
|
+
if (index === caret) classes.push("is-caret");
|
|
38
|
+
if (caret === 32 && index === lastIndex) classes.push("is-caret-after");
|
|
39
|
+
if (selection && index >= selection.start && index < selection.end) classes.push("is-selected");
|
|
40
|
+
if (arrival && index >= arrival.start && index < arrival.end) classes.push("is-new");
|
|
41
|
+
slots.push(/* @__PURE__ */ jsx("span", {
|
|
42
|
+
class: classes.join(" "),
|
|
43
|
+
"data-recovery-slot": index,
|
|
44
|
+
children: character
|
|
45
|
+
}, index));
|
|
46
|
+
}
|
|
47
|
+
const groupClasses = ["seams-recovery-code-group"];
|
|
48
|
+
if (focusIndex !== null && focusIndex >= start && focusIndex < end) groupClasses.push("is-active");
|
|
49
|
+
if (code.length >= end) groupClasses.push("is-complete");
|
|
50
|
+
groups.push(/* @__PURE__ */ jsx("div", {
|
|
51
|
+
class: groupClasses.join(" "),
|
|
52
|
+
children: slots
|
|
53
|
+
}, start));
|
|
54
|
+
}
|
|
55
|
+
return groups;
|
|
56
|
+
}
|
|
57
|
+
//#endregion
|
|
58
|
+
export { recoveryInputCharacters, rejectedRecoveryCharacters, renderRecoveryCodeGroups };
|
|
59
|
+
|
|
60
|
+
//# sourceMappingURL=recovery-code-input.js.map
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { parseMpcMaterialActivationRef } from "../../../shared-ts/src/utils/domainIds.js";
|
|
2
|
+
import { normalizeWalletLocale } from "../../../core/ui/locale.js";
|
|
2
3
|
import { resolveAppearanceTheme, resolveThemePalette } from "../../../core/config/configHelpers.js";
|
|
3
4
|
import { nearAccountRefFromAccountId, thresholdEcdsaChainTargetFromRequest, thresholdEcdsaChainTargetsEqual, walletSessionRefFromSession } from "../../../core/signingEngine/interfaces/ecdsaChainTarget.js";
|
|
4
5
|
import { parseExactEcdsaSigningLaneIdentity, parseExactEd25519ExportMaterialIdentity } from "../../../core/signingEngine/session/identity/exactSigningLaneIdentity.js";
|
|
@@ -72,6 +73,7 @@ function normalizeExportKeypairWithUIInput(input, theme) {
|
|
|
72
73
|
function resolveRuntimeAppearance(current, input) {
|
|
73
74
|
const rawInput = input;
|
|
74
75
|
return {
|
|
76
|
+
locale: normalizeWalletLocale(rawInput.locale ?? current.locale),
|
|
75
77
|
theme: resolveAppearanceTheme({
|
|
76
78
|
value: rawInput.theme,
|
|
77
79
|
fallback: current.theme,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { normalizeTrimmedString } from "../../shared-ts/src/utils/normalize.js";
|
|
2
|
+
import { normalizeWalletLocale } from "../ui/locale.js";
|
|
2
3
|
import { copyEcdsaSignerProvisioningDefaults, resolveAppearanceTheme, resolveBoolean, resolveChains, resolveIntegerInRange, resolveThemePalette } from "./configHelpers.js";
|
|
3
4
|
import { normalizeWalletHostVariant } from "../browser/walletIframe/hostVariant.js";
|
|
4
5
|
import { SIGNING_SESSION_SEAL_ALG, SIGNING_SESSION_SEAL_GROUP_ID } from "../../shared-ts/src/utils/signingSessionSeal.js";
|
|
@@ -208,6 +209,7 @@ function buildConfigsFromDefaults(args) {
|
|
|
208
209
|
}
|
|
209
210
|
},
|
|
210
211
|
ui: { appearance: {
|
|
212
|
+
locale: normalizeWalletLocale(rawAppearance?.locale ?? defaults.ui.appearance.locale),
|
|
211
213
|
theme: appearanceTheme,
|
|
212
214
|
palette: appearancePalette
|
|
213
215
|
} }
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
//#region src/core/signingEngine/uiConfirm/ui/appearance.ts
|
|
2
|
+
const DEFAULT_UI_APPEARANCE = {
|
|
3
|
+
theme: {
|
|
4
|
+
id: "default",
|
|
5
|
+
mode: "dark",
|
|
6
|
+
colors: {}
|
|
7
|
+
},
|
|
8
|
+
palette: "default"
|
|
9
|
+
};
|
|
10
|
+
function isThemeMode(value) {
|
|
11
|
+
return value === "light" || value === "dark";
|
|
12
|
+
}
|
|
13
|
+
function resolveUiAppearance(args) {
|
|
14
|
+
const appearance = args.requestedAppearance ?? args.getAppearance?.() ?? DEFAULT_UI_APPEARANCE;
|
|
15
|
+
if (!isThemeMode(args.requestedMode) || args.requestedMode === appearance.theme.mode) return appearance;
|
|
16
|
+
return {
|
|
17
|
+
...appearance,
|
|
18
|
+
theme: {
|
|
19
|
+
...appearance.theme,
|
|
20
|
+
mode: args.requestedMode
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
export { resolveUiAppearance };
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=appearance.js.map
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
//#region src/core/signingEngine/uiConfirm/ui/export-private-key-reveal.ts
|
|
2
|
+
const HEX_REEL_ALPHABET = "0123456789abcdef";
|
|
3
|
+
const BASE58_REEL_ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
|
|
4
|
+
const REEL_GLYPH_MIN_HOLD_MS = 90;
|
|
5
|
+
const REEL_GLYPH_MAX_HOLD_MS = 150;
|
|
6
|
+
const REEL_SETTLE_HOLD_EXTENSION_MS = 90;
|
|
7
|
+
const REEL_SETTLE_STAGGER_MS = 700;
|
|
8
|
+
const REEL_SETTLE_SPIN_MS = 300;
|
|
9
|
+
function assertNever(value) {
|
|
10
|
+
throw new Error(`Unexpected private key reveal state: ${String(value)}`);
|
|
11
|
+
}
|
|
12
|
+
function reelDefinition(scheme) {
|
|
13
|
+
switch (scheme) {
|
|
14
|
+
case "secp256k1": return {
|
|
15
|
+
prefix: "0x",
|
|
16
|
+
alphabet: HEX_REEL_ALPHABET,
|
|
17
|
+
slotCount: 64
|
|
18
|
+
};
|
|
19
|
+
case "ed25519": return {
|
|
20
|
+
prefix: "ed25519:",
|
|
21
|
+
alphabet: BASE58_REEL_ALPHABET,
|
|
22
|
+
slotCount: 88
|
|
23
|
+
};
|
|
24
|
+
default: return assertNever(scheme);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function randomReelGlyph(alphabet) {
|
|
28
|
+
return alphabet[Math.floor(Math.random() * alphabet.length)] ?? alphabet[0] ?? "x";
|
|
29
|
+
}
|
|
30
|
+
function randomGlyphHoldMs(minimumMs, maximumMs) {
|
|
31
|
+
return minimumMs + Math.random() * (maximumMs - minimumMs);
|
|
32
|
+
}
|
|
33
|
+
function createReelSlots(definition, reducedMotion, now) {
|
|
34
|
+
const slots = [];
|
|
35
|
+
for (let index = 0; index < definition.slotCount; index += 1) slots.push({
|
|
36
|
+
glyph: reducedMotion ? "x" : randomReelGlyph(definition.alphabet),
|
|
37
|
+
nextChangeAtMs: reducedMotion ? Number.POSITIVE_INFINITY : now + index * 37 % 90
|
|
38
|
+
});
|
|
39
|
+
return slots;
|
|
40
|
+
}
|
|
41
|
+
function createSpinningState(entryKey, scheme, reducedMotion, now) {
|
|
42
|
+
const definition = reelDefinition(scheme);
|
|
43
|
+
return {
|
|
44
|
+
kind: "spinning",
|
|
45
|
+
entryKey,
|
|
46
|
+
prefix: definition.prefix,
|
|
47
|
+
alphabet: definition.alphabet,
|
|
48
|
+
slots: createReelSlots(definition, reducedMotion, now)
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
function maskedPrivateKey(privateKey) {
|
|
52
|
+
if (!privateKey) return "";
|
|
53
|
+
const visibleStartLength = (privateKey.startsWith("ed25519:") ? 8 : 0) + 6;
|
|
54
|
+
const hiddenEnd = Math.max(visibleStartLength, privateKey.length - 6);
|
|
55
|
+
return `${privateKey.slice(0, visibleStartLength)}${"x".repeat(hiddenEnd - visibleStartLength)}${privateKey.slice(hiddenEnd)}`;
|
|
56
|
+
}
|
|
57
|
+
function settlingState(state, maskedTarget, startedAtMs) {
|
|
58
|
+
const prefix = maskedTarget.startsWith(state.prefix) ? state.prefix : "";
|
|
59
|
+
const targetSlots = Array.from(maskedTarget.slice(prefix.length));
|
|
60
|
+
const slots = targetSlots.length === state.slots.length ? state.slots : targetSlots.map((_, index) => ({
|
|
61
|
+
glyph: randomReelGlyph(state.alphabet),
|
|
62
|
+
nextChangeAtMs: startedAtMs + index * 37 % 90
|
|
63
|
+
}));
|
|
64
|
+
return {
|
|
65
|
+
kind: "settling",
|
|
66
|
+
entryKey: state.entryKey,
|
|
67
|
+
prefix,
|
|
68
|
+
alphabet: state.alphabet,
|
|
69
|
+
slots,
|
|
70
|
+
targetSlots,
|
|
71
|
+
lockedSlots: 0,
|
|
72
|
+
startedAtMs
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
function lockedSlotCount(state, now) {
|
|
76
|
+
const lastIndex = Math.max(1, state.targetSlots.length - 1);
|
|
77
|
+
let count = 0;
|
|
78
|
+
for (let index = 0; index < state.targetSlots.length; index += 1) {
|
|
79
|
+
const stagger = index / lastIndex * REEL_SETTLE_STAGGER_MS;
|
|
80
|
+
if (now >= state.startedAtMs + stagger + REEL_SETTLE_SPIN_MS) count += 1;
|
|
81
|
+
}
|
|
82
|
+
return count;
|
|
83
|
+
}
|
|
84
|
+
function settlingProgress(state, index, now) {
|
|
85
|
+
const stagger = index / Math.max(1, state.targetSlots.length - 1) * REEL_SETTLE_STAGGER_MS;
|
|
86
|
+
const slotStartedAtMs = state.startedAtMs + stagger;
|
|
87
|
+
return Math.max(0, Math.min(1, (now - slotStartedAtMs) / REEL_SETTLE_SPIN_MS));
|
|
88
|
+
}
|
|
89
|
+
function cycleSpinningSlots(slots, alphabet, now) {
|
|
90
|
+
let nextSlots = null;
|
|
91
|
+
for (let index = 0; index < slots.length; index += 1) {
|
|
92
|
+
const slot = slots[index];
|
|
93
|
+
if (!slot || now < slot.nextChangeAtMs) continue;
|
|
94
|
+
if (nextSlots === null) nextSlots = [...slots];
|
|
95
|
+
nextSlots[index] = {
|
|
96
|
+
glyph: randomReelGlyph(alphabet),
|
|
97
|
+
nextChangeAtMs: now + randomGlyphHoldMs(REEL_GLYPH_MIN_HOLD_MS, REEL_GLYPH_MAX_HOLD_MS)
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
return nextSlots ?? slots;
|
|
101
|
+
}
|
|
102
|
+
function cycleSettlingSlots(state, lockedSlots, now) {
|
|
103
|
+
let nextSlots = null;
|
|
104
|
+
for (let index = 0; index < state.slots.length; index += 1) {
|
|
105
|
+
const slot = state.slots[index];
|
|
106
|
+
if (!slot) continue;
|
|
107
|
+
if (index < lockedSlots) {
|
|
108
|
+
const targetGlyph = state.targetSlots[index] ?? slot.glyph;
|
|
109
|
+
if (slot.glyph === targetGlyph && slot.nextChangeAtMs === Number.POSITIVE_INFINITY) continue;
|
|
110
|
+
if (nextSlots === null) nextSlots = [...state.slots];
|
|
111
|
+
nextSlots[index] = {
|
|
112
|
+
glyph: targetGlyph,
|
|
113
|
+
nextChangeAtMs: Number.POSITIVE_INFINITY
|
|
114
|
+
};
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
if (now < slot.nextChangeAtMs) continue;
|
|
118
|
+
const holdExtensionMs = settlingProgress(state, index, now) * REEL_SETTLE_HOLD_EXTENSION_MS;
|
|
119
|
+
if (nextSlots === null) nextSlots = [...state.slots];
|
|
120
|
+
nextSlots[index] = {
|
|
121
|
+
glyph: randomReelGlyph(state.alphabet),
|
|
122
|
+
nextChangeAtMs: now + randomGlyphHoldMs(REEL_GLYPH_MIN_HOLD_MS + holdExtensionMs, REEL_GLYPH_MAX_HOLD_MS + holdExtensionMs)
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
return nextSlots ?? state.slots;
|
|
126
|
+
}
|
|
127
|
+
function advanceRevealState(state, now) {
|
|
128
|
+
if (state.kind === "spinning") {
|
|
129
|
+
const slots = cycleSpinningSlots(state.slots, state.alphabet, now);
|
|
130
|
+
if (slots === state.slots) return state;
|
|
131
|
+
return {
|
|
132
|
+
...state,
|
|
133
|
+
slots
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
if (state.kind === "settling") {
|
|
137
|
+
const nextLockedSlots = lockedSlotCount(state, now);
|
|
138
|
+
if (nextLockedSlots >= state.targetSlots.length) return {
|
|
139
|
+
kind: "settled",
|
|
140
|
+
entryKey: state.entryKey
|
|
141
|
+
};
|
|
142
|
+
const slots = cycleSettlingSlots(state, nextLockedSlots, now);
|
|
143
|
+
if (slots === state.slots && nextLockedSlots === state.lockedSlots) return state;
|
|
144
|
+
return {
|
|
145
|
+
...state,
|
|
146
|
+
slots,
|
|
147
|
+
lockedSlots: nextLockedSlots
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
return assertNever(state);
|
|
151
|
+
}
|
|
152
|
+
//#endregion
|
|
153
|
+
export { advanceRevealState, createSpinningState, maskedPrivateKey, settlingState };
|
|
154
|
+
|
|
155
|
+
//# sourceMappingURL=export-private-key-reveal.js.map
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { createWalletIframeSurfaceMeasurementReporter } from "../../../../SeamsWeb/walletIframe/host/surface-measurement-reporter.js";
|
|
2
|
+
import { sameSurfaceMeasurementBinding } from "./surface-measurement-binding.js";
|
|
3
|
+
import { resolveUiAppearance } from "./appearance.js";
|
|
4
|
+
//#region src/core/signingEngine/uiConfirm/ui/export-viewer-host.ts
|
|
5
|
+
let mountedHost = null;
|
|
6
|
+
let mountVersion = 0;
|
|
7
|
+
var ExportViewerHost = class {
|
|
8
|
+
surface;
|
|
9
|
+
state;
|
|
10
|
+
constructor(session, context, model, binding, lifecycle, mount) {
|
|
11
|
+
this.session = session;
|
|
12
|
+
this.context = context;
|
|
13
|
+
this.state = {
|
|
14
|
+
kind: "mounted",
|
|
15
|
+
lifecycle,
|
|
16
|
+
binding,
|
|
17
|
+
reporter: null
|
|
18
|
+
};
|
|
19
|
+
this.surface = mount({
|
|
20
|
+
parent: document.body,
|
|
21
|
+
context,
|
|
22
|
+
model,
|
|
23
|
+
onClosed: this.closed
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
start() {
|
|
27
|
+
if (this.state.kind === "disposed") return;
|
|
28
|
+
notifyLifecycle(this.state.lifecycle, "opened");
|
|
29
|
+
if (this.state.kind === "mounted") this.bindMeasurement(this.state.binding);
|
|
30
|
+
}
|
|
31
|
+
matches(session, context) {
|
|
32
|
+
return this.surface.element.isConnected && this.context === context && this.session.kind === session.kind && this.session.id === session.id;
|
|
33
|
+
}
|
|
34
|
+
update(model, binding, lifecycle) {
|
|
35
|
+
if (this.state.kind === "disposed") return;
|
|
36
|
+
if (lifecycle) this.state.lifecycle = lifecycle;
|
|
37
|
+
this.surface.update(model);
|
|
38
|
+
if (!sameSurfaceMeasurementBinding(this.state.binding, binding)) this.bindMeasurement(binding);
|
|
39
|
+
}
|
|
40
|
+
dispose() {
|
|
41
|
+
if (mountedHost === this) mountedHost = null;
|
|
42
|
+
this.surface.dispose();
|
|
43
|
+
}
|
|
44
|
+
closed = () => {
|
|
45
|
+
const state = this.state;
|
|
46
|
+
if (state.kind === "disposed") return;
|
|
47
|
+
this.state = { kind: "disposed" };
|
|
48
|
+
if (mountedHost === this) {
|
|
49
|
+
mountedHost = null;
|
|
50
|
+
mountVersion += 1;
|
|
51
|
+
}
|
|
52
|
+
state.reporter?.disconnect();
|
|
53
|
+
notifyLifecycle(state.lifecycle, "closed");
|
|
54
|
+
};
|
|
55
|
+
bindMeasurement(binding) {
|
|
56
|
+
const state = this.state;
|
|
57
|
+
if (state.kind === "disposed") return;
|
|
58
|
+
state.reporter?.disconnect();
|
|
59
|
+
state.binding = binding;
|
|
60
|
+
state.reporter = null;
|
|
61
|
+
if (binding.kind === "disabled") return;
|
|
62
|
+
const reporter = createWalletIframeSurfaceMeasurementReporter({
|
|
63
|
+
kind: "request_surface",
|
|
64
|
+
element: this.surface.element,
|
|
65
|
+
requestId: binding.requestId,
|
|
66
|
+
postMeasurement: binding.postMeasurement
|
|
67
|
+
});
|
|
68
|
+
if (this.state === state) state.reporter = reporter;
|
|
69
|
+
else reporter.disconnect();
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
function notifyLifecycle(listener, event) {
|
|
73
|
+
try {
|
|
74
|
+
listener?.(event);
|
|
75
|
+
} catch {}
|
|
76
|
+
}
|
|
77
|
+
function exportContext(args) {
|
|
78
|
+
const binding = args.surfaceMeasurementBinding;
|
|
79
|
+
if (binding.kind !== "wallet_iframe") return "standalone";
|
|
80
|
+
return (binding.hostSurfaceVariant ?? args.variant) === "modal" ? "wallet-iframe" : "standalone";
|
|
81
|
+
}
|
|
82
|
+
function normalizeGuidance(guidance) {
|
|
83
|
+
if (!guidance) return void 0;
|
|
84
|
+
const title = guidance.title.trim();
|
|
85
|
+
const body = guidance.body?.trim();
|
|
86
|
+
const steps = guidance.steps?.map(trimText).filter(nonemptyText);
|
|
87
|
+
if (!title && !body && !steps?.length) return void 0;
|
|
88
|
+
return {
|
|
89
|
+
title,
|
|
90
|
+
body,
|
|
91
|
+
steps
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
function trimText(value) {
|
|
95
|
+
return value.trim();
|
|
96
|
+
}
|
|
97
|
+
function nonemptyText(value) {
|
|
98
|
+
return value.length > 0;
|
|
99
|
+
}
|
|
100
|
+
function hasKey(entry) {
|
|
101
|
+
return !!entry.publicKey.trim() || !!entry.privateKey.trim();
|
|
102
|
+
}
|
|
103
|
+
function keyMetadata(entry, index) {
|
|
104
|
+
return {
|
|
105
|
+
id: `${entry.scheme}-${index}`,
|
|
106
|
+
scheme: entry.scheme,
|
|
107
|
+
label: entry.label.trim(),
|
|
108
|
+
publicKey: entry.publicKey.trim(),
|
|
109
|
+
address: entry.address?.trim() ?? ""
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
function normalizeExportContent(args) {
|
|
113
|
+
const accountId = args.accountId.trim();
|
|
114
|
+
const guidance = normalizeGuidance(args.guidance);
|
|
115
|
+
const message = args.errorMessage?.trim();
|
|
116
|
+
if (message) return {
|
|
117
|
+
kind: "failed",
|
|
118
|
+
accountId,
|
|
119
|
+
guidance,
|
|
120
|
+
message
|
|
121
|
+
};
|
|
122
|
+
const entries = args.keys?.filter(hasKey) ?? [];
|
|
123
|
+
if (entries.length === 0) {
|
|
124
|
+
const publicKey = args.publicKey?.trim() ?? "";
|
|
125
|
+
const privateKey = args.privateKey?.trim() ?? "";
|
|
126
|
+
if (publicKey || privateKey) entries.push({
|
|
127
|
+
scheme: "ed25519",
|
|
128
|
+
label: "NEAR Ed25519",
|
|
129
|
+
publicKey,
|
|
130
|
+
privateKey
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
if (args.loading) {
|
|
134
|
+
const loading = {
|
|
135
|
+
kind: "loading",
|
|
136
|
+
accountId,
|
|
137
|
+
guidance,
|
|
138
|
+
entries: []
|
|
139
|
+
};
|
|
140
|
+
for (const [index, entry] of entries.entries()) loading.entries.push({
|
|
141
|
+
...keyMetadata(entry, index),
|
|
142
|
+
material: { kind: "loading" }
|
|
143
|
+
});
|
|
144
|
+
return loading;
|
|
145
|
+
}
|
|
146
|
+
const ready = {
|
|
147
|
+
kind: "ready",
|
|
148
|
+
accountId,
|
|
149
|
+
guidance,
|
|
150
|
+
entries: []
|
|
151
|
+
};
|
|
152
|
+
for (const [index, entry] of entries.entries()) {
|
|
153
|
+
const privateKey = entry.privateKey.trim();
|
|
154
|
+
ready.entries.push({
|
|
155
|
+
...keyMetadata(entry, index),
|
|
156
|
+
material: privateKey ? {
|
|
157
|
+
kind: "ready",
|
|
158
|
+
value: privateKey
|
|
159
|
+
} : { kind: "unavailable" }
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
return ready;
|
|
163
|
+
}
|
|
164
|
+
function isExportViewerSessionOpen(sessionId) {
|
|
165
|
+
const id = sessionId.trim();
|
|
166
|
+
return !!id && mountedHost?.session.kind === "tracked" && mountedHost.session.id === id && mountedHost.surface.element.isConnected;
|
|
167
|
+
}
|
|
168
|
+
async function upsertExportViewerHost(args) {
|
|
169
|
+
if (typeof document === "undefined") throw new Error("Export viewer host requires a DOM environment");
|
|
170
|
+
const version = ++mountVersion;
|
|
171
|
+
const model = {
|
|
172
|
+
variant: args.variant,
|
|
173
|
+
appearance: resolveUiAppearance({
|
|
174
|
+
requestedAppearance: args.appearance,
|
|
175
|
+
requestedMode: args.theme
|
|
176
|
+
}),
|
|
177
|
+
content: normalizeExportContent(args)
|
|
178
|
+
};
|
|
179
|
+
const id = args.sessionId?.trim();
|
|
180
|
+
const session = id ? {
|
|
181
|
+
kind: "tracked",
|
|
182
|
+
id
|
|
183
|
+
} : { kind: "untracked" };
|
|
184
|
+
const context = exportContext(args);
|
|
185
|
+
const { mountExportPrivateKeySurface } = await import("./preact/mountExportPrivateKeySurface.js");
|
|
186
|
+
if (version !== mountVersion) return;
|
|
187
|
+
if (mountedHost?.matches(session, context)) {
|
|
188
|
+
mountedHost.update(model, args.surfaceMeasurementBinding, args.onLifecycle);
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
mountedHost?.dispose();
|
|
192
|
+
if (version !== mountVersion) return;
|
|
193
|
+
const host = new ExportViewerHost(session, context, model, args.surfaceMeasurementBinding, args.onLifecycle ?? null, mountExportPrivateKeySurface);
|
|
194
|
+
mountedHost = host;
|
|
195
|
+
try {
|
|
196
|
+
host.start();
|
|
197
|
+
} catch (error) {
|
|
198
|
+
host.dispose();
|
|
199
|
+
throw error;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
function removeExportViewerHostIfPresent() {
|
|
203
|
+
mountVersion += 1;
|
|
204
|
+
mountedHost?.dispose();
|
|
205
|
+
}
|
|
206
|
+
//#endregion
|
|
207
|
+
export { isExportViewerSessionOpen, removeExportViewerHostIfPresent, upsertExportViewerHost };
|
|
208
|
+
|
|
209
|
+
//# sourceMappingURL=export-viewer-host.js.map
|