@seams/wallet 0.7.1 → 0.8.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/THIRD_PARTY_NOTICES.md +1 -113
- package/dist/.build-inputs.sha256 +1 -1
- package/dist/esm/SeamsWeb/SeamsWeb.js +12 -3
- package/dist/esm/SeamsWeb/assembly/browserSigningSurfaceAssembly.js +2 -2
- package/dist/esm/SeamsWeb/assembly/createBrowserRecoveryPublicDeps.js +1 -1
- package/dist/esm/SeamsWeb/assembly/createBrowserSigningStores.js +1 -1
- package/dist/esm/SeamsWeb/assembly/createBrowserWarmSessionPublicDeps.js +0 -2
- package/dist/esm/SeamsWeb/operations/auth/login.js +34 -49
- package/dist/esm/SeamsWeb/operations/auth/scheduleLinkedDevicePresignaturePrefill.js +64 -0
- package/dist/esm/SeamsWeb/operations/auth/walletAuth.js +2 -3
- package/dist/esm/SeamsWeb/operations/auth/walletUnlockEcdsaSubject.js +1 -4
- package/dist/esm/SeamsWeb/operations/auth/walletUnlockSubject.js +2 -8
- package/dist/esm/SeamsWeb/operations/authMethods/emailOtp/addEmailOtp.js +1 -1
- package/dist/esm/SeamsWeb/operations/authMethods/emailOtp/googleEmailOtpWalletAuthFlow.js +5 -9
- package/dist/esm/SeamsWeb/operations/authMethods/passkey/addPasskey.js +1 -1
- package/dist/esm/SeamsWeb/operations/authMethods/revokeAuthMethod.js +1 -1
- package/dist/esm/SeamsWeb/operations/devices/deviceLinkingHttpTransport.js +11 -12
- package/dist/esm/SeamsWeb/operations/devices/deviceLinkingResume.js +2 -9
- package/dist/esm/SeamsWeb/operations/devices/deviceLinkingWorkerChannels.js +24 -24
- package/dist/esm/SeamsWeb/operations/devices/linkDeviceFlow.js +38 -13
- package/dist/esm/SeamsWeb/operations/devices/scanDevice.js +1 -1
- package/dist/esm/SeamsWeb/operations/near/signNEP413.js +0 -1
- package/dist/esm/SeamsWeb/operations/recovery/syncAccount.js +2 -4
- package/dist/esm/SeamsWeb/operations/recovery/walletRecovery.js +1 -2
- package/dist/esm/SeamsWeb/operations/recovery/walletRecoveryCommit.js +4 -5
- package/dist/esm/SeamsWeb/operations/recovery/walletRecoveryDurablePayload.js +5 -9
- package/dist/esm/SeamsWeb/operations/recovery/walletRecoveryRotation.js +1 -2
- package/dist/esm/SeamsWeb/operations/registration/pendingRegistrationRecovery.js +5 -20
- package/dist/esm/SeamsWeb/operations/registration/registration.js +5 -5
- package/dist/esm/SeamsWeb/operations/registration/registrationStrictEcdsa.js +1 -1
- package/dist/esm/SeamsWeb/operations/registration/registrationTerminalCommit.js +1 -1
- package/dist/esm/SeamsWeb/operations/session/thresholdEcdsaProvisioning.js +2 -6
- package/dist/esm/SeamsWeb/operations/tempo/executeEvmFamilyTransaction.js +4 -1
- package/dist/esm/SeamsWeb/publicApi/auth.js +2 -1
- package/dist/esm/SeamsWeb/publicApi/near.js +1 -1
- package/dist/esm/SeamsWeb/publicApi/tempo.js +6 -0
- package/dist/esm/SeamsWeb/publicApi/transactionReview.js +4 -1
- package/dist/esm/SeamsWeb/signingSurface/BrowserSigningSurface.js +28 -19
- package/dist/esm/SeamsWeb/walletIframe/client/router.js +1 -2
- package/dist/esm/SeamsWeb/walletIframe/client/surface/domain.js +0 -2
- package/dist/esm/SeamsWeb/walletIframe/client/transport/IframeTransport.js +0 -4
- package/dist/esm/SeamsWeb/walletIframe/client/transport/iframe-transport-handshake.js +1 -1
- package/dist/esm/SeamsWeb/walletIframe/host/restoredSessionPresignaturePrefill.js +29 -0
- package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/AuthMenuFooter.js +64 -0
- package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/AuthMenuSurface.js +194 -385
- package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/icons.js +136 -0
- package/dist/esm/SeamsWeb/walletIframe/shared/exactSessionState.js +6 -26
- package/dist/esm/SeamsWeb/walletIframe/shared/messages.js +6 -6
- package/dist/esm/SeamsWeb/walletIframe/shared/transactionReview.js +11 -1
- package/dist/esm/advanced.js +0 -1
- package/dist/esm/base-styles.js +2 -2
- package/dist/esm/build-paths.js +0 -2
- package/dist/esm/core/accountData/near/accountProjection.js +0 -1
- package/dist/esm/core/accountData/near/keyMaterial.js +0 -1
- package/dist/esm/core/browser/walletIframe/events.js +1 -5
- package/dist/esm/core/browser/walletIframe/host-mode.js +0 -10
- package/dist/esm/core/config/chains.js +1 -2
- package/dist/esm/core/config/configBuilder.js +0 -1
- package/dist/esm/core/config/configHelpers.js +0 -1
- package/dist/esm/core/indexedDB/accountKeyMaterial.js +0 -1
- package/dist/esm/core/indexedDB/index.js +3 -4
- package/dist/esm/core/indexedDB/pendingWalletRecoveryCommit.js +6 -14
- package/dist/esm/core/indexedDB/pendingWalletRegistrationCommit.js +139 -273
- package/dist/esm/core/indexedDB/schemaNames.js +0 -22
- package/dist/esm/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestRecords.js +3 -3
- package/dist/esm/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestStore.js +3 -3
- package/dist/esm/core/indexedDB/seamsWalletDB/ecdsaClientPresignatures.js +1 -1
- package/dist/esm/core/indexedDB/seamsWalletDB/pendingWalletRecoveryCodeBackup.js +0 -1
- package/dist/esm/core/indexedDB/seamsWalletDB/registrationSetup.js +103 -0
- package/dist/esm/core/indexedDB/seamsWalletDB/repositories.js +2 -3
- package/dist/esm/core/indexedDB/seamsWalletDB/signingSessionSeals.js +0 -35
- package/dist/esm/core/indexedDB/seamsWalletDB/walletCustodyEcdsaContinuity.js +4 -4
- package/dist/esm/core/indexedDB/seamsWalletDB/walletSessionAuthorizationStore.js +37 -19
- package/dist/esm/core/indexedDB/unifiedIndexedDBManager.js +10 -3
- package/dist/esm/core/indexedDB/walletCustodyEd25519MaterialRecord.js +1 -1
- package/dist/esm/core/platform/browser/createBrowserPlatformRuntime.js +8 -25
- package/dist/esm/core/rpcClients/near/rpcCalls.js +39 -1
- package/dist/esm/core/rpcClients/relayer/passkeyCustodyEnvelope.js +3 -13
- package/dist/esm/core/rpcClients/relayer/thresholdEcdsa.js +0 -2
- package/dist/esm/core/rpcClients/relayer/walletRecoveryPrepare.js +72 -125
- package/dist/esm/core/rpcClients/relayer/walletRegistration.js +21 -15
- package/dist/esm/core/rpcClients/relayer/walletRegistrationTerminalResponse.js +1 -2
- package/dist/esm/core/signingEngine/assembly/createManagers.js +1 -1
- package/dist/esm/core/signingEngine/assembly/ports/recovery.js +1 -1
- package/dist/esm/core/signingEngine/assembly/ports/shared.js +1 -2
- package/dist/esm/core/signingEngine/assembly/warmup.js +1 -5
- package/dist/esm/core/signingEngine/chains/evm/display/functionSelectors.js +2 -5
- package/dist/esm/core/signingEngine/chains/near/nearSignerWasm.js +2 -33
- package/dist/esm/core/signingEngine/flows/recovery/ecdsaDerivationExport.js +0 -1
- package/dist/esm/core/signingEngine/flows/recovery/ecdsaExportFlow.js +2 -2
- package/dist/esm/core/signingEngine/flows/recovery/ecdsaExportMaterial.js +35 -29
- package/dist/esm/core/signingEngine/flows/recovery/ed25519YaoExportFlow.js +3 -3
- package/dist/esm/core/signingEngine/flows/recovery/exportKeypairOperation.js +1 -4
- package/dist/esm/core/signingEngine/flows/recovery/passkeyEd25519YaoRecovery.js +2 -5
- package/dist/esm/core/signingEngine/flows/recovery/stepUpAuthorization.js +1 -1
- package/dist/esm/core/signingEngine/flows/registration/accountLifecycle.js +3 -8
- package/dist/esm/core/signingEngine/flows/registration/services/passkeyEd25519YaoAddSigner.js +1 -2
- package/dist/esm/core/signingEngine/flows/shared/signingStateMachine.js +2 -5
- package/dist/esm/core/signingEngine/flows/signEvmFamily/emailOtpSigningSession.js +2 -2
- package/dist/esm/core/signingEngine/flows/signEvmFamily/preparedSigning.js +2 -9
- package/dist/esm/core/signingEngine/flows/signEvmFamily/readySecp256k1Material.js +0 -2
- package/dist/esm/core/signingEngine/flows/signEvmFamily/signEvmFamily.js +6 -8
- package/dist/esm/core/signingEngine/flows/signEvmFamily/signers/ecdsaDerivationClientSigningMaterialSource.js +24 -18
- package/dist/esm/core/signingEngine/flows/signEvmFamily/signingFlow.js +7 -5
- package/dist/esm/core/signingEngine/flows/signEvmFamily/signingFlowRuntime.js +10 -9
- package/dist/esm/core/signingEngine/flows/signEvmFamily/transactionExecutor.js +3 -7
- package/dist/esm/core/signingEngine/flows/signNear/implicitAccountFunding.js +1 -1
- package/dist/esm/core/signingEngine/flows/signNear/shared/ed25519YaoNormalSigning.js +33 -42
- package/dist/esm/core/signingEngine/flows/signNear/shared/signatureOnlySigning.js +0 -2
- package/dist/esm/core/signingEngine/flows/signNear/shared/signingMaterials.js +1 -7
- package/dist/esm/core/signingEngine/flows/signNear/shared/signingSessionAuthMode.js +4 -14
- package/dist/esm/core/signingEngine/flows/signNear/signDelegate.js +2 -6
- package/dist/esm/core/signingEngine/flows/signNear/signNear.js +2 -2
- package/dist/esm/core/signingEngine/flows/signNear/signNep413.js +2 -6
- package/dist/esm/core/signingEngine/nonce/NonceCoordinator.js +1 -1
- package/dist/esm/core/signingEngine/nonce/nearNonceLane.js +1 -1
- package/dist/esm/core/signingEngine/nonce/nonceDiagnostics.js +1 -1
- package/dist/esm/core/signingEngine/routerAb/ecdsaDerivation/poolFillRoutes.js +0 -1
- package/dist/esm/core/signingEngine/routerAb/ecdsaDerivation/presignaturePool.js +2 -1
- package/dist/esm/core/signingEngine/routerAb/ecdsaDerivation/signingMaterialRef.js +0 -3
- package/dist/esm/core/signingEngine/session/SigningSessionCoordinator.js +1 -4
- package/dist/esm/core/signingEngine/session/authority/authorityOperationResolver.js +17 -68
- package/dist/esm/core/signingEngine/session/availability/availableSigningLanes.js +1 -10
- package/dist/esm/core/signingEngine/session/availability/persistedAvailableSigningLanes.js +7 -6
- package/dist/esm/core/signingEngine/session/emailOtp/EmailOtpWalletSessionCoordinator.js +107 -24
- package/dist/esm/core/signingEngine/session/emailOtp/ecdsaBootstrapCommit.js +1 -1
- package/dist/esm/core/signingEngine/session/emailOtp/ecdsaLifecycleRuntime.js +0 -3
- package/dist/esm/core/signingEngine/session/emailOtp/ecdsaLogin.js +4 -15
- package/dist/esm/core/signingEngine/session/emailOtp/ecdsaRecovery.js +12 -16
- package/dist/esm/core/signingEngine/session/emailOtp/ed25519ExportContext.js +0 -3
- package/dist/esm/core/signingEngine/session/emailOtp/exportRecovery.js +0 -2
- package/dist/esm/core/signingEngine/session/identity/clientSessionPersistenceState.js +5 -16
- package/dist/esm/core/signingEngine/session/identity/evmFamilyEcdsaIdentity.js +0 -1
- package/dist/esm/core/signingEngine/session/identity/exactSigningLaneIdentity.js +1 -1
- package/dist/esm/core/signingEngine/session/identity/exactWalletSessionCredential.js +0 -2
- package/dist/esm/core/signingEngine/session/identity/selectLane.js +7 -21
- package/dist/esm/core/signingEngine/session/material/activeWalletAuthorityEcdsaRuntime.js +3 -9
- package/dist/esm/core/signingEngine/session/material/ecdsaCapabilityManifest.js +4 -16
- package/dist/esm/core/signingEngine/session/material/ecdsaRoleLocalMaterialResolver.js +1 -14
- package/dist/esm/core/signingEngine/session/material/ecdsaSigningCapability.js +1 -1
- package/dist/esm/core/signingEngine/session/operationState/preparedOperation.js +1 -5
- package/dist/esm/core/signingEngine/session/passkey/ecdsaBootstrap.js +3 -6
- package/dist/esm/core/signingEngine/session/passkey/ecdsaKeyFactsInventory.js +0 -1
- package/dist/esm/core/signingEngine/session/passkey/ecdsaRecovery.js +1 -4
- package/dist/esm/core/signingEngine/session/passkey/ed25519SessionProvision.js +0 -1
- package/dist/esm/core/signingEngine/session/passkey/ed25519YaoLocalMaterial.js +2 -3
- package/dist/esm/core/signingEngine/session/passkey/ed25519YaoWarmRecovery.js +13 -49
- package/dist/esm/core/signingEngine/session/persistence/clientSessionPersistence.js +8 -16
- package/dist/esm/core/signingEngine/session/persistence/sealedSessionRecords.js +5 -10
- package/dist/esm/core/signingEngine/session/postconditions/runtimePostconditions.js +0 -2
- package/dist/esm/core/signingEngine/session/routerAbSigningWalletSession.js +2 -8
- package/dist/esm/core/signingEngine/session/warmCapabilities/ecdsaLoginPrefillSigningMaterialSource.js +2 -2
- package/dist/esm/core/signingEngine/session/warmCapabilities/nearEd25519CapabilityRehydration.js +1 -1
- package/dist/esm/core/signingEngine/session/warmCapabilities/readModel.js +2 -8
- package/dist/esm/core/signingEngine/session/warmCapabilities/routerAbWalletSessionCredential.js +1 -12
- package/dist/esm/core/signingEngine/session/warmCapabilities/transitions.js +7 -11
- package/dist/esm/core/signingEngine/stepUpConfirmation/otpPrompt/authLane.js +0 -1
- package/dist/esm/core/signingEngine/stepUpConfirmation/passkeyPrompt/touchIdPrompt.js +6 -30
- package/dist/esm/core/signingEngine/stepUpConfirmation/passkeyPrompt/webauthnPromptCoordinator.js +0 -3
- package/dist/esm/core/signingEngine/stepUpConfirmation/requireStepUpAuth.js +1 -5
- package/dist/esm/core/signingEngine/threshold/commitQueueShared.js +20 -6
- package/dist/esm/core/signingEngine/threshold/crypto/ecdsaDerivationClientWasm.js +7 -4
- package/dist/esm/core/signingEngine/threshold/crypto/ed25519YaoLaneWasm.js +0 -3
- package/dist/esm/core/signingEngine/threshold/ecdsa/bootstrapSession.js +1 -5
- package/dist/esm/core/signingEngine/threshold/ecdsa/signingQueue.js +8 -50
- package/dist/esm/core/signingEngine/threshold/ed25519/commitQueue.js +7 -43
- package/dist/esm/core/signingEngine/threshold/ed25519/walletSession.js +1 -1
- package/dist/esm/core/signingEngine/threshold/ed25519/yaoClient.js +1 -35
- package/dist/esm/core/signingEngine/threshold/sessionPolicy.js +0 -1
- package/dist/esm/core/signingEngine/uiConfirm/PasskeyMpcSessionDurableState.js +1 -4
- package/dist/esm/core/signingEngine/uiConfirm/PasskeyMpcSessionManager.js +4 -3
- package/dist/esm/core/signingEngine/uiConfirm/UiConfirmManager.js +0 -1
- package/dist/esm/core/signingEngine/uiConfirm/handlers/flows/adapters/adapters.js +1 -1
- package/dist/esm/core/signingEngine/uiConfirm/handlers/flows/localOnly.js +0 -1
- package/dist/esm/core/signingEngine/uiConfirm/ui/preact/TransactionReceipt.js +25 -16
- package/dist/esm/core/signingEngine/uiConfirm/ui/transaction-display/abi/abiDecode.js +3 -13
- package/dist/esm/core/signingEngine/uiConfirm/ui/transaction-display/tree.js +1 -10
- package/dist/esm/core/signingEngine/walletCustody/activateEd25519Capability.js +0 -1
- package/dist/esm/core/signingEngine/walletCustody/emailOtpLink.js +10 -13
- package/dist/esm/core/signingEngine/walletCustody/openCustodyCache.js +2 -6
- package/dist/esm/core/signingEngine/walletCustody/passkeyLink.js +7 -10
- package/dist/esm/core/signingEngine/walletCustody/registrationCeremony.js +0 -1
- package/dist/esm/core/signingEngine/walletCustody/walletRecoveryCredential.js +0 -1
- package/dist/esm/core/signingEngine/walletCustody/walletRecoveryEcdsa.js +0 -1
- package/dist/esm/core/signingEngine/walletCustody/walletRecoveryEd25519.js +1 -1
- package/dist/esm/core/signingEngine/walletCustody/walletRecoveryManifest.js +0 -2
- package/dist/esm/core/signingEngine/walletCustody/walletRecoveryRotation.js +0 -1
- package/dist/esm/core/signingEngine/webauthnAuth/walletOriginWebAuthn.js +109 -0
- package/dist/esm/core/signingEngine/workerManager/SignerWorkerManager.js +0 -2
- package/dist/esm/core/signingEngine/workerManager/deviceLinkingPorts.js +67 -48
- package/dist/esm/core/signingEngine/workerManager/ecdsaClientWorkerChannels.js +0 -4
- package/dist/esm/core/signingEngine/workerManager/validation.js +1 -1
- package/dist/esm/core/signingEngine/workerManager/workerTransport.js +4 -47
- package/dist/esm/core/signingEngine/workerManager/workerTypes.js +0 -2
- package/dist/esm/core/types/accountIds.js +0 -1
- package/dist/esm/core/types/sdkSentEvents.js +1 -2
- package/dist/esm/core/types/signer-worker.js +1 -36
- package/dist/esm/core/walletRuntimePaths/base.js +11 -1
- package/dist/esm/plugins/headers.js +0 -1
- package/dist/esm/plugins/next.js +0 -1
- package/dist/esm/plugins/plugin-utils.js +0 -1
- package/dist/esm/plugins/shared-ts/src/utils/normalize.js +1 -1
- package/dist/esm/react/components/AccountMenuButton/AccountsSection.js +1 -1
- package/dist/esm/react/components/AccountMenuButton/AuthenticationMethodsModal.js +3 -3
- package/dist/esm/react/components/AccountMenuButton/ExportKeysSection.js +2 -2
- package/dist/esm/react/components/AccountMenuButton/LinkedDevicesModal.js +8 -8
- package/dist/esm/react/components/AccountMenuButton/LockMenuItem.js +2 -1
- package/dist/esm/react/components/AccountMenuButton/MenuItem.css +17 -0
- package/dist/esm/react/components/AccountMenuButton/ProfileDropdown.js +1 -1
- package/dist/esm/react/components/AccountMenuButton/UserAccountButton.css +0 -5
- package/dist/esm/react/components/AccountMenuButton/WalletSettingsLayout.css +8 -0
- package/dist/esm/react/components/AccountMenuButton/WalletSettingsLayout.js +21 -13
- package/dist/esm/react/components/AccountMenuButton/Web3AuthProfileButton.css +0 -52
- package/dist/esm/react/components/AccountMenuButton/icons/GlobeIcon.js +12 -27
- package/dist/esm/react/components/AccountMenuButton/icons/KeyIcon.js +12 -27
- package/dist/esm/react/components/AccountMenuButton/icons/LaptopIcon.js +4 -19
- package/dist/esm/react/components/AccountMenuButton/icons/LinkIcon.js +4 -19
- package/dist/esm/react/components/AccountMenuButton/icons/LockIcon.js +11 -26
- package/dist/esm/react/components/AccountMenuButton/icons/MailIcon.js +10 -25
- package/dist/esm/react/components/AccountMenuButton/icons/RecoveryCodesIcon.js +16 -31
- package/dist/esm/react/components/AccountMenuButton/icons/ScanIcon.js +9 -24
- package/dist/esm/react/components/AccountMenuButton/icons/SlidersIcon.js +14 -29
- package/dist/esm/react/components/AccountMenuButton/icons/SmartphoneIcon.js +11 -26
- package/dist/esm/react/components/AccountMenuButton/icons/TouchIcon.js +1 -1
- package/dist/esm/react/components/AccountMenuButton/icons/lucideIcon.js +27 -0
- package/dist/esm/react/components/AccountMenuButton/icons/strokeIcon.js +7 -17
- package/dist/esm/react/components/AccountMenuButton/index.js +11 -11
- package/dist/esm/react/components/HostedSeamsAuthMenu/SeamsAuthMenuMock.js +1 -1
- package/dist/esm/react/components/HostedSeamsAuthMenu/shell.js +1 -1
- package/dist/esm/react/components/QRCodeScanner.css +0 -15
- package/dist/esm/react/components/QRCodeScanner.js +2 -2
- package/dist/esm/react/components/ShowQRCode.css +0 -14
- package/dist/esm/react/components/ShowQRCode.js +4 -4
- package/dist/esm/react/components/theme/design-tokens.js +1 -2
- package/dist/esm/react/context/index.js +1 -1
- package/dist/esm/react/context/reactLoginStateBuilders.js +1 -1
- package/dist/esm/react/context/seamsManagerSingleton.js +2 -2
- package/dist/esm/react/context/useLoginStateRefresher.js +2 -5
- package/dist/esm/react/context/useSeamsContextValue.js +1 -1
- package/dist/esm/react/context/useSeamsWithSdkFlow.js +2 -3
- package/dist/esm/react/context/useWalletIframeLifecycle.js +1 -15
- package/dist/esm/react/hooks/useAccountInput.js +4 -4
- package/dist/esm/react/hooks/useNearClient.js +3 -3
- package/dist/esm/react/hooks/usePreconnectWalletAssets.js +1 -1
- package/dist/esm/react/hooks/useQRCamera.js +2 -2
- package/dist/esm/react/hooks/useWallet.js +1 -1
- package/dist/esm/react/index.js +10 -10
- package/dist/esm/react/styles/styles.css +25 -86
- package/dist/esm/react/transactionReview/TransactionReviewHost.js +1 -1
- package/dist/esm/react/transactionReview/boundCalls.js +2 -2
- package/dist/esm/react/transactionReview/contract.js +1 -1
- package/dist/esm/react/transactionReview/controller.js +2 -2
- package/dist/esm/react/transactionReview/snapshot.js +2 -2
- package/dist/esm/sdk/ConfirmationDrawer-DrsREojk.js +1 -0
- package/dist/esm/sdk/EvmClient-DoxytQaJ.js +1 -0
- package/dist/esm/sdk/NearClient-vJ65Wjrq.js +1 -0
- package/dist/esm/sdk/NonceCoordinator-BBeadCSq.js +1 -0
- package/dist/esm/sdk/accountIds-C3Ihsd2c.js +1 -0
- package/dist/esm/sdk/accountLifecycle-EyfYPnuT.js +1 -0
- package/dist/esm/sdk/actions-DZLxCcrU.js +1 -0
- package/dist/esm/sdk/adapters-DtAyuoiA.js +2 -0
- package/dist/esm/sdk/base-Xtd32asf.js +1 -0
- package/dist/esm/sdk/base64-ojm5DKcF.js +1 -0
- package/dist/esm/sdk/browser-CsOGMbMy.js +8 -0
- package/dist/esm/sdk/bytes-t5S5mkat.js +1 -0
- package/dist/esm/sdk/canonicalPrimitives-MPGET2cl.js +1 -0
- package/dist/esm/sdk/canonicalSignerErrorCode-C0hh_SVi.js +1 -0
- package/dist/esm/sdk/capabilityKinds-XaXXiD2B.js +1 -0
- package/dist/esm/sdk/chains-yAls2d9X.js +1 -0
- package/dist/esm/sdk/challengeDelivery-cAsaUC6U.js +1 -0
- package/dist/esm/sdk/chunk-dVx5-UGu.js +1 -0
- package/dist/esm/sdk/configHelpers-CseiVoZD.js +1 -0
- package/dist/esm/sdk/csp-stylesheet-B1fAhrGB.js +2 -0
- package/dist/esm/sdk/defaultConfigs-CWpApkMq.js +1 -0
- package/dist/esm/sdk/display-jK7_hYho.js +1 -0
- package/dist/esm/sdk/domainIds-GDzjOs6i.js +1 -0
- package/dist/esm/sdk/ecdsaCapabilityManifest-CHFu-QrV.js +1 -0
- package/dist/esm/sdk/ecdsaChainTarget-CRcRR78w.js +1 -0
- package/dist/esm/sdk/ecdsaPresignLifecycle-CQnCxSlq.js +1 -0
- package/dist/esm/sdk/ecdsaPresignPoolIdentity-Ci-ovDlv.js +1 -0
- package/dist/esm/sdk/ecdsaWalletRecords-Cm1DdexN.js +1 -0
- package/dist/esm/sdk/enrichDisplayModelWithAbi-CR-4ebuU.js +1 -0
- package/dist/esm/sdk/enrichDisplayModelWithAbi-CwHKFqF4.js +569 -0
- package/dist/esm/sdk/errors-DfbnsXjO.js +1 -0
- package/dist/esm/sdk/events-BJyVcnsn.js +1 -0
- package/dist/esm/sdk/evmCryptoWasm-CwEXiLrC.js +1 -0
- package/dist/esm/sdk/evmFamilyEcdsaIdentity-Br3iFdQx.js +1 -0
- package/dist/esm/sdk/exactSessionState-CjD8gekO.js +210 -0
- package/dist/esm/sdk/exactSigningLaneIdentity-olheZx_n.js +1 -0
- package/dist/esm/sdk/executeWorkerOperation-CrFf3FkL.js +1 -0
- package/dist/esm/sdk/export-viewer-host-jo7h_0wl.js +1 -0
- package/dist/esm/sdk/helpers-D4QckQhq.js +1 -0
- package/dist/esm/sdk/host-BAqOYnju.js +1 -0
- package/dist/esm/sdk/intentDigest-CB6zy3lN.js +1 -0
- package/dist/esm/sdk/jsonRpc-C85RYR0A.js +1 -0
- package/dist/esm/sdk/jsxRuntime.module-CoHsKD_3.js +1 -0
- package/dist/esm/sdk/keccak-zexutGfG.js +1 -0
- package/dist/esm/sdk/keyMaterialBrands-uVZHfAh3.js +1 -0
- package/dist/esm/sdk/localOnly-DBQRG6Qh.js +1 -0
- package/dist/esm/sdk/messages-Cv2j4SKI.js +1 -0
- package/dist/esm/sdk/mountExportPrivateKeySurface-G7Z_9JMQ.js +1 -0
- package/dist/esm/sdk/mountRecoveryCodeBackupSurface-BBCTaQsu.js +2 -0
- package/dist/esm/sdk/nearEd25519YaoMaterialActivation-DQIw8ho3.js +1 -0
- package/dist/esm/sdk/nearEd25519YaoSigningPreparation-Bp_CvWRz.js +1 -0
- package/dist/esm/sdk/nearRpcResults--cBcfmp4.js +1 -0
- package/dist/esm/sdk/nonceLaneKeys-BBYi4g51.js +1 -0
- package/dist/esm/sdk/normalization-BGPR6osg.js +1 -0
- package/dist/esm/sdk/operationFingerprint-5-wH2Ht8.js +1 -0
- package/dist/esm/sdk/operationFingerprint-DtQb0pdp.js +1 -0
- package/dist/esm/sdk/passkey-custody-LP4UTFbn.js +1 -0
- package/dist/esm/sdk/pendingWalletRecoveryCodeBackup-BNk4ebsY.js +1 -0
- package/dist/esm/sdk/prfCache-Mbo7_USg.js +1 -0
- package/dist/esm/sdk/profileAccountProjection-DHCaMtOu.js +1 -0
- package/dist/esm/sdk/promptText-s8TQ6ckX.js +1 -0
- package/dist/esm/sdk/recovery-entrypoint-DkT8sFO5.js +1 -0
- package/dist/esm/sdk/registration-Btozh7uh.js +1 -0
- package/dist/esm/sdk/registration-CSAG_h4Y.js +1 -0
- package/dist/esm/sdk/registrationAccounts-DIeEVy6W.js +1 -0
- package/dist/esm/sdk/registrationIds-BIel5S0i.js +1 -0
- package/dist/esm/sdk/registrationIntent-DV1GYZ3K.js +1 -0
- package/dist/esm/sdk/registrationPreparationPreload-vOCqNuG4.js +1 -0
- package/dist/esm/sdk/registrationSignerPlan-FzD3TwxB.js +1 -0
- package/dist/esm/sdk/relayerHttp-DaPeS929.js +1 -0
- package/dist/esm/sdk/routePlan-B_KJaPtm.js +1 -0
- package/dist/esm/sdk/router-Dd3fFHk3.js +1 -0
- package/dist/esm/sdk/routerAbNormalSigning-D_fHjq5l.js +1 -0
- package/dist/esm/sdk/router_ab_ed25519_yao_client_bg.wasm +0 -0
- package/dist/esm/sdk/runtime-auth-B2M91rSx.js +1 -0
- package/dist/esm/sdk/runtime-device-link-ojjPSRaG.js +1 -0
- package/dist/esm/sdk/runtime-ecdsa-tempo-CE4JLgmn.js +1 -0
- package/dist/esm/sdk/runtime-email-otp-DDwtKVAe.js +1 -0
- package/dist/esm/sdk/runtime-export-JXYk8sQ-.js +1 -0
- package/dist/esm/sdk/runtime-near-BB8AG6dV.js +1 -0
- package/dist/esm/sdk/runtime-preferences-DKFZYccW.js +1 -0
- package/dist/esm/sdk/runtime-recovery-C_XjsDBg.js +1 -0
- package/dist/esm/sdk/runtime-recovery-codes-CWp839mH.js +1 -0
- package/dist/esm/sdk/runtimeContext-BpObgzbj.js +6 -0
- package/dist/esm/sdk/runtimeLoader-DjgBf_yF.js +1 -0
- package/dist/esm/sdk/sdkSentEvents-_RGAEeld.js +1 -0
- package/dist/esm/sdk/secp256k1-B_6W9QDJ.js +1 -0
- package/dist/esm/sdk/secureRandomId-CTdlJ5Mx.js +1 -0
- package/dist/esm/sdk/sessionPolicy-CNVK7nJ6.js +1 -0
- package/dist/esm/sdk/shared-j_KsFbCT.js +1 -0
- package/dist/esm/sdk/signEvmFamily-CcLVBm0f.js +1 -0
- package/dist/esm/sdk/signEvmFamilyWithUiConfirmForTempo-DgTbh6jX.js +1 -0
- package/dist/esm/sdk/signEvmWithUiConfirm-ChreN7aZ.js +1 -0
- package/dist/esm/sdk/signNear-mWbTE2Dl.js +1 -0
- package/dist/esm/sdk/signatureUses-CQkkUcwT.js +1 -0
- package/dist/esm/sdk/signerDomain-BhUTzDmF.js +1 -0
- package/dist/esm/sdk/signerLoader-By0IY24G.js +1 -0
- package/dist/esm/sdk/signerSlot-BQ1g5JNV.js +1 -0
- package/dist/esm/sdk/signingFlow-LUWrZi2d.js +2 -0
- package/dist/esm/sdk/signingSessionSeal-Mr2Xp44o.js +1 -0
- package/dist/esm/sdk/surface-measurement-reporter-OICExWKE.js +1 -0
- package/dist/esm/sdk/trace-M34pNGuF.js +1 -0
- package/dist/esm/sdk/transaction-activity-BbDod7ji.js +1 -0
- package/dist/esm/sdk/transactionReview-CBE5oH4c.js +1 -0
- package/dist/esm/sdk/transactionReviewAdmission-0ZgWs6q3.js +1 -0
- package/dist/esm/sdk/transactionState-9d7f3xVj.js +1 -0
- package/dist/esm/sdk/tx-confirm-ui.js +23 -204
- package/dist/esm/sdk/types-M7vxrYtJ.js +1 -0
- package/dist/esm/sdk/validation-dC1-_uyG.js +1 -0
- package/dist/esm/sdk/wallet-iframe-host-ecdsa.js +1 -13
- package/dist/esm/sdk/wallet-iframe-host-full.js +1 -6
- package/dist/esm/sdk/wallet-iframe-host-near.js +1 -13
- package/dist/esm/sdk/wallet-iframe-host-runtime.js +1 -4
- package/dist/esm/sdk/wallet-recovery-CcDZ1hMH.js +1 -0
- package/dist/esm/sdk/wallet-ui.css +1 -6134
- package/dist/esm/sdk/walletAuthority-CoWSeqvQ.js +1 -0
- package/dist/esm/sdk/walletCustodyEcdsaContinuity-B7xi7nwh.js +1 -0
- package/dist/esm/sdk/walletIframeIdentity-C0b0XMQF.js +1 -0
- package/dist/esm/sdk/walletRecoveryCommit-ljxVeo-d.js +1 -0
- package/dist/esm/sdk/walletRecoveryRotate-HztDcDaY.js +1 -0
- package/dist/esm/sdk/warmSessionHydration-BPGM0YRU.js +1 -0
- package/dist/esm/sdk/webauthnP256-qu06GNFm.js +1 -0
- package/dist/esm/sdk/webauthnPromptCoordinator-DO-qfECu.js +1 -0
- package/dist/esm/shared-ts/src/authorization/walletSessionIssuance.js +5 -8
- package/dist/esm/shared-ts/src/authorization/walletSignerActivationEquality.js +12 -0
- package/dist/esm/shared-ts/src/device-linking/committedSignerPackages.js +2 -5
- package/dist/esm/shared-ts/src/device-linking/delegatedActivationPlan.js +1 -5
- package/dist/esm/shared-ts/src/device-linking/ed25519ExportRoot.js +11 -15
- package/dist/esm/shared-ts/src/device-linking/parsers.js +41 -1
- package/dist/esm/shared-ts/src/device-linking/sourceContribution.js +6 -9
- package/dist/esm/shared-ts/src/near/actions.js +10 -1
- package/dist/esm/shared-ts/src/near/nearClient.js +0 -2
- package/dist/esm/shared-ts/src/passkey-custody/primitives.js +5 -1
- package/dist/esm/shared-ts/src/signing-lanes/evmFamilySigningKeySlotId.js +1 -1
- package/dist/esm/shared-ts/src/signing-lanes/index.js +1 -4
- package/dist/esm/shared-ts/src/signing-lanes/ownerContinuity.js +3 -8
- package/dist/esm/shared-ts/src/signing-lanes/participantDigest.js +0 -1
- package/dist/esm/shared-ts/src/signing-lanes/participants.js +1 -1
- package/dist/esm/shared-ts/src/signing-lanes/recordParsers.js +13 -17
- package/dist/esm/shared-ts/src/threshold/ecdsaDerivationRoleLocalBootstrap.js +0 -1
- package/dist/esm/shared-ts/src/threshold/participants.js +0 -1
- package/dist/esm/shared-ts/src/threshold/signingRootScope.js +4 -2
- package/dist/esm/shared-ts/src/utils/domainIds.js +1 -7
- package/dist/esm/shared-ts/src/utils/ecdsaKeyFactsInventory.js +2 -5
- package/dist/esm/shared-ts/src/utils/ecdsaServerTiming.js +0 -1
- package/dist/esm/shared-ts/src/utils/encoders.js +1 -1
- package/dist/esm/shared-ts/src/utils/errors.js +0 -1
- package/dist/esm/shared-ts/src/utils/exactKeys.js +17 -0
- package/dist/esm/shared-ts/src/utils/index.js +4 -5
- package/dist/esm/shared-ts/src/utils/registrationEstablishedSession.js +1 -1
- package/dist/esm/shared-ts/src/utils/registrationIds.js +1 -5
- package/dist/esm/shared-ts/src/utils/registrationIntent.js +2 -9
- package/dist/esm/shared-ts/src/utils/registrationSetupOperation.js +12 -0
- package/dist/esm/shared-ts/src/utils/registrationSignerPlan.js +3 -6
- package/dist/esm/shared-ts/src/utils/routerAbEcdsaDerivation.js +2 -3
- package/dist/esm/shared-ts/src/utils/routerAbEd25519Yao.js +1 -1
- package/dist/esm/shared-ts/src/utils/thresholdEcdsaChainTarget.js +9 -0
- package/dist/esm/shared-ts/src/utils/validation.js +0 -1
- package/dist/esm/shared-ts/src/utils/walletAuthAuthority.js +0 -1
- package/dist/esm/shared-ts/src/utils/walletCapabilityBindings.js +10 -1
- package/dist/esm/shared-ts/src/utils/walletManagementProtocol.js +6 -0
- package/dist/esm/shared-ts/src/wallet-recovery/index.js +1 -1
- package/dist/esm/shared-ts/src/wallet-recovery/recoveryCodeLocator.js +0 -1
- package/dist/esm/shared-ts/src/wallet-recovery/recoveryKeyId.js +0 -2
- package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryCommittedProjection.js +1 -4
- package/dist/esm/theme/base-styles.js +11 -11
- package/dist/esm/utils/deviceDetection.js +16 -1
- package/dist/esm/utils/menuItemBlink.js +24 -0
- package/dist/esm/utils/qrScanner.js +288 -0
- package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker.d.ts +12 -753
- package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker.js +126 -3701
- package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker_bg.wasm +0 -0
- package/dist/esm/wasm/router_ab_ecdsa_client/pkg/router_ab_ecdsa_client.d.ts +0 -42
- package/dist/esm/wasm/router_ab_ecdsa_client/pkg/router_ab_ecdsa_client.js +2 -106
- package/dist/esm/wasm/router_ab_ecdsa_client/pkg/router_ab_ecdsa_client_bg.wasm +0 -0
- package/dist/esm/wasm/router_ab_ed25519_yao_client/pkg/router_ab_ed25519_yao_client.d.ts +3 -158
- package/dist/esm/wasm/router_ab_ed25519_yao_client/pkg/router_ab_ed25519_yao_client.js +2 -452
- 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-DrsREojk.js +1 -0
- package/dist/public/sdk/EvmClient-DoxytQaJ.js +1 -0
- package/dist/public/sdk/NearClient-vJ65Wjrq.js +1 -0
- package/dist/public/sdk/NonceCoordinator-BBeadCSq.js +1 -0
- package/dist/public/sdk/accountIds-C3Ihsd2c.js +1 -0
- package/dist/public/sdk/accountLifecycle-EyfYPnuT.js +1 -0
- package/dist/public/sdk/actions-DZLxCcrU.js +1 -0
- package/dist/public/sdk/adapters-DtAyuoiA.js +2 -0
- package/dist/public/sdk/base-Xtd32asf.js +1 -0
- package/dist/public/sdk/base64-ojm5DKcF.js +1 -0
- package/dist/public/sdk/browser-CsOGMbMy.js +8 -0
- package/dist/public/sdk/bytes-t5S5mkat.js +1 -0
- package/dist/public/sdk/canonicalPrimitives-MPGET2cl.js +1 -0
- package/dist/public/sdk/canonicalSignerErrorCode-C0hh_SVi.js +1 -0
- package/dist/public/sdk/capabilityKinds-XaXXiD2B.js +1 -0
- package/dist/public/sdk/chains-yAls2d9X.js +1 -0
- package/dist/public/sdk/challengeDelivery-cAsaUC6U.js +1 -0
- package/dist/public/sdk/chunk-dVx5-UGu.js +1 -0
- package/dist/public/sdk/configHelpers-CseiVoZD.js +1 -0
- package/dist/public/sdk/csp-stylesheet-B1fAhrGB.js +2 -0
- package/dist/public/sdk/defaultConfigs-CWpApkMq.js +1 -0
- package/dist/public/sdk/display-jK7_hYho.js +1 -0
- package/dist/public/sdk/domainIds-GDzjOs6i.js +1 -0
- package/dist/public/sdk/ecdsaCapabilityManifest-CHFu-QrV.js +1 -0
- package/dist/public/sdk/ecdsaChainTarget-CRcRR78w.js +1 -0
- package/dist/public/sdk/ecdsaPresignLifecycle-CQnCxSlq.js +1 -0
- package/dist/public/sdk/ecdsaPresignPoolIdentity-Ci-ovDlv.js +1 -0
- package/dist/public/sdk/ecdsaWalletRecords-Cm1DdexN.js +1 -0
- package/dist/public/sdk/enrichDisplayModelWithAbi-CR-4ebuU.js +1 -0
- package/dist/public/sdk/enrichDisplayModelWithAbi-CwHKFqF4.js +569 -0
- package/dist/public/sdk/errors-DfbnsXjO.js +1 -0
- package/dist/public/sdk/events-BJyVcnsn.js +1 -0
- package/dist/public/sdk/evmCryptoWasm-CwEXiLrC.js +1 -0
- package/dist/public/sdk/evmFamilyEcdsaIdentity-Br3iFdQx.js +1 -0
- package/dist/public/sdk/exactSessionState-CjD8gekO.js +210 -0
- package/dist/public/sdk/exactSigningLaneIdentity-olheZx_n.js +1 -0
- package/dist/public/sdk/executeWorkerOperation-CrFf3FkL.js +1 -0
- package/dist/public/sdk/export-viewer-host-jo7h_0wl.js +1 -0
- package/dist/public/sdk/helpers-D4QckQhq.js +1 -0
- package/dist/public/sdk/host-BAqOYnju.js +1 -0
- package/dist/public/sdk/intentDigest-CB6zy3lN.js +1 -0
- package/dist/public/sdk/jsonRpc-C85RYR0A.js +1 -0
- package/dist/public/sdk/jsxRuntime.module-CoHsKD_3.js +1 -0
- package/dist/public/sdk/keccak-zexutGfG.js +1 -0
- package/dist/public/sdk/keyMaterialBrands-uVZHfAh3.js +1 -0
- package/dist/public/sdk/localOnly-DBQRG6Qh.js +1 -0
- package/dist/public/sdk/messages-Cv2j4SKI.js +1 -0
- package/dist/public/sdk/mountExportPrivateKeySurface-G7Z_9JMQ.js +1 -0
- package/dist/public/sdk/mountRecoveryCodeBackupSurface-BBCTaQsu.js +2 -0
- package/dist/public/sdk/nearEd25519YaoMaterialActivation-DQIw8ho3.js +1 -0
- package/dist/public/sdk/nearEd25519YaoSigningPreparation-Bp_CvWRz.js +1 -0
- package/dist/public/sdk/nearRpcResults--cBcfmp4.js +1 -0
- package/dist/public/sdk/nonceLaneKeys-BBYi4g51.js +1 -0
- package/dist/public/sdk/normalization-BGPR6osg.js +1 -0
- package/dist/public/sdk/operationFingerprint-5-wH2Ht8.js +1 -0
- package/dist/public/sdk/operationFingerprint-DtQb0pdp.js +1 -0
- package/dist/public/sdk/passkey-custody-LP4UTFbn.js +1 -0
- package/dist/public/sdk/pendingWalletRecoveryCodeBackup-BNk4ebsY.js +1 -0
- package/dist/public/sdk/prfCache-Mbo7_USg.js +1 -0
- package/dist/public/sdk/profileAccountProjection-DHCaMtOu.js +1 -0
- package/dist/public/sdk/promptText-s8TQ6ckX.js +1 -0
- package/dist/public/sdk/recovery-entrypoint-DkT8sFO5.js +1 -0
- package/dist/public/sdk/registration-Btozh7uh.js +1 -0
- package/dist/public/sdk/registration-CSAG_h4Y.js +1 -0
- package/dist/public/sdk/registrationAccounts-DIeEVy6W.js +1 -0
- package/dist/public/sdk/registrationIds-BIel5S0i.js +1 -0
- package/dist/public/sdk/registrationIntent-DV1GYZ3K.js +1 -0
- package/dist/public/sdk/registrationPreparationPreload-vOCqNuG4.js +1 -0
- package/dist/public/sdk/registrationSignerPlan-FzD3TwxB.js +1 -0
- package/dist/public/sdk/relayerHttp-DaPeS929.js +1 -0
- package/dist/public/sdk/routePlan-B_KJaPtm.js +1 -0
- package/dist/public/sdk/router-Dd3fFHk3.js +1 -0
- package/dist/public/sdk/routerAbNormalSigning-D_fHjq5l.js +1 -0
- package/dist/public/sdk/router_ab_ed25519_yao_client_bg.wasm +0 -0
- package/dist/public/sdk/runtime-auth-B2M91rSx.js +1 -0
- package/dist/public/sdk/runtime-device-link-ojjPSRaG.js +1 -0
- package/dist/public/sdk/runtime-ecdsa-tempo-CE4JLgmn.js +1 -0
- package/dist/public/sdk/runtime-email-otp-DDwtKVAe.js +1 -0
- package/dist/public/sdk/runtime-export-JXYk8sQ-.js +1 -0
- package/dist/public/sdk/runtime-near-BB8AG6dV.js +1 -0
- package/dist/public/sdk/runtime-preferences-DKFZYccW.js +1 -0
- package/dist/public/sdk/runtime-recovery-C_XjsDBg.js +1 -0
- package/dist/public/sdk/runtime-recovery-codes-CWp839mH.js +1 -0
- package/dist/public/sdk/runtimeContext-BpObgzbj.js +6 -0
- package/dist/public/sdk/runtimeLoader-DjgBf_yF.js +1 -0
- package/dist/public/sdk/sdkSentEvents-_RGAEeld.js +1 -0
- package/dist/public/sdk/secp256k1-B_6W9QDJ.js +1 -0
- package/dist/public/sdk/secureRandomId-CTdlJ5Mx.js +1 -0
- package/dist/public/sdk/sessionPolicy-CNVK7nJ6.js +1 -0
- package/dist/public/sdk/shared-j_KsFbCT.js +1 -0
- package/dist/public/sdk/signEvmFamily-CcLVBm0f.js +1 -0
- package/dist/public/sdk/signEvmFamilyWithUiConfirmForTempo-DgTbh6jX.js +1 -0
- package/dist/public/sdk/signEvmWithUiConfirm-ChreN7aZ.js +1 -0
- package/dist/public/sdk/signNear-mWbTE2Dl.js +1 -0
- package/dist/public/sdk/signatureUses-CQkkUcwT.js +1 -0
- package/dist/public/sdk/signerDomain-BhUTzDmF.js +1 -0
- package/dist/public/sdk/signerLoader-By0IY24G.js +1 -0
- package/dist/public/sdk/signerSlot-BQ1g5JNV.js +1 -0
- package/dist/public/sdk/signingFlow-LUWrZi2d.js +2 -0
- package/dist/public/sdk/signingSessionSeal-Mr2Xp44o.js +1 -0
- package/dist/public/sdk/surface-measurement-reporter-OICExWKE.js +1 -0
- package/dist/public/sdk/trace-M34pNGuF.js +1 -0
- package/dist/public/sdk/transaction-activity-BbDod7ji.js +1 -0
- package/dist/public/sdk/transactionReview-CBE5oH4c.js +1 -0
- package/dist/public/sdk/transactionReviewAdmission-0ZgWs6q3.js +1 -0
- package/dist/public/sdk/transactionState-9d7f3xVj.js +1 -0
- package/dist/public/sdk/tx-confirm-ui.js +23 -204
- package/dist/public/sdk/types-M7vxrYtJ.js +1 -0
- package/dist/public/sdk/validation-dC1-_uyG.js +1 -0
- package/dist/public/sdk/wallet-iframe-host-ecdsa.js +1 -13
- package/dist/public/sdk/wallet-iframe-host-full.js +1 -6
- package/dist/public/sdk/wallet-iframe-host-near.js +1 -13
- package/dist/public/sdk/wallet-iframe-host-runtime.js +1 -4
- package/dist/public/sdk/wallet-recovery-CcDZ1hMH.js +1 -0
- package/dist/public/sdk/wallet-ui.css +1 -6134
- package/dist/public/sdk/walletAuthority-CoWSeqvQ.js +1 -0
- package/dist/public/sdk/walletCustodyEcdsaContinuity-B7xi7nwh.js +1 -0
- package/dist/public/sdk/walletIframeIdentity-C0b0XMQF.js +1 -0
- package/dist/public/sdk/walletRecoveryCommit-ljxVeo-d.js +1 -0
- package/dist/public/sdk/walletRecoveryRotate-HztDcDaY.js +1 -0
- package/dist/public/sdk/warmSessionHydration-BPGM0YRU.js +1 -0
- package/dist/public/sdk/webauthnP256-qu06GNFm.js +1 -0
- package/dist/public/sdk/webauthnPromptCoordinator-DO-qfECu.js +1 -0
- package/dist/public/sdk/workers/device-linking-key.worker.js +567 -2131
- package/dist/public/sdk/workers/ecdsa-derivation-client.worker.js +1529 -2683
- package/dist/public/sdk/workers/ecdsa-online-client.worker.js +1 -273
- package/dist/public/sdk/workers/ecdsa-presign-client.worker.js +59 -346
- package/dist/public/sdk/workers/email-otp.worker.js +307 -2185
- package/dist/public/sdk/workers/email_otp_runtime_bg.wasm +0 -0
- package/dist/public/sdk/workers/evm-crypto.worker.js +0 -188
- package/dist/public/sdk/workers/evm_crypto.wasm +0 -0
- package/dist/public/sdk/workers/evm_crypto_bg.wasm +0 -0
- package/dist/public/sdk/workers/near-signer.worker.js +16 -718
- package/dist/public/sdk/workers/near_signer.wasm +0 -0
- package/dist/public/sdk/workers/passkey-confirm.worker.js +0 -134
- package/dist/public/sdk/workers/passkey-mpc-export.worker.js +149 -506
- package/dist/public/sdk/workers/passkey-mpc-session.worker.js +0 -134
- package/dist/public/sdk/workers/router_ab_ecdsa_client_bg.wasm +0 -0
- package/dist/public/sdk/workers/router_ab_ed25519_yao_client_bg.wasm +0 -0
- package/dist/public/sdk/workers/shamir3pass.worker.js +0 -134
- package/dist/public/sdk/workers/shamir3pass_runtime_bg.wasm +0 -0
- package/dist/public/sdk/workers/tempo-signer.worker.js +0 -134
- package/dist/public/sdk/workers/tempo_signer.wasm +0 -0
- package/dist/public/sdk/workers/tempo_signer_bg.wasm +0 -0
- package/dist/public/sdk/workers/wallet-custody-ceremony.worker.js +136 -1636
- package/dist/public/sdk/workers/wallet_custody_ceremony.js +0 -14
- package/dist/public/sdk/workers/wallet_custody_ceremony_bg.wasm +0 -0
- package/dist/public/sdk/workers/wasm_signer_worker_bg.wasm +0 -0
- package/dist/public/wallet-assets.manifest.json +234 -258
- package/dist/public/wallet-service/index.html +4 -4
- package/dist/types/shared-ts/src/authorization/capabilityKinds.d.ts +0 -4
- package/dist/types/shared-ts/src/authorization/delegatedAuthority.d.ts +2 -1
- package/dist/types/shared-ts/src/authorization/walletSessionIssuance.d.ts +9 -2
- package/dist/types/shared-ts/src/authorization/walletSignerActivationEquality.d.ts +4 -0
- package/dist/types/shared-ts/src/device-linking/committedSignerPackages.d.ts +3 -4
- package/dist/types/shared-ts/src/device-linking/contracts.d.ts +6 -63
- package/dist/types/shared-ts/src/device-linking/sourceContribution.d.ts +2 -0
- package/dist/types/shared-ts/src/passkey-custody/custodyEnvelope.d.ts +5 -12
- package/dist/types/shared-ts/src/passkey-custody/primitives.d.ts +9 -0
- package/dist/types/shared-ts/src/signing-lanes/evmFamilySigningKeySlotId.d.ts +0 -2
- package/dist/types/shared-ts/src/signing-lanes/execution.d.ts +11 -12
- package/dist/types/shared-ts/src/signing-lanes/ids.d.ts +3 -17
- package/dist/types/shared-ts/src/signing-lanes/index.d.ts +0 -4
- package/dist/types/shared-ts/src/signing-lanes/ownerContinuity.d.ts +0 -1
- package/dist/types/shared-ts/src/signing-lanes/participantDigest.d.ts +0 -18
- package/dist/types/shared-ts/src/signing-lanes/participants.d.ts +6 -35
- package/dist/types/shared-ts/src/signing-lanes/rotation.d.ts +6 -845
- package/dist/types/shared-ts/src/tenant-root/tenantRootIdentifier.d.ts +3 -0
- package/dist/types/shared-ts/src/tenant-root/tenantRootOperationRecord.d.ts +2 -1
- package/dist/types/shared-ts/src/threshold/ecdsaDerivationRoleLocalBootstrap.d.ts +6 -0
- package/dist/types/shared-ts/src/threshold/keyMaterialBrands.d.ts +0 -10
- package/dist/types/shared-ts/src/threshold/participants.d.ts +1 -1
- package/dist/types/shared-ts/src/threshold/signingRootScope.d.ts +1 -0
- package/dist/types/shared-ts/src/utils/addWalletAuthMethod.d.ts +1 -133
- package/dist/types/shared-ts/src/utils/addWalletAuthMethod.typecheck.d.ts +4 -18
- package/dist/types/shared-ts/src/utils/domainIds.d.ts +0 -12
- package/dist/types/shared-ts/src/utils/ecdsaKeyFactsInventory.d.ts +2 -11
- package/dist/types/shared-ts/src/utils/eip1559TxWasmJson.d.ts +16 -0
- package/dist/types/shared-ts/src/utils/emailOtpDomain.d.ts +2 -0
- package/dist/types/shared-ts/src/utils/errors.d.ts +0 -4
- package/dist/types/shared-ts/src/utils/exactKeys.d.ts +11 -0
- package/dist/types/shared-ts/src/utils/failure.d.ts +12 -0
- package/dist/types/shared-ts/src/utils/jsonRpc.d.ts +3 -4
- package/dist/types/shared-ts/src/utils/near.d.ts +0 -20
- package/dist/types/shared-ts/src/utils/nearRpcResults.d.ts +1 -0
- package/dist/types/shared-ts/src/utils/normalize.d.ts +0 -2
- package/dist/types/shared-ts/src/utils/registrationAuthMethodInput.d.ts +3 -8
- package/dist/types/shared-ts/src/utils/registrationSetupOperation.d.ts +3 -0
- package/dist/types/shared-ts/src/utils/registrationSignerPlan.d.ts +7 -19
- package/dist/types/shared-ts/src/utils/routerAbEcdsaDerivation.d.ts +3 -1
- package/dist/types/shared-ts/src/utils/routerAbEd25519Yao.d.ts +1 -0
- package/dist/types/shared-ts/src/utils/routerAbEd25519YaoDigests.d.ts +3 -4
- package/dist/types/shared-ts/src/utils/routerAbNormalSigningIdentity.d.ts +30 -8
- package/dist/types/shared-ts/src/utils/routerApiKeyAuth.d.ts +2 -0
- package/dist/types/shared-ts/src/utils/signingSessionSeal.d.ts +10 -11
- package/dist/types/shared-ts/src/utils/thresholdEcdsaChainTarget.d.ts +25 -0
- package/dist/types/shared-ts/src/utils/validation.d.ts +1 -3
- package/dist/types/shared-ts/src/utils/variant.d.ts +18 -0
- package/dist/types/shared-ts/src/utils/walletAuthMethodRecord.d.ts +3 -6
- package/dist/types/shared-ts/src/utils/walletCapabilityBindings.d.ts +0 -1
- package/dist/types/shared-ts/src/utils/walletManagementProtocol.d.ts +3 -0
- package/dist/types/shared-ts/src/utils/webauthnDeviceInfo.d.ts +4 -2
- package/dist/types/shared-ts/src/utils/wireSchema.d.ts +0 -2
- package/dist/types/shared-ts/src/wallet-recovery/backupAcknowledgement.d.ts +0 -1
- package/dist/types/shared-ts/src/wallet-recovery/recoveryCodeReservation.d.ts +1 -10
- package/dist/types/shared-ts/src/wallet-recovery/recoveryCodes.d.ts +1 -3
- package/dist/types/shared-ts/src/wallet-recovery/recoveryEnvelopes.d.ts +3 -16
- package/dist/types/shared-ts/src/wallet-recovery/recoveryKeyId.d.ts +5 -21
- package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryPreparation.d.ts +15 -0
- package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryTarget.d.ts +3 -4
- package/dist/types/wallet/build-paths.d.ts +1 -2
- package/dist/types/wallet/src/SeamsWeb/SeamsWeb.d.ts +2 -0
- package/dist/types/wallet/src/SeamsWeb/operations/auth/scheduleLinkedDevicePresignaturePrefill.d.ts +11 -0
- package/dist/types/wallet/src/SeamsWeb/operations/auth/walletAuth.d.ts +2 -1
- package/dist/types/wallet/src/SeamsWeb/operations/auth/walletUnlockEcdsaSubject.d.ts +1 -1
- package/dist/types/wallet/src/SeamsWeb/operations/auth/walletUnlockSubject.d.ts +3 -20
- package/dist/types/wallet/src/SeamsWeb/operations/authMethods/emailOtp/challenge.d.ts +0 -4
- package/dist/types/wallet/src/SeamsWeb/operations/authMethods/emailOtp/walletActivation.d.ts +3 -4
- package/dist/types/wallet/src/SeamsWeb/operations/devices/deviceLinkingAuthorityInstallation.d.ts +2 -10
- package/dist/types/wallet/src/SeamsWeb/operations/devices/deviceLinkingResume.d.ts +0 -1
- package/dist/types/wallet/src/SeamsWeb/operations/devices/linkDeviceFlow.d.ts +2 -0
- package/dist/types/wallet/src/SeamsWeb/operations/registration/pendingRegistrationRecovery.d.ts +0 -10
- package/dist/types/wallet/src/SeamsWeb/operations/session/thresholdEcdsaProvisioning.d.ts +1 -2
- package/dist/types/wallet/src/SeamsWeb/operations/tempo/executeEvmFamilyTransaction.d.ts +1 -1
- package/dist/types/wallet/src/SeamsWeb/publicApi/types.d.ts +7 -16
- package/dist/types/wallet/src/SeamsWeb/signingSurface/ports.d.ts +0 -2
- package/dist/types/wallet/src/SeamsWeb/signingSurface/types.d.ts +1 -1
- package/dist/types/wallet/src/SeamsWeb/walletIframe/client/surface/domain.d.ts +0 -8
- package/dist/types/wallet/src/SeamsWeb/walletIframe/client/transport/iframe-transport-handshake.d.ts +1 -2
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/auth-menu/domain.d.ts +9 -0
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/hostedWalletSeamsSession.d.ts +0 -1
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/restoredSessionPresignaturePrefill.d.ts +2 -1
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/ui/auth-menu/AuthMenuFooter.d.ts +17 -0
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/ui/auth-menu/AuthMenuSurface.d.ts +12 -5
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/ui/auth-menu/icons.d.ts +15 -0
- package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/exactSessionReconciliation.d.ts +3 -3
- package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/messages.d.ts +5 -15
- package/dist/types/wallet/src/advanced.d.ts +1 -1
- package/dist/types/wallet/src/core/accountData/near/keyMaterial.d.ts +3 -5
- package/dist/types/wallet/src/core/browser/walletIframe/events.d.ts +0 -2
- package/dist/types/wallet/src/core/indexedDB/index.d.ts +3 -5
- package/dist/types/wallet/src/core/indexedDB/passkeyClientDB.types.d.ts +2 -38
- package/dist/types/wallet/src/core/indexedDB/pendingWalletRecoveryCommit.d.ts +1 -4
- package/dist/types/wallet/src/core/indexedDB/pendingWalletRegistrationCommit.d.ts +3 -4
- package/dist/types/wallet/src/core/indexedDB/schemaNames.d.ts +0 -22
- package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestLookups.d.ts +7 -12
- package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestRecords.d.ts +1 -1
- package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestStore.d.ts +1 -1
- package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/pendingWalletRecoveryCodeBackup.d.ts +0 -1
- package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/registrationSetup.d.ts +42 -0
- package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/signingSessionSeals.d.ts +1 -5
- package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/walletSessionAuthorizationStore.d.ts +8 -7
- package/dist/types/wallet/src/core/indexedDB/unifiedIndexedDBManager.d.ts +1 -0
- package/dist/types/wallet/src/core/platform/browser/createBrowserPlatformRuntime.d.ts +1 -6
- package/dist/types/wallet/src/core/platform/ecdsaRoleLocalRecords.d.ts +7 -51
- package/dist/types/wallet/src/core/platform/http.d.ts +3 -5
- package/dist/types/wallet/src/core/platform/index.d.ts +4 -4
- package/dist/types/wallet/src/core/platform/ports.d.ts +4 -58
- package/dist/types/wallet/src/core/platform/runtime.d.ts +0 -2
- package/dist/types/wallet/src/core/platform/secretSources.d.ts +0 -29
- package/dist/types/wallet/src/core/rpcClients/near/NearClient.d.ts +1 -1
- package/dist/types/wallet/src/core/rpcClients/near/NearRpcError.d.ts +1 -2
- package/dist/types/wallet/src/core/rpcClients/relayer/ownerWalletExecutionLanePreflight.d.ts +2 -11
- package/dist/types/wallet/src/core/rpcClients/relayer/passkeyCustodyEnvelope.d.ts +0 -6
- package/dist/types/wallet/src/core/rpcClients/relayer/thresholdEcdsa.d.ts +2 -9
- package/dist/types/wallet/src/core/rpcClients/relayer/walletRecoveryPrepare.d.ts +2 -14
- package/dist/types/wallet/src/core/rpcClients/relayer/walletRegistration.d.ts +2 -19
- package/dist/types/wallet/src/core/signingEngine/assembly/ports/shared.d.ts +0 -1
- package/dist/types/wallet/src/core/signingEngine/assembly/ports/warmSigning.d.ts +0 -2
- package/dist/types/wallet/src/core/signingEngine/assembly/warmup.d.ts +0 -1
- package/dist/types/wallet/src/core/signingEngine/chains/near/nearSignerWasm.d.ts +0 -10
- package/dist/types/wallet/src/core/signingEngine/chains/near/payloads.d.ts +2 -10
- package/dist/types/wallet/src/core/signingEngine/flows/recovery/ecdsaDerivationExport.d.ts +3 -4
- package/dist/types/wallet/src/core/signingEngine/flows/recovery/ecdsaExportFlow.d.ts +4 -8
- package/dist/types/wallet/src/core/signingEngine/flows/recovery/keyExportConfirmation.d.ts +0 -15
- package/dist/types/wallet/src/core/signingEngine/flows/recovery/keyExportFlow.d.ts +7 -6
- package/dist/types/wallet/src/core/signingEngine/flows/registration/accountLifecycle.d.ts +2 -21
- package/dist/types/wallet/src/core/signingEngine/flows/registration/public.d.ts +1 -9
- package/dist/types/wallet/src/core/signingEngine/flows/registration/services/passkeyEd25519YaoAddSigner.d.ts +0 -2
- package/dist/types/wallet/src/core/signingEngine/flows/shared/signingStateMachine.d.ts +0 -6
- package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/emailOtpSigningSession.d.ts +1 -1
- package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/freshAuthRetryPolicy.d.ts +3 -4
- package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/nonceResolution.d.ts +3 -4
- package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/readySecp256k1Material.d.ts +7 -18
- package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/signers/ecdsaDerivationClientSigningMaterialSource.d.ts +1 -0
- package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/signingFlowRuntime.d.ts +10 -5
- package/dist/types/wallet/src/core/signingEngine/flows/signNear/shared/ed25519YaoCapabilityResolution.d.ts +4 -14
- package/dist/types/wallet/src/core/signingEngine/flows/signNear/shared/ed25519YaoNormalSigning.d.ts +0 -5
- package/dist/types/wallet/src/core/signingEngine/flows/signNear/shared/operationStepUpPreparation.d.ts +3 -5
- package/dist/types/wallet/src/core/signingEngine/flows/signNear/shared/signingMaterials.d.ts +0 -4
- package/dist/types/wallet/src/core/signingEngine/flows/signNear/shared/signingSessionAuthMode.d.ts +0 -9
- package/dist/types/wallet/src/core/signingEngine/flows/signNear/signNep413.d.ts +3 -7
- package/dist/types/wallet/src/core/signingEngine/interfaces/index.d.ts +0 -1
- package/dist/types/wallet/src/core/signingEngine/interfaces/near.d.ts +3 -4
- package/dist/types/wallet/src/core/signingEngine/interfaces/operationDeps.d.ts +3 -5
- package/dist/types/wallet/src/core/signingEngine/interfaces/operationStepUpPreparation.d.ts +3 -5
- package/dist/types/wallet/src/core/signingEngine/nonce/NonceCoordinator.d.ts +1 -1
- package/dist/types/wallet/src/core/signingEngine/nonce/nearTransactionReadiness.d.ts +3 -5
- package/dist/types/wallet/src/core/signingEngine/nonce/nonceTypes.d.ts +2 -11
- package/dist/types/wallet/src/core/signingEngine/routerAb/ecdsaDerivation/clientCeremony.d.ts +5 -22
- package/dist/types/wallet/src/core/signingEngine/routerAb/ecdsaDerivation/poolFillRoutes.d.ts +3 -14
- package/dist/types/wallet/src/core/signingEngine/routerAb/ecdsaDerivation/signingMaterialRef.d.ts +0 -3
- package/dist/types/wallet/src/core/signingEngine/session/authority/authorityOperationResolver.d.ts +1 -24
- package/dist/types/wallet/src/core/signingEngine/session/availability/persistedAvailableSigningLanes.d.ts +1 -1
- package/dist/types/wallet/src/core/signingEngine/session/availability/readiness.d.ts +0 -2
- package/dist/types/wallet/src/core/signingEngine/session/emailOtp/EmailOtpWalletSessionCoordinator.d.ts +37 -14
- package/dist/types/wallet/src/core/signingEngine/session/emailOtp/ecdsaLogin.d.ts +0 -3
- package/dist/types/wallet/src/core/signingEngine/session/emailOtp/ecdsaPublication.d.ts +3 -5
- package/dist/types/wallet/src/core/signingEngine/session/emailOtp/ecdsaRecovery.d.ts +0 -5
- package/dist/types/wallet/src/core/signingEngine/session/emailOtp/ed25519ExportContext.d.ts +2 -7
- package/dist/types/wallet/src/core/signingEngine/session/emailOtp/secretEscrow.d.ts +0 -1
- package/dist/types/wallet/src/core/signingEngine/session/emailOtp/walletUnlock.d.ts +6 -15
- package/dist/types/wallet/src/core/signingEngine/session/identity/clientSessionPersistenceState.d.ts +0 -6
- package/dist/types/wallet/src/core/signingEngine/session/identity/emailOtpEcdsaDerivationIdentity.d.ts +0 -3
- package/dist/types/wallet/src/core/signingEngine/session/identity/evmFamilyEcdsaIdentity.d.ts +3 -8
- package/dist/types/wallet/src/core/signingEngine/session/identity/exactSigningLaneIdentity.d.ts +0 -3
- package/dist/types/wallet/src/core/signingEngine/session/identity/exactWalletSessionCredential.d.ts +3 -7
- package/dist/types/wallet/src/core/signingEngine/session/identity/exactWalletSessionReader.d.ts +3 -6
- package/dist/types/wallet/src/core/signingEngine/session/identity/laneIdentity.d.ts +5 -14
- package/dist/types/wallet/src/core/signingEngine/session/identity/signingLaneAuthBinding.d.ts +3 -5
- package/dist/types/wallet/src/core/signingEngine/session/identity/walletUnlockSubject.d.ts +0 -8
- package/dist/types/wallet/src/core/signingEngine/session/keyMaterialBrands.d.ts +1 -4
- package/dist/types/wallet/src/core/signingEngine/session/material/activeEcdsaCapabilityRuntime.d.ts +5 -10
- package/dist/types/wallet/src/core/signingEngine/session/material/activeWalletAuthorityEcdsaRuntime.d.ts +4 -7
- package/dist/types/wallet/src/core/signingEngine/session/material/capabilityPreparationResult.d.ts +3 -22
- package/dist/types/wallet/src/core/signingEngine/session/material/ecdsaCapabilityHydration.d.ts +3 -4
- package/dist/types/wallet/src/core/signingEngine/session/material/ecdsaRoleLocalMaterialResolver.d.ts +0 -3
- package/dist/types/wallet/src/core/signingEngine/session/material/ecdsaSealedRuntime.d.ts +3 -4
- package/dist/types/wallet/src/core/signingEngine/session/material/ecdsaSigningCapability.d.ts +5 -0
- package/dist/types/wallet/src/core/signingEngine/session/material/nearEd25519YaoSigningPreparation.d.ts +5 -10
- package/dist/types/wallet/src/core/signingEngine/session/operationState/authorizationAdmission.d.ts +4 -9
- package/dist/types/wallet/src/core/signingEngine/session/operationState/preparedOperation.d.ts +0 -2
- package/dist/types/wallet/src/core/signingEngine/session/operationState/types.d.ts +3 -5
- package/dist/types/wallet/src/core/signingEngine/session/passkey/ecdsaBootstrap.d.ts +3 -4
- package/dist/types/wallet/src/core/signingEngine/session/passkey/ecdsaSessionProvision.d.ts +3 -4
- package/dist/types/wallet/src/core/signingEngine/session/passkey/ed25519YaoLocalMaterial.d.ts +0 -1
- package/dist/types/wallet/src/core/signingEngine/session/passkey/ed25519YaoWarmRecovery.d.ts +0 -2
- package/dist/types/wallet/src/core/signingEngine/session/passkey/unlockEcdsaWarmupPlanner.d.ts +7 -25
- package/dist/types/wallet/src/core/signingEngine/session/persistence/ecdsaRoleLocalRecords.d.ts +1 -10
- package/dist/types/wallet/src/core/signingEngine/session/persistence/sealedSessionRecords.d.ts +2 -2
- package/dist/types/wallet/src/core/signingEngine/session/persistence/sealedSessionTransportAuth.d.ts +0 -5
- package/dist/types/wallet/src/core/signingEngine/session/postconditions/runtimePostconditions.d.ts +0 -2
- package/dist/types/wallet/src/core/signingEngine/session/routerAbSigningWalletSession.d.ts +1 -1
- package/dist/types/wallet/src/core/signingEngine/session/sealedRecovery/sealedRecovery.types.d.ts +3 -4
- package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/capabilityReaderCore.d.ts +3 -16
- package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/ecdsaProvisionPlan.d.ts +0 -105
- package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/ed25519SealedSessionRuntime.d.ts +6 -26
- package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/persistencePorts.d.ts +3 -4
- package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/public.d.ts +0 -1
- package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/routerAbWalletSessionCredential.d.ts +0 -12
- package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/transitions.d.ts +0 -2
- package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/types.typecheck.d.ts +1 -10
- package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/channel/confirmTypes.d.ts +11 -36
- package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/methodRunners.d.ts +1 -5
- package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/otpPrompt/authLane.d.ts +5 -8
- package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/passkeyPrompt/touchIdPrompt.d.ts +4 -7
- package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/passkeyPrompt/webauthnPromptCoordinator.d.ts +3 -9
- package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/requireStepUpAuth.d.ts +1 -19
- package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/types.d.ts +7 -32
- package/dist/types/wallet/src/core/signingEngine/threshold/commitQueueShared.d.ts +10 -10
- package/dist/types/wallet/src/core/signingEngine/threshold/crypto/ecdsaDerivationClientWasm.d.ts +1 -1
- package/dist/types/wallet/src/core/signingEngine/threshold/crypto/ed25519YaoLaneWasm.d.ts +1 -15
- package/dist/types/wallet/src/core/signingEngine/threshold/ecdsa/activation.d.ts +0 -4
- package/dist/types/wallet/src/core/signingEngine/threshold/ecdsa/bootstrapSession.d.ts +3 -8
- package/dist/types/wallet/src/core/signingEngine/threshold/ecdsa/signingQueue.d.ts +1 -7
- package/dist/types/wallet/src/core/signingEngine/threshold/ed25519/commitQueue.d.ts +1 -6
- package/dist/types/wallet/src/core/signingEngine/threshold/ed25519/connectSession.d.ts +0 -1
- package/dist/types/wallet/src/core/signingEngine/threshold/ed25519/walletSession.d.ts +6 -36
- package/dist/types/wallet/src/core/signingEngine/threshold/ed25519/yaoClient.d.ts +1 -8
- package/dist/types/wallet/src/core/signingEngine/threshold/ed25519/yaoPublicCapabilityReferences.d.ts +3 -4
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/handlers/flows/requestRegistrationCredentialConfirmation.d.ts +1 -4
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/ExportPrivateKeySurface.d.ts +5 -9
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/transaction-display/abi/abiDecode.d.ts +0 -1
- package/dist/types/wallet/src/core/signingEngine/walletCustody/emailOtpLink.d.ts +0 -1
- package/dist/types/wallet/src/core/signingEngine/walletCustody/openCustodyCache.d.ts +0 -3
- package/dist/types/wallet/src/core/signingEngine/walletCustody/passkeyLink.d.ts +0 -3
- package/dist/types/wallet/src/core/signingEngine/walletCustody/registrationCeremony.d.ts +0 -1
- package/dist/types/wallet/src/core/signingEngine/webauthnAuth/walletOriginWebAuthn.d.ts +8 -0
- package/dist/types/wallet/src/core/signingEngine/workerManager/SignerWorkerManager.d.ts +0 -2
- package/dist/types/wallet/src/core/signingEngine/workerManager/ecdsaClientWorkerChannels.d.ts +0 -8
- package/dist/types/wallet/src/core/signingEngine/workerManager/ecdsaPresignLifecycle.d.ts +5 -16
- package/dist/types/wallet/src/core/signingEngine/workerManager/validation.d.ts +1 -1
- package/dist/types/wallet/src/core/signingEngine/workerManager/workerTypes.d.ts +9 -109
- package/dist/types/wallet/src/core/signingEngine/workerManager/workers/device-linking-key/requests.d.ts +0 -5
- package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/crypto.d.ts +2 -12
- package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/custodyRestore.d.ts +0 -10
- package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/otpVerification.d.ts +0 -1
- package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/payloadParsing.d.ts +0 -2
- package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/unlock.d.ts +0 -1
- package/dist/types/wallet/src/core/signingEngine/workerManager/workers/near-signer.worker.d.ts +3 -31
- package/dist/types/wallet/src/core/types/accountIds.d.ts +1 -1
- package/dist/types/wallet/src/core/types/index.d.ts +0 -18
- package/dist/types/wallet/src/core/types/linkDevice.d.ts +3 -18
- package/dist/types/wallet/src/core/types/sdkPublicResults.d.ts +5 -18
- package/dist/types/wallet/src/core/types/sdkSentEvents.d.ts +5 -23
- package/dist/types/wallet/src/core/types/seams.d.ts +17 -71
- package/dist/types/wallet/src/core/types/secure-confirm-worker.d.ts +0 -5
- package/dist/types/wallet/src/core/types/signer-worker.d.ts +75 -134
- package/dist/types/wallet/src/externalEvm/types.d.ts +5 -12
- package/dist/types/wallet/src/react/components/AccountMenuButton/Toggle.d.ts +0 -15
- package/dist/types/wallet/src/react/components/AccountMenuButton/icons/GlobeIcon.d.ts +1 -4
- package/dist/types/wallet/src/react/components/AccountMenuButton/icons/KeyIcon.d.ts +1 -4
- package/dist/types/wallet/src/react/components/AccountMenuButton/icons/LaptopIcon.d.ts +1 -4
- package/dist/types/wallet/src/react/components/AccountMenuButton/icons/LinkIcon.d.ts +1 -4
- package/dist/types/wallet/src/react/components/AccountMenuButton/icons/LockIcon.d.ts +1 -4
- package/dist/types/wallet/src/react/components/AccountMenuButton/icons/MailIcon.d.ts +1 -4
- package/dist/types/wallet/src/react/components/AccountMenuButton/icons/RecoveryCodesIcon.d.ts +1 -4
- package/dist/types/wallet/src/react/components/AccountMenuButton/icons/ScanIcon.d.ts +1 -4
- package/dist/types/wallet/src/react/components/AccountMenuButton/icons/SlidersIcon.d.ts +1 -4
- package/dist/types/wallet/src/react/components/AccountMenuButton/icons/SmartphoneIcon.d.ts +1 -4
- package/dist/types/wallet/src/react/components/AccountMenuButton/icons/lucideIcon.d.ts +5 -0
- package/dist/types/wallet/src/react/components/theme/design-tokens.d.ts +0 -19
- package/dist/types/wallet/src/react/hooks/useAccountInput.d.ts +1 -22
- package/dist/types/wallet/src/react/transactionReview/controller.d.ts +3 -10
- package/dist/types/wallet/src/utils/menuItemBlink.d.ts +9 -0
- package/dist/types/wallet/src/utils/qrScanner.d.ts +1 -21
- package/dist/workers/device-linking-key.worker.js +567 -2131
- package/dist/workers/ecdsa-derivation-client.worker.js +1529 -2683
- package/dist/workers/ecdsa-online-client.worker.js +1 -273
- package/dist/workers/ecdsa-presign-client.worker.js +59 -346
- package/dist/workers/email-otp.worker.js +307 -2185
- package/dist/workers/email_otp_runtime_bg.wasm +0 -0
- package/dist/workers/evm-crypto.worker.js +0 -188
- package/dist/workers/evm_crypto.wasm +0 -0
- package/dist/workers/evm_crypto_bg.wasm +0 -0
- package/dist/workers/near-signer.worker.js +16 -718
- package/dist/workers/near_signer.wasm +0 -0
- package/dist/workers/passkey-confirm.worker.js +0 -134
- package/dist/workers/passkey-mpc-export.worker.js +149 -506
- package/dist/workers/passkey-mpc-session.worker.js +0 -134
- package/dist/workers/router_ab_ecdsa_client_bg.wasm +0 -0
- package/dist/workers/router_ab_ed25519_yao_client_bg.wasm +0 -0
- package/dist/workers/shamir3pass.worker.js +0 -134
- package/dist/workers/shamir3pass_runtime_bg.wasm +0 -0
- package/dist/workers/tempo-signer.worker.js +0 -134
- package/dist/workers/tempo_signer.wasm +0 -0
- package/dist/workers/tempo_signer_bg.wasm +0 -0
- package/dist/workers/wallet-custody-ceremony.worker.js +136 -1636
- package/dist/workers/wallet_custody_ceremony.js +0 -14
- package/dist/workers/wallet_custody_ceremony_bg.wasm +0 -0
- package/dist/workers/wasm_signer_worker_bg.wasm +0 -0
- package/package.json +1 -14
- package/dist/esm/SeamsWeb/walletIframe/client/transport/webauthn-bridge.js +0 -99
- package/dist/esm/components/AccountMenuButton/AccountsSection.css +0 -81
- package/dist/esm/components/AccountMenuButton/ExportKeysSection.css +0 -96
- package/dist/esm/components/AccountMenuButton/HaloBorder/HaloBorder.css +0 -101
- package/dist/esm/components/AccountMenuButton/LinkedDevicesModal.css +0 -612
- package/dist/esm/components/AccountMenuButton/MenuItem.css +0 -181
- package/dist/esm/components/AccountMenuButton/ProfileDropdown.css +0 -80
- package/dist/esm/components/AccountMenuButton/TransactionSettingsSection.css +0 -107
- package/dist/esm/components/AccountMenuButton/UserAccountButton.css +0 -182
- package/dist/esm/components/AccountMenuButton/WalletSettingsLayout.css +0 -456
- package/dist/esm/components/AccountMenuButton/Web3AuthProfileButton.css +0 -75
- package/dist/esm/components/AccountMenuButton/icons/TouchIcon.css +0 -46
- package/dist/esm/components/QRCodeScanner.css +0 -502
- package/dist/esm/components/ShowQRCode.css +0 -345
- package/dist/esm/core/indexedDB/seamsWalletDB/laneHolderMaterialStore.js +0 -239
- package/dist/esm/core/signingEngine/session/emailOtp/coordinatorRuntime.js +0 -131
- package/dist/esm/core/signingEngine/uiConfirm/ui/transaction-display/renderers/evm.js +0 -12
- package/dist/esm/core/signingEngine/uiConfirm/ui/transaction-display/renderers/near.js +0 -12
- package/dist/esm/core/signingEngine/uiConfirm/ui/transaction-display/renderers/tempo.js +0 -12
- package/dist/esm/core/signingEngine/webauthnAuth/fallbacks/safari-fallbacks.js +0 -171
- package/dist/esm/core/signingEngine/workerManager/nearKeyOps/createNearKeyOps.js +0 -32
- package/dist/esm/plugins/shared-ts/src/utils/base58.js +0 -1
- package/dist/esm/plugins/shared-ts/src/utils/near.js +0 -1
- package/dist/esm/plugins/shared-ts/src/utils/validation.js +0 -2
- package/dist/esm/react/SeamsWeb/SeamsWeb.js +0 -1909
- package/dist/esm/react/SeamsWeb/assembly/browserSigningSurfaceAssembly.js +0 -817
- package/dist/esm/react/SeamsWeb/assembly/browserWorkerWarmupPolicy.js +0 -31
- package/dist/esm/react/SeamsWeb/assembly/configureBrowserIndexedDB.js +0 -10
- package/dist/esm/react/SeamsWeb/assembly/createBrowserRecoveryPublicDeps.js +0 -95
- package/dist/esm/react/SeamsWeb/assembly/createBrowserSigningRuntime.js +0 -34
- package/dist/esm/react/SeamsWeb/assembly/createBrowserSigningStores.js +0 -39
- package/dist/esm/react/SeamsWeb/assembly/createBrowserStepUpRuntime.js +0 -34
- package/dist/esm/react/SeamsWeb/assembly/createBrowserWarmSessionPublicDeps.js +0 -31
- package/dist/esm/react/SeamsWeb/assembly/createWalletIframeOverlayState.js +0 -9
- package/dist/esm/react/SeamsWeb/assembly/createWalletIframeRouter.js +0 -44
- package/dist/esm/react/SeamsWeb/assembly/initializeBrowserSigningRuntime.js +0 -19
- package/dist/esm/react/SeamsWeb/assembly/runtimeConfig.js +0 -12
- package/dist/esm/react/SeamsWeb/operations/auth/login.js +0 -4398
- package/dist/esm/react/SeamsWeb/operations/auth/scheduleEcdsaSessionPresignaturePrefill.js +0 -41
- package/dist/esm/react/SeamsWeb/operations/auth/walletAuth.js +0 -143
- package/dist/esm/react/SeamsWeb/operations/auth/walletUnlockEcdsaSubject.js +0 -36
- package/dist/esm/react/SeamsWeb/operations/auth/walletUnlockSubject.js +0 -294
- package/dist/esm/react/SeamsWeb/operations/authMethods/addAuthMethodSourceClaim.js +0 -72
- package/dist/esm/react/SeamsWeb/operations/authMethods/emailOtp/addEmailOtp.js +0 -191
- package/dist/esm/react/SeamsWeb/operations/authMethods/emailOtp/challenge.js +0 -247
- package/dist/esm/react/SeamsWeb/operations/authMethods/emailOtp/googleEmailOtpWalletAuthFlow.js +0 -572
- package/dist/esm/react/SeamsWeb/operations/authMethods/emailOtp/localEmailOtpProjection.js +0 -69
- package/dist/esm/react/SeamsWeb/operations/authMethods/emailOtp/registrationAuthority.js +0 -62
- package/dist/esm/react/SeamsWeb/operations/authMethods/emailOtp/registrationOffer.js +0 -69
- package/dist/esm/react/SeamsWeb/operations/authMethods/emailOtp/walletActivation.js +0 -95
- package/dist/esm/react/SeamsWeb/operations/authMethods/passkey/addPasskey.js +0 -260
- package/dist/esm/react/SeamsWeb/operations/authMethods/passkey/ecdsaBootstrap.js +0 -17
- package/dist/esm/react/SeamsWeb/operations/authMethods/passkey/exactPasskeyAuthority.js +0 -34
- package/dist/esm/react/SeamsWeb/operations/authMethods/passkey/localPasskeyProjection.js +0 -117
- package/dist/esm/react/SeamsWeb/operations/authMethods/passkey/localUnlock.js +0 -16
- package/dist/esm/react/SeamsWeb/operations/authMethods/passkey/loginAssertion.js +0 -25
- package/dist/esm/react/SeamsWeb/operations/authMethods/passkey/registrationAuthority.js +0 -84
- package/dist/esm/react/SeamsWeb/operations/authMethods/revokeAuthMethod.js +0 -205
- package/dist/esm/react/SeamsWeb/operations/authMethods/sourcePasskeyProof.js +0 -12
- package/dist/esm/react/SeamsWeb/operations/devices/deviceLinkingAuthorityInstallation.js +0 -444
- package/dist/esm/react/SeamsWeb/operations/devices/deviceLinkingComposition.js +0 -106
- package/dist/esm/react/SeamsWeb/operations/devices/deviceLinkingEd25519ExportRoot.js +0 -194
- package/dist/esm/react/SeamsWeb/operations/devices/deviceLinkingHttpTransport.js +0 -525
- package/dist/esm/react/SeamsWeb/operations/devices/deviceLinkingOwnerTransport.js +0 -135
- package/dist/esm/react/SeamsWeb/operations/devices/deviceLinkingResume.js +0 -219
- package/dist/esm/react/SeamsWeb/operations/devices/deviceLinkingTargetCredential.js +0 -63
- package/dist/esm/react/SeamsWeb/operations/devices/deviceLinkingTargetEd25519ExportRoot.js +0 -61
- package/dist/esm/react/SeamsWeb/operations/devices/deviceLinkingWorkerChannels.js +0 -337
- package/dist/esm/react/SeamsWeb/operations/devices/linkDevice.js +0 -75
- package/dist/esm/react/SeamsWeb/operations/devices/linkDeviceFlow.js +0 -1358
- package/dist/esm/react/SeamsWeb/operations/devices/linkDeviceFlowSupport.js +0 -143
- package/dist/esm/react/SeamsWeb/operations/devices/linkDeviceTargetActivation.js +0 -119
- package/dist/esm/react/SeamsWeb/operations/devices/scanDevice.js +0 -384
- package/dist/esm/react/SeamsWeb/operations/devices/walletHostComposition.js +0 -130
- package/dist/esm/react/SeamsWeb/operations/devices/walletHostOwnerAuthority.js +0 -191
- package/dist/esm/react/SeamsWeb/operations/evm/index.js +0 -35
- package/dist/esm/react/SeamsWeb/operations/near/actions.js +0 -484
- package/dist/esm/react/SeamsWeb/operations/near/commandSubject.js +0 -14
- package/dist/esm/react/SeamsWeb/operations/near/delegateAction.js +0 -247
- package/dist/esm/react/SeamsWeb/operations/near/index.js +0 -37
- package/dist/esm/react/SeamsWeb/operations/near/signNEP413.js +0 -117
- package/dist/esm/react/SeamsWeb/operations/near/signingEventHelpers.js +0 -15
- package/dist/esm/react/SeamsWeb/operations/recovery/accountSync.js +0 -21
- package/dist/esm/react/SeamsWeb/operations/recovery/recoveryWalletBinding.js +0 -43
- package/dist/esm/react/SeamsWeb/operations/recovery/syncAccount.js +0 -914
- package/dist/esm/react/SeamsWeb/operations/recovery/walletRecoveryCodeBackup.js +0 -100
- package/dist/esm/react/SeamsWeb/operations/recovery/walletRecoveryCommit.js +0 -477
- package/dist/esm/react/SeamsWeb/operations/recovery/walletRecoveryDurablePayload.js +0 -386
- package/dist/esm/react/SeamsWeb/operations/recovery/walletRecoveryJournal.js +0 -118
- package/dist/esm/react/SeamsWeb/operations/recovery/walletRecoveryRotation.js +0 -214
- package/dist/esm/react/SeamsWeb/operations/registration/pendingEcdsaRegistrationRecovery.js +0 -184
- package/dist/esm/react/SeamsWeb/operations/registration/pendingEcdsaRegistrationRecoveryUnlock.js +0 -247
- package/dist/esm/react/SeamsWeb/operations/registration/pendingEcdsaRegistrationRecoveryValidation.js +0 -134
- package/dist/esm/react/SeamsWeb/operations/registration/pendingRegistrationRecovery.js +0 -369
- package/dist/esm/react/SeamsWeb/operations/registration/registration.js +0 -3818
- package/dist/esm/react/SeamsWeb/operations/registration/registrationEd25519Yao.js +0 -166
- package/dist/esm/react/SeamsWeb/operations/registration/registrationSignerSet.js +0 -60
- package/dist/esm/react/SeamsWeb/operations/registration/registrationStrictEcdsa.js +0 -343
- package/dist/esm/react/SeamsWeb/operations/registration/registrationTerminalCommit.js +0 -296
- package/dist/esm/react/SeamsWeb/operations/registration/registrationTiming.js +0 -682
- package/dist/esm/react/SeamsWeb/operations/session/thresholdEcdsaProvisioning.js +0 -40
- package/dist/esm/react/SeamsWeb/operations/session/thresholdWarmSessionBootstrap.js +0 -20
- package/dist/esm/react/SeamsWeb/operations/tempo/executeEvmFamilyTransaction.js +0 -565
- package/dist/esm/react/SeamsWeb/operations/tempo/feeTokenPreference.js +0 -67
- package/dist/esm/react/SeamsWeb/operations/tempo/index.js +0 -39
- package/dist/esm/react/SeamsWeb/publicApi/auth.js +0 -23
- package/dist/esm/react/SeamsWeb/publicApi/awaitNearReady.js +0 -72
- package/dist/esm/react/SeamsWeb/publicApi/capabilitySelection.js +0 -63
- package/dist/esm/react/SeamsWeb/publicApi/chainTargets.js +0 -48
- package/dist/esm/react/SeamsWeb/publicApi/createPublicApi.js +0 -133
- package/dist/esm/react/SeamsWeb/publicApi/currentWallet.js +0 -46
- package/dist/esm/react/SeamsWeb/publicApi/devices.js +0 -83
- package/dist/esm/react/SeamsWeb/publicApi/evm.js +0 -103
- package/dist/esm/react/SeamsWeb/publicApi/keyExport.js +0 -90
- package/dist/esm/react/SeamsWeb/publicApi/near.js +0 -449
- package/dist/esm/react/SeamsWeb/publicApi/preferences.js +0 -61
- package/dist/esm/react/SeamsWeb/publicApi/recovery.js +0 -19
- package/dist/esm/react/SeamsWeb/publicApi/tempo.js +0 -238
- package/dist/esm/react/SeamsWeb/publicApi/transactionReview.js +0 -12
- package/dist/esm/react/SeamsWeb/publicApi/types.js +0 -10
- package/dist/esm/react/SeamsWeb/signingSurface/BrowserSigningSurface.js +0 -3908
- package/dist/esm/react/SeamsWeb/walletIframe/client/overlay/overlay-controller.js +0 -530
- package/dist/esm/react/SeamsWeb/walletIframe/client/overlay/overlay-styles.js +0 -417
- package/dist/esm/react/SeamsWeb/walletIframe/client/progress/on-events-progress-bus.js +0 -134
- package/dist/esm/react/SeamsWeb/walletIframe/client/router.js +0 -3368
- package/dist/esm/react/SeamsWeb/walletIframe/client/surface/domain.js +0 -288
- package/dist/esm/react/SeamsWeb/walletIframe/client/surface/geometry.js +0 -128
- package/dist/esm/react/SeamsWeb/walletIframe/client/surface/renderer.js +0 -119
- package/dist/esm/react/SeamsWeb/walletIframe/client/surface/transactionSurfaceQueue.js +0 -125
- package/dist/esm/react/SeamsWeb/walletIframe/client/transactionReviewReservation.js +0 -96
- package/dist/esm/react/SeamsWeb/walletIframe/client/transport/IframeTransport.js +0 -252
- package/dist/esm/react/SeamsWeb/walletIframe/client/transport/iframe-transport-dom.js +0 -71
- package/dist/esm/react/SeamsWeb/walletIframe/client/transport/iframe-transport-handshake.js +0 -211
- package/dist/esm/react/SeamsWeb/walletIframe/client/transport/webauthn-bridge.js +0 -99
- package/dist/esm/react/SeamsWeb/walletIframe/coordinator.js +0 -235
- package/dist/esm/react/SeamsWeb/walletIframe/host/surface-measurement-reporter.js +0 -158
- package/dist/esm/react/SeamsWeb/walletIframe/shared/exactSessionState.js +0 -625
- package/dist/esm/react/SeamsWeb/walletIframe/shared/is-dev-host.js +0 -11
- package/dist/esm/react/SeamsWeb/walletIframe/shared/messages.js +0 -588
- package/dist/esm/react/SeamsWeb/walletIframe/shared/transactionReview.js +0 -83
- package/dist/esm/react/SeamsWeb/walletIframe/shared/unlockOptions.js +0 -54
- package/dist/esm/react/base-styles.js +0 -13
- package/dist/esm/react/build-paths.js +0 -111
- package/dist/esm/react/components/AccountMenuButton/HaloBorder/HaloBorder.css +0 -101
- package/dist/esm/react/config.js +0 -37
- package/dist/esm/react/core/accountData/near/accountProjection.js +0 -119
- package/dist/esm/react/core/accountData/near/accountRefs.js +0 -21
- package/dist/esm/react/core/accountData/near/keyMaterial.js +0 -171
- package/dist/esm/react/core/accountData/near/profileId.js +0 -24
- package/dist/esm/react/core/browser/walletIframe/csp-stylesheet.js +0 -189
- package/dist/esm/react/core/browser/walletIframe/events.js +0 -10
- package/dist/esm/react/core/browser/walletIframe/host-mode.js +0 -19
- package/dist/esm/react/core/browser/walletIframe/hostVariant.js +0 -16
- package/dist/esm/react/core/config/chains.js +0 -90
- package/dist/esm/react/core/config/configBuilder.js +0 -231
- package/dist/esm/react/core/config/configHelpers.js +0 -183
- package/dist/esm/react/core/config/defaultConfigs.js +0 -120
- package/dist/esm/react/core/config/defineConfig.js +0 -48
- package/dist/esm/react/core/config/managedRuntimeScope.js +0 -16
- package/dist/esm/react/core/indexedDB/accountKeyMaterial.js +0 -68
- package/dist/esm/react/core/indexedDB/accountSignerLifecycle.js +0 -143
- package/dist/esm/react/core/indexedDB/index.js +0 -60
- package/dist/esm/react/core/indexedDB/keyMaterialEnvelope.js +0 -69
- package/dist/esm/react/core/indexedDB/lastProfileState.js +0 -22
- package/dist/esm/react/core/indexedDB/linkedAuthoritySignerMaterial.js +0 -291
- package/dist/esm/react/core/indexedDB/nonceLaneCoordinationStore.js +0 -115
- package/dist/esm/react/core/indexedDB/normalization.js +0 -24
- package/dist/esm/react/core/indexedDB/pendingWalletRecoveryCommit.js +0 -482
- package/dist/esm/react/core/indexedDB/pendingWalletRegistrationCommit.js +0 -879
- package/dist/esm/react/core/indexedDB/profileAccountProjection.js +0 -70
- package/dist/esm/react/core/indexedDB/schemaNames.js +0 -845
- package/dist/esm/react/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestLookups.js +0 -209
- package/dist/esm/react/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestRecords.js +0 -848
- package/dist/esm/react/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestStore.js +0 -1215
- package/dist/esm/react/core/indexedDB/seamsWalletDB/ecdsaClientPresignatures.js +0 -235
- package/dist/esm/react/core/indexedDB/seamsWalletDB/manager.js +0 -140
- package/dist/esm/react/core/indexedDB/seamsWalletDB/pendingWalletRecoveryCodeBackup.js +0 -145
- package/dist/esm/react/core/indexedDB/seamsWalletDB/repositories.js +0 -4747
- package/dist/esm/react/core/indexedDB/seamsWalletDB/schema.js +0 -23
- package/dist/esm/react/core/indexedDB/seamsWalletDB/signingSessionSeals.js +0 -205
- package/dist/esm/react/core/indexedDB/seamsWalletDB/walletCustodyEcdsaContinuity.js +0 -198
- package/dist/esm/react/core/indexedDB/seamsWalletDB/walletSessionAuthorizationStore.js +0 -569
- package/dist/esm/react/core/indexedDB/singletons.js +0 -7
- package/dist/esm/react/core/indexedDB/unifiedIndexedDBManager.js +0 -578
- package/dist/esm/react/core/indexedDB/walletCustodyEd25519MaterialRecord.js +0 -60
- package/dist/esm/react/core/platform/browser/createBrowserPlatformRuntime.js +0 -552
- package/dist/esm/react/core/platform/secretSources.js +0 -111
- package/dist/esm/react/core/platform/signerCoreCommandAdapters.js +0 -122
- package/dist/esm/react/core/rpcClients/evm/EvmClient.js +0 -549
- package/dist/esm/react/core/rpcClients/evm/nonceBackend.js +0 -279
- package/dist/esm/react/core/rpcClients/near/NearClient.js +0 -56
- package/dist/esm/react/core/rpcClients/near/NearRpcError.js +0 -105
- package/dist/esm/react/core/rpcClients/near/rpcCalls.js +0 -376
- package/dist/esm/react/core/rpcClients/relayer/ownerWalletExecutionLanePreflight.js +0 -67
- package/dist/esm/react/core/rpcClients/relayer/passkeyCustodyEnvelope.js +0 -228
- package/dist/esm/react/core/rpcClients/relayer/registrationSignerSetRequest.js +0 -8
- package/dist/esm/react/core/rpcClients/relayer/relayerHttp.js +0 -26
- package/dist/esm/react/core/rpcClients/relayer/routerAbNormalSigning.js +0 -812
- package/dist/esm/react/core/rpcClients/relayer/routerAbNormalSigningValidation.js +0 -23
- package/dist/esm/react/core/rpcClients/relayer/sealedRefreshCapabilities.js +0 -148
- package/dist/esm/react/core/rpcClients/relayer/thresholdEcdsa.js +0 -237
- package/dist/esm/react/core/rpcClients/relayer/walletRecoveryFinalize.js +0 -174
- package/dist/esm/react/core/rpcClients/relayer/walletRecoveryGoogleEmailOtp.js +0 -161
- package/dist/esm/react/core/rpcClients/relayer/walletRecoveryPrepare.js +0 -295
- package/dist/esm/react/core/rpcClients/relayer/walletRecoveryRotate.js +0 -311
- package/dist/esm/react/core/rpcClients/relayer/walletRegistration.js +0 -2349
- package/dist/esm/react/core/rpcClients/relayer/walletRegistrationTerminalResponse.js +0 -719
- package/dist/esm/react/core/rpcClients/relayer/walletSessionAuthorizationStatus.js +0 -214
- package/dist/esm/react/core/runtime/createSigningRuntime.js +0 -100
- package/dist/esm/react/core/signingEngine/assembly/createManagers.js +0 -80
- package/dist/esm/react/core/signingEngine/assembly/createPorts.js +0 -54
- package/dist/esm/react/core/signingEngine/assembly/ports/emailOtp.js +0 -30
- package/dist/esm/react/core/signingEngine/assembly/ports/evmFamily.js +0 -73
- package/dist/esm/react/core/signingEngine/assembly/ports/near.js +0 -21
- package/dist/esm/react/core/signingEngine/assembly/ports/recovery.js +0 -75
- package/dist/esm/react/core/signingEngine/assembly/ports/registration.js +0 -22
- package/dist/esm/react/core/signingEngine/assembly/ports/session.js +0 -25
- package/dist/esm/react/core/signingEngine/assembly/ports/shared.js +0 -40
- package/dist/esm/react/core/signingEngine/assembly/ports/stepUpRuntime.js +0 -67
- package/dist/esm/react/core/signingEngine/assembly/ports/warmSigning.js +0 -92
- package/dist/esm/react/core/signingEngine/assembly/warmup.js +0 -68
- package/dist/esm/react/core/signingEngine/chains/evm/bytes.js +0 -22
- package/dist/esm/react/core/signingEngine/chains/evm/display/calldata.js +0 -25
- package/dist/esm/react/core/signingEngine/chains/evm/display/evmTx.js +0 -119
- package/dist/esm/react/core/signingEngine/chains/evm/display/functionSelectors.js +0 -75
- package/dist/esm/react/core/signingEngine/chains/evm/display/gas.js +0 -19
- package/dist/esm/react/core/signingEngine/chains/evm/display/normalization.js +0 -23
- package/dist/esm/react/core/signingEngine/chains/evm/evmAdapter.js +0 -44
- package/dist/esm/react/core/signingEngine/chains/evm/evmCryptoWasm.js +0 -198
- package/dist/esm/react/core/signingEngine/chains/near/display.js +0 -248
- package/dist/esm/react/core/signingEngine/chains/near/nearSignerWasm.js +0 -170
- package/dist/esm/react/core/signingEngine/chains/near/payloads.js +0 -58
- package/dist/esm/react/core/signingEngine/chains/tempo/display.js +0 -130
- package/dist/esm/react/core/signingEngine/chains/tempo/feeToken.js +0 -187
- package/dist/esm/react/core/signingEngine/chains/tempo/tempoAdapter.js +0 -49
- package/dist/esm/react/core/signingEngine/chains/tempo/tempoSignerWasm.js +0 -90
- package/dist/esm/react/core/signingEngine/flows/recovery/ecdsaDerivationExport.js +0 -428
- package/dist/esm/react/core/signingEngine/flows/recovery/ecdsaExportFlow.js +0 -660
- package/dist/esm/react/core/signingEngine/flows/recovery/ecdsaExportMaterial.js +0 -243
- package/dist/esm/react/core/signingEngine/flows/recovery/ed25519YaoExportFlow.js +0 -353
- package/dist/esm/react/core/signingEngine/flows/recovery/exportKeypairOperation.js +0 -216
- package/dist/esm/react/core/signingEngine/flows/recovery/exportLaneSelection.js +0 -283
- package/dist/esm/react/core/signingEngine/flows/recovery/keyExportConfirmation.js +0 -325
- package/dist/esm/react/core/signingEngine/flows/recovery/keyExportFlow.js +0 -81
- package/dist/esm/react/core/signingEngine/flows/recovery/passkeyEd25519YaoRecovery.js +0 -195
- package/dist/esm/react/core/signingEngine/flows/recovery/public.js +0 -26
- package/dist/esm/react/core/signingEngine/flows/recovery/stepUpAuthorization.js +0 -139
- package/dist/esm/react/core/signingEngine/flows/registration/accountLifecycle.js +0 -1098
- package/dist/esm/react/core/signingEngine/flows/registration/nearProvisioningRegistry.js +0 -79
- package/dist/esm/react/core/signingEngine/flows/registration/public.js +0 -85
- package/dist/esm/react/core/signingEngine/flows/registration/services/ecdsaRegistrationSessions.js +0 -77
- package/dist/esm/react/core/signingEngine/flows/registration/services/ecdsaWalletRecords.js +0 -15
- package/dist/esm/react/core/signingEngine/flows/registration/services/passkeyEd25519YaoAddSigner.js +0 -83
- package/dist/esm/react/core/signingEngine/flows/registration/services/registrationAccounts.js +0 -30
- package/dist/esm/react/core/signingEngine/flows/registration/session.js +0 -24
- package/dist/esm/react/core/signingEngine/flows/shared/signingConfirmation.js +0 -194
- package/dist/esm/react/core/signingEngine/flows/shared/signingStateMachine.js +0 -485
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/accountAuth.js +0 -12
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/addresses.js +0 -10
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/authPlanning.js +0 -139
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/ecdsaLanes.js +0 -102
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/ecdsaSelection.js +0 -233
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/emailOtpPublic.js +0 -123
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/emailOtpSigningSession.js +0 -227
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/errors.js +0 -127
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/events.js +0 -39
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/evmNonceLifecycle.js +0 -49
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/executorThresholdState.js +0 -22
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/freshAuthRetryPolicy.js +0 -98
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/freshWalletSessionRetry.js +0 -76
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/nonceLifecycleAdapter.js +0 -245
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/nonceResolution.js +0 -91
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/operationIds.js +0 -33
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/preparedSigning.js +0 -383
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/readySecp256k1Material.js +0 -191
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/requireEvmFamilyStepUpAuth.js +0 -128
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signEvmFamily.js +0 -512
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signEvmFamilyWithUiConfirmForTempo.js +0 -65
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signEvmWithUiConfirm.js +0 -26
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signatureUses.js +0 -12
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signerLoader.js +0 -25
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signers/ecdsaDerivationClientSigningMaterialSource.js +0 -76
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signers/secp256k1.js +0 -182
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signers/webauthnP256.js +0 -84
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signingFlow.js +0 -631
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signingFlowRuntime.js +0 -391
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/stepUpAuthorization.js +0 -56
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/tempoNonceLifecycle.js +0 -47
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/thresholdAdmission.js +0 -87
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/transactionExecutor.js +0 -143
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/types.js +0 -20
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/webauthnP256KeyRef.js +0 -33
- package/dist/esm/react/core/signingEngine/flows/signNear/implicitAccountFunding.js +0 -202
- package/dist/esm/react/core/signingEngine/flows/signNear/nearSigningFlow.js +0 -56
- package/dist/esm/react/core/signingEngine/flows/signNear/requireNearStepUpAuth.js +0 -102
- package/dist/esm/react/core/signingEngine/flows/signNear/shared/confirmationProgress.js +0 -28
- package/dist/esm/react/core/signingEngine/flows/signNear/shared/ed25519YaoCapabilityResolution.js +0 -101
- package/dist/esm/react/core/signingEngine/flows/signNear/shared/ed25519YaoNormalSigning.js +0 -822
- package/dist/esm/react/core/signingEngine/flows/signNear/shared/implicitAccountFundingPort.js +0 -24
- package/dist/esm/react/core/signingEngine/flows/signNear/shared/operationStepUpPreparation.js +0 -68
- package/dist/esm/react/core/signingEngine/flows/signNear/shared/signatureOnlySigning.js +0 -343
- package/dist/esm/react/core/signingEngine/flows/signNear/shared/signingMaterials.js +0 -25
- package/dist/esm/react/core/signingEngine/flows/signNear/shared/signingSessionAuthMode.js +0 -138
- package/dist/esm/react/core/signingEngine/flows/signNear/signDelegate.js +0 -290
- package/dist/esm/react/core/signingEngine/flows/signNear/signNear.js +0 -1238
- package/dist/esm/react/core/signingEngine/flows/signNear/signNep413.js +0 -144
- package/dist/esm/react/core/signingEngine/flows/signNear/signTransactions.js +0 -897
- package/dist/esm/react/core/signingEngine/flows/signNear/signatureUses.js +0 -12
- package/dist/esm/react/core/signingEngine/flows/signNear/stepUpAuthorization.js +0 -42
- package/dist/esm/react/core/signingEngine/interfaces/accountAuthMetadata.js +0 -14
- package/dist/esm/react/core/signingEngine/interfaces/ecdsaChainTarget.js +0 -142
- package/dist/esm/react/core/signingEngine/interfaces/operationStepUpPreparation.js +0 -18
- package/dist/esm/react/core/signingEngine/nonce/NonceCoordinator.js +0 -1026
- package/dist/esm/react/core/signingEngine/nonce/evmNonceLane.js +0 -182
- package/dist/esm/react/core/signingEngine/nonce/nearNonceLane.js +0 -669
- package/dist/esm/react/core/signingEngine/nonce/nearNonceLaneIdentity.js +0 -24
- package/dist/esm/react/core/signingEngine/nonce/nonceCoordinationRecordBoundary.js +0 -216
- package/dist/esm/react/core/signingEngine/nonce/nonceDiagnostics.js +0 -232
- package/dist/esm/react/core/signingEngine/nonce/nonceLaneKeys.js +0 -110
- package/dist/esm/react/core/signingEngine/nonce/nonceLeaseState.js +0 -128
- package/dist/esm/react/core/signingEngine/nonce/nonceTypes.js +0 -59
- package/dist/esm/react/core/signingEngine/nonce/nonceUtils.js +0 -33
- package/dist/esm/react/core/signingEngine/routerAb/ecdsaDerivation/httpRequest.js +0 -74
- package/dist/esm/react/core/signingEngine/routerAb/ecdsaDerivation/poolFillRoutes.js +0 -217
- package/dist/esm/react/core/signingEngine/routerAb/ecdsaDerivation/presignaturePool.js +0 -1216
- package/dist/esm/react/core/signingEngine/routerAb/ecdsaDerivation/presignatureRefillProgress.js +0 -53
- package/dist/esm/react/core/signingEngine/routerAb/ecdsaDerivation/signingMaterialRef.js +0 -22
- package/dist/esm/react/core/signingEngine/session/SigningSessionCoordinator.js +0 -347
- package/dist/esm/react/core/signingEngine/session/authority/authorityOperationResolver.js +0 -165
- package/dist/esm/react/core/signingEngine/session/availability/availableSigningLanes.js +0 -1073
- package/dist/esm/react/core/signingEngine/session/availability/canonicalLaneInventory.js +0 -127
- package/dist/esm/react/core/signingEngine/session/availability/clientSessionExpiryInvalidator.js +0 -72
- package/dist/esm/react/core/signingEngine/session/availability/persistedAvailableSigningLanes.js +0 -213
- package/dist/esm/react/core/signingEngine/session/availability/readiness.js +0 -464
- package/dist/esm/react/core/signingEngine/session/emailOtp/EmailOtpWalletSessionCoordinator.js +0 -47
- package/dist/esm/react/core/signingEngine/session/emailOtp/challengeDelivery.js +0 -56
- package/dist/esm/react/core/signingEngine/session/emailOtp/coordinatorRuntime.js +0 -131
- package/dist/esm/react/core/signingEngine/session/emailOtp/ecdsaBootstrapCommit.js +0 -106
- package/dist/esm/react/core/signingEngine/session/emailOtp/ecdsaLifecycleRuntime.js +0 -50
- package/dist/esm/react/core/signingEngine/session/emailOtp/ecdsaLogin.js +0 -941
- package/dist/esm/react/core/signingEngine/session/emailOtp/ecdsaPublication.js +0 -414
- package/dist/esm/react/core/signingEngine/session/emailOtp/ecdsaRecovery.js +0 -268
- package/dist/esm/react/core/signingEngine/session/emailOtp/ecdsaSigningSessionAuthority.js +0 -95
- package/dist/esm/react/core/signingEngine/session/emailOtp/ed25519ExportContext.js +0 -376
- package/dist/esm/react/core/signingEngine/session/emailOtp/exportRecovery.js +0 -286
- package/dist/esm/react/core/signingEngine/session/emailOtp/exportRecoveryRuntime.js +0 -50
- package/dist/esm/react/core/signingEngine/session/emailOtp/persistedSnapshot.js +0 -22
- package/dist/esm/react/core/signingEngine/session/emailOtp/publicTypes.js +0 -38
- package/dist/esm/react/core/signingEngine/session/emailOtp/routePlan.js +0 -60
- package/dist/esm/react/core/signingEngine/session/emailOtp/runtimeConfig.js +0 -24
- package/dist/esm/react/core/signingEngine/session/emailOtp/sealedRefreshPolicy.js +0 -49
- package/dist/esm/react/core/signingEngine/session/emailOtp/sealedRestoreOrchestrator.js +0 -234
- package/dist/esm/react/core/signingEngine/session/emailOtp/sealedRuntimePurpose.js +0 -16
- package/dist/esm/react/core/signingEngine/session/emailOtp/sealedSessionRegistry.js +0 -40
- package/dist/esm/react/core/signingEngine/session/emailOtp/status.js +0 -72
- package/dist/esm/react/core/signingEngine/session/emailOtp/walletUnlock.js +0 -168
- package/dist/esm/react/core/signingEngine/session/emailOtp/warmSessionRuntime.js +0 -70
- package/dist/esm/react/core/signingEngine/session/emailOtp/workerEnrollment.js +0 -159
- package/dist/esm/react/core/signingEngine/session/emailOtp/workerRequests.js +0 -84
- package/dist/esm/react/core/signingEngine/session/emailOtp/zeroize.js +0 -9
- package/dist/esm/react/core/signingEngine/session/identity/clientSessionPersistenceState.js +0 -95
- package/dist/esm/react/core/signingEngine/session/identity/emailOtpEcdsaDerivationIdentity.js +0 -23
- package/dist/esm/react/core/signingEngine/session/identity/evmFamilyEcdsaIdentity.js +0 -265
- package/dist/esm/react/core/signingEngine/session/identity/exactSigningLaneIdentity.js +0 -338
- package/dist/esm/react/core/signingEngine/session/identity/exactWalletSessionCredential.js +0 -106
- package/dist/esm/react/core/signingEngine/session/identity/exactWalletSessionReader.js +0 -54
- package/dist/esm/react/core/signingEngine/session/identity/laneIdentity.js +0 -168
- package/dist/esm/react/core/signingEngine/session/identity/ownerLaneScope.js +0 -185
- package/dist/esm/react/core/signingEngine/session/identity/selectLane.js +0 -349
- package/dist/esm/react/core/signingEngine/session/identity/signingLaneAuthBinding.js +0 -29
- package/dist/esm/react/core/signingEngine/session/keyMaterialBrands.js +0 -75
- package/dist/esm/react/core/signingEngine/session/lanes/walletExecutionLaneHydration.js +0 -194
- package/dist/esm/react/core/signingEngine/session/lifecycle/canonicalWalletSessionStatus.js +0 -32
- package/dist/esm/react/core/signingEngine/session/lifecycle/walletSessionFailure.js +0 -69
- package/dist/esm/react/core/signingEngine/session/lifecycle/walletSessionStatus.js +0 -123
- package/dist/esm/react/core/signingEngine/session/material/activeEcdsaCapabilityRuntime.js +0 -171
- package/dist/esm/react/core/signingEngine/session/material/activeWalletAuthorityEcdsaRuntime.js +0 -323
- package/dist/esm/react/core/signingEngine/session/material/ecdsaCapabilityHydration.js +0 -75
- package/dist/esm/react/core/signingEngine/session/material/ecdsaCapabilityManifest.js +0 -510
- package/dist/esm/react/core/signingEngine/session/material/ecdsaRoleLocalMaterialResolver.js +0 -122
- package/dist/esm/react/core/signingEngine/session/material/ecdsaSealedRuntime.js +0 -197
- package/dist/esm/react/core/signingEngine/session/material/ecdsaSigningCapability.js +0 -231
- package/dist/esm/react/core/signingEngine/session/material/linkedEcdsaHolderRuntime.js +0 -36
- package/dist/esm/react/core/signingEngine/session/material/mpcCapabilityHydration.js +0 -79
- package/dist/esm/react/core/signingEngine/session/material/nearEd25519YaoMaterialActivation.js +0 -80
- package/dist/esm/react/core/signingEngine/session/material/nearEd25519YaoSigningPreparation.js +0 -122
- package/dist/esm/react/core/signingEngine/session/material/restorableMpcMaterialRef.internal.js +0 -21
- package/dist/esm/react/core/signingEngine/session/material/walletSigningStateFailure.js +0 -84
- package/dist/esm/react/core/signingEngine/session/operationState/authorizationAdmission.js +0 -98
- package/dist/esm/react/core/signingEngine/session/operationState/lanes.js +0 -127
- package/dist/esm/react/core/signingEngine/session/operationState/preparedOperation.js +0 -38
- package/dist/esm/react/core/signingEngine/session/operationState/trace.js +0 -94
- package/dist/esm/react/core/signingEngine/session/operationState/transactionState.js +0 -106
- package/dist/esm/react/core/signingEngine/session/operationState/types.js +0 -88
- package/dist/esm/react/core/signingEngine/session/passkey/ecdsaBootstrap.js +0 -187
- package/dist/esm/react/core/signingEngine/session/passkey/ecdsaKeyFactsInventory.js +0 -206
- package/dist/esm/react/core/signingEngine/session/passkey/ecdsaRecovery.js +0 -87
- package/dist/esm/react/core/signingEngine/session/passkey/ecdsaSessionProvision.js +0 -224
- package/dist/esm/react/core/signingEngine/session/passkey/ecdsaWarmCapabilityBootstrap.js +0 -147
- package/dist/esm/react/core/signingEngine/session/passkey/ed25519Provisioner.js +0 -55
- package/dist/esm/react/core/signingEngine/session/passkey/ed25519SessionProvision.js +0 -229
- package/dist/esm/react/core/signingEngine/session/passkey/ed25519YaoLocalMaterial.js +0 -537
- package/dist/esm/react/core/signingEngine/session/passkey/ed25519YaoRecoveryCapability.js +0 -94
- package/dist/esm/react/core/signingEngine/session/passkey/ed25519YaoSealedSession.js +0 -57
- package/dist/esm/react/core/signingEngine/session/passkey/ed25519YaoWarmRecovery.js +0 -317
- package/dist/esm/react/core/signingEngine/session/passkey/passkeyCustodySessionCache.js +0 -90
- package/dist/esm/react/core/signingEngine/session/passkey/prfCache.js +0 -60
- package/dist/esm/react/core/signingEngine/session/passkey/public.js +0 -15
- package/dist/esm/react/core/signingEngine/session/passkey/unlockEcdsaWarmupPlanner.js +0 -247
- package/dist/esm/react/core/signingEngine/session/passkey/warmSessionHydration.js +0 -9
- package/dist/esm/react/core/signingEngine/session/persistence/clientSessionPersistence.js +0 -143
- package/dist/esm/react/core/signingEngine/session/persistence/durableSealedSessionCommands.js +0 -30
- package/dist/esm/react/core/signingEngine/session/persistence/ecdsaRoleLocalRecords.js +0 -316
- package/dist/esm/react/core/signingEngine/session/persistence/ecdsaSealedRecordKey.js +0 -20
- package/dist/esm/react/core/signingEngine/session/persistence/sealedSessionRecords.js +0 -764
- package/dist/esm/react/core/signingEngine/session/persistence/sealedSessionStore.js +0 -518
- package/dist/esm/react/core/signingEngine/session/persistence/walletSessionAuthorizationProjection.js +0 -51
- package/dist/esm/react/core/signingEngine/session/planning/operationFingerprint.js +0 -30
- package/dist/esm/react/core/signingEngine/session/planning/operationIdBinding.js +0 -36
- package/dist/esm/react/core/signingEngine/session/planning/planner.js +0 -98
- package/dist/esm/react/core/signingEngine/session/postconditions/runtimePostconditions.js +0 -165
- package/dist/esm/react/core/signingEngine/session/public.js +0 -44
- package/dist/esm/react/core/signingEngine/session/routerAbSigningWalletSession.js +0 -125
- package/dist/esm/react/core/signingEngine/session/sealedRecovery/exactRecordLookup.js +0 -148
- package/dist/esm/react/core/signingEngine/session/sealedRecovery/materialActivationKey.js +0 -22
- package/dist/esm/react/core/signingEngine/session/sealedRecovery/recoveryRecord.js +0 -248
- package/dist/esm/react/core/signingEngine/session/sealedRecovery/restoreCoordinator.js +0 -229
- package/dist/esm/react/core/signingEngine/session/userPreferences.js +0 -212
- package/dist/esm/react/core/signingEngine/session/warmCapabilities/capabilityReader.js +0 -62
- package/dist/esm/react/core/signingEngine/session/warmCapabilities/capabilityReaderCore.js +0 -293
- package/dist/esm/react/core/signingEngine/session/warmCapabilities/clearVolatileWarmSigningMaterial.js +0 -44
- package/dist/esm/react/core/signingEngine/session/warmCapabilities/ecdsaBootstrapPersistence.js +0 -107
- package/dist/esm/react/core/signingEngine/session/warmCapabilities/ecdsaBootstrapQueue.js +0 -22
- package/dist/esm/react/core/signingEngine/session/warmCapabilities/ecdsaLoginPrefill.js +0 -93
- package/dist/esm/react/core/signingEngine/session/warmCapabilities/ecdsaLoginPrefillSigningMaterialSource.js +0 -50
- package/dist/esm/react/core/signingEngine/session/warmCapabilities/ecdsaProvisionPlan.js +0 -9
- package/dist/esm/react/core/signingEngine/session/warmCapabilities/ed25519SealedSessionRuntime.js +0 -251
- package/dist/esm/react/core/signingEngine/session/warmCapabilities/nearEd25519CapabilityRehydration.js +0 -98
- package/dist/esm/react/core/signingEngine/session/warmCapabilities/public.js +0 -31
- package/dist/esm/react/core/signingEngine/session/warmCapabilities/readModel.js +0 -161
- package/dist/esm/react/core/signingEngine/session/warmCapabilities/routerAbEd25519WalletSessionState.js +0 -256
- package/dist/esm/react/core/signingEngine/session/warmCapabilities/routerAbWalletSessionCredential.js +0 -73
- package/dist/esm/react/core/signingEngine/session/warmCapabilities/sealedRefreshParity.js +0 -67
- package/dist/esm/react/core/signingEngine/session/warmCapabilities/statusReader.js +0 -100
- package/dist/esm/react/core/signingEngine/session/warmCapabilities/transitions.js +0 -51
- package/dist/esm/react/core/signingEngine/session/warmCapabilities/types.js +0 -122
- package/dist/esm/react/core/signingEngine/session/warmCapabilities/volatileWarmMaterialCommands.js +0 -45
- package/dist/esm/react/core/signingEngine/stepUpConfirmation/channel/confirmCommon.js +0 -89
- package/dist/esm/react/core/signingEngine/stepUpConfirmation/channel/confirmTypes.js +0 -12
- package/dist/esm/react/core/signingEngine/stepUpConfirmation/confirmOperation.js +0 -51
- package/dist/esm/react/core/signingEngine/stepUpConfirmation/intentDigestPreparation.js +0 -29
- package/dist/esm/react/core/signingEngine/stepUpConfirmation/methodSelection.js +0 -41
- package/dist/esm/react/core/signingEngine/stepUpConfirmation/otpPrompt/authLane.js +0 -32
- package/dist/esm/react/core/signingEngine/stepUpConfirmation/otpPrompt/exportAuthorization.js +0 -108
- package/dist/esm/react/core/signingEngine/stepUpConfirmation/otpPrompt/promptText.js +0 -8
- package/dist/esm/react/core/signingEngine/stepUpConfirmation/otpPrompt/signingPrompt.js +0 -15
- package/dist/esm/react/core/signingEngine/stepUpConfirmation/passkeyPrompt/touchIdPrompt.js +0 -295
- package/dist/esm/react/core/signingEngine/stepUpConfirmation/passkeyPrompt/webauthnPromptCoordinator.js +0 -170
- package/dist/esm/react/core/signingEngine/stepUpConfirmation/requireStepUpAuth.js +0 -63
- package/dist/esm/react/core/signingEngine/stepUpConfirmation/types.js +0 -29
- package/dist/esm/react/core/signingEngine/stepUpConfirmation/userConfirmationType.js +0 -15
- package/dist/esm/react/core/signingEngine/threshold/commitQueueShared.js +0 -125
- package/dist/esm/react/core/signingEngine/threshold/crypto/ecdsaDerivationClientWasm.js +0 -616
- package/dist/esm/react/core/signingEngine/threshold/crypto/ed25519YaoLaneWasm.js +0 -70
- package/dist/esm/react/core/signingEngine/threshold/ecdsa/activation.js +0 -267
- package/dist/esm/react/core/signingEngine/threshold/ecdsa/bootstrapSession.js +0 -119
- package/dist/esm/react/core/signingEngine/threshold/ecdsa/operationStepUp.js +0 -110
- package/dist/esm/react/core/signingEngine/threshold/ecdsa/postRegistrationSessionActivation.js +0 -132
- package/dist/esm/react/core/signingEngine/threshold/ecdsa/signingQueue.js +0 -58
- package/dist/esm/react/core/signingEngine/threshold/ed25519/commitQueue.js +0 -52
- package/dist/esm/react/core/signingEngine/threshold/ed25519/connectSession.js +0 -137
- package/dist/esm/react/core/signingEngine/threshold/ed25519/walletSession.js +0 -363
- package/dist/esm/react/core/signingEngine/threshold/ed25519/yaoActiveClientRegistry.js +0 -146
- package/dist/esm/react/core/signingEngine/threshold/ed25519/yaoClient.js +0 -597
- package/dist/esm/react/core/signingEngine/threshold/ed25519/yaoPageLifecycleOwner.js +0 -23
- package/dist/esm/react/core/signingEngine/threshold/ed25519/yaoPublicCapabilityReferences.js +0 -295
- package/dist/esm/react/core/signingEngine/threshold/sessionPolicy.js +0 -94
- package/dist/esm/react/core/signingEngine/uiConfirm/PasskeyMpcExportManager.js +0 -233
- package/dist/esm/react/core/signingEngine/uiConfirm/PasskeyMpcSessionDurableState.js +0 -496
- package/dist/esm/react/core/signingEngine/uiConfirm/PasskeyMpcSessionManager.js +0 -745
- package/dist/esm/react/core/signingEngine/uiConfirm/UiConfirmManager.js +0 -600
- package/dist/esm/react/core/signingEngine/uiConfirm/confirmationReadinessRegistry.js +0 -41
- package/dist/esm/react/core/signingEngine/uiConfirm/exportConfirmRequest.js +0 -149
- package/dist/esm/react/core/signingEngine/uiConfirm/handlers/determineConfirmationConfig.js +0 -82
- package/dist/esm/react/core/signingEngine/uiConfirm/handlers/flowOrchestrator.js +0 -363
- package/dist/esm/react/core/signingEngine/uiConfirm/handlers/flows/adapters/adapters.js +0 -337
- package/dist/esm/react/core/signingEngine/uiConfirm/handlers/flows/adapters/request.js +0 -120
- package/dist/esm/react/core/signingEngine/uiConfirm/handlers/flows/localOnly.js +0 -150
- package/dist/esm/react/core/signingEngine/uiConfirm/handlers/flows/registration.js +0 -235
- package/dist/esm/react/core/signingEngine/uiConfirm/handlers/flows/requestRegistrationCredentialConfirmation.js +0 -178
- package/dist/esm/react/core/signingEngine/uiConfirm/handlers/flows/signing.js +0 -684
- package/dist/esm/react/core/signingEngine/uiConfirm/handlers/handlePromptFromWorker.js +0 -90
- package/dist/esm/react/core/signingEngine/uiConfirm/nearFundingNotice.js +0 -50
- package/dist/esm/react/core/signingEngine/uiConfirm/transactionReviewAdmission.js +0 -8
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/appearance-token-vars.js +0 -31
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/appearance.js +0 -27
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/confirm-surface-resize.js +0 -346
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/confirm-ui.js +0 -516
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/confirmation-body-model.js +0 -24
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/confirmation-model.js +0 -161
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/drawer-gesture.js +0 -16
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/export-private-key-reveal.js +0 -155
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/export-viewer-host.js +0 -207
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/ConfirmContent.js +0 -131
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/ConfirmHeader.js +0 -29
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/ConfirmationBody.js +0 -49
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/ConfirmationContent.js +0 -137
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/ConfirmationDrawer.js +0 -294
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/ConfirmationModal.js +0 -67
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/CopyStatusIcon.js +0 -41
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/EmailOtpContent.js +0 -141
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/EmailOtpInput.js +0 -92
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/ExportPrivateKeySurface.js +0 -318
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/HaloBorder.js +0 -91
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/PadlockIcon.js +0 -32
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/PasskeyHaloLoading.js +0 -63
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/PasskeyRegistrationContent.js +0 -75
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/PasskeyRegistrationDetails.js +0 -33
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/RecoveryCodeBackupSurface.js +0 -518
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/ReviewDisclosure.js +0 -128
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/SeamsWordmark.js +0 -22
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/TransactionLabel.js +0 -158
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/TransactionReceipt.js +0 -287
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/TransactionReview.js +0 -311
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/TransactionTree.js +0 -284
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/clipboard.js +0 -26
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/confirmation-controller.js +0 -80
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/confirmation-styles.js +0 -20
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/email-otp-session.js +0 -178
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/mountConfirmationSurface.js +0 -297
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/mountExportPrivateKeySurface.js +0 -86
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/mountRecoveryCodeBackupSurface.js +0 -82
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/seamsWordmarkPaths.js +0 -6
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/surface-measurement-binding.js +0 -12
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/surface-resize-events.js +0 -18
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/transaction-activity.js +0 -46
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/transaction-display/abi/abiDecode.js +0 -325
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/transaction-display/abi/enrichDisplayModelWithAbi.js +0 -77
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/transaction-display/confirmation-tree.js +0 -27
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/transaction-display/formatters.js +0 -57
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/transaction-display/renderers/evm.js +0 -12
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/transaction-display/renderers/fallback.js +0 -52
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/transaction-display/renderers/near.js +0 -12
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/transaction-display/renderers/tempo.js +0 -12
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/transaction-display/renderers/types.js +0 -62
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/transaction-display/tree.js +0 -258
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/transaction-receipt.js +0 -50
- package/dist/esm/react/core/signingEngine/uiConfirm/warmSessionUiConfirm.js +0 -65
- package/dist/esm/react/core/signingEngine/walletCustody/activateEd25519Capability.js +0 -123
- package/dist/esm/react/core/signingEngine/walletCustody/ceremonyActiveClientMetadata.js +0 -94
- package/dist/esm/react/core/signingEngine/walletCustody/ceremonyDriver.js +0 -171
- package/dist/esm/react/core/signingEngine/walletCustody/ceremonyStepRunner.js +0 -20
- package/dist/esm/react/core/signingEngine/walletCustody/ed25519ActiveClient.js +0 -100
- package/dist/esm/react/core/signingEngine/walletCustody/ed25519Projection.js +0 -32
- package/dist/esm/react/core/signingEngine/walletCustody/ed25519SeedMaterial.js +0 -92
- package/dist/esm/react/core/signingEngine/walletCustody/emailOtpLink.js +0 -135
- package/dist/esm/react/core/signingEngine/walletCustody/joinCustodyWire.js +0 -64
- package/dist/esm/react/core/signingEngine/walletCustody/openCustodyCache.js +0 -130
- package/dist/esm/react/core/signingEngine/walletCustody/passkeyLink.js +0 -183
- package/dist/esm/react/core/signingEngine/walletCustody/recoveryReplacementEnvelope.js +0 -60
- package/dist/esm/react/core/signingEngine/walletCustody/registrationCeremony.js +0 -461
- package/dist/esm/react/core/signingEngine/walletCustody/unlockedEd25519ExportRootCapability.js +0 -258
- package/dist/esm/react/core/signingEngine/walletCustody/walletRecoveryCredential.js +0 -24
- package/dist/esm/react/core/signingEngine/walletCustody/walletRecoveryEcdsa.js +0 -76
- package/dist/esm/react/core/signingEngine/walletCustody/walletRecoveryEd25519.js +0 -129
- package/dist/esm/react/core/signingEngine/walletCustody/walletRecoveryManifest.js +0 -180
- package/dist/esm/react/core/signingEngine/walletCustody/walletRecoveryRotation.js +0 -103
- package/dist/esm/react/core/signingEngine/webauthnAuth/credentials/collectAuthenticationCredentialForChallengeB64u.js +0 -154
- package/dist/esm/react/core/signingEngine/webauthnAuth/credentials/credentialExtensions.js +0 -36
- package/dist/esm/react/core/signingEngine/webauthnAuth/credentials/helpers.js +0 -273
- package/dist/esm/react/core/signingEngine/webauthnAuth/device/signerSlot.js +0 -25
- package/dist/esm/react/core/signingEngine/webauthnAuth/fallbacks/safari-fallbacks.js +0 -171
- package/dist/esm/react/core/signingEngine/workerManager/SignerWorkerManager.js +0 -70
- package/dist/esm/react/core/signingEngine/workerManager/deviceLinkingPorts.js +0 -323
- package/dist/esm/react/core/signingEngine/workerManager/deviceLinkingSourceContribution.js +0 -158
- package/dist/esm/react/core/signingEngine/workerManager/ecdsaClientWorkerChannels.js +0 -17
- package/dist/esm/react/core/signingEngine/workerManager/ecdsaPresignLifecycle.js +0 -6
- package/dist/esm/react/core/signingEngine/workerManager/ecdsaPresignPoolIdentity.js +0 -49
- package/dist/esm/react/core/signingEngine/workerManager/executeWorkerOperation.js +0 -12
- package/dist/esm/react/core/signingEngine/workerManager/nearKeyOps/createNearKeyOps.js +0 -32
- package/dist/esm/react/core/signingEngine/workerManager/validation.js +0 -114
- package/dist/esm/react/core/signingEngine/workerManager/workerTransport.js +0 -777
- package/dist/esm/react/core/signingEngine/workerManager/workerTypes.js +0 -109
- package/dist/esm/react/core/types/accountIds.js +0 -26
- package/dist/esm/react/core/types/actionBuilders.js +0 -73
- package/dist/esm/react/core/types/confirmationConfig.js +0 -39
- package/dist/esm/react/core/types/eventLogging.js +0 -28
- package/dist/esm/react/core/types/linkDevice.js +0 -49
- package/dist/esm/react/core/types/sdkSentEvents.js +0 -602
- package/dist/esm/react/core/types/secure-confirm-worker.js +0 -22
- package/dist/esm/react/core/types/signer-worker.js +0 -50
- package/dist/esm/react/core/types/walletIframeIdentity.js +0 -15
- package/dist/esm/react/core/walletRuntimePaths/base.js +0 -60
- package/dist/esm/react/core/walletRuntimePaths/emailOtpWorker.js +0 -12
- package/dist/esm/react/core/walletRuntimePaths/multichainWorkers.js +0 -25
- package/dist/esm/react/core/walletRuntimePaths/walletCustodyCeremonyWorker.js +0 -18
- package/dist/esm/react/core/walletRuntimePaths/workers.js +0 -93
- package/dist/esm/react/externalEvm/boundary.js +0 -309
- package/dist/esm/react/externalEvm/controller.js +0 -440
- package/dist/esm/react/externalEvm/types.js +0 -31
- package/dist/esm/react/node_modules/@noble/hashes/esm/_u64.js +0 -36
- package/dist/esm/react/node_modules/@noble/hashes/esm/sha3.js +0 -197
- package/dist/esm/react/node_modules/@noble/hashes/esm/utils.js +0 -87
- package/dist/esm/react/node_modules/viem/_esm/errors/abi.js +0 -48
- package/dist/esm/react/node_modules/viem/_esm/errors/address.js +0 -14
- package/dist/esm/react/node_modules/viem/_esm/errors/base.js +0 -86
- package/dist/esm/react/node_modules/viem/_esm/errors/data.js +0 -16
- package/dist/esm/react/node_modules/viem/_esm/errors/encoding.js +0 -16
- package/dist/esm/react/node_modules/viem/_esm/errors/typedData.js +0 -28
- package/dist/esm/react/node_modules/viem/_esm/errors/version.js +0 -6
- package/dist/esm/react/node_modules/viem/_esm/utils/abi/encodeAbiParameters.js +0 -243
- package/dist/esm/react/node_modules/viem/_esm/utils/address/getAddress.js +0 -28
- package/dist/esm/react/node_modules/viem/_esm/utils/address/isAddress.js +0 -23
- package/dist/esm/react/node_modules/viem/_esm/utils/data/concat.js +0 -23
- package/dist/esm/react/node_modules/viem/_esm/utils/data/isHex.js +0 -10
- package/dist/esm/react/node_modules/viem/_esm/utils/data/pad.js +0 -40
- package/dist/esm/react/node_modules/viem/_esm/utils/data/size.js +0 -16
- package/dist/esm/react/node_modules/viem/_esm/utils/data/slice.js +0 -59
- package/dist/esm/react/node_modules/viem/_esm/utils/encoding/fromHex.js +0 -13
- package/dist/esm/react/node_modules/viem/_esm/utils/encoding/toBytes.js +0 -175
- package/dist/esm/react/node_modules/viem/_esm/utils/encoding/toHex.js +0 -168
- package/dist/esm/react/node_modules/viem/_esm/utils/hash/keccak256.js +0 -15
- package/dist/esm/react/node_modules/viem/_esm/utils/lru.js +0 -38
- package/dist/esm/react/node_modules/viem/_esm/utils/regex.js +0 -7
- package/dist/esm/react/node_modules/viem/_esm/utils/signature/hashTypedData.js +0 -113
- package/dist/esm/react/node_modules/viem/_esm/utils/stringify.js +0 -9
- package/dist/esm/react/node_modules/viem/_esm/utils/typedData.js +0 -80
- package/dist/esm/react/shared-ts/src/authorization/capabilityKinds.js +0 -111
- package/dist/esm/react/shared-ts/src/authorization/delegatedAuthority.js +0 -121
- package/dist/esm/react/shared-ts/src/authorization/index.js +0 -6
- package/dist/esm/react/shared-ts/src/authorization/operationFingerprint.js +0 -57
- package/dist/esm/react/shared-ts/src/authorization/walletAuthority.js +0 -719
- package/dist/esm/react/shared-ts/src/authorization/walletCustodyOperation.js +0 -16
- package/dist/esm/react/shared-ts/src/authorization/walletSessionIssuance.js +0 -118
- package/dist/esm/react/shared-ts/src/device-linking/activeWalletSession.js +0 -104
- package/dist/esm/react/shared-ts/src/device-linking/authorityActivation.js +0 -142
- package/dist/esm/react/shared-ts/src/device-linking/committedSignerPackages.js +0 -273
- package/dist/esm/react/shared-ts/src/device-linking/contracts.js +0 -8
- package/dist/esm/react/shared-ts/src/device-linking/delegatedActivationPlan.js +0 -134
- package/dist/esm/react/shared-ts/src/device-linking/deviceManagement.js +0 -120
- package/dist/esm/react/shared-ts/src/device-linking/digests.js +0 -115
- package/dist/esm/react/shared-ts/src/device-linking/ed25519ExportRoot.js +0 -171
- package/dist/esm/react/shared-ts/src/device-linking/index.js +0 -12
- package/dist/esm/react/shared-ts/src/device-linking/parsers.js +0 -1029
- package/dist/esm/react/shared-ts/src/device-linking/requestProof.js +0 -25
- package/dist/esm/react/shared-ts/src/device-linking/sourceContribution.js +0 -545
- package/dist/esm/react/shared-ts/src/device-linking/walletSessionCredentialDelivery.js +0 -173
- package/dist/esm/react/shared-ts/src/device-linking/wireFields.js +0 -59
- package/dist/esm/react/shared-ts/src/near/actions.js +0 -236
- package/dist/esm/react/shared-ts/src/near/nearClient.js +0 -252
- package/dist/esm/react/shared-ts/src/passkey-custody/ceremonyCommitPayload.js +0 -43
- package/dist/esm/react/shared-ts/src/passkey-custody/custodyEnvelope.js +0 -278
- package/dist/esm/react/shared-ts/src/passkey-custody/custodySecretBinding.js +0 -181
- package/dist/esm/react/shared-ts/src/passkey-custody/index.js +0 -4
- package/dist/esm/react/shared-ts/src/passkey-custody/primitives.js +0 -58
- package/dist/esm/react/shared-ts/src/signing-lanes/evmFamilySigningKeySlotId.js +0 -49
- package/dist/esm/react/shared-ts/src/signing-lanes/index.js +0 -8
- package/dist/esm/react/shared-ts/src/signing-lanes/ownerContinuity.js +0 -66
- package/dist/esm/react/shared-ts/src/signing-lanes/participantDigest.js +0 -2
- package/dist/esm/react/shared-ts/src/signing-lanes/participants.js +0 -256
- package/dist/esm/react/shared-ts/src/signing-lanes/recordParsers.js +0 -483
- package/dist/esm/react/shared-ts/src/signing-lanes/rotationDigests.js +0 -6
- package/dist/esm/react/shared-ts/src/signing-lanes/rotationParsers.js +0 -3
- package/dist/esm/react/shared-ts/src/signing-lanes/rotationProtocolParsers.js +0 -8
- package/dist/esm/react/shared-ts/src/signing-lanes/rotationWireFields.js +0 -3
- package/dist/esm/react/shared-ts/src/threshold/ecdsaDerivationRoleLocalBootstrap.js +0 -39
- package/dist/esm/react/shared-ts/src/threshold/ed25519OperationFingerprint.js +0 -222
- package/dist/esm/react/shared-ts/src/threshold/keyMaterialBrands.js +0 -25
- package/dist/esm/react/shared-ts/src/threshold/participants.js +0 -67
- package/dist/esm/react/shared-ts/src/threshold/secp256k1.js +0 -6
- package/dist/esm/react/shared-ts/src/threshold/sessionPolicy.js +0 -8
- package/dist/esm/react/shared-ts/src/threshold/signingRootScope.js +0 -40
- package/dist/esm/react/shared-ts/src/utils/addAuthMethodRegistration.js +0 -103
- package/dist/esm/react/shared-ts/src/utils/addWalletAuthMethod.js +0 -1
- package/dist/esm/react/shared-ts/src/utils/authenticatorOptions.js +0 -22
- package/dist/esm/react/shared-ts/src/utils/base58.js +0 -28
- package/dist/esm/react/shared-ts/src/utils/base64.js +0 -70
- package/dist/esm/react/shared-ts/src/utils/canonicalPrimitives.js +0 -38
- package/dist/esm/react/shared-ts/src/utils/digestEncoding.js +0 -63
- package/dist/esm/react/shared-ts/src/utils/digests.js +0 -33
- package/dist/esm/react/shared-ts/src/utils/domainIds.js +0 -257
- package/dist/esm/react/shared-ts/src/utils/ecdsaCapabilityActivation.js +0 -67
- package/dist/esm/react/shared-ts/src/utils/ecdsaKeyFactsInventory.js +0 -46
- package/dist/esm/react/shared-ts/src/utils/ecdsaServerTiming.js +0 -39
- package/dist/esm/react/shared-ts/src/utils/emailOtpDomain.js +0 -28
- package/dist/esm/react/shared-ts/src/utils/emailOtpRecoveryKey.js +0 -65
- package/dist/esm/react/shared-ts/src/utils/encoders.js +0 -2
- package/dist/esm/react/shared-ts/src/utils/errors.js +0 -95
- package/dist/esm/react/shared-ts/src/utils/evmRpcResults.js +0 -101
- package/dist/esm/react/shared-ts/src/utils/exactRecord.js +0 -44
- package/dist/esm/react/shared-ts/src/utils/index.js +0 -38
- package/dist/esm/react/shared-ts/src/utils/jsonRpc.js +0 -64
- package/dist/esm/react/shared-ts/src/utils/keccak.js +0 -150
- package/dist/esm/react/shared-ts/src/utils/near.js +0 -205
- package/dist/esm/react/shared-ts/src/utils/nearRpcResults.js +0 -205
- package/dist/esm/react/shared-ts/src/utils/normalize.js +0 -86
- package/dist/esm/react/shared-ts/src/utils/registrationAuthMethodInput.js +0 -84
- package/dist/esm/react/shared-ts/src/utils/registrationEstablishedSession.js +0 -275
- package/dist/esm/react/shared-ts/src/utils/registrationIds.js +0 -226
- package/dist/esm/react/shared-ts/src/utils/registrationIntent.js +0 -396
- package/dist/esm/react/shared-ts/src/utils/registrationSignerPlan.js +0 -442
- package/dist/esm/react/shared-ts/src/utils/routerAbEcdsaDerivation.js +0 -1334
- package/dist/esm/react/shared-ts/src/utils/routerAbEd25519Yao.js +0 -747
- package/dist/esm/react/shared-ts/src/utils/routerAbEd25519YaoDigests.js +0 -76
- package/dist/esm/react/shared-ts/src/utils/routerAbNormalSigningIdentity.js +0 -115
- package/dist/esm/react/shared-ts/src/utils/routerAbPublicKeyset.js +0 -11
- package/dist/esm/react/shared-ts/src/utils/routerAbTraceContext.js +0 -36
- package/dist/esm/react/shared-ts/src/utils/secureRandomId.js +0 -35
- package/dist/esm/react/shared-ts/src/utils/signerDomain.js +0 -37
- package/dist/esm/react/shared-ts/src/utils/signerSlot.js +0 -12
- package/dist/esm/react/shared-ts/src/utils/signingSessionSeal.js +0 -98
- package/dist/esm/react/shared-ts/src/utils/theme.js +0 -8
- package/dist/esm/react/shared-ts/src/utils/thresholdEcdsaKeyHandle.js +0 -28
- package/dist/esm/react/shared-ts/src/utils/validation.js +0 -92
- package/dist/esm/react/shared-ts/src/utils/walletAddSignerActivation.js +0 -32
- package/dist/esm/react/shared-ts/src/utils/walletAuthAuthority.js +0 -224
- package/dist/esm/react/shared-ts/src/utils/walletAuthMethodRecord.js +0 -357
- package/dist/esm/react/shared-ts/src/utils/walletCapabilityBindings.js +0 -277
- package/dist/esm/react/shared-ts/src/utils/walletSessionFailure.js +0 -28
- package/dist/esm/react/shared-ts/src/utils/webauthnDeviceInfo.js +0 -50
- package/dist/esm/react/shared-ts/src/utils/wireSchema.js +0 -66
- package/dist/esm/react/shared-ts/src/wallet-recovery/index.js +0 -10
- package/dist/esm/react/shared-ts/src/wallet-recovery/recoveryCodeIssuance.js +0 -35
- package/dist/esm/react/shared-ts/src/wallet-recovery/recoveryCodeLocator.js +0 -34
- package/dist/esm/react/shared-ts/src/wallet-recovery/recoveryCodeReservation.js +0 -24
- package/dist/esm/react/shared-ts/src/wallet-recovery/recoveryCodes.js +0 -3
- package/dist/esm/react/shared-ts/src/wallet-recovery/recoveryKeyId.js +0 -14
- package/dist/esm/react/shared-ts/src/wallet-recovery/walletRecoveryCommittedProjection.js +0 -254
- package/dist/esm/react/shared-ts/src/wallet-recovery/walletRecoveryEcdsaPossession.js +0 -153
- package/dist/esm/react/shared-ts/src/wallet-recovery/walletRecoveryEnvelopeSet.js +0 -84
- package/dist/esm/react/shared-ts/src/wallet-recovery/walletRecoveryRotation.js +0 -64
- package/dist/esm/react/theme/base-styles.js +0 -117
- package/dist/esm/react/theme/palette.js +0 -170
- package/dist/esm/react/utils/deviceDetection.js +0 -95
- package/dist/esm/react/utils/intentDigest.js +0 -77
- package/dist/esm/react/utils/qrScanner.js +0 -297
- package/dist/esm/sdk/ConfirmationDrawer-MgFTBwwK.js +0 -425
- package/dist/esm/sdk/EvmClient-f3gUhS2L.js +0 -644
- package/dist/esm/sdk/NearClient-DY4NfHeD.js +0 -402
- package/dist/esm/sdk/NonceCoordinator-4XWPhYww.js +0 -2253
- package/dist/esm/sdk/accountIds-DhIPGOSN.js +0 -23
- package/dist/esm/sdk/accountLifecycle-BAGG_rbk.js +0 -1341
- package/dist/esm/sdk/actions-CCvThiKe.js +0 -225
- package/dist/esm/sdk/adapters-B4JeK1nJ.js +0 -4864
- package/dist/esm/sdk/base-D1B5mGin.js +0 -64
- package/dist/esm/sdk/base64-Clm8C-e9.js +0 -68
- package/dist/esm/sdk/browser-D6eZGhzE.js +0 -2393
- package/dist/esm/sdk/bytes-qKxKn4gg.js +0 -40
- package/dist/esm/sdk/canonicalPrimitives-BTHWz80v.js +0 -36
- package/dist/esm/sdk/canonicalSignerErrorCode-CRoJMVpp.js +0 -153
- package/dist/esm/sdk/capabilityKinds-hvYqa6S_.js +0 -109
- package/dist/esm/sdk/chains-BMh3btVo.js +0 -124
- package/dist/esm/sdk/challengeDelivery-Dd0586fo.js +0 -74
- package/dist/esm/sdk/chunk-BtrIJ4_z.js +0 -33
- package/dist/esm/sdk/configHelpers-vAQCzUD0.js +0 -179
- package/dist/esm/sdk/csp-stylesheet-btENhsNp.js +0 -215
- package/dist/esm/sdk/defaultConfigs-B3c16M_8.js +0 -355
- package/dist/esm/sdk/display-KdIL0ff7.js +0 -126
- package/dist/esm/sdk/domainIds-lcrFg6Sa.js +0 -338
- package/dist/esm/sdk/ecdsaCapabilityManifest-kzO_fW09.js +0 -817
- package/dist/esm/sdk/ecdsaChainTarget-Bl-JWyuw.js +0 -121
- package/dist/esm/sdk/ecdsaPresignLifecycle-BFOTNYCK.js +0 -1983
- package/dist/esm/sdk/ecdsaPresignPoolIdentity-BjxZVIqn.js +0 -47
- package/dist/esm/sdk/ecdsaWalletRecords-Cz4m6bIz.js +0 -18
- package/dist/esm/sdk/encoders-D8d07vpx.js +0 -0
- package/dist/esm/sdk/enrichDisplayModelWithAbi-CWggsykc.js +0 -395
- package/dist/esm/sdk/enrichDisplayModelWithAbi-SDRwTd_M.js +0 -579
- package/dist/esm/sdk/errors-93h9uAW9.js +0 -92
- package/dist/esm/sdk/events-DYoBL2HO.js +0 -8
- package/dist/esm/sdk/evmCryptoWasm-DWklhEEb.js +0 -196
- package/dist/esm/sdk/evmFamilyEcdsaIdentity-Co5XDcEA.js +0 -4288
- package/dist/esm/sdk/exactSessionState-CiD5fBEs.js +0 -2612
- package/dist/esm/sdk/exactSigningLaneIdentity-DQeqPMST.js +0 -335
- package/dist/esm/sdk/executeWorkerOperation-Cl9whMK7.js +0 -10
- package/dist/esm/sdk/export-viewer-host-ZqA2Yz3H.js +0 -204
- package/dist/esm/sdk/helpers-ZrowMnev.js +0 -302
- package/dist/esm/sdk/host-BWBbCAMu.js +0 -533
- package/dist/esm/sdk/intentDigest-CvOSNlCH.js +0 -75
- package/dist/esm/sdk/jsonRpc-VVkaQkFD.js +0 -62
- package/dist/esm/sdk/jsxRuntime.module-CuH5ZEIA.js +0 -298
- package/dist/esm/sdk/keccak-DUL3d8SF.js +0 -148
- package/dist/esm/sdk/keyMaterialBrands-CX41hur6.js +0 -94
- package/dist/esm/sdk/localOnly-Bg8UuLZ5.js +0 -146
- package/dist/esm/sdk/messages-C7Dbx9iN.js +0 -594
- package/dist/esm/sdk/mountExportPrivateKeySurface-DgX-IBG_.js +0 -542
- package/dist/esm/sdk/mountRecoveryCodeBackupSurface-DXrExiJ7.js +0 -590
- package/dist/esm/sdk/nearEd25519YaoMaterialActivation-DPb0s3hQ.js +0 -4008
- package/dist/esm/sdk/nearEd25519YaoSigningPreparation-BeD-SmbK.js +0 -405
- package/dist/esm/sdk/nearRpcResults-DoUgDATm.js +0 -216
- package/dist/esm/sdk/nonceLaneKeys-C3c9lG6u.js +0 -164
- package/dist/esm/sdk/normalization-CBt413-z.js +0 -22
- package/dist/esm/sdk/operationFingerprint-C8Trar4R.js +0 -929
- package/dist/esm/sdk/operationFingerprint-CGZui5dR.js +0 -55
- package/dist/esm/sdk/passkey-custody-Bk1jAknm.js +0 -487
- package/dist/esm/sdk/pendingWalletRecoveryCodeBackup-DLzBb3WQ.js +0 -237
- package/dist/esm/sdk/prfCache-wqQSjYLn.js +0 -58
- package/dist/esm/sdk/profileAccountProjection-uZVJuBvS.js +0 -86
- package/dist/esm/sdk/promptText-CuRa_ivd.js +0 -32
- package/dist/esm/sdk/recovery-entrypoint-DW2tGyMs.js +0 -779
- package/dist/esm/sdk/registration-BZDzDv91.js +0 -14414
- package/dist/esm/sdk/registration-BzVHODuD.js +0 -233
- package/dist/esm/sdk/registrationAccounts-CKku_Sgy.js +0 -33
- package/dist/esm/sdk/registrationIds-DLSdEKSv.js +0 -310
- package/dist/esm/sdk/registrationIntent-D0PxwEY4.js +0 -393
- package/dist/esm/sdk/registrationPreparationPreload-CIAuRlxI.js +0 -13
- package/dist/esm/sdk/registrationSignerPlan-CAikVZZQ.js +0 -440
- package/dist/esm/sdk/relayerHttp-VC8Holz1.js +0 -24
- package/dist/esm/sdk/routePlan-D59x5xzQ.js +0 -83
- package/dist/esm/sdk/router-C5lF_J_u.js +0 -4721
- package/dist/esm/sdk/routerAbNormalSigning-fhvpDtmY.js +0 -992
- package/dist/esm/sdk/runtime-auth-DFTqwj3u.js +0 -5540
- package/dist/esm/sdk/runtime-device-link-C1Oub8Lw.js +0 -259
- package/dist/esm/sdk/runtime-ecdsa-tempo-rkWwolw1.js +0 -177
- package/dist/esm/sdk/runtime-email-otp-vuUG5LYl.js +0 -320
- package/dist/esm/sdk/runtime-export-FZWj0HxJ.js +0 -112
- package/dist/esm/sdk/runtime-near-B9cjurVD.js +0 -278
- package/dist/esm/sdk/runtime-preferences-Dq0bfyS5.js +0 -67
- package/dist/esm/sdk/runtime-recovery-C-vfFKF3.js +0 -45
- package/dist/esm/sdk/runtime-recovery-codes-bTm3fLV4.js +0 -95
- package/dist/esm/sdk/runtimeContext-iLXnxVlZ.js +0 -44443
- package/dist/esm/sdk/runtimeLoader-hod6T2-m.js +0 -44
- package/dist/esm/sdk/sdkSentEvents-MqDkbQg1.js +0 -599
- package/dist/esm/sdk/secp256k1-el9aE4Sv.js +0 -2504
- package/dist/esm/sdk/secureRandomId-BORsmdS4.js +0 -33
- package/dist/esm/sdk/sessionPolicy-CHiilOAB.js +0 -453
- package/dist/esm/sdk/shared-DkbeLCI3.js +0 -33
- package/dist/esm/sdk/signEvmFamily-e4IWWsZs.js +0 -4666
- package/dist/esm/sdk/signEvmFamilyWithUiConfirmForTempo-Cu9qdk8M.js +0 -226
- package/dist/esm/sdk/signEvmWithUiConfirm-C61TCBnh.js +0 -27
- package/dist/esm/sdk/signNear-Bblwn2kT.js +0 -5929
- package/dist/esm/sdk/signatureUses-BkGyYt8F.js +0 -51
- package/dist/esm/sdk/signerDomain-IEAVrOrc.js +0 -59
- package/dist/esm/sdk/signerLoader-D7Aey0FD.js +0 -23
- package/dist/esm/sdk/signerSlot-_ovonwVX.js +0 -10
- package/dist/esm/sdk/signingFlow-rZfPegH9.js +0 -1320
- package/dist/esm/sdk/signingSessionSeal-Cu-GHm6y.js +0 -96
- package/dist/esm/sdk/surface-measurement-reporter-CSTyRsMa.js +0 -156
- package/dist/esm/sdk/trace-rHe0wz7q.js +0 -127
- package/dist/esm/sdk/transaction-activity-CSMCveBn.js +0 -218
- package/dist/esm/sdk/transactionReview-DpHLTznU.js +0 -100
- package/dist/esm/sdk/transactionReviewAdmission-BCPvl8OZ.js +0 -172
- package/dist/esm/sdk/transactionState-DP9O8F6f.js +0 -1885
- package/dist/esm/sdk/types-Dx9fczU7.js +0 -111
- package/dist/esm/sdk/validation-gat4LEKm.js +0 -409
- package/dist/esm/sdk/wallet-recovery-Bz9qKgaL.js +0 -1905
- package/dist/esm/sdk/walletAuthority-BQBxgUBn.js +0 -1251
- package/dist/esm/sdk/walletCustodyEcdsaContinuity-Hn4ORIbf.js +0 -11130
- package/dist/esm/sdk/walletIframeIdentity-DB6Z2EC9.js +0 -13
- package/dist/esm/sdk/walletRecoveryCommit-sjGNTHUj.js +0 -2159
- package/dist/esm/sdk/walletRecoveryRotate-BgLlW5ih.js +0 -309
- package/dist/esm/sdk/warmSessionHydration-Os8niEm7.js +0 -7
- package/dist/esm/sdk/webauthnP256-DC5EIbKN.js +0 -82
- package/dist/esm/sdk/webauthnPromptCoordinator-L96oVvLz.js +0 -168
- package/dist/esm/shared-ts/src/signing-lanes/rotationDigests.js +0 -6
- package/dist/esm/shared-ts/src/signing-lanes/rotationParsers.js +0 -3
- package/dist/esm/shared-ts/src/signing-lanes/rotationProtocolParsers.js +0 -8
- package/dist/esm/shared-ts/src/signing-lanes/rotationWireFields.js +0 -3
- package/dist/esm/shared-ts/src/utils/addWalletAuthMethod.js +0 -1
- package/dist/esm/styles.css +0 -43
- package/dist/public/sdk/ConfirmationDrawer-MgFTBwwK.js +0 -425
- package/dist/public/sdk/EvmClient-f3gUhS2L.js +0 -644
- package/dist/public/sdk/NearClient-DY4NfHeD.js +0 -402
- package/dist/public/sdk/NonceCoordinator-4XWPhYww.js +0 -2253
- package/dist/public/sdk/accountIds-DhIPGOSN.js +0 -23
- package/dist/public/sdk/accountLifecycle-BAGG_rbk.js +0 -1341
- package/dist/public/sdk/actions-CCvThiKe.js +0 -225
- package/dist/public/sdk/adapters-B4JeK1nJ.js +0 -4864
- package/dist/public/sdk/base-D1B5mGin.js +0 -64
- package/dist/public/sdk/base64-Clm8C-e9.js +0 -68
- package/dist/public/sdk/browser-D6eZGhzE.js +0 -2393
- package/dist/public/sdk/bytes-qKxKn4gg.js +0 -40
- package/dist/public/sdk/canonicalPrimitives-BTHWz80v.js +0 -36
- package/dist/public/sdk/canonicalSignerErrorCode-CRoJMVpp.js +0 -153
- package/dist/public/sdk/capabilityKinds-hvYqa6S_.js +0 -109
- package/dist/public/sdk/chains-BMh3btVo.js +0 -124
- package/dist/public/sdk/challengeDelivery-Dd0586fo.js +0 -74
- package/dist/public/sdk/chunk-BtrIJ4_z.js +0 -33
- package/dist/public/sdk/configHelpers-vAQCzUD0.js +0 -179
- package/dist/public/sdk/csp-stylesheet-btENhsNp.js +0 -215
- package/dist/public/sdk/defaultConfigs-B3c16M_8.js +0 -355
- package/dist/public/sdk/display-KdIL0ff7.js +0 -126
- package/dist/public/sdk/domainIds-lcrFg6Sa.js +0 -338
- package/dist/public/sdk/ecdsaCapabilityManifest-kzO_fW09.js +0 -817
- package/dist/public/sdk/ecdsaChainTarget-Bl-JWyuw.js +0 -121
- package/dist/public/sdk/ecdsaPresignLifecycle-BFOTNYCK.js +0 -1983
- package/dist/public/sdk/ecdsaPresignPoolIdentity-BjxZVIqn.js +0 -47
- package/dist/public/sdk/ecdsaWalletRecords-Cz4m6bIz.js +0 -18
- package/dist/public/sdk/encoders-D8d07vpx.js +0 -0
- package/dist/public/sdk/enrichDisplayModelWithAbi-CWggsykc.js +0 -395
- package/dist/public/sdk/enrichDisplayModelWithAbi-SDRwTd_M.js +0 -579
- package/dist/public/sdk/errors-93h9uAW9.js +0 -92
- package/dist/public/sdk/events-DYoBL2HO.js +0 -8
- package/dist/public/sdk/evmCryptoWasm-DWklhEEb.js +0 -196
- package/dist/public/sdk/evmFamilyEcdsaIdentity-Co5XDcEA.js +0 -4288
- package/dist/public/sdk/exactSessionState-CiD5fBEs.js +0 -2612
- package/dist/public/sdk/exactSigningLaneIdentity-DQeqPMST.js +0 -335
- package/dist/public/sdk/executeWorkerOperation-Cl9whMK7.js +0 -10
- package/dist/public/sdk/export-viewer-host-ZqA2Yz3H.js +0 -204
- package/dist/public/sdk/helpers-ZrowMnev.js +0 -302
- package/dist/public/sdk/host-BWBbCAMu.js +0 -533
- package/dist/public/sdk/intentDigest-CvOSNlCH.js +0 -75
- package/dist/public/sdk/jsonRpc-VVkaQkFD.js +0 -62
- package/dist/public/sdk/jsxRuntime.module-CuH5ZEIA.js +0 -298
- package/dist/public/sdk/keccak-DUL3d8SF.js +0 -148
- package/dist/public/sdk/keyMaterialBrands-CX41hur6.js +0 -94
- package/dist/public/sdk/localOnly-Bg8UuLZ5.js +0 -146
- package/dist/public/sdk/messages-C7Dbx9iN.js +0 -594
- package/dist/public/sdk/mountExportPrivateKeySurface-DgX-IBG_.js +0 -542
- package/dist/public/sdk/mountRecoveryCodeBackupSurface-DXrExiJ7.js +0 -590
- package/dist/public/sdk/nearEd25519YaoMaterialActivation-DPb0s3hQ.js +0 -4008
- package/dist/public/sdk/nearEd25519YaoSigningPreparation-BeD-SmbK.js +0 -405
- package/dist/public/sdk/nearRpcResults-DoUgDATm.js +0 -216
- package/dist/public/sdk/nonceLaneKeys-C3c9lG6u.js +0 -164
- package/dist/public/sdk/normalization-CBt413-z.js +0 -22
- package/dist/public/sdk/operationFingerprint-C8Trar4R.js +0 -929
- package/dist/public/sdk/operationFingerprint-CGZui5dR.js +0 -55
- package/dist/public/sdk/passkey-custody-Bk1jAknm.js +0 -487
- package/dist/public/sdk/pendingWalletRecoveryCodeBackup-DLzBb3WQ.js +0 -237
- package/dist/public/sdk/prfCache-wqQSjYLn.js +0 -58
- package/dist/public/sdk/profileAccountProjection-uZVJuBvS.js +0 -86
- package/dist/public/sdk/promptText-CuRa_ivd.js +0 -32
- package/dist/public/sdk/recovery-entrypoint-DW2tGyMs.js +0 -779
- package/dist/public/sdk/registration-BZDzDv91.js +0 -14414
- package/dist/public/sdk/registration-BzVHODuD.js +0 -233
- package/dist/public/sdk/registrationAccounts-CKku_Sgy.js +0 -33
- package/dist/public/sdk/registrationIds-DLSdEKSv.js +0 -310
- package/dist/public/sdk/registrationIntent-D0PxwEY4.js +0 -393
- package/dist/public/sdk/registrationPreparationPreload-CIAuRlxI.js +0 -13
- package/dist/public/sdk/registrationSignerPlan-CAikVZZQ.js +0 -440
- package/dist/public/sdk/relayerHttp-VC8Holz1.js +0 -24
- package/dist/public/sdk/routePlan-D59x5xzQ.js +0 -83
- package/dist/public/sdk/router-C5lF_J_u.js +0 -4721
- package/dist/public/sdk/routerAbNormalSigning-fhvpDtmY.js +0 -992
- package/dist/public/sdk/runtime-auth-DFTqwj3u.js +0 -5540
- package/dist/public/sdk/runtime-device-link-C1Oub8Lw.js +0 -259
- package/dist/public/sdk/runtime-ecdsa-tempo-rkWwolw1.js +0 -177
- package/dist/public/sdk/runtime-email-otp-vuUG5LYl.js +0 -320
- package/dist/public/sdk/runtime-export-FZWj0HxJ.js +0 -112
- package/dist/public/sdk/runtime-near-B9cjurVD.js +0 -278
- package/dist/public/sdk/runtime-preferences-Dq0bfyS5.js +0 -67
- package/dist/public/sdk/runtime-recovery-C-vfFKF3.js +0 -45
- package/dist/public/sdk/runtime-recovery-codes-bTm3fLV4.js +0 -95
- package/dist/public/sdk/runtimeContext-iLXnxVlZ.js +0 -44443
- package/dist/public/sdk/runtimeLoader-hod6T2-m.js +0 -44
- package/dist/public/sdk/sdkSentEvents-MqDkbQg1.js +0 -599
- package/dist/public/sdk/secp256k1-el9aE4Sv.js +0 -2504
- package/dist/public/sdk/secureRandomId-BORsmdS4.js +0 -33
- package/dist/public/sdk/sessionPolicy-CHiilOAB.js +0 -453
- package/dist/public/sdk/shared-DkbeLCI3.js +0 -33
- package/dist/public/sdk/signEvmFamily-e4IWWsZs.js +0 -4666
- package/dist/public/sdk/signEvmFamilyWithUiConfirmForTempo-Cu9qdk8M.js +0 -226
- package/dist/public/sdk/signEvmWithUiConfirm-C61TCBnh.js +0 -27
- package/dist/public/sdk/signNear-Bblwn2kT.js +0 -5929
- package/dist/public/sdk/signatureUses-BkGyYt8F.js +0 -51
- package/dist/public/sdk/signerDomain-IEAVrOrc.js +0 -59
- package/dist/public/sdk/signerLoader-D7Aey0FD.js +0 -23
- package/dist/public/sdk/signerSlot-_ovonwVX.js +0 -10
- package/dist/public/sdk/signingFlow-rZfPegH9.js +0 -1320
- package/dist/public/sdk/signingSessionSeal-Cu-GHm6y.js +0 -96
- package/dist/public/sdk/surface-measurement-reporter-CSTyRsMa.js +0 -156
- package/dist/public/sdk/trace-rHe0wz7q.js +0 -127
- package/dist/public/sdk/transaction-activity-CSMCveBn.js +0 -218
- package/dist/public/sdk/transactionReview-DpHLTznU.js +0 -100
- package/dist/public/sdk/transactionReviewAdmission-BCPvl8OZ.js +0 -172
- package/dist/public/sdk/transactionState-DP9O8F6f.js +0 -1885
- package/dist/public/sdk/types-Dx9fczU7.js +0 -111
- package/dist/public/sdk/validation-gat4LEKm.js +0 -409
- package/dist/public/sdk/wallet-recovery-Bz9qKgaL.js +0 -1905
- package/dist/public/sdk/walletAuthority-BQBxgUBn.js +0 -1251
- package/dist/public/sdk/walletCustodyEcdsaContinuity-Hn4ORIbf.js +0 -11130
- package/dist/public/sdk/walletIframeIdentity-DB6Z2EC9.js +0 -13
- package/dist/public/sdk/walletRecoveryCommit-sjGNTHUj.js +0 -2159
- package/dist/public/sdk/walletRecoveryRotate-BgLlW5ih.js +0 -309
- package/dist/public/sdk/warmSessionHydration-Os8niEm7.js +0 -7
- package/dist/public/sdk/webauthnP256-DC5EIbKN.js +0 -82
- package/dist/public/sdk/webauthnPromptCoordinator-L96oVvLz.js +0 -168
- package/dist/types/shared-ts/src/signing-lanes/participantDigest.typecheck.d.ts +0 -2
- package/dist/types/shared-ts/src/signing-lanes/rotation.typecheck.d.ts +0 -2
- package/dist/types/shared-ts/src/signing-lanes/rotationDigests.d.ts +0 -13
- package/dist/types/shared-ts/src/signing-lanes/rotationLifecycle.d.ts +0 -78
- package/dist/types/shared-ts/src/signing-lanes/rotationParsers.d.ts +0 -27
- package/dist/types/shared-ts/src/signing-lanes/rotationProtocolParsers.d.ts +0 -6
- package/dist/types/shared-ts/src/signing-lanes/rotationWireFields.d.ts +0 -20
- package/dist/types/shared-ts/src/wallet-recovery/recoveryCodeAttempt.d.ts +0 -59
- package/dist/types/wallet/src/SeamsWeb/walletIframe/client/transport/webauthn-bridge.d.ts +0 -3
- package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/laneHolderMaterialStore.d.ts +0 -52
- package/dist/types/wallet/src/core/signingEngine/interfaces/nearKeyOps.d.ts +0 -15
- package/dist/types/wallet/src/core/signingEngine/session/emailOtp/coordinatorRuntime.d.ts +0 -43
- package/dist/types/wallet/src/core/signingEngine/session/holderShares/forbiddenHolderSharePayloads.typecheck.d.ts +0 -2
- package/dist/types/wallet/src/core/signingEngine/session/holderShares/holderShareHandle.d.ts +0 -6
- package/dist/types/wallet/src/core/signingEngine/session/identity/emailOtpEcdsaDerivationIdentity.typecheck.d.ts +0 -2
- package/dist/types/wallet/src/core/signingEngine/session/lanes/operations/activationCoordinator.d.ts +0 -37
- package/dist/types/wallet/src/core/signingEngine/session/lanes/operations/laneMaterialInvalidation.d.ts +0 -23
- package/dist/types/wallet/src/core/signingEngine/session/lanes/operations/operations.typecheck.d.ts +0 -2
- package/dist/types/wallet/src/core/signingEngine/session/lanes/operations/recipientPreparation.d.ts +0 -55
- package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/ecdsaProvisionPlan.typecheck.d.ts +0 -6
- package/dist/types/wallet/src/core/signingEngine/threshold/crypto/ecdsaLaneWasm.d.ts +0 -4
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/transaction-display/renderers/evm.d.ts +0 -5
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/transaction-display/renderers/near.d.ts +0 -5
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/transaction-display/renderers/tempo.d.ts +0 -5
- package/dist/types/wallet/src/core/signingEngine/webauthnAuth/fallbacks/safari-fallbacks.d.ts +0 -44
- package/dist/types/wallet/src/core/signingEngine/workerManager/nearKeyOps/createNearKeyOps.d.ts +0 -4
- package/dist/types/wallet/src/core/signingEngine/workerManager/workers/ecdsaLaneHolderWorkerRuntime.d.ts +0 -20
- package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/passkeyCustodyLink.d.ts +0 -18
- /package/dist/esm/{react/SeamsWeb → SeamsWeb}/assembly/preconnectWalletAssets.js +0 -0
|
@@ -1,4666 +0,0 @@
|
|
|
1
|
-
import { n as __exportAll } from "./chunk-BtrIJ4_z.js";
|
|
2
|
-
import { h as parseMpcMaterialActivationRef, r as mpcMaterialActivationRefsEqual } from "./domainIds-lcrFg6Sa.js";
|
|
3
|
-
import { r as reviewAdmissionForBinding } from "./transactionReviewAdmission-BCPvl8OZ.js";
|
|
4
|
-
import { r as base64UrlDecode } from "./base64-Clm8C-e9.js";
|
|
5
|
-
import { n as secureRandomBase64Url } from "./secureRandomId-BORsmdS4.js";
|
|
6
|
-
import { h as normalizeRuntimePolicyScope } from "./sessionPolicy-CHiilOAB.js";
|
|
7
|
-
import { At as walletSessionPreservesCapabilities, Ct as routerAbMpcMaterialActivationRefFromWire, L as sameRouterAbEcdsaDerivationNormalSigningScopeV1, M as routerAbEcdsaDerivationActiveStateId, X as isPasskeyWalletAuthAuthority, Y as isEmailOtpWalletAuthAuthority, Z as parseEmailOtpWalletAuthAuthority, a as ROUTER_AB_ECDSA_DERIVATION_OPERATION_STEP_UP_PATH, b as parseRouterAbEcdsaOperationStepUpAuthorizationRequestV1, et as parseWalletAuthAuthorityRef, f as computeRouterAbEcdsaOperationStepUpChallengeB64u, g as parseRouterAbEcdsaDerivationNormalSigningScopeV1, ht as computeEcdsaDerivationRoleLocalRelayerKeyId, j as requireRouterAbEcdsaDerivationNormalSigningStateV1, nt as walletAuthAuthorityRef, tt as walletAuthAuthoritiesMatch, wt as routerAbMpcMaterialActivationRefToWire, x as parseRouterAbEcdsaOperationStepUpAuthorizationResponseV1 } from "./ecdsaPresignLifecycle-BFOTNYCK.js";
|
|
8
|
-
import { t as chainFamilyFromNetwork } from "./chains-BMh3btVo.js";
|
|
9
|
-
import { c as toWalletId, o as thresholdEcdsaChainTargetKey, s as thresholdEcdsaChainTargetsEqual } from "./ecdsaChainTarget-Bl-JWyuw.js";
|
|
10
|
-
import { f as WALLET_EMAIL_OTP_TRANSACTION_SIGN_OPERATION, n as SIGNER_AUTH_METHODS } from "./signerDomain-IEAVrOrc.js";
|
|
11
|
-
import { a as toIndexedDbChainTargetKey } from "./normalization-CBt413-z.js";
|
|
12
|
-
import { C as toThresholdOwnerAddress, c as buildResolvedEvmFamilyEcdsaKey, f as deriveEvmFamilyKeyFingerprintFromPublicFacts, l as buildVerifiedEcdsaPublicFacts, n as buildBaseEvmFamilyEcdsaKeyIdentity, o as buildHydratedEcdsaSignerMaterial, s as buildPasskeyEcdsaAuthBinding, u as deriveEvmFamilyEcdsaKeyHandle, x as toRpId, y as toEvmFamilyEcdsaKeyHandle } from "./evmFamilyEcdsaIdentity-Co5XDcEA.js";
|
|
13
|
-
import { a as isActiveEcdsaWalletAuthorityV1, l as isEd25519ExtensionOfEcdsaWalletAuthority, s as isCombinedWalletSignerActivationSetV1 } from "./walletAuthority-BQBxgUBn.js";
|
|
14
|
-
import { a as parseEcdsaRoleLocalPersistedMaterialRef, l as parseEcdsaClientVerifyingShareB64u, s as parseEcdsaThresholdKeyId } from "./keyMaterialBrands-CX41hur6.js";
|
|
15
|
-
import { a as SIGNING_SESSION_EXPIRY_DETECTION_SOURCES, m as createSigningFlowEvent, o as SigningEventPhase } from "./sdkSentEvents-MqDkbQg1.js";
|
|
16
|
-
import { t as parseSignerSlot } from "./signerSlot-_ovonwVX.js";
|
|
17
|
-
import { c as signingLaneAuthMethod, i as SigningSessionPlanKind, n as SigningOperationIntent, r as SigningSessionIds, s as signingLaneAuthBindingKey } from "./types-Dx9fczU7.js";
|
|
18
|
-
import { t as demoEmailOtpCodeFromDelivery } from "./challengeDelivery-Dd0586fo.js";
|
|
19
|
-
import { b as openEcdsaRoleLocalSigningMaterialWasm, t as buildReadySecp256k1SigningMaterial } from "./secp256k1-el9aE4Sv.js";
|
|
20
|
-
import { O as projectEcdsaRoleLocalPublicFactsToChainTarget, y as routerAbEcdsaDerivationPublicCapabilitiesEqual } from "./ecdsaCapabilityManifest-kzO_fW09.js";
|
|
21
|
-
import { c as evmNonceLeaseToManagedReservation, l as evmReserveNonceInputToLane, s as evmManagedReservationToLane } from "./nonceLaneKeys-C3c9lG6u.js";
|
|
22
|
-
import { c as exactSigningLaneIdentityKey, g as requireEvmFamilyEcdsaSigner, n as exactEcdsaSigningLaneIdentity, r as exactEcdsaSigningLaneIdentityFromSelectedLane, s as exactSigningLaneIdentityFromSelectedLane, t as buildEvmFamilyEcdsaSignerBinding } from "./exactSigningLaneIdentity-DQeqPMST.js";
|
|
23
|
-
import { c as buildTempoTransactionSigningLane, o as buildEvmTransactionSigningLane, x as selectedEcdsaLane, y as laneCandidateAuthMethod } from "./nearEd25519YaoSigningPreparation-BeD-SmbK.js";
|
|
24
|
-
import { a as throwEmailOtpSigningSessionAuthStateError, o as buildEmailOtpRoutePlan } from "./routePlan-D59x5xzQ.js";
|
|
25
|
-
import { r as parseSigningOperationFingerprintDigest } from "./operationFingerprint-CGZui5dR.js";
|
|
26
|
-
import { c as emitSigningPlannerDecisionTrace, l as emitSigningSessionFlowFailure, o as emitSigningBoundaryTrace, s as emitSigningLaneResolutionTrace, t as createSigningBoundaryTraceEvent, u as emitSigningSessionFlowTrace } from "./trace-rHe0wz7q.js";
|
|
27
|
-
import { i as loadWebAuthnP256EngineCtor, n as loadSignEvmFamilyWithUiConfirmForTempo, r as loadSignEvmWithUiConfirm, t as loadSecp256k1EngineCtor } from "./signerLoader-D7Aey0FD.js";
|
|
28
|
-
import { a as isPasskeySigningAuthPlan, i as isEmailOtpSigningAuthPlan, n as SigningAuthPlanKind } from "./promptText-CuRa_ivd.js";
|
|
29
|
-
import { t as computeSigningOperationFingerprint, u as signingAuthPlanFromSigningSessionPlan } from "./operationFingerprint-C8Trar4R.js";
|
|
30
|
-
import { _ as WalletSessionQuotaAdmissionError, b as classifyWalletSessionQuotaAdmissionFailure, g as WALLET_SESSION_FAILURE_CODES, h as walletSessionFailureFromError, p as walletSessionFailureErrorFromPayload, v as buildOperationAuthorizationQueueKey, x as decideWalletSessionQuotaAdmissionFailure } from "./routerAbNormalSigning-fhvpDtmY.js";
|
|
31
|
-
import { b as withThresholdCommitQueue, f as ecdsaAvailableLaneCandidatesForTarget, h as isConcreteAvailableSigningLane, o as selectEvmFamilyEcdsaMaterialCandidate, r as prepareTransactionSigningOperation, u as availableEcdsaSigningLaneAuthMethod, v as requireAuthoritativeExpiredWalletSessionAuthorizationBoundary, y as clearThresholdCommitQueue } from "./transactionState-DP9O8F6f.js";
|
|
32
|
-
import { t as bytesToHex } from "./bytes-qKxKn4gg.js";
|
|
33
|
-
import { d as buildEvmDisplayModel, l as fromManagedNonceReservationSnapshot, n as isEvmFamilyEcdsaMaterialSupersededError, u as reserveNonceInputFromBoundary } from "./signingFlow-rZfPegH9.js";
|
|
34
|
-
import { t as buildTempoDisplayModel } from "./display-KdIL0ff7.js";
|
|
35
|
-
//#region src/core/signingEngine/session/material/linkedEcdsaHolderRuntime.ts
|
|
36
|
-
const linkedHolderRuntimes = /* @__PURE__ */ new Map();
|
|
37
|
-
function runtimeKey(input) {
|
|
38
|
-
return `${String(input.walletId)}\0${input.materialActivation.activationId}`;
|
|
39
|
-
}
|
|
40
|
-
function installLinkedEcdsaHolderRuntimeV1(runtime) {
|
|
41
|
-
const key = runtimeKey(runtime);
|
|
42
|
-
const existing = linkedHolderRuntimes.get(key);
|
|
43
|
-
if (existing && (existing.authorityId !== runtime.authorityId || existing.walletAuthMethodId !== runtime.walletAuthMethodId || existing.factorAuthority.walletId !== runtime.factorAuthority.walletId || existing.factorAuthority.bindingId !== runtime.factorAuthority.bindingId || existing.holderHandleId !== runtime.holderHandleId || !mpcMaterialActivationRefsEqual(existing.materialActivation, runtime.materialActivation))) throw new Error("linked ECDSA holder runtime conflicts with the active authority");
|
|
44
|
-
linkedHolderRuntimes.set(key, runtime);
|
|
45
|
-
}
|
|
46
|
-
function resolveLinkedEcdsaHolderRuntimeV1(input) {
|
|
47
|
-
return linkedHolderRuntimes.get(runtimeKey(input)) ?? null;
|
|
48
|
-
}
|
|
49
|
-
function listLinkedEcdsaHolderRuntimesV1(walletId) {
|
|
50
|
-
return [...linkedHolderRuntimes.values()].filter((runtime) => walletId === void 0 || runtime.walletId === walletId);
|
|
51
|
-
}
|
|
52
|
-
function removeLinkedEcdsaHolderRuntimeV1(input) {
|
|
53
|
-
const key = runtimeKey(input);
|
|
54
|
-
const runtime = linkedHolderRuntimes.get(key);
|
|
55
|
-
if (!runtime) return;
|
|
56
|
-
if (runtime.holderHandleId !== input.holderHandleId) throw new Error("linked ECDSA holder runtime changed before removal");
|
|
57
|
-
linkedHolderRuntimes.delete(key);
|
|
58
|
-
}
|
|
59
|
-
function clearLinkedEcdsaHolderRuntimesV1(walletId) {
|
|
60
|
-
if (!walletId) {
|
|
61
|
-
linkedHolderRuntimes.clear();
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
for (const [key, runtime] of linkedHolderRuntimes) if (runtime.walletId === walletId) linkedHolderRuntimes.delete(key);
|
|
65
|
-
}
|
|
66
|
-
//#endregion
|
|
67
|
-
//#region src/core/signingEngine/session/warmCapabilities/sealedRefreshParity.ts
|
|
68
|
-
function isRetryableSealedRefreshCapabilityFetchError(error) {
|
|
69
|
-
const code = error && typeof error === "object" && "code" in error ? String(error.code || "").trim() : "";
|
|
70
|
-
if (code === "sealed_refresh_parity_fetch_failed" || code === "sealed_refresh_parity_http_error" || code === "sealed_refresh_parity_aborted") return true;
|
|
71
|
-
const message = String(error instanceof Error ? error.message : error || "");
|
|
72
|
-
return message.includes("Failed to fetch relayer well-known capabilities") || /Well-known endpoint returned HTTP 5\d\d/.test(message);
|
|
73
|
-
}
|
|
74
|
-
function parityErrorMessage(error) {
|
|
75
|
-
return error instanceof Error ? error.message : String(error || "unknown error");
|
|
76
|
-
}
|
|
77
|
-
async function ensureSealedRefreshStartupParityForThresholdEcdsaBootstrap(ensureParity, args) {
|
|
78
|
-
try {
|
|
79
|
-
await ensureParity();
|
|
80
|
-
} catch (error) {
|
|
81
|
-
if (args.kind === "key_enrollment_bootstrap_parity") {
|
|
82
|
-
console.warn("[threshold-ecdsa] key enrollment bootstrap skipped sealed-refresh startup parity enforcement", {
|
|
83
|
-
walletId: String(args.walletId || "").trim(),
|
|
84
|
-
chainTarget: thresholdEcdsaChainTargetKey(args.chainTarget),
|
|
85
|
-
error: parityErrorMessage(error)
|
|
86
|
-
});
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
if (args.kind === "transaction_bootstrap_parity" && isRetryableSealedRefreshCapabilityFetchError(error)) {
|
|
90
|
-
console.warn("[threshold-ecdsa] transaction bootstrap skipped retryable sealed-refresh capability fetch failure", {
|
|
91
|
-
walletId: String(args.walletId || "").trim(),
|
|
92
|
-
chainTarget: thresholdEcdsaChainTargetKey(args.chainTarget),
|
|
93
|
-
error: parityErrorMessage(error)
|
|
94
|
-
});
|
|
95
|
-
return;
|
|
96
|
-
}
|
|
97
|
-
if (args.kind === "email_otp_bootstrap_parity" && args.authMethod === SIGNER_AUTH_METHODS.emailOtp && isRetryableSealedRefreshCapabilityFetchError(error)) {
|
|
98
|
-
console.warn("[threshold-ecdsa] Email OTP bootstrap skipped retryable sealed-refresh capability fetch failure", {
|
|
99
|
-
walletId: String(args.walletId || "").trim(),
|
|
100
|
-
chainTarget: thresholdEcdsaChainTargetKey(args.chainTarget),
|
|
101
|
-
error: parityErrorMessage(error)
|
|
102
|
-
});
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
if (args.kind === "default_bootstrap_parity" && isRetryableSealedRefreshCapabilityFetchError(error)) {
|
|
106
|
-
console.warn("[threshold-ecdsa] default bootstrap skipped retryable sealed-refresh capability fetch failure", {
|
|
107
|
-
walletId: String(args.walletId || "").trim(),
|
|
108
|
-
chainTarget: thresholdEcdsaChainTargetKey(args.chainTarget),
|
|
109
|
-
error: parityErrorMessage(error)
|
|
110
|
-
});
|
|
111
|
-
return;
|
|
112
|
-
}
|
|
113
|
-
throw error;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
async function ensureSealedRefreshStartupParityForTransactionSigning(ensureParity, args) {
|
|
117
|
-
try {
|
|
118
|
-
await ensureParity();
|
|
119
|
-
} catch (error) {
|
|
120
|
-
if (!isRetryableSealedRefreshCapabilityFetchError(error)) throw error;
|
|
121
|
-
console.warn("[threshold-ecdsa] transaction signing skipped retryable sealed-refresh capability fetch failure", {
|
|
122
|
-
walletId: String(args.walletId || "").trim(),
|
|
123
|
-
chainTarget: thresholdEcdsaChainTargetKey(args.chainTarget),
|
|
124
|
-
error: parityErrorMessage(error)
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
//#endregion
|
|
129
|
-
//#region src/core/signingEngine/flows/signEvmFamily/types.ts
|
|
130
|
-
function evmFamilyRequestChainKind(request) {
|
|
131
|
-
if (request.kind === "tempoTransaction") return "tempo";
|
|
132
|
-
if (request.kind === "eip1559") return "evm_compatible";
|
|
133
|
-
const requestChain = String(request.chain || "").trim();
|
|
134
|
-
if (requestChain === "tempo" || requestChain === "evm") return requestChain;
|
|
135
|
-
throw new Error("[SigningEngine][ecdsa] transaction request requires a concrete chain family");
|
|
136
|
-
}
|
|
137
|
-
function evmFamilySigningTargetFromExplicitTarget(args) {
|
|
138
|
-
const requestChainId = Number(args.request.tx.chainId);
|
|
139
|
-
if (!Number.isSafeInteger(requestChainId) || requestChainId <= 0) throw new Error("[SigningEngine][ecdsa] transaction request requires a concrete chainId");
|
|
140
|
-
if (requestChainId !== args.chainTarget.chainId) throw new Error("[SigningEngine][ecdsa] transaction request chainId does not match chainTarget");
|
|
141
|
-
const requestChainKind = evmFamilyRequestChainKind(args.request);
|
|
142
|
-
if (requestChainKind !== "evm_compatible" && requestChainKind !== args.chainTarget.kind) throw new Error("[SigningEngine][ecdsa] transaction request chain does not match chainTarget");
|
|
143
|
-
return args.chainTarget;
|
|
144
|
-
}
|
|
145
|
-
//#endregion
|
|
146
|
-
//#region src/core/signingEngine/flows/signEvmFamily/errors.ts
|
|
147
|
-
function createEvmFamilySigningCancelledError() {
|
|
148
|
-
const err = /* @__PURE__ */ new Error("Request cancelled");
|
|
149
|
-
err.code = "cancelled";
|
|
150
|
-
return err;
|
|
151
|
-
}
|
|
152
|
-
function throwIfEvmFamilySigningCancelled(shouldAbort) {
|
|
153
|
-
if (typeof shouldAbort === "function" && shouldAbort()) throw createEvmFamilySigningCancelledError();
|
|
154
|
-
}
|
|
155
|
-
function normalizeToken(value) {
|
|
156
|
-
return String(value || "").trim().toLowerCase().replace(/[\s-]+/g, "_");
|
|
157
|
-
}
|
|
158
|
-
function extractErrorCode(error) {
|
|
159
|
-
if (!error || typeof error !== "object" || !("code" in error)) return "";
|
|
160
|
-
return normalizeToken(error.code);
|
|
161
|
-
}
|
|
162
|
-
function extractErrorMessage(error) {
|
|
163
|
-
if (!error) return "";
|
|
164
|
-
if (typeof error === "string") return error.trim();
|
|
165
|
-
if (error instanceof Error) return String(error.message || "").trim();
|
|
166
|
-
if (typeof error === "object" && "message" in error) return String(error.message || "").trim();
|
|
167
|
-
return String(error).trim();
|
|
168
|
-
}
|
|
169
|
-
function inferNonceConflictReason(args) {
|
|
170
|
-
const haystack = `${args.code} ${args.message}`.toLowerCase();
|
|
171
|
-
if (!haystack.trim()) return null;
|
|
172
|
-
if (haystack.includes("nonce_too_low") || haystack.includes("nonce too low")) return "nonce_too_low";
|
|
173
|
-
if (haystack.includes("nonce_too_high") || haystack.includes("nonce too high")) return "nonce_too_high";
|
|
174
|
-
if (haystack.includes("already_known") || haystack.includes("already known")) return "already_known";
|
|
175
|
-
if (haystack.includes("replacement_transaction_underpriced") || haystack.includes("replacement transaction underpriced")) return "replacement_underpriced";
|
|
176
|
-
if (haystack.includes("nonce_conflict") || haystack.includes("nonce") && haystack.includes("conflict") || haystack.includes("invalid nonce") || haystack.includes("nonce has already been used")) return "nonce_conflict";
|
|
177
|
-
return null;
|
|
178
|
-
}
|
|
179
|
-
function createEvmFamilySigningNonceConflictError(args) {
|
|
180
|
-
const chainLabel = args.chain === "tempo" ? "Tempo" : "EVM";
|
|
181
|
-
const err = /* @__PURE__ */ new Error(`[SigningEngine] ${chainLabel} nonce conflict (${args.reason}) on ${args.networkKey}. Refresh nonce context and retry.`);
|
|
182
|
-
err.code = "nonce_conflict_retryable";
|
|
183
|
-
err.retryable = true;
|
|
184
|
-
err.details = {
|
|
185
|
-
chain: args.chain,
|
|
186
|
-
reason: args.reason,
|
|
187
|
-
networkKey: args.networkKey,
|
|
188
|
-
chainId: args.chainId
|
|
189
|
-
};
|
|
190
|
-
if (args.cause !== void 0) try {
|
|
191
|
-
err.cause = args.cause;
|
|
192
|
-
} catch {}
|
|
193
|
-
return err;
|
|
194
|
-
}
|
|
195
|
-
function createEvmFamilySigningNonceLaneBlockedError(args) {
|
|
196
|
-
const chainLabel = args.chain === "tempo" ? "Tempo" : "EVM";
|
|
197
|
-
const err = /* @__PURE__ */ new Error(`[SigningEngine] ${chainLabel} nonce lane blocked on ${args.networkKey} (nonce=${args.blockedNonce}). Reconcile lane and retry.`);
|
|
198
|
-
err.code = "nonce_lane_blocked";
|
|
199
|
-
err.retryable = true;
|
|
200
|
-
err.details = {
|
|
201
|
-
chain: args.chain,
|
|
202
|
-
networkKey: args.networkKey,
|
|
203
|
-
chainId: args.chainId,
|
|
204
|
-
blockedNonce: args.blockedNonce,
|
|
205
|
-
...typeof args.ageMs === "number" ? { ageMs: args.ageMs } : {}
|
|
206
|
-
};
|
|
207
|
-
if (args.cause !== void 0) try {
|
|
208
|
-
err.cause = args.cause;
|
|
209
|
-
} catch {}
|
|
210
|
-
return err;
|
|
211
|
-
}
|
|
212
|
-
function mapToRetryableNonceConflictError(args) {
|
|
213
|
-
if (!args.error || typeof args.error !== "object") return args.error;
|
|
214
|
-
const existingCode = extractErrorCode(args.error);
|
|
215
|
-
if (existingCode === "nonce_conflict_retryable") return args.error;
|
|
216
|
-
const reason = inferNonceConflictReason({
|
|
217
|
-
code: existingCode,
|
|
218
|
-
message: extractErrorMessage(args.error)
|
|
219
|
-
});
|
|
220
|
-
if (!reason) return args.error;
|
|
221
|
-
return createEvmFamilySigningNonceConflictError({
|
|
222
|
-
chain: args.chain,
|
|
223
|
-
networkKey: args.networkKey,
|
|
224
|
-
chainId: args.chainId,
|
|
225
|
-
reason,
|
|
226
|
-
cause: args.error
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
|
-
function mapToRetryableNonceLaneBlockedError(args) {
|
|
230
|
-
if (!args.error || typeof args.error !== "object") return args.error;
|
|
231
|
-
if (extractErrorCode(args.error) === "nonce_lane_blocked") {
|
|
232
|
-
const details = typeof args.error.details === "object" ? args.error.details || {} : {};
|
|
233
|
-
const blockedNonceRaw = String(details?.blockedNonce || "").trim();
|
|
234
|
-
const ageRaw = Number(details?.ageMs);
|
|
235
|
-
return createEvmFamilySigningNonceLaneBlockedError({
|
|
236
|
-
chain: args.chain,
|
|
237
|
-
networkKey: args.networkKey,
|
|
238
|
-
chainId: args.chainId,
|
|
239
|
-
blockedNonce: blockedNonceRaw || "unknown",
|
|
240
|
-
...Number.isFinite(ageRaw) ? { ageMs: ageRaw } : {},
|
|
241
|
-
cause: args.error
|
|
242
|
-
});
|
|
243
|
-
}
|
|
244
|
-
const message = extractErrorMessage(args.error).toLowerCase();
|
|
245
|
-
if (message.includes("nonce lane blocked") || message.includes("nonce") && message.includes("blocked")) return createEvmFamilySigningNonceLaneBlockedError({
|
|
246
|
-
chain: args.chain,
|
|
247
|
-
networkKey: args.networkKey,
|
|
248
|
-
chainId: args.chainId,
|
|
249
|
-
blockedNonce: "unknown",
|
|
250
|
-
cause: args.error
|
|
251
|
-
});
|
|
252
|
-
return args.error;
|
|
253
|
-
}
|
|
254
|
-
function mapToRetryableNonceStateError(args) {
|
|
255
|
-
const mappedConflict = mapToRetryableNonceConflictError(args);
|
|
256
|
-
return mapToRetryableNonceLaneBlockedError({
|
|
257
|
-
...args,
|
|
258
|
-
error: mappedConflict
|
|
259
|
-
});
|
|
260
|
-
}
|
|
261
|
-
function isNonceConflictRetryableError(error) {
|
|
262
|
-
if (!error || typeof error !== "object") return false;
|
|
263
|
-
return extractErrorCode(error) === "nonce_conflict_retryable";
|
|
264
|
-
}
|
|
265
|
-
function isNonceLaneBlockedRetryableError(error) {
|
|
266
|
-
if (!error || typeof error !== "object") return false;
|
|
267
|
-
return extractErrorCode(error) === "nonce_lane_blocked";
|
|
268
|
-
}
|
|
269
|
-
//#endregion
|
|
270
|
-
//#region src/core/signingEngine/flows/signEvmFamily/ecdsaLanes.ts
|
|
271
|
-
function summarizeEvmFamilyEcdsaLane(lane) {
|
|
272
|
-
if (!lane) return { present: false };
|
|
273
|
-
const signer = requireEvmFamilyEcdsaSigner(lane.identity, "ECDSA lane summary");
|
|
274
|
-
return {
|
|
275
|
-
present: true,
|
|
276
|
-
walletId: signer.walletId,
|
|
277
|
-
authMethod: signingLaneAuthMethod(lane.auth),
|
|
278
|
-
curve: lane.curve,
|
|
279
|
-
chain: lane.chain,
|
|
280
|
-
chainFamily: "chainFamily" in lane ? lane.chainFamily : lane.chain,
|
|
281
|
-
keyKind: "keyKind" in lane ? lane.keyKind : "threshold_ecdsa_secp256k1",
|
|
282
|
-
sessionOrigin: "sessionOrigin" in lane ? lane.sessionOrigin : void 0,
|
|
283
|
-
storageSource: "storageSource" in lane ? lane.storageSource : void 0,
|
|
284
|
-
retention: "retention" in lane ? lane.retention : void 0,
|
|
285
|
-
walletSessionId: lane.authorization.operationCredential.walletSessionId,
|
|
286
|
-
materialActivationId: lane.materialActivation.activationId,
|
|
287
|
-
chainTarget: signer.chainTarget,
|
|
288
|
-
evmFamilyKeyPresent: Boolean(signer.key)
|
|
289
|
-
};
|
|
290
|
-
}
|
|
291
|
-
function logEvmFamilyEcdsaLaneDiagnostic(message, details) {
|
|
292
|
-
try {
|
|
293
|
-
console.warn(`[SigningEngine][ecdsa] ${message}`, JSON.stringify(details, null, 2));
|
|
294
|
-
} catch {}
|
|
295
|
-
}
|
|
296
|
-
function requireResolvedEvmFamilyEcdsaSigningLane(args) {
|
|
297
|
-
const lane = args.lane;
|
|
298
|
-
if (!lane) {
|
|
299
|
-
logEvmFamilyEcdsaLaneDiagnostic("missing selected signing lane", {
|
|
300
|
-
context: args.context,
|
|
301
|
-
chain: args.chain,
|
|
302
|
-
...args.diagnostics
|
|
303
|
-
});
|
|
304
|
-
throw new Error(`[SigningEngine][ecdsa] missing selected signing lane for ${args.context}`);
|
|
305
|
-
}
|
|
306
|
-
if (lane.curve !== "ecdsa" || lane.keyKind !== "threshold_ecdsa_secp256k1") {
|
|
307
|
-
logEvmFamilyEcdsaLaneDiagnostic("selected signing lane is not ECDSA", {
|
|
308
|
-
context: args.context,
|
|
309
|
-
expectedChain: args.chain,
|
|
310
|
-
lane: summarizeEvmFamilyEcdsaLane(lane),
|
|
311
|
-
...args.diagnostics
|
|
312
|
-
});
|
|
313
|
-
throw new Error(`[SigningEngine][ecdsa] ${args.context} requires an ECDSA signing lane`);
|
|
314
|
-
}
|
|
315
|
-
const identity = lane.identity;
|
|
316
|
-
const signer = requireEvmFamilyEcdsaSigner(identity, `${args.context} resolved ECDSA lane`);
|
|
317
|
-
const chainTarget = signer.chainTarget;
|
|
318
|
-
if (chainTarget.kind !== args.chain) {
|
|
319
|
-
logEvmFamilyEcdsaLaneDiagnostic("selected signing lane chain mismatch", {
|
|
320
|
-
context: args.context,
|
|
321
|
-
expectedChain: args.chain,
|
|
322
|
-
lane: summarizeEvmFamilyEcdsaLane(lane),
|
|
323
|
-
...args.diagnostics
|
|
324
|
-
});
|
|
325
|
-
throw new Error(`[SigningEngine][ecdsa] ${args.context} chain does not match selected lane`);
|
|
326
|
-
}
|
|
327
|
-
const key = signer.key;
|
|
328
|
-
if (!key?.ecdsaThresholdKeyId || !key.signingRootId || !key.signingRootVersion) {
|
|
329
|
-
logEvmFamilyEcdsaLaneDiagnostic("selected signing lane missing full ECDSA identity", {
|
|
330
|
-
context: args.context,
|
|
331
|
-
expectedChain: args.chain,
|
|
332
|
-
lane: summarizeEvmFamilyEcdsaLane(lane),
|
|
333
|
-
...args.diagnostics
|
|
334
|
-
});
|
|
335
|
-
throw new Error(`[SigningEngine][ecdsa] incomplete ECDSA lane identity for ${args.context}`);
|
|
336
|
-
}
|
|
337
|
-
if (!key || String(key.walletId) !== String(signer.walletId) || String(signer.keyHandle || "").trim() === "") {
|
|
338
|
-
logEvmFamilyEcdsaLaneDiagnostic("selected signing lane missing matching shared key identity", {
|
|
339
|
-
context: args.context,
|
|
340
|
-
expectedChain: args.chain,
|
|
341
|
-
lane: summarizeEvmFamilyEcdsaLane(lane),
|
|
342
|
-
...args.diagnostics
|
|
343
|
-
});
|
|
344
|
-
throw new Error(`[SigningEngine][ecdsa] missing shared key identity for ${args.context}`);
|
|
345
|
-
}
|
|
346
|
-
const selectedLane = selectedEcdsaLane({
|
|
347
|
-
key,
|
|
348
|
-
materialActivation: signer.materialActivation,
|
|
349
|
-
keyHandle: signer.keyHandle,
|
|
350
|
-
walletId: signer.walletId,
|
|
351
|
-
auth: identity.auth,
|
|
352
|
-
authorization: lane.authorization,
|
|
353
|
-
chainTarget
|
|
354
|
-
});
|
|
355
|
-
return {
|
|
356
|
-
...lane,
|
|
357
|
-
...selectedLane,
|
|
358
|
-
key,
|
|
359
|
-
keyHandle: signer.keyHandle,
|
|
360
|
-
chainTarget,
|
|
361
|
-
keyKind: "threshold_ecdsa_secp256k1",
|
|
362
|
-
chainFamily: signer.chainTarget.kind
|
|
363
|
-
};
|
|
364
|
-
}
|
|
365
|
-
//#endregion
|
|
366
|
-
//#region src/core/signingEngine/interfaces/accountAuthMetadata.ts
|
|
367
|
-
function resolveAccountAuthMetadataForSignerAuthMethod(args) {
|
|
368
|
-
const primaryAuthMethod = args.authMethod;
|
|
369
|
-
return {
|
|
370
|
-
primaryAuthMethod,
|
|
371
|
-
linkedAuthMethods: [primaryAuthMethod],
|
|
372
|
-
...args.email ? { email: args.email } : {},
|
|
373
|
-
...args.passkeyCredentialIds?.length ? { passkeyCredentialIds: args.passkeyCredentialIds } : {}
|
|
374
|
-
};
|
|
375
|
-
}
|
|
376
|
-
//#endregion
|
|
377
|
-
//#region src/core/signingEngine/flows/signEvmFamily/accountAuth.ts
|
|
378
|
-
async function resolveEvmFamilyTransactionWalletAuth(args) {
|
|
379
|
-
if (args.senderSignatureAlgorithm === "webauthnP256") return resolveAccountAuthMetadataForSignerAuthMethod({ authMethod: SIGNER_AUTH_METHODS.passkey });
|
|
380
|
-
if (args.signerAuthMethod !== void 0) return resolveAccountAuthMetadataForSignerAuthMethod({ authMethod: args.signerAuthMethod });
|
|
381
|
-
throw new Error("[SigningEngine][ecdsa] signer auth method is unavailable");
|
|
382
|
-
}
|
|
383
|
-
//#endregion
|
|
384
|
-
//#region src/core/signingEngine/session/material/ecdsaSigningCapability.ts
|
|
385
|
-
function exactEcdsaSubjectMatches(args) {
|
|
386
|
-
return args.session.capabilitySubjects.filter((subject) => subject.kind === "sign" && subject.keyFamily === "ecdsa_secp256k1" && mpcMaterialActivationRefsEqual(subject.materialActivation, args.materialActivation)).length === 1;
|
|
387
|
-
}
|
|
388
|
-
function targetMatchesCapability(args) {
|
|
389
|
-
return args.capability.manifest.signer.scope.targetMemberships.some((target) => thresholdEcdsaChainTargetsEqual(target, args.chainTarget));
|
|
390
|
-
}
|
|
391
|
-
function participantIdsMatch(left, right) {
|
|
392
|
-
return left.length === right.length && left.every((value, index) => value === right[index]);
|
|
393
|
-
}
|
|
394
|
-
function selectedAuthorityComponentsAreExact(args) {
|
|
395
|
-
const { selectedAuthority, selectedAuthMethod } = args;
|
|
396
|
-
return selectedAuthMethod.walletId === args.walletId && selectedAuthMethod.status === "active" && selectedAuthMethod.walletAuthorityId === selectedAuthority.authorityId && selectedAuthority.walletId === args.walletId && selectedAuthority.state === "active";
|
|
397
|
-
}
|
|
398
|
-
function capabilityAuthorityMatchesRuntime(args) {
|
|
399
|
-
const capabilityAuthority = args.capability.authority;
|
|
400
|
-
const runtimeBinding = args.runtime.authBinding;
|
|
401
|
-
switch (runtimeBinding.kind) {
|
|
402
|
-
case "email_otp": return isEmailOtpWalletAuthAuthority(capabilityAuthority) && walletAuthAuthoritiesMatch(capabilityAuthority, runtimeBinding.emailOtpAuthority);
|
|
403
|
-
case "passkey": return isPasskeyWalletAuthAuthority(capabilityAuthority) && capabilityAuthority.verifier.rpId === runtimeBinding.rpId && capabilityAuthority.factor.credentialIdB64u === runtimeBinding.credentialIdB64u;
|
|
404
|
-
default: return runtimeBinding;
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
function selectedAuthMethodMatchesRuntime(args) {
|
|
408
|
-
switch (args.runtime.authBinding.kind) {
|
|
409
|
-
case "email_otp": return args.selectedAuthMethod.kind === "email_otp" && args.selectedAuthMethod.emailHashHex === args.runtime.authBinding.emailHashHex;
|
|
410
|
-
case "passkey": return args.selectedAuthMethod.kind === "passkey" && String(args.selectedAuthMethod.rpId) === String(args.runtime.authBinding.rpId) && args.selectedAuthMethod.credentialIdB64u === args.runtime.authBinding.credentialIdB64u;
|
|
411
|
-
default: return args.runtime.authBinding;
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
function exactAuthorizationMatchesCapability(args) {
|
|
415
|
-
if (!Number.isSafeInteger(args.nowMs) || args.nowMs < 0) return false;
|
|
416
|
-
const { capability, authorization } = args;
|
|
417
|
-
const session = authorization.session;
|
|
418
|
-
const operationCredential = authorization.operationCredential;
|
|
419
|
-
const runtime = authorization.runtime;
|
|
420
|
-
const signer = capability.manifest.signer;
|
|
421
|
-
const activation = authorization.selectedAuthority.signerActivations.ecdsa;
|
|
422
|
-
if (!activation) return false;
|
|
423
|
-
if (!selectedAuthorityComponentsAreExact({
|
|
424
|
-
selectedAuthority: authorization.selectedAuthority,
|
|
425
|
-
selectedAuthMethod: authorization.selectedAuthMethod,
|
|
426
|
-
walletId: session.walletId
|
|
427
|
-
})) return false;
|
|
428
|
-
if (session.walletId !== signer.walletId || session.authorityId !== authorization.selectedAuthority.authorityId || session.authMethodId !== authorization.selectedAuthMethod.walletAuthMethodId || session.authorityDigestB64u !== authorization.selectedAuthority.authorityDigestB64u || session.authorityRevocationEpoch !== authorization.selectedAuthority.revocationEpoch || signer.authority.walletId !== authorization.selectedAuthority.walletId || signer.authority.walletAuthMethodId !== authorization.selectedAuthMethod.walletAuthMethodId || session.authorizationId.trim().length === 0 || session.quotaId.trim().length === 0 || operationCredential.walletSessionId.trim().length === 0 || operationCredential.token.trim().length === 0 || runtime.walletId !== session.walletId || !selectedAuthMethodMatchesRuntime({
|
|
429
|
-
selectedAuthMethod: authorization.selectedAuthMethod,
|
|
430
|
-
runtime
|
|
431
|
-
}) || !mpcMaterialActivationRefsEqual(runtime.materialActivation, capability.manifest.activation.materialActivation) || !mpcMaterialActivationRefsEqual(runtime.roleLocalMaterialRef.materialActivation, runtime.materialActivation) || !targetMatchesCapability({
|
|
432
|
-
capability,
|
|
433
|
-
chainTarget: runtime.chainTarget
|
|
434
|
-
}) || !capabilityAuthorityMatchesRuntime({
|
|
435
|
-
capability,
|
|
436
|
-
runtime
|
|
437
|
-
}) || !exactEcdsaSubjectMatches({
|
|
438
|
-
session,
|
|
439
|
-
materialActivation: capability.manifest.activation.materialActivation
|
|
440
|
-
}) || !mpcMaterialActivationRefsEqual(activation.materialActivation, capability.manifest.activation.materialActivation) || activation.signer.walletId !== session.walletId || runtime.expiresAtMs <= 0 || !Number.isSafeInteger(runtime.remainingUses) || runtime.remainingUses < 0) return false;
|
|
441
|
-
switch (runtime.kind) {
|
|
442
|
-
case "exact_ecdsa_direct_capability_runtime_v1": break;
|
|
443
|
-
case "exact_ecdsa_sealed_runtime_v1":
|
|
444
|
-
if (runtime.sealedRecord.authMethod !== authorization.selectedAuthMethod.kind || runtime.sealedRecord.storeKey.trim().length === 0 || runtime.sealedRecord.thresholdSessionId.trim().length === 0) return false;
|
|
445
|
-
break;
|
|
446
|
-
default: return runtime;
|
|
447
|
-
}
|
|
448
|
-
if (session.expiresAtMs <= args.nowMs || runtime.expiresAtMs <= args.nowMs) return false;
|
|
449
|
-
if (runtime.keyHandle !== String(capability.material.publicFacts.keyHandle) || runtime.ecdsaThresholdKeyId !== String(capability.material.publicFacts.ecdsaThresholdKeyId) || runtime.thresholdEcdsaPublicKeyB64u !== String(capability.material.publicFacts.groupPublicKey33B64u) || !participantIdsMatch(runtime.participantIds, capability.material.publicFacts.participantIds)) return false;
|
|
450
|
-
return true;
|
|
451
|
-
}
|
|
452
|
-
function isExactPasskeyWalletSessionRuntime(runtime) {
|
|
453
|
-
return runtime.authBinding.kind === "passkey";
|
|
454
|
-
}
|
|
455
|
-
function isExactEmailOtpWalletSessionRuntime(runtime) {
|
|
456
|
-
return runtime.authBinding.kind === "email_otp";
|
|
457
|
-
}
|
|
458
|
-
function buildPreprocessingSessionBinding(input) {
|
|
459
|
-
if (isExactPasskeyWalletSessionRuntime(input.runtime) && input.selected.authMethod.kind === "passkey") return {
|
|
460
|
-
kind: "ecdsa_preprocessing_session",
|
|
461
|
-
selectedAuthority: input.selected.authority,
|
|
462
|
-
selectedAuthMethod: input.selected.authMethod,
|
|
463
|
-
session: input.session,
|
|
464
|
-
operationCredential: input.operationCredential,
|
|
465
|
-
runtime: input.runtime
|
|
466
|
-
};
|
|
467
|
-
if (isExactEmailOtpWalletSessionRuntime(input.runtime) && input.selected.authMethod.kind === "email_otp") return {
|
|
468
|
-
kind: "ecdsa_preprocessing_session",
|
|
469
|
-
selectedAuthority: input.selected.authority,
|
|
470
|
-
selectedAuthMethod: input.selected.authMethod,
|
|
471
|
-
session: input.session,
|
|
472
|
-
operationCredential: input.operationCredential,
|
|
473
|
-
runtime: input.runtime
|
|
474
|
-
};
|
|
475
|
-
throw new Error("ECDSA preprocessing session auth method is inconsistent");
|
|
476
|
-
}
|
|
477
|
-
function directRuntimeAuthBinding(authority) {
|
|
478
|
-
if (isPasskeyWalletAuthAuthority(authority)) return {
|
|
479
|
-
kind: "passkey",
|
|
480
|
-
rpId: String(authority.verifier.rpId),
|
|
481
|
-
credentialIdB64u: String(authority.factor.credentialIdB64u)
|
|
482
|
-
};
|
|
483
|
-
if (isEmailOtpWalletAuthAuthority(authority)) return {
|
|
484
|
-
kind: "email_otp",
|
|
485
|
-
providerSubjectId: String(authority.factor.providerUserId),
|
|
486
|
-
emailHashHex: String(authority.verifier.emailHashHex),
|
|
487
|
-
emailOtpAuthority: authority
|
|
488
|
-
};
|
|
489
|
-
return authority;
|
|
490
|
-
}
|
|
491
|
-
function buildExactEcdsaDirectCapabilityRuntime(args) {
|
|
492
|
-
if (!Number.isSafeInteger(args.status.expiresAtMs) || args.status.expiresAtMs <= 0 || !Number.isSafeInteger(args.status.remainingUses) || args.status.remainingUses < 0) throw new Error("Exact ECDSA direct capability requires valid session facts");
|
|
493
|
-
return {
|
|
494
|
-
kind: "exact_ecdsa_direct_capability_runtime_v1",
|
|
495
|
-
walletId: args.runtime.walletId,
|
|
496
|
-
chainTarget: args.runtime.chainTarget,
|
|
497
|
-
materialActivation: args.runtime.materialActivation,
|
|
498
|
-
normalSigning: args.runtime.normalSigning,
|
|
499
|
-
relayerUrl: args.runtime.relayerUrl,
|
|
500
|
-
relayerKeyId: args.runtime.relayerKeyId,
|
|
501
|
-
clientVerifyingPublicKey33B64u: args.runtime.clientVerifyingPublicKey33B64u,
|
|
502
|
-
participantIds: args.runtime.participantIds,
|
|
503
|
-
ecdsaThresholdKeyId: args.runtime.ecdsaThresholdKeyId,
|
|
504
|
-
thresholdEcdsaPublicKeyB64u: args.runtime.thresholdEcdsaPublicKeyB64u,
|
|
505
|
-
keyHandle: args.runtime.keyHandle,
|
|
506
|
-
runtimePolicyScope: args.runtime.runtimePolicyScope,
|
|
507
|
-
roleLocalMaterialRef: args.runtime.roleLocalMaterialRef,
|
|
508
|
-
authBinding: directRuntimeAuthBinding(args.authority),
|
|
509
|
-
expiresAtMs: args.status.expiresAtMs,
|
|
510
|
-
remainingUses: args.status.remainingUses
|
|
511
|
-
};
|
|
512
|
-
}
|
|
513
|
-
function exactEcdsaAuthBindingsMatch(left, right) {
|
|
514
|
-
if (left.kind !== right.kind) return false;
|
|
515
|
-
switch (left.kind) {
|
|
516
|
-
case "email_otp": return right.kind === "email_otp" && left.providerSubjectId === right.providerSubjectId && left.emailHashHex === right.emailHashHex && walletAuthAuthoritiesMatch(left.emailOtpAuthority, right.emailOtpAuthority);
|
|
517
|
-
case "passkey": return right.kind === "passkey" && left.rpId === right.rpId && left.credentialIdB64u === right.credentialIdB64u;
|
|
518
|
-
default: return left;
|
|
519
|
-
}
|
|
520
|
-
}
|
|
521
|
-
function exactEcdsaWalletSessionRuntimesMatch(left, right) {
|
|
522
|
-
if (left.kind !== right.kind || left.walletId !== right.walletId || !thresholdEcdsaChainTargetsEqual(left.chainTarget, right.chainTarget) || !mpcMaterialActivationRefsEqual(left.materialActivation, right.materialActivation) || left.keyHandle !== right.keyHandle || left.ecdsaThresholdKeyId !== right.ecdsaThresholdKeyId || !exactEcdsaAuthBindingsMatch(left.authBinding, right.authBinding)) return false;
|
|
523
|
-
switch (left.kind) {
|
|
524
|
-
case "exact_ecdsa_direct_capability_runtime_v1": return right.kind === "exact_ecdsa_direct_capability_runtime_v1";
|
|
525
|
-
case "exact_ecdsa_sealed_runtime_v1": return right.kind === "exact_ecdsa_sealed_runtime_v1" && left.sealedRecord.authMethod === right.sealedRecord.authMethod && left.sealedRecord.storeKey === right.sealedRecord.storeKey && left.sealedRecord.thresholdSessionId === right.sealedRecord.thresholdSessionId;
|
|
526
|
-
default: return left;
|
|
527
|
-
}
|
|
528
|
-
}
|
|
529
|
-
function validateExactSessionAuthorization(input) {
|
|
530
|
-
const walletId = input.session.walletId;
|
|
531
|
-
if (!Number.isSafeInteger(input.nowMs) || input.nowMs < 0) throw new Error("Exact EVM-family Wallet Session authorization requires a valid timestamp");
|
|
532
|
-
if (!selectedAuthorityComponentsAreExact({
|
|
533
|
-
selectedAuthority: input.selected.authority,
|
|
534
|
-
selectedAuthMethod: input.selected.authMethod,
|
|
535
|
-
walletId
|
|
536
|
-
}) || input.selected.selection.walletId !== walletId || input.selected.selection.walletAuthMethodId !== input.selected.authMethod.walletAuthMethodId || input.selected.selection.lockState !== "unlocked") throw new Error("Exact EVM-family Wallet Session authorization selected authority is invalid");
|
|
537
|
-
const authorization = buildPreprocessingSessionBinding(input);
|
|
538
|
-
if (!exactAuthorizationMatchesCapability({
|
|
539
|
-
capability: input.capability,
|
|
540
|
-
authorization,
|
|
541
|
-
nowMs: input.nowMs
|
|
542
|
-
})) throw new Error("Exact EVM-family Wallet Session authorization identity is inconsistent");
|
|
543
|
-
return authorization;
|
|
544
|
-
}
|
|
545
|
-
function buildExactEvmFamilyWalletSessionAuthorization(input) {
|
|
546
|
-
const authorization = signingAuthorizationFromPreprocessing(buildEcdsaPreprocessingCapability(input), input.nowMs);
|
|
547
|
-
if (!authorization) throw new Error("Exact ECDSA signing authorization requires remaining signing uses");
|
|
548
|
-
return authorization;
|
|
549
|
-
}
|
|
550
|
-
function buildEcdsaPreprocessingCapability(input) {
|
|
551
|
-
return {
|
|
552
|
-
kind: "authorized_ecdsa_preprocessing_capability",
|
|
553
|
-
capability: input.capability,
|
|
554
|
-
authorization: validateExactSessionAuthorization(input)
|
|
555
|
-
};
|
|
556
|
-
}
|
|
557
|
-
function signingAuthorizationFromPreprocessing(input, nowMs) {
|
|
558
|
-
const authorization = input.authorization;
|
|
559
|
-
const runtime = authorization.runtime;
|
|
560
|
-
if (runtime.remainingUses <= 0 || !exactAuthorizationMatchesCapability({
|
|
561
|
-
capability: input.capability,
|
|
562
|
-
authorization,
|
|
563
|
-
nowMs
|
|
564
|
-
})) return null;
|
|
565
|
-
if (isExactPasskeyWalletSessionRuntime(runtime) && authorization.selectedAuthMethod.kind === "passkey") return {
|
|
566
|
-
kind: "exact_evm_family_wallet_session_authorization_v1",
|
|
567
|
-
selectedAuthority: authorization.selectedAuthority,
|
|
568
|
-
selectedAuthMethod: authorization.selectedAuthMethod,
|
|
569
|
-
session: authorization.session,
|
|
570
|
-
operationCredential: authorization.operationCredential,
|
|
571
|
-
runtime
|
|
572
|
-
};
|
|
573
|
-
if (isExactEmailOtpWalletSessionRuntime(runtime) && authorization.selectedAuthMethod.kind === "email_otp") return {
|
|
574
|
-
kind: "exact_evm_family_wallet_session_authorization_v1",
|
|
575
|
-
selectedAuthority: authorization.selectedAuthority,
|
|
576
|
-
selectedAuthMethod: authorization.selectedAuthMethod,
|
|
577
|
-
session: authorization.session,
|
|
578
|
-
operationCredential: authorization.operationCredential,
|
|
579
|
-
runtime
|
|
580
|
-
};
|
|
581
|
-
return null;
|
|
582
|
-
}
|
|
583
|
-
function authorizeEvmFamilyEcdsaSigningCapability(input) {
|
|
584
|
-
if (input.authorization.runtime.remainingUses <= 0 || !exactAuthorizationMatchesCapability({
|
|
585
|
-
capability: input.capability,
|
|
586
|
-
authorization: input.authorization,
|
|
587
|
-
nowMs: input.nowMs
|
|
588
|
-
})) throw new Error("Exact Wallet Session authorization does not bind the ECDSA signing capability");
|
|
589
|
-
return {
|
|
590
|
-
kind: "authorized_evm_family_ecdsa_signing_capability",
|
|
591
|
-
capability: input.capability,
|
|
592
|
-
authorization: input.authorization
|
|
593
|
-
};
|
|
594
|
-
}
|
|
595
|
-
async function buildCanonicalEvmFamilyEcdsaSigningCapability(input) {
|
|
596
|
-
const signer = input.manifest.signer;
|
|
597
|
-
const registeredPublicFacts = signer.registeredPublicFacts;
|
|
598
|
-
const materialPublicFacts = input.material.publicFacts;
|
|
599
|
-
const authorityRef = await walletAuthAuthorityRef({ authority: input.authority });
|
|
600
|
-
if (authorityRef.authorityDigest !== signer.authority.authorityDigest || authorityRef.walletId !== signer.walletId || input.material.authority.walletId !== signer.walletId || input.material.authority.authorityDigest !== signer.authority.authorityDigest || !mpcMaterialActivationRefsEqual(input.material.materialActivation, input.manifest.activation.materialActivation) || materialPublicFacts.walletId !== signer.walletId || materialPublicFacts.keyHandle !== registeredPublicFacts.keyHandle || String(materialPublicFacts.groupPublicKey33B64u) !== String(registeredPublicFacts.publicKeyB64u) || materialPublicFacts.ethereumAddress !== registeredPublicFacts.thresholdOwnerAddress || materialPublicFacts.participantIds.length !== registeredPublicFacts.participantIds.length || materialPublicFacts.participantIds.some((participantId, index) => participantId !== registeredPublicFacts.participantIds[index])) throw new Error("Canonical EVM-family ECDSA signing capability identity is inconsistent");
|
|
601
|
-
return {
|
|
602
|
-
kind: "canonical_evm_family_ecdsa_signing_capability",
|
|
603
|
-
authority: input.authority,
|
|
604
|
-
manifest: input.manifest,
|
|
605
|
-
material: input.material
|
|
606
|
-
};
|
|
607
|
-
}
|
|
608
|
-
//#endregion
|
|
609
|
-
//#region src/core/signingEngine/session/material/ecdsaRoleLocalMaterialResolver.ts
|
|
610
|
-
const persistedMaterialBrand = Symbol("persisted-ecdsa-role-local-material");
|
|
611
|
-
function materialRefMatchesPublicFacts(materialRef, publicFacts) {
|
|
612
|
-
return materialRef.bindingDigest === publicFacts.contextBinding32B64u;
|
|
613
|
-
}
|
|
614
|
-
function liveHandleMatchesMaterialRef(liveHandle, materialRef) {
|
|
615
|
-
return liveHandle.durableMaterialRef === materialRef.durableMaterialRef && liveHandle.bindingDigest === materialRef.bindingDigest;
|
|
616
|
-
}
|
|
617
|
-
function errorMessage(error) {
|
|
618
|
-
return error instanceof Error ? error.message : String(error);
|
|
619
|
-
}
|
|
620
|
-
function corruptResolution(args) {
|
|
621
|
-
return {
|
|
622
|
-
kind: "corrupt",
|
|
623
|
-
purpose: args.purpose,
|
|
624
|
-
reason: args.reason,
|
|
625
|
-
message: args.message
|
|
626
|
-
};
|
|
627
|
-
}
|
|
628
|
-
function resolutionFromRehydrationFailure(args) {
|
|
629
|
-
switch (args.failure.reason) {
|
|
630
|
-
case "missing": return {
|
|
631
|
-
kind: "device_link_required",
|
|
632
|
-
purpose: args.purpose,
|
|
633
|
-
reason: "missing_local_material"
|
|
634
|
-
};
|
|
635
|
-
case "expired": return corruptResolution({
|
|
636
|
-
purpose: args.purpose,
|
|
637
|
-
reason: "expired",
|
|
638
|
-
message: "ECDSA role-local persisted material has expired"
|
|
639
|
-
});
|
|
640
|
-
case "binding_mismatch": return corruptResolution({
|
|
641
|
-
purpose: args.purpose,
|
|
642
|
-
reason: "binding_mismatch",
|
|
643
|
-
message: "ECDSA role-local persisted material binding does not match its public facts"
|
|
644
|
-
});
|
|
645
|
-
case "corrupt": return corruptResolution({
|
|
646
|
-
purpose: args.purpose,
|
|
647
|
-
reason: "corrupt_persistence",
|
|
648
|
-
message: "ECDSA role-local persisted material is corrupt"
|
|
649
|
-
});
|
|
650
|
-
default: {
|
|
651
|
-
const exhaustive = args.failure.reason;
|
|
652
|
-
throw new Error(`Unsupported ECDSA role-local restoration failure: ${String(exhaustive)}`);
|
|
653
|
-
}
|
|
654
|
-
}
|
|
655
|
-
}
|
|
656
|
-
function buildPersistedEcdsaRoleLocalMaterial(input) {
|
|
657
|
-
const authority = parseWalletAuthAuthorityRef(input.authority);
|
|
658
|
-
if (!authority) throw new Error("ECDSA role-local persisted material authority is invalid");
|
|
659
|
-
const materialActivationResult = parseMpcMaterialActivationRef(input.materialActivation);
|
|
660
|
-
if (!materialActivationResult.ok) throw new Error(materialActivationResult.error.message);
|
|
661
|
-
if (authority.walletId !== input.publicFacts.walletId) throw new Error("ECDSA role-local persisted material authority does not match its wallet");
|
|
662
|
-
return {
|
|
663
|
-
[persistedMaterialBrand]: true,
|
|
664
|
-
kind: "persisted_ecdsa_role_local_material_v1",
|
|
665
|
-
authority,
|
|
666
|
-
materialActivation: materialActivationResult.value,
|
|
667
|
-
publicFacts: input.publicFacts
|
|
668
|
-
};
|
|
669
|
-
}
|
|
670
|
-
function ecdsaRoleLocalPersistedMaterialSource(persistedMaterial) {
|
|
671
|
-
return {
|
|
672
|
-
kind: "persisted",
|
|
673
|
-
authority: persistedMaterial.authority,
|
|
674
|
-
materialActivation: persistedMaterial.materialActivation,
|
|
675
|
-
publicFacts: persistedMaterial.publicFacts
|
|
676
|
-
};
|
|
677
|
-
}
|
|
678
|
-
async function resolveEcdsaRoleLocalMaterial(input) {
|
|
679
|
-
switch (input.source.kind) {
|
|
680
|
-
case "unavailable": return {
|
|
681
|
-
kind: "device_link_required",
|
|
682
|
-
purpose: input.purpose,
|
|
683
|
-
reason: input.source.reason
|
|
684
|
-
};
|
|
685
|
-
case "persisted": try {
|
|
686
|
-
const rehydrated = await openEcdsaRoleLocalSigningMaterialWasm({
|
|
687
|
-
authority: input.source.authority,
|
|
688
|
-
materialActivation: input.source.materialActivation,
|
|
689
|
-
workerCtx: input.workerCtx
|
|
690
|
-
});
|
|
691
|
-
if (!rehydrated.ok) return resolutionFromRehydrationFailure({
|
|
692
|
-
purpose: input.purpose,
|
|
693
|
-
failure: rehydrated
|
|
694
|
-
});
|
|
695
|
-
if (!mpcMaterialActivationRefsEqual(rehydrated.materialRef.materialActivation, input.source.materialActivation) || !materialRefMatchesPublicFacts(rehydrated.materialRef, input.source.publicFacts)) return corruptResolution({
|
|
696
|
-
purpose: input.purpose,
|
|
697
|
-
reason: "worker_identity_mismatch",
|
|
698
|
-
message: "ECDSA role-local worker restored a different material identity"
|
|
699
|
-
});
|
|
700
|
-
if (!liveHandleMatchesMaterialRef(rehydrated.liveHandle, rehydrated.materialRef)) return corruptResolution({
|
|
701
|
-
purpose: input.purpose,
|
|
702
|
-
reason: "worker_identity_mismatch",
|
|
703
|
-
message: "ECDSA role-local worker restored a different durable material"
|
|
704
|
-
});
|
|
705
|
-
return {
|
|
706
|
-
kind: "rehydrated",
|
|
707
|
-
purpose: input.purpose,
|
|
708
|
-
liveHandle: rehydrated.liveHandle,
|
|
709
|
-
materialRef: rehydrated.materialRef
|
|
710
|
-
};
|
|
711
|
-
} catch (error) {
|
|
712
|
-
return corruptResolution({
|
|
713
|
-
purpose: input.purpose,
|
|
714
|
-
reason: "persistence_unavailable",
|
|
715
|
-
message: errorMessage(error)
|
|
716
|
-
});
|
|
717
|
-
}
|
|
718
|
-
default: {
|
|
719
|
-
const exhaustive = input.source;
|
|
720
|
-
throw new Error(`Unsupported ECDSA role-local material source: ${String(exhaustive)}`);
|
|
721
|
-
}
|
|
722
|
-
}
|
|
723
|
-
}
|
|
724
|
-
//#endregion
|
|
725
|
-
//#region src/core/signingEngine/session/identity/ownerLaneScope.ts
|
|
726
|
-
var OwnerLaneScopeIntegrityError = class extends Error {
|
|
727
|
-
constructor(message) {
|
|
728
|
-
super(`[OwnerLaneScope] ${message}`);
|
|
729
|
-
this.name = "OwnerLaneScopeIntegrityError";
|
|
730
|
-
}
|
|
731
|
-
};
|
|
732
|
-
/**
|
|
733
|
-
* The active authority names a credential this device holds no active
|
|
734
|
-
* canonical wallet auth method for: a pre-Phase-8 enrollment (or a device
|
|
735
|
-
* whose canonical state was removed). It cannot act as a human owner until it
|
|
736
|
-
* links again. Distinct from OwnerLaneScopeIntegrityError so request
|
|
737
|
-
* boundaries and the UI can surface "link this device again" instead of a
|
|
738
|
-
* generic integrity failure.
|
|
739
|
-
*/
|
|
740
|
-
var OwnerRelinkRequiredError = class extends Error {
|
|
741
|
-
constructor(walletAuthMethodId) {
|
|
742
|
-
super(`[OwnerLaneScope] relink_required: no active canonical wallet auth method (${walletAuthMethodId})`);
|
|
743
|
-
this.code = "relink_required";
|
|
744
|
-
this.reason = "missing_canonical_owner_binding";
|
|
745
|
-
this.name = "OwnerRelinkRequiredError";
|
|
746
|
-
}
|
|
747
|
-
};
|
|
748
|
-
function isOwnerRelinkRequiredError(error) {
|
|
749
|
-
return error instanceof OwnerRelinkRequiredError && error.name === "OwnerRelinkRequiredError" && error.code === "relink_required";
|
|
750
|
-
}
|
|
751
|
-
function passkeyWalletAuthAuthorityFromV2Record(record) {
|
|
752
|
-
return {
|
|
753
|
-
walletId: record.walletId,
|
|
754
|
-
factor: {
|
|
755
|
-
kind: "passkey",
|
|
756
|
-
credentialIdB64u: record.credentialIdB64u
|
|
757
|
-
},
|
|
758
|
-
verifier: {
|
|
759
|
-
kind: "webauthn",
|
|
760
|
-
rpId: record.rpId
|
|
761
|
-
},
|
|
762
|
-
bindingId: record.walletAuthMethodId
|
|
763
|
-
};
|
|
764
|
-
}
|
|
765
|
-
/**
|
|
766
|
-
* The exact Email OTP authority for an installation that holds no local factor
|
|
767
|
-
* record — a linked device, whose factor record belongs to registration. The
|
|
768
|
-
* V2 record carries every field but the provider identity, which the caller
|
|
769
|
-
* supplies from this installation's verified lanes.
|
|
770
|
-
*/
|
|
771
|
-
function emailOtpWalletAuthAuthorityFromProviderSubject(args) {
|
|
772
|
-
const providerUserId = String(args.providerSubjectId || "").trim();
|
|
773
|
-
if (!providerUserId) throw new OwnerLaneScopeIntegrityError("active Email OTP method has no exact local factor");
|
|
774
|
-
const authority = parseEmailOtpWalletAuthAuthority({
|
|
775
|
-
walletId: args.authMethod.walletId,
|
|
776
|
-
factor: {
|
|
777
|
-
kind: "email_otp",
|
|
778
|
-
provider: providerUserId.startsWith("google:") ? "google" : "email",
|
|
779
|
-
providerUserId
|
|
780
|
-
},
|
|
781
|
-
verifier: {
|
|
782
|
-
kind: "email_otp_wallet_auth_method",
|
|
783
|
-
emailHashHex: args.authMethod.emailHashHex
|
|
784
|
-
},
|
|
785
|
-
bindingId: args.authMethod.walletAuthMethodId
|
|
786
|
-
});
|
|
787
|
-
if (!authority) throw new OwnerLaneScopeIntegrityError("active Email OTP method has no exact local factor");
|
|
788
|
-
return authority;
|
|
789
|
-
}
|
|
790
|
-
function emailOtpWalletAuthAuthorityFromLocalFactor(args) {
|
|
791
|
-
const matches = args.localMethods.filter((record) => record.kind === "email_otp" && record.status === "active" && record.walletId === args.authMethod.walletId && record.emailHashHex === args.authMethod.emailHashHex);
|
|
792
|
-
const localMethod = matches[0];
|
|
793
|
-
const authority = localMethod ? parseEmailOtpWalletAuthAuthority(localMethod.authority) : null;
|
|
794
|
-
if (matches.length !== 1 || !authority || authority.walletId !== args.authMethod.walletId || authority.bindingId !== args.authMethod.walletAuthMethodId || authority.verifier.emailHashHex !== args.authMethod.emailHashHex) throw new OwnerLaneScopeIntegrityError("active Email OTP method has no exact local factor");
|
|
795
|
-
return authority;
|
|
796
|
-
}
|
|
797
|
-
/**
|
|
798
|
-
* Registration's local factor record first, because it is the authoritative
|
|
799
|
-
* one where it exists; a linked installation falls back to the provider
|
|
800
|
-
* subject its own lanes carry.
|
|
801
|
-
*/
|
|
802
|
-
async function resolveEmailOtpWalletAuthAuthority(args) {
|
|
803
|
-
const walletId = String(args.authMethod.walletId);
|
|
804
|
-
try {
|
|
805
|
-
return emailOtpWalletAuthAuthorityFromLocalFactor({
|
|
806
|
-
authMethod: args.authMethod,
|
|
807
|
-
localMethods: await args.stores.listWalletAuthMethodsForWallet(walletId)
|
|
808
|
-
});
|
|
809
|
-
} catch (error) {
|
|
810
|
-
if (!args.stores.readEmailOtpProviderSubjectForWallet) throw error;
|
|
811
|
-
const providerSubjectId = await args.stores.readEmailOtpProviderSubjectForWallet(walletId);
|
|
812
|
-
if (!providerSubjectId) throw error;
|
|
813
|
-
return emailOtpWalletAuthAuthorityFromProviderSubject({
|
|
814
|
-
authMethod: args.authMethod,
|
|
815
|
-
providerSubjectId
|
|
816
|
-
});
|
|
817
|
-
}
|
|
818
|
-
}
|
|
819
|
-
function assertExactFactorAuthorityBinding(args) {
|
|
820
|
-
if (args.authority.walletId !== args.authMethod.walletId || args.authority.bindingId !== args.authMethod.walletAuthMethodId) throw new OwnerLaneScopeIntegrityError("active wallet auth method does not have an exact factor authority binding");
|
|
821
|
-
return args.authority;
|
|
822
|
-
}
|
|
823
|
-
async function resolveExactWalletAuthAuthority(args) {
|
|
824
|
-
if (args.authMethod.kind === "passkey") return assertExactFactorAuthorityBinding({
|
|
825
|
-
authMethod: args.authMethod,
|
|
826
|
-
authority: passkeyWalletAuthAuthorityFromV2Record(args.authMethod)
|
|
827
|
-
});
|
|
828
|
-
return assertExactFactorAuthorityBinding({
|
|
829
|
-
authMethod: args.authMethod,
|
|
830
|
-
authority: await resolveEmailOtpWalletAuthAuthority({
|
|
831
|
-
authMethod: args.authMethod,
|
|
832
|
-
stores: args.stores
|
|
833
|
-
})
|
|
834
|
-
});
|
|
835
|
-
}
|
|
836
|
-
function buildExactPasskeyOwnerLaneScope(args) {
|
|
837
|
-
return {
|
|
838
|
-
auth: {
|
|
839
|
-
kind: "passkey",
|
|
840
|
-
rpId: toRpId(args.authMethod.rpId),
|
|
841
|
-
credentialIdB64u: args.authMethod.credentialIdB64u
|
|
842
|
-
},
|
|
843
|
-
signerSlot: args.signerSlot
|
|
844
|
-
};
|
|
845
|
-
}
|
|
846
|
-
function buildExactEcdsaPasskeyOwnerLaneScope(args) {
|
|
847
|
-
return {
|
|
848
|
-
auth: {
|
|
849
|
-
kind: "passkey",
|
|
850
|
-
rpId: toRpId(args.authMethod.rpId),
|
|
851
|
-
credentialIdB64u: args.authMethod.credentialIdB64u
|
|
852
|
-
},
|
|
853
|
-
keyFamily: "ecdsa"
|
|
854
|
-
};
|
|
855
|
-
}
|
|
856
|
-
function buildExactLinkedEmailOtpOwnerLaneScope(args) {
|
|
857
|
-
if (args.factorAuthority.walletId !== args.authMethod.walletId || args.factorAuthority.bindingId !== args.authMethod.walletAuthMethodId || args.factorAuthority.verifier.emailHashHex !== args.authMethod.emailHashHex || args.authorityRef.walletId !== args.authMethod.walletId || args.authorityRef.walletAuthMethodId !== args.authMethod.walletAuthMethodId) throw new OwnerLaneScopeIntegrityError("linked Email OTP authority does not match the selected V2 method");
|
|
858
|
-
return {
|
|
859
|
-
auth: {
|
|
860
|
-
kind: "email_otp",
|
|
861
|
-
providerSubjectId: String(args.factorAuthority.factor.providerUserId)
|
|
862
|
-
},
|
|
863
|
-
ownerAuthority: {
|
|
864
|
-
walletAuthMethodId: args.authorityRef.walletAuthMethodId,
|
|
865
|
-
authorityDigest: args.authorityRef.authorityDigest
|
|
866
|
-
}
|
|
867
|
-
};
|
|
868
|
-
}
|
|
869
|
-
async function passkeyOwnerLaneScope(args) {
|
|
870
|
-
const authenticator = await args.stores.getWalletPasskeyAuthenticator({
|
|
871
|
-
walletId: String(args.authMethod.walletId),
|
|
872
|
-
credentialId: args.authMethod.credentialIdB64u
|
|
873
|
-
});
|
|
874
|
-
if (!authenticator || authenticator.credentialId !== args.authMethod.credentialIdB64u) throw new OwnerLaneScopeIntegrityError("active Passkey auth method has no exact local authenticator");
|
|
875
|
-
const signerSlot = parseSignerSlot(authenticator.signerSlot, { min: 1 });
|
|
876
|
-
if (signerSlot === null) throw new OwnerLaneScopeIntegrityError("local authenticator signer slot is invalid");
|
|
877
|
-
return buildExactPasskeyOwnerLaneScope({
|
|
878
|
-
authMethod: args.authMethod,
|
|
879
|
-
signerSlot
|
|
880
|
-
});
|
|
881
|
-
}
|
|
882
|
-
async function resolveExactOwnerLaneScope(args) {
|
|
883
|
-
if (args.authMethod.kind === "passkey") return await passkeyOwnerLaneScope({
|
|
884
|
-
authMethod: args.authMethod,
|
|
885
|
-
stores: args.stores
|
|
886
|
-
});
|
|
887
|
-
const authority = await resolveEmailOtpWalletAuthAuthority({
|
|
888
|
-
authMethod: args.authMethod,
|
|
889
|
-
stores: args.stores
|
|
890
|
-
});
|
|
891
|
-
const authorityRef = await walletAuthAuthorityRef({ authority });
|
|
892
|
-
return {
|
|
893
|
-
auth: {
|
|
894
|
-
kind: "email_otp",
|
|
895
|
-
providerSubjectId: String(authority.factor.providerUserId)
|
|
896
|
-
},
|
|
897
|
-
ownerAuthority: {
|
|
898
|
-
walletAuthMethodId: authorityRef.walletAuthMethodId,
|
|
899
|
-
authorityDigest: authorityRef.authorityDigest
|
|
900
|
-
}
|
|
901
|
-
};
|
|
902
|
-
}
|
|
903
|
-
//#endregion
|
|
904
|
-
//#region src/core/signingEngine/session/emailOtp/ecdsaSigningSessionAuthority.ts
|
|
905
|
-
function isExactSelectedWalletAuthority(selected) {
|
|
906
|
-
return selected.kind === "resolved" && selected.authMethod.status === "active" && selected.authority.state === "active";
|
|
907
|
-
}
|
|
908
|
-
function emailOtpEcdsaSigningSessionAuthLane(authorization) {
|
|
909
|
-
if (authorization.selectedAuthMethod.kind !== "email_otp" || authorization.runtime.kind !== "exact_ecdsa_sealed_runtime_v1" || authorization.runtime.authBinding.kind !== "email_otp" || authorization.operationCredential.token.trim().length === 0 || authorization.runtime.sealedRecord.thresholdSessionId.trim().length === 0) throw new Error("Exact Email OTP ECDSA signing-session authorization is incomplete");
|
|
910
|
-
return {
|
|
911
|
-
kind: "signing_session",
|
|
912
|
-
operationCredential: authorization.operationCredential,
|
|
913
|
-
thresholdSessionId: authorization.runtime.sealedRecord.thresholdSessionId,
|
|
914
|
-
curve: "ecdsa",
|
|
915
|
-
chainTarget: authorization.runtime.chainTarget
|
|
916
|
-
};
|
|
917
|
-
}
|
|
918
|
-
/**
|
|
919
|
-
* The sealed runtime and capability manifest identify the material and Email
|
|
920
|
-
* OTP authority. The selected authority and exact Wallet Session record must
|
|
921
|
-
* reproduce that tuple before the signing-session lane can be built.
|
|
922
|
-
*/
|
|
923
|
-
async function resolveExactEmailOtpEcdsaSigningSessionAuthority(ports, args) {
|
|
924
|
-
if (args.runtime.kind !== "exact_ecdsa_sealed_runtime_v1" || args.runtime.walletId !== args.walletId || !thresholdEcdsaChainTargetsEqual(args.runtime.chainTarget, args.chainTarget) || !mpcMaterialActivationRefsEqual(args.runtime.materialActivation, args.manifest.activation.materialActivation) || args.manifest.signer.walletId !== args.walletId) return null;
|
|
925
|
-
if (args.runtime.authBinding.kind !== "email_otp") return null;
|
|
926
|
-
let runtimeAuthorityRef;
|
|
927
|
-
try {
|
|
928
|
-
runtimeAuthorityRef = await walletAuthAuthorityRef({ authority: args.runtime.authBinding.emailOtpAuthority });
|
|
929
|
-
} catch {
|
|
930
|
-
return null;
|
|
931
|
-
}
|
|
932
|
-
const manifestAuthorityRef = args.manifest.signer.authority;
|
|
933
|
-
if (runtimeAuthorityRef.walletId !== args.walletId || runtimeAuthorityRef.walletAuthMethodId !== manifestAuthorityRef.walletAuthMethodId || runtimeAuthorityRef.authorityDigest !== manifestAuthorityRef.authorityDigest || manifestAuthorityRef.walletId !== args.walletId) return null;
|
|
934
|
-
let selected;
|
|
935
|
-
try {
|
|
936
|
-
selected = await ports.resolveSelectedWalletAuthority(String(args.walletId));
|
|
937
|
-
} catch {
|
|
938
|
-
return null;
|
|
939
|
-
}
|
|
940
|
-
if (!isExactSelectedWalletAuthority(selected)) return null;
|
|
941
|
-
const { selection, authMethod, authority } = selected;
|
|
942
|
-
const ecdsaActivation = authority.signerActivations.ecdsa;
|
|
943
|
-
if (selection.lockState !== "unlocked" || selection.walletId !== args.walletId || authMethod.kind !== "email_otp" || authMethod.status !== "active" || authMethod.walletId !== args.walletId || authority.state !== "active" || authority.walletId !== args.walletId || selection.walletAuthMethodId !== authMethod.walletAuthMethodId || authMethod.walletAuthorityId !== authority.authorityId || authMethod.walletAuthMethodId !== runtimeAuthorityRef.walletAuthMethodId || !ecdsaActivation || ecdsaActivation.signer.walletId !== args.walletId || !mpcMaterialActivationRefsEqual(ecdsaActivation.materialActivation, args.runtime.materialActivation)) return null;
|
|
944
|
-
let selectedFactorAuthority;
|
|
945
|
-
try {
|
|
946
|
-
selectedFactorAuthority = await resolveExactWalletAuthAuthority({
|
|
947
|
-
authMethod,
|
|
948
|
-
stores: ports.factorStores
|
|
949
|
-
});
|
|
950
|
-
} catch {
|
|
951
|
-
return null;
|
|
952
|
-
}
|
|
953
|
-
if (!walletAuthAuthoritiesMatch(selectedFactorAuthority, args.runtime.authBinding.emailOtpAuthority)) return null;
|
|
954
|
-
let authorizationRead;
|
|
955
|
-
try {
|
|
956
|
-
authorizationRead = await ports.readExactWalletSessionAuthorization({
|
|
957
|
-
walletId: args.walletId,
|
|
958
|
-
authorityId: authority.authorityId,
|
|
959
|
-
authMethodId: authMethod.walletAuthMethodId
|
|
960
|
-
});
|
|
961
|
-
} catch {
|
|
962
|
-
return null;
|
|
963
|
-
}
|
|
964
|
-
if (authorizationRead.kind !== "found") return null;
|
|
965
|
-
const { record, operationCredential } = authorizationRead;
|
|
966
|
-
if (record.walletId !== args.walletId || record.authorityId !== authority.authorityId || record.authMethodId !== authMethod.walletAuthMethodId || record.authorityDigestB64u !== authority.authorityDigestB64u || record.authorityRevocationEpoch !== authority.revocationEpoch || record.expiresAtMs <= Date.now() || operationCredential.walletSessionId.trim().length === 0 || operationCredential.token.trim().length === 0) return null;
|
|
967
|
-
if (record.capabilitySubjects.filter((subject) => subject.kind === "sign" && subject.keyFamily === "ecdsa_secp256k1" && mpcMaterialActivationRefsEqual(subject.materialActivation, args.runtime.materialActivation)).length !== 1) return null;
|
|
968
|
-
try {
|
|
969
|
-
return buildExactEvmFamilyWalletSessionAuthorization({
|
|
970
|
-
capability: await buildCanonicalEvmFamilyEcdsaSigningCapability({
|
|
971
|
-
authority: args.runtime.authBinding.emailOtpAuthority,
|
|
972
|
-
manifest: args.manifest,
|
|
973
|
-
material: buildPersistedEcdsaRoleLocalMaterial({
|
|
974
|
-
authority: args.manifest.signer.authority,
|
|
975
|
-
materialActivation: args.manifest.activation.materialActivation,
|
|
976
|
-
publicFacts: args.manifest.durableMaterial.roleLocalPublicFacts
|
|
977
|
-
})
|
|
978
|
-
}),
|
|
979
|
-
selected,
|
|
980
|
-
session: record,
|
|
981
|
-
operationCredential,
|
|
982
|
-
runtime: args.runtime,
|
|
983
|
-
nowMs: Date.now()
|
|
984
|
-
});
|
|
985
|
-
} catch {
|
|
986
|
-
return null;
|
|
987
|
-
}
|
|
988
|
-
}
|
|
989
|
-
//#endregion
|
|
990
|
-
//#region src/core/signingEngine/flows/signEvmFamily/events.ts
|
|
991
|
-
function emitEvmFamilyBroadcastEvent(onEvent, event) {
|
|
992
|
-
try {
|
|
993
|
-
onEvent?.(createSigningFlowEvent({
|
|
994
|
-
...event,
|
|
995
|
-
flowId: event.flowId ?? createEvmFamilySigningFlowId(event)
|
|
996
|
-
}));
|
|
997
|
-
} catch {}
|
|
998
|
-
}
|
|
999
|
-
function createEvmFamilySigningFlowId(event) {
|
|
1000
|
-
const data = event.data || {};
|
|
1001
|
-
return [
|
|
1002
|
-
"signing",
|
|
1003
|
-
String(data.chain || "evm_family"),
|
|
1004
|
-
String(data.networkKey || "unknown_network"),
|
|
1005
|
-
String(data.nonce || "") || String(event.phase)
|
|
1006
|
-
].join(":");
|
|
1007
|
-
}
|
|
1008
|
-
function emitEvmFamilySigningEvent(onEvent, event) {
|
|
1009
|
-
emitEvmFamilyBroadcastEvent(onEvent, event);
|
|
1010
|
-
}
|
|
1011
|
-
function emitEvmFamilySigningOperationTrace(event) {
|
|
1012
|
-
if (!isEvmFamilySigningOperationTraceEnabled()) return;
|
|
1013
|
-
try {
|
|
1014
|
-
console.debug("[SigningOperationMachine][evm-family]", event);
|
|
1015
|
-
} catch {}
|
|
1016
|
-
}
|
|
1017
|
-
function isEvmFamilySigningOperationTraceEnabled() {
|
|
1018
|
-
try {
|
|
1019
|
-
return globalThis.localStorage?.getItem("seams:debug:signing-operation") === "1";
|
|
1020
|
-
} catch {
|
|
1021
|
-
return false;
|
|
1022
|
-
}
|
|
1023
|
-
}
|
|
1024
|
-
//#endregion
|
|
1025
|
-
//#region src/core/signingEngine/threshold/ecdsa/signingQueue.ts
|
|
1026
|
-
function ecdsaSigningQueueWalletIdLabel(walletId) {
|
|
1027
|
-
return String(walletId).trim();
|
|
1028
|
-
}
|
|
1029
|
-
function createThresholdEcdsaSigningQueueOverflowError(walletId, queueKey, maxQueueLength) {
|
|
1030
|
-
const normalizedWalletId = ecdsaSigningQueueWalletIdLabel(walletId);
|
|
1031
|
-
const err = /* @__PURE__ */ new Error(`[SigningEngine] threshold ECDSA signing queue overflow for ${normalizedWalletId} (queueKey=${queueKey}, max=${maxQueueLength})`);
|
|
1032
|
-
err.code = "commit_queue_overflow";
|
|
1033
|
-
return err;
|
|
1034
|
-
}
|
|
1035
|
-
function createThresholdEcdsaSigningQueueTimeoutError(walletId, queueKey, timeoutMs) {
|
|
1036
|
-
const normalizedWalletId = ecdsaSigningQueueWalletIdLabel(walletId);
|
|
1037
|
-
const err = /* @__PURE__ */ new Error(`[SigningEngine] threshold ECDSA signing queue timeout for ${normalizedWalletId} (queueKey=${queueKey}, waited>${timeoutMs}ms before start)`);
|
|
1038
|
-
err.code = "commit_queue_timeout";
|
|
1039
|
-
return err;
|
|
1040
|
-
}
|
|
1041
|
-
function createThresholdEcdsaSigningQueueCancelledError(walletId, queueKey, reason = "cancelled") {
|
|
1042
|
-
const normalizedWalletId = ecdsaSigningQueueWalletIdLabel(walletId);
|
|
1043
|
-
const message = reason === "queue_cleared" ? `[SigningEngine] threshold ECDSA queued signing operation cancelled for ${normalizedWalletId} (queueKey=${queueKey}, queue_cleared)` : `[SigningEngine] threshold ECDSA queued signing operation cancelled for ${normalizedWalletId} (queueKey=${queueKey})`;
|
|
1044
|
-
const err = new Error(message);
|
|
1045
|
-
err.code = "cancelled";
|
|
1046
|
-
return err;
|
|
1047
|
-
}
|
|
1048
|
-
function resolveThresholdEcdsaSigningQueueKey(args) {
|
|
1049
|
-
return [
|
|
1050
|
-
"material",
|
|
1051
|
-
encodeURIComponent(String(args.materialActivation.materialOwner)),
|
|
1052
|
-
encodeURIComponent(String(args.materialActivation.capability)),
|
|
1053
|
-
encodeURIComponent(String(args.materialActivation.activationId))
|
|
1054
|
-
].join(":");
|
|
1055
|
-
}
|
|
1056
|
-
function clearThresholdEcdsaSigningQueue(queueByKey) {
|
|
1057
|
-
clearThresholdCommitQueue(queueByKey);
|
|
1058
|
-
}
|
|
1059
|
-
async function withThresholdEcdsaSigningQueue(args) {
|
|
1060
|
-
const queueKey = String(args.queueKey || "").trim();
|
|
1061
|
-
if (!queueKey) throw new Error("[SigningEngine] threshold ECDSA signing queue requires non-empty queueKey");
|
|
1062
|
-
const walletKey = args.walletId;
|
|
1063
|
-
return await withThresholdCommitQueue({
|
|
1064
|
-
queueByKey: args.queueByKey,
|
|
1065
|
-
queueKey,
|
|
1066
|
-
enabled: args.enabled,
|
|
1067
|
-
shouldAbort: args.shouldAbort,
|
|
1068
|
-
maxQueueLength: args.maxQueueLength,
|
|
1069
|
-
queueTimeoutMs: args.queueTimeoutMs,
|
|
1070
|
-
task: args.task,
|
|
1071
|
-
errors: {
|
|
1072
|
-
makeOverflowError: (queueKey, maxQueueLength) => createThresholdEcdsaSigningQueueOverflowError(walletKey, queueKey, maxQueueLength),
|
|
1073
|
-
makeTimeoutError: (queueKey, timeoutMs) => createThresholdEcdsaSigningQueueTimeoutError(walletKey, queueKey, timeoutMs),
|
|
1074
|
-
makeCancelledError: (queueKey, reason) => createThresholdEcdsaSigningQueueCancelledError(walletKey, queueKey, reason)
|
|
1075
|
-
}
|
|
1076
|
-
});
|
|
1077
|
-
}
|
|
1078
|
-
//#endregion
|
|
1079
|
-
//#region src/core/signingEngine/flows/signEvmFamily/emailOtpSigningSession.ts
|
|
1080
|
-
/** The capability is the authority. Anything the caller or the confirmation
|
|
1081
|
-
* plan supplies must agree with it exactly, or the OTP would be sent to a
|
|
1082
|
-
* different mailbox than the one bound to the material being signed with. */
|
|
1083
|
-
function emailOtpEcdsaCapabilityStepUpAuthority(args) {
|
|
1084
|
-
const capabilityAuthority = args.capability.authority;
|
|
1085
|
-
if (!isEmailOtpWalletAuthAuthority(capabilityAuthority)) throw new Error("[SigningEngine] Email OTP operation step-up requires an Email OTP capability authority");
|
|
1086
|
-
if (args.claimedAuthority && !walletAuthAuthoritiesMatch(capabilityAuthority, args.claimedAuthority)) throw new Error("[SigningEngine] Email OTP step-up authority does not match the selected capability");
|
|
1087
|
-
if (!mpcMaterialActivationRefsEqual(args.capability.manifest.activation.materialActivation, args.materialActivation)) throw new Error("[SigningEngine] Email OTP step-up material activation does not match the selected capability");
|
|
1088
|
-
const operationFingerprint = String(args.operationFingerprint || "").trim();
|
|
1089
|
-
if (!operationFingerprint) throw new Error("[SigningEngine] Email OTP operation step-up requires an operation fingerprint");
|
|
1090
|
-
return {
|
|
1091
|
-
kind: "capability_step_up",
|
|
1092
|
-
capabilityAuthority,
|
|
1093
|
-
materialActivation: args.materialActivation,
|
|
1094
|
-
operationFingerprint
|
|
1095
|
-
};
|
|
1096
|
-
}
|
|
1097
|
-
function emailOtpEcdsaChallengeAuthority(authority) {
|
|
1098
|
-
switch (authority.kind) {
|
|
1099
|
-
case "live_session":
|
|
1100
|
-
if (authority.committedLane.authority.factor.kind !== "email_otp") throw new Error("[SigningEngine][ecdsa] Email OTP challenge requires Email OTP authority");
|
|
1101
|
-
return {
|
|
1102
|
-
kind: "live_session",
|
|
1103
|
-
authLane: authority.committedLane.authLane
|
|
1104
|
-
};
|
|
1105
|
-
case "capability_step_up": return {
|
|
1106
|
-
kind: "capability_step_up",
|
|
1107
|
-
capabilityAuthority: authority.capabilityAuthority,
|
|
1108
|
-
materialActivation: authority.materialActivation,
|
|
1109
|
-
operationFingerprint: authority.operationFingerprint
|
|
1110
|
-
};
|
|
1111
|
-
}
|
|
1112
|
-
}
|
|
1113
|
-
function createEmailOtpEcdsaTransactionSigningBridge(args) {
|
|
1114
|
-
let mintedForOperationFingerprint = null;
|
|
1115
|
-
return { challenge: async () => {
|
|
1116
|
-
if (typeof args.requestEmailOtpTransactionSigningChallenge !== "function") throw new Error("[SigningEngine] Email OTP ECDSA signing step-up is not configured");
|
|
1117
|
-
if (args.authority.kind === "capability_step_up") {
|
|
1118
|
-
if (mintedForOperationFingerprint !== null && mintedForOperationFingerprint !== args.authority.operationFingerprint) throw new Error("[SigningEngine] Email OTP step-up challenge is bound to a different operation");
|
|
1119
|
-
mintedForOperationFingerprint = args.authority.operationFingerprint;
|
|
1120
|
-
}
|
|
1121
|
-
emitEvmFamilySigningEvent(args.onEvent, {
|
|
1122
|
-
phase: SigningEventPhase.STEP_06_AUTH_EMAIL_OTP_CHALLENGE_STARTED,
|
|
1123
|
-
status: "running",
|
|
1124
|
-
walletId: args.walletId,
|
|
1125
|
-
interaction: {
|
|
1126
|
-
kind: "none",
|
|
1127
|
-
overlay: "none"
|
|
1128
|
-
}
|
|
1129
|
-
});
|
|
1130
|
-
emitSigningBoundaryTrace("evm-family", createSigningBoundaryTraceEvent({
|
|
1131
|
-
event: "auth_side_effect_started",
|
|
1132
|
-
lane: args.selectedLane,
|
|
1133
|
-
sideEffect: "email_otp_challenge",
|
|
1134
|
-
phase: "confirmed"
|
|
1135
|
-
}));
|
|
1136
|
-
const challenge = await args.requestEmailOtpTransactionSigningChallenge({
|
|
1137
|
-
walletSession: args.walletSession,
|
|
1138
|
-
chain: args.chain,
|
|
1139
|
-
authority: emailOtpEcdsaChallengeAuthority(args.authority),
|
|
1140
|
-
operationFingerprintDigest: args.operationFingerprintDigest
|
|
1141
|
-
});
|
|
1142
|
-
const challengeId = String(challenge.challengeId || "").trim();
|
|
1143
|
-
if (!challengeId) throw new Error("[SigningEngine] Email OTP challenge response did not include challengeId");
|
|
1144
|
-
emitEvmFamilySigningEvent(args.onEvent, {
|
|
1145
|
-
phase: SigningEventPhase.STEP_06_AUTH_EMAIL_OTP_INPUT_REQUIRED,
|
|
1146
|
-
status: "waiting_for_user",
|
|
1147
|
-
walletId: args.walletId,
|
|
1148
|
-
interaction: {
|
|
1149
|
-
kind: "otp_input",
|
|
1150
|
-
overlay: "show"
|
|
1151
|
-
},
|
|
1152
|
-
data: {
|
|
1153
|
-
emailHint: challenge.emailHint,
|
|
1154
|
-
demoOtpCode: demoEmailOtpCodeFromDelivery(challenge.delivery)
|
|
1155
|
-
}
|
|
1156
|
-
});
|
|
1157
|
-
return {
|
|
1158
|
-
challengeId,
|
|
1159
|
-
email: String(challenge.emailHint || "").trim()
|
|
1160
|
-
};
|
|
1161
|
-
} };
|
|
1162
|
-
}
|
|
1163
|
-
/** Canonical Email OTP signing-session resolution: the manifest proves exact
|
|
1164
|
-
* material, the sealed runtime supplies session-scoped facts and the Email OTP
|
|
1165
|
-
* binding, and the reusable Wallet Session is resolved independently. Refresh
|
|
1166
|
-
* must land on the same material activation it started from, so the caller
|
|
1167
|
-
* checks that before and after; nothing here invokes Yao recovery or device
|
|
1168
|
-
* linking. */
|
|
1169
|
-
async function resolveEmailOtpEcdsaSigningSessionAuth(args, authorityPorts) {
|
|
1170
|
-
const resolved = await authorityPorts.resolveActiveEcdsaCapabilityRuntime({
|
|
1171
|
-
walletId: args.walletId,
|
|
1172
|
-
chainTarget: args.chainTarget
|
|
1173
|
-
});
|
|
1174
|
-
if (resolved.kind !== "resolved") throwEmailOtpSigningSessionAuthStateError({
|
|
1175
|
-
kind: "auth_lane_missing",
|
|
1176
|
-
source: "evm_signing_refresh",
|
|
1177
|
-
expectedCurve: "ecdsa"
|
|
1178
|
-
});
|
|
1179
|
-
const authority = await resolveExactEmailOtpEcdsaSigningSessionAuthority(authorityPorts, {
|
|
1180
|
-
walletId: args.walletId,
|
|
1181
|
-
chainTarget: args.chainTarget,
|
|
1182
|
-
manifest: resolved.manifest,
|
|
1183
|
-
runtime: resolved.runtime
|
|
1184
|
-
});
|
|
1185
|
-
if (!authority) throwEmailOtpSigningSessionAuthStateError({
|
|
1186
|
-
kind: "auth_lane_missing",
|
|
1187
|
-
source: "evm_signing_refresh",
|
|
1188
|
-
expectedCurve: "ecdsa"
|
|
1189
|
-
});
|
|
1190
|
-
return {
|
|
1191
|
-
manifest: resolved.manifest,
|
|
1192
|
-
runtime: resolved.runtime,
|
|
1193
|
-
authority
|
|
1194
|
-
};
|
|
1195
|
-
}
|
|
1196
|
-
async function requestEmailOtpSigningSessionChallenge(deps, args) {
|
|
1197
|
-
const { authority } = await deps.resolveSigningSessionAuth({
|
|
1198
|
-
walletId: args.walletSession.walletId,
|
|
1199
|
-
chainTarget: args.chainTarget
|
|
1200
|
-
});
|
|
1201
|
-
return await deps.emailOtpSessions.requestTransactionSigningChallenge({
|
|
1202
|
-
kind: "wallet_session_challenge",
|
|
1203
|
-
walletSession: args.walletSession,
|
|
1204
|
-
chain: args.chainTarget.kind,
|
|
1205
|
-
authLane: emailOtpEcdsaSigningSessionAuthLane(authority)
|
|
1206
|
-
});
|
|
1207
|
-
}
|
|
1208
|
-
async function resolveFencedEmailOtpSigningSessionAuth(input) {
|
|
1209
|
-
let current;
|
|
1210
|
-
try {
|
|
1211
|
-
current = await input.deps.resolveSigningSessionAuth({
|
|
1212
|
-
walletId: input.args.walletSession.walletId,
|
|
1213
|
-
chainTarget: input.args.chainTarget
|
|
1214
|
-
});
|
|
1215
|
-
} catch {
|
|
1216
|
-
throw new Error(`[SigningEngine][ecdsa] Email OTP signing-session refresh material was superseded ${input.phase}`);
|
|
1217
|
-
}
|
|
1218
|
-
if (!mpcMaterialActivationRefsEqual(current.runtime.materialActivation, input.activationBeforeRefresh)) throw new Error(`[SigningEngine][ecdsa] Email OTP signing-session refresh material was superseded ${input.phase}`);
|
|
1219
|
-
return current;
|
|
1220
|
-
}
|
|
1221
|
-
async function runFencedEmailOtpSigningSessionRefresh(input) {
|
|
1222
|
-
const { manifest, runtime, authority } = await resolveFencedEmailOtpSigningSessionAuth({
|
|
1223
|
-
deps: input.deps,
|
|
1224
|
-
args: input.args,
|
|
1225
|
-
activationBeforeRefresh: input.activationBeforeRefresh,
|
|
1226
|
-
phase: "before use"
|
|
1227
|
-
});
|
|
1228
|
-
const routePlan = buildEmailOtpRoutePlan({
|
|
1229
|
-
routeFamily: "signing_session",
|
|
1230
|
-
authLane: emailOtpEcdsaSigningSessionAuthLane(authority),
|
|
1231
|
-
operation: WALLET_EMAIL_OTP_TRANSACTION_SIGN_OPERATION
|
|
1232
|
-
});
|
|
1233
|
-
const publicFacts = buildVerifiedEcdsaPublicFacts({
|
|
1234
|
-
keyHandle: toEvmFamilyEcdsaKeyHandle(String(manifest.durableMaterial.roleLocalPublicFacts.keyHandle)),
|
|
1235
|
-
publicKeyB64u: runtime.thresholdEcdsaPublicKeyB64u,
|
|
1236
|
-
participantIds: [...runtime.participantIds],
|
|
1237
|
-
thresholdOwnerAddress: manifest.durableMaterial.roleLocalPublicFacts.ethereumAddress
|
|
1238
|
-
});
|
|
1239
|
-
const emailOtpBinding = runtime.authBinding;
|
|
1240
|
-
if (emailOtpBinding.kind !== "email_otp") throw new Error("Email OTP signing-session refresh requires an Email OTP sealed runtime");
|
|
1241
|
-
const refreshed = await input.deps.emailOtpSessions.loginWithEcdsaCapabilityInternal({
|
|
1242
|
-
walletSession: input.args.walletSession,
|
|
1243
|
-
authoritySelector: {
|
|
1244
|
-
kind: "wallet_auth_method",
|
|
1245
|
-
walletAuthMethodId: String((await walletAuthAuthorityRef({ authority: emailOtpBinding.emailOtpAuthority })).walletAuthMethodId)
|
|
1246
|
-
},
|
|
1247
|
-
chainTarget: input.args.chainTarget,
|
|
1248
|
-
emailOtpAuthPolicy: "session",
|
|
1249
|
-
emailOtpAuthReason: "sign",
|
|
1250
|
-
challengeId: input.args.challengeId,
|
|
1251
|
-
otpCode: input.args.otpCode,
|
|
1252
|
-
operation: WALLET_EMAIL_OTP_TRANSACTION_SIGN_OPERATION,
|
|
1253
|
-
routePlan,
|
|
1254
|
-
publicFacts,
|
|
1255
|
-
ecdsaBootstrapAuthorization: { kind: "route_plan_auth" },
|
|
1256
|
-
providerIdentity: {
|
|
1257
|
-
kind: "explicit_provider_user",
|
|
1258
|
-
provider: emailOtpBinding.emailOtpAuthority.factor.provider,
|
|
1259
|
-
providerUserId: emailOtpBinding.providerSubjectId
|
|
1260
|
-
},
|
|
1261
|
-
emailHashHex: emailOtpBinding.emailHashHex,
|
|
1262
|
-
...typeof input.args.ttlMs === "number" ? { ttlMs: input.args.ttlMs } : {},
|
|
1263
|
-
...typeof input.args.remainingUses === "number" ? { remainingUses: input.args.remainingUses } : {},
|
|
1264
|
-
...runtime.runtimePolicyScope ? { runtimePolicyScope: runtime.runtimePolicyScope } : {}
|
|
1265
|
-
});
|
|
1266
|
-
await resolveFencedEmailOtpSigningSessionAuth({
|
|
1267
|
-
deps: input.deps,
|
|
1268
|
-
args: input.args,
|
|
1269
|
-
activationBeforeRefresh: input.activationBeforeRefresh,
|
|
1270
|
-
phase: "during refresh"
|
|
1271
|
-
});
|
|
1272
|
-
return refreshed;
|
|
1273
|
-
}
|
|
1274
|
-
async function refreshEmailOtpSigningSession(deps, args) {
|
|
1275
|
-
const activationBeforeRefresh = (await deps.resolveSigningSessionAuth({
|
|
1276
|
-
walletId: args.walletSession.walletId,
|
|
1277
|
-
chainTarget: args.chainTarget
|
|
1278
|
-
})).runtime.materialActivation;
|
|
1279
|
-
return await deps.withThresholdEcdsaSigningQueue({
|
|
1280
|
-
queueKey: resolveThresholdEcdsaSigningQueueKey({ materialActivation: activationBeforeRefresh }),
|
|
1281
|
-
walletId: args.walletSession.walletId,
|
|
1282
|
-
enabled: true,
|
|
1283
|
-
task: runFencedEmailOtpSigningSessionRefresh.bind(void 0, {
|
|
1284
|
-
deps,
|
|
1285
|
-
args,
|
|
1286
|
-
activationBeforeRefresh
|
|
1287
|
-
})
|
|
1288
|
-
});
|
|
1289
|
-
}
|
|
1290
|
-
//#endregion
|
|
1291
|
-
//#region src/core/signingEngine/flows/signEvmFamily/authPlanning.ts
|
|
1292
|
-
function isEmailOtpEcdsaCommittedLane(committedLane) {
|
|
1293
|
-
return isEmailOtpWalletAuthAuthority(committedLane.authority);
|
|
1294
|
-
}
|
|
1295
|
-
function emailOtpStepUpAuthority(args) {
|
|
1296
|
-
const committedLane = args.selection.committedLane;
|
|
1297
|
-
if (!isEmailOtpEcdsaCommittedLane(committedLane)) throw new Error("[SigningEngine][ecdsa] Email OTP step-up requires Email OTP authority");
|
|
1298
|
-
if (committedLane.authLane) return {
|
|
1299
|
-
kind: "live_session",
|
|
1300
|
-
committedLane
|
|
1301
|
-
};
|
|
1302
|
-
return {
|
|
1303
|
-
kind: "capability_step_up",
|
|
1304
|
-
capabilityAuthority: committedLane.authority,
|
|
1305
|
-
materialActivation: committedLane.authorization.runtime.materialActivation,
|
|
1306
|
-
operationFingerprint: `sha256:${String(args.operationFingerprintDigest)}`
|
|
1307
|
-
};
|
|
1308
|
-
}
|
|
1309
|
-
function emailOtpStepUpAuthorityForSelection(args) {
|
|
1310
|
-
if (!args.selection) return void 0;
|
|
1311
|
-
return isEmailOtpWalletAuthAuthority(args.selection.committedLane.authority) ? emailOtpStepUpAuthority({
|
|
1312
|
-
selection: args.selection,
|
|
1313
|
-
operationFingerprintDigest: args.operationFingerprintDigest
|
|
1314
|
-
}) : void 0;
|
|
1315
|
-
}
|
|
1316
|
-
async function resolveEvmFamilyTransactionStepUp(args) {
|
|
1317
|
-
const walletId = toWalletId(args.walletSession.walletId);
|
|
1318
|
-
const reusableSessionEcdsaOperation = args.senderSignatureAlgorithm === "secp256k1" && args.ecdsaAuthorization === "reusable_wallet_session" ? args.preparedOperation : null;
|
|
1319
|
-
const preparedEcdsaMetadata = reusableSessionEcdsaOperation ? reusableSessionEcdsaOperation.metadata : null;
|
|
1320
|
-
const preparedEcdsaLane = reusableSessionEcdsaOperation?.lane;
|
|
1321
|
-
const preparedSelection = preparedEcdsaMetadata?.selection;
|
|
1322
|
-
const confirmedEmailOtpDeps = args.confirmedDeps;
|
|
1323
|
-
const emailOtpAuthority = (args.ecdsaAuthorization === "operation_step_up" && isEmailOtpWalletAuthAuthority(args.capability.authority) ? emailOtpEcdsaCapabilityStepUpAuthority({
|
|
1324
|
-
capability: args.capability,
|
|
1325
|
-
materialActivation: args.materialActivation,
|
|
1326
|
-
operationFingerprint: args.operationFingerprint
|
|
1327
|
-
}) : void 0) ?? (preparedEcdsaLane && signingLaneAuthMethod(preparedEcdsaLane.auth) === SIGNER_AUTH_METHODS.emailOtp ? emailOtpStepUpAuthorityForSelection({
|
|
1328
|
-
selection: preparedSelection,
|
|
1329
|
-
operationFingerprintDigest: args.operationFingerprintDigest
|
|
1330
|
-
}) : void 0);
|
|
1331
|
-
const emailOtpAuthBridge = emailOtpAuthority ? createEmailOtpEcdsaTransactionSigningBridge({
|
|
1332
|
-
walletId,
|
|
1333
|
-
walletSession: args.walletSession,
|
|
1334
|
-
chain: args.chain,
|
|
1335
|
-
...preparedEcdsaLane ? { selectedLane: preparedEcdsaLane } : {},
|
|
1336
|
-
authority: emailOtpAuthority,
|
|
1337
|
-
operationFingerprintDigest: args.operationFingerprintDigest,
|
|
1338
|
-
onEvent: args.onEvent,
|
|
1339
|
-
requestEmailOtpTransactionSigningChallenge: confirmedEmailOtpDeps.requestEmailOtpTransactionSigningChallenge
|
|
1340
|
-
}) : null;
|
|
1341
|
-
const signingIntent = SigningOperationIntent.TransactionSign;
|
|
1342
|
-
let plannedEcdsaSigningAuthPlan = null;
|
|
1343
|
-
let plannedSigningSessionPlan;
|
|
1344
|
-
if (reusableSessionEcdsaOperation) {
|
|
1345
|
-
const preparedOperation = reusableSessionEcdsaOperation;
|
|
1346
|
-
const signingSessionPlan = preparedOperation.signingSessionPlan;
|
|
1347
|
-
plannedSigningSessionPlan = signingSessionPlan;
|
|
1348
|
-
if (signingSessionPlan.kind === SigningSessionPlanKind.NotReady) throw new Error(`[SigningEngine] ECDSA signing session is not ready: ${signingSessionPlan.reason}`);
|
|
1349
|
-
plannedEcdsaSigningAuthPlan = signingAuthPlanFromSigningSessionPlan({
|
|
1350
|
-
plan: signingSessionPlan,
|
|
1351
|
-
accountId: String(walletId),
|
|
1352
|
-
intent: signingIntent,
|
|
1353
|
-
curve: "ecdsa",
|
|
1354
|
-
expiresAtMs: preparedOperation.expiresAtMs,
|
|
1355
|
-
remainingUses: preparedOperation.remainingUses
|
|
1356
|
-
});
|
|
1357
|
-
}
|
|
1358
|
-
const directAuthPlan = plannedEcdsaSigningAuthPlan ? null : await resolveDirectSigningAuthPlan();
|
|
1359
|
-
const signingAuthPlan = plannedEcdsaSigningAuthPlan || directAuthPlan.signingAuthPlan;
|
|
1360
|
-
const activeEmailOtpAuthBridge = directAuthPlan?.emailOtpAuthBridge || emailOtpAuthBridge;
|
|
1361
|
-
if (signingAuthPlan.kind !== SigningAuthPlanKind.EmailOtpReauth || !activeEmailOtpAuthBridge) return {
|
|
1362
|
-
signingAuthPlan,
|
|
1363
|
-
...plannedSigningSessionPlan ? { signingSessionPlan: plannedSigningSessionPlan } : {}
|
|
1364
|
-
};
|
|
1365
|
-
const prepareChallenge = async () => {
|
|
1366
|
-
const activeChallenge = await activeEmailOtpAuthBridge.challenge();
|
|
1367
|
-
return {
|
|
1368
|
-
challengeId: activeChallenge.challengeId,
|
|
1369
|
-
...activeChallenge.email ? { emailHint: activeChallenge.email } : {}
|
|
1370
|
-
};
|
|
1371
|
-
};
|
|
1372
|
-
return {
|
|
1373
|
-
signingAuthPlan,
|
|
1374
|
-
...plannedSigningSessionPlan ? { signingSessionPlan: plannedSigningSessionPlan } : {},
|
|
1375
|
-
emailOtpSigning: {
|
|
1376
|
-
prepare: prepareChallenge,
|
|
1377
|
-
resend: async () => {
|
|
1378
|
-
return await prepareChallenge();
|
|
1379
|
-
}
|
|
1380
|
-
}
|
|
1381
|
-
};
|
|
1382
|
-
async function resolveDirectSigningAuthPlan() {
|
|
1383
|
-
if (args.ecdsaAuthorization === "operation_step_up") {
|
|
1384
|
-
if (isPasskeyWalletAuthAuthority(args.capability.authority)) return { signingAuthPlan: {
|
|
1385
|
-
kind: SigningAuthPlanKind.PasskeyReauth,
|
|
1386
|
-
method: "passkey"
|
|
1387
|
-
} };
|
|
1388
|
-
if (isEmailOtpWalletAuthAuthority(args.capability.authority)) {
|
|
1389
|
-
if (!emailOtpAuthBridge) throw new Error("[SigningEngine] Email OTP step-up authority is unavailable for the selected capability");
|
|
1390
|
-
return {
|
|
1391
|
-
signingAuthPlan: {
|
|
1392
|
-
kind: SigningAuthPlanKind.EmailOtpReauth,
|
|
1393
|
-
method: "email_otp"
|
|
1394
|
-
},
|
|
1395
|
-
emailOtpAuthBridge
|
|
1396
|
-
};
|
|
1397
|
-
}
|
|
1398
|
-
args.capability.authority;
|
|
1399
|
-
}
|
|
1400
|
-
if (!(Array.isArray(args.accountAuth.linkedAuthMethods) ? args.accountAuth.linkedAuthMethods : []).includes(args.accountAuth.primaryAuthMethod)) throw new Error(`[SigningEngine] primary auth method is not linked: ${String(args.accountAuth.primaryAuthMethod || "")}`);
|
|
1401
|
-
if (args.accountAuth.primaryAuthMethod === SIGNER_AUTH_METHODS.passkey) return { signingAuthPlan: {
|
|
1402
|
-
kind: SigningAuthPlanKind.PasskeyReauth,
|
|
1403
|
-
method: "passkey"
|
|
1404
|
-
} };
|
|
1405
|
-
if (args.accountAuth.primaryAuthMethod === SIGNER_AUTH_METHODS.emailOtp) {
|
|
1406
|
-
if (!emailOtpAuthBridge) throw new Error("[SigningEngine] Email OTP transaction signing requires ECDSA lane state");
|
|
1407
|
-
return {
|
|
1408
|
-
signingAuthPlan: {
|
|
1409
|
-
kind: SigningAuthPlanKind.EmailOtpReauth,
|
|
1410
|
-
method: "email_otp"
|
|
1411
|
-
},
|
|
1412
|
-
emailOtpAuthBridge
|
|
1413
|
-
};
|
|
1414
|
-
}
|
|
1415
|
-
throw new Error(`[SigningEngine] unsupported primary auth method: ${String(args.accountAuth.primaryAuthMethod || "")}`);
|
|
1416
|
-
}
|
|
1417
|
-
}
|
|
1418
|
-
//#endregion
|
|
1419
|
-
//#region src/core/signingEngine/flows/signEvmFamily/ecdsaSelection.ts
|
|
1420
|
-
function ecdsaLaneCandidateAuthMethod(candidate) {
|
|
1421
|
-
switch (laneCandidateAuthMethod(candidate)) {
|
|
1422
|
-
case SIGNER_AUTH_METHODS.emailOtp: return SIGNER_AUTH_METHODS.emailOtp;
|
|
1423
|
-
case SIGNER_AUTH_METHODS.passkey: return SIGNER_AUTH_METHODS.passkey;
|
|
1424
|
-
}
|
|
1425
|
-
throw new Error("[SigningEngine][ecdsa] unsupported ECDSA lane auth method");
|
|
1426
|
-
}
|
|
1427
|
-
function walletAuthWithSelectedPrimary(accountAuth, authMethod) {
|
|
1428
|
-
return {
|
|
1429
|
-
...accountAuth,
|
|
1430
|
-
primaryAuthMethod: authMethod,
|
|
1431
|
-
linkedAuthMethods: Array.from(new Set([...accountAuth.linkedAuthMethods, authMethod]))
|
|
1432
|
-
};
|
|
1433
|
-
}
|
|
1434
|
-
function resolvedEvmFamilyEcdsaSigningLaneFromCandidate(candidate) {
|
|
1435
|
-
const buildLane = candidate.chainTarget.kind === "tempo" ? buildTempoTransactionSigningLane : buildEvmTransactionSigningLane;
|
|
1436
|
-
const base = {
|
|
1437
|
-
key: candidate.key,
|
|
1438
|
-
materialActivation: candidate.materialActivation,
|
|
1439
|
-
keyHandle: candidate.keyHandle,
|
|
1440
|
-
walletId: candidate.walletId,
|
|
1441
|
-
chainTarget: candidate.chainTarget,
|
|
1442
|
-
authorization: candidate.authorization
|
|
1443
|
-
};
|
|
1444
|
-
return requireResolvedEvmFamilyEcdsaSigningLane({
|
|
1445
|
-
lane: buildLane(candidate.auth.kind === "email_otp" ? {
|
|
1446
|
-
...base,
|
|
1447
|
-
auth: candidate.auth,
|
|
1448
|
-
retention: "session",
|
|
1449
|
-
sessionOrigin: "per_operation"
|
|
1450
|
-
} : {
|
|
1451
|
-
...base,
|
|
1452
|
-
auth: candidate.auth,
|
|
1453
|
-
storageSource: "manual-bootstrap"
|
|
1454
|
-
}),
|
|
1455
|
-
chain: candidate.chain,
|
|
1456
|
-
context: "build exact ECDSA candidate signing lane"
|
|
1457
|
-
});
|
|
1458
|
-
}
|
|
1459
|
-
function laneCandidateDiagnosticsBase(candidate) {
|
|
1460
|
-
return {
|
|
1461
|
-
authMethod: ecdsaLaneCandidateAuthMethod(candidate),
|
|
1462
|
-
chain: candidate.chain,
|
|
1463
|
-
chainTarget: candidate.chainTarget,
|
|
1464
|
-
state: candidate.state,
|
|
1465
|
-
walletSessionId: candidate.authorization.operationCredential.walletSessionId,
|
|
1466
|
-
materialActivationId: candidate.materialActivation.activationId,
|
|
1467
|
-
remainingUses: candidate.authorization.runtime.remainingUses,
|
|
1468
|
-
expiresAtMs: candidate.authorization.runtime.expiresAtMs
|
|
1469
|
-
};
|
|
1470
|
-
}
|
|
1471
|
-
function summarizeLaneCandidate(candidate) {
|
|
1472
|
-
return {
|
|
1473
|
-
...laneCandidateDiagnosticsBase(candidate),
|
|
1474
|
-
source: "canonical_capability"
|
|
1475
|
-
};
|
|
1476
|
-
}
|
|
1477
|
-
function isExactEmailOtpAuthorization(authorization) {
|
|
1478
|
-
return authorization.selectedAuthMethod.kind === "email_otp" && authorization.runtime.authBinding.kind === "email_otp";
|
|
1479
|
-
}
|
|
1480
|
-
function isExactDirectEmailOtpAuthorization(authorization) {
|
|
1481
|
-
return authorization.runtime.kind === "exact_ecdsa_direct_capability_runtime_v1";
|
|
1482
|
-
}
|
|
1483
|
-
function isExactSealedEmailOtpAuthorization(authorization) {
|
|
1484
|
-
return authorization.runtime.kind === "exact_ecdsa_sealed_runtime_v1";
|
|
1485
|
-
}
|
|
1486
|
-
function requirePasskeyEcdsaLaneCandidate(candidate) {
|
|
1487
|
-
if (candidate.auth.kind !== "passkey") throw new Error("[SigningEngine][ecdsa] passkey committed lane requires passkey candidate");
|
|
1488
|
-
return {
|
|
1489
|
-
...candidate,
|
|
1490
|
-
auth: candidate.auth
|
|
1491
|
-
};
|
|
1492
|
-
}
|
|
1493
|
-
function assertEcdsaCommittedLaneAuthorityMatchesWallet(args) {
|
|
1494
|
-
const authorityWalletId = String(args.authority.walletId);
|
|
1495
|
-
if (String(args.lane.key.walletId) === authorityWalletId && String(args.candidate.walletId) === authorityWalletId) return;
|
|
1496
|
-
throw new Error(`[SigningEngine][ecdsa] ${args.context} committed lane authority wallet mismatch`);
|
|
1497
|
-
}
|
|
1498
|
-
function buildEcdsaSelectionDiagnostics(args) {
|
|
1499
|
-
return { selectedLaneCandidate: summarizeLaneCandidate(args.candidate) };
|
|
1500
|
-
}
|
|
1501
|
-
async function commitPasskeyEcdsaLaneForSelection(args) {
|
|
1502
|
-
const candidate = requirePasskeyEcdsaLaneCandidate(args.candidate);
|
|
1503
|
-
const authority = (await args.deps.resolveCanonicalEcdsaSigningCapability({
|
|
1504
|
-
walletId: candidate.walletId,
|
|
1505
|
-
chainTarget: candidate.chainTarget,
|
|
1506
|
-
materialActivation: candidate.materialActivation
|
|
1507
|
-
})).authority;
|
|
1508
|
-
if (!isPasskeyWalletAuthAuthority(authority) || String(authority.verifier.rpId) !== String(candidate.auth.rpId) || authority.factor.credentialIdB64u !== candidate.auth.credentialIdB64u) throw new Error("[SigningEngine][ecdsa] exact Passkey capability authority changed");
|
|
1509
|
-
assertEcdsaCommittedLaneAuthorityMatchesWallet({
|
|
1510
|
-
authority,
|
|
1511
|
-
lane: args.lane,
|
|
1512
|
-
candidate,
|
|
1513
|
-
context: "Passkey"
|
|
1514
|
-
});
|
|
1515
|
-
return {
|
|
1516
|
-
lane: args.lane,
|
|
1517
|
-
authority,
|
|
1518
|
-
authorization: args.lane.authorization
|
|
1519
|
-
};
|
|
1520
|
-
}
|
|
1521
|
-
async function resolveEmailOtpAuthorityForSelection(args) {
|
|
1522
|
-
const exactLane = exactEcdsaSigningLaneIdentityFromSelectedLane(args.lane);
|
|
1523
|
-
const laneAuthority = await args.deps.resolveDurableEmailOtpEcdsaSigningSessionAuthority({
|
|
1524
|
-
lane: exactLane,
|
|
1525
|
-
chain: args.lane.chainTarget.kind
|
|
1526
|
-
});
|
|
1527
|
-
if (laneAuthority) {
|
|
1528
|
-
if (!isExactEmailOtpAuthorization(laneAuthority)) return null;
|
|
1529
|
-
return {
|
|
1530
|
-
kind: "durable_authority_backed",
|
|
1531
|
-
authorization: laneAuthority
|
|
1532
|
-
};
|
|
1533
|
-
}
|
|
1534
|
-
logEvmFamilyEcdsaLaneDiagnostic("Email OTP exact ECDSA authority not found", {
|
|
1535
|
-
lane: summarizeEvmFamilyEcdsaLane(args.lane),
|
|
1536
|
-
candidate: summarizeLaneCandidate(args.candidate)
|
|
1537
|
-
});
|
|
1538
|
-
return null;
|
|
1539
|
-
}
|
|
1540
|
-
function requireEmailOtpSelectionAuthority(args) {
|
|
1541
|
-
if (args.authority) return args.authority;
|
|
1542
|
-
logEvmFamilyEcdsaLaneDiagnostic("Email OTP exact ECDSA signing-session authority missing", {
|
|
1543
|
-
lane: summarizeEvmFamilyEcdsaLane(args.lane),
|
|
1544
|
-
candidate: summarizeLaneCandidate(args.candidate)
|
|
1545
|
-
});
|
|
1546
|
-
throw new Error("Email OTP ECDSA committed lane is missing wallet-session authority; unlock wallet again");
|
|
1547
|
-
}
|
|
1548
|
-
function requireEmailOtpEcdsaSigningSessionAuthLane(args) {
|
|
1549
|
-
const authLane = emailOtpEcdsaSigningSessionAuthLane(args.authority.authorization);
|
|
1550
|
-
if (authLane.kind === "signing_session" && authLane.curve === "ecdsa" && thresholdEcdsaChainTargetsEqual(authLane.chainTarget, args.lane.chainTarget)) return authLane;
|
|
1551
|
-
logEvmFamilyEcdsaLaneDiagnostic("Email OTP ECDSA committed lane rejected for authority shape", {
|
|
1552
|
-
authorityKind: authLane.kind,
|
|
1553
|
-
authorityCurve: authLane.kind === "signing_session" ? authLane.curve : null,
|
|
1554
|
-
lane: summarizeEvmFamilyEcdsaLane(args.lane),
|
|
1555
|
-
candidate: summarizeLaneCandidate(args.candidate)
|
|
1556
|
-
});
|
|
1557
|
-
throw new Error("Email OTP ECDSA committed lane authority is not an ECDSA signing session; unlock wallet again");
|
|
1558
|
-
}
|
|
1559
|
-
function requireCommittedLaneForReady(args) {
|
|
1560
|
-
if (args.committedLane && args.committedLane.authority.factor.kind === args.expectedFactor) return args.committedLane;
|
|
1561
|
-
logEvmFamilyEcdsaLaneDiagnostic("ECDSA committed lane missing for ready signing", {
|
|
1562
|
-
expectedFactor: args.expectedFactor,
|
|
1563
|
-
lane: summarizeEvmFamilyEcdsaLane(args.lane),
|
|
1564
|
-
candidate: summarizeLaneCandidate(args.candidate)
|
|
1565
|
-
});
|
|
1566
|
-
throw new Error("[SigningEngine][ecdsa] committed lane is unavailable for ready signing");
|
|
1567
|
-
}
|
|
1568
|
-
function commitEmailOtpEcdsaLaneForSelection(args) {
|
|
1569
|
-
const authorization = args.authority.authorization;
|
|
1570
|
-
if (authorization.runtime.authBinding.kind !== "email_otp") throw new Error("[SigningEngine][ecdsa] Email OTP authority runtime binding is invalid");
|
|
1571
|
-
const authority = authorization.runtime.authBinding.emailOtpAuthority;
|
|
1572
|
-
assertEcdsaCommittedLaneAuthorityMatchesWallet({
|
|
1573
|
-
authority,
|
|
1574
|
-
lane: args.lane,
|
|
1575
|
-
candidate: args.candidate,
|
|
1576
|
-
context: "Email OTP"
|
|
1577
|
-
});
|
|
1578
|
-
if (isExactDirectEmailOtpAuthorization(authorization)) return {
|
|
1579
|
-
lane: args.lane,
|
|
1580
|
-
authority,
|
|
1581
|
-
authorization
|
|
1582
|
-
};
|
|
1583
|
-
if (isExactSealedEmailOtpAuthorization(authorization)) return {
|
|
1584
|
-
lane: args.lane,
|
|
1585
|
-
authority,
|
|
1586
|
-
authorization,
|
|
1587
|
-
authLane: requireEmailOtpEcdsaSigningSessionAuthLane({
|
|
1588
|
-
authority: args.authority,
|
|
1589
|
-
lane: args.lane,
|
|
1590
|
-
candidate: args.candidate
|
|
1591
|
-
})
|
|
1592
|
-
};
|
|
1593
|
-
throw new Error("[SigningEngine][ecdsa] Email OTP authorization runtime is unsupported");
|
|
1594
|
-
}
|
|
1595
|
-
async function resolveEvmFamilyEcdsaSigningSelection(args) {
|
|
1596
|
-
const lane = resolvedEvmFamilyEcdsaSigningLaneFromCandidate(args.laneCandidate);
|
|
1597
|
-
const emailOtpAuthorityLane = lane;
|
|
1598
|
-
const candidateAuthMethod = ecdsaLaneCandidateAuthMethod(args.laneCandidate);
|
|
1599
|
-
const emailOtpAuthority = candidateAuthMethod === SIGNER_AUTH_METHODS.emailOtp ? await resolveEmailOtpAuthorityForSelection({
|
|
1600
|
-
deps: args.deps,
|
|
1601
|
-
lane: emailOtpAuthorityLane,
|
|
1602
|
-
candidate: args.laneCandidate
|
|
1603
|
-
}) : null;
|
|
1604
|
-
const requiredEmailOtpAuthority = candidateAuthMethod === SIGNER_AUTH_METHODS.emailOtp ? requireEmailOtpSelectionAuthority({
|
|
1605
|
-
authority: emailOtpAuthority,
|
|
1606
|
-
lane: emailOtpAuthorityLane,
|
|
1607
|
-
candidate: args.laneCandidate
|
|
1608
|
-
}) : null;
|
|
1609
|
-
const committedEmailOtpLane = candidateAuthMethod === SIGNER_AUTH_METHODS.emailOtp && requiredEmailOtpAuthority ? commitEmailOtpEcdsaLaneForSelection({
|
|
1610
|
-
authority: requiredEmailOtpAuthority,
|
|
1611
|
-
lane: emailOtpAuthorityLane,
|
|
1612
|
-
candidate: args.laneCandidate
|
|
1613
|
-
}) : null;
|
|
1614
|
-
const committedPasskeyLane = candidateAuthMethod === SIGNER_AUTH_METHODS.passkey ? await commitPasskeyEcdsaLaneForSelection({
|
|
1615
|
-
deps: args.deps,
|
|
1616
|
-
lane,
|
|
1617
|
-
candidate: args.laneCandidate
|
|
1618
|
-
}) : null;
|
|
1619
|
-
const committedLane = committedEmailOtpLane ?? committedPasskeyLane;
|
|
1620
|
-
const committedFactor = committedLane?.authority.factor.kind;
|
|
1621
|
-
const selectedAccountAuth = walletAuthWithSelectedPrimary(await resolveEvmFamilyTransactionWalletAuth({
|
|
1622
|
-
senderSignatureAlgorithm: args.senderSignatureAlgorithm,
|
|
1623
|
-
signerAuthMethod: committedFactor ?? candidateAuthMethod
|
|
1624
|
-
}), candidateAuthMethod);
|
|
1625
|
-
const diagnostics = buildEcdsaSelectionDiagnostics({ candidate: args.laneCandidate });
|
|
1626
|
-
return {
|
|
1627
|
-
kind: "ready",
|
|
1628
|
-
accountAuth: selectedAccountAuth,
|
|
1629
|
-
lane,
|
|
1630
|
-
committedLane: requireCommittedLaneForReady({
|
|
1631
|
-
committedLane,
|
|
1632
|
-
expectedFactor: candidateAuthMethod,
|
|
1633
|
-
lane,
|
|
1634
|
-
candidate: args.laneCandidate
|
|
1635
|
-
}),
|
|
1636
|
-
diagnostics
|
|
1637
|
-
};
|
|
1638
|
-
}
|
|
1639
|
-
//#endregion
|
|
1640
|
-
//#region src/core/signingEngine/flows/signEvmFamily/preparedSigning.ts
|
|
1641
|
-
function buildEvmFamilyTransactionSigningIntent(args) {
|
|
1642
|
-
const base = {
|
|
1643
|
-
walletId: args.walletId,
|
|
1644
|
-
curve: "ecdsa",
|
|
1645
|
-
authSelectionPolicy: args.authSelectionPolicy,
|
|
1646
|
-
operationUsesNeeded: args.operationUsesNeeded,
|
|
1647
|
-
...args.operationId ? { operationId: args.operationId } : {}
|
|
1648
|
-
};
|
|
1649
|
-
return args.signingTarget.kind === "tempo" ? {
|
|
1650
|
-
...base,
|
|
1651
|
-
chain: "tempo",
|
|
1652
|
-
chainTarget: args.signingTarget
|
|
1653
|
-
} : {
|
|
1654
|
-
...base,
|
|
1655
|
-
chain: "evm",
|
|
1656
|
-
chainTarget: args.signingTarget
|
|
1657
|
-
};
|
|
1658
|
-
}
|
|
1659
|
-
function resolveEvmFamilyTransactionAuthSelectionPolicy(args) {
|
|
1660
|
-
return {
|
|
1661
|
-
kind: "account_class",
|
|
1662
|
-
authMethod: args.candidateAuthMethod
|
|
1663
|
-
};
|
|
1664
|
-
}
|
|
1665
|
-
function requireSingleConcreteAuthMethodForEcdsaTarget(args) {
|
|
1666
|
-
const authMethods = /* @__PURE__ */ new Set();
|
|
1667
|
-
for (const lane of ecdsaAvailableLaneCandidatesForTarget(args.availableLanes, args.signingTarget)) {
|
|
1668
|
-
if (!isConcreteAvailableSigningLane(lane)) continue;
|
|
1669
|
-
if (!thresholdEcdsaChainTargetsEqual(lane.chainTarget, args.signingTarget)) continue;
|
|
1670
|
-
authMethods.add(availableEcdsaSigningLaneAuthMethod(lane));
|
|
1671
|
-
}
|
|
1672
|
-
if (authMethods.size !== 1) throw new Error("[SigningEngine][ecdsa] exact capability authority is unavailable or ambiguous");
|
|
1673
|
-
return Array.from(authMethods)[0];
|
|
1674
|
-
}
|
|
1675
|
-
function summarizeEcdsaAvailableLane(lane) {
|
|
1676
|
-
if (!lane) return { present: false };
|
|
1677
|
-
if (!isConcreteAvailableSigningLane(lane)) return {
|
|
1678
|
-
present: true,
|
|
1679
|
-
curve: lane.curve,
|
|
1680
|
-
chain: lane.chainTarget.kind,
|
|
1681
|
-
chainTarget: lane.chainTarget,
|
|
1682
|
-
state: lane.state
|
|
1683
|
-
};
|
|
1684
|
-
const evmFamilyKeyFingerprint = deriveEvmFamilyKeyFingerprintFromPublicFacts({
|
|
1685
|
-
walletId: lane.key.walletId,
|
|
1686
|
-
publicFacts: lane.publicFacts
|
|
1687
|
-
});
|
|
1688
|
-
return {
|
|
1689
|
-
present: true,
|
|
1690
|
-
authMethod: availableEcdsaSigningLaneAuthMethod(lane),
|
|
1691
|
-
curve: lane.curve,
|
|
1692
|
-
chain: lane.chainTarget?.kind,
|
|
1693
|
-
chainTarget: lane.chainTarget,
|
|
1694
|
-
...evmFamilyKeyFingerprint ? { evmFamilyKeyFingerprint } : {},
|
|
1695
|
-
state: lane.state,
|
|
1696
|
-
source: lane.source,
|
|
1697
|
-
walletSessionId: lane.authorization?.operationCredential.walletSessionId,
|
|
1698
|
-
materialActivationId: lane.materialActivation.activationId,
|
|
1699
|
-
remainingUses: lane.remainingUses,
|
|
1700
|
-
expiresAtMs: lane.expiresAtMs
|
|
1701
|
-
};
|
|
1702
|
-
}
|
|
1703
|
-
function summarizeEcdsaAvailableCandidatesByTarget(availableLanes) {
|
|
1704
|
-
return Object.fromEntries(Object.entries(availableLanes.ecdsa.candidatesByTarget).map(([targetKey, candidates]) => [targetKey, candidates.map((candidate) => summarizeEcdsaAvailableLane(candidate))]));
|
|
1705
|
-
}
|
|
1706
|
-
function emitVisibleEcdsaLaneDiagnostic(label, payload) {
|
|
1707
|
-
try {
|
|
1708
|
-
console.warn(label, JSON.stringify(payload, null, 2));
|
|
1709
|
-
} catch {
|
|
1710
|
-
try {
|
|
1711
|
-
console.warn(label, payload);
|
|
1712
|
-
} catch {}
|
|
1713
|
-
}
|
|
1714
|
-
}
|
|
1715
|
-
function summarizeEcdsaSelectedLanesByTarget(availableLanes) {
|
|
1716
|
-
return Object.fromEntries(Object.entries(availableLanes.ecdsa.lanesByTarget).map(([targetKey, lane]) => [targetKey, summarizeEcdsaAvailableLane(lane)]));
|
|
1717
|
-
}
|
|
1718
|
-
function summarizeEcdsaLaneCandidate(candidate) {
|
|
1719
|
-
if (!candidate) return { present: false };
|
|
1720
|
-
return {
|
|
1721
|
-
present: true,
|
|
1722
|
-
authMethod: laneCandidateAuthMethod(candidate),
|
|
1723
|
-
curve: candidate.curve,
|
|
1724
|
-
chain: candidate.chainTarget.kind,
|
|
1725
|
-
chainTarget: candidate.chainTarget,
|
|
1726
|
-
state: candidate.state,
|
|
1727
|
-
source: candidate.source,
|
|
1728
|
-
materialActivationId: candidate.materialActivation.activationId,
|
|
1729
|
-
authorizationState: candidate.authorizationState,
|
|
1730
|
-
...candidate.authorizationState === "authorized" ? {
|
|
1731
|
-
walletSessionId: candidate.authorization.operationCredential.walletSessionId,
|
|
1732
|
-
remainingUses: candidate.authorization.runtime.remainingUses,
|
|
1733
|
-
expiresAtMs: candidate.authorization.runtime.expiresAtMs
|
|
1734
|
-
} : {}
|
|
1735
|
-
};
|
|
1736
|
-
}
|
|
1737
|
-
function exactEcdsaAuthorizationIdentityMatches(left, right) {
|
|
1738
|
-
const leftSession = left.session;
|
|
1739
|
-
const rightSession = right.session;
|
|
1740
|
-
return left.selectedAuthority.authorityId === right.selectedAuthority.authorityId && left.selectedAuthMethod.kind === right.selectedAuthMethod.kind && left.selectedAuthMethod.walletAuthMethodId === right.selectedAuthMethod.walletAuthMethodId && leftSession.walletId === rightSession.walletId && leftSession.authorityId === rightSession.authorityId && leftSession.authMethodId === rightSession.authMethodId && leftSession.authorizationId === rightSession.authorizationId && leftSession.quotaId === rightSession.quotaId && leftSession.authorityDigestB64u === rightSession.authorityDigestB64u && leftSession.authorityRevocationEpoch === rightSession.authorityRevocationEpoch && left.operationCredential.walletSessionId === right.operationCredential.walletSessionId && left.operationCredential.token === right.operationCredential.token && exactEcdsaWalletSessionRuntimesMatch(left.runtime, right.runtime);
|
|
1741
|
-
}
|
|
1742
|
-
function assertSelectionMatchesLaneCandidate(args) {
|
|
1743
|
-
const candidate = args.candidate;
|
|
1744
|
-
const candidateAuthMethod = laneCandidateAuthMethod(candidate);
|
|
1745
|
-
const committedAuthMethod = args.selection.committedLane.authority.factor.kind;
|
|
1746
|
-
if (candidateAuthMethod !== committedAuthMethod) throw new Error(`[SigningEngine][ecdsa] prepared auth method ${candidateAuthMethod} did not match committed lane auth method ${committedAuthMethod}`);
|
|
1747
|
-
const selectionLaneAuthMethod = signingLaneAuthMethod(args.selection.lane.auth);
|
|
1748
|
-
if (selectionLaneAuthMethod !== committedAuthMethod) throw new Error(`[SigningEngine][ecdsa] selected lane auth method ${selectionLaneAuthMethod} did not match committed lane auth method ${committedAuthMethod}`);
|
|
1749
|
-
if (!exactEcdsaAuthorizationIdentityMatches(candidate.authorization, args.selection.lane.authorization)) throw new Error("[SigningEngine][ecdsa] prepared authorization did not match lane");
|
|
1750
|
-
if (exactSigningLaneIdentityKey(exactEcdsaSigningLaneIdentityFromSelectedLane(args.selection.committedLane.lane)) !== exactSigningLaneIdentityKey(exactEcdsaSigningLaneIdentityFromSelectedLane(args.selection.lane))) throw new Error("[SigningEngine][ecdsa] committed lane did not match selected lane");
|
|
1751
|
-
}
|
|
1752
|
-
function readinessFromSelection(selection) {
|
|
1753
|
-
const candidateState = selection.diagnostics.selectedLaneCandidate.state;
|
|
1754
|
-
const { expiresAtMs, remainingUses } = selection.lane.authorization.runtime;
|
|
1755
|
-
if (candidateState === "expired") return {
|
|
1756
|
-
readiness: {
|
|
1757
|
-
status: "expired",
|
|
1758
|
-
curve: "ecdsa",
|
|
1759
|
-
materialActivation: selection.lane.materialActivation,
|
|
1760
|
-
authorization: selection.lane.authorization,
|
|
1761
|
-
expiresAtMs
|
|
1762
|
-
},
|
|
1763
|
-
expiresAtMs,
|
|
1764
|
-
remainingUses
|
|
1765
|
-
};
|
|
1766
|
-
if (candidateState === "exhausted") return {
|
|
1767
|
-
readiness: {
|
|
1768
|
-
status: "exhausted",
|
|
1769
|
-
curve: "ecdsa",
|
|
1770
|
-
materialActivation: selection.lane.materialActivation,
|
|
1771
|
-
authorization: selection.lane.authorization,
|
|
1772
|
-
expiresAtMs,
|
|
1773
|
-
remainingUses
|
|
1774
|
-
},
|
|
1775
|
-
expiresAtMs,
|
|
1776
|
-
remainingUses
|
|
1777
|
-
};
|
|
1778
|
-
return {
|
|
1779
|
-
readiness: {
|
|
1780
|
-
status: "ready",
|
|
1781
|
-
curve: "ecdsa",
|
|
1782
|
-
materialActivation: selection.lane.materialActivation,
|
|
1783
|
-
authorization: selection.lane.authorization,
|
|
1784
|
-
expiresAtMs,
|
|
1785
|
-
remainingUses
|
|
1786
|
-
},
|
|
1787
|
-
expiresAtMs,
|
|
1788
|
-
remainingUses
|
|
1789
|
-
};
|
|
1790
|
-
}
|
|
1791
|
-
function assertPreparedMaterialBindingMatchesOperation(args) {
|
|
1792
|
-
const operation = args.preparedOperation.operation;
|
|
1793
|
-
if (!operation) throw new Error("[SigningEngine][ecdsa] prepared material requires an operation identity");
|
|
1794
|
-
if (args.metadata.materialBinding.operationId !== operation.operationId) throw new Error("[SigningEngine][ecdsa] prepared material operation identity mismatch");
|
|
1795
|
-
if (args.metadata.materialBinding.operationFingerprint && operation.operationFingerprint && args.metadata.materialBinding.operationFingerprint !== operation.operationFingerprint) throw new Error("[SigningEngine][ecdsa] prepared material fingerprint mismatch");
|
|
1796
|
-
const laneIdentityKey = exactSigningLaneIdentityKey(exactSigningLaneIdentityFromSelectedLane(args.preparedOperation.lane));
|
|
1797
|
-
if (args.metadata.materialBinding.laneIdentityKey !== laneIdentityKey) throw new Error("[SigningEngine][ecdsa] prepared material lane identity mismatch");
|
|
1798
|
-
}
|
|
1799
|
-
async function prepareEvmFamilyEcdsaSigningSession(args) {
|
|
1800
|
-
const chainTarget = args.signingTarget;
|
|
1801
|
-
const chain = chainTarget.kind;
|
|
1802
|
-
const walletId = toWalletId(args.walletSession.walletId);
|
|
1803
|
-
const ownerScope = await args.deps.resolveOwnerLaneScope(walletId);
|
|
1804
|
-
const candidateAvailableLanes = await args.deps.readAvailableSigningLanesForSigning({
|
|
1805
|
-
walletId,
|
|
1806
|
-
curve: "ecdsa",
|
|
1807
|
-
ecdsaChainTargets: [chainTarget],
|
|
1808
|
-
ownerScope
|
|
1809
|
-
});
|
|
1810
|
-
const laneReadDiagnostic = {
|
|
1811
|
-
walletId,
|
|
1812
|
-
chain,
|
|
1813
|
-
chainTarget,
|
|
1814
|
-
targetKey: thresholdEcdsaChainTargetKey(chainTarget),
|
|
1815
|
-
candidateCount: ecdsaAvailableLaneCandidatesForTarget(candidateAvailableLanes, chainTarget).length,
|
|
1816
|
-
selectedLanesByTarget: summarizeEcdsaSelectedLanesByTarget(candidateAvailableLanes),
|
|
1817
|
-
candidatesByTarget: summarizeEcdsaAvailableCandidatesByTarget(candidateAvailableLanes)
|
|
1818
|
-
};
|
|
1819
|
-
if (laneReadDiagnostic.candidateCount === 0) emitVisibleEcdsaLaneDiagnostic("[ECDSA_LANE_READ_DIAGNOSTIC][no-candidates]", laneReadDiagnostic);
|
|
1820
|
-
emitSigningSessionFlowTrace("evm-family", {
|
|
1821
|
-
stage: "ecdsa_prepare.available_lanes_read",
|
|
1822
|
-
...laneReadDiagnostic
|
|
1823
|
-
});
|
|
1824
|
-
const candidateAuthMethod = requireSingleConcreteAuthMethodForEcdsaTarget({
|
|
1825
|
-
availableLanes: candidateAvailableLanes,
|
|
1826
|
-
signingTarget: args.signingTarget
|
|
1827
|
-
});
|
|
1828
|
-
const transactionIntent = buildEvmFamilyTransactionSigningIntent({
|
|
1829
|
-
walletId,
|
|
1830
|
-
authSelectionPolicy: resolveEvmFamilyTransactionAuthSelectionPolicy({ candidateAuthMethod }),
|
|
1831
|
-
operationUsesNeeded: 1,
|
|
1832
|
-
signingTarget: args.signingTarget,
|
|
1833
|
-
...args.signingOperation.operationId ? { operationId: args.signingOperation.operationId } : {}
|
|
1834
|
-
});
|
|
1835
|
-
const materialSelection = selectEvmFamilyEcdsaMaterialCandidate({
|
|
1836
|
-
intent: transactionIntent,
|
|
1837
|
-
availableLanes: candidateAvailableLanes
|
|
1838
|
-
});
|
|
1839
|
-
emitSigningSessionFlowTrace("evm-family", {
|
|
1840
|
-
stage: "ecdsa_prepare.material_candidate_selected",
|
|
1841
|
-
walletId,
|
|
1842
|
-
chain,
|
|
1843
|
-
chainTarget,
|
|
1844
|
-
primaryAuthMethod: materialSelection.ok ? laneCandidateAuthMethod(materialSelection.candidate) : candidateAuthMethod,
|
|
1845
|
-
selectionOk: materialSelection.ok,
|
|
1846
|
-
...materialSelection.ok ? {
|
|
1847
|
-
authorizationState: materialSelection.kind,
|
|
1848
|
-
selectedAvailableLane: summarizeEcdsaAvailableLane(materialSelection.availableLane),
|
|
1849
|
-
selectedLaneCandidate: summarizeEcdsaLaneCandidate(materialSelection.candidate),
|
|
1850
|
-
...materialSelection.kind === "authorized" ? { transactionLane: materialSelection.lane } : {}
|
|
1851
|
-
} : { failure: materialSelection.failure }
|
|
1852
|
-
});
|
|
1853
|
-
if (!materialSelection.ok) {
|
|
1854
|
-
const noMaterialDiagnostic = {
|
|
1855
|
-
stage: "ecdsa_prepare.exact_material_candidate_missing",
|
|
1856
|
-
walletId,
|
|
1857
|
-
chain,
|
|
1858
|
-
chainTarget,
|
|
1859
|
-
targetKey: thresholdEcdsaChainTargetKey(chainTarget),
|
|
1860
|
-
primaryAuthMethod: candidateAuthMethod,
|
|
1861
|
-
candidateCount: laneReadDiagnostic.candidateCount,
|
|
1862
|
-
ecdsaTargets: candidateAvailableLanes.ecdsa.targets,
|
|
1863
|
-
selectedLanesByTarget: laneReadDiagnostic.selectedLanesByTarget,
|
|
1864
|
-
candidatesByTarget: laneReadDiagnostic.candidatesByTarget,
|
|
1865
|
-
selectionFailure: materialSelection.failure
|
|
1866
|
-
};
|
|
1867
|
-
emitVisibleEcdsaLaneDiagnostic("[ECDSA_NO_LANE_DIAGNOSTIC]", noMaterialDiagnostic);
|
|
1868
|
-
emitSigningSessionFlowFailure("evm-family", noMaterialDiagnostic);
|
|
1869
|
-
throw new Error(`[SigningEngine][ecdsa] transaction signing requires exact ECDSA material for ${chain}`);
|
|
1870
|
-
}
|
|
1871
|
-
if (materialSelection.kind === "authorization_required") {
|
|
1872
|
-
const candidate = materialSelection.candidate;
|
|
1873
|
-
args.diagnostics.selection = {
|
|
1874
|
-
kind: "authorization_required",
|
|
1875
|
-
authMethod: availableEcdsaSigningLaneAuthMethod(materialSelection.availableLane),
|
|
1876
|
-
candidate: summarizeEcdsaLaneCandidate(candidate)
|
|
1877
|
-
};
|
|
1878
|
-
return {
|
|
1879
|
-
kind: "authorization_required",
|
|
1880
|
-
authMethod: availableEcdsaSigningLaneAuthMethod(materialSelection.availableLane),
|
|
1881
|
-
availableLanesGeneration: candidateAvailableLanes.generation,
|
|
1882
|
-
identity: exactEcdsaSigningLaneIdentity({
|
|
1883
|
-
signer: buildEvmFamilyEcdsaSignerBinding({
|
|
1884
|
-
walletId: candidate.walletId,
|
|
1885
|
-
chainTarget: candidate.chainTarget,
|
|
1886
|
-
keyHandle: candidate.keyHandle,
|
|
1887
|
-
key: candidate.key,
|
|
1888
|
-
materialActivation: candidate.materialActivation
|
|
1889
|
-
}),
|
|
1890
|
-
auth: candidate.auth
|
|
1891
|
-
}),
|
|
1892
|
-
candidate,
|
|
1893
|
-
intent: transactionIntent
|
|
1894
|
-
};
|
|
1895
|
-
}
|
|
1896
|
-
const laneCandidate = materialSelection.candidate;
|
|
1897
|
-
const transactionLane = materialSelection.lane;
|
|
1898
|
-
const preparedTransaction = await prepareTransactionSigningOperation({
|
|
1899
|
-
intent: transactionIntent,
|
|
1900
|
-
coordinator: args.signingSessionCoordinator,
|
|
1901
|
-
operation: args.signingOperation,
|
|
1902
|
-
forceFreshAuth: args.forceFreshAuth === true,
|
|
1903
|
-
missingWhenExpiresAtMissing: true,
|
|
1904
|
-
onPlannerTrace: (event) => emitSigningPlannerDecisionTrace("evm-family", event),
|
|
1905
|
-
lifecycleAdapter: { prepare: async () => {
|
|
1906
|
-
const selection = await resolveEvmFamilyEcdsaSigningSelection({
|
|
1907
|
-
deps: args.deps,
|
|
1908
|
-
walletId,
|
|
1909
|
-
chainTarget,
|
|
1910
|
-
senderSignatureAlgorithm: "secp256k1",
|
|
1911
|
-
laneCandidate
|
|
1912
|
-
});
|
|
1913
|
-
emitSigningSessionFlowTrace("evm-family", {
|
|
1914
|
-
stage: "ecdsa_prepare.material_selected",
|
|
1915
|
-
walletId,
|
|
1916
|
-
chain,
|
|
1917
|
-
chainTarget,
|
|
1918
|
-
selectionKind: selection.kind,
|
|
1919
|
-
authMethod: selection.committedLane.authority.factor.kind,
|
|
1920
|
-
lane: summarizeEvmFamilyEcdsaLane(selection.lane),
|
|
1921
|
-
diagnostics: selection.diagnostics
|
|
1922
|
-
});
|
|
1923
|
-
const committedSelectionAuthMethod = selection.committedLane.authority.factor.kind;
|
|
1924
|
-
const availableLanes = await args.deps.readAvailableSigningLanesForSigning({
|
|
1925
|
-
walletId,
|
|
1926
|
-
curve: "ecdsa",
|
|
1927
|
-
ecdsaChainTargets: [chainTarget],
|
|
1928
|
-
authMethod: committedSelectionAuthMethod,
|
|
1929
|
-
ownerScope
|
|
1930
|
-
});
|
|
1931
|
-
emitSigningLaneResolutionTrace("evm-family", selection.lane, { reason: "evm_family_ecdsa_selection" });
|
|
1932
|
-
args.diagnostics.selection = {
|
|
1933
|
-
kind: selection.kind,
|
|
1934
|
-
authMethod: committedSelectionAuthMethod,
|
|
1935
|
-
lane: summarizeEvmFamilyEcdsaLane(selection.lane),
|
|
1936
|
-
diagnostics: selection.diagnostics
|
|
1937
|
-
};
|
|
1938
|
-
const resolvedLane = requireResolvedEvmFamilyEcdsaSigningLane({
|
|
1939
|
-
lane: selection.lane,
|
|
1940
|
-
chain,
|
|
1941
|
-
context: "EVM-family signing preparation",
|
|
1942
|
-
diagnostics: args.diagnostics
|
|
1943
|
-
});
|
|
1944
|
-
assertSelectionMatchesLaneCandidate({
|
|
1945
|
-
candidate: laneCandidate,
|
|
1946
|
-
selection
|
|
1947
|
-
});
|
|
1948
|
-
const readiness = readinessFromSelection(selection);
|
|
1949
|
-
emitSigningSessionFlowTrace("evm-family", {
|
|
1950
|
-
stage: "ecdsa_prepare.readiness",
|
|
1951
|
-
walletId,
|
|
1952
|
-
chain,
|
|
1953
|
-
chainTarget,
|
|
1954
|
-
authMethod: committedSelectionAuthMethod,
|
|
1955
|
-
lane: summarizeEvmFamilyEcdsaLane(resolvedLane),
|
|
1956
|
-
readinessStatus: readiness.readiness.status
|
|
1957
|
-
});
|
|
1958
|
-
emitSigningBoundaryTrace("evm-family", createSigningBoundaryTraceEvent({
|
|
1959
|
-
event: "pre_confirm_readiness_checked",
|
|
1960
|
-
lane: resolvedLane,
|
|
1961
|
-
readinessStatus: readiness.readiness.status,
|
|
1962
|
-
phase: "pre_confirm"
|
|
1963
|
-
}));
|
|
1964
|
-
return {
|
|
1965
|
-
lane: resolvedLane,
|
|
1966
|
-
transactionLane,
|
|
1967
|
-
transactionIntent,
|
|
1968
|
-
readiness: {
|
|
1969
|
-
readiness: readiness.readiness,
|
|
1970
|
-
expiresAtMs: readiness.expiresAtMs,
|
|
1971
|
-
remainingUses: readiness.remainingUses
|
|
1972
|
-
},
|
|
1973
|
-
availableLanesGeneration: availableLanes.generation,
|
|
1974
|
-
metadata: {
|
|
1975
|
-
accountAuth: selection.accountAuth,
|
|
1976
|
-
authMethod: committedSelectionAuthMethod,
|
|
1977
|
-
source: selection.diagnostics.selectedLaneCandidate.source,
|
|
1978
|
-
selection,
|
|
1979
|
-
materialBinding: {
|
|
1980
|
-
operationId: args.signingOperation.operationId,
|
|
1981
|
-
...args.signingOperation.operationFingerprint ? { operationFingerprint: args.signingOperation.operationFingerprint } : {},
|
|
1982
|
-
laneIdentityKey: exactSigningLaneIdentityKey(exactSigningLaneIdentityFromSelectedLane(resolvedLane))
|
|
1983
|
-
},
|
|
1984
|
-
availableLanesGeneration: availableLanes.generation
|
|
1985
|
-
}
|
|
1986
|
-
};
|
|
1987
|
-
} }
|
|
1988
|
-
});
|
|
1989
|
-
const preparedOperation = preparedTransaction.thresholdOperation;
|
|
1990
|
-
const metadata = preparedOperation.metadata;
|
|
1991
|
-
assertPreparedMaterialBindingMatchesOperation({
|
|
1992
|
-
metadata,
|
|
1993
|
-
preparedOperation
|
|
1994
|
-
});
|
|
1995
|
-
return {
|
|
1996
|
-
kind: "authorized",
|
|
1997
|
-
accountAuth: metadata.accountAuth,
|
|
1998
|
-
authMethod: metadata.authMethod,
|
|
1999
|
-
source: metadata.source,
|
|
2000
|
-
selection: metadata.selection,
|
|
2001
|
-
availableLanesGeneration: metadata.availableLanesGeneration,
|
|
2002
|
-
signingLane: preparedOperation.lane,
|
|
2003
|
-
preparedOperation,
|
|
2004
|
-
transactionOperation: preparedTransaction.transactionOperation
|
|
2005
|
-
};
|
|
2006
|
-
}
|
|
2007
|
-
//#endregion
|
|
2008
|
-
//#region src/core/signingEngine/flows/signEvmFamily/nonceLifecycleAdapter.ts
|
|
2009
|
-
function toEvmFamilyManagedNonceReservationFromSignedResult(args) {
|
|
2010
|
-
const snapshot = args.signedResult.managedNonce;
|
|
2011
|
-
if (!snapshot || typeof snapshot !== "object") throw new Error("[SigningEngine][evm-family] managedNonce is required for nonce lifecycle");
|
|
2012
|
-
try {
|
|
2013
|
-
const parsed = fromManagedNonceReservationSnapshot(snapshot);
|
|
2014
|
-
args.walletId;
|
|
2015
|
-
return parsed;
|
|
2016
|
-
} catch (error) {
|
|
2017
|
-
throw new Error(`[SigningEngine][evm-family] invalid managedNonce: ${error instanceof Error ? error.message : String(error || "unknown error")}`);
|
|
2018
|
-
}
|
|
2019
|
-
}
|
|
2020
|
-
async function releaseEvmFamilyNonceReservation(deps, reservation) {
|
|
2021
|
-
const leaseRef = requireManagedNonceLeaseRef(reservation);
|
|
2022
|
-
await deps.nonceCoordinator.release({
|
|
2023
|
-
...leaseRef,
|
|
2024
|
-
reason: "signing_failed"
|
|
2025
|
-
});
|
|
2026
|
-
}
|
|
2027
|
-
function formatNonceLaneStatus(status) {
|
|
2028
|
-
return {
|
|
2029
|
-
chainNextNonce: status.chainNextNonce.toString(),
|
|
2030
|
-
unresolvedInFlightNonces: status.unresolvedInFlightNonces.map((value) => value.toString()),
|
|
2031
|
-
blocked: status.blocked,
|
|
2032
|
-
...status.blockedNonce != null ? { blockedNonce: status.blockedNonce.toString() } : {}
|
|
2033
|
-
};
|
|
2034
|
-
}
|
|
2035
|
-
async function reportEvmFamilyBroadcastAccepted(deps, args) {
|
|
2036
|
-
const reservation = toEvmFamilyManagedNonceReservationFromSignedResult({
|
|
2037
|
-
signedResult: args.signedResult,
|
|
2038
|
-
walletId: args.walletId
|
|
2039
|
-
});
|
|
2040
|
-
emitEvmFamilyBroadcastEvent(args.onEvent, {
|
|
2041
|
-
walletId: args.walletId,
|
|
2042
|
-
phase: SigningEventPhase.STEP_12_BROADCAST_ACCEPTED,
|
|
2043
|
-
status: "running",
|
|
2044
|
-
message: "Marking managed nonce lane as in-flight",
|
|
2045
|
-
data: {
|
|
2046
|
-
chain: reservation.chainTarget.kind,
|
|
2047
|
-
networkKey: reservation.chainTarget.networkSlug,
|
|
2048
|
-
chainId: reservation.chainTarget.chainId.toString(),
|
|
2049
|
-
nonce: reservation.nonce.toString()
|
|
2050
|
-
}
|
|
2051
|
-
});
|
|
2052
|
-
const txHash = requireEvmFamilyBroadcastTxHash(args.txHash || (args.signedResult.chain === "evm" ? args.signedResult.txHashHex : void 0));
|
|
2053
|
-
await deps.nonceCoordinator.markBroadcastAccepted({
|
|
2054
|
-
...requireManagedNonceLeaseRef(reservation),
|
|
2055
|
-
txHash
|
|
2056
|
-
});
|
|
2057
|
-
emitEvmFamilyBroadcastEvent(args.onEvent, {
|
|
2058
|
-
walletId: args.walletId,
|
|
2059
|
-
phase: SigningEventPhase.STEP_12_BROADCAST_ACCEPTED,
|
|
2060
|
-
status: "succeeded",
|
|
2061
|
-
message: "Managed nonce lane marked in-flight",
|
|
2062
|
-
data: {
|
|
2063
|
-
chain: reservation.chainTarget.kind,
|
|
2064
|
-
networkKey: reservation.chainTarget.networkSlug,
|
|
2065
|
-
chainId: reservation.chainTarget.chainId.toString(),
|
|
2066
|
-
nonce: reservation.nonce.toString(),
|
|
2067
|
-
txHash
|
|
2068
|
-
}
|
|
2069
|
-
});
|
|
2070
|
-
}
|
|
2071
|
-
function requireEvmFamilyBroadcastTxHash(value) {
|
|
2072
|
-
const normalized = String(value || "").trim().toLowerCase();
|
|
2073
|
-
if (!/^0x[0-9a-f]{64}$/.test(normalized)) throw new Error("[SigningEngine][evm-family] broadcast acceptance requires txHash");
|
|
2074
|
-
return normalized;
|
|
2075
|
-
}
|
|
2076
|
-
async function reportEvmFamilyBroadcastRejected(deps, args) {
|
|
2077
|
-
const reservation = toEvmFamilyManagedNonceReservationFromSignedResult({
|
|
2078
|
-
signedResult: args.signedResult,
|
|
2079
|
-
walletId: args.walletId
|
|
2080
|
-
});
|
|
2081
|
-
emitEvmFamilyBroadcastEvent(args.onEvent, {
|
|
2082
|
-
walletId: args.walletId,
|
|
2083
|
-
phase: SigningEventPhase.STEP_12_BROADCAST_REJECTED,
|
|
2084
|
-
status: "running",
|
|
2085
|
-
message: "Marking managed nonce reservation rejected",
|
|
2086
|
-
data: {
|
|
2087
|
-
chain: reservation.chainTarget.kind,
|
|
2088
|
-
networkKey: reservation.chainTarget.networkSlug,
|
|
2089
|
-
chainId: reservation.chainTarget.chainId.toString(),
|
|
2090
|
-
nonce: reservation.nonce.toString()
|
|
2091
|
-
}
|
|
2092
|
-
});
|
|
2093
|
-
await deps.nonceCoordinator.markBroadcastRejected({
|
|
2094
|
-
...requireManagedNonceLeaseRef(reservation),
|
|
2095
|
-
error: args.error
|
|
2096
|
-
});
|
|
2097
|
-
const mappedError = mapToRetryableNonceStateError({
|
|
2098
|
-
error: args.error,
|
|
2099
|
-
chain: reservation.chainTarget.kind,
|
|
2100
|
-
networkKey: reservation.chainTarget.networkSlug,
|
|
2101
|
-
chainId: reservation.chainTarget.chainId
|
|
2102
|
-
});
|
|
2103
|
-
emitEvmFamilyBroadcastEvent(args.onEvent, {
|
|
2104
|
-
walletId: args.walletId,
|
|
2105
|
-
phase: SigningEventPhase.STEP_12_BROADCAST_REJECTED,
|
|
2106
|
-
status: "failed",
|
|
2107
|
-
message: "Managed nonce reservation marked rejected",
|
|
2108
|
-
data: {
|
|
2109
|
-
chain: reservation.chainTarget.kind,
|
|
2110
|
-
networkKey: reservation.chainTarget.networkSlug,
|
|
2111
|
-
chainId: reservation.chainTarget.chainId.toString(),
|
|
2112
|
-
nonce: reservation.nonce.toString()
|
|
2113
|
-
}
|
|
2114
|
-
});
|
|
2115
|
-
if (!isNonceConflictRetryableError(mappedError) && !isNonceLaneBlockedRetryableError(mappedError)) return;
|
|
2116
|
-
emitEvmFamilyBroadcastEvent(args.onEvent, {
|
|
2117
|
-
walletId: args.walletId,
|
|
2118
|
-
phase: SigningEventPhase.STEP_13_NONCE_RECONCILE_STARTED,
|
|
2119
|
-
status: "running",
|
|
2120
|
-
message: "Reconciling managed nonce lane after broadcast error",
|
|
2121
|
-
data: {
|
|
2122
|
-
chain: reservation.chainTarget.kind,
|
|
2123
|
-
networkKey: reservation.chainTarget.networkSlug,
|
|
2124
|
-
chainId: reservation.chainTarget.chainId.toString(),
|
|
2125
|
-
nonce: reservation.nonce.toString(),
|
|
2126
|
-
errorCode: extractErrorCode(mappedError)
|
|
2127
|
-
}
|
|
2128
|
-
});
|
|
2129
|
-
const laneStatus = await deps.nonceCoordinator.reconcile({ lane: evmManagedReservationToLane(reservation) }).catch(() => null);
|
|
2130
|
-
emitEvmFamilyBroadcastEvent(args.onEvent, {
|
|
2131
|
-
walletId: args.walletId,
|
|
2132
|
-
phase: SigningEventPhase.STEP_13_NONCE_RECONCILE_SUCCEEDED,
|
|
2133
|
-
status: "succeeded",
|
|
2134
|
-
message: "Managed nonce lane reconciled",
|
|
2135
|
-
data: {
|
|
2136
|
-
chain: reservation.chainTarget.kind,
|
|
2137
|
-
networkKey: reservation.chainTarget.networkSlug,
|
|
2138
|
-
chainId: reservation.chainTarget.chainId.toString(),
|
|
2139
|
-
...laneStatus ? { laneStatus: formatNonceLaneStatus(laneStatus) } : {}
|
|
2140
|
-
}
|
|
2141
|
-
});
|
|
2142
|
-
throw mappedError;
|
|
2143
|
-
}
|
|
2144
|
-
async function reportEvmFamilyFinalized(deps, args) {
|
|
2145
|
-
args.receiptStatus;
|
|
2146
|
-
const reservation = toEvmFamilyManagedNonceReservationFromSignedResult({
|
|
2147
|
-
signedResult: args.signedResult,
|
|
2148
|
-
walletId: args.walletId
|
|
2149
|
-
});
|
|
2150
|
-
const txHash = args.txHash || (args.signedResult.chain === "evm" ? args.signedResult.txHashHex : void 0);
|
|
2151
|
-
await deps.nonceCoordinator.markFinalized({
|
|
2152
|
-
...requireManagedNonceLeaseRef(reservation),
|
|
2153
|
-
...txHash ? { txHash } : {}
|
|
2154
|
-
});
|
|
2155
|
-
}
|
|
2156
|
-
async function reportEvmFamilyDroppedOrReplaced(deps, args) {
|
|
2157
|
-
const reservation = toEvmFamilyManagedNonceReservationFromSignedResult({
|
|
2158
|
-
signedResult: args.signedResult,
|
|
2159
|
-
walletId: args.walletId
|
|
2160
|
-
});
|
|
2161
|
-
emitEvmFamilyBroadcastEvent(args.onEvent, {
|
|
2162
|
-
walletId: args.walletId,
|
|
2163
|
-
phase: args.reason === "replaced" ? SigningEventPhase.STEP_13_TRANSACTION_REPLACED : SigningEventPhase.STEP_13_TRANSACTION_DROPPED,
|
|
2164
|
-
status: "running",
|
|
2165
|
-
message: args.reason === "replaced" ? "Marking managed nonce lane replaced" : "Marking managed nonce lane dropped",
|
|
2166
|
-
data: {
|
|
2167
|
-
chain: reservation.chainTarget.kind,
|
|
2168
|
-
networkKey: reservation.chainTarget.networkSlug,
|
|
2169
|
-
chainId: reservation.chainTarget.chainId.toString(),
|
|
2170
|
-
nonce: reservation.nonce.toString(),
|
|
2171
|
-
reason: args.reason,
|
|
2172
|
-
...args.txHash ? { txHash: args.txHash } : {}
|
|
2173
|
-
}
|
|
2174
|
-
});
|
|
2175
|
-
await deps.nonceCoordinator.markDroppedOrReplaced({
|
|
2176
|
-
...requireManagedNonceLeaseRef(reservation),
|
|
2177
|
-
reason: args.reason,
|
|
2178
|
-
...args.txHash ? { txHash: args.txHash } : {}
|
|
2179
|
-
});
|
|
2180
|
-
emitEvmFamilyBroadcastEvent(args.onEvent, {
|
|
2181
|
-
walletId: args.walletId,
|
|
2182
|
-
phase: args.reason === "replaced" ? SigningEventPhase.STEP_13_TRANSACTION_REPLACED : SigningEventPhase.STEP_13_TRANSACTION_DROPPED,
|
|
2183
|
-
status: args.reason === "replaced" ? "succeeded" : "failed",
|
|
2184
|
-
message: args.reason === "replaced" ? "Managed nonce lane marked replaced" : "Managed nonce lane marked dropped",
|
|
2185
|
-
data: {
|
|
2186
|
-
chain: reservation.chainTarget.kind,
|
|
2187
|
-
networkKey: reservation.chainTarget.networkSlug,
|
|
2188
|
-
chainId: reservation.chainTarget.chainId.toString(),
|
|
2189
|
-
nonce: reservation.nonce.toString(),
|
|
2190
|
-
reason: args.reason,
|
|
2191
|
-
...args.txHash ? { txHash: args.txHash } : {}
|
|
2192
|
-
}
|
|
2193
|
-
});
|
|
2194
|
-
}
|
|
2195
|
-
async function reconcileEvmFamilyNonceLane(deps, args) {
|
|
2196
|
-
const reservation = toEvmFamilyManagedNonceReservationFromSignedResult({
|
|
2197
|
-
signedResult: args.signedResult,
|
|
2198
|
-
walletId: args.walletId
|
|
2199
|
-
});
|
|
2200
|
-
emitEvmFamilyBroadcastEvent(args.onEvent, {
|
|
2201
|
-
walletId: args.walletId,
|
|
2202
|
-
phase: SigningEventPhase.STEP_13_NONCE_RECONCILE_STARTED,
|
|
2203
|
-
status: "running",
|
|
2204
|
-
message: "Reconciling managed nonce lane",
|
|
2205
|
-
data: {
|
|
2206
|
-
chain: reservation.chainTarget.kind,
|
|
2207
|
-
networkKey: reservation.chainTarget.networkSlug,
|
|
2208
|
-
chainId: reservation.chainTarget.chainId.toString()
|
|
2209
|
-
}
|
|
2210
|
-
});
|
|
2211
|
-
const laneStatus = await deps.nonceCoordinator.reconcile({ lane: evmManagedReservationToLane(reservation) });
|
|
2212
|
-
const formatted = formatNonceLaneStatus(laneStatus);
|
|
2213
|
-
emitEvmFamilyBroadcastEvent(args.onEvent, {
|
|
2214
|
-
walletId: args.walletId,
|
|
2215
|
-
phase: SigningEventPhase.STEP_13_NONCE_RECONCILE_SUCCEEDED,
|
|
2216
|
-
status: "succeeded",
|
|
2217
|
-
message: "Managed nonce lane reconciled",
|
|
2218
|
-
data: {
|
|
2219
|
-
chain: reservation.chainTarget.kind,
|
|
2220
|
-
networkKey: reservation.chainTarget.networkSlug,
|
|
2221
|
-
chainId: reservation.chainTarget.chainId.toString(),
|
|
2222
|
-
laneStatus: formatted
|
|
2223
|
-
}
|
|
2224
|
-
});
|
|
2225
|
-
if (laneStatus.blocked) throw createEvmFamilySigningNonceLaneBlockedError({
|
|
2226
|
-
chain: reservation.chainTarget.kind,
|
|
2227
|
-
networkKey: reservation.chainTarget.networkSlug,
|
|
2228
|
-
chainId: reservation.chainTarget.chainId,
|
|
2229
|
-
blockedNonce: String(formatted.blockedNonce || "unknown")
|
|
2230
|
-
});
|
|
2231
|
-
return formatted;
|
|
2232
|
-
}
|
|
2233
|
-
function requireManagedNonceLeaseRef(reservation) {
|
|
2234
|
-
const leaseId = String(reservation.leaseId || "").trim();
|
|
2235
|
-
const operationId = String(reservation.operationId || "").trim();
|
|
2236
|
-
const operationFingerprint = String(reservation.operationFingerprint || "").trim();
|
|
2237
|
-
if (!leaseId || !operationId || !operationFingerprint) throw new Error("[SigningEngine][evm-family] managedNonce lease metadata is required");
|
|
2238
|
-
return {
|
|
2239
|
-
leaseId,
|
|
2240
|
-
operationId,
|
|
2241
|
-
operationFingerprint
|
|
2242
|
-
};
|
|
2243
|
-
}
|
|
2244
|
-
//#endregion
|
|
2245
|
-
//#region src/core/signingEngine/flows/signEvmFamily/addresses.ts
|
|
2246
|
-
function toOptionalEvmAddress(value) {
|
|
2247
|
-
const normalized = String(value || "").trim().toLowerCase();
|
|
2248
|
-
if (!/^0x[0-9a-f]{40}$/.test(normalized)) return void 0;
|
|
2249
|
-
return normalized;
|
|
2250
|
-
}
|
|
2251
|
-
//#endregion
|
|
2252
|
-
//#region src/core/signingEngine/flows/signEvmFamily/nonceResolution.ts
|
|
2253
|
-
function readOptionalChainId(chain) {
|
|
2254
|
-
if (!("chainId" in chain)) return void 0;
|
|
2255
|
-
return typeof chain.chainId === "number" ? chain.chainId : void 0;
|
|
2256
|
-
}
|
|
2257
|
-
function isEvmFamilyNetwork(chain) {
|
|
2258
|
-
return String(chainFamilyFromNetwork(chain.network)) === "evm";
|
|
2259
|
-
}
|
|
2260
|
-
function isTempoFamilyNetwork(chain) {
|
|
2261
|
-
return String(chainFamilyFromNetwork(chain.network)) === "tempo";
|
|
2262
|
-
}
|
|
2263
|
-
function resolveNonceNetworkKey(args) {
|
|
2264
|
-
const resolved = tryResolveNonceNetworkKey(args);
|
|
2265
|
-
if (resolved) return resolved;
|
|
2266
|
-
const chainId = args.request.tx.chainId;
|
|
2267
|
-
throw new Error(`[SigningEngine] unable to resolve nonce network for ${args.request.chain} chainId=${String(chainId)} from configured chains`);
|
|
2268
|
-
}
|
|
2269
|
-
function resolveNonceNetworkKeyForError(args) {
|
|
2270
|
-
return tryResolveNonceNetworkKey(args) || `${args.request.chain}:${String(args.request.tx.chainId)}`;
|
|
2271
|
-
}
|
|
2272
|
-
function tryResolveNonceNetworkKey(args) {
|
|
2273
|
-
const chainId = args.request.tx.chainId;
|
|
2274
|
-
const matchesByChainId = args.configs.network.chains.filter((chain) => {
|
|
2275
|
-
const configured = readOptionalChainId(chain);
|
|
2276
|
-
return typeof configured === "number" && configured === chainId;
|
|
2277
|
-
});
|
|
2278
|
-
if (!matchesByChainId.length) return null;
|
|
2279
|
-
if (args.request.chain === "tempo") {
|
|
2280
|
-
const tempoMatches = matchesByChainId.filter((chain) => isTempoFamilyNetwork(chain));
|
|
2281
|
-
if (tempoMatches.length === 1) return tempoMatches[0].network;
|
|
2282
|
-
if (tempoMatches.length > 1) {
|
|
2283
|
-
const candidates = tempoMatches.map((chain) => chain.network).join(", ");
|
|
2284
|
-
throw new Error(`[SigningEngine] ambiguous nonce network for tempo chainId=${String(args.request.tx.chainId)} across [${candidates}]`);
|
|
2285
|
-
}
|
|
2286
|
-
return null;
|
|
2287
|
-
}
|
|
2288
|
-
const evmMatches = matchesByChainId.filter((chain) => isEvmFamilyNetwork(chain));
|
|
2289
|
-
if (evmMatches.length === 1) return evmMatches[0].network;
|
|
2290
|
-
if (evmMatches.length > 1) {
|
|
2291
|
-
const candidates = evmMatches.map((chain) => chain.network).join(", ");
|
|
2292
|
-
throw new Error(`[SigningEngine] ambiguous nonce network for evm chainId=${String(args.request.tx.chainId)} across [${candidates}]`);
|
|
2293
|
-
}
|
|
2294
|
-
const tempoMatches = matchesByChainId.filter((chain) => isTempoFamilyNetwork(chain));
|
|
2295
|
-
if (tempoMatches.length === 1) return tempoMatches[0].network;
|
|
2296
|
-
if (tempoMatches.length > 1) {
|
|
2297
|
-
const candidates = tempoMatches.map((chain) => chain.network).join(", ");
|
|
2298
|
-
throw new Error(`[SigningEngine] ambiguous nonce network for evm->tempo chainId=${String(args.request.tx.chainId)} across [${candidates}]`);
|
|
2299
|
-
}
|
|
2300
|
-
return null;
|
|
2301
|
-
}
|
|
2302
|
-
function thresholdOwnerNonceSenderIdentity(thresholdOwnerAddress) {
|
|
2303
|
-
return {
|
|
2304
|
-
kind: "threshold_owner",
|
|
2305
|
-
thresholdOwnerAddress
|
|
2306
|
-
};
|
|
2307
|
-
}
|
|
2308
|
-
function chainAccountNonceSenderIdentity(chainAccountAddress) {
|
|
2309
|
-
return {
|
|
2310
|
-
kind: "chain_account",
|
|
2311
|
-
chainAccountAddress
|
|
2312
|
-
};
|
|
2313
|
-
}
|
|
2314
|
-
function senderAddressFromIdentity(senderIdentity) {
|
|
2315
|
-
switch (senderIdentity.kind) {
|
|
2316
|
-
case "threshold_owner": return senderIdentity.thresholdOwnerAddress;
|
|
2317
|
-
case "chain_account": return senderIdentity.chainAccountAddress;
|
|
2318
|
-
default: return senderIdentity;
|
|
2319
|
-
}
|
|
2320
|
-
}
|
|
2321
|
-
async function resolveWalletChainNonceSenderIdentity(args) {
|
|
2322
|
-
const metadata = (await args.deps.walletSignerStore.getActiveWalletSignerForChainTarget({
|
|
2323
|
-
walletId: args.walletId,
|
|
2324
|
-
chainTarget: args.chainTarget
|
|
2325
|
-
}))?.metadata || {};
|
|
2326
|
-
const thresholdOwnerAddress = toOptionalEvmAddress(metadata.thresholdOwnerAddress);
|
|
2327
|
-
if (thresholdOwnerAddress) return thresholdOwnerNonceSenderIdentity(thresholdOwnerAddress);
|
|
2328
|
-
const chainAccountAddress = toOptionalEvmAddress(metadata.accountAddress);
|
|
2329
|
-
if (chainAccountAddress) return chainAccountNonceSenderIdentity(chainAccountAddress);
|
|
2330
|
-
const chainIdKey = toIndexedDbChainTargetKey(args.chainTarget);
|
|
2331
|
-
throw new Error(`[SigningEngine] unable to resolve managed nonce wallet signer for ${args.walletId} (${chainIdKey})`);
|
|
2332
|
-
}
|
|
2333
|
-
async function resolveManagedNonceSender(args) {
|
|
2334
|
-
return senderAddressFromIdentity(args.senderIdentity);
|
|
2335
|
-
}
|
|
2336
|
-
//#endregion
|
|
2337
|
-
//#region src/core/signingEngine/flows/signEvmFamily/evmNonceLifecycle.ts
|
|
2338
|
-
async function resolveManagedEvmNonceReservationInput(args) {
|
|
2339
|
-
const sender = await resolveManagedNonceSender({ senderIdentity: args.senderIdentity });
|
|
2340
|
-
return reserveNonceInputFromBoundary({
|
|
2341
|
-
chain: "evm",
|
|
2342
|
-
networkKey: resolveNonceNetworkKey({
|
|
2343
|
-
configs: args.deps.seamsWebConfigs,
|
|
2344
|
-
request: args.request
|
|
2345
|
-
}),
|
|
2346
|
-
chainId: args.request.tx.chainId,
|
|
2347
|
-
sender,
|
|
2348
|
-
walletId: args.walletId
|
|
2349
|
-
});
|
|
2350
|
-
}
|
|
2351
|
-
async function reserveManagedEvmNonceForRequest(args) {
|
|
2352
|
-
const reservationInput = args.reservationInput;
|
|
2353
|
-
let reservation;
|
|
2354
|
-
try {
|
|
2355
|
-
reservation = evmNonceLeaseToManagedReservation(await args.deps.nonceCoordinator.reserve({
|
|
2356
|
-
lane: evmReserveNonceInputToLane(reservationInput),
|
|
2357
|
-
operation: args.operation
|
|
2358
|
-
}));
|
|
2359
|
-
} catch (error) {
|
|
2360
|
-
throw mapToRetryableNonceStateError({
|
|
2361
|
-
error,
|
|
2362
|
-
chain: "evm",
|
|
2363
|
-
networkKey: reservationInput.chainTarget.networkSlug,
|
|
2364
|
-
chainId: reservationInput.chainTarget.chainId
|
|
2365
|
-
});
|
|
2366
|
-
}
|
|
2367
|
-
return {
|
|
2368
|
-
request: {
|
|
2369
|
-
...args.request,
|
|
2370
|
-
tx: {
|
|
2371
|
-
...args.request.tx,
|
|
2372
|
-
nonce: reservation.nonce
|
|
2373
|
-
}
|
|
2374
|
-
},
|
|
2375
|
-
reservation
|
|
2376
|
-
};
|
|
2377
|
-
}
|
|
2378
|
-
//#endregion
|
|
2379
|
-
//#region src/core/signingEngine/flows/signEvmFamily/tempoNonceLifecycle.ts
|
|
2380
|
-
async function reserveManagedTempoNonceForRequest(args) {
|
|
2381
|
-
const sender = await resolveManagedNonceSender({ senderIdentity: args.senderIdentity });
|
|
2382
|
-
const reservationInput = reserveNonceInputFromBoundary({
|
|
2383
|
-
chain: "tempo",
|
|
2384
|
-
networkKey: resolveNonceNetworkKey({
|
|
2385
|
-
configs: args.deps.seamsWebConfigs,
|
|
2386
|
-
request: args.request
|
|
2387
|
-
}),
|
|
2388
|
-
chainId: args.request.tx.chainId,
|
|
2389
|
-
sender,
|
|
2390
|
-
nonceKey: args.request.tx.nonceKey,
|
|
2391
|
-
walletId: args.walletId
|
|
2392
|
-
});
|
|
2393
|
-
let reservation;
|
|
2394
|
-
try {
|
|
2395
|
-
reservation = evmNonceLeaseToManagedReservation(await args.deps.nonceCoordinator.reserve({
|
|
2396
|
-
lane: evmReserveNonceInputToLane(reservationInput),
|
|
2397
|
-
operation: args.operation
|
|
2398
|
-
}));
|
|
2399
|
-
} catch (error) {
|
|
2400
|
-
throw mapToRetryableNonceStateError({
|
|
2401
|
-
error,
|
|
2402
|
-
chain: "tempo",
|
|
2403
|
-
networkKey: reservationInput.chainTarget.networkSlug,
|
|
2404
|
-
chainId: reservationInput.chainTarget.chainId
|
|
2405
|
-
});
|
|
2406
|
-
}
|
|
2407
|
-
return {
|
|
2408
|
-
request: {
|
|
2409
|
-
...args.request,
|
|
2410
|
-
tx: {
|
|
2411
|
-
...args.request.tx,
|
|
2412
|
-
nonce: reservation.nonce
|
|
2413
|
-
}
|
|
2414
|
-
},
|
|
2415
|
-
reservation
|
|
2416
|
-
};
|
|
2417
|
-
}
|
|
2418
|
-
//#endregion
|
|
2419
|
-
//#region src/core/signingEngine/flows/signEvmFamily/transactionExecutor.ts
|
|
2420
|
-
function resolveThresholdOwnerNonceSenderIdentity(args) {
|
|
2421
|
-
if (args.state.kind === "not_required") return void 0;
|
|
2422
|
-
return thresholdOwnerNonceSenderIdentity(args.state.thresholdOwnerAddress);
|
|
2423
|
-
}
|
|
2424
|
-
function requireRawEip1559ThresholdOwnerNonceSenderIdentity(args) {
|
|
2425
|
-
if (args.state.kind === "not_required") throw new Error(`[SigningEngine][evm-family] raw EIP-1559 signing requires prepared threshold ECDSA owner address for ${args.walletId}`);
|
|
2426
|
-
return thresholdOwnerNonceSenderIdentity(args.state.thresholdOwnerAddress);
|
|
2427
|
-
}
|
|
2428
|
-
function resolvePreparedNonceSenderIdentity(args) {
|
|
2429
|
-
return resolveThresholdOwnerNonceSenderIdentity(args);
|
|
2430
|
-
}
|
|
2431
|
-
function resolveFallbackChainAccountNonceSenderIdentity(args) {
|
|
2432
|
-
return resolveWalletChainNonceSenderIdentity({
|
|
2433
|
-
deps: args.deps,
|
|
2434
|
-
walletId: args.walletId,
|
|
2435
|
-
chainTarget: args.chainTarget
|
|
2436
|
-
});
|
|
2437
|
-
}
|
|
2438
|
-
async function executeConfiguredEvmFamilyTransactionSigning(args, config) {
|
|
2439
|
-
const recoverDurableLeasesTask = args.deps.nonceCoordinator.recoverDurableLeases({ walletId: args.walletId });
|
|
2440
|
-
recoverDurableLeasesTask.catch(() => {});
|
|
2441
|
-
const signWithUiConfirm = await config.loadSigner();
|
|
2442
|
-
try {
|
|
2443
|
-
return await signWithUiConfirm({
|
|
2444
|
-
...args.flowArgs,
|
|
2445
|
-
authorization: args.flowArgs.authorization ?? { kind: "owner" },
|
|
2446
|
-
request: args.request,
|
|
2447
|
-
onConfirmationDisplayed: args.onConfirmationDisplayed,
|
|
2448
|
-
thresholdEcdsaStepUp: args.thresholdEcdsaStepUp,
|
|
2449
|
-
prepareRequestWithManagedNonce: async () => {
|
|
2450
|
-
await recoverDurableLeasesTask;
|
|
2451
|
-
return await config.prepareRequestWithManagedNonce({
|
|
2452
|
-
deps: args.deps,
|
|
2453
|
-
walletId: args.walletId,
|
|
2454
|
-
request: args.request,
|
|
2455
|
-
nonceOperation: args.nonceOperation
|
|
2456
|
-
});
|
|
2457
|
-
},
|
|
2458
|
-
releaseNonceReservation: async (reservation) => {
|
|
2459
|
-
await releaseEvmFamilyNonceReservation(args.deps, reservation);
|
|
2460
|
-
}
|
|
2461
|
-
});
|
|
2462
|
-
} catch (error) {
|
|
2463
|
-
const retried = await args.retryWithFreshEmailOtpAuth(error);
|
|
2464
|
-
if (retried) return retried;
|
|
2465
|
-
throw mapToRetryableNonceStateError({
|
|
2466
|
-
error,
|
|
2467
|
-
chain: config.targetKind,
|
|
2468
|
-
networkKey: resolveNonceNetworkKeyForError({
|
|
2469
|
-
configs: args.deps.seamsWebConfigs,
|
|
2470
|
-
request: args.request
|
|
2471
|
-
}),
|
|
2472
|
-
chainId: args.chainTarget.chainId
|
|
2473
|
-
});
|
|
2474
|
-
}
|
|
2475
|
-
}
|
|
2476
|
-
async function executeEvmFamilyTransactionSigning(args) {
|
|
2477
|
-
if (args.chainTarget.kind === "evm" || args.request.kind === "eip1559") {
|
|
2478
|
-
let reservationInputPromise = null;
|
|
2479
|
-
let fallbackSenderIdentityPromise = null;
|
|
2480
|
-
const rawEip1559SenderIdentity = args.request.kind === "eip1559" ? requireRawEip1559ThresholdOwnerNonceSenderIdentity({
|
|
2481
|
-
state: args.thresholdEcdsaState,
|
|
2482
|
-
walletId: args.walletId,
|
|
2483
|
-
chainTarget: args.chainTarget
|
|
2484
|
-
}) : void 0;
|
|
2485
|
-
const preparedSenderIdentity = resolvePreparedNonceSenderIdentity({ state: args.thresholdEcdsaState });
|
|
2486
|
-
const getSenderIdentity = (nonceArgs) => {
|
|
2487
|
-
const exactSenderIdentity = rawEip1559SenderIdentity || preparedSenderIdentity;
|
|
2488
|
-
if (exactSenderIdentity) return Promise.resolve(exactSenderIdentity);
|
|
2489
|
-
if (!fallbackSenderIdentityPromise) fallbackSenderIdentityPromise = resolveFallbackChainAccountNonceSenderIdentity({
|
|
2490
|
-
deps: nonceArgs.deps,
|
|
2491
|
-
walletId: nonceArgs.walletId,
|
|
2492
|
-
chainTarget: args.chainTarget
|
|
2493
|
-
});
|
|
2494
|
-
return fallbackSenderIdentityPromise;
|
|
2495
|
-
};
|
|
2496
|
-
const getReservationInput = (nonceArgs) => {
|
|
2497
|
-
if (!reservationInputPromise) reservationInputPromise = getSenderIdentity(nonceArgs).then((senderIdentity) => resolveManagedEvmNonceReservationInput({
|
|
2498
|
-
deps: nonceArgs.deps,
|
|
2499
|
-
walletId: nonceArgs.walletId,
|
|
2500
|
-
request: nonceArgs.request,
|
|
2501
|
-
senderIdentity
|
|
2502
|
-
}));
|
|
2503
|
-
return reservationInputPromise;
|
|
2504
|
-
};
|
|
2505
|
-
const targetKind = args.chainTarget.kind;
|
|
2506
|
-
return await executeConfiguredEvmFamilyTransactionSigning({
|
|
2507
|
-
...args,
|
|
2508
|
-
request: args.request
|
|
2509
|
-
}, {
|
|
2510
|
-
targetKind,
|
|
2511
|
-
loadSigner: targetKind === "tempo" ? loadSignEvmFamilyWithUiConfirmForTempo : loadSignEvmWithUiConfirm,
|
|
2512
|
-
prepareRequestWithManagedNonce: async (nonceArgs) => {
|
|
2513
|
-
const reservationInput = await getReservationInput(nonceArgs);
|
|
2514
|
-
return await reserveManagedEvmNonceForRequest({
|
|
2515
|
-
deps: nonceArgs.deps,
|
|
2516
|
-
request: nonceArgs.request,
|
|
2517
|
-
reservationInput,
|
|
2518
|
-
operation: nonceArgs.nonceOperation
|
|
2519
|
-
});
|
|
2520
|
-
}
|
|
2521
|
-
});
|
|
2522
|
-
}
|
|
2523
|
-
let tempoFallbackSenderIdentityPromise = null;
|
|
2524
|
-
const tempoPreparedSenderIdentity = resolvePreparedNonceSenderIdentity({ state: args.thresholdEcdsaState });
|
|
2525
|
-
const getTempoSenderIdentity = (nonceArgs) => {
|
|
2526
|
-
if (tempoPreparedSenderIdentity) return Promise.resolve(tempoPreparedSenderIdentity);
|
|
2527
|
-
if (!tempoFallbackSenderIdentityPromise) tempoFallbackSenderIdentityPromise = resolveFallbackChainAccountNonceSenderIdentity({
|
|
2528
|
-
deps: nonceArgs.deps,
|
|
2529
|
-
walletId: nonceArgs.walletId,
|
|
2530
|
-
chainTarget: args.chainTarget
|
|
2531
|
-
});
|
|
2532
|
-
return tempoFallbackSenderIdentityPromise;
|
|
2533
|
-
};
|
|
2534
|
-
return await executeConfiguredEvmFamilyTransactionSigning({
|
|
2535
|
-
...args,
|
|
2536
|
-
request: args.request
|
|
2537
|
-
}, {
|
|
2538
|
-
targetKind: "tempo",
|
|
2539
|
-
loadSigner: loadSignEvmFamilyWithUiConfirmForTempo,
|
|
2540
|
-
prepareRequestWithManagedNonce: async (nonceArgs) => {
|
|
2541
|
-
const senderIdentity = await getTempoSenderIdentity(nonceArgs);
|
|
2542
|
-
return await reserveManagedTempoNonceForRequest({
|
|
2543
|
-
deps: nonceArgs.deps,
|
|
2544
|
-
walletId: nonceArgs.walletId,
|
|
2545
|
-
request: nonceArgs.request,
|
|
2546
|
-
operation: nonceArgs.nonceOperation,
|
|
2547
|
-
senderIdentity
|
|
2548
|
-
});
|
|
2549
|
-
}
|
|
2550
|
-
});
|
|
2551
|
-
}
|
|
2552
|
-
//#endregion
|
|
2553
|
-
//#region src/core/signingEngine/routerAb/ecdsaDerivation/signingMaterialRef.ts
|
|
2554
|
-
function buildRouterAbEcdsaDerivationSigningMaterialRef(args) {
|
|
2555
|
-
const routerAbState = requireRouterAbEcdsaDerivationNormalSigningStateV1(args.routerAbState);
|
|
2556
|
-
return {
|
|
2557
|
-
kind: "router_ab_ecdsa_derivation_signing_material_ref_v1",
|
|
2558
|
-
activeStateId: routerAbEcdsaDerivationActiveStateId(routerAbState),
|
|
2559
|
-
ecdsaThresholdKeyId: parseEcdsaThresholdKeyId(routerAbState.scope.ecdsa_threshold_key_id),
|
|
2560
|
-
signingRootId: routerAbState.scope.signing_root_id,
|
|
2561
|
-
signingRootVersion: routerAbState.scope.signing_root_version,
|
|
2562
|
-
signingWorkerId: routerAbState.scope.signing_worker.server_id,
|
|
2563
|
-
clientVerifier33B64u: parseEcdsaClientVerifyingShareB64u(routerAbState.scope.public_identity.derivation_client_share_public_key33_b64u),
|
|
2564
|
-
serverVerifier33B64u: routerAbState.scope.public_identity.server_public_key33_b64u,
|
|
2565
|
-
thresholdVerifier33B64u: routerAbState.scope.public_identity.threshold_public_key33_b64u
|
|
2566
|
-
};
|
|
2567
|
-
}
|
|
2568
|
-
//#endregion
|
|
2569
|
-
//#region src/core/signingEngine/flows/signEvmFamily/readySecp256k1Material.ts
|
|
2570
|
-
async function hydrateEcdsaRoleLocalMaterialForSigning(args) {
|
|
2571
|
-
return resolveEcdsaRoleLocalMaterial({
|
|
2572
|
-
purpose: "transaction_signing",
|
|
2573
|
-
source: ecdsaRoleLocalPersistedMaterialSource(args.persistedMaterial),
|
|
2574
|
-
workerCtx: args.workerCtx
|
|
2575
|
-
});
|
|
2576
|
-
}
|
|
2577
|
-
/** Ready ECDSA signing material, assembled from each fact's canonical owner:
|
|
2578
|
-
* the manifest names the material and its public facts, the exact durable
|
|
2579
|
-
* runtime supplies normal-signing state, policy scope, and transport, and the
|
|
2580
|
-
* exact Wallet Session remains a separate authorization input.
|
|
2581
|
-
*
|
|
2582
|
-
* Nothing is decoded out of the opaque Wallet Session token. The facts it authorizes are owned by
|
|
2583
|
-
* the manifest and durable material record, which are correlated before this
|
|
2584
|
-
* function receives the runtime. */
|
|
2585
|
-
async function resolveHydratedSecp256k1SigningMaterial(args) {
|
|
2586
|
-
const capability = args.capability;
|
|
2587
|
-
const manifest = capability.manifest;
|
|
2588
|
-
const persistedMaterial = capability.material;
|
|
2589
|
-
const runtime = args.runtime;
|
|
2590
|
-
const sourceRoleLocalFacts = persistedMaterial.publicFacts;
|
|
2591
|
-
if (!mpcMaterialActivationRefsEqual(args.materialActivation, manifest.activation.materialActivation)) return {
|
|
2592
|
-
kind: "unavailable",
|
|
2593
|
-
reason: "material_activation_mismatch"
|
|
2594
|
-
};
|
|
2595
|
-
if (!mpcMaterialActivationRefsEqual(runtime.materialActivation, manifest.activation.materialActivation)) return {
|
|
2596
|
-
kind: "unavailable",
|
|
2597
|
-
reason: "runtime_correlation_mismatch"
|
|
2598
|
-
};
|
|
2599
|
-
const sourceTargetIsPublished = manifest.signer.scope.targetMemberships.some((target) => thresholdEcdsaChainTargetsEqual(target, sourceRoleLocalFacts.chainTarget));
|
|
2600
|
-
const requestedTarget = manifest.signer.scope.targetMemberships.find((target) => thresholdEcdsaChainTargetsEqual(target, args.chainTarget));
|
|
2601
|
-
if (!sourceTargetIsPublished || !requestedTarget) return {
|
|
2602
|
-
kind: "unavailable",
|
|
2603
|
-
reason: "chain_mismatch"
|
|
2604
|
-
};
|
|
2605
|
-
if (!thresholdEcdsaChainTargetsEqual(runtime.chainTarget, requestedTarget)) return {
|
|
2606
|
-
kind: "unavailable",
|
|
2607
|
-
reason: "chain_mismatch"
|
|
2608
|
-
};
|
|
2609
|
-
const roleLocalFacts = projectEcdsaRoleLocalPublicFactsToChainTarget({
|
|
2610
|
-
publicFacts: sourceRoleLocalFacts,
|
|
2611
|
-
chainTarget: requestedTarget
|
|
2612
|
-
});
|
|
2613
|
-
if (!runtime.runtimePolicyScope) return {
|
|
2614
|
-
kind: "unavailable",
|
|
2615
|
-
reason: "runtime_policy_scope_missing"
|
|
2616
|
-
};
|
|
2617
|
-
const roleLocalMaterialResolution = await hydrateEcdsaRoleLocalMaterialForSigning({
|
|
2618
|
-
persistedMaterial,
|
|
2619
|
-
workerCtx: args.workerCtx
|
|
2620
|
-
});
|
|
2621
|
-
let resolvedRoleLocalMaterial;
|
|
2622
|
-
switch (roleLocalMaterialResolution.kind) {
|
|
2623
|
-
case "rehydrated":
|
|
2624
|
-
resolvedRoleLocalMaterial = roleLocalMaterialResolution;
|
|
2625
|
-
break;
|
|
2626
|
-
case "device_link_required": return {
|
|
2627
|
-
kind: "unavailable",
|
|
2628
|
-
reason: "device_link_required"
|
|
2629
|
-
};
|
|
2630
|
-
case "corrupt": return {
|
|
2631
|
-
kind: "unavailable",
|
|
2632
|
-
reason: "material_corrupt"
|
|
2633
|
-
};
|
|
2634
|
-
default: return roleLocalMaterialResolution;
|
|
2635
|
-
}
|
|
2636
|
-
const normalSigningState = runtime.normalSigning;
|
|
2637
|
-
const signingMaterial = buildRouterAbEcdsaDerivationSigningMaterialRef({ routerAbState: normalSigningState });
|
|
2638
|
-
return {
|
|
2639
|
-
kind: "ready",
|
|
2640
|
-
material: buildHydratedEcdsaSignerMaterial({
|
|
2641
|
-
walletId: manifest.signer.walletId,
|
|
2642
|
-
materialActivation: manifest.activation.materialActivation,
|
|
2643
|
-
publicFacts: manifest.signer.registeredPublicFacts,
|
|
2644
|
-
chainTarget: roleLocalFacts.chainTarget,
|
|
2645
|
-
transport: {
|
|
2646
|
-
kind: "threshold_ecdsa_signer_transport",
|
|
2647
|
-
relayerUrl: runtime.relayerUrl,
|
|
2648
|
-
relayerKeyId: manifest.durableMaterial.roleLocalBinding.relayerKeyId,
|
|
2649
|
-
signingMaterial,
|
|
2650
|
-
relayerVerifyingShareB64u: roleLocalFacts.relayerPublicKey33B64u
|
|
2651
|
-
},
|
|
2652
|
-
clientShare: {
|
|
2653
|
-
kind: "role_local_worker_share",
|
|
2654
|
-
handle: resolvedRoleLocalMaterial.liveHandle,
|
|
2655
|
-
material: {
|
|
2656
|
-
kind: "worker_loaded",
|
|
2657
|
-
materialRef: resolvedRoleLocalMaterial.materialRef
|
|
2658
|
-
}
|
|
2659
|
-
},
|
|
2660
|
-
routerAbEcdsaDerivationNormalSigning: {
|
|
2661
|
-
kind: "router_ab_ecdsa_derivation_normal_signing_hydrated_v1",
|
|
2662
|
-
state: normalSigningState,
|
|
2663
|
-
activeStateId: routerAbEcdsaDerivationActiveStateId(normalSigningState)
|
|
2664
|
-
}
|
|
2665
|
-
})
|
|
2666
|
-
};
|
|
2667
|
-
}
|
|
2668
|
-
function attachExactEcdsaWalletSessionAuthorization(args) {
|
|
2669
|
-
const authorized = authorizeEvmFamilyEcdsaSigningCapability({
|
|
2670
|
-
capability: args.capability,
|
|
2671
|
-
authorization: args.authorization,
|
|
2672
|
-
nowMs: args.nowMs
|
|
2673
|
-
});
|
|
2674
|
-
const session = authorized.authorization.session;
|
|
2675
|
-
const operationCredential = authorized.authorization.operationCredential;
|
|
2676
|
-
if (session.walletId !== args.material.walletId || !mpcMaterialActivationRefsEqual(args.material.materialActivation, args.capability.manifest.activation.materialActivation)) throw new Error("Exact Wallet Session authorization wallet does not match hydrated material");
|
|
2677
|
-
if (operationCredential.token.trim().length === 0) throw new Error("Exact Wallet Session authorization is unavailable");
|
|
2678
|
-
return buildReadySecp256k1SigningMaterial({
|
|
2679
|
-
walletId: args.material.walletId,
|
|
2680
|
-
signerSession: args.material,
|
|
2681
|
-
authorization: {
|
|
2682
|
-
kind: "reusable_wallet_session",
|
|
2683
|
-
wallet_session_id: operationCredential.walletSessionId
|
|
2684
|
-
},
|
|
2685
|
-
credential: {
|
|
2686
|
-
kind: "reusable_wallet_session",
|
|
2687
|
-
walletSessionToken: operationCredential.token
|
|
2688
|
-
},
|
|
2689
|
-
expiresAtMs: session.expiresAtMs,
|
|
2690
|
-
singleUseEmailOtpSession: false
|
|
2691
|
-
});
|
|
2692
|
-
}
|
|
2693
|
-
function exactSessionAuthorizesEcdsaSigning(args) {
|
|
2694
|
-
return args.session.capabilitySubjects.some((subject) => subject.kind === "sign" && subject.keyFamily === "ecdsa_secp256k1" && mpcMaterialActivationRefsEqual(subject.materialActivation, args.materialActivation));
|
|
2695
|
-
}
|
|
2696
|
-
function buildActiveWalletAuthorityReadySecp256k1Material(args) {
|
|
2697
|
-
const authorityRuntime = args.authorityRuntime;
|
|
2698
|
-
const runtime = authorityRuntime.holderRuntime;
|
|
2699
|
-
const session = authorityRuntime.session;
|
|
2700
|
-
const operationCredential = authorityRuntime.operationCredential;
|
|
2701
|
-
const normalSigning = runtime.activationReceipt.normalSigning;
|
|
2702
|
-
const normalScope = normalSigning.scope;
|
|
2703
|
-
if (session.walletId !== runtime.walletId || session.authorityId !== runtime.authorityId || session.authMethodId !== runtime.walletAuthMethodId || operationCredential.walletSessionId !== authorityRuntime.walletSessionId || session.expiresAtMs <= Date.now() || !exactSessionAuthorizesEcdsaSigning({
|
|
2704
|
-
session,
|
|
2705
|
-
materialActivation: runtime.materialActivation
|
|
2706
|
-
}) || normalScope.wallet_id !== runtime.walletId || normalScope.ecdsa_threshold_key_id !== runtime.ecdsaThresholdKeyId || !mpcMaterialActivationRefsEqual(routerAbMpcMaterialActivationRefFromWire(normalScope.material_activation), runtime.materialActivation)) throw new Error("[SigningEngine] active Wallet Authority session does not bind the ECDSA holder runtime");
|
|
2707
|
-
const relayerUrl = String(args.relayerUrl || "").trim();
|
|
2708
|
-
if (!relayerUrl) throw new Error("[SigningEngine] active Wallet Authority ECDSA signing requires relayerUrl");
|
|
2709
|
-
const signerSession = buildHydratedEcdsaSignerMaterial({
|
|
2710
|
-
walletId: toWalletId(runtime.walletId),
|
|
2711
|
-
materialActivation: runtime.materialActivation,
|
|
2712
|
-
publicFacts: authorityRuntime.publicFacts,
|
|
2713
|
-
chainTarget: args.chainTarget,
|
|
2714
|
-
transport: {
|
|
2715
|
-
kind: "threshold_ecdsa_signer_transport",
|
|
2716
|
-
relayerUrl,
|
|
2717
|
-
relayerKeyId: authorityRuntime.relayerKeyId,
|
|
2718
|
-
signingMaterial: buildRouterAbEcdsaDerivationSigningMaterialRef({ routerAbState: normalSigning }),
|
|
2719
|
-
relayerVerifyingShareB64u: normalScope.public_identity.server_public_key33_b64u
|
|
2720
|
-
},
|
|
2721
|
-
clientShare: {
|
|
2722
|
-
kind: "linked_holder_worker_share",
|
|
2723
|
-
holderHandleId: runtime.holderHandleId
|
|
2724
|
-
},
|
|
2725
|
-
routerAbEcdsaDerivationNormalSigning: {
|
|
2726
|
-
kind: "router_ab_ecdsa_derivation_normal_signing_hydrated_v1",
|
|
2727
|
-
state: normalSigning,
|
|
2728
|
-
activeStateId: routerAbEcdsaDerivationActiveStateId(normalSigning)
|
|
2729
|
-
}
|
|
2730
|
-
});
|
|
2731
|
-
return buildReadySecp256k1SigningMaterial({
|
|
2732
|
-
walletId: runtime.walletId,
|
|
2733
|
-
signerSession,
|
|
2734
|
-
authorization: {
|
|
2735
|
-
kind: "reusable_wallet_session",
|
|
2736
|
-
wallet_session_id: operationCredential.walletSessionId
|
|
2737
|
-
},
|
|
2738
|
-
credential: {
|
|
2739
|
-
kind: "reusable_wallet_session",
|
|
2740
|
-
walletSessionToken: operationCredential.token
|
|
2741
|
-
},
|
|
2742
|
-
expiresAtMs: session.expiresAtMs,
|
|
2743
|
-
singleUseEmailOtpSession: false
|
|
2744
|
-
});
|
|
2745
|
-
}
|
|
2746
|
-
//#endregion
|
|
2747
|
-
//#region src/core/signingEngine/session/material/ecdsaSealedRuntime.ts
|
|
2748
|
-
function blocked$1(reason) {
|
|
2749
|
-
return {
|
|
2750
|
-
kind: "blocked",
|
|
2751
|
-
reason
|
|
2752
|
-
};
|
|
2753
|
-
}
|
|
2754
|
-
function authMethodForEcdsaSealedSource(source) {
|
|
2755
|
-
switch (source) {
|
|
2756
|
-
case "email_otp": return "email_otp";
|
|
2757
|
-
case "login":
|
|
2758
|
-
case "registration":
|
|
2759
|
-
case "manual-bootstrap": return "passkey";
|
|
2760
|
-
default: throw new Error("[SigningEngine] unsupported sealed ECDSA source");
|
|
2761
|
-
}
|
|
2762
|
-
}
|
|
2763
|
-
function normalizedNonEmpty(value) {
|
|
2764
|
-
return String(value ?? "").trim();
|
|
2765
|
-
}
|
|
2766
|
-
/** Exact match on stable material identity. Rotating session and grant
|
|
2767
|
-
* identifiers deliberately take no part: they change under a reusable Wallet
|
|
2768
|
-
* Session without changing which material this record describes. */
|
|
2769
|
-
function sealedRecordNamesManifestMaterial(args) {
|
|
2770
|
-
const restore = args.record.ecdsaRestore;
|
|
2771
|
-
const durable = args.manifest.durableMaterial;
|
|
2772
|
-
if (normalizedNonEmpty(args.record.walletId) !== String(args.walletId)) return false;
|
|
2773
|
-
if (!thresholdEcdsaChainTargetsEqual(restore.chainTarget, args.chainTarget)) return false;
|
|
2774
|
-
if (!mpcMaterialActivationRefsEqual(restore.roleLocalMaterialRef.materialActivation, durable.materialActivation)) return false;
|
|
2775
|
-
if (!mpcMaterialActivationRefsEqual(durable.materialActivation, args.manifest.activation.materialActivation)) return false;
|
|
2776
|
-
return normalizedNonEmpty(restore.roleLocalMaterialRef.durableMaterialRef) === normalizedNonEmpty(durable.durableMaterialRef);
|
|
2777
|
-
}
|
|
2778
|
-
function participantIdsEqual(left, right) {
|
|
2779
|
-
return left.length === right.length && left.every((value, index) => value === right[index]);
|
|
2780
|
-
}
|
|
2781
|
-
function authorityRefsEqual(left, right) {
|
|
2782
|
-
return left.kind === right.kind && String(left.walletId) === String(right.walletId) && String(left.authorityDigest) === String(right.authorityDigest);
|
|
2783
|
-
}
|
|
2784
|
-
function manifestIncludesTarget(args) {
|
|
2785
|
-
return args.manifest.signer.scope.targetMemberships.some((target) => thresholdEcdsaChainTargetsEqual(target, args.chainTarget));
|
|
2786
|
-
}
|
|
2787
|
-
function sealedRecordBindsManifestFacts(args) {
|
|
2788
|
-
const restore = args.record.ecdsaRestore;
|
|
2789
|
-
const durable = args.manifest.durableMaterial;
|
|
2790
|
-
const binding = durable.roleLocalBinding;
|
|
2791
|
-
const publicFacts = durable.roleLocalPublicFacts;
|
|
2792
|
-
const normalScope = restore.routerAbEcdsaDerivationNormalSigning.scope;
|
|
2793
|
-
const expectedAuthMethod = authMethodForEcdsaSealedSource(restore.source);
|
|
2794
|
-
const resolvedThresholdKeyId = normalizedNonEmpty(restore.ecdsaThresholdKeyId) || normalizedNonEmpty(normalScope.ecdsa_threshold_key_id);
|
|
2795
|
-
const resolvedClientVerifyingShare = "recordKind" in args.record ? normalizedNonEmpty(binding.clientVerifyingPublicKey33B64u) : normalizedNonEmpty(restore.clientVerifyingShareB64u) || normalizedNonEmpty(normalScope.public_identity.derivation_client_share_public_key33_b64u);
|
|
2796
|
-
const resolvedThresholdPublicKey = normalizedNonEmpty(restore.thresholdEcdsaPublicKeyB64u) || normalizedNonEmpty(normalScope.public_identity.threshold_public_key33_b64u);
|
|
2797
|
-
return String(args.manifest.signer.walletId) === String(args.walletId) && String(publicFacts.walletId) === String(args.walletId) && manifestIncludesTarget(args) && args.record.authMethod === expectedAuthMethod && authorityRefsEqual(restore.authority, args.manifest.signer.authority) && normalizedNonEmpty(restore.roleLocalMaterialRef.bindingDigest) === normalizedNonEmpty(durable.bindingDigest) && normalizedNonEmpty(restore.keyHandle) === normalizedNonEmpty(binding.keyHandle) && normalizedNonEmpty(restore.keyHandle) === normalizedNonEmpty(publicFacts.keyHandle) && resolvedThresholdKeyId === normalizedNonEmpty(binding.ecdsaThresholdKeyId) && resolvedThresholdKeyId === normalizedNonEmpty(publicFacts.ecdsaThresholdKeyId) && resolvedClientVerifyingShare === normalizedNonEmpty(binding.clientVerifyingPublicKey33B64u) && resolvedClientVerifyingShare === normalizedNonEmpty(publicFacts.derivationClientSharePublicKey33B64u) && resolvedThresholdPublicKey === normalizedNonEmpty(publicFacts.groupPublicKey33B64u) && normalizedNonEmpty(restore.relayerKeyId) === normalizedNonEmpty(binding.relayerKeyId) && participantIdsEqual(restore.participantIds, binding.participantIds) && participantIdsEqual(restore.participantIds, publicFacts.participantIds) && normalizedNonEmpty(restore.signingRootId) === normalizedNonEmpty(args.manifest.signer.signingRootId) && normalizedNonEmpty(restore.signingRootId) === normalizedNonEmpty(publicFacts.signingRootId) && normalizedNonEmpty(restore.signingRootVersion) === normalizedNonEmpty(args.manifest.signer.signingRootVersion) && normalizedNonEmpty(restore.signingRootVersion) === normalizedNonEmpty(publicFacts.signingRootVersion) && normalizedNonEmpty(restore.ethereumAddress).toLowerCase() === normalizedNonEmpty(publicFacts.ethereumAddress).toLowerCase() && routerAbEcdsaDerivationPublicCapabilitiesEqual(restore.publicCapability, publicFacts.publicCapability) && sameRouterAbEcdsaDerivationNormalSigningScopeV1(normalScope, {
|
|
2798
|
-
wallet_id: String(args.walletId),
|
|
2799
|
-
ecdsa_threshold_key_id: String(publicFacts.ecdsaThresholdKeyId),
|
|
2800
|
-
signing_root_id: String(publicFacts.signingRootId),
|
|
2801
|
-
signing_root_version: String(publicFacts.signingRootVersion),
|
|
2802
|
-
context: publicFacts.publicCapability.context,
|
|
2803
|
-
public_identity: publicFacts.publicCapability.public_identity,
|
|
2804
|
-
signing_worker: publicFacts.publicCapability.signer_set.selected_server,
|
|
2805
|
-
activation_epoch: publicFacts.publicCapability.activation_epoch,
|
|
2806
|
-
material_activation: routerAbMpcMaterialActivationRefToWire(durable.materialActivation)
|
|
2807
|
-
});
|
|
2808
|
-
}
|
|
2809
|
-
function authBindingFromRestore(args) {
|
|
2810
|
-
const restore = args.restore;
|
|
2811
|
-
if (restore.source === "email_otp") {
|
|
2812
|
-
const providerSubjectId = normalizedNonEmpty(restore.providerSubjectId);
|
|
2813
|
-
const emailHashHex = normalizedNonEmpty(restore.emailHashHex);
|
|
2814
|
-
const sealedAuthority = restore.emailOtpAuthority;
|
|
2815
|
-
const manifestAuthority = args.manifest.signer.authority;
|
|
2816
|
-
if (!providerSubjectId || !emailHashHex || !sealedAuthority || String(sealedAuthority.walletId) !== String(manifestAuthority.walletId) || String(sealedAuthority.factor.providerUserId) !== providerSubjectId || String(sealedAuthority.verifier.emailHashHex) !== emailHashHex) return null;
|
|
2817
|
-
return {
|
|
2818
|
-
kind: "email_otp",
|
|
2819
|
-
providerSubjectId,
|
|
2820
|
-
emailHashHex,
|
|
2821
|
-
emailOtpAuthority: {
|
|
2822
|
-
walletId: sealedAuthority.walletId,
|
|
2823
|
-
factor: sealedAuthority.factor,
|
|
2824
|
-
verifier: sealedAuthority.verifier,
|
|
2825
|
-
bindingId: manifestAuthority.walletAuthMethodId
|
|
2826
|
-
}
|
|
2827
|
-
};
|
|
2828
|
-
}
|
|
2829
|
-
const rpId = normalizedNonEmpty(restore.rpId);
|
|
2830
|
-
const credentialIdB64u = normalizedNonEmpty(restore.credentialIdB64u);
|
|
2831
|
-
return rpId && credentialIdB64u ? {
|
|
2832
|
-
kind: "passkey",
|
|
2833
|
-
rpId,
|
|
2834
|
-
credentialIdB64u
|
|
2835
|
-
} : null;
|
|
2836
|
-
}
|
|
2837
|
-
function exactTwoPartyParticipantIds$1(value) {
|
|
2838
|
-
if (value.length !== 2) return null;
|
|
2839
|
-
const first = value[0];
|
|
2840
|
-
const second = value[1];
|
|
2841
|
-
if (!Number.isSafeInteger(first) || !Number.isSafeInteger(second) || first <= 0 || second <= 0 || first === second) return null;
|
|
2842
|
-
return [first, second];
|
|
2843
|
-
}
|
|
2844
|
-
function materialRuntimeFromRecord(args) {
|
|
2845
|
-
const restore = args.record.ecdsaRestore;
|
|
2846
|
-
const authBinding = authBindingFromRestore({
|
|
2847
|
-
manifest: args.manifest,
|
|
2848
|
-
restore
|
|
2849
|
-
});
|
|
2850
|
-
const relayerUrl = normalizedNonEmpty(args.record.relayerUrl).replace(/\/+$/g, "");
|
|
2851
|
-
const relayerKeyId = normalizedNonEmpty(restore.relayerKeyId);
|
|
2852
|
-
const clientVerifyingPublicKey33B64u = args.manifest.durableMaterial.roleLocalBinding.clientVerifyingPublicKey33B64u;
|
|
2853
|
-
const ecdsaThresholdKeyId = normalizedNonEmpty(restore.ecdsaThresholdKeyId) || normalizedNonEmpty(restore.routerAbEcdsaDerivationNormalSigning.scope.ecdsa_threshold_key_id);
|
|
2854
|
-
const thresholdEcdsaPublicKeyB64u = normalizedNonEmpty(restore.thresholdEcdsaPublicKeyB64u) || normalizedNonEmpty(restore.routerAbEcdsaDerivationNormalSigning.scope.public_identity.threshold_public_key33_b64u);
|
|
2855
|
-
const keyHandle = normalizedNonEmpty(restore.keyHandle);
|
|
2856
|
-
const participantIds = Array.isArray(restore.participantIds) ? exactTwoPartyParticipantIds$1(restore.participantIds) : null;
|
|
2857
|
-
let roleLocalMaterialRef;
|
|
2858
|
-
try {
|
|
2859
|
-
roleLocalMaterialRef = parseEcdsaRoleLocalPersistedMaterialRef(restore.roleLocalMaterialRef);
|
|
2860
|
-
} catch {
|
|
2861
|
-
return null;
|
|
2862
|
-
}
|
|
2863
|
-
let runtimePolicyScope = null;
|
|
2864
|
-
try {
|
|
2865
|
-
runtimePolicyScope = normalizeRuntimePolicyScope(restore.runtimePolicyScope);
|
|
2866
|
-
} catch {
|
|
2867
|
-
runtimePolicyScope = null;
|
|
2868
|
-
}
|
|
2869
|
-
if (!authBinding || !relayerUrl || !relayerKeyId || !clientVerifyingPublicKey33B64u || !ecdsaThresholdKeyId || !thresholdEcdsaPublicKeyB64u || !keyHandle || !participantIds) return null;
|
|
2870
|
-
return {
|
|
2871
|
-
walletId: args.walletId,
|
|
2872
|
-
chainTarget: args.chainTarget,
|
|
2873
|
-
materialActivation: restore.roleLocalMaterialRef.materialActivation,
|
|
2874
|
-
normalSigning: restore.routerAbEcdsaDerivationNormalSigning,
|
|
2875
|
-
relayerUrl,
|
|
2876
|
-
relayerKeyId,
|
|
2877
|
-
clientVerifyingPublicKey33B64u,
|
|
2878
|
-
participantIds,
|
|
2879
|
-
ecdsaThresholdKeyId,
|
|
2880
|
-
thresholdEcdsaPublicKeyB64u,
|
|
2881
|
-
keyHandle,
|
|
2882
|
-
runtimePolicyScope,
|
|
2883
|
-
roleLocalMaterialRef,
|
|
2884
|
-
authBinding
|
|
2885
|
-
};
|
|
2886
|
-
}
|
|
2887
|
-
function runtimeFromSealedRecord(args) {
|
|
2888
|
-
const materialRuntime = materialRuntimeFromRecord(args);
|
|
2889
|
-
const expiresAtMs = Number(args.record.expiresAtMs);
|
|
2890
|
-
const remainingUses = Number(args.record.remainingUses);
|
|
2891
|
-
const thresholdSessionId = normalizedNonEmpty(args.record.thresholdSessionIds.ecdsa);
|
|
2892
|
-
const storeKey = normalizedNonEmpty(args.record.storeKey);
|
|
2893
|
-
if (!materialRuntime || !storeKey || !thresholdSessionId || !Number.isSafeInteger(expiresAtMs) || expiresAtMs <= 0 || !Number.isSafeInteger(remainingUses) || remainingUses < 0) return null;
|
|
2894
|
-
return {
|
|
2895
|
-
...materialRuntime,
|
|
2896
|
-
kind: "exact_ecdsa_sealed_runtime_v1",
|
|
2897
|
-
expiresAtMs,
|
|
2898
|
-
remainingUses,
|
|
2899
|
-
sealedRecord: {
|
|
2900
|
-
storeKey,
|
|
2901
|
-
thresholdSessionId,
|
|
2902
|
-
authMethod: args.record.authMethod
|
|
2903
|
-
}
|
|
2904
|
-
};
|
|
2905
|
-
}
|
|
2906
|
-
function resolveExactEcdsaSealedRuntime(input) {
|
|
2907
|
-
const matches = input.sealedRecords.filter((record) => sealedRecordNamesManifestMaterial({
|
|
2908
|
-
manifest: input.manifest,
|
|
2909
|
-
walletId: input.walletId,
|
|
2910
|
-
chainTarget: input.chainTarget,
|
|
2911
|
-
record
|
|
2912
|
-
}));
|
|
2913
|
-
if (matches.length === 0) return blocked$1("missing_material");
|
|
2914
|
-
if (matches.length > 1) return blocked$1("exact_record_conflict");
|
|
2915
|
-
const runtime = runtimeFromSealedRecord({
|
|
2916
|
-
manifest: input.manifest,
|
|
2917
|
-
walletId: input.walletId,
|
|
2918
|
-
chainTarget: input.chainTarget,
|
|
2919
|
-
record: matches[0]
|
|
2920
|
-
});
|
|
2921
|
-
if (!runtime) return blocked$1("corrupt");
|
|
2922
|
-
if (!sealedRecordBindsManifestFacts({
|
|
2923
|
-
manifest: input.manifest,
|
|
2924
|
-
walletId: input.walletId,
|
|
2925
|
-
chainTarget: input.chainTarget,
|
|
2926
|
-
record: matches[0]
|
|
2927
|
-
})) return blocked$1("binding_mismatch");
|
|
2928
|
-
return {
|
|
2929
|
-
kind: "resolved",
|
|
2930
|
-
runtime
|
|
2931
|
-
};
|
|
2932
|
-
}
|
|
2933
|
-
//#endregion
|
|
2934
|
-
//#region src/core/signingEngine/session/material/activeEcdsaCapabilityRuntime.ts
|
|
2935
|
-
function manifestCoversTarget(args) {
|
|
2936
|
-
return args.manifest.signer.scope.targetMemberships.some((membership) => thresholdEcdsaChainTargetsEqual(membership, args.chainTarget));
|
|
2937
|
-
}
|
|
2938
|
-
async function listActiveManifestsForTarget(args) {
|
|
2939
|
-
return (await args.ports.listActiveEcdsaCapabilityManifestsForWallet(args.walletId)).filter((manifest) => manifestCoversTarget({
|
|
2940
|
-
manifest,
|
|
2941
|
-
chainTarget: args.chainTarget
|
|
2942
|
-
}));
|
|
2943
|
-
}
|
|
2944
|
-
async function listSealedEcdsaRecordsForWallet(args) {
|
|
2945
|
-
const records = [];
|
|
2946
|
-
const authMethods = args.authMethod ? [args.authMethod] : ["passkey", "email_otp"];
|
|
2947
|
-
for (const authMethod of authMethods) {
|
|
2948
|
-
const found = await args.ports.listExactSealedSessionsForWallet({
|
|
2949
|
-
walletId: String(args.walletId),
|
|
2950
|
-
filter: {
|
|
2951
|
-
authMethod,
|
|
2952
|
-
curve: "ecdsa",
|
|
2953
|
-
chainTarget: args.chainTarget
|
|
2954
|
-
}
|
|
2955
|
-
}).catch(() => []);
|
|
2956
|
-
for (const record of found) if (record.curve === "ecdsa") records.push(record);
|
|
2957
|
-
}
|
|
2958
|
-
return records;
|
|
2959
|
-
}
|
|
2960
|
-
async function resolveExactEcdsaCapabilityRuntime(args) {
|
|
2961
|
-
if (!manifestCoversTarget({
|
|
2962
|
-
manifest: args.manifest,
|
|
2963
|
-
chainTarget: args.chainTarget
|
|
2964
|
-
})) return {
|
|
2965
|
-
kind: "blocked",
|
|
2966
|
-
reason: "chain_mismatch"
|
|
2967
|
-
};
|
|
2968
|
-
const durable = args.manifest.durableMaterial;
|
|
2969
|
-
const facts = durable.roleLocalPublicFacts;
|
|
2970
|
-
const participantIds = exactTwoPartyParticipantIds(facts.participantIds);
|
|
2971
|
-
const relayerUrl = String(args.relayerUrl).trim().replace(/\/+$/g, "");
|
|
2972
|
-
if (!participantIds || !relayerUrl) return {
|
|
2973
|
-
kind: "blocked",
|
|
2974
|
-
reason: "corrupt"
|
|
2975
|
-
};
|
|
2976
|
-
return {
|
|
2977
|
-
kind: "resolved",
|
|
2978
|
-
manifest: args.manifest,
|
|
2979
|
-
runtime: {
|
|
2980
|
-
kind: "exact_ecdsa_capability_runtime_v1",
|
|
2981
|
-
walletId: args.manifest.signer.walletId,
|
|
2982
|
-
chainTarget: args.chainTarget,
|
|
2983
|
-
materialActivation: durable.materialActivation,
|
|
2984
|
-
normalSigning: durable.routerAbEcdsaDerivationNormalSigning,
|
|
2985
|
-
relayerUrl,
|
|
2986
|
-
relayerKeyId: String(durable.roleLocalBinding.relayerKeyId),
|
|
2987
|
-
clientVerifyingPublicKey33B64u: durable.roleLocalBinding.clientVerifyingPublicKey33B64u,
|
|
2988
|
-
participantIds,
|
|
2989
|
-
ecdsaThresholdKeyId: String(facts.ecdsaThresholdKeyId),
|
|
2990
|
-
thresholdEcdsaPublicKeyB64u: facts.groupPublicKey33B64u,
|
|
2991
|
-
keyHandle: String(facts.keyHandle),
|
|
2992
|
-
runtimePolicyScope: durable.runtimePolicyScope,
|
|
2993
|
-
roleLocalMaterialRef: {
|
|
2994
|
-
kind: "ecdsa_role_local_persisted_material_ref_v1",
|
|
2995
|
-
durableMaterialRef: durable.durableMaterialRef,
|
|
2996
|
-
bindingDigest: durable.bindingDigest,
|
|
2997
|
-
materialActivation: durable.materialActivation
|
|
2998
|
-
}
|
|
2999
|
-
}
|
|
3000
|
-
};
|
|
3001
|
-
}
|
|
3002
|
-
function exactTwoPartyParticipantIds(value) {
|
|
3003
|
-
if (value.length !== 2) return null;
|
|
3004
|
-
const first = value[0];
|
|
3005
|
-
const second = value[1];
|
|
3006
|
-
if (!Number.isSafeInteger(first) || !Number.isSafeInteger(second) || first <= 0 || second <= 0 || first === second) return null;
|
|
3007
|
-
return [first, second];
|
|
3008
|
-
}
|
|
3009
|
-
async function narrowToSelectedMethod(ports, walletId, manifests) {
|
|
3010
|
-
const selected = await ports.resolveSelectedWalletAuthority(String(walletId));
|
|
3011
|
-
if (selected.kind !== "resolved") return manifests;
|
|
3012
|
-
const selectedMethodId = String(selected.authMethod.walletAuthMethodId);
|
|
3013
|
-
const matching = manifests.filter((manifest) => String(manifest.signer.authority.walletAuthMethodId) === selectedMethodId);
|
|
3014
|
-
return matching.length > 0 ? matching : manifests;
|
|
3015
|
-
}
|
|
3016
|
-
async function resolveActiveEcdsaCapabilityRuntime(ports, args) {
|
|
3017
|
-
const all = await listActiveManifestsForTarget({
|
|
3018
|
-
ports,
|
|
3019
|
-
...args
|
|
3020
|
-
});
|
|
3021
|
-
if (all.length === 0) return {
|
|
3022
|
-
kind: "blocked",
|
|
3023
|
-
reason: "missing_capability"
|
|
3024
|
-
};
|
|
3025
|
-
const manifests = all.length > 1 ? await narrowToSelectedMethod(ports, args.walletId, all) : all;
|
|
3026
|
-
if (manifests.length !== 1) return {
|
|
3027
|
-
kind: "blocked",
|
|
3028
|
-
reason: "exact_record_conflict"
|
|
3029
|
-
};
|
|
3030
|
-
const manifest = manifests[0];
|
|
3031
|
-
const sealedRecords = await listSealedEcdsaRecordsForWallet({
|
|
3032
|
-
ports,
|
|
3033
|
-
...args
|
|
3034
|
-
});
|
|
3035
|
-
const resolution = resolveExactEcdsaSealedRuntime({
|
|
3036
|
-
manifest,
|
|
3037
|
-
walletId: args.walletId,
|
|
3038
|
-
chainTarget: args.chainTarget,
|
|
3039
|
-
sealedRecords
|
|
3040
|
-
});
|
|
3041
|
-
return resolution.kind === "resolved" ? {
|
|
3042
|
-
kind: "resolved",
|
|
3043
|
-
manifest,
|
|
3044
|
-
runtime: resolution.runtime
|
|
3045
|
-
} : {
|
|
3046
|
-
kind: "blocked",
|
|
3047
|
-
reason: resolution.reason
|
|
3048
|
-
};
|
|
3049
|
-
}
|
|
3050
|
-
function createActiveEcdsaCapabilityRuntimeResolver(ports) {
|
|
3051
|
-
return resolveActiveEcdsaCapabilityRuntime.bind(null, ports);
|
|
3052
|
-
}
|
|
3053
|
-
/** Resolve by chain kind, taking the exact chain target from the manifest's own
|
|
3054
|
-
* target memberships. The warm-session envelope is keyed by kind (evm/tempo)
|
|
3055
|
-
* while correlation needs a full target, and the manifest is the authority on
|
|
3056
|
-
* which targets its capability covers. */
|
|
3057
|
-
async function resolveActiveEcdsaCapabilityRuntimeForChain(ports, args) {
|
|
3058
|
-
const manifests = await ports.listActiveEcdsaCapabilityManifestsForWallet(args.walletId);
|
|
3059
|
-
const matches = [];
|
|
3060
|
-
for (const manifest of manifests) for (const membership of manifest.signer.scope.targetMemberships) {
|
|
3061
|
-
if (membership.kind !== args.chain) continue;
|
|
3062
|
-
matches.push({
|
|
3063
|
-
manifest,
|
|
3064
|
-
chainTarget: membership
|
|
3065
|
-
});
|
|
3066
|
-
}
|
|
3067
|
-
if (matches.length === 0) return {
|
|
3068
|
-
kind: "blocked",
|
|
3069
|
-
reason: "missing_capability"
|
|
3070
|
-
};
|
|
3071
|
-
if (matches.length > 1) return {
|
|
3072
|
-
kind: "blocked",
|
|
3073
|
-
reason: "exact_record_conflict"
|
|
3074
|
-
};
|
|
3075
|
-
const match = matches[0];
|
|
3076
|
-
const sealedRecords = await listSealedEcdsaRecordsForWallet({
|
|
3077
|
-
ports,
|
|
3078
|
-
walletId: args.walletId,
|
|
3079
|
-
chainTarget: match.chainTarget
|
|
3080
|
-
});
|
|
3081
|
-
const resolution = resolveExactEcdsaSealedRuntime({
|
|
3082
|
-
manifest: match.manifest,
|
|
3083
|
-
walletId: args.walletId,
|
|
3084
|
-
chainTarget: match.chainTarget,
|
|
3085
|
-
sealedRecords
|
|
3086
|
-
});
|
|
3087
|
-
return resolution.kind === "resolved" ? {
|
|
3088
|
-
kind: "resolved",
|
|
3089
|
-
manifest: match.manifest,
|
|
3090
|
-
runtime: resolution.runtime
|
|
3091
|
-
} : {
|
|
3092
|
-
kind: "blocked",
|
|
3093
|
-
reason: resolution.reason
|
|
3094
|
-
};
|
|
3095
|
-
}
|
|
3096
|
-
function createActiveEcdsaCapabilityRuntimeForChainResolver(ports) {
|
|
3097
|
-
return resolveActiveEcdsaCapabilityRuntimeForChain.bind(null, ports);
|
|
3098
|
-
}
|
|
3099
|
-
//#endregion
|
|
3100
|
-
//#region src/core/signingEngine/threshold/ecdsa/operationStepUp.ts
|
|
3101
|
-
function requireResponseRecord(value) {
|
|
3102
|
-
if (!value || typeof value !== "object" || Array.isArray(value)) throw new Error("ECDSA operation step-up response must be an object");
|
|
3103
|
-
return value;
|
|
3104
|
-
}
|
|
3105
|
-
function parseEcdsaOperationStepUpAuthorizationResponse(value) {
|
|
3106
|
-
try {
|
|
3107
|
-
return parseRouterAbEcdsaOperationStepUpAuthorizationResponseV1(value);
|
|
3108
|
-
} catch (error) {
|
|
3109
|
-
throw new Error(error instanceof Error ? error.message : "ECDSA operation step-up response is invalid");
|
|
3110
|
-
}
|
|
3111
|
-
}
|
|
3112
|
-
function operationStepUpEndpoint(relayerUrl) {
|
|
3113
|
-
const baseUrl = String(relayerUrl || "").trim().replace(/\/+$/g, "");
|
|
3114
|
-
if (!baseUrl) throw new Error("ECDSA operation step-up relayerUrl is required");
|
|
3115
|
-
return `${baseUrl}${ROUTER_AB_ECDSA_DERIVATION_OPERATION_STEP_UP_PATH}`;
|
|
3116
|
-
}
|
|
3117
|
-
function buildEcdsaOperationStepUpPreparation(args) {
|
|
3118
|
-
const walletId = String(args.walletId || "").trim();
|
|
3119
|
-
const operationId = String(args.operationId || "").trim();
|
|
3120
|
-
const expiresAtMs = Math.floor(Number(args.expiresAtMs));
|
|
3121
|
-
if (!walletId || !operationId) throw new Error("ECDSA operation step-up identity is required");
|
|
3122
|
-
if (!Number.isSafeInteger(expiresAtMs) || expiresAtMs <= Date.now()) throw new Error("ECDSA operation step-up expiry is invalid");
|
|
3123
|
-
const materialActivation = routerAbMpcMaterialActivationRefToWire(args.materialActivation);
|
|
3124
|
-
const normalSigningScope = parseRouterAbEcdsaDerivationNormalSigningScopeV1(args.normalSigningScope);
|
|
3125
|
-
const keyHandle = String(args.keyHandle || "").trim();
|
|
3126
|
-
const relayerKeyId = String(args.relayerKeyId || "").trim();
|
|
3127
|
-
const participantIds = args.participantIds;
|
|
3128
|
-
if (normalSigningScope.wallet_id !== walletId || normalSigningScope.signing_worker.server_id !== materialActivation.signing_worker || !keyHandle || !relayerKeyId || participantIds.length !== 2 || participantIds.some((participantId) => !Number.isSafeInteger(participantId) || participantId <= 0)) throw new Error("ECDSA operation step-up signing identity is inconsistent");
|
|
3129
|
-
return {
|
|
3130
|
-
wallet_id: walletId,
|
|
3131
|
-
operation_kind: args.operationKind,
|
|
3132
|
-
operation_id: operationId,
|
|
3133
|
-
operation_digests: {
|
|
3134
|
-
lane_digest_b64u: args.operationDigests.laneDigest,
|
|
3135
|
-
intent_digest_b64u: args.operationDigests.intentDigest,
|
|
3136
|
-
display_digest_b64u: args.operationDigests.displayDigest
|
|
3137
|
-
},
|
|
3138
|
-
material_activation: materialActivation,
|
|
3139
|
-
normal_signing_scope: normalSigningScope,
|
|
3140
|
-
signing_worker_id: materialActivation.signing_worker,
|
|
3141
|
-
key_handle: keyHandle,
|
|
3142
|
-
relayer_key_id: relayerKeyId,
|
|
3143
|
-
participant_ids: [participantIds[0], participantIds[1]],
|
|
3144
|
-
expires_at_ms: expiresAtMs
|
|
3145
|
-
};
|
|
3146
|
-
}
|
|
3147
|
-
async function prepareEcdsaOperationStepUp(args) {
|
|
3148
|
-
const operation = buildEcdsaOperationStepUpPreparation(args);
|
|
3149
|
-
return {
|
|
3150
|
-
operation,
|
|
3151
|
-
challengeB64u: await computeRouterAbEcdsaOperationStepUpChallengeB64u(operation)
|
|
3152
|
-
};
|
|
3153
|
-
}
|
|
3154
|
-
/**
|
|
3155
|
-
* User-facing copy for a step-up that failed because the wallet session is no
|
|
3156
|
-
* longer usable. These are the states signing in again resolves, so the message
|
|
3157
|
-
* says that rather than restating the transport failure. Anything else keeps the
|
|
3158
|
-
* server's own wording, which is aimed at the developer.
|
|
3159
|
-
*/
|
|
3160
|
-
function ecdsaOperationStepUpSessionMessage(code, serverMessage) {
|
|
3161
|
-
switch (code) {
|
|
3162
|
-
case WALLET_SESSION_FAILURE_CODES.expired:
|
|
3163
|
-
case WALLET_SESSION_FAILURE_CODES.missing: return "Signing session expired. Sign in again to continue.";
|
|
3164
|
-
case WALLET_SESSION_FAILURE_CODES.budgetExhausted: return "Signing session budget is used up. Sign in again to continue.";
|
|
3165
|
-
default: return `ECDSA operation step-up failed: ${serverMessage}`;
|
|
3166
|
-
}
|
|
3167
|
-
}
|
|
3168
|
-
async function issueEcdsaOperationStepUpAuthorization(args) {
|
|
3169
|
-
const request = parseRouterAbEcdsaOperationStepUpAuthorizationRequestV1(args.request);
|
|
3170
|
-
const fetchImpl = args.fetchImpl ?? globalThis.fetch;
|
|
3171
|
-
if (typeof fetchImpl !== "function") throw new Error("fetch is unavailable for ECDSA operation step-up");
|
|
3172
|
-
if (args.transport?.kind === "wallet_session_bearer" && args.transport.token.trim().length === 0) throw new Error("Wallet Session operation credential is required for ECDSA operation step-up");
|
|
3173
|
-
const response = await (args.transport?.kind === "wallet_session_bearer" ? fetchWithWalletSessionBearer(fetchImpl, args.transport.token) : fetchImpl)(operationStepUpEndpoint(args.relayerUrl), {
|
|
3174
|
-
method: "POST",
|
|
3175
|
-
headers: { "Content-Type": "application/json" },
|
|
3176
|
-
credentials: "omit",
|
|
3177
|
-
body: JSON.stringify(request)
|
|
3178
|
-
});
|
|
3179
|
-
const body = await response.json().catch(() => null);
|
|
3180
|
-
if (!response.ok) {
|
|
3181
|
-
const error = requireResponseRecord(body);
|
|
3182
|
-
const message = String(error.message || `HTTP ${response.status}`);
|
|
3183
|
-
const walletSessionError = walletSessionFailureErrorFromPayload({
|
|
3184
|
-
code: error.code,
|
|
3185
|
-
message: ecdsaOperationStepUpSessionMessage(error.code, message)
|
|
3186
|
-
});
|
|
3187
|
-
if (walletSessionError) throw walletSessionError;
|
|
3188
|
-
throw new Error(`ECDSA operation step-up failed: ${message}`);
|
|
3189
|
-
}
|
|
3190
|
-
return parseEcdsaOperationStepUpAuthorizationResponse(body);
|
|
3191
|
-
}
|
|
3192
|
-
function fetchWithWalletSessionBearer(fetchImpl, token) {
|
|
3193
|
-
return async (input, init) => {
|
|
3194
|
-
const headers = new Headers(init?.headers);
|
|
3195
|
-
headers.set("Authorization", `Bearer ${token}`);
|
|
3196
|
-
return await fetchImpl(input, {
|
|
3197
|
-
...init,
|
|
3198
|
-
headers
|
|
3199
|
-
});
|
|
3200
|
-
};
|
|
3201
|
-
}
|
|
3202
|
-
//#endregion
|
|
3203
|
-
//#region src/core/signingEngine/flows/signEvmFamily/thresholdAdmission.ts
|
|
3204
|
-
async function prepareEvmFamilyEcdsaOperationStepUp(args) {
|
|
3205
|
-
const signerSession = args.material;
|
|
3206
|
-
const participantIds = signerSession.publicFacts.participantIds;
|
|
3207
|
-
if (participantIds.length !== 2) throw new Error("[chains] ECDSA operation step-up requires exactly two participants");
|
|
3208
|
-
const operationId = String(args.operation.intent.operationId || "").trim();
|
|
3209
|
-
const expiresAtMs = Math.min(Date.now() + 5 * 6e4, args.sessionExpiresAtMs);
|
|
3210
|
-
return await prepareEcdsaOperationStepUp({
|
|
3211
|
-
walletId: signerSession.walletId,
|
|
3212
|
-
operationKind: "evm.sign_transaction",
|
|
3213
|
-
operationId,
|
|
3214
|
-
operationDigests: args.operationDigests,
|
|
3215
|
-
materialActivation: signerSession.materialActivation,
|
|
3216
|
-
normalSigningScope: signerSession.routerAbEcdsaDerivationNormalSigning.state.scope,
|
|
3217
|
-
keyHandle: signerSession.publicFacts.keyHandle,
|
|
3218
|
-
relayerKeyId: signerSession.transport.relayerKeyId,
|
|
3219
|
-
participantIds: [Number(participantIds[0]), Number(participantIds[1])],
|
|
3220
|
-
expiresAtMs
|
|
3221
|
-
});
|
|
3222
|
-
}
|
|
3223
|
-
async function authorizeEvmFamilyEcdsaOperationStepUp(args) {
|
|
3224
|
-
const proof = operationStepUpProof({
|
|
3225
|
-
authority: args.authority,
|
|
3226
|
-
authorization: args.authorization
|
|
3227
|
-
});
|
|
3228
|
-
const authorization = await issueEcdsaOperationStepUpAuthorization({
|
|
3229
|
-
relayerUrl: args.relayerUrl,
|
|
3230
|
-
request: {
|
|
3231
|
-
kind: "router_ab_ecdsa_operation_step_up_v1",
|
|
3232
|
-
operation: args.prepared.operation,
|
|
3233
|
-
proof
|
|
3234
|
-
}
|
|
3235
|
-
});
|
|
3236
|
-
const credential = {
|
|
3237
|
-
kind: "operation_step_up",
|
|
3238
|
-
walletSessionToken: args.walletSessionToken
|
|
3239
|
-
};
|
|
3240
|
-
return buildReadySecp256k1SigningMaterial({
|
|
3241
|
-
walletId: args.material.walletId,
|
|
3242
|
-
signerSession: args.material,
|
|
3243
|
-
authorization: { kind: "operation_step_up" },
|
|
3244
|
-
credential,
|
|
3245
|
-
expiresAtMs: authorization.expires_at_ms,
|
|
3246
|
-
singleUseEmailOtpSession: false,
|
|
3247
|
-
operationStepUpPreparation: args.prepared.operation
|
|
3248
|
-
});
|
|
3249
|
-
}
|
|
3250
|
-
function operationStepUpProof(args) {
|
|
3251
|
-
switch (args.authorization.kind) {
|
|
3252
|
-
case "passkey": {
|
|
3253
|
-
if (!isPasskeyWalletAuthAuthority(args.authority)) throw new Error("[chains] passkey step-up requires the exact passkey authority");
|
|
3254
|
-
const credential = args.authorization.credential;
|
|
3255
|
-
return {
|
|
3256
|
-
kind: "passkey",
|
|
3257
|
-
authority: args.authority,
|
|
3258
|
-
webauthn_authentication: {
|
|
3259
|
-
id: credential.id,
|
|
3260
|
-
rawId: credential.rawId,
|
|
3261
|
-
type: credential.type,
|
|
3262
|
-
authenticatorAttachment: credential.authenticatorAttachment ?? null,
|
|
3263
|
-
response: {
|
|
3264
|
-
clientDataJSON: credential.response.clientDataJSON,
|
|
3265
|
-
authenticatorData: credential.response.authenticatorData,
|
|
3266
|
-
signature: credential.response.signature,
|
|
3267
|
-
userHandle: credential.response.userHandle ?? null
|
|
3268
|
-
},
|
|
3269
|
-
clientExtensionResults: credential.clientExtensionResults ?? null
|
|
3270
|
-
}
|
|
3271
|
-
};
|
|
3272
|
-
}
|
|
3273
|
-
case "email_otp":
|
|
3274
|
-
if (!isEmailOtpWalletAuthAuthority(args.authority)) throw new Error("[chains] Email OTP step-up requires the exact Email OTP authority");
|
|
3275
|
-
return {
|
|
3276
|
-
kind: "email_otp",
|
|
3277
|
-
authority: args.authority,
|
|
3278
|
-
challenge_id: args.authorization.challengeId,
|
|
3279
|
-
otp_code: args.authorization.otpCode
|
|
3280
|
-
};
|
|
3281
|
-
}
|
|
3282
|
-
}
|
|
3283
|
-
//#endregion
|
|
3284
|
-
//#region src/core/signingEngine/session/material/activeWalletAuthorityEcdsaRuntime.ts
|
|
3285
|
-
function blocked(reason, message) {
|
|
3286
|
-
return message ? {
|
|
3287
|
-
kind: "blocked",
|
|
3288
|
-
reason,
|
|
3289
|
-
message
|
|
3290
|
-
} : {
|
|
3291
|
-
kind: "blocked",
|
|
3292
|
-
reason
|
|
3293
|
-
};
|
|
3294
|
-
}
|
|
3295
|
-
function activeAuthorityEcdsaActivation(authority) {
|
|
3296
|
-
if (isActiveEcdsaWalletAuthorityV1(authority)) return authority.signerActivations;
|
|
3297
|
-
if (isCombinedWalletSignerActivationSetV1(authority.signerActivations)) return authority.signerActivations;
|
|
3298
|
-
return null;
|
|
3299
|
-
}
|
|
3300
|
-
function exactAuthorityResolution(value) {
|
|
3301
|
-
if (value.kind !== "resolved") switch (value.kind) {
|
|
3302
|
-
case "missing_selection": return blocked("missing_selected_authority");
|
|
3303
|
-
case "missing_auth_method":
|
|
3304
|
-
case "missing_authority":
|
|
3305
|
-
case "integrity_error": return blocked("invalid_selected_authority");
|
|
3306
|
-
default: return value;
|
|
3307
|
-
}
|
|
3308
|
-
if (value.selection.walletId !== value.authMethod.walletId || value.selection.walletAuthMethodId !== value.authMethod.walletAuthMethodId || value.authMethod.walletAuthorityId !== value.authority.authorityId || value.authority.walletId !== value.selection.walletId) return blocked("authority_identity_mismatch");
|
|
3309
|
-
if (value.selection.lockState !== "unlocked") return blocked("wallet_locked");
|
|
3310
|
-
if (value.authMethod.status !== "active") return blocked("auth_method_inactive");
|
|
3311
|
-
if (value.authority.state !== "active") return blocked("authority_inactive");
|
|
3312
|
-
return {
|
|
3313
|
-
selection: value.selection,
|
|
3314
|
-
authMethod: value.authMethod,
|
|
3315
|
-
authority: value.authority,
|
|
3316
|
-
signerMaterials: value.signerMaterials
|
|
3317
|
-
};
|
|
3318
|
-
}
|
|
3319
|
-
function exactEcdsaSignerMaterial(args) {
|
|
3320
|
-
const matches = args.materials.filter((material) => material.kind === "wallet_authority_linked_signer_material_v1" && material.keyFamily === "ecdsa_secp256k1" && material.authorityId === args.authority.authorityId && material.walletAuthMethodId === args.authMethod.walletAuthMethodId && material.activationId === args.materialActivation.activationId && mpcMaterialActivationRefsEqual(material.materialActivation, args.materialActivation));
|
|
3321
|
-
const [match] = matches;
|
|
3322
|
-
return matches.length === 1 && match ? match : null;
|
|
3323
|
-
}
|
|
3324
|
-
function linkedMaterialTargetFactorMatches(args) {
|
|
3325
|
-
const target = args.material.targetFactor;
|
|
3326
|
-
if (target.walletAuthMethodId !== args.authMethod.walletAuthMethodId) return false;
|
|
3327
|
-
if (args.authMethod.kind === "passkey") return target.kind === "passkey" && target.rpId === args.authMethod.rpId && target.credentialIdB64u === args.authMethod.credentialIdB64u;
|
|
3328
|
-
return target.kind === "email_otp" && target.emailHashHex === args.authMethod.emailHashHex && target.registrationAuthorityId === args.authMethod.registrationAuthorityId;
|
|
3329
|
-
}
|
|
3330
|
-
function exactSessionCapability(args) {
|
|
3331
|
-
return args.session.capabilitySubjects.filter((subject) => subject.kind === args.capability && subject.keyFamily === "ecdsa_secp256k1" && mpcMaterialActivationRefsEqual(subject.materialActivation, args.materialActivation)).length === 1;
|
|
3332
|
-
}
|
|
3333
|
-
function exactNormalSigningMaterialActivation(normalSigning) {
|
|
3334
|
-
try {
|
|
3335
|
-
return routerAbMpcMaterialActivationRefFromWire(normalSigning.scope.material_activation);
|
|
3336
|
-
} catch {
|
|
3337
|
-
return null;
|
|
3338
|
-
}
|
|
3339
|
-
}
|
|
3340
|
-
function normalSigningAddress(normalSigning) {
|
|
3341
|
-
try {
|
|
3342
|
-
return bytesToHex(base64UrlDecode(normalSigning.scope.public_identity.ethereum_address20_b64u));
|
|
3343
|
-
} catch {
|
|
3344
|
-
return null;
|
|
3345
|
-
}
|
|
3346
|
-
}
|
|
3347
|
-
function linkedEcdsaSourceSignerIdentitiesEqual(left, right) {
|
|
3348
|
-
return mpcMaterialActivationRefsEqual(left.activation, right.activation) && left.clientPublicKey33B64u === right.clientPublicKey33B64u && left.relayerPublicKey33B64u === right.relayerPublicKey33B64u && left.thresholdPublicKey33B64u === right.thresholdPublicKey33B64u && left.thresholdEthereumAddress20B64u === right.thresholdEthereumAddress20B64u;
|
|
3349
|
-
}
|
|
3350
|
-
function linkedEcdsaTargetRecipientPreparationsEqual(left, right) {
|
|
3351
|
-
return mpcMaterialActivationRefsEqual(left.activation, right.activation) && left.targetDeviceId === right.targetDeviceId && left.targetFactorVerificationDigestB64u === right.targetFactorVerificationDigestB64u && left.clientRecipientPublicKeyB64u === right.clientRecipientPublicKeyB64u && left.signingWorkerRecipientPublicKeyB64u === right.signingWorkerRecipientPublicKeyB64u;
|
|
3352
|
-
}
|
|
3353
|
-
function linkedEcdsaSourceContributionBindingsEqual(left, right) {
|
|
3354
|
-
return left.linkSessionId === right.linkSessionId && left.enrollmentId === right.enrollmentId && left.sourceAuthorityId === right.sourceAuthorityId && linkedEcdsaSourceSignerIdentitiesEqual(left.source, right.source) && linkedEcdsaTargetRecipientPreparationsEqual(left.target, right.target) && left.targetClientPublicKey33B64u === right.targetClientPublicKey33B64u;
|
|
3355
|
-
}
|
|
3356
|
-
function linkedEcdsaNormalSigningStatesEqual(left, right) {
|
|
3357
|
-
return left.kind === right.kind && sameRouterAbEcdsaDerivationNormalSigningScopeV1(left.scope, right.scope);
|
|
3358
|
-
}
|
|
3359
|
-
function linkedEcdsaSourceDerivationsEqual(left, right) {
|
|
3360
|
-
return left.applicationBindingDigestB64u === right.applicationBindingDigestB64u && left.clientShareRetryCounter === right.clientShareRetryCounter && left.ecdsaThresholdKeyId === right.ecdsaThresholdKeyId && linkedEcdsaNormalSigningStatesEqual(left.sourceNormalSigning, right.sourceNormalSigning);
|
|
3361
|
-
}
|
|
3362
|
-
function linkedEcdsaActivationReceiptsEqual(left, right) {
|
|
3363
|
-
return left.state === right.state && linkedEcdsaSourceContributionBindingsEqual(left.binding, right.binding) && linkedEcdsaSourceDerivationsEqual(left.sourceDerivation, right.sourceDerivation) && left.targetRelayerPublicKey33B64u === right.targetRelayerPublicKey33B64u && left.thresholdPublicKey33B64u === right.thresholdPublicKey33B64u && left.thresholdEthereumAddress20B64u === right.thresholdEthereumAddress20B64u && linkedEcdsaNormalSigningStatesEqual(left.normalSigning, right.normalSigning);
|
|
3364
|
-
}
|
|
3365
|
-
function exactHolderRuntime(args) {
|
|
3366
|
-
const runtime = resolveLinkedEcdsaHolderRuntimeV1({
|
|
3367
|
-
walletId: args.walletId,
|
|
3368
|
-
materialActivation: args.materialActivation
|
|
3369
|
-
});
|
|
3370
|
-
if (!runtime) return null;
|
|
3371
|
-
if (runtime.walletId !== args.walletId || runtime.authorityId !== args.authority.authorityId || runtime.walletAuthMethodId !== args.authMethod.walletAuthMethodId || runtime.factorAuthority.walletId !== args.walletId || runtime.factorAuthority.bindingId !== args.authMethod.walletAuthMethodId || runtime.ecdsaThresholdKeyId !== args.ecdsaThresholdKeyId || !mpcMaterialActivationRefsEqual(runtime.materialActivation, args.materialActivation) || !linkedMaterialTargetFactorMatches({
|
|
3372
|
-
material: args.material,
|
|
3373
|
-
authMethod: args.authMethod
|
|
3374
|
-
}) || !linkedEcdsaActivationReceiptsEqual(runtime.activationReceipt, args.material.publicFacts.activationReceipt)) return null;
|
|
3375
|
-
return runtime;
|
|
3376
|
-
}
|
|
3377
|
-
async function buildActiveRuntime(args) {
|
|
3378
|
-
const normalSigning = args.holderRuntime.activationReceipt.normalSigning;
|
|
3379
|
-
const normalScope = normalSigning.scope;
|
|
3380
|
-
const normalActivation = exactNormalSigningMaterialActivation(normalSigning);
|
|
3381
|
-
const normalAddress = normalSigningAddress(normalSigning);
|
|
3382
|
-
if (!normalActivation || !normalAddress || !mpcMaterialActivationRefsEqual(normalActivation, args.materialActivation) || args.signer.walletId !== args.selected.authority.walletId || normalScope.wallet_id !== String(args.selected.authority.walletId) || normalScope.ecdsa_threshold_key_id !== String(args.holderRuntime.ecdsaThresholdKeyId) || normalScope.public_identity.threshold_public_key33_b64u !== String(args.signer.thresholdPublicKey33B64u) || normalAddress.toLowerCase() !== String(args.signer.evmAddress).trim().toLowerCase() || String(args.holderRuntime.activationReceipt.thresholdPublicKey33B64u) !== String(normalScope.public_identity.threshold_public_key33_b64u) || String(args.holderRuntime.activationReceipt.thresholdEthereumAddress20B64u) !== String(normalScope.public_identity.ethereum_address20_b64u)) return blocked("normal_signing_identity_mismatch");
|
|
3383
|
-
let key;
|
|
3384
|
-
let publicFacts;
|
|
3385
|
-
let relayerKeyId;
|
|
3386
|
-
let keyHandle;
|
|
3387
|
-
try {
|
|
3388
|
-
keyHandle = await deriveEvmFamilyEcdsaKeyHandle({
|
|
3389
|
-
ecdsaThresholdKeyId: normalScope.ecdsa_threshold_key_id,
|
|
3390
|
-
signingRootId: normalScope.signing_root_id,
|
|
3391
|
-
signingRootVersion: normalScope.signing_root_version
|
|
3392
|
-
});
|
|
3393
|
-
const thresholdOwnerAddress = toThresholdOwnerAddress(args.signer.evmAddress);
|
|
3394
|
-
key = buildBaseEvmFamilyEcdsaKeyIdentity({
|
|
3395
|
-
walletId: args.selected.authority.walletId,
|
|
3396
|
-
ecdsaThresholdKeyId: normalScope.ecdsa_threshold_key_id,
|
|
3397
|
-
signingRootId: normalScope.signing_root_id,
|
|
3398
|
-
signingRootVersion: normalScope.signing_root_version,
|
|
3399
|
-
participantIds: [1, 2],
|
|
3400
|
-
thresholdOwnerAddress
|
|
3401
|
-
});
|
|
3402
|
-
publicFacts = buildVerifiedEcdsaPublicFacts({
|
|
3403
|
-
keyHandle,
|
|
3404
|
-
publicKeyB64u: normalScope.public_identity.threshold_public_key33_b64u,
|
|
3405
|
-
participantIds: [1, 2],
|
|
3406
|
-
thresholdOwnerAddress
|
|
3407
|
-
});
|
|
3408
|
-
relayerKeyId = await computeEcdsaDerivationRoleLocalRelayerKeyId({
|
|
3409
|
-
walletId: String(key.walletId),
|
|
3410
|
-
signingRootId: String(key.signingRootId),
|
|
3411
|
-
signingRootVersion: String(key.signingRootVersion)
|
|
3412
|
-
});
|
|
3413
|
-
} catch (error) {
|
|
3414
|
-
return blocked("invalid_public_facts", error instanceof Error ? error.message : String(error));
|
|
3415
|
-
}
|
|
3416
|
-
if (key.ecdsaThresholdKeyId !== args.holderRuntime.ecdsaThresholdKeyId) return blocked("normal_signing_identity_mismatch");
|
|
3417
|
-
let factorAuthorityRef;
|
|
3418
|
-
try {
|
|
3419
|
-
factorAuthorityRef = await walletAuthAuthorityRef({ authority: args.factorAuthority });
|
|
3420
|
-
} catch (error) {
|
|
3421
|
-
return blocked("authority_identity_mismatch", error instanceof Error ? error.message : String(error));
|
|
3422
|
-
}
|
|
3423
|
-
const runtime = {
|
|
3424
|
-
kind: "active_wallet_authority_ecdsa_runtime_v1",
|
|
3425
|
-
walletId: args.selected.authority.walletId,
|
|
3426
|
-
authorityId: args.selected.authority.authorityId,
|
|
3427
|
-
walletAuthMethodId: args.selected.authMethod.walletAuthMethodId,
|
|
3428
|
-
authorityDigestB64u: args.selected.authority.authorityDigestB64u,
|
|
3429
|
-
factorAuthorityRef,
|
|
3430
|
-
authorityRevocationEpoch: args.selected.authority.revocationEpoch,
|
|
3431
|
-
walletSessionId: args.operationCredential.walletSessionId,
|
|
3432
|
-
operationCredential: args.operationCredential,
|
|
3433
|
-
session: args.session,
|
|
3434
|
-
requiredCapability: args.requiredCapability,
|
|
3435
|
-
materialActivation: args.materialActivation,
|
|
3436
|
-
ecdsaThresholdKeyId: key.ecdsaThresholdKeyId,
|
|
3437
|
-
relayerKeyId,
|
|
3438
|
-
authority: args.selected.authority,
|
|
3439
|
-
authMethod: args.selected.authMethod,
|
|
3440
|
-
holderRuntime: args.holderRuntime,
|
|
3441
|
-
normalSigning,
|
|
3442
|
-
key,
|
|
3443
|
-
publicFacts
|
|
3444
|
-
};
|
|
3445
|
-
if (args.selected.authMethod.kind === "passkey") {
|
|
3446
|
-
const auth = {
|
|
3447
|
-
kind: "passkey",
|
|
3448
|
-
rpId: toRpId(args.selected.authMethod.rpId),
|
|
3449
|
-
credentialIdB64u: args.selected.authMethod.credentialIdB64u
|
|
3450
|
-
};
|
|
3451
|
-
if (!isPasskeyWalletAuthAuthority(args.factorAuthority) || args.factorAuthority.walletId !== key.walletId || args.factorAuthority.bindingId !== args.selected.authMethod.walletAuthMethodId || args.factorAuthority.factor.credentialIdB64u !== auth.credentialIdB64u || String(args.factorAuthority.verifier.rpId) !== String(auth.rpId)) return blocked("authority_identity_mismatch");
|
|
3452
|
-
const resolvedKey = buildResolvedEvmFamilyEcdsaKey({
|
|
3453
|
-
walletId: key.walletId,
|
|
3454
|
-
publicFacts,
|
|
3455
|
-
authBinding: buildPasskeyEcdsaAuthBinding({
|
|
3456
|
-
rpId: auth.rpId,
|
|
3457
|
-
credentialIdB64u: auth.credentialIdB64u
|
|
3458
|
-
})
|
|
3459
|
-
});
|
|
3460
|
-
return {
|
|
3461
|
-
...runtime,
|
|
3462
|
-
auth,
|
|
3463
|
-
factorAuthority: args.factorAuthority,
|
|
3464
|
-
resolvedKey
|
|
3465
|
-
};
|
|
3466
|
-
}
|
|
3467
|
-
if (!isEmailOtpWalletAuthAuthority(args.factorAuthority) || args.factorAuthority.walletId !== key.walletId || args.factorAuthority.bindingId !== args.selected.authMethod.walletAuthMethodId || args.factorAuthority.verifier.emailHashHex !== args.selected.authMethod.emailHashHex) return blocked("authority_identity_mismatch");
|
|
3468
|
-
const auth = {
|
|
3469
|
-
kind: "email_otp",
|
|
3470
|
-
providerSubjectId: String(args.factorAuthority.factor.providerUserId)
|
|
3471
|
-
};
|
|
3472
|
-
return {
|
|
3473
|
-
...runtime,
|
|
3474
|
-
auth,
|
|
3475
|
-
factorAuthority: args.factorAuthority
|
|
3476
|
-
};
|
|
3477
|
-
}
|
|
3478
|
-
function projectActiveRuntime(args) {
|
|
3479
|
-
if (!args.chainTarget) return null;
|
|
3480
|
-
const lane = {
|
|
3481
|
-
kind: "active_wallet_authority_ecdsa_lane_projection_v1",
|
|
3482
|
-
source: "active_wallet_authority",
|
|
3483
|
-
chainTarget: args.chainTarget,
|
|
3484
|
-
runtime: args.runtime,
|
|
3485
|
-
key: args.runtime.key,
|
|
3486
|
-
materialActivation: args.runtime.materialActivation,
|
|
3487
|
-
publicFacts: args.runtime.publicFacts,
|
|
3488
|
-
state: "deferred",
|
|
3489
|
-
authorizationState: "authorization_required"
|
|
3490
|
-
};
|
|
3491
|
-
if (args.runtime.auth.kind === "passkey") {
|
|
3492
|
-
if (!args.runtime.resolvedKey) return null;
|
|
3493
|
-
return {
|
|
3494
|
-
...lane,
|
|
3495
|
-
auth: args.runtime.auth,
|
|
3496
|
-
resolvedKey: args.runtime.resolvedKey
|
|
3497
|
-
};
|
|
3498
|
-
}
|
|
3499
|
-
return {
|
|
3500
|
-
...lane,
|
|
3501
|
-
auth: args.runtime.auth
|
|
3502
|
-
};
|
|
3503
|
-
}
|
|
3504
|
-
async function resolveActiveWalletAuthorityEcdsaRuntimeV1(args) {
|
|
3505
|
-
const { input, ports } = args;
|
|
3506
|
-
const requiredCapability = input.requiredCapability || "sign";
|
|
3507
|
-
const nowMs = Math.floor(Number(input.nowMs) || Date.now());
|
|
3508
|
-
let walletId;
|
|
3509
|
-
try {
|
|
3510
|
-
walletId = toWalletId(input.walletId);
|
|
3511
|
-
} catch (error) {
|
|
3512
|
-
return blocked("invalid_selected_authority", error instanceof Error ? error.message : String(error));
|
|
3513
|
-
}
|
|
3514
|
-
let selectedResult;
|
|
3515
|
-
try {
|
|
3516
|
-
selectedResult = await ports.resolveSelectedWalletAuthority(String(walletId));
|
|
3517
|
-
} catch (error) {
|
|
3518
|
-
return blocked("persistence_unavailable", error instanceof Error ? error.message : String(error));
|
|
3519
|
-
}
|
|
3520
|
-
const selected = exactAuthorityResolution(selectedResult);
|
|
3521
|
-
if ("kind" in selected) return selected;
|
|
3522
|
-
const ecdsaActivation = activeAuthorityEcdsaActivation(selected.authority);
|
|
3523
|
-
if (!ecdsaActivation) return blocked("missing_ecdsa_signer");
|
|
3524
|
-
const signer = ecdsaActivation.ecdsa.signer;
|
|
3525
|
-
const materialActivation = ecdsaActivation.ecdsa.materialActivation;
|
|
3526
|
-
if (input.materialActivation && !mpcMaterialActivationRefsEqual(input.materialActivation, materialActivation)) return blocked("authority_identity_mismatch");
|
|
3527
|
-
const linkedMaterial = exactEcdsaSignerMaterial({
|
|
3528
|
-
materials: selected.signerMaterials,
|
|
3529
|
-
authority: selected.authority,
|
|
3530
|
-
authMethod: selected.authMethod,
|
|
3531
|
-
materialActivation
|
|
3532
|
-
});
|
|
3533
|
-
if (!linkedMaterial || !linkedMaterialTargetFactorMatches({
|
|
3534
|
-
material: linkedMaterial,
|
|
3535
|
-
authMethod: selected.authMethod
|
|
3536
|
-
})) return blocked("missing_holder_runtime");
|
|
3537
|
-
if (String(linkedMaterial.publicFacts.ecdsaThresholdKeyId) !== String(linkedMaterial.ecdsaThresholdKeyId)) return blocked("holder_runtime_identity_mismatch");
|
|
3538
|
-
const holderRuntime = exactHolderRuntime({
|
|
3539
|
-
walletId,
|
|
3540
|
-
authority: selected.authority,
|
|
3541
|
-
authMethod: selected.authMethod,
|
|
3542
|
-
materialActivation,
|
|
3543
|
-
ecdsaThresholdKeyId: String(linkedMaterial.ecdsaThresholdKeyId),
|
|
3544
|
-
material: linkedMaterial
|
|
3545
|
-
});
|
|
3546
|
-
if (!holderRuntime) return blocked("holder_runtime_identity_mismatch");
|
|
3547
|
-
let sessionWithCredential;
|
|
3548
|
-
try {
|
|
3549
|
-
sessionWithCredential = await ports.readExactWithOperationCredential({
|
|
3550
|
-
walletId,
|
|
3551
|
-
authorityId: selected.authority.authorityId,
|
|
3552
|
-
authMethodId: selected.authMethod.walletAuthMethodId
|
|
3553
|
-
});
|
|
3554
|
-
} catch (error) {
|
|
3555
|
-
return blocked("persistence_unavailable", error instanceof Error ? error.message : String(error));
|
|
3556
|
-
}
|
|
3557
|
-
switch (sessionWithCredential.kind) {
|
|
3558
|
-
case "found": break;
|
|
3559
|
-
case "missing": return blocked("missing_wallet_session");
|
|
3560
|
-
case "upgrade_required": return blocked("upgrade_required", "Wallet Session authorization requires a newer client");
|
|
3561
|
-
}
|
|
3562
|
-
const session = sessionWithCredential.record;
|
|
3563
|
-
const operationCredential = sessionWithCredential.operationCredential;
|
|
3564
|
-
if (session.expiresAtMs <= nowMs) return blocked("wallet_session_expired");
|
|
3565
|
-
if (session.walletId !== walletId || session.authorityId !== selected.authority.authorityId || session.authMethodId !== selected.authMethod.walletAuthMethodId || session.authorityDigestB64u !== selected.authority.authorityDigestB64u || session.authorityRevocationEpoch !== selected.authority.revocationEpoch || operationCredential.walletSessionId.length === 0 || operationCredential.token.trim().length === 0) return blocked("wallet_session_identity_mismatch");
|
|
3566
|
-
if (!exactSessionCapability({
|
|
3567
|
-
session,
|
|
3568
|
-
capability: requiredCapability,
|
|
3569
|
-
materialActivation
|
|
3570
|
-
})) return blocked("wallet_session_capability_mismatch");
|
|
3571
|
-
const factorAuthority = holderRuntime.factorAuthority;
|
|
3572
|
-
const runtime = await buildActiveRuntime({
|
|
3573
|
-
selected,
|
|
3574
|
-
session,
|
|
3575
|
-
operationCredential,
|
|
3576
|
-
requiredCapability,
|
|
3577
|
-
signer,
|
|
3578
|
-
materialActivation,
|
|
3579
|
-
holderRuntime,
|
|
3580
|
-
factorAuthority
|
|
3581
|
-
});
|
|
3582
|
-
if (runtime.kind !== "active_wallet_authority_ecdsa_runtime_v1") return runtime;
|
|
3583
|
-
return {
|
|
3584
|
-
kind: "resolved",
|
|
3585
|
-
runtime,
|
|
3586
|
-
lane: projectActiveRuntime({
|
|
3587
|
-
runtime,
|
|
3588
|
-
chainTarget: input.chainTarget
|
|
3589
|
-
})
|
|
3590
|
-
};
|
|
3591
|
-
}
|
|
3592
|
-
//#endregion
|
|
3593
|
-
//#region src/core/signingEngine/flows/signEvmFamily/signingFlowRuntime.ts
|
|
3594
|
-
function buildActiveWalletAuthorityConfirmationAuthPlan(runtime) {
|
|
3595
|
-
return {
|
|
3596
|
-
kind: "active_wallet_authority",
|
|
3597
|
-
method: runtime.auth.kind,
|
|
3598
|
-
accountId: String(runtime.walletId),
|
|
3599
|
-
intent: "transaction_sign",
|
|
3600
|
-
curve: "ecdsa",
|
|
3601
|
-
walletSessionId: runtime.operationCredential.walletSessionId,
|
|
3602
|
-
authorityId: runtime.authorityId,
|
|
3603
|
-
authMethodId: runtime.walletAuthMethodId,
|
|
3604
|
-
expiresAtMs: runtime.session.expiresAtMs
|
|
3605
|
-
};
|
|
3606
|
-
}
|
|
3607
|
-
function signerAuthMethodForWalletAuthority(authority) {
|
|
3608
|
-
switch (authority.factor.kind) {
|
|
3609
|
-
case "passkey": return "passkey";
|
|
3610
|
-
case "email_otp": return "email_otp";
|
|
3611
|
-
default:
|
|
3612
|
-
authority.factor;
|
|
3613
|
-
throw new Error("[SigningEngine] unsupported wallet authorization factor");
|
|
3614
|
-
}
|
|
3615
|
-
}
|
|
3616
|
-
function capabilityMatchesOperationScope(args) {
|
|
3617
|
-
const manifest = args.capability.manifest;
|
|
3618
|
-
return manifest.signer.walletId === args.scope.walletId && mpcMaterialActivationRefsEqual(manifest.activation.materialActivation, args.scope.materialActivation) && manifest.signer.scope.targetMemberships.some((target) => thresholdEcdsaChainTargetsEqual(target, args.scope.chainTarget));
|
|
3619
|
-
}
|
|
3620
|
-
function sessionAuthorizesCanonicalEcdsaCapability(args) {
|
|
3621
|
-
const materialActivation = args.capability.manifest.activation.materialActivation;
|
|
3622
|
-
return args.session.capabilitySubjects.filter((subject) => subject.kind === "sign" && subject.keyFamily === "ecdsa_secp256k1" && mpcMaterialActivationRefsEqual(subject.materialActivation, materialActivation)).length === 1;
|
|
3623
|
-
}
|
|
3624
|
-
async function resolveExactEcdsaOperationStepUpSession(args) {
|
|
3625
|
-
if (!capabilityMatchesOperationScope(args)) throw new Error("[SigningEngine] exact ECDSA Wallet Session material changed");
|
|
3626
|
-
const ports = args.ports;
|
|
3627
|
-
const selected = await ports.resolveSelectedWalletAuthority(String(args.scope.walletId));
|
|
3628
|
-
const selectedReason = selectedStepUpAuthorityUnavailableReason(selected, args.scope.walletId);
|
|
3629
|
-
if (selectedReason || selected.kind !== "resolved") throw exactEcdsaWalletSessionUnavailable(selectedReason ?? "selected_authority_invalid");
|
|
3630
|
-
const capabilityAuthority = await walletAuthAuthorityRef({ authority: args.capability.authority });
|
|
3631
|
-
const manifestAuthority = args.capability.manifest.signer.authority;
|
|
3632
|
-
const selectedActivation = selected.authority.signerActivations.ecdsa;
|
|
3633
|
-
if (capabilityAuthority.walletId !== manifestAuthority.walletId || capabilityAuthority.walletAuthMethodId !== manifestAuthority.walletAuthMethodId || capabilityAuthority.authorityDigest !== manifestAuthority.authorityDigest || manifestAuthority.walletId !== selected.authority.walletId || manifestAuthority.walletAuthMethodId !== selected.authMethod.walletAuthMethodId || !selectedActivation || !mpcMaterialActivationRefsEqual(selectedActivation.materialActivation, args.scope.materialActivation)) throw new Error("[SigningEngine] exact ECDSA Wallet Session material changed");
|
|
3634
|
-
const read = await ports.readExactWithOperationCredential({
|
|
3635
|
-
walletId: args.scope.walletId,
|
|
3636
|
-
authorityId: selected.authority.authorityId,
|
|
3637
|
-
authMethodId: selected.authMethod.walletAuthMethodId
|
|
3638
|
-
});
|
|
3639
|
-
if (read.kind !== "found") throw exactEcdsaWalletSessionUnavailable(read.kind === "missing" ? "wallet_session_missing" : "wallet_session_upgrade_required");
|
|
3640
|
-
const session = read.record;
|
|
3641
|
-
const sessionReason = stepUpSessionRecordUnavailableReason({
|
|
3642
|
-
session,
|
|
3643
|
-
operationCredential: read.operationCredential,
|
|
3644
|
-
walletId: args.scope.walletId,
|
|
3645
|
-
authority: selected.authority,
|
|
3646
|
-
authMethod: selected.authMethod,
|
|
3647
|
-
capability: args.capability
|
|
3648
|
-
});
|
|
3649
|
-
if (sessionReason) throw exactEcdsaWalletSessionUnavailable(sessionReason);
|
|
3650
|
-
return {
|
|
3651
|
-
credential: read.operationCredential,
|
|
3652
|
-
expiresAtMs: session.expiresAtMs
|
|
3653
|
-
};
|
|
3654
|
-
}
|
|
3655
|
-
function exactEcdsaWalletSessionUnavailable(reason) {
|
|
3656
|
-
return /* @__PURE__ */ new Error(`[SigningEngine] exact ECDSA Wallet Session is unavailable: ${reason}`);
|
|
3657
|
-
}
|
|
3658
|
-
function selectedStepUpAuthorityUnavailableReason(selected, walletId) {
|
|
3659
|
-
if (selected.kind !== "resolved") return selected.kind === "missing_selection" ? "selected_authority_missing" : "selected_authority_invalid";
|
|
3660
|
-
if (selected.selection.walletId !== walletId || selected.authMethod.walletId !== walletId || selected.authority.walletId !== walletId || selected.selection.walletAuthMethodId !== selected.authMethod.walletAuthMethodId || selected.authMethod.walletAuthorityId !== selected.authority.authorityId) return "authority_identity_mismatch";
|
|
3661
|
-
if (selected.selection.lockState !== "unlocked") return "wallet_locked";
|
|
3662
|
-
if (selected.authMethod.status !== "active") return "auth_method_inactive";
|
|
3663
|
-
if (selected.authority.state !== "active") return "authority_inactive";
|
|
3664
|
-
return null;
|
|
3665
|
-
}
|
|
3666
|
-
function stepUpSessionRecordUnavailableReason(args) {
|
|
3667
|
-
const { session } = args;
|
|
3668
|
-
if (session.walletId !== args.walletId || session.authorityId !== args.authority.authorityId || session.authMethodId !== args.authMethod.walletAuthMethodId) return "wallet_session_identity_mismatch (authority or method)";
|
|
3669
|
-
if (session.authorityDigestB64u !== args.authority.authorityDigestB64u) return "wallet_session_identity_mismatch (authority digest)";
|
|
3670
|
-
if (session.authorityRevocationEpoch !== args.authority.revocationEpoch) return "wallet_session_identity_mismatch (authority revocation epoch)";
|
|
3671
|
-
if (!args.operationCredential.token.trim()) return "wallet_session_identity_mismatch (operation credential)";
|
|
3672
|
-
if (session.expiresAtMs <= Date.now()) return "wallet_session_expired";
|
|
3673
|
-
if (!sessionAuthorizesCanonicalEcdsaCapability({
|
|
3674
|
-
session,
|
|
3675
|
-
capability: args.capability
|
|
3676
|
-
})) return "wallet_session_capability_mismatch";
|
|
3677
|
-
return null;
|
|
3678
|
-
}
|
|
3679
|
-
async function prepareSessionBoundEcdsaOperationStepUp(sessionScope, input) {
|
|
3680
|
-
const session = await resolveExactEcdsaOperationStepUpSession(sessionScope);
|
|
3681
|
-
return await prepareEvmFamilyEcdsaOperationStepUp({
|
|
3682
|
-
operation: input.operation,
|
|
3683
|
-
operationDigests: input.operationDigests,
|
|
3684
|
-
material: input.material,
|
|
3685
|
-
sessionExpiresAtMs: session.expiresAtMs
|
|
3686
|
-
});
|
|
3687
|
-
}
|
|
3688
|
-
async function runSerializedEcdsaMaterialUse(args, task) {
|
|
3689
|
-
return await args.deps.withThresholdEcdsaSigningQueue({
|
|
3690
|
-
queueKey: resolveThresholdEcdsaSigningQueueKey({ materialActivation: args.materialActivation }),
|
|
3691
|
-
walletId: args.walletId,
|
|
3692
|
-
enabled: true,
|
|
3693
|
-
...args.shouldAbort ? { shouldAbort: args.shouldAbort } : {},
|
|
3694
|
-
task
|
|
3695
|
-
});
|
|
3696
|
-
}
|
|
3697
|
-
function requireEvmFamilyRelayerUrl(deps) {
|
|
3698
|
-
const relayerUrl = String(deps.seamsWebConfigs.network.relayer?.url || "").trim();
|
|
3699
|
-
if (!relayerUrl) throw new Error("[SigningEngine] EVM-family signing requires relayerUrl");
|
|
3700
|
-
return relayerUrl;
|
|
3701
|
-
}
|
|
3702
|
-
async function resolveCurrentActiveWalletAuthorityRuntime(args) {
|
|
3703
|
-
const current = await resolveActiveWalletAuthorityEcdsaRuntimeV1({
|
|
3704
|
-
ports: args.deps.activeWalletAuthorityEcdsaRuntimeReadPorts,
|
|
3705
|
-
input: {
|
|
3706
|
-
walletId: args.signer.walletId,
|
|
3707
|
-
chainTarget: args.signer.chainTarget,
|
|
3708
|
-
requiredCapability: "sign",
|
|
3709
|
-
materialActivation: args.signer.materialActivation,
|
|
3710
|
-
nowMs: Date.now()
|
|
3711
|
-
}
|
|
3712
|
-
});
|
|
3713
|
-
if (current.kind !== "resolved") throw new Error(`[SigningEngine] active Wallet Authority ECDSA runtime is ${current.reason}`);
|
|
3714
|
-
const runtime = current.runtime;
|
|
3715
|
-
if (runtime.authorityId !== args.prepared.authorityId || runtime.walletAuthMethodId !== args.prepared.walletAuthMethodId || runtime.authorityDigestB64u !== args.prepared.authorityDigestB64u || runtime.authorityRevocationEpoch !== args.prepared.authorityRevocationEpoch || runtime.walletSessionId !== args.prepared.walletSessionId || runtime.publicFacts.keyHandle !== args.signer.keyHandle) throw new Error("[SigningEngine] active Wallet Authority ECDSA runtime was replaced");
|
|
3716
|
-
return runtime;
|
|
3717
|
-
}
|
|
3718
|
-
/** The wallet's active manifest names the material that may be used right now.
|
|
3719
|
-
* When it has moved on from the one this operation was prepared against, the
|
|
3720
|
-
* preparation is superseded -- material activation is advance-only, so the
|
|
3721
|
-
* prepared side is always the stale one. That is a re-resolution, not a failure
|
|
3722
|
-
* and not a request for the wrong material. */
|
|
3723
|
-
function ecdsaSigningMaterialSupersession(args) {
|
|
3724
|
-
if (mpcMaterialActivationRefsEqual(args.currentMaterialActivation, args.preparedMaterialActivation)) return null;
|
|
3725
|
-
return {
|
|
3726
|
-
kind: "superseded",
|
|
3727
|
-
supersessionKind: "material_activation_replaced",
|
|
3728
|
-
preparedMaterialActivation: args.preparedMaterialActivation,
|
|
3729
|
-
currentMaterialActivation: args.currentMaterialActivation
|
|
3730
|
-
};
|
|
3731
|
-
}
|
|
3732
|
-
function ecdsaSigningCapabilitySupersession(args) {
|
|
3733
|
-
const preparedManifest = args.preparedCapability.manifest;
|
|
3734
|
-
const preparedActivation = preparedManifest.activation.materialActivation;
|
|
3735
|
-
const currentActivation = args.currentManifest.activation.materialActivation;
|
|
3736
|
-
const activationSupersession = ecdsaSigningMaterialSupersession({
|
|
3737
|
-
preparedMaterialActivation: preparedActivation,
|
|
3738
|
-
currentMaterialActivation: currentActivation
|
|
3739
|
-
});
|
|
3740
|
-
if (activationSupersession) return activationSupersession;
|
|
3741
|
-
const preparedSigner = preparedManifest.signer;
|
|
3742
|
-
const currentSigner = args.currentManifest.signer;
|
|
3743
|
-
if (String(preparedManifest.identity.manifestId) === String(args.currentManifest.identity.manifestId) && Number(preparedManifest.identity.manifestRevision) === Number(args.currentManifest.identity.manifestRevision) && String(preparedSigner.capability) === String(currentSigner.capability) && String(preparedSigner.authority.walletId) === String(currentSigner.authority.walletId) && String(preparedSigner.authority.authorityDigest) === String(currentSigner.authority.authorityDigest)) return null;
|
|
3744
|
-
return {
|
|
3745
|
-
kind: "superseded",
|
|
3746
|
-
supersessionKind: "capability_authority_replaced",
|
|
3747
|
-
preparedMaterialActivation: preparedActivation,
|
|
3748
|
-
currentMaterialActivation: currentActivation
|
|
3749
|
-
};
|
|
3750
|
-
}
|
|
3751
|
-
function ecdsaSigningAuthorizationSupersession(args) {
|
|
3752
|
-
const prepared = args.preparedAuthorization;
|
|
3753
|
-
const current = args.currentAuthorization;
|
|
3754
|
-
if (current && prepared.selectedAuthority.authorityId === current.selectedAuthority.authorityId && prepared.selectedAuthMethod.kind === current.selectedAuthMethod.kind && prepared.selectedAuthMethod.walletAuthMethodId === current.selectedAuthMethod.walletAuthMethodId && prepared.session.walletId === current.session.walletId && prepared.session.authorityId === current.session.authorityId && prepared.session.authMethodId === current.session.authMethodId && prepared.session.authorizationId === current.session.authorizationId && prepared.session.quotaId === current.session.quotaId && (prepared.session.authorityDigestB64u === current.session.authorityDigestB64u || isEd25519ExtensionOfEcdsaWalletAuthority(prepared.selectedAuthority, current.selectedAuthority) && walletSessionPreservesCapabilities(prepared.session, current.session)) && prepared.session.issuedAtMs === current.session.issuedAtMs && prepared.session.expiresAtMs === current.session.expiresAtMs && prepared.session.authorityRevocationEpoch === current.session.authorityRevocationEpoch && prepared.operationCredential.walletSessionId === current.operationCredential.walletSessionId && prepared.operationCredential.token === current.operationCredential.token && exactEcdsaWalletSessionRuntimesMatch(prepared.runtime, current.runtime) && mpcMaterialActivationRefsEqual(current.runtime.materialActivation, args.materialActivation)) return null;
|
|
3755
|
-
return {
|
|
3756
|
-
kind: "superseded",
|
|
3757
|
-
supersessionKind: "reusable_authorization_replaced",
|
|
3758
|
-
preparedMaterialActivation: args.materialActivation,
|
|
3759
|
-
currentMaterialActivation: args.materialActivation
|
|
3760
|
-
};
|
|
3761
|
-
}
|
|
3762
|
-
async function resolveEcdsaSigningMaterialHydrationPlan(args) {
|
|
3763
|
-
const activeRuntimeResolution = await resolveExactEcdsaCapabilityRuntime({
|
|
3764
|
-
manifest: args.capability.manifest,
|
|
3765
|
-
chainTarget: args.chainTarget,
|
|
3766
|
-
relayerUrl: args.relayerUrl
|
|
3767
|
-
});
|
|
3768
|
-
if (activeRuntimeResolution.kind !== "resolved") return {
|
|
3769
|
-
kind: "failed",
|
|
3770
|
-
failure: {
|
|
3771
|
-
kind: "unavailable",
|
|
3772
|
-
reason: "runtime_correlation_mismatch"
|
|
3773
|
-
}
|
|
3774
|
-
};
|
|
3775
|
-
const superseded = ecdsaSigningCapabilitySupersession({
|
|
3776
|
-
preparedCapability: args.capability,
|
|
3777
|
-
currentManifest: activeRuntimeResolution.manifest
|
|
3778
|
-
});
|
|
3779
|
-
if (superseded) return {
|
|
3780
|
-
kind: "superseded",
|
|
3781
|
-
replacement: superseded
|
|
3782
|
-
};
|
|
3783
|
-
if (args.preparedAuthorization) {
|
|
3784
|
-
const authorizationSupersession = ecdsaSigningAuthorizationSupersession({
|
|
3785
|
-
preparedAuthorization: args.preparedAuthorization,
|
|
3786
|
-
currentAuthorization: args.currentAuthorization,
|
|
3787
|
-
materialActivation: args.materialActivation
|
|
3788
|
-
});
|
|
3789
|
-
if (authorizationSupersession) return {
|
|
3790
|
-
kind: "superseded",
|
|
3791
|
-
replacement: authorizationSupersession
|
|
3792
|
-
};
|
|
3793
|
-
}
|
|
3794
|
-
const resolution = await resolveHydratedSecp256k1SigningMaterial({
|
|
3795
|
-
capability: args.capability,
|
|
3796
|
-
runtime: activeRuntimeResolution.runtime,
|
|
3797
|
-
chainTarget: args.chainTarget,
|
|
3798
|
-
materialActivation: args.materialActivation,
|
|
3799
|
-
workerCtx: args.workerCtx
|
|
3800
|
-
});
|
|
3801
|
-
if (resolution.kind === "unavailable") return {
|
|
3802
|
-
kind: "failed",
|
|
3803
|
-
failure: resolution
|
|
3804
|
-
};
|
|
3805
|
-
if (!args.preparedAuthorization) return {
|
|
3806
|
-
kind: "authorization_required",
|
|
3807
|
-
requirement: {
|
|
3808
|
-
kind: "material_for_step_up",
|
|
3809
|
-
material: resolution.material
|
|
3810
|
-
}
|
|
3811
|
-
};
|
|
3812
|
-
if (!args.currentAuthorization) return {
|
|
3813
|
-
kind: "superseded",
|
|
3814
|
-
replacement: {
|
|
3815
|
-
kind: "superseded",
|
|
3816
|
-
supersessionKind: "reusable_authorization_replaced",
|
|
3817
|
-
preparedMaterialActivation: args.materialActivation,
|
|
3818
|
-
currentMaterialActivation: args.materialActivation
|
|
3819
|
-
}
|
|
3820
|
-
};
|
|
3821
|
-
return {
|
|
3822
|
-
kind: "ready",
|
|
3823
|
-
value: {
|
|
3824
|
-
kind: "material_from_canonical_capability",
|
|
3825
|
-
material: attachExactEcdsaWalletSessionAuthorization({
|
|
3826
|
-
material: resolution.material,
|
|
3827
|
-
capability: args.capability,
|
|
3828
|
-
authorization: args.currentAuthorization,
|
|
3829
|
-
nowMs: Date.now()
|
|
3830
|
-
})
|
|
3831
|
-
}
|
|
3832
|
-
};
|
|
3833
|
-
}
|
|
3834
|
-
async function createEvmFamilySigningFlowRuntime(args) {
|
|
3835
|
-
const [Secp256k1Engine, WebAuthnP256Engine] = await Promise.all([loadSecp256k1EngineCtor(), loadWebAuthnP256EngineCtor()]);
|
|
3836
|
-
const workerCtx = args.deps.getSignerWorkerContext();
|
|
3837
|
-
const ctx = args.deps.touchConfirm.getContext();
|
|
3838
|
-
const walletId = toWalletId(args.walletSession.walletId);
|
|
3839
|
-
const relayerUrl = requireEvmFamilyRelayerUrl(args.deps);
|
|
3840
|
-
const resolvedSigner = args.senderSignatureAlgorithm === "secp256k1" ? requireEvmFamilyEcdsaSigner(args.getEcdsaSigningLaneIdentity(), "ECDSA signing material hydration") : void 0;
|
|
3841
|
-
if (args.activeWalletAuthority && !resolvedSigner) throw new Error("[SigningEngine] active Wallet Authority runtime requires a threshold ECDSA signer");
|
|
3842
|
-
const capability = resolvedSigner && !args.activeWalletAuthority ? await args.deps.resolveCanonicalEcdsaSigningCapability({
|
|
3843
|
-
walletId: resolvedSigner.walletId,
|
|
3844
|
-
chainTarget: resolvedSigner.chainTarget,
|
|
3845
|
-
materialActivation: resolvedSigner.materialActivation
|
|
3846
|
-
}) : void 0;
|
|
3847
|
-
const activeAuthorization = resolvedSigner && !args.activeWalletAuthority ? await args.deps.resolveActiveEcdsaWalletSessionAuthorization({
|
|
3848
|
-
walletId: resolvedSigner.walletId,
|
|
3849
|
-
chainTarget: resolvedSigner.chainTarget,
|
|
3850
|
-
materialActivation: resolvedSigner.materialActivation
|
|
3851
|
-
}) : null;
|
|
3852
|
-
const exactOperationCredentialScope = resolvedSigner && capability && !args.activeWalletAuthority ? {
|
|
3853
|
-
walletId: resolvedSigner.walletId,
|
|
3854
|
-
chainTarget: resolvedSigner.chainTarget,
|
|
3855
|
-
materialActivation: resolvedSigner.materialActivation
|
|
3856
|
-
} : void 0;
|
|
3857
|
-
const thresholdEcdsaStepUpRuntime = !args.activeWalletAuthority && capability && exactOperationCredentialScope ? {
|
|
3858
|
-
...args.emailOtpSigningForFlow ? { emailOtpSigning: args.emailOtpSigningForFlow } : {},
|
|
3859
|
-
reusableAuthorization: activeAuthorization ? { kind: "active" } : {
|
|
3860
|
-
kind: "absent",
|
|
3861
|
-
requiredFactor: signerAuthMethodForWalletAuthority(capability.authority)
|
|
3862
|
-
},
|
|
3863
|
-
operationStepUp: {
|
|
3864
|
-
prepare: prepareSessionBoundEcdsaOperationStepUp.bind(void 0, {
|
|
3865
|
-
ports: args.deps.activeWalletAuthorityEcdsaRuntimeReadPorts,
|
|
3866
|
-
scope: exactOperationCredentialScope,
|
|
3867
|
-
capability
|
|
3868
|
-
}),
|
|
3869
|
-
authorize: async ({ authorization, prepared, material }) => {
|
|
3870
|
-
args.onAuthSideEffectStarted?.(authorization.kind === "passkey" ? "passkey_reauth" : "email_otp_challenge");
|
|
3871
|
-
const session = await resolveExactEcdsaOperationStepUpSession({
|
|
3872
|
-
ports: args.deps.activeWalletAuthorityEcdsaRuntimeReadPorts,
|
|
3873
|
-
scope: exactOperationCredentialScope,
|
|
3874
|
-
capability
|
|
3875
|
-
});
|
|
3876
|
-
return await authorizeEvmFamilyEcdsaOperationStepUp({
|
|
3877
|
-
relayerUrl,
|
|
3878
|
-
authority: capability.authority,
|
|
3879
|
-
authorization,
|
|
3880
|
-
prepared,
|
|
3881
|
-
material,
|
|
3882
|
-
walletSessionToken: session.credential.token
|
|
3883
|
-
});
|
|
3884
|
-
}
|
|
3885
|
-
},
|
|
3886
|
-
...args.onAuthSideEffectStarted ? { onAuthSideEffectStarted: args.onAuthSideEffectStarted } : {}
|
|
3887
|
-
} : void 0;
|
|
3888
|
-
const secp256k1Engine = new Secp256k1Engine({
|
|
3889
|
-
beforeSigning: args.deps.beforeSigning,
|
|
3890
|
-
getRpId: () => ctx.touchIdPrompt.getRpId(),
|
|
3891
|
-
workerCtx,
|
|
3892
|
-
shouldAbort: args.shouldAbort
|
|
3893
|
-
});
|
|
3894
|
-
const activeWalletAuthority = args.activeWalletAuthority;
|
|
3895
|
-
const activeWalletAuthorityAuthorization = activeWalletAuthority && resolvedSigner ? {
|
|
3896
|
-
kind: "active_wallet_authority",
|
|
3897
|
-
confirmationAuthPlan: activeWalletAuthority.confirmationAuthPlan,
|
|
3898
|
-
sign: async (input) => {
|
|
3899
|
-
if (String(activeWalletAuthority.intent.operationId) !== input.operationId) throw new Error("[SigningEngine] active Wallet Authority signing operation identity changed");
|
|
3900
|
-
return await runSerializedEcdsaMaterialUse({
|
|
3901
|
-
deps: args.deps,
|
|
3902
|
-
walletId: resolvedSigner.walletId,
|
|
3903
|
-
materialActivation: resolvedSigner.materialActivation,
|
|
3904
|
-
...args.shouldAbort ? { shouldAbort: args.shouldAbort } : {}
|
|
3905
|
-
}, async () => {
|
|
3906
|
-
const readyMaterial = buildActiveWalletAuthorityReadySecp256k1Material({
|
|
3907
|
-
authorityRuntime: await resolveCurrentActiveWalletAuthorityRuntime({
|
|
3908
|
-
deps: args.deps,
|
|
3909
|
-
prepared: activeWalletAuthority.runtime,
|
|
3910
|
-
signer: resolvedSigner
|
|
3911
|
-
}),
|
|
3912
|
-
chainTarget: resolvedSigner.chainTarget,
|
|
3913
|
-
relayerUrl
|
|
3914
|
-
});
|
|
3915
|
-
return await secp256k1Engine.signReady({
|
|
3916
|
-
kind: "digest",
|
|
3917
|
-
algorithm: "secp256k1",
|
|
3918
|
-
digest32: input.signingDigest32
|
|
3919
|
-
}, readyMaterial, {
|
|
3920
|
-
intent: activeWalletAuthority.intent,
|
|
3921
|
-
authPlan: activeWalletAuthority.confirmationAuthPlan
|
|
3922
|
-
}, input.operationDigests);
|
|
3923
|
-
});
|
|
3924
|
-
}
|
|
3925
|
-
} : void 0;
|
|
3926
|
-
return { flowArgs: {
|
|
3927
|
-
ctx,
|
|
3928
|
-
touchConfirm: args.deps.touchConfirm,
|
|
3929
|
-
workerCtx,
|
|
3930
|
-
walletId,
|
|
3931
|
-
onEvent: args.onEvent,
|
|
3932
|
-
engines: {
|
|
3933
|
-
secp256k1: secp256k1Engine,
|
|
3934
|
-
webauthnP256: new WebAuthnP256Engine(workerCtx, args.deps.beforeSigning)
|
|
3935
|
-
},
|
|
3936
|
-
...resolvedSigner && capability ? {
|
|
3937
|
-
runEcdsaMaterialUse: runSerializedEcdsaMaterialUse.bind(null, {
|
|
3938
|
-
deps: args.deps,
|
|
3939
|
-
walletId: resolvedSigner.walletId,
|
|
3940
|
-
materialActivation: resolvedSigner.materialActivation,
|
|
3941
|
-
...args.shouldAbort ? { shouldAbort: args.shouldAbort } : {}
|
|
3942
|
-
}),
|
|
3943
|
-
resolveEcdsaSigningMaterialPlan: async () => await resolveEcdsaSigningMaterialHydrationPlan({
|
|
3944
|
-
capability,
|
|
3945
|
-
preparedAuthorization: activeAuthorization,
|
|
3946
|
-
currentAuthorization: activeAuthorization ? await args.deps.resolveActiveEcdsaWalletSessionAuthorization({
|
|
3947
|
-
walletId: resolvedSigner.walletId,
|
|
3948
|
-
chainTarget: resolvedSigner.chainTarget,
|
|
3949
|
-
materialActivation: resolvedSigner.materialActivation
|
|
3950
|
-
}) : null,
|
|
3951
|
-
walletId: resolvedSigner.walletId,
|
|
3952
|
-
chainTarget: resolvedSigner.chainTarget,
|
|
3953
|
-
materialActivation: resolvedSigner.materialActivation,
|
|
3954
|
-
relayerUrl,
|
|
3955
|
-
workerCtx
|
|
3956
|
-
})
|
|
3957
|
-
} : {},
|
|
3958
|
-
...activeWalletAuthorityAuthorization ? { authorization: activeWalletAuthorityAuthorization } : {},
|
|
3959
|
-
...args.signingSessionPlan ? { signingSessionPlan: args.signingSessionPlan } : {},
|
|
3960
|
-
...args.signingOperation ? { signingOperation: args.signingOperation } : {},
|
|
3961
|
-
onSigningOperationTransition: args.onSigningOperationTransition || emitEvmFamilySigningOperationTrace,
|
|
3962
|
-
...thresholdEcdsaStepUpRuntime ? { thresholdEcdsaStepUpRuntime } : {},
|
|
3963
|
-
confirmationConfigOverride: args.confirmationConfigOverride
|
|
3964
|
-
} };
|
|
3965
|
-
}
|
|
3966
|
-
//#endregion
|
|
3967
|
-
//#region src/core/signingEngine/flows/signEvmFamily/freshAuthRetryPolicy.ts
|
|
3968
|
-
function ownerOperationAuthorizationDecisionFromError(error) {
|
|
3969
|
-
return error instanceof WalletSessionQuotaAdmissionError ? error.authorizationDecision : void 0;
|
|
3970
|
-
}
|
|
3971
|
-
async function runEvmFamilyFreshAuthRetry(args) {
|
|
3972
|
-
switch (args.decision.retryMode) {
|
|
3973
|
-
case "await_admission_owner_completion": return await args.signingSessionCoordinator.runWalletSessionQuotaAdmissionRetry({
|
|
3974
|
-
queueKey: args.queueKey,
|
|
3975
|
-
refresh: args.rereadAuthoritativeReadiness,
|
|
3976
|
-
retryAfterRefresh: args.rereadAuthoritativeReadiness
|
|
3977
|
-
});
|
|
3978
|
-
case "email_otp_single_operation_step_up":
|
|
3979
|
-
case "fresh_auth": return await args.signingSessionCoordinator.runWalletSessionQuotaAdmissionRetry({
|
|
3980
|
-
queueKey: args.queueKey,
|
|
3981
|
-
refresh: args.performFreshAuth,
|
|
3982
|
-
retryAfterRefresh: args.rereadAuthoritativeReadiness
|
|
3983
|
-
});
|
|
3984
|
-
default: return assertNeverEvmFamilyFreshAuthRetryMode(args.decision);
|
|
3985
|
-
}
|
|
3986
|
-
}
|
|
3987
|
-
function assertNeverEvmFamilyFreshAuthRetryMode(value) {
|
|
3988
|
-
throw new Error(`[SigningEngine][ecdsa] unsupported fresh-auth retry mode: ${String(value)}`);
|
|
3989
|
-
}
|
|
3990
|
-
function buildBlockedEvmFamilyFreshAuthRetryDecision(args) {
|
|
3991
|
-
return {
|
|
3992
|
-
kind: "do_not_retry",
|
|
3993
|
-
trigger: args.trigger,
|
|
3994
|
-
sideEffectState: args.sideEffectState,
|
|
3995
|
-
blockedReason: args.blockedReason
|
|
3996
|
-
};
|
|
3997
|
-
}
|
|
3998
|
-
function blockEvmFamilyFreshAuthRetry(args, blockedReason) {
|
|
3999
|
-
return buildBlockedEvmFamilyFreshAuthRetryDecision({
|
|
4000
|
-
trigger: args.trigger,
|
|
4001
|
-
sideEffectState: args.sideEffectState,
|
|
4002
|
-
blockedReason
|
|
4003
|
-
});
|
|
4004
|
-
}
|
|
4005
|
-
function nextEvmFamilyFreshAuthRetrySideEffectState(args) {
|
|
4006
|
-
if (args.current === "threshold_reconnect_started") return args.current;
|
|
4007
|
-
switch (args.sideEffect) {
|
|
4008
|
-
case "auth_prompt_shown":
|
|
4009
|
-
case "email_otp_challenge":
|
|
4010
|
-
case "passkey_reauth": return args.current === "no_auth_side_effect_started" ? "auth_prompt_shown" : args.current;
|
|
4011
|
-
case "auth_confirmed": return "auth_confirmed";
|
|
4012
|
-
case "threshold_reconnect": return "threshold_reconnect_started";
|
|
4013
|
-
}
|
|
4014
|
-
}
|
|
4015
|
-
function classifyEvmFamilyFreshAuthRetry(args) {
|
|
4016
|
-
if (args.alreadyRetryingFreshAuth) return blockEvmFamilyFreshAuthRetry(args, "already_retrying");
|
|
4017
|
-
if (args.senderSignatureAlgorithm !== "secp256k1") return blockEvmFamilyFreshAuthRetry(args, "non_secp256k1_sender");
|
|
4018
|
-
const ownerDecision = ownerOperationAuthorizationDecisionFromError(args.error);
|
|
4019
|
-
const admissionFailure = classifyWalletSessionQuotaAdmissionFailure(args.error);
|
|
4020
|
-
const admissionDecision = args.trigger === "wallet_signing_budget_exhausted" ? ownerDecision?.kind === "step_up_required" ? decideWalletSessionQuotaAdmissionFailure(admissionFailure ?? {
|
|
4021
|
-
kind: "exhausted",
|
|
4022
|
-
source: "server_prepare",
|
|
4023
|
-
detail: "Server requires owner operation step-up"
|
|
4024
|
-
}) : admissionFailure?.kind === "in_flight" ? decideWalletSessionQuotaAdmissionFailure(admissionFailure) : null : null;
|
|
4025
|
-
const admissionCanRetryAfterSideEffect = admissionDecision?.kind === "request_fresh_step_up" || admissionDecision?.kind === "wait_and_retry_admission";
|
|
4026
|
-
if (args.sideEffectState !== "no_auth_side_effect_started" && !admissionCanRetryAfterSideEffect) return blockEvmFamilyFreshAuthRetry(args, "auth_side_effect_started");
|
|
4027
|
-
if (args.trigger === "wallet_session_reauthorization_required") {
|
|
4028
|
-
if (args.hasEmailOtpSigningPlan || args.hasStepUpAuthPlan) return blockEvmFamilyFreshAuthRetry(args, "signing_auth_plan_already_selected");
|
|
4029
|
-
if (ownerDecision?.kind !== "step_up_required") return blockEvmFamilyFreshAuthRetry(args, "error_not_retryable");
|
|
4030
|
-
if (args.accountAuth.primaryAuthMethod !== SIGNER_AUTH_METHODS.emailOtp && args.accountAuth.primaryAuthMethod !== SIGNER_AUTH_METHODS.passkey) return blockEvmFamilyFreshAuthRetry(args, "unsupported_primary_auth");
|
|
4031
|
-
} else {
|
|
4032
|
-
if (!admissionDecision) return blockEvmFamilyFreshAuthRetry(args, "error_not_retryable");
|
|
4033
|
-
if (args.hasStepUpAuthPlan && admissionDecision.kind !== "request_fresh_step_up" && admissionDecision.kind !== "wait_and_retry_admission") return blockEvmFamilyFreshAuthRetry(args, "step_up_auth_plan_already_selected");
|
|
4034
|
-
if (admissionDecision.kind === "wait_and_retry_admission") {
|
|
4035
|
-
if (args.admissionRetryState.kind === "authoritative_readiness_reread") return blockEvmFamilyFreshAuthRetry(args, "authoritative_readiness_still_in_flight");
|
|
4036
|
-
return {
|
|
4037
|
-
kind: "retry",
|
|
4038
|
-
trigger: args.trigger,
|
|
4039
|
-
sideEffectState: args.sideEffectState,
|
|
4040
|
-
retryMode: "await_admission_owner_completion",
|
|
4041
|
-
admissionDecision
|
|
4042
|
-
};
|
|
4043
|
-
}
|
|
4044
|
-
if (args.activeSigningAuthMethod === SIGNER_AUTH_METHODS.emailOtp) return {
|
|
4045
|
-
kind: "retry",
|
|
4046
|
-
trigger: args.trigger,
|
|
4047
|
-
sideEffectState: args.sideEffectState,
|
|
4048
|
-
retryMode: "email_otp_single_operation_step_up",
|
|
4049
|
-
admissionDecision
|
|
4050
|
-
};
|
|
4051
|
-
}
|
|
4052
|
-
return {
|
|
4053
|
-
kind: "retry",
|
|
4054
|
-
trigger: args.trigger,
|
|
4055
|
-
sideEffectState: args.sideEffectState,
|
|
4056
|
-
retryMode: "fresh_auth"
|
|
4057
|
-
};
|
|
4058
|
-
}
|
|
4059
|
-
//#endregion
|
|
4060
|
-
//#region src/core/signingEngine/flows/signEvmFamily/freshWalletSessionRetry.ts
|
|
4061
|
-
function resolveEvmFamilyWalletSessionExpiryContext(args) {
|
|
4062
|
-
if (walletSessionFailureFromError(args.error)?.kind !== "expired") return { kind: "not_expired" };
|
|
4063
|
-
if (args.candidate.kind === "unavailable") return { kind: "expired_without_exact_lane" };
|
|
4064
|
-
return {
|
|
4065
|
-
kind: "authoritative_expiry",
|
|
4066
|
-
state: requireAuthoritativeExpiredWalletSessionAuthorizationBoundary({
|
|
4067
|
-
source: {
|
|
4068
|
-
kind: "ecdsa",
|
|
4069
|
-
laneIdentity: args.candidate.identity,
|
|
4070
|
-
authorization: args.candidate.authorization
|
|
4071
|
-
},
|
|
4072
|
-
expiresAtMs: args.candidate.expiresAtMs,
|
|
4073
|
-
detectedAtMs: args.detectedAtMs
|
|
4074
|
-
})
|
|
4075
|
-
};
|
|
4076
|
-
}
|
|
4077
|
-
async function invalidateAuthoritativeEvmFamilyWalletSessionExpiry(args) {
|
|
4078
|
-
switch (args.context.kind) {
|
|
4079
|
-
case "not_expired":
|
|
4080
|
-
case "expired_without_exact_lane": return;
|
|
4081
|
-
case "authoritative_expiry":
|
|
4082
|
-
if ((await args.coordinator.invalidateExpiredWalletSession({
|
|
4083
|
-
state: args.context.state,
|
|
4084
|
-
source: SIGNING_SESSION_EXPIRY_DETECTION_SOURCES.serverRejection
|
|
4085
|
-
})).kind === "unavailable") throw new Error("[SigningEngine][ecdsa] expired Wallet Session cleanup failed");
|
|
4086
|
-
return;
|
|
4087
|
-
default: return assertNeverEvmFamilyWalletSessionExpiryContext(args.context);
|
|
4088
|
-
}
|
|
4089
|
-
}
|
|
4090
|
-
function assertNeverEvmFamilyWalletSessionExpiryContext(value) {
|
|
4091
|
-
throw new Error(`[SigningEngine][ecdsa] unsupported Wallet Session expiry context: ${String(value)}`);
|
|
4092
|
-
}
|
|
4093
|
-
async function retryEvmFamilyWithFreshWalletSessionAuthWhenRequired(args) {
|
|
4094
|
-
const decision = classifyEvmFamilyFreshAuthRetry({
|
|
4095
|
-
trigger: "wallet_session_reauthorization_required",
|
|
4096
|
-
error: args.error,
|
|
4097
|
-
senderSignatureAlgorithm: args.senderSignatureAlgorithm,
|
|
4098
|
-
accountAuth: args.accountAuth,
|
|
4099
|
-
alreadyRetryingFreshAuth: args.alreadyRetryingFreshEmailOtpAuth,
|
|
4100
|
-
hasEmailOtpSigningPlan: args.hasEmailOtpSigningPlan,
|
|
4101
|
-
sideEffectState: args.sideEffectState
|
|
4102
|
-
});
|
|
4103
|
-
args.onDecision?.(decision);
|
|
4104
|
-
if (decision.kind !== "retry") return null;
|
|
4105
|
-
await invalidateAuthoritativeEvmFamilyWalletSessionExpiry({
|
|
4106
|
-
context: args.expiryContext,
|
|
4107
|
-
coordinator: args.signingSessionCoordinator
|
|
4108
|
-
});
|
|
4109
|
-
const emailOtp = args.accountAuth.primaryAuthMethod === SIGNER_AUTH_METHODS.emailOtp;
|
|
4110
|
-
emitEvmFamilySigningEvent(args.onEvent, {
|
|
4111
|
-
phase: emailOtp ? SigningEventPhase.STEP_06_AUTH_EMAIL_OTP_CHALLENGE_STARTED : SigningEventPhase.STEP_09_THRESHOLD_SESSION_RECONNECT_STARTED,
|
|
4112
|
-
status: "running",
|
|
4113
|
-
walletId: args.walletId,
|
|
4114
|
-
message: emailOtp ? "Signing session expired; requesting Email OTP reauthorization" : "Signing session expired; requesting passkey reauthorization",
|
|
4115
|
-
interaction: {
|
|
4116
|
-
kind: "none",
|
|
4117
|
-
overlay: "none"
|
|
4118
|
-
},
|
|
4119
|
-
data: {
|
|
4120
|
-
chain: args.chain,
|
|
4121
|
-
reason: "threshold_session_expired"
|
|
4122
|
-
}
|
|
4123
|
-
});
|
|
4124
|
-
return await args.retry();
|
|
4125
|
-
}
|
|
4126
|
-
//#endregion
|
|
4127
|
-
//#region src/core/signingEngine/flows/signEvmFamily/operationIds.ts
|
|
4128
|
-
function createEvmFamilySigningOperationId() {
|
|
4129
|
-
const randomId = secureRandomBase64Url(32, "EVM family signing operation IDs");
|
|
4130
|
-
return SigningSessionIds.signingOperation(`evm-family-sign:${randomId}`);
|
|
4131
|
-
}
|
|
4132
|
-
function createEvmFamilySigningOperationIds(providedOperationId) {
|
|
4133
|
-
if (providedOperationId) return {
|
|
4134
|
-
planningOperationId: providedOperationId,
|
|
4135
|
-
confirmationOperationId: providedOperationId,
|
|
4136
|
-
callerProvided: true
|
|
4137
|
-
};
|
|
4138
|
-
return {
|
|
4139
|
-
planningOperationId: createEvmFamilySigningOperationId(),
|
|
4140
|
-
callerProvided: false
|
|
4141
|
-
};
|
|
4142
|
-
}
|
|
4143
|
-
function ensureEvmFamilyConfirmationOperationId(operationIds) {
|
|
4144
|
-
operationIds.confirmationOperationId = operationIds.confirmationOperationId || createEvmFamilySigningOperationId();
|
|
4145
|
-
return operationIds.confirmationOperationId;
|
|
4146
|
-
}
|
|
4147
|
-
function bindEvmFamilyCallerProvidedOperationIdToFingerprint(operationIds, operationFingerprint, binder) {
|
|
4148
|
-
if (!operationIds.callerProvided) return;
|
|
4149
|
-
binder.bindCallerProvidedOperationIdToFingerprint({
|
|
4150
|
-
operationId: operationIds.planningOperationId,
|
|
4151
|
-
operationFingerprint
|
|
4152
|
-
});
|
|
4153
|
-
}
|
|
4154
|
-
//#endregion
|
|
4155
|
-
//#region src/core/signingEngine/flows/signEvmFamily/executorThresholdState.ts
|
|
4156
|
-
function resolvePreparedEvmFamilyThresholdOwnerAddress(args) {
|
|
4157
|
-
switch (args.publicIdentityContinuity.kind) {
|
|
4158
|
-
case "lane_identity_only": return args.laneThresholdOwnerAddress;
|
|
4159
|
-
case "verified_material_identity":
|
|
4160
|
-
if (args.publicIdentityContinuity.verifiedMaterialThresholdOwnerAddress !== args.laneThresholdOwnerAddress) throw new Error("[SigningEngine][ecdsa] prepared material owner address does not match the exact signing lane");
|
|
4161
|
-
return args.laneThresholdOwnerAddress;
|
|
4162
|
-
default:
|
|
4163
|
-
args.publicIdentityContinuity;
|
|
4164
|
-
throw new Error("[SigningEngine][ecdsa] unsupported prepared public identity state");
|
|
4165
|
-
}
|
|
4166
|
-
}
|
|
4167
|
-
function buildPreparedEvmFamilyExecutorThresholdEcdsaState(args) {
|
|
4168
|
-
return {
|
|
4169
|
-
kind: "prepared",
|
|
4170
|
-
thresholdOwnerAddress: resolvePreparedEvmFamilyThresholdOwnerAddress(args)
|
|
4171
|
-
};
|
|
4172
|
-
}
|
|
4173
|
-
//#endregion
|
|
4174
|
-
//#region src/core/signingEngine/flows/signEvmFamily/signEvmFamily.ts
|
|
4175
|
-
var signEvmFamily_exports = /* @__PURE__ */ __exportAll({
|
|
4176
|
-
reconcileEvmFamilyNonceLane: () => reconcileEvmFamilyNonceLane,
|
|
4177
|
-
reconcileTempoNonceLane: () => reconcileTempoNonceLane,
|
|
4178
|
-
reportEvmFamilyBroadcastAccepted: () => reportEvmFamilyBroadcastAccepted,
|
|
4179
|
-
reportEvmFamilyBroadcastRejected: () => reportEvmFamilyBroadcastRejected,
|
|
4180
|
-
reportEvmFamilyDroppedOrReplaced: () => reportEvmFamilyDroppedOrReplaced,
|
|
4181
|
-
reportEvmFamilyFinalized: () => reportEvmFamilyFinalized,
|
|
4182
|
-
reportTempoBroadcastAccepted: () => reportTempoBroadcastAccepted,
|
|
4183
|
-
reportTempoBroadcastRejected: () => reportTempoBroadcastRejected,
|
|
4184
|
-
reportTempoDroppedOrReplaced: () => reportTempoDroppedOrReplaced,
|
|
4185
|
-
reportTempoFinalized: () => reportTempoFinalized,
|
|
4186
|
-
signEvmFamily: () => signEvmFamily
|
|
4187
|
-
});
|
|
4188
|
-
function evmFamilyWalletSessionExpiryCandidate(args) {
|
|
4189
|
-
if (!args.prepared || args.prepared.kind !== "authorized") return { kind: "unavailable" };
|
|
4190
|
-
return {
|
|
4191
|
-
kind: "exact_ecdsa_lane",
|
|
4192
|
-
identity: exactEcdsaSigningLaneIdentityFromSelectedLane(args.prepared.signingLane),
|
|
4193
|
-
authorization: args.prepared.signingLane.authorization,
|
|
4194
|
-
expiresAtMs: args.prepared.signingLane.authorization.session.expiresAtMs
|
|
4195
|
-
};
|
|
4196
|
-
}
|
|
4197
|
-
function ecdsaOperationAuthorizationQueueKey(args) {
|
|
4198
|
-
const authorizationId = args.prepared.signingLane.authorization.session.authorizationId;
|
|
4199
|
-
return buildOperationAuthorizationQueueKey({
|
|
4200
|
-
walletId: args.walletId,
|
|
4201
|
-
materialActivationId: args.prepared.signingLane.materialActivation.activationId,
|
|
4202
|
-
authorizationId,
|
|
4203
|
-
authorityKey: signingLaneAuthBindingKey(args.prepared.signingLane.auth),
|
|
4204
|
-
targetKey: thresholdEcdsaChainTargetKey(args.prepared.signingLane.chainTarget)
|
|
4205
|
-
});
|
|
4206
|
-
}
|
|
4207
|
-
function activeWalletAuthorityFlowRuntimeFromPrepared(prepared) {
|
|
4208
|
-
if (prepared.kind !== "authorization_required" || prepared.candidate.source !== "active_wallet_authority") return null;
|
|
4209
|
-
const confirmationAuthPlan = buildActiveWalletAuthorityConfirmationAuthPlan(prepared.candidate.runtime);
|
|
4210
|
-
return {
|
|
4211
|
-
runtime: prepared.candidate.runtime,
|
|
4212
|
-
intent: prepared.intent,
|
|
4213
|
-
confirmationAuthPlan
|
|
4214
|
-
};
|
|
4215
|
-
}
|
|
4216
|
-
function buildEvmFamilyPreparationDisplayModel(args) {
|
|
4217
|
-
const title = args.chainTarget.kind === "tempo" ? "Sign Tempo Transaction" : "Sign EVM Transaction";
|
|
4218
|
-
const displayArgs = {
|
|
4219
|
-
request: args.request,
|
|
4220
|
-
signerAccount: String(args.walletSession.walletId),
|
|
4221
|
-
title,
|
|
4222
|
-
subtitle: ""
|
|
4223
|
-
};
|
|
4224
|
-
if (args.request.kind === "eip1559") return buildEvmDisplayModel({
|
|
4225
|
-
...displayArgs,
|
|
4226
|
-
request: args.request
|
|
4227
|
-
});
|
|
4228
|
-
return buildTempoDisplayModel({
|
|
4229
|
-
...displayArgs,
|
|
4230
|
-
request: args.request
|
|
4231
|
-
});
|
|
4232
|
-
}
|
|
4233
|
-
async function executeEvmFamilyFreshAuthRetry(args) {
|
|
4234
|
-
const rereadAuthoritativeReadiness = signEvmFamilyAttempt.bind(null, args.deps, args.signingArgs, {
|
|
4235
|
-
admissionRetryState: { kind: "authoritative_readiness_reread" },
|
|
4236
|
-
forceFreshAuth: false,
|
|
4237
|
-
operationIds: args.operationIds,
|
|
4238
|
-
retryingFreshAuth: args.retryingFreshAuth,
|
|
4239
|
-
signingSessionCoordinator: args.signingSessionCoordinator
|
|
4240
|
-
});
|
|
4241
|
-
const performFreshAuth = signEvmFamilyAttempt.bind(null, args.deps, args.signingArgs, {
|
|
4242
|
-
admissionRetryState: { kind: "initial_admission" },
|
|
4243
|
-
forceFreshAuth: true,
|
|
4244
|
-
operationIds: args.operationIds,
|
|
4245
|
-
retryingFreshAuth: true,
|
|
4246
|
-
signingSessionCoordinator: args.signingSessionCoordinator
|
|
4247
|
-
});
|
|
4248
|
-
return await runEvmFamilyFreshAuthRetry({
|
|
4249
|
-
decision: args.decision,
|
|
4250
|
-
queueKey: args.queueKey,
|
|
4251
|
-
signingSessionCoordinator: args.signingSessionCoordinator,
|
|
4252
|
-
rereadAuthoritativeReadiness,
|
|
4253
|
-
performFreshAuth
|
|
4254
|
-
});
|
|
4255
|
-
}
|
|
4256
|
-
function emitEvmFamilyFreshAuthRetryEvent(args) {
|
|
4257
|
-
const isEmailOtp = args.accountAuth.primaryAuthMethod === SIGNER_AUTH_METHODS.emailOtp;
|
|
4258
|
-
emitEvmFamilySigningEvent(args.onEvent, {
|
|
4259
|
-
phase: isEmailOtp ? SigningEventPhase.STEP_06_AUTH_EMAIL_OTP_CHALLENGE_STARTED : SigningEventPhase.STEP_09_THRESHOLD_SESSION_RECONNECT_STARTED,
|
|
4260
|
-
status: "running",
|
|
4261
|
-
walletId: args.walletId,
|
|
4262
|
-
message: isEmailOtp ? "Signing session needs reauthorization; requesting Email OTP" : "Signing session needs reauthorization; requesting passkey",
|
|
4263
|
-
interaction: {
|
|
4264
|
-
kind: "none",
|
|
4265
|
-
overlay: "none"
|
|
4266
|
-
},
|
|
4267
|
-
data: {
|
|
4268
|
-
chain: args.chain,
|
|
4269
|
-
reason: "wallet_signing_budget_reserved"
|
|
4270
|
-
}
|
|
4271
|
-
});
|
|
4272
|
-
}
|
|
4273
|
-
async function signEvmFamily(deps, args) {
|
|
4274
|
-
const admission = reviewAdmissionForBinding(deps.touchConfirm.getContext().surfaceMeasurementBinding);
|
|
4275
|
-
if (admission) {
|
|
4276
|
-
admission.assertPending();
|
|
4277
|
-
deps = {
|
|
4278
|
-
...deps,
|
|
4279
|
-
beforeSigning: admission.beforeSigning
|
|
4280
|
-
};
|
|
4281
|
-
}
|
|
4282
|
-
const attempt = {
|
|
4283
|
-
admissionRetryState: { kind: "initial_admission" },
|
|
4284
|
-
operationIds: createEvmFamilySigningOperationIds(args.signingOperationId)
|
|
4285
|
-
};
|
|
4286
|
-
await deps.touchConfirm.openTransactionPreparationModal({
|
|
4287
|
-
chain: "evm_family",
|
|
4288
|
-
walletLabel: String(args.walletSession.walletId),
|
|
4289
|
-
model: buildEvmFamilyPreparationDisplayModel(args),
|
|
4290
|
-
confirmationConfigOverride: args.confirmationConfigOverride
|
|
4291
|
-
});
|
|
4292
|
-
try {
|
|
4293
|
-
return await signEvmFamilyAttempt(deps, args, attempt);
|
|
4294
|
-
} finally {
|
|
4295
|
-
deps.touchConfirm.closeTransactionPreparationModal();
|
|
4296
|
-
}
|
|
4297
|
-
}
|
|
4298
|
-
async function signEvmFamilyAttempt(deps, args, attempt) {
|
|
4299
|
-
throwIfEvmFamilySigningCancelled(args.shouldAbort);
|
|
4300
|
-
const walletId = toWalletId(args.walletSession.walletId);
|
|
4301
|
-
const signingTarget = evmFamilySigningTargetFromExplicitTarget({
|
|
4302
|
-
request: args.request,
|
|
4303
|
-
chainTarget: args.chainTarget
|
|
4304
|
-
});
|
|
4305
|
-
await ensureSealedRefreshStartupParityForTransactionSigning(deps.ensureSealedRefreshStartupParity, {
|
|
4306
|
-
walletId,
|
|
4307
|
-
chainTarget: signingTarget
|
|
4308
|
-
});
|
|
4309
|
-
const requestChain = signingTarget.kind;
|
|
4310
|
-
const requestChainTarget = signingTarget;
|
|
4311
|
-
let accountAuth;
|
|
4312
|
-
let ecdsaSigningLane;
|
|
4313
|
-
let selectedEcdsaAuthMethod;
|
|
4314
|
-
let preparedEcdsaSigningSession;
|
|
4315
|
-
let activeWalletAuthorityFlowRuntime;
|
|
4316
|
-
const ecdsaAttemptDiagnostics = {
|
|
4317
|
-
walletId,
|
|
4318
|
-
chain: requestChain,
|
|
4319
|
-
chainTarget: requestChainTarget,
|
|
4320
|
-
senderSignatureAlgorithm: args.request.senderSignatureAlgorithm
|
|
4321
|
-
};
|
|
4322
|
-
const signingSessionCoordinator = attempt.signingSessionCoordinator || deps.signingSessionCoordinator;
|
|
4323
|
-
if (!signingSessionCoordinator) throw new Error("[SigningEngine][ecdsa] production signing session coordinator is required");
|
|
4324
|
-
const operationIds = attempt.operationIds || createEvmFamilySigningOperationIds(args.signingOperationId);
|
|
4325
|
-
const operationFingerprint = await computeSigningOperationFingerprint({
|
|
4326
|
-
kind: `evm-family:${requestChain}`,
|
|
4327
|
-
payload: {
|
|
4328
|
-
walletId,
|
|
4329
|
-
chainTarget: requestChainTarget,
|
|
4330
|
-
request: args.request
|
|
4331
|
-
}
|
|
4332
|
-
});
|
|
4333
|
-
const operationFingerprintDigest = parseSigningOperationFingerprintDigest(operationFingerprint);
|
|
4334
|
-
bindEvmFamilyCallerProvidedOperationIdToFingerprint(operationIds, operationFingerprint, signingSessionCoordinator);
|
|
4335
|
-
const ensureConfirmationOperationId = () => ensureEvmFamilyConfirmationOperationId(operationIds);
|
|
4336
|
-
const createTransactionSigningOperation = () => ({
|
|
4337
|
-
operationId: ensureConfirmationOperationId(),
|
|
4338
|
-
operationFingerprint,
|
|
4339
|
-
intent: SigningOperationIntent.TransactionSign
|
|
4340
|
-
});
|
|
4341
|
-
const derivePreparedEvmFamilyKeyFingerprint = (_prepared) => void 0;
|
|
4342
|
-
let freshAuthRetrySideEffectState = "no_auth_side_effect_started";
|
|
4343
|
-
const markFreshAuthRetrySideEffect = (sideEffect) => {
|
|
4344
|
-
freshAuthRetrySideEffectState = nextEvmFamilyFreshAuthRetrySideEffectState({
|
|
4345
|
-
current: freshAuthRetrySideEffectState,
|
|
4346
|
-
sideEffect
|
|
4347
|
-
});
|
|
4348
|
-
};
|
|
4349
|
-
const recordFreshAuthRetryDecision = (decision, error) => {
|
|
4350
|
-
const errorMessage = error instanceof Error ? error.message : String(error || "unknown error");
|
|
4351
|
-
ecdsaAttemptDiagnostics.freshAuthRetry = {
|
|
4352
|
-
decision,
|
|
4353
|
-
sideEffectState: freshAuthRetrySideEffectState,
|
|
4354
|
-
errorMessage
|
|
4355
|
-
};
|
|
4356
|
-
emitSigningSessionFlowTrace("evm-family", {
|
|
4357
|
-
stage: "fresh_auth_retry.decision",
|
|
4358
|
-
walletId,
|
|
4359
|
-
chain: requestChain,
|
|
4360
|
-
chainTarget: requestChainTarget,
|
|
4361
|
-
decision,
|
|
4362
|
-
sideEffectState: freshAuthRetrySideEffectState,
|
|
4363
|
-
errorMessage
|
|
4364
|
-
});
|
|
4365
|
-
};
|
|
4366
|
-
const markConfirmationDisplayed = () => {
|
|
4367
|
-
markFreshAuthRetrySideEffect("auth_prompt_shown");
|
|
4368
|
-
return ensureConfirmationOperationId();
|
|
4369
|
-
};
|
|
4370
|
-
if (args.request.senderSignatureAlgorithm === "secp256k1") {
|
|
4371
|
-
preparedEcdsaSigningSession = await prepareEvmFamilyEcdsaSigningSession({
|
|
4372
|
-
deps,
|
|
4373
|
-
walletSession: args.walletSession,
|
|
4374
|
-
signingTarget,
|
|
4375
|
-
signingOperation: createTransactionSigningOperation(),
|
|
4376
|
-
diagnostics: ecdsaAttemptDiagnostics,
|
|
4377
|
-
signingSessionCoordinator,
|
|
4378
|
-
forceFreshAuth: attempt.forceFreshAuth === true
|
|
4379
|
-
});
|
|
4380
|
-
activeWalletAuthorityFlowRuntime = activeWalletAuthorityFlowRuntimeFromPrepared(preparedEcdsaSigningSession) ?? void 0;
|
|
4381
|
-
ecdsaSigningLane = preparedEcdsaSigningSession.kind === "authorized" ? preparedEcdsaSigningSession.signingLane : void 0;
|
|
4382
|
-
selectedEcdsaAuthMethod = preparedEcdsaSigningSession.authMethod;
|
|
4383
|
-
accountAuth = preparedEcdsaSigningSession.kind === "authorized" ? preparedEcdsaSigningSession.accountAuth : await resolveEvmFamilyTransactionWalletAuth({
|
|
4384
|
-
senderSignatureAlgorithm: "secp256k1",
|
|
4385
|
-
signerAuthMethod: preparedEcdsaSigningSession.authMethod
|
|
4386
|
-
});
|
|
4387
|
-
emitSigningSessionFlowTrace("evm-family", {
|
|
4388
|
-
stage: "ecdsa_attempt.prepared",
|
|
4389
|
-
walletId,
|
|
4390
|
-
chain: requestChain,
|
|
4391
|
-
chainTarget: requestChainTarget,
|
|
4392
|
-
...derivePreparedEvmFamilyKeyFingerprint(preparedEcdsaSigningSession) ? { evmFamilyKeyFingerprint: derivePreparedEvmFamilyKeyFingerprint(preparedEcdsaSigningSession) } : {},
|
|
4393
|
-
authorizationState: preparedEcdsaSigningSession.kind,
|
|
4394
|
-
authMethod: selectedEcdsaAuthMethod,
|
|
4395
|
-
lane: summarizeEvmFamilyEcdsaLane(ecdsaSigningLane)
|
|
4396
|
-
});
|
|
4397
|
-
} else accountAuth = await resolveEvmFamilyTransactionWalletAuth({ senderSignatureAlgorithm: args.request.senderSignatureAlgorithm });
|
|
4398
|
-
const resolvedAccountAuth = accountAuth;
|
|
4399
|
-
throwIfEvmFamilySigningCancelled(args.shouldAbort);
|
|
4400
|
-
const requestEmailOtpTransactionSigningChallenge = deps.requestEmailOtpTransactionSigningChallenge;
|
|
4401
|
-
const authPlanningArgsBase = {
|
|
4402
|
-
confirmedDeps: {
|
|
4403
|
-
...deps,
|
|
4404
|
-
requestEmailOtpTransactionSigningChallenge
|
|
4405
|
-
},
|
|
4406
|
-
walletSession: args.walletSession,
|
|
4407
|
-
chain: requestChain,
|
|
4408
|
-
accountAuth: resolvedAccountAuth,
|
|
4409
|
-
operationFingerprintDigest,
|
|
4410
|
-
onEvent: args.onEvent
|
|
4411
|
-
};
|
|
4412
|
-
const getPreparedEcdsaSigningSession = () => {
|
|
4413
|
-
if (preparedEcdsaSigningSession) return preparedEcdsaSigningSession;
|
|
4414
|
-
throw new Error("[SigningEngine][ecdsa] prepared signing session is required");
|
|
4415
|
-
};
|
|
4416
|
-
const getEcdsaSigningLaneIdentity = () => {
|
|
4417
|
-
const prepared = getPreparedEcdsaSigningSession();
|
|
4418
|
-
return prepared.kind === "authorized" ? prepared.signingLane.identity : prepared.identity;
|
|
4419
|
-
};
|
|
4420
|
-
const getPreparedEcdsaSigningSessionIfEcdsa = () => args.request.senderSignatureAlgorithm === "secp256k1" ? getPreparedEcdsaSigningSession() : void 0;
|
|
4421
|
-
const reResolveSupersededPreparation = async (error) => {
|
|
4422
|
-
if (!isEvmFamilyEcdsaMaterialSupersededError(error)) return null;
|
|
4423
|
-
if (attempt.reResolvedAfterSupersession) return null;
|
|
4424
|
-
emitSigningSessionFlowTrace("evm-family", {
|
|
4425
|
-
stage: "ecdsa_attempt.material_superseded",
|
|
4426
|
-
walletId,
|
|
4427
|
-
chain: requestChain,
|
|
4428
|
-
chainTarget: requestChainTarget,
|
|
4429
|
-
supersessionKind: error.superseded.supersessionKind,
|
|
4430
|
-
preparedMaterialActivationId: String(error.superseded.preparedMaterialActivation.activationId),
|
|
4431
|
-
currentMaterialActivationId: String(error.superseded.currentMaterialActivation.activationId)
|
|
4432
|
-
});
|
|
4433
|
-
return await signEvmFamilyAttempt(deps, args, {
|
|
4434
|
-
admissionRetryState: { kind: "initial_admission" },
|
|
4435
|
-
operationIds,
|
|
4436
|
-
signingSessionCoordinator,
|
|
4437
|
-
reResolvedAfterSupersession: true,
|
|
4438
|
-
...attempt.retryingFreshAuth ? { retryingFreshAuth: true } : {}
|
|
4439
|
-
});
|
|
4440
|
-
};
|
|
4441
|
-
const resolveAuthPlanningResult = async () => args.request.senderSignatureAlgorithm === "secp256k1" ? await (async () => {
|
|
4442
|
-
const prepared = getPreparedEcdsaSigningSession();
|
|
4443
|
-
if (activeWalletAuthorityFlowRuntime) return { signingAuthPlan: activeWalletAuthorityFlowRuntime.confirmationAuthPlan };
|
|
4444
|
-
return prepared.kind === "authorized" ? await resolveEvmFamilyTransactionStepUp({
|
|
4445
|
-
...authPlanningArgsBase,
|
|
4446
|
-
chainTarget: signingTarget,
|
|
4447
|
-
senderSignatureAlgorithm: "secp256k1",
|
|
4448
|
-
ecdsaAuthorization: "reusable_wallet_session",
|
|
4449
|
-
preparedOperation: prepared.preparedOperation
|
|
4450
|
-
}) : await (async () => {
|
|
4451
|
-
const signer = requireEvmFamilyEcdsaSigner(prepared.identity, "auth-neutral ECDSA step-up planning");
|
|
4452
|
-
const capability = await deps.resolveCanonicalEcdsaSigningCapability({
|
|
4453
|
-
walletId: signer.walletId,
|
|
4454
|
-
chainTarget: signer.chainTarget,
|
|
4455
|
-
materialActivation: signer.materialActivation
|
|
4456
|
-
});
|
|
4457
|
-
return await resolveEvmFamilyTransactionStepUp({
|
|
4458
|
-
...authPlanningArgsBase,
|
|
4459
|
-
chainTarget: signingTarget,
|
|
4460
|
-
senderSignatureAlgorithm: "secp256k1",
|
|
4461
|
-
ecdsaAuthorization: "operation_step_up",
|
|
4462
|
-
capability,
|
|
4463
|
-
materialActivation: signer.materialActivation,
|
|
4464
|
-
operationFingerprint
|
|
4465
|
-
});
|
|
4466
|
-
})();
|
|
4467
|
-
})() : await resolveEvmFamilyTransactionStepUp({
|
|
4468
|
-
...authPlanningArgsBase,
|
|
4469
|
-
chainTarget: signingTarget,
|
|
4470
|
-
senderSignatureAlgorithm: args.request.senderSignatureAlgorithm
|
|
4471
|
-
});
|
|
4472
|
-
const prepareFlowForExecution = async () => {
|
|
4473
|
-
const { signingAuthPlan, signingSessionPlan, emailOtpSigning } = await resolveAuthPlanningResult();
|
|
4474
|
-
const emailOtpSigningForFlow = emailOtpSigning ? {
|
|
4475
|
-
prepare: emailOtpSigning.prepare,
|
|
4476
|
-
...emailOtpSigning.resend ? { resend: emailOtpSigning.resend } : {}
|
|
4477
|
-
} : void 0;
|
|
4478
|
-
const { flowArgs } = await createEvmFamilySigningFlowRuntime({
|
|
4479
|
-
deps,
|
|
4480
|
-
walletSession: args.walletSession,
|
|
4481
|
-
request: args.request,
|
|
4482
|
-
chainTarget: requestChainTarget,
|
|
4483
|
-
senderSignatureAlgorithm: args.request.senderSignatureAlgorithm,
|
|
4484
|
-
...signingSessionPlan ? { signingSessionPlan } : {},
|
|
4485
|
-
signingOperation: createTransactionSigningOperation(),
|
|
4486
|
-
onSigningOperationTransition: emitEvmFamilySigningOperationTrace,
|
|
4487
|
-
...emailOtpSigningForFlow ? { emailOtpSigningForFlow } : {},
|
|
4488
|
-
confirmationConfigOverride: args.confirmationConfigOverride,
|
|
4489
|
-
shouldAbort: args.shouldAbort,
|
|
4490
|
-
onEvent: args.onEvent,
|
|
4491
|
-
onAuthSideEffectStarted: markFreshAuthRetrySideEffect,
|
|
4492
|
-
getEcdsaSigningLaneIdentity,
|
|
4493
|
-
...activeWalletAuthorityFlowRuntime ? { activeWalletAuthority: activeWalletAuthorityFlowRuntime } : {}
|
|
4494
|
-
});
|
|
4495
|
-
return {
|
|
4496
|
-
signingAuthPlan,
|
|
4497
|
-
signingSessionPlan,
|
|
4498
|
-
emailOtpSigning,
|
|
4499
|
-
flowArgs
|
|
4500
|
-
};
|
|
4501
|
-
};
|
|
4502
|
-
let preparedFlow;
|
|
4503
|
-
try {
|
|
4504
|
-
preparedFlow = await prepareFlowForExecution();
|
|
4505
|
-
} catch (error) {
|
|
4506
|
-
const reResolved = await reResolveSupersededPreparation(error);
|
|
4507
|
-
if (reResolved) return reResolved;
|
|
4508
|
-
throw error;
|
|
4509
|
-
}
|
|
4510
|
-
const { signingAuthPlan, emailOtpSigning, flowArgs } = preparedFlow;
|
|
4511
|
-
let freshAuthRetryHandledFinalization = false;
|
|
4512
|
-
const retryWithFreshWalletSessionAuth = async (error) => {
|
|
4513
|
-
return await retryEvmFamilyWithFreshWalletSessionAuthWhenRequired({
|
|
4514
|
-
error,
|
|
4515
|
-
walletId,
|
|
4516
|
-
chain: args.request.chain,
|
|
4517
|
-
senderSignatureAlgorithm: args.request.senderSignatureAlgorithm,
|
|
4518
|
-
accountAuth: resolvedAccountAuth,
|
|
4519
|
-
alreadyRetryingFreshEmailOtpAuth: attempt.retryingFreshAuth,
|
|
4520
|
-
hasEmailOtpSigningPlan: !!emailOtpSigning,
|
|
4521
|
-
sideEffectState: freshAuthRetrySideEffectState,
|
|
4522
|
-
signingSessionCoordinator,
|
|
4523
|
-
expiryContext: resolveEvmFamilyWalletSessionExpiryContext({
|
|
4524
|
-
error,
|
|
4525
|
-
candidate: evmFamilyWalletSessionExpiryCandidate({ prepared: preparedEcdsaSigningSession }),
|
|
4526
|
-
detectedAtMs: Date.now()
|
|
4527
|
-
}),
|
|
4528
|
-
onDecision: (decision) => recordFreshAuthRetryDecision(decision, error),
|
|
4529
|
-
onEvent: args.onEvent,
|
|
4530
|
-
retry: async () => {
|
|
4531
|
-
const result = await signEvmFamilyAttempt(deps, args, {
|
|
4532
|
-
admissionRetryState: { kind: "initial_admission" },
|
|
4533
|
-
forceFreshAuth: true,
|
|
4534
|
-
operationIds,
|
|
4535
|
-
retryingFreshAuth: true,
|
|
4536
|
-
signingSessionCoordinator
|
|
4537
|
-
});
|
|
4538
|
-
freshAuthRetryHandledFinalization = true;
|
|
4539
|
-
return result;
|
|
4540
|
-
}
|
|
4541
|
-
});
|
|
4542
|
-
};
|
|
4543
|
-
const retryWithFreshAuth = async (error) => {
|
|
4544
|
-
if (isEvmFamilyEcdsaMaterialSupersededError(error)) {
|
|
4545
|
-
const reResolved = await reResolveSupersededPreparation(error);
|
|
4546
|
-
if (reResolved) {
|
|
4547
|
-
freshAuthRetryHandledFinalization = true;
|
|
4548
|
-
return reResolved;
|
|
4549
|
-
}
|
|
4550
|
-
return null;
|
|
4551
|
-
}
|
|
4552
|
-
const walletSessionRetry = await retryWithFreshWalletSessionAuth(error);
|
|
4553
|
-
if (walletSessionRetry) return walletSessionRetry;
|
|
4554
|
-
const decision = classifyEvmFamilyFreshAuthRetry({
|
|
4555
|
-
trigger: "wallet_signing_budget_exhausted",
|
|
4556
|
-
error,
|
|
4557
|
-
senderSignatureAlgorithm: args.request.senderSignatureAlgorithm,
|
|
4558
|
-
accountAuth: resolvedAccountAuth,
|
|
4559
|
-
activeSigningAuthMethod: getPreparedEcdsaSigningSession().authMethod,
|
|
4560
|
-
admissionRetryState: attempt.admissionRetryState,
|
|
4561
|
-
alreadyRetryingFreshAuth: attempt.retryingFreshAuth,
|
|
4562
|
-
hasStepUpAuthPlan: isEmailOtpSigningAuthPlan(signingAuthPlan) || isPasskeySigningAuthPlan(signingAuthPlan),
|
|
4563
|
-
sideEffectState: freshAuthRetrySideEffectState
|
|
4564
|
-
});
|
|
4565
|
-
recordFreshAuthRetryDecision(decision, error);
|
|
4566
|
-
if (decision.kind !== "retry") return null;
|
|
4567
|
-
const preparedForRetry = getPreparedEcdsaSigningSession();
|
|
4568
|
-
if (preparedForRetry.kind !== "authorized") return null;
|
|
4569
|
-
if (decision.retryMode !== "await_admission_owner_completion") emitEvmFamilyFreshAuthRetryEvent({
|
|
4570
|
-
walletId,
|
|
4571
|
-
chain: args.request.chain,
|
|
4572
|
-
accountAuth: resolvedAccountAuth,
|
|
4573
|
-
onEvent: args.onEvent
|
|
4574
|
-
});
|
|
4575
|
-
const result = await executeEvmFamilyFreshAuthRetry({
|
|
4576
|
-
deps,
|
|
4577
|
-
signingArgs: args,
|
|
4578
|
-
decision,
|
|
4579
|
-
queueKey: ecdsaOperationAuthorizationQueueKey({
|
|
4580
|
-
walletId,
|
|
4581
|
-
prepared: preparedForRetry
|
|
4582
|
-
}),
|
|
4583
|
-
operationIds,
|
|
4584
|
-
retryingFreshAuth: attempt.retryingFreshAuth === true,
|
|
4585
|
-
signingSessionCoordinator
|
|
4586
|
-
});
|
|
4587
|
-
freshAuthRetryHandledFinalization = true;
|
|
4588
|
-
return result;
|
|
4589
|
-
};
|
|
4590
|
-
const preparedNonceSession = getPreparedEcdsaSigningSessionIfEcdsa();
|
|
4591
|
-
const nonceOperation = {
|
|
4592
|
-
...createTransactionSigningOperation(),
|
|
4593
|
-
accountId: String(walletId)
|
|
4594
|
-
};
|
|
4595
|
-
if (preparedNonceSession) {
|
|
4596
|
-
const nonceFingerprint = derivePreparedEvmFamilyKeyFingerprint(preparedNonceSession);
|
|
4597
|
-
emitSigningSessionFlowTrace("evm-family", {
|
|
4598
|
-
stage: "ecdsa_attempt.nonce_operation_prepared",
|
|
4599
|
-
walletId,
|
|
4600
|
-
chain: requestChain,
|
|
4601
|
-
chainTarget: requestChainTarget,
|
|
4602
|
-
...nonceFingerprint ? { evmFamilyKeyFingerprint: nonceFingerprint } : {},
|
|
4603
|
-
...preparedNonceSession.kind === "authorized" ? { walletSessionId: preparedNonceSession.signingLane.authorization.operationCredential.walletSessionId } : {},
|
|
4604
|
-
materialActivationId: preparedNonceSession.kind === "authorized" ? preparedNonceSession.signingLane.materialActivation.activationId : preparedNonceSession.candidate.materialActivation.activationId
|
|
4605
|
-
});
|
|
4606
|
-
}
|
|
4607
|
-
const preparedExecutorSession = getPreparedEcdsaSigningSessionIfEcdsa();
|
|
4608
|
-
const requireThresholdEcdsaStepUpRuntime = () => {
|
|
4609
|
-
const runtime = flowArgs.thresholdEcdsaStepUpRuntime;
|
|
4610
|
-
if (!runtime) throw new Error("[SigningEngine][ecdsa] prepared executor requires threshold step-up runtime");
|
|
4611
|
-
return runtime;
|
|
4612
|
-
};
|
|
4613
|
-
const thresholdEcdsaStepUp = preparedExecutorSession && !activeWalletAuthorityFlowRuntime ? {
|
|
4614
|
-
kind: "required",
|
|
4615
|
-
authPlan: {
|
|
4616
|
-
kind: "planned",
|
|
4617
|
-
signingAuthPlan
|
|
4618
|
-
},
|
|
4619
|
-
operation: {
|
|
4620
|
-
intent: preparedExecutorSession.kind === "authorized" ? preparedExecutorSession.transactionOperation.intent : preparedExecutorSession.intent,
|
|
4621
|
-
authPlan: signingAuthPlan
|
|
4622
|
-
},
|
|
4623
|
-
runtime: requireThresholdEcdsaStepUpRuntime()
|
|
4624
|
-
} : { kind: "not_required" };
|
|
4625
|
-
let thresholdEcdsaState;
|
|
4626
|
-
if (!preparedExecutorSession) thresholdEcdsaState = { kind: "not_required" };
|
|
4627
|
-
else thresholdEcdsaState = buildPreparedEvmFamilyExecutorThresholdEcdsaState({
|
|
4628
|
-
laneThresholdOwnerAddress: preparedExecutorSession.kind === "authorized" ? preparedExecutorSession.signingLane.key.thresholdOwnerAddress : preparedExecutorSession.candidate.key.thresholdOwnerAddress,
|
|
4629
|
-
publicIdentityContinuity: { kind: "lane_identity_only" }
|
|
4630
|
-
});
|
|
4631
|
-
const executePayload = {
|
|
4632
|
-
deps,
|
|
4633
|
-
walletId,
|
|
4634
|
-
request: args.request,
|
|
4635
|
-
chainTarget: requestChainTarget,
|
|
4636
|
-
flowArgs,
|
|
4637
|
-
nonceOperation,
|
|
4638
|
-
thresholdEcdsaState,
|
|
4639
|
-
onConfirmationDisplayed: markConfirmationDisplayed,
|
|
4640
|
-
thresholdEcdsaStepUp,
|
|
4641
|
-
retryWithFreshEmailOtpAuth: retryWithFreshAuth
|
|
4642
|
-
};
|
|
4643
|
-
if (preparedExecutorSession) {
|
|
4644
|
-
const result = await executeEvmFamilyTransactionSigning(executePayload);
|
|
4645
|
-
if (freshAuthRetryHandledFinalization) return result;
|
|
4646
|
-
return result;
|
|
4647
|
-
}
|
|
4648
|
-
return await executeEvmFamilyTransactionSigning(executePayload);
|
|
4649
|
-
}
|
|
4650
|
-
async function reportTempoBroadcastAccepted(deps, args) {
|
|
4651
|
-
await reportEvmFamilyBroadcastAccepted(deps, args);
|
|
4652
|
-
}
|
|
4653
|
-
async function reportTempoBroadcastRejected(deps, args) {
|
|
4654
|
-
await reportEvmFamilyBroadcastRejected(deps, args);
|
|
4655
|
-
}
|
|
4656
|
-
async function reportTempoFinalized(deps, args) {
|
|
4657
|
-
await reportEvmFamilyFinalized(deps, args);
|
|
4658
|
-
}
|
|
4659
|
-
async function reportTempoDroppedOrReplaced(deps, args) {
|
|
4660
|
-
await reportEvmFamilyDroppedOrReplaced(deps, args);
|
|
4661
|
-
}
|
|
4662
|
-
async function reconcileTempoNonceLane(deps, args) {
|
|
4663
|
-
return await reconcileEvmFamilyNonceLane(deps, args);
|
|
4664
|
-
}
|
|
4665
|
-
//#endregion
|
|
4666
|
-
export { authorizeEvmFamilyEcdsaSigningCapability as A, listLinkedEcdsaHolderRuntimesV1 as B, buildExactPasskeyOwnerLaneScope as C, buildPersistedEcdsaRoleLocalMaterial as D, resolveExactWalletAuthAuthority as E, signingAuthorizationFromPreprocessing as F, resolveLinkedEcdsaHolderRuntimeV1 as H, ensureSealedRefreshStartupParityForThresholdEcdsaBootstrap as I, isRetryableSealedRefreshCapabilityFetchError as L, buildEcdsaPreprocessingCapability as M, buildExactEcdsaDirectCapabilityRuntime as N, ecdsaRoleLocalPersistedMaterialSource as O, buildExactEvmFamilyWalletSessionAuthorization as P, clearLinkedEcdsaHolderRuntimesV1 as R, buildExactLinkedEmailOtpOwnerLaneScope as S, resolveExactOwnerLaneScope as T, removeLinkedEcdsaHolderRuntimeV1 as V, resolveEmailOtpEcdsaSigningSessionAuth as _, reportTempoFinalized as a, withThresholdEcdsaSigningQueue as b, resolveActiveWalletAuthorityEcdsaRuntimeV1 as c, createActiveEcdsaCapabilityRuntimeForChainResolver as d, createActiveEcdsaCapabilityRuntimeResolver as f, requestEmailOtpSigningSessionChallenge as g, refreshEmailOtpSigningSession as h, reportTempoDroppedOrReplaced as i, buildCanonicalEvmFamilyEcdsaSigningCapability as j, resolveEcdsaRoleLocalMaterial as k, issueEcdsaOperationStepUpAuthorization as l, resolveExactEcdsaSealedRuntime as m, reportTempoBroadcastAccepted as n, signEvmFamily as o, resolveExactEcdsaCapabilityRuntime as p, reportTempoBroadcastRejected as r, signEvmFamily_exports as s, reconcileTempoNonceLane as t, prepareEcdsaOperationStepUp as u, clearThresholdEcdsaSigningQueue as v, isOwnerRelinkRequiredError as w, buildExactEcdsaPasskeyOwnerLaneScope as x, resolveThresholdEcdsaSigningQueueKey as y, installLinkedEcdsaHolderRuntimeV1 as z };
|