@seams/wallet 0.6.1 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.build-inputs.sha256 +1 -1
- package/dist/esm/SeamsWeb/SeamsWeb.js +33 -93
- package/dist/esm/SeamsWeb/assembly/browserSigningSurfaceAssembly.js +25 -5
- package/dist/esm/SeamsWeb/assembly/createBrowserSigningStores.js +1 -2
- package/dist/esm/SeamsWeb/operations/auth/login.js +13 -37
- package/dist/esm/SeamsWeb/operations/auth/walletUnlockSubject.js +1 -1
- package/dist/esm/SeamsWeb/operations/authMethods/addAuthMethodSourceClaim.js +1 -1
- package/dist/esm/SeamsWeb/operations/authMethods/emailOtp/addEmailOtp.js +4 -3
- package/dist/esm/SeamsWeb/operations/authMethods/emailOtp/challenge.js +1 -1
- package/dist/esm/SeamsWeb/operations/authMethods/emailOtp/googleEmailOtpWalletAuthFlow.js +1 -1
- package/dist/esm/SeamsWeb/operations/authMethods/emailOtp/localEmailOtpProjection.js +1 -1
- package/dist/esm/SeamsWeb/operations/authMethods/emailOtp/registrationOffer.js +6 -15
- package/dist/esm/SeamsWeb/operations/authMethods/emailOtp/walletActivation.js +2 -2
- package/dist/esm/SeamsWeb/operations/authMethods/passkey/addPasskey.js +5 -4
- package/dist/esm/SeamsWeb/operations/authMethods/passkey/exactPasskeyAuthority.js +34 -0
- package/dist/esm/SeamsWeb/operations/authMethods/passkey/localPasskeyProjection.js +4 -42
- package/dist/esm/SeamsWeb/operations/authMethods/revokeAuthMethod.js +3 -2
- package/dist/esm/SeamsWeb/operations/devices/deviceLinkingAuthorityInstallation.js +2 -2
- package/dist/esm/SeamsWeb/operations/devices/deviceLinkingEd25519ExportRoot.js +1 -1
- package/dist/esm/SeamsWeb/operations/devices/deviceLinkingHttpTransport.js +6 -5
- package/dist/esm/SeamsWeb/operations/devices/deviceLinkingOwnerTransport.js +1 -1
- package/dist/esm/SeamsWeb/operations/devices/deviceLinkingResume.js +3 -3
- package/dist/esm/SeamsWeb/operations/devices/deviceLinkingWorkerChannels.js +2 -1
- package/dist/esm/SeamsWeb/operations/devices/linkDevice.js +1 -1671
- package/dist/esm/SeamsWeb/operations/devices/linkDeviceFlow.js +1358 -0
- package/dist/esm/SeamsWeb/operations/devices/linkDeviceFlowSupport.js +143 -0
- package/dist/esm/SeamsWeb/operations/devices/linkDeviceTargetActivation.js +119 -0
- package/dist/esm/SeamsWeb/operations/devices/scanDevice.js +1 -1
- package/dist/esm/SeamsWeb/operations/devices/walletHostComposition.js +13 -3
- package/dist/esm/SeamsWeb/operations/devices/walletHostOwnerAuthority.js +12 -4
- package/dist/esm/SeamsWeb/operations/near/index.js +1 -1
- package/dist/esm/SeamsWeb/operations/near/signNEP413.js +1 -1
- package/dist/esm/SeamsWeb/operations/recovery/accountSync.js +1 -1
- package/dist/esm/SeamsWeb/operations/recovery/recoveryWalletBinding.js +1 -1
- package/dist/esm/SeamsWeb/operations/recovery/syncAccount.js +7 -7
- package/dist/esm/SeamsWeb/operations/recovery/walletRecoveryCommit.js +6 -10
- package/dist/esm/SeamsWeb/operations/recovery/walletRecoveryDurablePayload.js +4 -2
- package/dist/esm/SeamsWeb/operations/recovery/walletRecoveryRotation.js +2 -2
- package/dist/esm/SeamsWeb/operations/registration/pendingEcdsaRegistrationRecovery.js +39 -5
- package/dist/esm/SeamsWeb/operations/registration/pendingEcdsaRegistrationRecoveryUnlock.js +21 -42
- package/dist/esm/SeamsWeb/operations/registration/pendingEcdsaRegistrationRecoveryValidation.js +3 -3
- package/dist/esm/SeamsWeb/operations/registration/pendingRegistrationRecovery.js +2 -2
- package/dist/esm/SeamsWeb/operations/registration/registration.js +122 -87
- package/dist/esm/SeamsWeb/operations/registration/registrationEd25519Yao.js +37 -6
- package/dist/esm/SeamsWeb/operations/registration/registrationSignerSet.js +1 -1
- package/dist/esm/SeamsWeb/operations/registration/registrationStrictEcdsa.js +4 -3
- package/dist/esm/SeamsWeb/operations/registration/registrationTerminalCommit.js +1 -1
- package/dist/esm/SeamsWeb/operations/registration/registrationTiming.js +194 -539
- package/dist/esm/SeamsWeb/publicApi/awaitNearReady.js +3 -1
- package/dist/esm/SeamsWeb/publicApi/devices.js +1 -1
- package/dist/esm/SeamsWeb/signingSurface/BrowserSigningSurface.js +22 -24
- package/dist/esm/SeamsWeb/walletIframe/client/progress/on-events-progress-bus.js +0 -4
- package/dist/esm/SeamsWeb/walletIframe/client/router.js +4 -3
- package/dist/esm/SeamsWeb/walletIframe/client/surface/geometry.js +6 -88
- package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/AuthMenuSurface.js +1 -1
- package/dist/esm/SeamsWeb/walletIframe/shared/exactSessionState.js +26 -36
- package/dist/esm/SeamsWeb/walletIframe/shared/messages.js +3 -1
- package/dist/esm/SeamsWeb/walletIframe/shared/transactionReview.js +2 -4
- package/dist/esm/advanced.js +3 -2
- package/dist/esm/core/accountData/near/keyMaterial.js +2 -2
- package/dist/esm/core/config/chains.js +1 -0
- package/dist/esm/core/indexedDB/index.js +1 -7
- package/dist/esm/core/indexedDB/keyMaterialEnvelope.js +1 -5
- package/dist/esm/core/indexedDB/linkedAuthoritySignerMaterial.js +7 -14
- package/dist/esm/core/indexedDB/pendingWalletRecoveryCommit.js +2 -2
- package/dist/esm/core/indexedDB/pendingWalletRegistrationCommit.js +1 -1
- package/dist/esm/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestLookups.js +209 -0
- package/dist/esm/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestRecords.js +848 -0
- package/dist/esm/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestStore.js +122 -1721
- package/dist/esm/core/indexedDB/seamsWalletDB/ecdsaClientPresignatures.js +235 -0
- package/dist/esm/core/indexedDB/seamsWalletDB/repositories.js +60 -11
- package/dist/esm/core/indexedDB/seamsWalletDB/walletCustodyEcdsaContinuity.js +198 -0
- package/dist/esm/core/indexedDB/seamsWalletDB/walletSessionAuthorizationStore.js +1 -1
- package/dist/esm/core/indexedDB/unifiedIndexedDBManager.js +6 -0
- package/dist/esm/core/indexedDB/walletCustodyEd25519MaterialRecord.js +1 -1
- package/dist/esm/core/platform/browser/createBrowserPlatformRuntime.js +0 -43
- package/dist/esm/core/rpcClients/near/NearClient.js +20 -215
- package/dist/esm/core/rpcClients/near/rpcCalls.js +4 -4
- package/dist/esm/core/rpcClients/relayer/routerAbNormalSigning.js +57 -86
- package/dist/esm/core/rpcClients/relayer/thresholdEcdsa.js +1 -1
- package/dist/esm/core/rpcClients/relayer/walletRecoveryPrepare.js +6 -6
- package/dist/esm/core/rpcClients/relayer/walletRecoveryRotate.js +0 -1
- package/dist/esm/core/rpcClients/relayer/walletRegistration.js +43 -61
- package/dist/esm/core/rpcClients/relayer/walletRegistrationTerminalResponse.js +6 -12
- package/dist/esm/core/rpcClients/relayer/walletSessionAuthorizationStatus.js +1 -1
- package/dist/esm/core/signingEngine/assembly/ports/evmFamily.js +1 -1
- package/dist/esm/core/signingEngine/assembly/ports/stepUpRuntime.js +0 -1
- package/dist/esm/core/signingEngine/chains/evm/display/evmTx.js +1 -6
- package/dist/esm/core/signingEngine/chains/evm/evmCryptoWasm.js +1 -36
- package/dist/esm/core/signingEngine/chains/near/display.js +14 -1
- package/dist/esm/core/signingEngine/chains/tempo/display.js +1 -6
- package/dist/esm/core/signingEngine/flows/recovery/ecdsaDerivationExport.js +4 -4
- package/dist/esm/core/signingEngine/flows/recovery/ecdsaExportFlow.js +7 -8
- package/dist/esm/core/signingEngine/flows/recovery/ecdsaExportMaterial.js +2 -2
- package/dist/esm/core/signingEngine/flows/recovery/ed25519YaoExportFlow.js +1 -1
- package/dist/esm/core/signingEngine/flows/recovery/passkeyEd25519YaoRecovery.js +18 -26
- package/dist/esm/core/signingEngine/flows/registration/accountLifecycle.js +245 -503
- package/dist/esm/core/signingEngine/flows/registration/services/passkeyEd25519YaoAddSigner.js +8 -11
- package/dist/esm/core/signingEngine/flows/signEvmFamily/authPlanning.js +1 -1
- package/dist/esm/core/signingEngine/flows/signEvmFamily/ecdsaSelection.js +1 -1
- package/dist/esm/core/signingEngine/flows/signEvmFamily/emailOtpSigningSession.js +1 -1
- package/dist/esm/core/signingEngine/flows/signEvmFamily/readySecp256k1Material.js +2 -2
- package/dist/esm/core/signingEngine/flows/signEvmFamily/signEvmFamily.js +1 -3
- package/dist/esm/core/signingEngine/flows/signEvmFamily/signEvmFamilyWithUiConfirmForTempo.js +1 -1
- package/dist/esm/core/signingEngine/flows/signEvmFamily/signEvmWithUiConfirm.js +1 -1
- package/dist/esm/core/signingEngine/flows/signEvmFamily/signers/secp256k1.js +1 -2
- package/dist/esm/core/signingEngine/flows/signEvmFamily/signingFlow.js +4 -4
- package/dist/esm/core/signingEngine/flows/signEvmFamily/signingFlowRuntime.js +42 -12
- package/dist/esm/core/signingEngine/flows/signNear/shared/ed25519YaoNormalSigning.js +21 -2
- package/dist/esm/core/signingEngine/flows/signNear/shared/signatureOnlySigning.js +343 -0
- package/dist/esm/core/signingEngine/flows/signNear/signDelegate.js +66 -312
- package/dist/esm/core/signingEngine/flows/signNear/signNear.js +44 -48
- package/dist/esm/core/signingEngine/flows/signNear/signNep413.js +58 -305
- package/dist/esm/core/signingEngine/flows/signNear/signTransactions.js +58 -22
- package/dist/esm/core/signingEngine/interfaces/accountAuthMetadata.js +0 -1
- package/dist/esm/core/signingEngine/nonce/nearNonceLane.js +0 -29
- package/dist/esm/core/signingEngine/routerAb/ecdsaDerivation/presignaturePool.js +14 -148
- package/dist/esm/core/signingEngine/routerAb/ecdsaDerivation/signingMaterialRef.js +2 -1
- package/dist/esm/core/signingEngine/session/availability/availableSigningLanes.js +4 -4
- package/dist/esm/core/signingEngine/session/availability/persistedAvailableSigningLanes.js +2 -2
- package/dist/esm/core/signingEngine/session/emailOtp/coordinatorRuntime.js +0 -2
- package/dist/esm/core/signingEngine/session/emailOtp/ecdsaLogin.js +2 -2
- package/dist/esm/core/signingEngine/session/emailOtp/ecdsaPublication.js +3 -3
- package/dist/esm/core/signingEngine/session/emailOtp/ecdsaRecovery.js +3 -3
- package/dist/esm/core/signingEngine/session/emailOtp/ecdsaSigningSessionAuthority.js +1 -1
- package/dist/esm/core/signingEngine/session/emailOtp/ed25519ExportContext.js +9 -16
- package/dist/esm/core/signingEngine/session/emailOtp/exportRecovery.js +2 -2
- package/dist/esm/core/signingEngine/session/emailOtp/exportRecoveryRuntime.js +0 -9
- package/dist/esm/core/signingEngine/session/emailOtp/publicTypes.js +1 -2
- package/dist/esm/core/signingEngine/session/emailOtp/sealedRefreshPolicy.js +0 -28
- package/dist/esm/core/signingEngine/session/emailOtp/sealedSessionRegistry.js +1 -1
- package/dist/esm/core/signingEngine/session/emailOtp/walletUnlock.js +1 -1
- package/dist/esm/core/signingEngine/session/identity/evmFamilyEcdsaIdentity.js +2 -2
- package/dist/esm/core/signingEngine/session/identity/exactSigningLaneIdentity.js +1 -1
- package/dist/esm/core/signingEngine/session/identity/laneIdentity.js +5 -4
- package/dist/esm/core/signingEngine/session/identity/ownerLaneScope.js +1 -1
- package/dist/esm/core/signingEngine/session/keyMaterialBrands.js +2 -21
- package/dist/esm/core/signingEngine/session/material/activeWalletAuthorityEcdsaRuntime.js +41 -62
- package/dist/esm/core/signingEngine/session/material/ecdsaCapabilityManifest.js +6 -2
- package/dist/esm/core/signingEngine/session/material/ecdsaSealedRuntime.js +3 -3
- package/dist/esm/core/signingEngine/session/material/ecdsaSigningCapability.js +1 -1
- package/dist/esm/core/signingEngine/session/material/nearEd25519YaoSigningPreparation.js +1 -1
- package/dist/esm/core/signingEngine/session/operationState/authorizationAdmission.js +4 -4
- package/dist/esm/core/signingEngine/session/operationState/trace.js +10 -1
- package/dist/esm/core/signingEngine/session/passkey/ecdsaKeyFactsInventory.js +1 -1
- package/dist/esm/core/signingEngine/session/passkey/ecdsaRecovery.js +1 -1
- package/dist/esm/core/signingEngine/session/passkey/ed25519YaoLocalMaterial.js +39 -59
- package/dist/esm/core/signingEngine/session/passkey/ed25519YaoRecoveryCapability.js +13 -22
- package/dist/esm/core/signingEngine/session/passkey/ed25519YaoWarmRecovery.js +11 -20
- package/dist/esm/core/signingEngine/session/passkey/unlockEcdsaWarmupPlanner.js +1 -1
- package/dist/esm/core/signingEngine/session/persistence/ecdsaRoleLocalRecords.js +1 -1
- package/dist/esm/core/signingEngine/session/persistence/sealedSessionRecords.js +764 -0
- package/dist/esm/core/signingEngine/session/persistence/sealedSessionStore.js +42 -862
- package/dist/esm/core/signingEngine/session/public.js +1 -1
- package/dist/esm/core/signingEngine/session/sealedRecovery/recoveryRecord.js +3 -3
- package/dist/esm/core/signingEngine/session/warmCapabilities/capabilityReaderCore.js +1 -1
- package/dist/esm/core/signingEngine/session/warmCapabilities/ecdsaLoginPrefill.js +2 -1
- package/dist/esm/core/signingEngine/session/warmCapabilities/ecdsaProvisionPlan.js +0 -1
- package/dist/esm/core/signingEngine/session/warmCapabilities/ed25519SealedSessionRuntime.js +3 -3
- package/dist/esm/core/signingEngine/session/warmCapabilities/routerAbEd25519WalletSessionState.js +1 -1
- package/dist/esm/core/signingEngine/session/warmCapabilities/types.js +0 -1
- package/dist/esm/core/signingEngine/session/warmCapabilities/volatileWarmMaterialCommands.js +3 -5
- package/dist/esm/core/signingEngine/stepUpConfirmation/passkeyPrompt/touchIdPrompt.js +2 -3
- package/dist/esm/core/signingEngine/threshold/crypto/ecdsaDerivationClientWasm.js +3 -2
- package/dist/esm/core/signingEngine/threshold/crypto/ed25519YaoLaneWasm.js +2 -2
- package/dist/esm/core/signingEngine/threshold/ecdsa/activation.js +3 -2
- package/dist/esm/core/signingEngine/threshold/ed25519/connectSession.js +1 -1
- package/dist/esm/core/signingEngine/threshold/ed25519/walletSession.js +2 -2
- package/dist/esm/core/signingEngine/threshold/ed25519/yaoActiveClientRegistry.js +1 -1
- package/dist/esm/core/signingEngine/threshold/ed25519/yaoPublicCapabilityReferences.js +12 -19
- package/dist/esm/core/signingEngine/threshold/sessionPolicy.js +1 -1
- package/dist/esm/core/signingEngine/uiConfirm/PasskeyMpcSessionDurableState.js +4 -3
- package/dist/esm/core/signingEngine/uiConfirm/PasskeyMpcSessionManager.js +2 -2
- package/dist/esm/core/signingEngine/uiConfirm/handlers/flows/adapters/adapters.js +7 -0
- package/dist/esm/core/signingEngine/uiConfirm/handlers/flows/signing.js +9 -16
- package/dist/esm/core/signingEngine/uiConfirm/ui/confirm-surface-resize.js +5 -5
- package/dist/esm/core/signingEngine/uiConfirm/ui/confirmation-model.js +1 -1
- package/dist/esm/core/signingEngine/uiConfirm/ui/preact/ConfirmationModal.js +1 -0
- package/dist/esm/core/signingEngine/uiConfirm/ui/preact/TransactionLabel.js +1 -1
- package/dist/esm/core/signingEngine/uiConfirm/ui/preact/TransactionReceipt.js +79 -9
- package/dist/esm/core/signingEngine/uiConfirm/ui/preact/TransactionReview.js +31 -78
- package/dist/esm/core/signingEngine/uiConfirm/ui/preact/confirmation-controller.js +1 -0
- package/dist/esm/core/signingEngine/walletCustody/activateEd25519Capability.js +2 -1
- package/dist/esm/core/signingEngine/walletCustody/ceremonyActiveClientMetadata.js +3 -4
- package/dist/esm/core/signingEngine/walletCustody/emailOtpLink.js +2 -2
- package/dist/esm/core/signingEngine/walletCustody/openCustodyCache.js +1 -1
- package/dist/esm/core/signingEngine/walletCustody/recoveryReplacementEnvelope.js +2 -1
- package/dist/esm/core/signingEngine/walletCustody/unlockedEd25519ExportRootCapability.js +56 -9
- package/dist/esm/core/signingEngine/walletCustody/walletRecoveryEcdsa.js +1 -1
- package/dist/esm/core/signingEngine/walletCustody/walletRecoveryEd25519.js +2 -2
- package/dist/esm/core/signingEngine/walletCustody/walletRecoveryRotation.js +52 -81
- package/dist/esm/core/signingEngine/webauthnAuth/credentials/credentialExtensions.js +2 -4
- package/dist/esm/core/signingEngine/webauthnAuth/credentials/helpers.js +1 -1
- package/dist/esm/core/signingEngine/workerManager/deviceLinkingPorts.js +13 -16
- package/dist/esm/core/signingEngine/workerManager/deviceLinkingSourceContribution.js +28 -3
- package/dist/esm/core/signingEngine/workerManager/ecdsaClientWorkerChannels.js +3 -1
- package/dist/esm/core/signingEngine/workerManager/workerTransport.js +20 -5
- package/dist/esm/core/signingEngine/workerManager/workerTypes.js +2 -1
- package/dist/esm/core/types/linkDevice.js +2 -3
- package/dist/esm/core/types/sdkSentEvents.js +7 -5
- package/dist/esm/core/types/signer-worker.js +1 -58
- package/dist/esm/index.js +1 -1
- package/dist/esm/plugins/vite.js +1 -1
- package/dist/esm/react/SeamsWeb/SeamsWeb.js +32 -92
- package/dist/esm/react/SeamsWeb/assembly/browserSigningSurfaceAssembly.js +25 -5
- package/dist/esm/react/SeamsWeb/assembly/createBrowserSigningStores.js +1 -2
- package/dist/esm/react/SeamsWeb/operations/auth/login.js +10 -34
- package/dist/esm/react/SeamsWeb/operations/auth/walletAuth.js +1 -1
- package/dist/esm/react/SeamsWeb/operations/auth/walletUnlockSubject.js +1 -1
- package/dist/esm/react/SeamsWeb/operations/authMethods/addAuthMethodSourceClaim.js +1 -1
- package/dist/esm/react/SeamsWeb/operations/authMethods/emailOtp/addEmailOtp.js +4 -3
- package/dist/esm/react/SeamsWeb/operations/authMethods/emailOtp/googleEmailOtpWalletAuthFlow.js +1 -1
- package/dist/esm/react/SeamsWeb/operations/authMethods/emailOtp/localEmailOtpProjection.js +1 -1
- package/dist/esm/react/SeamsWeb/operations/authMethods/emailOtp/registrationOffer.js +6 -15
- package/dist/esm/react/SeamsWeb/operations/authMethods/emailOtp/walletActivation.js +1 -1
- package/dist/esm/react/SeamsWeb/operations/authMethods/passkey/addPasskey.js +5 -4
- package/dist/esm/react/SeamsWeb/operations/authMethods/passkey/exactPasskeyAuthority.js +34 -0
- package/dist/esm/react/SeamsWeb/operations/authMethods/passkey/localPasskeyProjection.js +3 -3
- package/dist/esm/react/SeamsWeb/operations/authMethods/revokeAuthMethod.js +3 -2
- package/dist/esm/react/SeamsWeb/operations/devices/deviceLinkingAuthorityInstallation.js +2 -2
- package/dist/esm/react/SeamsWeb/operations/devices/deviceLinkingEd25519ExportRoot.js +1 -1
- package/dist/esm/react/SeamsWeb/operations/devices/deviceLinkingHttpTransport.js +5 -4
- package/dist/esm/react/SeamsWeb/operations/devices/deviceLinkingOwnerTransport.js +1 -1
- package/dist/esm/react/SeamsWeb/operations/devices/deviceLinkingResume.js +3 -3
- package/dist/esm/react/SeamsWeb/operations/devices/deviceLinkingWorkerChannels.js +2 -1
- package/dist/esm/react/SeamsWeb/operations/devices/linkDevice.js +1 -1671
- package/dist/esm/react/SeamsWeb/operations/devices/linkDeviceFlow.js +1358 -0
- package/dist/esm/react/SeamsWeb/operations/devices/linkDeviceFlowSupport.js +143 -0
- package/dist/esm/react/SeamsWeb/operations/devices/linkDeviceTargetActivation.js +119 -0
- package/dist/esm/react/SeamsWeb/operations/devices/walletHostComposition.js +13 -3
- package/dist/esm/react/SeamsWeb/operations/devices/walletHostOwnerAuthority.js +11 -3
- package/dist/esm/react/SeamsWeb/operations/near/index.js +1 -1
- package/dist/esm/react/SeamsWeb/operations/recovery/accountSync.js +1 -1
- package/dist/esm/react/SeamsWeb/operations/recovery/recoveryWalletBinding.js +1 -1
- package/dist/esm/react/SeamsWeb/operations/recovery/syncAccount.js +5 -5
- package/dist/esm/react/SeamsWeb/operations/recovery/walletRecoveryCommit.js +5 -9
- package/dist/esm/react/SeamsWeb/operations/recovery/walletRecoveryDurablePayload.js +3 -1
- package/dist/esm/react/SeamsWeb/operations/registration/pendingEcdsaRegistrationRecovery.js +38 -4
- package/dist/esm/react/SeamsWeb/operations/registration/pendingEcdsaRegistrationRecoveryUnlock.js +20 -41
- package/dist/esm/react/SeamsWeb/operations/registration/pendingEcdsaRegistrationRecoveryValidation.js +3 -3
- package/dist/esm/react/SeamsWeb/operations/registration/pendingRegistrationRecovery.js +2 -2
- package/dist/esm/react/SeamsWeb/operations/registration/registration.js +117 -82
- package/dist/esm/react/SeamsWeb/operations/registration/registrationEd25519Yao.js +35 -4
- package/dist/esm/react/SeamsWeb/operations/registration/registrationSignerSet.js +1 -1
- package/dist/esm/react/SeamsWeb/operations/registration/registrationStrictEcdsa.js +5 -4
- package/dist/esm/react/SeamsWeb/operations/registration/registrationTiming.js +194 -539
- package/dist/esm/react/SeamsWeb/publicApi/awaitNearReady.js +3 -1
- package/dist/esm/react/SeamsWeb/publicApi/devices.js +1 -1
- package/dist/esm/react/SeamsWeb/signingSurface/BrowserSigningSurface.js +21 -23
- package/dist/esm/react/SeamsWeb/walletIframe/client/progress/on-events-progress-bus.js +0 -4
- package/dist/esm/react/SeamsWeb/walletIframe/client/router.js +4 -3
- package/dist/esm/react/SeamsWeb/walletIframe/client/surface/geometry.js +8 -5
- package/dist/esm/react/SeamsWeb/walletIframe/shared/exactSessionState.js +27 -37
- package/dist/esm/react/SeamsWeb/walletIframe/shared/messages.js +3 -1
- package/dist/esm/react/SeamsWeb/walletIframe/shared/transactionReview.js +3 -5
- package/dist/esm/react/components/AccountMenuButton/AccountMenuDialog.js +93 -0
- package/dist/esm/react/components/AccountMenuButton/AuthenticationMethodsModal.js +187 -249
- package/dist/esm/react/components/AccountMenuButton/LinkedDevicesModal.js +195 -257
- package/dist/esm/react/components/AccountMenuButton/ProfileDropdown.js +1 -1
- package/dist/esm/react/components/AccountMenuButton/TransactionSettingsSection.js +1 -1
- package/dist/esm/react/components/AccountMenuButton/UserAccountButton.js +1 -1
- package/dist/esm/react/components/AccountMenuButton/icons/MoonIcon.js +6 -41
- package/dist/esm/react/components/AccountMenuButton/icons/SunIcon.js +43 -78
- package/dist/esm/react/components/AccountMenuButton/icons/strokeIcon.js +43 -0
- package/dist/esm/react/components/AccountMenuButton/index.js +1 -1
- package/dist/esm/react/components/theme/design-tokens.js +0 -1
- package/dist/esm/react/core/config/chains.js +1 -0
- package/dist/esm/react/core/indexedDB/keyMaterialEnvelope.js +1 -5
- package/dist/esm/react/core/indexedDB/linkedAuthoritySignerMaterial.js +7 -14
- package/dist/esm/react/core/indexedDB/pendingWalletRecoveryCommit.js +1 -1
- package/dist/esm/react/core/indexedDB/pendingWalletRegistrationCommit.js +1 -1
- package/dist/esm/react/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestLookups.js +209 -0
- package/dist/esm/react/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestRecords.js +848 -0
- package/dist/esm/react/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestStore.js +122 -1721
- package/dist/esm/react/core/indexedDB/seamsWalletDB/ecdsaClientPresignatures.js +235 -0
- package/dist/esm/react/core/indexedDB/seamsWalletDB/repositories.js +56 -7
- package/dist/esm/react/core/indexedDB/seamsWalletDB/walletCustodyEcdsaContinuity.js +198 -0
- package/dist/esm/react/core/indexedDB/seamsWalletDB/walletSessionAuthorizationStore.js +1 -1
- package/dist/esm/react/core/indexedDB/unifiedIndexedDBManager.js +6 -0
- package/dist/esm/react/core/indexedDB/walletCustodyEd25519MaterialRecord.js +1 -1
- package/dist/esm/react/core/platform/browser/createBrowserPlatformRuntime.js +1 -44
- package/dist/esm/react/core/rpcClients/near/NearClient.js +19 -214
- package/dist/esm/react/core/rpcClients/near/rpcCalls.js +1 -1
- package/dist/esm/react/core/rpcClients/relayer/routerAbNormalSigning.js +56 -85
- package/dist/esm/react/core/rpcClients/relayer/walletRecoveryPrepare.js +2 -2
- package/dist/esm/react/core/rpcClients/relayer/walletRecoveryRotate.js +0 -1
- package/dist/esm/react/core/rpcClients/relayer/walletRegistration.js +40 -58
- package/dist/esm/react/core/rpcClients/relayer/walletRegistrationTerminalResponse.js +4 -10
- package/dist/esm/react/core/rpcClients/relayer/walletSessionAuthorizationStatus.js +1 -1
- package/dist/esm/react/core/signingEngine/assembly/ports/stepUpRuntime.js +0 -1
- package/dist/esm/react/core/signingEngine/chains/evm/display/evmTx.js +1 -6
- package/dist/esm/react/core/signingEngine/chains/near/display.js +14 -1
- package/dist/esm/react/core/signingEngine/chains/tempo/display.js +1 -6
- package/dist/esm/react/core/signingEngine/flows/recovery/ecdsaDerivationExport.js +1 -1
- package/dist/esm/react/core/signingEngine/flows/recovery/ecdsaExportFlow.js +5 -6
- package/dist/esm/react/core/signingEngine/flows/recovery/exportLaneSelection.js +1 -1
- package/dist/esm/react/core/signingEngine/flows/recovery/passkeyEd25519YaoRecovery.js +16 -24
- package/dist/esm/react/core/signingEngine/flows/registration/accountLifecycle.js +246 -504
- package/dist/esm/react/core/signingEngine/flows/registration/services/passkeyEd25519YaoAddSigner.js +7 -10
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/authPlanning.js +1 -1
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/ecdsaLanes.js +1 -1
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/ecdsaSelection.js +1 -1
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/preparedSigning.js +1 -1
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signEvmFamily.js +3 -5
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signEvmFamilyWithUiConfirmForTempo.js +1 -1
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signEvmWithUiConfirm.js +1 -1
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signers/secp256k1.js +1 -2
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signingFlow.js +4 -4
- package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signingFlowRuntime.js +41 -11
- package/dist/esm/react/core/signingEngine/flows/signNear/shared/ed25519YaoNormalSigning.js +20 -1
- package/dist/esm/react/core/signingEngine/flows/signNear/shared/signatureOnlySigning.js +343 -0
- package/dist/esm/react/core/signingEngine/flows/signNear/shared/signingSessionAuthMode.js +1 -1
- package/dist/esm/react/core/signingEngine/flows/signNear/signDelegate.js +66 -312
- package/dist/esm/react/core/signingEngine/flows/signNear/signNear.js +45 -49
- package/dist/esm/react/core/signingEngine/flows/signNear/signNep413.js +58 -305
- package/dist/esm/react/core/signingEngine/flows/signNear/signTransactions.js +59 -23
- package/dist/esm/react/core/signingEngine/interfaces/accountAuthMetadata.js +0 -1
- package/dist/esm/react/core/signingEngine/nonce/nearNonceLane.js +0 -29
- package/dist/esm/react/core/signingEngine/routerAb/ecdsaDerivation/presignaturePool.js +13 -147
- package/dist/esm/react/core/signingEngine/routerAb/ecdsaDerivation/signingMaterialRef.js +2 -1
- package/dist/esm/react/core/signingEngine/session/SigningSessionCoordinator.js +1 -1
- package/dist/esm/react/core/signingEngine/session/availability/availableSigningLanes.js +4 -4
- package/dist/esm/react/core/signingEngine/session/availability/persistedAvailableSigningLanes.js +3 -3
- package/dist/esm/react/core/signingEngine/session/emailOtp/coordinatorRuntime.js +0 -2
- package/dist/esm/react/core/signingEngine/session/emailOtp/ecdsaLogin.js +2 -2
- package/dist/esm/react/core/signingEngine/session/emailOtp/ecdsaPublication.js +1 -1
- package/dist/esm/react/core/signingEngine/session/emailOtp/ecdsaRecovery.js +2 -2
- package/dist/esm/react/core/signingEngine/session/emailOtp/ed25519ExportContext.js +7 -14
- package/dist/esm/react/core/signingEngine/session/emailOtp/exportRecovery.js +1 -1
- package/dist/esm/react/core/signingEngine/session/emailOtp/exportRecoveryRuntime.js +0 -9
- package/dist/esm/react/core/signingEngine/session/emailOtp/publicTypes.js +0 -1
- package/dist/esm/react/core/signingEngine/session/emailOtp/sealedRefreshPolicy.js +0 -28
- package/dist/esm/react/core/signingEngine/session/emailOtp/sealedSessionRegistry.js +1 -1
- package/dist/esm/react/core/signingEngine/session/emailOtp/walletUnlock.js +1 -1
- package/dist/esm/react/core/signingEngine/session/emailOtp/workerEnrollment.js +1 -1
- package/dist/esm/react/core/signingEngine/session/identity/clientSessionPersistenceState.js +1 -1
- package/dist/esm/react/core/signingEngine/session/identity/evmFamilyEcdsaIdentity.js +3 -3
- package/dist/esm/react/core/signingEngine/session/identity/exactSigningLaneIdentity.js +2 -2
- package/dist/esm/react/core/signingEngine/session/identity/laneIdentity.js +6 -5
- package/dist/esm/react/core/signingEngine/session/keyMaterialBrands.js +2 -21
- package/dist/esm/react/core/signingEngine/session/material/activeWalletAuthorityEcdsaRuntime.js +39 -60
- package/dist/esm/react/core/signingEngine/session/material/ecdsaCapabilityManifest.js +5 -1
- package/dist/esm/react/core/signingEngine/session/material/nearEd25519YaoSigningPreparation.js +1 -1
- package/dist/esm/react/core/signingEngine/session/operationState/authorizationAdmission.js +4 -4
- package/dist/esm/react/core/signingEngine/session/operationState/trace.js +10 -1
- package/dist/esm/react/core/signingEngine/session/passkey/ecdsaBootstrap.js +1 -1
- package/dist/esm/react/core/signingEngine/session/passkey/ecdsaKeyFactsInventory.js +1 -1
- package/dist/esm/react/core/signingEngine/session/passkey/ecdsaRecovery.js +1 -1
- package/dist/esm/react/core/signingEngine/session/passkey/ecdsaWarmCapabilityBootstrap.js +1 -1
- package/dist/esm/react/core/signingEngine/session/passkey/ed25519SessionProvision.js +1 -1
- package/dist/esm/react/core/signingEngine/session/passkey/ed25519YaoLocalMaterial.js +37 -57
- package/dist/esm/react/core/signingEngine/session/passkey/ed25519YaoRecoveryCapability.js +12 -21
- package/dist/esm/react/core/signingEngine/session/passkey/ed25519YaoWarmRecovery.js +10 -19
- package/dist/esm/react/core/signingEngine/session/persistence/sealedSessionRecords.js +764 -0
- package/dist/esm/react/core/signingEngine/session/persistence/sealedSessionStore.js +41 -858
- package/dist/esm/react/core/signingEngine/session/postconditions/runtimePostconditions.js +1 -1
- package/dist/esm/react/core/signingEngine/session/public.js +2 -2
- package/dist/esm/react/core/signingEngine/session/warmCapabilities/capabilityReaderCore.js +1 -1
- package/dist/esm/react/core/signingEngine/session/warmCapabilities/ecdsaBootstrapPersistence.js +1 -1
- package/dist/esm/react/core/signingEngine/session/warmCapabilities/ecdsaLoginPrefill.js +2 -1
- package/dist/esm/react/core/signingEngine/session/warmCapabilities/ecdsaProvisionPlan.js +0 -1
- package/dist/esm/react/core/signingEngine/session/warmCapabilities/ed25519SealedSessionRuntime.js +3 -3
- package/dist/esm/react/core/signingEngine/session/warmCapabilities/nearEd25519CapabilityRehydration.js +1 -1
- package/dist/esm/react/core/signingEngine/session/warmCapabilities/sealedRefreshParity.js +1 -1
- package/dist/esm/react/core/signingEngine/session/warmCapabilities/types.js +1 -2
- package/dist/esm/react/core/signingEngine/session/warmCapabilities/volatileWarmMaterialCommands.js +3 -5
- package/dist/esm/react/core/signingEngine/stepUpConfirmation/passkeyPrompt/touchIdPrompt.js +2 -3
- package/dist/esm/react/core/signingEngine/threshold/crypto/ecdsaDerivationClientWasm.js +2 -1
- package/dist/esm/react/core/signingEngine/threshold/crypto/ed25519YaoLaneWasm.js +2 -2
- package/dist/esm/react/core/signingEngine/threshold/ecdsa/activation.js +2 -1
- package/dist/esm/react/core/signingEngine/threshold/ecdsa/bootstrapSession.js +1 -1
- package/dist/esm/react/core/signingEngine/threshold/ed25519/walletSession.js +1 -1
- package/dist/esm/react/core/signingEngine/threshold/ed25519/yaoPublicCapabilityReferences.js +12 -19
- package/dist/esm/react/core/signingEngine/uiConfirm/PasskeyMpcSessionDurableState.js +2 -1
- package/dist/esm/react/core/signingEngine/uiConfirm/PasskeyMpcSessionManager.js +1 -1
- package/dist/esm/react/core/signingEngine/uiConfirm/handlers/flows/adapters/adapters.js +7 -0
- package/dist/esm/react/core/signingEngine/uiConfirm/handlers/flows/localOnly.js +1 -1
- package/dist/esm/react/core/signingEngine/uiConfirm/handlers/flows/signing.js +9 -16
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/confirm-surface-resize.js +5 -5
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/confirmation-model.js +1 -1
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/ConfirmationModal.js +1 -0
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/TransactionLabel.js +1 -1
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/TransactionReceipt.js +79 -9
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/TransactionReview.js +31 -78
- package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/confirmation-controller.js +1 -0
- package/dist/esm/react/core/signingEngine/walletCustody/activateEd25519Capability.js +2 -1
- package/dist/esm/react/core/signingEngine/walletCustody/ceremonyActiveClientMetadata.js +3 -4
- package/dist/esm/react/core/signingEngine/walletCustody/emailOtpLink.js +2 -2
- package/dist/esm/react/core/signingEngine/walletCustody/recoveryReplacementEnvelope.js +2 -1
- package/dist/esm/react/core/signingEngine/walletCustody/unlockedEd25519ExportRootCapability.js +55 -8
- package/dist/esm/react/core/signingEngine/walletCustody/walletRecoveryRotation.js +52 -81
- package/dist/esm/react/core/signingEngine/webauthnAuth/credentials/credentialExtensions.js +2 -4
- package/dist/esm/react/core/signingEngine/workerManager/deviceLinkingPorts.js +13 -16
- package/dist/esm/react/core/signingEngine/workerManager/deviceLinkingSourceContribution.js +29 -4
- package/dist/esm/react/core/signingEngine/workerManager/ecdsaClientWorkerChannels.js +4 -2
- package/dist/esm/react/core/signingEngine/workerManager/workerTransport.js +20 -5
- package/dist/esm/react/core/signingEngine/workerManager/workerTypes.js +2 -1
- package/dist/esm/react/core/types/linkDevice.js +2 -3
- package/dist/esm/react/core/types/sdkSentEvents.js +7 -5
- package/dist/esm/react/hooks/useQRCamera.js +1 -1
- package/dist/esm/react/shared-ts/src/authorization/delegatedAuthority.js +1 -1
- package/dist/esm/react/shared-ts/src/authorization/operationFingerprint.js +0 -1
- package/dist/esm/react/shared-ts/src/authorization/walletAuthority.js +92 -227
- package/dist/esm/react/shared-ts/src/authorization/walletCustodyOperation.js +4 -6
- package/dist/esm/react/shared-ts/src/device-linking/activeWalletSession.js +70 -1
- package/dist/esm/react/shared-ts/src/device-linking/authorityActivation.js +142 -0
- package/dist/esm/react/shared-ts/src/device-linking/committedSignerPackages.js +3 -3
- package/dist/esm/react/shared-ts/src/device-linking/delegatedActivationPlan.js +3 -1
- package/dist/esm/react/shared-ts/src/device-linking/deviceManagement.js +120 -0
- package/dist/esm/react/shared-ts/src/device-linking/digests.js +8 -63
- package/dist/esm/react/shared-ts/src/device-linking/ed25519ExportRoot.js +3 -1
- package/dist/esm/react/shared-ts/src/device-linking/index.js +6 -4
- package/dist/esm/react/shared-ts/src/device-linking/parsers.js +546 -1308
- package/dist/esm/react/shared-ts/src/device-linking/requestProof.js +3 -3
- package/dist/esm/react/shared-ts/src/device-linking/sourceContribution.js +8 -11
- package/dist/esm/react/shared-ts/src/device-linking/walletSessionCredentialDelivery.js +7 -7
- package/dist/esm/react/shared-ts/src/device-linking/wireFields.js +59 -0
- package/dist/esm/react/shared-ts/src/near/nearClient.js +252 -0
- package/dist/esm/react/shared-ts/src/passkey-custody/custodyEnvelope.js +6 -4
- package/dist/esm/react/shared-ts/src/passkey-custody/custodySecretBinding.js +6 -4
- package/dist/esm/react/shared-ts/src/passkey-custody/primitives.js +5 -39
- package/dist/esm/react/shared-ts/src/signing-lanes/index.js +4 -3
- package/dist/esm/react/shared-ts/src/signing-lanes/ownerContinuity.js +6 -1
- package/dist/esm/react/shared-ts/src/signing-lanes/participantDigest.js +2 -0
- package/dist/esm/react/shared-ts/src/signing-lanes/participants.js +2 -5
- package/dist/esm/react/shared-ts/src/signing-lanes/recordParsers.js +7 -7
- package/dist/esm/react/shared-ts/src/signing-lanes/rotationDigests.js +2 -0
- package/dist/esm/react/shared-ts/src/signing-lanes/rotationParsers.js +3 -3
- package/dist/esm/react/shared-ts/src/signing-lanes/rotationProtocolParsers.js +8 -0
- package/dist/esm/react/shared-ts/src/signing-lanes/rotationWireFields.js +3 -0
- package/dist/esm/react/shared-ts/src/threshold/ed25519OperationFingerprint.js +34 -42
- package/dist/esm/react/shared-ts/src/threshold/keyMaterialBrands.js +25 -0
- package/dist/esm/react/shared-ts/src/threshold/secp256k1.js +1 -2
- package/dist/esm/react/shared-ts/src/utils/addAuthMethodRegistration.js +3 -4
- package/dist/esm/react/shared-ts/src/utils/canonicalPrimitives.js +8 -1
- package/dist/esm/react/shared-ts/src/utils/digestEncoding.js +63 -0
- package/dist/esm/react/shared-ts/src/utils/ecdsaKeyFactsInventory.js +1 -1
- package/dist/esm/react/shared-ts/src/utils/emailOtpDomain.js +3 -3
- package/dist/esm/react/shared-ts/src/utils/encoders.js +1 -1
- package/dist/esm/react/shared-ts/src/utils/errors.js +1 -1
- package/dist/esm/react/shared-ts/src/utils/exactRecord.js +44 -0
- package/dist/esm/react/shared-ts/src/utils/index.js +12 -8
- package/dist/esm/react/shared-ts/src/utils/registrationAuthMethodInput.js +84 -0
- package/dist/esm/react/shared-ts/src/utils/registrationEstablishedSession.js +2 -2
- package/dist/esm/react/shared-ts/src/utils/registrationIds.js +226 -0
- package/dist/esm/react/shared-ts/src/utils/registrationIntent.js +4 -1081
- package/dist/esm/react/shared-ts/src/utils/registrationSignerPlan.js +442 -0
- package/dist/esm/react/shared-ts/src/utils/routerAbEcdsaDerivation.js +9 -8
- package/dist/esm/react/shared-ts/src/utils/routerAbEd25519Yao.js +3 -76
- package/dist/esm/react/shared-ts/src/utils/routerAbEd25519YaoDigests.js +76 -0
- package/dist/esm/react/shared-ts/src/utils/routerAbNormalSigningIdentity.js +1 -4
- package/dist/esm/react/shared-ts/src/utils/routerAbPublicKeyset.js +2 -6
- package/dist/esm/react/shared-ts/src/utils/secureRandomId.js +1 -1
- package/dist/esm/react/shared-ts/src/utils/signerDomain.js +1 -16
- package/dist/esm/react/shared-ts/src/utils/validation.js +36 -2
- package/dist/esm/react/shared-ts/src/utils/walletAuthAuthority.js +1 -1
- package/dist/esm/react/shared-ts/src/utils/walletAuthMethodRecord.js +357 -0
- package/dist/esm/react/shared-ts/src/utils/walletCapabilityBindings.js +2 -2
- package/dist/esm/react/shared-ts/src/utils/wireSchema.js +66 -0
- package/dist/esm/react/shared-ts/src/wallet-recovery/walletRecoveryCommittedProjection.js +10 -13
- package/dist/esm/react/shared-ts/src/wallet-recovery/walletRecoveryEcdsaPossession.js +4 -8
- package/dist/esm/react/shared-ts/src/wallet-recovery/walletRecoveryEnvelopeSet.js +3 -1
- package/dist/esm/react/utils/qrScanner.js +2 -19
- package/dist/{public/sdk/ConfirmationDrawer-G0bT0Dbu.js → esm/sdk/ConfirmationDrawer-MgFTBwwK.js} +2 -1
- package/dist/esm/sdk/{EvmClient-CHw6txjt.js → EvmClient-f3gUhS2L.js} +1 -1
- package/dist/esm/sdk/{NearClient-BQgcqAzG.js → NearClient-DY4NfHeD.js} +194 -147
- package/dist/esm/sdk/{NonceCoordinator-C7QltTDC.js → NonceCoordinator-4XWPhYww.js} +4 -33
- package/dist/esm/sdk/{accountIds-Ck4GAQfm.js → accountIds-DhIPGOSN.js} +1 -1
- package/dist/{public/sdk/accountLifecycle-Ddavc_FC.js → esm/sdk/accountLifecycle-BAGG_rbk.js} +253 -514
- package/dist/esm/sdk/{actions-DsBQcjBn.js → actions-CCvThiKe.js} +1 -1
- package/dist/esm/sdk/{adapters-LgE4nnos.js → adapters-B4JeK1nJ.js} +134 -105
- package/dist/esm/sdk/canonicalPrimitives-BTHWz80v.js +36 -0
- package/dist/{public/sdk/canonicalSignerErrorCode-DAzYzisf.js → esm/sdk/canonicalSignerErrorCode-CRoJMVpp.js} +2 -2
- package/dist/{public/sdk/capabilityKinds-jwCEaqBU.js → esm/sdk/capabilityKinds-hvYqa6S_.js} +1 -1
- package/dist/esm/sdk/chains-BMh3btVo.js +124 -0
- package/dist/{public/sdk/challengeDelivery-BjLKoou3.js → esm/sdk/challengeDelivery-Dd0586fo.js} +2 -2
- package/dist/esm/sdk/{configHelpers-DB73zYvO.js → configHelpers-vAQCzUD0.js} +3 -3
- package/dist/{public/sdk/defaultConfigs-CyNOW4Sy.js → esm/sdk/defaultConfigs-B3c16M_8.js} +5 -5
- package/dist/esm/sdk/{display-Cw90-qmF.js → display-KdIL0ff7.js} +3 -8
- package/dist/esm/sdk/{normalize-BephcEIF.js → domainIds-lcrFg6Sa.js} +84 -84
- package/dist/{public/sdk/ecdsaCapabilityManifest-C8itxV9S.js → esm/sdk/ecdsaCapabilityManifest-kzO_fW09.js} +12 -8
- package/dist/esm/sdk/{ecdsaChainTarget-BOTPGIU_.js → ecdsaChainTarget-Bl-JWyuw.js} +2 -2
- package/dist/esm/sdk/ecdsaPresignLifecycle-BFOTNYCK.js +1983 -0
- package/dist/esm/sdk/{ecdsaPresignPoolIdentity-Yopr4jvS.js → ecdsaPresignPoolIdentity-BjxZVIqn.js} +1 -1
- package/dist/{public/sdk/ecdsaWalletRecords-CAbbVhEY.js → esm/sdk/ecdsaWalletRecords-Cz4m6bIz.js} +6 -4
- package/dist/esm/sdk/encoders-D8d07vpx.js +0 -0
- package/dist/esm/sdk/{enrichDisplayModelWithAbi-DnjR1CqT.js → enrichDisplayModelWithAbi-CWggsykc.js} +2 -2
- package/dist/{public/sdk/evmCryptoWasm-BVj135bZ.js → esm/sdk/evmCryptoWasm-DWklhEEb.js} +1 -1
- package/dist/esm/sdk/evmFamilyEcdsaIdentity-Co5XDcEA.js +4288 -0
- package/dist/{public/sdk/exactSessionState-Bt0HforB.js → esm/sdk/exactSessionState-CiD5fBEs.js} +45 -54
- package/dist/esm/sdk/exactSigningLaneIdentity-DQeqPMST.js +335 -0
- package/dist/esm/sdk/{export-viewer-host-B3K81QGA.js → export-viewer-host-ZqA2Yz3H.js} +3 -3
- package/dist/esm/sdk/{helpers-DpRjHMBx.js → helpers-ZrowMnev.js} +3 -6
- package/dist/{public/sdk/host-Y_xmIzPO.js → esm/sdk/host-BWBbCAMu.js} +12 -12
- package/dist/{public/sdk/intentDigest-A1MbbJPu.js → esm/sdk/intentDigest-CvOSNlCH.js} +2 -2
- package/dist/esm/sdk/{jsxRuntime.module-FAP0NE9p.js → jsxRuntime.module-CuH5ZEIA.js} +1 -1
- package/dist/{public/sdk/keyMaterialBrands-BbjCfzXv.js → esm/sdk/keyMaterialBrands-CX41hur6.js} +15 -13
- package/dist/esm/sdk/{localOnly-B5TYHJiq.js → localOnly-Bg8UuLZ5.js} +8 -10
- package/dist/esm/sdk/{messages-B3UbNZYc.js → messages-C7Dbx9iN.js} +6 -4
- package/dist/{public/sdk/mountExportPrivateKeySurface-CNc6Mch4.js → esm/sdk/mountExportPrivateKeySurface-DgX-IBG_.js} +4 -4
- package/dist/{public/sdk/mountRecoveryCodeBackupSurface-ChwzwnYG.js → esm/sdk/mountRecoveryCodeBackupSurface-DXrExiJ7.js} +2 -2
- package/dist/{public/sdk/nearEd25519YaoMaterialActivation-BLxVE6E5.js → esm/sdk/nearEd25519YaoMaterialActivation-DPb0s3hQ.js} +53 -78
- package/dist/{public/sdk/nearEd25519YaoSigningPreparation-DX6xG-IW.js → esm/sdk/nearEd25519YaoSigningPreparation-BeD-SmbK.js} +10 -8
- package/dist/esm/sdk/{nonceLaneKeys-B_RcSS6M.js → nonceLaneKeys-C3c9lG6u.js} +1 -1
- package/dist/{public/sdk/normalization-oJyXl3Vn.js → esm/sdk/normalization-CBt413-z.js} +2 -2
- package/dist/esm/sdk/{operationFingerprint-DEPg9A3h.js → operationFingerprint-C8Trar4R.js} +4 -4
- package/dist/{public/sdk/operationFingerprint-CsYO6b0a.js → esm/sdk/operationFingerprint-CGZui5dR.js} +2 -1
- package/dist/{public/sdk/passkey-custody-BaHyYMhj.js → esm/sdk/passkey-custody-Bk1jAknm.js} +7 -6
- package/dist/{public/sdk/pendingWalletRecoveryCodeBackup-DyvRysWg.js → esm/sdk/pendingWalletRecoveryCodeBackup-DLzBb3WQ.js} +3 -3
- package/dist/esm/sdk/{recovery-entrypoint-D39R1avB.js → recovery-entrypoint-DW2tGyMs.js} +19 -16
- package/dist/esm/sdk/{registration-D-istkMZ.js → registration-BZDzDv91.js} +2849 -3156
- package/dist/esm/sdk/{registration-BtPLgKHk.js → registration-BzVHODuD.js} +4 -4
- package/dist/{public/sdk/registrationAccounts-AO3QHjas.js → esm/sdk/registrationAccounts-CKku_Sgy.js} +6 -4
- package/dist/esm/sdk/registrationIds-DLSdEKSv.js +310 -0
- package/dist/esm/sdk/registrationIntent-D0PxwEY4.js +393 -0
- package/dist/{public/sdk/registrationPreparationPreload-CvnlDCVn.js → esm/sdk/registrationPreparationPreload-CIAuRlxI.js} +2 -2
- package/dist/esm/sdk/registrationSignerPlan-CAikVZZQ.js +440 -0
- package/dist/esm/sdk/{relayerHttp-LsVTZCxA.js → relayerHttp-VC8Holz1.js} +1 -1
- package/dist/{public/sdk/routePlan-nLpPFHB-.js → esm/sdk/routePlan-D59x5xzQ.js} +1 -1
- package/dist/{public/sdk/router-CeFS9SgT.js → esm/sdk/router-C5lF_J_u.js} +23 -25
- package/dist/{public/sdk/routerAbNormalSigning-DktZKnf1.js → esm/sdk/routerAbNormalSigning-fhvpDtmY.js} +63 -92
- package/dist/esm/sdk/router_ab_ed25519_yao_client_bg.wasm +0 -0
- package/dist/{public/sdk/runtime-auth-B7z1ANNp.js → esm/sdk/runtime-auth-DFTqwj3u.js} +35 -45
- package/dist/esm/sdk/{runtime-device-link-B8HGDakg.js → runtime-device-link-C1Oub8Lw.js} +25 -22
- package/dist/{public/sdk/runtime-ecdsa-tempo-DKdS5-us.js → esm/sdk/runtime-ecdsa-tempo-rkWwolw1.js} +24 -21
- package/dist/{public/sdk/runtime-email-otp-D5bxhdyG.js → esm/sdk/runtime-email-otp-vuUG5LYl.js} +23 -20
- package/dist/esm/sdk/{runtime-export--hvNrx8l.js → runtime-export-FZWj0HxJ.js} +26 -22
- package/dist/esm/sdk/{runtime-near-CEexHoug.js → runtime-near-B9cjurVD.js} +24 -22
- package/dist/esm/sdk/{runtime-preferences-BiqPp1lV.js → runtime-preferences-Dq0bfyS5.js} +24 -21
- package/dist/{public/sdk/runtime-recovery-BYu1gDq_.js → esm/sdk/runtime-recovery-C-vfFKF3.js} +23 -20
- package/dist/{public/sdk/runtime-recovery-codes-DW7bB2tO.js → esm/sdk/runtime-recovery-codes-bTm3fLV4.js} +15 -19
- package/dist/esm/sdk/{runtimeContext-CH97jPZ0.js → runtimeContext-iLXnxVlZ.js} +615 -850
- package/dist/{public/sdk/runtimeLoader-BFAmJAbu.js → esm/sdk/runtimeLoader-hod6T2-m.js} +12 -12
- package/dist/{public/sdk/sdkSentEvents-5Pi-hjHB.js → esm/sdk/sdkSentEvents-MqDkbQg1.js} +10 -8
- package/dist/{public/sdk/secp256k1-Cr1jBW1n.js → esm/sdk/secp256k1-el9aE4Sv.js} +22 -156
- package/dist/esm/sdk/sessionPolicy-CHiilOAB.js +453 -0
- package/dist/{public/sdk/signEvmFamily-Dxk4sBPY.js → esm/sdk/signEvmFamily-e4IWWsZs.js} +108 -99
- package/dist/esm/sdk/{signEvmFamilyWithUiConfirmForTempo-DHTBHHgE.js → signEvmFamilyWithUiConfirmForTempo-Cu9qdk8M.js} +11 -15
- package/dist/{public/sdk/signEvmWithUiConfirm-CSxTBQUW.js → esm/sdk/signEvmWithUiConfirm-C61TCBnh.js} +6 -10
- package/dist/{public/sdk/signNear-B0OCVKoH.js → esm/sdk/signNear-Bblwn2kT.js} +763 -807
- package/dist/esm/sdk/{evmAdapter-C5NR5tiV.js → signatureUses-BkGyYt8F.js} +12 -3
- package/dist/{public/sdk/signerDomain-DDLiwuYS.js → esm/sdk/signerDomain-IEAVrOrc.js} +3 -18
- package/dist/{public/sdk/signerLoader-D0WU1jq_.js → esm/sdk/signerLoader-D7Aey0FD.js} +4 -4
- package/dist/esm/sdk/{signatureUses-C1o1pDql.js → signingFlow-rZfPegH9.js} +16 -29
- package/dist/{public/sdk/trace-DWnDLSuV.js → esm/sdk/trace-rHe0wz7q.js} +11 -2
- package/dist/{public/sdk/transaction-activity-DKgIGpKG.js → esm/sdk/transaction-activity-CSMCveBn.js} +1 -1
- package/dist/esm/sdk/{transactionReview-UoZQ2opj.js → transactionReview-DpHLTznU.js} +4 -6
- package/dist/{public/sdk/transactionReviewAdmission-Cv9kTr4c.js → esm/sdk/transactionReviewAdmission-BCPvl8OZ.js} +2 -2
- package/dist/esm/sdk/{transactionState-Bpm4GamO.js → transactionState-DP9O8F6f.js} +12 -10
- package/dist/esm/sdk/tx-confirm-ui.js +182 -154
- package/dist/esm/sdk/types-Dx9fczU7.js +111 -0
- package/dist/{public/sdk/validation-BphUDXs7.js → esm/sdk/validation-gat4LEKm.js} +36 -2
- package/dist/esm/sdk/wallet-iframe-host-ecdsa.js +2 -2
- package/dist/esm/sdk/wallet-iframe-host-full.js +2 -2
- package/dist/esm/sdk/wallet-iframe-host-near.js +2 -2
- package/dist/esm/sdk/wallet-iframe-host-runtime.js +2 -2
- package/dist/esm/sdk/{wallet-recovery-CKqoHbxT.js → wallet-recovery-Bz9qKgaL.js} +19 -25
- package/dist/esm/sdk/wallet-service.css +21 -0
- package/dist/esm/sdk/wallet-ui.css +95 -45
- package/dist/{public/sdk/sessionPolicy-B4FsPuk2.js → esm/sdk/walletAuthority-BQBxgUBn.js} +506 -445
- package/dist/{public/sdk/ed25519SeedMaterial-Cghz8-XB.js → esm/sdk/walletCustodyEcdsaContinuity-Hn4ORIbf.js} +1898 -2033
- package/dist/{public/sdk/walletRecoveryCommit-G6w6N5RV.js → esm/sdk/walletRecoveryCommit-sjGNTHUj.js} +17 -22
- package/dist/esm/sdk/{walletRecoveryRotate-BYOYJAyb.js → walletRecoveryRotate-BgLlW5ih.js} +1 -1
- package/dist/esm/sdk/{warmSessionHydration-DDNYdTCz.js → warmSessionHydration-Os8niEm7.js} +1 -1
- package/dist/esm/sdk/{webauthnP256-CHqprSh1.js → webauthnP256-DC5EIbKN.js} +1 -1
- package/dist/esm/shared-ts/src/authorization/delegatedAuthority.js +1 -1
- package/dist/esm/shared-ts/src/authorization/operationFingerprint.js +1 -2
- package/dist/esm/shared-ts/src/authorization/walletAuthority.js +93 -228
- package/dist/esm/shared-ts/src/authorization/walletCustodyOperation.js +4 -6
- package/dist/esm/shared-ts/src/device-linking/activeWalletSession.js +70 -1
- package/dist/esm/shared-ts/src/device-linking/authorityActivation.js +142 -0
- package/dist/esm/shared-ts/src/device-linking/committedSignerPackages.js +3 -3
- package/dist/esm/shared-ts/src/device-linking/delegatedActivationPlan.js +3 -1
- package/dist/esm/shared-ts/src/device-linking/deviceManagement.js +120 -0
- package/dist/esm/shared-ts/src/device-linking/digests.js +8 -63
- package/dist/esm/shared-ts/src/device-linking/ed25519ExportRoot.js +3 -1
- package/dist/esm/shared-ts/src/device-linking/index.js +6 -4
- package/dist/esm/shared-ts/src/device-linking/parsers.js +550 -1311
- package/dist/esm/shared-ts/src/device-linking/requestProof.js +3 -3
- package/dist/esm/shared-ts/src/device-linking/sourceContribution.js +7 -10
- package/dist/esm/shared-ts/src/device-linking/walletSessionCredentialDelivery.js +7 -7
- package/dist/esm/shared-ts/src/device-linking/wireFields.js +59 -0
- package/dist/esm/shared-ts/src/near/nearClient.js +252 -0
- package/dist/esm/shared-ts/src/passkey-custody/custodyEnvelope.js +6 -4
- package/dist/esm/shared-ts/src/passkey-custody/custodySecretBinding.js +6 -4
- package/dist/esm/shared-ts/src/passkey-custody/primitives.js +5 -39
- package/dist/esm/shared-ts/src/signing-lanes/index.js +4 -3
- package/dist/esm/shared-ts/src/signing-lanes/ownerContinuity.js +6 -1
- package/dist/esm/shared-ts/src/signing-lanes/participantDigest.js +2 -0
- package/dist/esm/shared-ts/src/signing-lanes/participants.js +2 -5
- package/dist/esm/shared-ts/src/signing-lanes/recordParsers.js +7 -7
- package/dist/esm/shared-ts/src/signing-lanes/rotationDigests.js +2 -0
- package/dist/esm/shared-ts/src/signing-lanes/rotationParsers.js +3 -3
- package/dist/esm/shared-ts/src/signing-lanes/rotationProtocolParsers.js +8 -0
- package/dist/esm/shared-ts/src/signing-lanes/rotationWireFields.js +3 -0
- package/dist/esm/shared-ts/src/threshold/ed25519OperationFingerprint.js +34 -42
- package/dist/esm/shared-ts/src/threshold/keyMaterialBrands.js +25 -0
- package/dist/esm/shared-ts/src/threshold/secp256k1.js +1 -2
- package/dist/esm/shared-ts/src/utils/addAuthMethodRegistration.js +3 -4
- package/dist/esm/shared-ts/src/utils/canonicalPrimitives.js +8 -1
- package/dist/esm/shared-ts/src/utils/digestEncoding.js +63 -0
- package/dist/esm/shared-ts/src/utils/ecdsaKeyFactsInventory.js +1 -1
- package/dist/esm/shared-ts/src/utils/emailOtpDomain.js +3 -3
- package/dist/esm/shared-ts/src/utils/encoders.js +1 -1
- package/dist/esm/shared-ts/src/utils/errors.js +1 -1
- package/dist/esm/shared-ts/src/utils/exactRecord.js +44 -0
- package/dist/esm/shared-ts/src/utils/index.js +18 -14
- package/dist/esm/shared-ts/src/utils/registrationAuthMethodInput.js +84 -0
- package/dist/esm/shared-ts/src/utils/registrationEstablishedSession.js +5 -5
- package/dist/esm/shared-ts/src/utils/registrationIds.js +226 -0
- package/dist/esm/shared-ts/src/utils/registrationIntent.js +4 -1081
- package/dist/esm/shared-ts/src/utils/registrationSignerPlan.js +442 -0
- package/dist/esm/shared-ts/src/utils/routerAbEcdsaDerivation.js +11 -10
- package/dist/esm/shared-ts/src/utils/routerAbEd25519Yao.js +3 -76
- package/dist/esm/shared-ts/src/utils/routerAbEd25519YaoDigests.js +76 -0
- package/dist/esm/shared-ts/src/utils/routerAbNormalSigningIdentity.js +1 -4
- package/dist/esm/shared-ts/src/utils/routerAbPublicKeyset.js +2 -6
- package/dist/esm/shared-ts/src/utils/secureRandomId.js +1 -1
- package/dist/esm/shared-ts/src/utils/signerDomain.js +1 -16
- package/dist/esm/shared-ts/src/utils/validation.js +36 -2
- package/dist/esm/shared-ts/src/utils/walletAuthAuthority.js +1 -1
- package/dist/esm/shared-ts/src/utils/walletAuthMethodRecord.js +357 -0
- package/dist/esm/shared-ts/src/utils/walletCapabilityBindings.js +2 -2
- package/dist/esm/shared-ts/src/utils/wireSchema.js +66 -0
- package/dist/esm/shared-ts/src/wallet-recovery/recoveryCodeLocator.js +1 -1
- package/dist/esm/shared-ts/src/wallet-recovery/recoveryCodeReservation.js +1 -1
- package/dist/esm/shared-ts/src/wallet-recovery/recoveryKeyId.js +1 -1
- package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryCommittedProjection.js +10 -13
- package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryEcdsaPossession.js +4 -8
- package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryEnvelopeSet.js +3 -1
- package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker.d.ts +18 -5
- package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker.js +44 -9
- 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 +10 -1
- package/dist/esm/wasm/router_ab_ecdsa_client/pkg/router_ab_ecdsa_client.js +31 -1
- 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 +1 -1
- package/dist/esm/wasm/router_ab_ed25519_yao_client/pkg/router_ab_ed25519_yao_client.js +1 -1
- package/dist/esm/wasm/router_ab_ed25519_yao_client/pkg/router_ab_ed25519_yao_client_bg.wasm +0 -0
- package/dist/public/headers.manifest.json +1 -1
- package/dist/{esm/sdk/ConfirmationDrawer-G0bT0Dbu.js → public/sdk/ConfirmationDrawer-MgFTBwwK.js} +2 -1
- package/dist/public/sdk/{EvmClient-CHw6txjt.js → EvmClient-f3gUhS2L.js} +1 -1
- package/dist/public/sdk/{NearClient-BQgcqAzG.js → NearClient-DY4NfHeD.js} +194 -147
- package/dist/public/sdk/{NonceCoordinator-C7QltTDC.js → NonceCoordinator-4XWPhYww.js} +4 -33
- package/dist/public/sdk/{accountIds-Ck4GAQfm.js → accountIds-DhIPGOSN.js} +1 -1
- package/dist/{esm/sdk/accountLifecycle-Ddavc_FC.js → public/sdk/accountLifecycle-BAGG_rbk.js} +253 -514
- package/dist/public/sdk/{actions-DsBQcjBn.js → actions-CCvThiKe.js} +1 -1
- package/dist/public/sdk/{adapters-LgE4nnos.js → adapters-B4JeK1nJ.js} +134 -105
- package/dist/public/sdk/canonicalPrimitives-BTHWz80v.js +36 -0
- package/dist/{esm/sdk/canonicalSignerErrorCode-DAzYzisf.js → public/sdk/canonicalSignerErrorCode-CRoJMVpp.js} +2 -2
- package/dist/{esm/sdk/capabilityKinds-jwCEaqBU.js → public/sdk/capabilityKinds-hvYqa6S_.js} +1 -1
- package/dist/public/sdk/chains-BMh3btVo.js +124 -0
- package/dist/{esm/sdk/challengeDelivery-BjLKoou3.js → public/sdk/challengeDelivery-Dd0586fo.js} +2 -2
- package/dist/public/sdk/{configHelpers-DB73zYvO.js → configHelpers-vAQCzUD0.js} +3 -3
- package/dist/{esm/sdk/defaultConfigs-CyNOW4Sy.js → public/sdk/defaultConfigs-B3c16M_8.js} +5 -5
- package/dist/public/sdk/{display-Cw90-qmF.js → display-KdIL0ff7.js} +3 -8
- package/dist/public/sdk/{normalize-BephcEIF.js → domainIds-lcrFg6Sa.js} +84 -84
- package/dist/{esm/sdk/ecdsaCapabilityManifest-C8itxV9S.js → public/sdk/ecdsaCapabilityManifest-kzO_fW09.js} +12 -8
- package/dist/public/sdk/{ecdsaChainTarget-BOTPGIU_.js → ecdsaChainTarget-Bl-JWyuw.js} +2 -2
- package/dist/public/sdk/ecdsaPresignLifecycle-BFOTNYCK.js +1983 -0
- package/dist/public/sdk/{ecdsaPresignPoolIdentity-Yopr4jvS.js → ecdsaPresignPoolIdentity-BjxZVIqn.js} +1 -1
- package/dist/{esm/sdk/ecdsaWalletRecords-CAbbVhEY.js → public/sdk/ecdsaWalletRecords-Cz4m6bIz.js} +6 -4
- package/dist/public/sdk/encoders-D8d07vpx.js +0 -0
- package/dist/public/sdk/{enrichDisplayModelWithAbi-DnjR1CqT.js → enrichDisplayModelWithAbi-CWggsykc.js} +2 -2
- package/dist/{esm/sdk/evmCryptoWasm-BVj135bZ.js → public/sdk/evmCryptoWasm-DWklhEEb.js} +1 -1
- package/dist/public/sdk/evmFamilyEcdsaIdentity-Co5XDcEA.js +4288 -0
- package/dist/{esm/sdk/exactSessionState-Bt0HforB.js → public/sdk/exactSessionState-CiD5fBEs.js} +45 -54
- package/dist/public/sdk/exactSigningLaneIdentity-DQeqPMST.js +335 -0
- package/dist/public/sdk/{export-viewer-host-B3K81QGA.js → export-viewer-host-ZqA2Yz3H.js} +3 -3
- package/dist/public/sdk/{helpers-DpRjHMBx.js → helpers-ZrowMnev.js} +3 -6
- package/dist/{esm/sdk/host-Y_xmIzPO.js → public/sdk/host-BWBbCAMu.js} +12 -12
- package/dist/{esm/sdk/intentDigest-A1MbbJPu.js → public/sdk/intentDigest-CvOSNlCH.js} +2 -2
- package/dist/public/sdk/{jsxRuntime.module-FAP0NE9p.js → jsxRuntime.module-CuH5ZEIA.js} +1 -1
- package/dist/{esm/sdk/keyMaterialBrands-BbjCfzXv.js → public/sdk/keyMaterialBrands-CX41hur6.js} +15 -13
- package/dist/public/sdk/{localOnly-B5TYHJiq.js → localOnly-Bg8UuLZ5.js} +8 -10
- package/dist/public/sdk/{messages-B3UbNZYc.js → messages-C7Dbx9iN.js} +6 -4
- package/dist/{esm/sdk/mountExportPrivateKeySurface-CNc6Mch4.js → public/sdk/mountExportPrivateKeySurface-DgX-IBG_.js} +4 -4
- package/dist/{esm/sdk/mountRecoveryCodeBackupSurface-ChwzwnYG.js → public/sdk/mountRecoveryCodeBackupSurface-DXrExiJ7.js} +2 -2
- package/dist/{esm/sdk/nearEd25519YaoMaterialActivation-BLxVE6E5.js → public/sdk/nearEd25519YaoMaterialActivation-DPb0s3hQ.js} +53 -78
- package/dist/{esm/sdk/nearEd25519YaoSigningPreparation-DX6xG-IW.js → public/sdk/nearEd25519YaoSigningPreparation-BeD-SmbK.js} +10 -8
- package/dist/public/sdk/{nonceLaneKeys-B_RcSS6M.js → nonceLaneKeys-C3c9lG6u.js} +1 -1
- package/dist/{esm/sdk/normalization-oJyXl3Vn.js → public/sdk/normalization-CBt413-z.js} +2 -2
- package/dist/public/sdk/{operationFingerprint-DEPg9A3h.js → operationFingerprint-C8Trar4R.js} +4 -4
- package/dist/{esm/sdk/operationFingerprint-CsYO6b0a.js → public/sdk/operationFingerprint-CGZui5dR.js} +2 -1
- package/dist/{esm/sdk/passkey-custody-BaHyYMhj.js → public/sdk/passkey-custody-Bk1jAknm.js} +7 -6
- package/dist/{esm/sdk/pendingWalletRecoveryCodeBackup-DyvRysWg.js → public/sdk/pendingWalletRecoveryCodeBackup-DLzBb3WQ.js} +3 -3
- package/dist/public/sdk/{recovery-entrypoint-D39R1avB.js → recovery-entrypoint-DW2tGyMs.js} +19 -16
- package/dist/public/sdk/{registration-D-istkMZ.js → registration-BZDzDv91.js} +2849 -3156
- package/dist/public/sdk/{registration-BtPLgKHk.js → registration-BzVHODuD.js} +4 -4
- package/dist/{esm/sdk/registrationAccounts-AO3QHjas.js → public/sdk/registrationAccounts-CKku_Sgy.js} +6 -4
- package/dist/public/sdk/registrationIds-DLSdEKSv.js +310 -0
- package/dist/public/sdk/registrationIntent-D0PxwEY4.js +393 -0
- package/dist/{esm/sdk/registrationPreparationPreload-CvnlDCVn.js → public/sdk/registrationPreparationPreload-CIAuRlxI.js} +2 -2
- package/dist/public/sdk/registrationSignerPlan-CAikVZZQ.js +440 -0
- package/dist/public/sdk/{relayerHttp-LsVTZCxA.js → relayerHttp-VC8Holz1.js} +1 -1
- package/dist/{esm/sdk/routePlan-nLpPFHB-.js → public/sdk/routePlan-D59x5xzQ.js} +1 -1
- package/dist/{esm/sdk/router-CeFS9SgT.js → public/sdk/router-C5lF_J_u.js} +23 -25
- package/dist/{esm/sdk/routerAbNormalSigning-DktZKnf1.js → public/sdk/routerAbNormalSigning-fhvpDtmY.js} +63 -92
- package/dist/public/sdk/router_ab_ed25519_yao_client_bg.wasm +0 -0
- package/dist/{esm/sdk/runtime-auth-B7z1ANNp.js → public/sdk/runtime-auth-DFTqwj3u.js} +35 -45
- package/dist/public/sdk/{runtime-device-link-B8HGDakg.js → runtime-device-link-C1Oub8Lw.js} +25 -22
- package/dist/{esm/sdk/runtime-ecdsa-tempo-DKdS5-us.js → public/sdk/runtime-ecdsa-tempo-rkWwolw1.js} +24 -21
- package/dist/{esm/sdk/runtime-email-otp-D5bxhdyG.js → public/sdk/runtime-email-otp-vuUG5LYl.js} +23 -20
- package/dist/public/sdk/{runtime-export--hvNrx8l.js → runtime-export-FZWj0HxJ.js} +26 -22
- package/dist/public/sdk/{runtime-near-CEexHoug.js → runtime-near-B9cjurVD.js} +24 -22
- package/dist/public/sdk/{runtime-preferences-BiqPp1lV.js → runtime-preferences-Dq0bfyS5.js} +24 -21
- package/dist/{esm/sdk/runtime-recovery-BYu1gDq_.js → public/sdk/runtime-recovery-C-vfFKF3.js} +23 -20
- package/dist/{esm/sdk/runtime-recovery-codes-DW7bB2tO.js → public/sdk/runtime-recovery-codes-bTm3fLV4.js} +15 -19
- package/dist/public/sdk/{runtimeContext-CH97jPZ0.js → runtimeContext-iLXnxVlZ.js} +615 -850
- package/dist/{esm/sdk/runtimeLoader-BFAmJAbu.js → public/sdk/runtimeLoader-hod6T2-m.js} +12 -12
- package/dist/{esm/sdk/sdkSentEvents-5Pi-hjHB.js → public/sdk/sdkSentEvents-MqDkbQg1.js} +10 -8
- package/dist/{esm/sdk/secp256k1-Cr1jBW1n.js → public/sdk/secp256k1-el9aE4Sv.js} +22 -156
- package/dist/public/sdk/sessionPolicy-CHiilOAB.js +453 -0
- package/dist/{esm/sdk/signEvmFamily-Dxk4sBPY.js → public/sdk/signEvmFamily-e4IWWsZs.js} +108 -99
- package/dist/public/sdk/{signEvmFamilyWithUiConfirmForTempo-DHTBHHgE.js → signEvmFamilyWithUiConfirmForTempo-Cu9qdk8M.js} +11 -15
- package/dist/{esm/sdk/signEvmWithUiConfirm-CSxTBQUW.js → public/sdk/signEvmWithUiConfirm-C61TCBnh.js} +6 -10
- package/dist/{esm/sdk/signNear-B0OCVKoH.js → public/sdk/signNear-Bblwn2kT.js} +763 -807
- package/dist/public/sdk/{evmAdapter-C5NR5tiV.js → signatureUses-BkGyYt8F.js} +12 -3
- package/dist/{esm/sdk/signerDomain-DDLiwuYS.js → public/sdk/signerDomain-IEAVrOrc.js} +3 -18
- package/dist/{esm/sdk/signerLoader-D0WU1jq_.js → public/sdk/signerLoader-D7Aey0FD.js} +4 -4
- package/dist/public/sdk/{signatureUses-C1o1pDql.js → signingFlow-rZfPegH9.js} +16 -29
- package/dist/{esm/sdk/trace-DWnDLSuV.js → public/sdk/trace-rHe0wz7q.js} +11 -2
- package/dist/{esm/sdk/transaction-activity-DKgIGpKG.js → public/sdk/transaction-activity-CSMCveBn.js} +1 -1
- package/dist/public/sdk/{transactionReview-UoZQ2opj.js → transactionReview-DpHLTznU.js} +4 -6
- package/dist/{esm/sdk/transactionReviewAdmission-Cv9kTr4c.js → public/sdk/transactionReviewAdmission-BCPvl8OZ.js} +2 -2
- package/dist/public/sdk/{transactionState-Bpm4GamO.js → transactionState-DP9O8F6f.js} +12 -10
- package/dist/public/sdk/tx-confirm-ui.js +182 -154
- package/dist/public/sdk/types-Dx9fczU7.js +111 -0
- package/dist/{esm/sdk/validation-BphUDXs7.js → public/sdk/validation-gat4LEKm.js} +36 -2
- package/dist/public/sdk/wallet-iframe-host-ecdsa.js +2 -2
- package/dist/public/sdk/wallet-iframe-host-full.js +2 -2
- package/dist/public/sdk/wallet-iframe-host-near.js +2 -2
- package/dist/public/sdk/wallet-iframe-host-runtime.js +2 -2
- package/dist/public/sdk/{wallet-recovery-CKqoHbxT.js → wallet-recovery-Bz9qKgaL.js} +19 -25
- package/dist/public/sdk/wallet-service.css +21 -0
- package/dist/public/sdk/wallet-ui.css +95 -45
- package/dist/{esm/sdk/sessionPolicy-B4FsPuk2.js → public/sdk/walletAuthority-BQBxgUBn.js} +506 -445
- package/dist/{esm/sdk/ed25519SeedMaterial-Cghz8-XB.js → public/sdk/walletCustodyEcdsaContinuity-Hn4ORIbf.js} +1898 -2033
- package/dist/{esm/sdk/walletRecoveryCommit-G6w6N5RV.js → public/sdk/walletRecoveryCommit-sjGNTHUj.js} +17 -22
- package/dist/public/sdk/{walletRecoveryRotate-BYOYJAyb.js → walletRecoveryRotate-BgLlW5ih.js} +1 -1
- package/dist/public/sdk/{warmSessionHydration-DDNYdTCz.js → warmSessionHydration-Os8niEm7.js} +1 -1
- package/dist/public/sdk/{webauthnP256-CHqprSh1.js → webauthnP256-DC5EIbKN.js} +1 -1
- package/dist/public/sdk/workers/device-linking-key.worker.js +2954 -3134
- package/dist/public/sdk/workers/ecdsa-derivation-client.worker.js +1688 -2144
- package/dist/public/sdk/workers/ecdsa-online-client.worker.js +9 -117
- package/dist/public/sdk/workers/ecdsa-presign-client.worker.js +44 -147
- package/dist/public/sdk/workers/email-otp.worker.js +9265 -9596
- package/dist/public/sdk/workers/evm-crypto.worker.js +8 -6
- package/dist/public/sdk/workers/near-signer.worker.js +4 -4
- package/dist/public/sdk/workers/near_signer.wasm +0 -0
- package/dist/public/sdk/workers/passkey-confirm.worker.js +6 -3
- package/dist/public/sdk/workers/passkey-mpc-export.worker.js +95 -101
- package/dist/public/sdk/workers/passkey-mpc-session.worker.js +205 -202
- 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/tempo-signer.worker.js +8 -6
- package/dist/public/sdk/workers/wallet-custody-ceremony.worker.js +223 -215
- 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 +334 -214
- package/dist/public/wallet-service/index.html +4 -4
- package/dist/types/shared-ts/src/authorization/capabilityKinds.d.ts +8 -26
- package/dist/types/shared-ts/src/authorization/delegatedAuthority.d.ts +0 -8
- package/dist/types/shared-ts/src/authorization/operationFingerprint.d.ts +1 -3
- package/dist/types/shared-ts/src/authorization/walletAuthority.d.ts +25 -12
- package/dist/types/shared-ts/src/authorization/walletSessionIssuance.d.ts +2 -1
- package/dist/types/shared-ts/src/device-linking/activeWalletSession.d.ts +3 -2
- package/dist/types/shared-ts/src/device-linking/authorityActivation.d.ts +5 -0
- package/dist/types/shared-ts/src/device-linking/committedSignerPackages.d.ts +2 -5
- package/dist/types/shared-ts/src/device-linking/contracts.d.ts +8 -11
- package/dist/types/shared-ts/src/device-linking/contracts.typecheck.d.ts +2 -1
- package/dist/types/shared-ts/src/device-linking/deviceManagement.d.ts +7 -0
- package/dist/types/shared-ts/src/device-linking/digests.d.ts +0 -5
- package/dist/types/shared-ts/src/device-linking/ed25519ExportRoot.d.ts +3 -2
- package/dist/types/shared-ts/src/device-linking/index.d.ts +2 -0
- package/dist/types/shared-ts/src/device-linking/parsers.d.ts +4 -41
- package/dist/types/shared-ts/src/device-linking/requestProof.d.ts +0 -1
- package/dist/types/shared-ts/src/device-linking/sourceContribution.d.ts +3 -2
- package/dist/types/shared-ts/src/device-linking/walletSessionCredentialDelivery.d.ts +2 -1
- package/dist/types/shared-ts/src/device-linking/wireFields.d.ts +26 -0
- package/dist/types/shared-ts/src/near/actions.d.ts +4 -4
- package/dist/types/shared-ts/src/near/delegate.d.ts +3 -2
- package/dist/types/shared-ts/src/near/nearClient.d.ts +145 -0
- package/dist/types/shared-ts/src/passkey-custody/ceremonyCommitPayload.d.ts +0 -22
- package/dist/types/shared-ts/src/passkey-custody/credentialActivity.d.ts +2 -4
- package/dist/types/shared-ts/src/passkey-custody/custodyEnvelope.d.ts +9 -18
- package/dist/types/shared-ts/src/passkey-custody/custodySecretBinding.d.ts +8 -24
- package/dist/types/shared-ts/src/passkey-custody/index.d.ts +0 -2
- package/dist/types/shared-ts/src/passkey-custody/primitives.d.ts +0 -14
- package/dist/types/shared-ts/src/signing-lanes/evmFamilySigningKeySlotId.d.ts +0 -15
- package/dist/types/shared-ts/src/signing-lanes/execution.d.ts +2 -51
- package/dist/types/shared-ts/src/signing-lanes/index.d.ts +1 -2
- package/dist/types/shared-ts/src/signing-lanes/ownerContinuity.d.ts +1 -2
- package/dist/types/shared-ts/src/signing-lanes/participantDigest.d.ts +5 -27
- package/dist/types/shared-ts/src/signing-lanes/participants.d.ts +0 -11
- package/dist/types/shared-ts/src/signing-lanes/recordParsers.d.ts +6 -53
- package/dist/types/shared-ts/src/signing-lanes/records.d.ts +1 -2
- package/dist/types/shared-ts/src/signing-lanes/rotation.d.ts +15 -37
- package/dist/types/shared-ts/src/signing-lanes/rotationDigests.d.ts +1 -20
- package/dist/types/shared-ts/src/signing-lanes/rotationLifecycle.d.ts +4 -25
- package/dist/types/shared-ts/src/signing-lanes/rotationParsers.d.ts +1 -41
- package/dist/types/shared-ts/src/signing-lanes/rotationProtocolParsers.d.ts +6 -0
- package/dist/types/shared-ts/src/signing-lanes/rotationWireFields.d.ts +20 -0
- package/dist/types/shared-ts/src/threshold/ecdsaDerivationRoleLocalBootstrap.d.ts +2 -35
- package/dist/types/shared-ts/src/threshold/ed25519OperationFingerprint.d.ts +8 -35
- package/dist/types/shared-ts/src/threshold/keyMaterialBrands.d.ts +25 -0
- package/dist/types/shared-ts/src/threshold/participants.d.ts +3 -9
- package/dist/types/shared-ts/src/threshold/secp256k1.d.ts +0 -37
- package/dist/types/shared-ts/src/threshold/sessionPolicy.d.ts +24 -0
- package/dist/types/shared-ts/src/threshold/signingRootScope.d.ts +2 -5
- package/dist/types/shared-ts/src/utils/addAuthMethodRegistration.d.ts +3 -4
- package/dist/types/shared-ts/src/utils/addWalletAuthMethod.d.ts +7 -108
- package/dist/types/shared-ts/src/utils/addWalletAuthMethod.typecheck.d.ts +16 -3
- package/dist/types/shared-ts/src/utils/canonicalPrimitives.d.ts +2 -0
- package/dist/types/shared-ts/src/utils/digestEncoding.d.ts +9 -0
- package/dist/types/shared-ts/src/utils/domainIds.d.ts +1 -2
- package/dist/types/shared-ts/src/utils/ecdsaKeyFactsInventory.d.ts +1 -2
- package/dist/types/shared-ts/src/utils/emailOtpDomain.d.ts +5 -5
- package/dist/types/shared-ts/src/utils/emailOtpRecoveryKey.d.ts +0 -2
- package/dist/types/shared-ts/src/utils/errors.d.ts +0 -7
- package/dist/types/shared-ts/src/utils/exactRecord.d.ts +12 -0
- package/dist/types/shared-ts/src/utils/index.d.ts +5 -2
- package/dist/types/shared-ts/src/utils/jsonRpc.d.ts +3 -2
- package/dist/types/shared-ts/src/utils/near.d.ts +2 -1
- package/dist/types/shared-ts/src/utils/nearRpcResults.d.ts +7 -7
- package/dist/types/shared-ts/src/utils/normalize.d.ts +0 -4
- package/dist/types/shared-ts/src/utils/registrationAuthMethodInput.d.ts +184 -0
- package/dist/types/shared-ts/src/utils/registrationContracts.d.ts +76 -0
- package/dist/types/shared-ts/src/utils/registrationEstablishedSession.d.ts +1 -2
- package/dist/types/shared-ts/src/utils/registrationIds.d.ts +56 -0
- package/dist/types/shared-ts/src/utils/registrationIntent.d.ts +9 -514
- package/dist/types/shared-ts/src/utils/registrationSignerPlan.d.ts +142 -0
- package/dist/types/shared-ts/src/utils/routerAbEcdsaDerivation.d.ts +21 -92
- package/dist/types/shared-ts/src/utils/routerAbEd25519Yao.d.ts +14 -99
- package/dist/types/shared-ts/src/utils/routerAbEd25519YaoDigests.d.ts +39 -0
- package/dist/types/shared-ts/src/utils/routerAbPublicKeyset.d.ts +10 -15
- package/dist/types/shared-ts/src/utils/routerAbTraceContext.d.ts +2 -1
- package/dist/types/shared-ts/src/utils/secureRandomId.d.ts +0 -2
- package/dist/types/shared-ts/src/utils/signerDomain.d.ts +3 -35
- package/dist/types/shared-ts/src/utils/signerSlot.d.ts +0 -4
- package/dist/types/shared-ts/src/utils/signingSessionSeal.d.ts +1 -7
- package/dist/types/shared-ts/src/utils/validation.d.ts +10 -10
- package/dist/types/shared-ts/src/utils/variant.d.ts +11 -0
- package/dist/types/shared-ts/src/utils/variant.typecheck.d.ts +22 -0
- package/dist/types/shared-ts/src/utils/walletAddSignerActivation.d.ts +2 -2
- package/dist/types/shared-ts/src/utils/walletAuthAuthority.d.ts +1 -58
- package/dist/types/shared-ts/src/utils/walletAuthMethodRecord.d.ts +104 -0
- package/dist/types/shared-ts/src/utils/walletCapabilityBindings.d.ts +3 -7
- package/dist/types/shared-ts/src/utils/webauthnDeviceInfo.d.ts +3 -4
- package/dist/types/shared-ts/src/utils/wireSchema.d.ts +60 -0
- package/dist/types/shared-ts/src/wallet-recovery/backupAcknowledgement.d.ts +2 -1
- package/dist/types/shared-ts/src/wallet-recovery/index.d.ts +0 -1
- package/dist/types/shared-ts/src/wallet-recovery/recoveryCodeLocator.d.ts +0 -16
- package/dist/types/shared-ts/src/wallet-recovery/recoveryCodeReservation.d.ts +2 -11
- package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryCommittedProjection.d.ts +6 -18
- package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryEcdsaPossession.d.ts +0 -2
- package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryEnvelopeSet.d.ts +1 -3
- package/dist/types/wallet/src/SeamsWeb/SeamsWeb.d.ts +0 -12
- package/dist/types/wallet/src/SeamsWeb/assembly/browserSigningSurfaceAssembly.d.ts +3 -13
- package/dist/types/wallet/src/SeamsWeb/assembly/browserSigningSurfacePorts.d.ts +2 -1
- package/dist/types/wallet/src/SeamsWeb/assembly/browserWorkerWarmupPolicy.d.ts +1 -3
- package/dist/types/wallet/src/SeamsWeb/assembly/createBrowserSigningStores.d.ts +2 -1
- package/dist/types/wallet/src/SeamsWeb/assembly/initializeBrowserSigningRuntime.d.ts +2 -1
- package/dist/types/wallet/src/SeamsWeb/assembly/preconnectWalletAssets.d.ts +2 -3
- package/dist/types/wallet/src/SeamsWeb/operations/auth/login.d.ts +13 -88
- package/dist/types/wallet/src/SeamsWeb/operations/auth/walletAuth.d.ts +2 -2
- package/dist/types/wallet/src/SeamsWeb/operations/auth/walletUnlockEcdsaSubject.d.ts +2 -18
- package/dist/types/wallet/src/SeamsWeb/operations/auth/walletUnlockSubject.d.ts +4 -7
- package/dist/types/wallet/src/SeamsWeb/operations/authMethods/addAuthMethodSourceClaim.d.ts +5 -6
- package/dist/types/wallet/src/SeamsWeb/operations/authMethods/emailOtp/addEmailOtp.d.ts +1 -1
- package/dist/types/wallet/src/SeamsWeb/operations/authMethods/emailOtp/challenge.d.ts +0 -13
- package/dist/types/wallet/src/SeamsWeb/operations/authMethods/emailOtp/googleEmailOtpWalletAuthFlow.d.ts +0 -1
- package/dist/types/wallet/src/SeamsWeb/operations/authMethods/emailOtp/localEmailOtpProjection.d.ts +2 -1
- package/dist/types/wallet/src/SeamsWeb/operations/authMethods/emailOtp/registrationAuthority.d.ts +2 -2
- package/dist/types/wallet/src/SeamsWeb/operations/authMethods/emailOtp/registrationOffer.d.ts +1 -2
- package/dist/types/wallet/src/SeamsWeb/operations/authMethods/passkey/exactPasskeyAuthority.d.ts +20 -0
- package/dist/types/wallet/src/SeamsWeb/operations/authMethods/passkey/localPasskeyProjection.d.ts +4 -42
- package/dist/types/wallet/src/SeamsWeb/operations/authMethods/passkey/registrationAuthority.d.ts +2 -1
- package/dist/types/wallet/src/SeamsWeb/operations/authMethods/revokeAuthMethod.d.ts +1 -9
- package/dist/types/wallet/src/SeamsWeb/operations/authMethods/sourcePasskeyProof.d.ts +2 -7
- package/dist/types/wallet/src/SeamsWeb/operations/devices/deviceLinkingAuthorityInstallation.d.ts +0 -13
- package/dist/types/wallet/src/SeamsWeb/operations/devices/deviceLinkingComposition.d.ts +2 -21
- package/dist/types/wallet/src/SeamsWeb/operations/devices/deviceLinkingEd25519ExportRoot.d.ts +2 -2
- package/dist/types/wallet/src/SeamsWeb/operations/devices/deviceLinkingHttpTransport.d.ts +4 -17
- package/dist/types/wallet/src/SeamsWeb/operations/devices/deviceLinkingOwnerTransport.d.ts +2 -1
- package/dist/types/wallet/src/SeamsWeb/operations/devices/deviceLinkingPorts.d.ts +10 -16
- package/dist/types/wallet/src/SeamsWeb/operations/devices/deviceLinkingResume.d.ts +4 -3
- package/dist/types/wallet/src/SeamsWeb/operations/devices/deviceLinkingWorkerChannels.d.ts +2 -14
- package/dist/types/wallet/src/SeamsWeb/operations/devices/linkDevice.d.ts +3 -91
- package/dist/types/wallet/src/SeamsWeb/operations/devices/linkDeviceFlow.d.ts +88 -0
- package/dist/types/wallet/src/SeamsWeb/operations/devices/linkDeviceFlowSupport.d.ts +53 -0
- package/dist/types/wallet/src/SeamsWeb/operations/devices/linkDeviceTargetActivation.d.ts +149 -0
- package/dist/types/wallet/src/SeamsWeb/operations/devices/scanDevice.d.ts +2 -1
- package/dist/types/wallet/src/SeamsWeb/operations/devices/walletHostComposition.d.ts +4 -9
- package/dist/types/wallet/src/SeamsWeb/operations/devices/walletHostOwnerAuthority.d.ts +9 -5
- package/dist/types/wallet/src/SeamsWeb/operations/near/actions.d.ts +0 -46
- package/dist/types/wallet/src/SeamsWeb/operations/near/delegateAction.d.ts +2 -1
- package/dist/types/wallet/src/SeamsWeb/operations/near/signingEventHelpers.d.ts +2 -1
- package/dist/types/wallet/src/SeamsWeb/operations/recovery/accountSync.d.ts +2 -1
- package/dist/types/wallet/src/SeamsWeb/operations/recovery/recoveryWalletBinding.d.ts +1 -2
- package/dist/types/wallet/src/SeamsWeb/operations/recovery/syncAccount.d.ts +1 -77
- package/dist/types/wallet/src/SeamsWeb/operations/recovery/walletRecovery.d.ts +8 -7
- package/dist/types/wallet/src/SeamsWeb/operations/recovery/walletRecoveryCodeBackup.d.ts +1 -1
- package/dist/types/wallet/src/SeamsWeb/operations/recovery/walletRecoveryCommit.d.ts +0 -2
- package/dist/types/wallet/src/SeamsWeb/operations/recovery/walletRecoveryRotation.d.ts +0 -8
- package/dist/types/wallet/src/SeamsWeb/operations/registration/pendingEcdsaRegistrationRecovery.d.ts +1 -1
- package/dist/types/wallet/src/SeamsWeb/operations/registration/pendingEcdsaRegistrationRecoveryValidation.d.ts +2 -2
- package/dist/types/wallet/src/SeamsWeb/operations/registration/pendingRegistrationRecovery.d.ts +8 -10
- package/dist/types/wallet/src/SeamsWeb/operations/registration/registration.d.ts +10 -234
- package/dist/types/wallet/src/SeamsWeb/operations/registration/registrationEd25519Yao.d.ts +18 -5
- package/dist/types/wallet/src/SeamsWeb/operations/registration/registrationSignerSet.d.ts +2 -6
- package/dist/types/wallet/src/SeamsWeb/operations/registration/registrationStrictEcdsa.d.ts +1 -7
- package/dist/types/wallet/src/SeamsWeb/operations/registration/registrationTerminalCommit.d.ts +2 -2
- package/dist/types/wallet/src/SeamsWeb/operations/registration/registrationTiming.d.ts +49 -275
- package/dist/types/wallet/src/SeamsWeb/operations/session/thresholdEcdsaProvisioning.d.ts +3 -2
- package/dist/types/wallet/src/SeamsWeb/operations/tempo/executeEvmFamilyTransaction.d.ts +1 -1
- package/dist/types/wallet/src/SeamsWeb/publicApi/awaitNearReady.d.ts +0 -1
- package/dist/types/wallet/src/SeamsWeb/publicApi/capabilitySelection.d.ts +1 -1
- package/dist/types/wallet/src/SeamsWeb/publicApi/currentWallet.d.ts +2 -1
- package/dist/types/wallet/src/SeamsWeb/publicApi/devices.d.ts +1 -1
- package/dist/types/wallet/src/SeamsWeb/publicApi/keyExport.d.ts +1 -4
- package/dist/types/wallet/src/SeamsWeb/publicApi/near.d.ts +0 -8
- package/dist/types/wallet/src/SeamsWeb/publicApi/transactionReview.d.ts +2 -1
- package/dist/types/wallet/src/SeamsWeb/publicApi/types.d.ts +22 -20
- package/dist/types/wallet/src/SeamsWeb/registrationIntent.typecheck.d.ts +8 -0
- package/dist/types/wallet/src/SeamsWeb/signingSurface/BrowserSigningSurface.d.ts +14 -61
- package/dist/types/wallet/src/SeamsWeb/signingSurface/ports.d.ts +2 -4
- package/dist/types/wallet/src/SeamsWeb/walletIframe/client/overlay/overlay-controller.d.ts +3 -3
- package/dist/types/wallet/src/SeamsWeb/walletIframe/client/overlay/overlay-styles.d.ts +3 -3
- package/dist/types/wallet/src/SeamsWeb/walletIframe/client/progress/on-events-progress-bus.d.ts +0 -13
- package/dist/types/wallet/src/SeamsWeb/walletIframe/client/router.d.ts +3 -4
- package/dist/types/wallet/src/SeamsWeb/walletIframe/client/surface/domain.d.ts +8 -39
- package/dist/types/wallet/src/SeamsWeb/walletIframe/client/surface/geometry.d.ts +3 -7
- package/dist/types/wallet/src/SeamsWeb/walletIframe/client/surface/renderer.d.ts +2 -2
- package/dist/types/wallet/src/SeamsWeb/walletIframe/client/transport/IframeTransport.d.ts +3 -7
- package/dist/types/wallet/src/SeamsWeb/walletIframe/client/transport/iframe-transport-dom.d.ts +2 -3
- package/dist/types/wallet/src/SeamsWeb/walletIframe/client/transport/iframe-transport-handshake.d.ts +1 -11
- package/dist/types/wallet/src/SeamsWeb/walletIframe/client/transport/webauthn-bridge.d.ts +0 -6
- package/dist/types/wallet/src/SeamsWeb/walletIframe/coordinator.d.ts +2 -1
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/auth-menu/controller.d.ts +2 -3
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/auth-menu/domain.d.ts +2 -8
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/auth-menu/passkey.d.ts +3 -3
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/auth-menu/session.d.ts +2 -4
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/bootstrap.d.ts +0 -4
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/canonicalSignerErrorCode.d.ts +2 -7
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/context.d.ts +0 -5
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/handlers/authMenu.d.ts +0 -1
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/handlers/walletIframeHandler.types.d.ts +0 -13
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/hostedWalletSeamsSession.d.ts +1 -2
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/requestRouter.d.ts +10 -10
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/runtimeLoader.d.ts +2 -1
- package/dist/types/wallet/src/SeamsWeb/walletIframe/host/ui/auth-menu/AuthMenuSurface.d.ts +2 -1
- package/dist/types/wallet/src/SeamsWeb/walletIframe/sanitization.d.ts +0 -7
- package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/exactSessionReconciliation.d.ts +3 -2
- package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/exactSessionState.d.ts +2 -2
- package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/messages.d.ts +53 -58
- package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/transactionReview.d.ts +3 -2
- package/dist/types/wallet/src/core/accountData/near/accountProjection.d.ts +4 -49
- package/dist/types/wallet/src/core/accountData/near/keyMaterial.d.ts +1 -16
- package/dist/types/wallet/src/core/accountData/near/profileId.d.ts +2 -2
- package/dist/types/wallet/src/core/browser/walletIframe/events.d.ts +0 -1
- package/dist/types/wallet/src/core/config/chains.d.ts +0 -2
- package/dist/types/wallet/src/core/config/configBuilder.d.ts +0 -4
- package/dist/types/wallet/src/core/config/configHelpers.d.ts +1 -21
- package/dist/types/wallet/src/core/config/defaultConfigs.d.ts +1 -4
- package/dist/types/wallet/src/core/config/registrationConfig.typecheck.d.ts +1 -2
- package/dist/types/wallet/src/core/indexedDB/accountKeyMaterial.d.ts +5 -4
- package/dist/types/wallet/src/core/indexedDB/accountSignerLifecycle.d.ts +1 -1
- package/dist/types/wallet/src/core/indexedDB/index.d.ts +1 -5
- package/dist/types/wallet/src/core/indexedDB/keyMaterialEnvelope.d.ts +1 -2
- package/dist/types/wallet/src/core/indexedDB/linkedAuthoritySignerMaterial.d.ts +3 -3
- package/dist/types/wallet/src/core/indexedDB/normalization.d.ts +0 -3
- package/dist/types/wallet/src/core/indexedDB/passkeyClientDB.types.d.ts +5 -18
- package/dist/types/wallet/src/core/indexedDB/pendingWalletRegistrationCommit.d.ts +2 -4
- package/dist/types/wallet/src/core/indexedDB/profileAccountProjection.d.ts +3 -14
- package/dist/types/wallet/src/core/indexedDB/schemaNames.d.ts +2 -1
- package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestLookups.d.ts +177 -0
- package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestRecords.d.ts +155 -0
- package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestStore.d.ts +15 -256
- package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/ecdsaClientPresignatures.d.ts +101 -0
- package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/laneHolderMaterialStore.d.ts +0 -1
- package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/manager.d.ts +2 -1
- package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/pendingWalletRecoveryCodeBackup.d.ts +3 -2
- package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/repositories.d.ts +49 -44
- package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/signingSessionSeals.d.ts +2 -1
- package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/walletCustodyEcdsaContinuity.d.ts +47 -0
- package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/walletSessionAuthorizationStore.d.ts +2 -2
- package/dist/types/wallet/src/core/indexedDB/unifiedIndexedDBManager.d.ts +7 -4
- package/dist/types/wallet/src/core/platform/ecdsaRoleLocalRecords.d.ts +1 -40
- package/dist/types/wallet/src/core/platform/secretSources.d.ts +1 -1
- package/dist/types/wallet/src/core/platform/signerCoreCommandAdapters.typecheck.d.ts +25 -0
- package/dist/types/wallet/src/core/rpcClients/evm/EvmClient.d.ts +1 -2
- package/dist/types/wallet/src/core/rpcClients/evm/nonceBackend.d.ts +6 -22
- package/dist/types/wallet/src/core/rpcClients/near/NearClient.d.ts +13 -133
- package/dist/types/wallet/src/core/rpcClients/near/rpcCalls.d.ts +5 -31
- package/dist/types/wallet/src/core/rpcClients/relayer/ownerWalletExecutionLanePreflight.d.ts +0 -1
- package/dist/types/wallet/src/core/rpcClients/relayer/passkeyCustodyEnvelope.d.ts +4 -3
- package/dist/types/wallet/src/core/rpcClients/relayer/registrationSignerSetRequest.d.ts +3 -2
- package/dist/types/wallet/src/core/rpcClients/relayer/relayerHttp.d.ts +2 -2
- package/dist/types/wallet/src/core/rpcClients/relayer/routerAbNormalSigning.d.ts +10 -39
- package/dist/types/wallet/src/core/rpcClients/relayer/sealedRefreshCapabilities.d.ts +0 -14
- package/dist/types/wallet/src/core/rpcClients/relayer/thresholdEcdsa.d.ts +4 -66
- package/dist/types/wallet/src/core/rpcClients/relayer/walletRecoveryFinalize.d.ts +2 -5
- package/dist/types/wallet/src/core/rpcClients/relayer/walletRecoveryGoogleEmailOtp.d.ts +4 -7
- package/dist/types/wallet/src/core/rpcClients/relayer/walletRecoveryPrepare.d.ts +4 -4
- package/dist/types/wallet/src/core/rpcClients/relayer/walletRecoveryRotate.d.ts +3 -19
- package/dist/types/wallet/src/core/rpcClients/relayer/walletRegistration.d.ts +32 -106
- package/dist/types/wallet/src/core/rpcClients/relayer/walletRegistrationTerminalResponse.d.ts +2 -2
- package/dist/types/wallet/src/core/rpcClients/relayer/walletSessionAuthorizationStatus.d.ts +2 -10
- package/dist/types/wallet/src/core/runtime/runtime.types.d.ts +7 -6
- package/dist/types/wallet/src/core/signingEngine/assembly/createManagers.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/assembly/ports/warmSigning.d.ts +1 -1
- package/dist/types/wallet/src/core/signingEngine/assembly/warmup.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/chains/evm/bytes.d.ts +0 -2
- package/dist/types/wallet/src/core/signingEngine/chains/evm/display/evmTx.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/chains/evm/display/functionSelectors.d.ts +0 -1
- package/dist/types/wallet/src/core/signingEngine/chains/evm/evmAdapter.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/chains/evm/evmCryptoWasm.d.ts +0 -9
- package/dist/types/wallet/src/core/signingEngine/chains/evm/evmSigning.types.d.ts +2 -2
- package/dist/types/wallet/src/core/signingEngine/chains/near/display.d.ts +4 -2
- package/dist/types/wallet/src/core/signingEngine/chains/near/payloads.d.ts +4 -3
- package/dist/types/wallet/src/core/signingEngine/chains/tempo/display.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/chains/tempo/tempoAdapter.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/chains/tempo/tempoSigning.types.d.ts +4 -7
- package/dist/types/wallet/src/core/signingEngine/flows/recovery/ecdsaDerivationExport.d.ts +4 -101
- package/dist/types/wallet/src/core/signingEngine/flows/recovery/ecdsaExportMaterial.d.ts +1 -17
- package/dist/types/wallet/src/core/signingEngine/flows/recovery/ed25519YaoExportFlow.d.ts +1 -1
- package/dist/types/wallet/src/core/signingEngine/flows/recovery/exportKeypairOperation.d.ts +1 -1
- package/dist/types/wallet/src/core/signingEngine/flows/recovery/keyExportConfirmation.d.ts +2 -5
- package/dist/types/wallet/src/core/signingEngine/flows/recovery/keyExportFlow.d.ts +2 -2
- package/dist/types/wallet/src/core/signingEngine/flows/recovery/passkeyEd25519YaoRecovery.d.ts +3 -6
- package/dist/types/wallet/src/core/signingEngine/flows/recovery/stepUpAuthorization.d.ts +3 -3
- package/dist/types/wallet/src/core/signingEngine/flows/registration/accountLifecycle.d.ts +9 -20
- package/dist/types/wallet/src/core/signingEngine/flows/registration/nearProvisioningRegistry.d.ts +2 -20
- package/dist/types/wallet/src/core/signingEngine/flows/registration/services/ecdsaRegistrationSessions.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/flows/registration/services/passkeyEd25519YaoAddSigner.d.ts +5 -10
- package/dist/types/wallet/src/core/signingEngine/flows/shared/signingConfirmation.d.ts +0 -15
- package/dist/types/wallet/src/core/signingEngine/flows/shared/signingStateMachine.d.ts +7 -50
- package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/authPlanning.d.ts +1 -1
- package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/ecdsaSelection.d.ts +2 -6
- package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/emailOtpSigningSession.d.ts +1 -1
- package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/errors.d.ts +3 -15
- package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/executorThresholdState.d.ts +0 -4
- package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/freshAuthRetryPolicy.d.ts +3 -3
- package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/freshWalletSessionRetry.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/nonceResolution.d.ts +0 -1
- package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/preparedSigning.d.ts +5 -14
- package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/readySecp256k1Material.d.ts +0 -5
- package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/requireEvmFamilyStepUpAuth.d.ts +7 -7
- package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/signatureUses.d.ts +0 -2
- package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/signerLoader.d.ts +5 -4
- package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/signers/secp256k1.d.ts +2 -3
- package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/signingFlow.d.ts +12 -12
- package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/signingFlowRuntime.d.ts +1 -41
- package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/stepUpAuthorization.d.ts +4 -22
- package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/thresholdAdmission.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/types.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/flows/signNear/implicitAccountFunding.d.ts +1 -1
- package/dist/types/wallet/src/core/signingEngine/flows/signNear/requireNearStepUpAuth.d.ts +3 -3
- package/dist/types/wallet/src/core/signingEngine/flows/signNear/shared/ed25519YaoCapabilityResolution.d.ts +1 -1
- package/dist/types/wallet/src/core/signingEngine/flows/signNear/shared/ed25519YaoNormalSigning.d.ts +2 -2
- package/dist/types/wallet/src/core/signingEngine/flows/signNear/shared/operationStepUpPreparation.d.ts +1 -1
- package/dist/types/wallet/src/core/signingEngine/flows/signNear/shared/signatureOnlySigning.d.ts +126 -0
- package/dist/types/wallet/src/core/signingEngine/flows/signNear/shared/signingMaterials.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/flows/signNear/shared/signingSessionAuthMode.d.ts +3 -3
- package/dist/types/wallet/src/core/signingEngine/flows/signNear/signNear.d.ts +6 -5
- package/dist/types/wallet/src/core/signingEngine/flows/signNear/stepUpAuthorization.d.ts +1 -6
- package/dist/types/wallet/src/core/signingEngine/interfaces/accountAuthMetadata.d.ts +0 -1
- package/dist/types/wallet/src/core/signingEngine/interfaces/display.d.ts +7 -6
- package/dist/types/wallet/src/core/signingEngine/interfaces/ecdsaChainTarget.d.ts +1 -1
- package/dist/types/wallet/src/core/signingEngine/interfaces/near.d.ts +5 -44
- package/dist/types/wallet/src/core/signingEngine/interfaces/operationDeps.d.ts +2 -14
- package/dist/types/wallet/src/core/signingEngine/interfaces/operationStepUpPreparation.d.ts +1 -1
- package/dist/types/wallet/src/core/signingEngine/interfaces/signing.d.ts +8 -17
- package/dist/types/wallet/src/core/signingEngine/nonce/evmNonceLane.d.ts +2 -2
- package/dist/types/wallet/src/core/signingEngine/nonce/nearNonceLane.d.ts +5 -29
- package/dist/types/wallet/src/core/signingEngine/nonce/nearNonceLaneIdentity.d.ts +0 -1
- package/dist/types/wallet/src/core/signingEngine/nonce/nearTransactionReadiness.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/nonce/nonceCoordinationRecordBoundary.d.ts +0 -1
- package/dist/types/wallet/src/core/signingEngine/nonce/nonceDiagnostics.d.ts +3 -4
- package/dist/types/wallet/src/core/signingEngine/nonce/nonceLaneKeys.d.ts +1 -3
- package/dist/types/wallet/src/core/signingEngine/nonce/nonceLeaseState.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/nonce/nonceTypes.d.ts +13 -13
- package/dist/types/wallet/src/core/signingEngine/routerAb/ecdsaDerivation/clientCeremony.d.ts +1 -1
- package/dist/types/wallet/src/core/signingEngine/routerAb/ecdsaDerivation/httpRequest.d.ts +0 -1
- package/dist/types/wallet/src/core/signingEngine/routerAb/ecdsaDerivation/poolFillRoutes.d.ts +5 -4
- package/dist/types/wallet/src/core/signingEngine/routerAb/ecdsaDerivation/presignaturePool.d.ts +1 -7
- package/dist/types/wallet/src/core/signingEngine/routerAb/ecdsaDerivation/presignatureRefillProgress.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/routerAb/ecdsaDerivation/registrationPendingFinalization.d.ts +1 -1
- package/dist/types/wallet/src/core/signingEngine/session/SigningSessionCoordinator.d.ts +5 -8
- package/dist/types/wallet/src/core/signingEngine/session/authority/authorityOperationResolver.d.ts +1 -1
- package/dist/types/wallet/src/core/signingEngine/session/availability/availableSigningLanes.d.ts +14 -37
- package/dist/types/wallet/src/core/signingEngine/session/availability/clientSessionExpiryInvalidator.d.ts +3 -2
- package/dist/types/wallet/src/core/signingEngine/session/availability/persistedAvailableSigningLanes.d.ts +3 -2
- package/dist/types/wallet/src/core/signingEngine/session/availability/readiness.d.ts +6 -31
- package/dist/types/wallet/src/core/signingEngine/session/emailOtp/challengeDelivery.d.ts +0 -5
- package/dist/types/wallet/src/core/signingEngine/session/emailOtp/coordinatorRuntime.d.ts +0 -1
- package/dist/types/wallet/src/core/signingEngine/session/emailOtp/ecdsaBootstrapCommit.d.ts +1 -21
- package/dist/types/wallet/src/core/signingEngine/session/emailOtp/ecdsaLogin.d.ts +6 -61
- package/dist/types/wallet/src/core/signingEngine/session/emailOtp/ecdsaPublication.d.ts +4 -21
- package/dist/types/wallet/src/core/signingEngine/session/emailOtp/ecdsaRecovery.d.ts +3 -19
- package/dist/types/wallet/src/core/signingEngine/session/emailOtp/ecdsaSigningSessionAuthority.d.ts +3 -2
- package/dist/types/wallet/src/core/signingEngine/session/emailOtp/ed25519ExportContext.d.ts +4 -6
- package/dist/types/wallet/src/core/signingEngine/session/emailOtp/exportRecoveryRuntime.d.ts +0 -1
- package/dist/types/wallet/src/core/signingEngine/session/emailOtp/ports.d.ts +2 -3
- package/dist/types/wallet/src/core/signingEngine/session/emailOtp/publicTypes.d.ts +4 -6
- package/dist/types/wallet/src/core/signingEngine/session/emailOtp/routePlan.d.ts +4 -15
- package/dist/types/wallet/src/core/signingEngine/session/emailOtp/runtimeConfig.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/session/emailOtp/sealedRefreshPolicy.d.ts +4 -17
- package/dist/types/wallet/src/core/signingEngine/session/emailOtp/sealedRestoreOrchestrator.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/session/emailOtp/sealedSessionRegistry.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/session/emailOtp/secretEscrow.d.ts +4 -11
- package/dist/types/wallet/src/core/signingEngine/session/emailOtp/walletUnlock.d.ts +1 -1
- package/dist/types/wallet/src/core/signingEngine/session/emailOtp/warmSessionRuntime.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/session/emailOtp/workerRequests.d.ts +1 -1
- package/dist/types/wallet/src/core/signingEngine/session/holderShares/holderShareHandle.d.ts +0 -13
- package/dist/types/wallet/src/core/signingEngine/session/identity/clientSessionPersistenceState.d.ts +6 -7
- 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 +17 -31
- package/dist/types/wallet/src/core/signingEngine/session/identity/exactSigningLaneIdentity.d.ts +10 -27
- package/dist/types/wallet/src/core/signingEngine/session/identity/exactWalletSessionCredential.d.ts +9 -8
- package/dist/types/wallet/src/core/signingEngine/session/identity/laneIdentity.d.ts +8 -12
- package/dist/types/wallet/src/core/signingEngine/session/identity/ownerLaneScope.d.ts +9 -17
- package/dist/types/wallet/src/core/signingEngine/session/identity/selectLane.d.ts +12 -28
- package/dist/types/wallet/src/core/signingEngine/session/identity/signingLaneAuthBinding.d.ts +4 -3
- package/dist/types/wallet/src/core/signingEngine/session/identity/walletUnlockSubject.d.ts +1 -1
- package/dist/types/wallet/src/core/signingEngine/session/keyMaterialBrands.d.ts +3 -27
- package/dist/types/wallet/src/core/signingEngine/session/lanes/operations/activationCoordinator.d.ts +0 -1
- package/dist/types/wallet/src/core/signingEngine/session/lanes/operations/laneMaterialInvalidation.d.ts +2 -37
- package/dist/types/wallet/src/core/signingEngine/session/lanes/operations/recipientPreparation.d.ts +4 -16
- package/dist/types/wallet/src/core/signingEngine/session/lanes/walletExecutionLaneHydration.d.ts +5 -42
- package/dist/types/wallet/src/core/signingEngine/session/lifecycle/canonicalWalletSessionStatus.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/session/lifecycle/walletSessionStatus.d.ts +2 -6
- package/dist/types/wallet/src/core/signingEngine/session/material/activeEcdsaCapabilityRuntime.d.ts +4 -3
- package/dist/types/wallet/src/core/signingEngine/session/material/activeWalletAuthorityEcdsaRuntime.d.ts +5 -5
- package/dist/types/wallet/src/core/signingEngine/session/material/ecdsaCapabilityHydration.d.ts +1 -1
- package/dist/types/wallet/src/core/signingEngine/session/material/ecdsaCapabilityManifest.d.ts +5 -5
- package/dist/types/wallet/src/core/signingEngine/session/material/ecdsaRoleLocalMaterialResolver.d.ts +2 -2
- package/dist/types/wallet/src/core/signingEngine/session/material/ecdsaSealedRuntime.d.ts +3 -31
- package/dist/types/wallet/src/core/signingEngine/session/material/ecdsaSigningCapability.d.ts +5 -9
- package/dist/types/wallet/src/core/signingEngine/session/material/mpcCapabilityHydration.d.ts +4 -5
- package/dist/types/wallet/src/core/signingEngine/session/material/nearEd25519YaoSigningPreparation.d.ts +5 -4
- package/dist/types/wallet/src/core/signingEngine/session/material/walletSigningStateFailure.d.ts +9 -8
- package/dist/types/wallet/src/core/signingEngine/session/operationState/authorizationAdmission.d.ts +5 -9
- package/dist/types/wallet/src/core/signingEngine/session/operationState/lanes.d.ts +13 -16
- package/dist/types/wallet/src/core/signingEngine/session/operationState/preparedOperation.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/session/operationState/trace.d.ts +6 -9
- package/dist/types/wallet/src/core/signingEngine/session/operationState/transactionState.d.ts +5 -26
- package/dist/types/wallet/src/core/signingEngine/session/operationState/types.d.ts +16 -32
- package/dist/types/wallet/src/core/signingEngine/session/passkey/ecdsaBootstrap.d.ts +4 -4
- package/dist/types/wallet/src/core/signingEngine/session/passkey/ecdsaSessionProvision.d.ts +3 -19
- package/dist/types/wallet/src/core/signingEngine/session/passkey/ecdsaWarmCapabilityBootstrap.d.ts +4 -15
- package/dist/types/wallet/src/core/signingEngine/session/passkey/ed25519Provisioner.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/session/passkey/ed25519SessionProvision.d.ts +1 -1
- package/dist/types/wallet/src/core/signingEngine/session/passkey/ed25519SessionProvision.typecheck.d.ts +7 -1
- package/dist/types/wallet/src/core/signingEngine/session/passkey/ed25519YaoLocalMaterial.d.ts +10 -94
- package/dist/types/wallet/src/core/signingEngine/session/passkey/ed25519YaoSealedSession.d.ts +3 -2
- package/dist/types/wallet/src/core/signingEngine/session/passkey/ed25519YaoWarmRecovery.d.ts +3 -13
- package/dist/types/wallet/src/core/signingEngine/session/passkey/passkeyCustodySessionCache.d.ts +0 -40
- package/dist/types/wallet/src/core/signingEngine/session/passkey/prfCache.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/session/passkey/unlockEcdsaWarmupPlanner.d.ts +5 -5
- package/dist/types/wallet/src/core/signingEngine/session/passkey/warmSessionMaterialWriter.d.ts +1 -1
- package/dist/types/wallet/src/core/signingEngine/session/persistence/durableSealedSessionCommands.d.ts +5 -7
- package/dist/types/wallet/src/core/signingEngine/session/persistence/ecdsaRoleLocalRecords.d.ts +0 -1
- package/dist/types/wallet/src/core/signingEngine/session/persistence/ecdsaSealedRecordKey.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/session/persistence/sealedSessionRecords.d.ts +212 -0
- package/dist/types/wallet/src/core/signingEngine/session/persistence/sealedSessionStore.d.ts +4 -199
- package/dist/types/wallet/src/core/signingEngine/session/postconditions/runtimePostconditions.d.ts +6 -35
- package/dist/types/wallet/src/core/signingEngine/session/public.d.ts +1 -1
- package/dist/types/wallet/src/core/signingEngine/session/routerAbSigningWalletSession.d.ts +4 -3
- package/dist/types/wallet/src/core/signingEngine/session/sealedRecovery/recoveryRecord.d.ts +2 -2
- package/dist/types/wallet/src/core/signingEngine/session/userPreferences.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/capabilityReader.d.ts +3 -6
- package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/capabilityReaderCore.d.ts +5 -4
- package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/clearVolatileWarmSigningMaterial.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/ecdsaLoginPrefill.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/ecdsaProvisionPlan.d.ts +6 -40
- package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/ecdsaProvisionPlan.typecheck.d.ts +4 -0
- package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/ed25519SealedSessionRuntime.d.ts +3 -36
- package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/persistencePorts.d.ts +2 -70
- package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/readModel.d.ts +4 -12
- package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/routerAbEd25519WalletSessionState.d.ts +4 -3
- package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/routerAbWalletSessionCredential.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/transitions.d.ts +3 -2
- package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/types.d.ts +5 -36
- package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/types.typecheck.d.ts +10 -1
- package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/volatileWarmMaterialCommands.d.ts +1 -2
- package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/channel/confirmCommon.d.ts +3 -2
- package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/channel/confirmTypes.d.ts +6 -17
- package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/confirmOperation.d.ts +4 -5
- package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/methodRunners.d.ts +4 -3
- package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/methodSelection.d.ts +5 -10
- package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/otpPrompt/exportAuthorization.d.ts +7 -6
- package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/otpPrompt/signingPrompt.d.ts +2 -2
- package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/passkeyPrompt/touchIdPrompt.d.ts +2 -3
- package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/passkeyPrompt/webauthnPromptCoordinator.d.ts +3 -7
- package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/requireStepUpAuth.d.ts +2 -2
- package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/types.d.ts +8 -8
- package/dist/types/wallet/src/core/signingEngine/threshold/commitQueueShared.d.ts +2 -2
- package/dist/types/wallet/src/core/signingEngine/threshold/crypto/ecdsaDerivationClientWasm.d.ts +4 -16
- package/dist/types/wallet/src/core/signingEngine/threshold/crypto/ecdsaLaneWasm.d.ts +0 -9
- package/dist/types/wallet/src/core/signingEngine/threshold/crypto/ed25519YaoLaneWasm.d.ts +5 -31
- package/dist/types/wallet/src/core/signingEngine/threshold/crypto/webauthn.d.ts +1 -46
- package/dist/types/wallet/src/core/signingEngine/threshold/ecdsa/activation.d.ts +2 -9
- package/dist/types/wallet/src/core/signingEngine/threshold/ecdsa/operationStepUp.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/threshold/ecdsa/postRegistrationSessionActivation.d.ts +5 -4
- package/dist/types/wallet/src/core/signingEngine/threshold/ecdsa/signingQueue.d.ts +3 -6
- package/dist/types/wallet/src/core/signingEngine/threshold/ed25519/commitQueue.d.ts +3 -6
- package/dist/types/wallet/src/core/signingEngine/threshold/ed25519/connectSession.d.ts +1 -1
- package/dist/types/wallet/src/core/signingEngine/threshold/ed25519/walletSession.d.ts +6 -6
- package/dist/types/wallet/src/core/signingEngine/threshold/ed25519/yaoActiveClientRegistry.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/threshold/ed25519/yaoClient.d.ts +17 -49
- package/dist/types/wallet/src/core/signingEngine/threshold/ed25519/yaoPageLifecycleOwner.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/threshold/ed25519/yaoPublicCapabilityReferences.d.ts +2 -15
- package/dist/types/wallet/src/core/signingEngine/threshold/sessionPolicy.d.ts +2 -53
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/handlers/flows/adapters/adapters.d.ts +1 -1
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/handlers/flows/adapters/request.d.ts +1 -5
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/handlers/flows/signing.d.ts +1 -7
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/nearFundingNotice.d.ts +2 -5
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/confirm-surface-resize.d.ts +3 -32
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/confirm-ui-types.d.ts +2 -0
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/confirmation-model.d.ts +3 -2
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/export-private-key-reveal.d.ts +0 -1
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/ConfirmationModal.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/EmailOtpInput.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/PadlockIcon.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/TransactionLabel.d.ts +1 -0
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/TransactionReceipt.d.ts +11 -2
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/TransactionReview.d.ts +4 -21
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/TransactionTree.d.ts +1 -1
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/confirmation-controller.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/email-otp-session.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/mountRecoveryCodeBackupSurface.d.ts +2 -2
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/seamsWordmarkPaths.d.ts +0 -2
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/surface-resize-events.d.ts +2 -2
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/transaction-display/renderers/fallback.d.ts +0 -2
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/transaction-display/renderers/types.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/transaction-display/tree.d.ts +3 -3
- package/dist/types/wallet/src/core/signingEngine/uiConfirm/uiConfirm.types.d.ts +9 -9
- package/dist/types/wallet/src/core/signingEngine/walletCustody/activateEd25519Capability.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/walletCustody/ceremonyActiveClientMetadata.d.ts +3 -4
- package/dist/types/wallet/src/core/signingEngine/walletCustody/ceremonyDriver.d.ts +1 -1
- package/dist/types/wallet/src/core/signingEngine/walletCustody/ceremonyStepRunner.d.ts +4 -3
- package/dist/types/wallet/src/core/signingEngine/walletCustody/ed25519SeedMaterial.d.ts +1 -1
- package/dist/types/wallet/src/core/signingEngine/walletCustody/emailOtpLink.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/walletCustody/joinCustodyWire.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/walletCustody/openCustodyCache.d.ts +6 -5
- package/dist/types/wallet/src/core/signingEngine/walletCustody/passkeyLink.d.ts +1 -52
- package/dist/types/wallet/src/core/signingEngine/walletCustody/recoveryReplacementEnvelope.d.ts +0 -5
- package/dist/types/wallet/src/core/signingEngine/walletCustody/registrationCeremony.d.ts +16 -26
- package/dist/types/wallet/src/core/signingEngine/walletCustody/unlockedEd25519ExportRootCapability.d.ts +22 -12
- package/dist/types/wallet/src/core/signingEngine/walletCustody/walletRecoveryEd25519.d.ts +1 -1
- package/dist/types/wallet/src/core/signingEngine/walletCustody/walletRecoveryRotation.d.ts +3 -2
- package/dist/types/wallet/src/core/signingEngine/webauthnAuth/credentials/collectAuthenticationCredentialForChallengeB64u.d.ts +1 -2
- package/dist/types/wallet/src/core/signingEngine/webauthnAuth/credentials/credentialExtensions.d.ts +2 -5
- package/dist/types/wallet/src/core/signingEngine/webauthnAuth/credentials/helpers.d.ts +0 -9
- package/dist/types/wallet/src/core/signingEngine/webauthnAuth/fallbacks/safari-fallbacks.d.ts +4 -9
- package/dist/types/wallet/src/core/signingEngine/workerManager/deviceLinkingPorts.d.ts +3 -12
- package/dist/types/wallet/src/core/signingEngine/workerManager/deviceLinkingSourceContribution.d.ts +17 -9
- package/dist/types/wallet/src/core/signingEngine/workerManager/ecdsaClientWorkerChannels.d.ts +7 -7
- package/dist/types/wallet/src/core/signingEngine/workerManager/workerTransport.d.ts +5 -5
- package/dist/types/wallet/src/core/signingEngine/workerManager/workerTypes.d.ts +75 -81
- package/dist/types/wallet/src/core/signingEngine/workerManager/workers/device-linking-key/ecdsaTargetShareHpke.d.ts +7 -0
- package/dist/types/wallet/src/core/signingEngine/workerManager/workers/device-linking-key/ordinaryMaterialState.d.ts +50 -0
- package/dist/types/wallet/src/core/signingEngine/workerManager/workers/device-linking-key/requests.d.ts +89 -0
- package/dist/types/wallet/src/core/signingEngine/workerManager/workers/device-linking-key.worker.d.ts +1 -10
- package/dist/types/wallet/src/core/signingEngine/workerManager/workers/ecdsaLaneHolderWorkerRuntime.d.ts +2 -2
- package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/crypto.d.ts +66 -0
- package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/custodyRestore.d.ts +91 -0
- package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/dispatch.d.ts +4 -0
- package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/ed25519YaoExport.d.ts +45 -0
- package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/enrollment.d.ts +47 -0
- package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/fetch.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/materialParsing.d.ts +45 -0
- package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/operationRequestParsing.d.ts +7 -0
- package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/otpVerification.d.ts +53 -0
- package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/passkeyCustodyLink.d.ts +18 -0
- package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/payloadParsing.d.ts +48 -0
- package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/recovery.d.ts +9 -0
- package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/requestEnvelope.d.ts +11 -0
- package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/sessionState.d.ts +74 -0
- package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/unlock.d.ts +133 -0
- package/dist/types/wallet/src/core/signingEngine/workerManager/workers/opaqueEcdsaPresignAuthority.d.ts +6 -6
- package/dist/types/wallet/src/core/signingEngine/workerManager/workers/shamir3pass/clientSealPreparation.d.ts +2 -2
- package/dist/types/wallet/src/core/signingEngine/workerManager/workers/shamir3pass/runtime.d.ts +2 -1
- package/dist/types/wallet/src/core/signingEngine/workerManager/workers/workerErrorPayload.d.ts +16 -0
- package/dist/types/wallet/src/core/types/accountIds.d.ts +2 -1
- package/dist/types/wallet/src/core/types/authenticatorOptions.d.ts +0 -2
- package/dist/types/wallet/src/core/types/confirmationConfig.d.ts +4 -4
- package/dist/types/wallet/src/core/types/ecdsaSignerProvisioningDefaults.d.ts +2 -1
- package/dist/types/wallet/src/core/types/errors.d.ts +2 -1
- package/dist/types/wallet/src/core/types/linkDevice.d.ts +2 -3
- package/dist/types/wallet/src/core/types/rpc.d.ts +0 -30
- package/dist/types/wallet/src/core/types/sdkSentEvents.d.ts +11 -11
- package/dist/types/wallet/src/core/types/seams.d.ts +35 -55
- package/dist/types/wallet/src/core/types/secure-confirm-worker.d.ts +3 -5
- package/dist/types/wallet/src/core/types/signer-worker.d.ts +13 -70
- package/dist/types/wallet/src/core/types/webauthn.d.ts +3 -12
- package/dist/types/wallet/src/core/walletRuntimePaths/base.d.ts +0 -28
- package/dist/types/wallet/src/core/walletRuntimePaths/wasm-loader.d.ts +2 -1
- package/dist/types/wallet/src/core/walletRuntimePaths/workers.d.ts +0 -11
- package/dist/types/wallet/src/externalEvm/boundary.d.ts +2 -2
- package/dist/types/wallet/src/index.d.ts +3 -1
- package/dist/types/wallet/src/plugins/plugin-utils.d.ts +1 -3
- package/dist/types/wallet/src/react/components/AccountMenuButton/AccountMenuDialog.d.ts +21 -0
- package/dist/types/wallet/src/react/components/AccountMenuButton/AccountsSection.d.ts +2 -1
- package/dist/types/wallet/src/react/components/AccountMenuButton/AuthenticationMethodsModal.d.ts +1 -1
- package/dist/types/wallet/src/react/components/AccountMenuButton/ExportKeysSection.d.ts +2 -1
- package/dist/types/wallet/src/react/components/AccountMenuButton/LinkedDevicesModal.d.ts +1 -1
- package/dist/types/wallet/src/react/components/AccountMenuButton/SegmentedControl.d.ts +2 -2
- package/dist/types/wallet/src/react/components/AccountMenuButton/UserAccountButton.d.ts +0 -7
- package/dist/types/wallet/src/react/components/AccountMenuButton/icons/GlobeIcon.d.ts +1 -1
- package/dist/types/wallet/src/react/components/AccountMenuButton/icons/KeyIcon.d.ts +1 -1
- package/dist/types/wallet/src/react/components/AccountMenuButton/icons/LaptopIcon.d.ts +1 -1
- package/dist/types/wallet/src/react/components/AccountMenuButton/icons/LinkIcon.d.ts +1 -1
- package/dist/types/wallet/src/react/components/AccountMenuButton/icons/LockIcon.d.ts +1 -1
- package/dist/types/wallet/src/react/components/AccountMenuButton/icons/MailIcon.d.ts +1 -1
- package/dist/types/wallet/src/react/components/AccountMenuButton/icons/MoonIcon.d.ts +1 -5
- package/dist/types/wallet/src/react/components/AccountMenuButton/icons/RecoveryCodesIcon.d.ts +1 -1
- package/dist/types/wallet/src/react/components/AccountMenuButton/icons/ScanIcon.d.ts +1 -1
- package/dist/types/wallet/src/react/components/AccountMenuButton/icons/SlidersIcon.d.ts +1 -1
- package/dist/types/wallet/src/react/components/AccountMenuButton/icons/SmartphoneIcon.d.ts +1 -1
- package/dist/types/wallet/src/react/components/AccountMenuButton/icons/SunIcon.d.ts +1 -5
- package/dist/types/wallet/src/react/components/AccountMenuButton/icons/strokeIcon.d.ts +10 -0
- package/dist/types/wallet/src/react/components/HostedSeamsAuthMenu/types.d.ts +1 -1
- package/dist/types/wallet/src/react/components/QRCodeIcon.d.ts +1 -1
- package/dist/types/wallet/src/react/components/theme/ThemeProvider.d.ts +0 -9
- package/dist/types/wallet/src/react/components/theme/design-tokens.d.ts +2 -205
- package/dist/types/wallet/src/react/context/reactLoginStateBuilders.d.ts +2 -9
- package/dist/types/wallet/src/react/hooks/useAccountInput.d.ts +2 -2
- package/dist/types/wallet/src/react/index.d.ts +3 -1
- package/dist/types/wallet/src/react/transactionReview/boundCalls.d.ts +108 -8
- package/dist/types/wallet/src/react/transactionReview/controller.d.ts +0 -37
- package/dist/types/wallet/src/react/types.d.ts +2 -2
- package/dist/types/wallet/src/utils/deviceDetection.d.ts +2 -58
- package/dist/types/wallet/src/utils/intentDigest.d.ts +1 -6
- package/dist/types/wallet/src/utils/qrScanner.d.ts +4 -38
- package/dist/workers/device-linking-key.worker.js +2954 -3134
- package/dist/workers/ecdsa-derivation-client.worker.js +1688 -2144
- package/dist/workers/ecdsa-online-client.worker.js +9 -117
- package/dist/workers/ecdsa-presign-client.worker.js +44 -147
- package/dist/workers/email-otp.worker.js +9265 -9596
- package/dist/workers/evm-crypto.worker.js +8 -6
- package/dist/workers/near-signer.worker.js +4 -4
- package/dist/workers/near_signer.wasm +0 -0
- package/dist/workers/passkey-confirm.worker.js +6 -3
- package/dist/workers/passkey-mpc-export.worker.js +95 -101
- package/dist/workers/passkey-mpc-session.worker.js +205 -202
- 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/tempo-signer.worker.js +8 -6
- package/dist/workers/wallet-custody-ceremony.worker.js +223 -215
- package/dist/workers/wallet_custody_ceremony_bg.wasm +0 -0
- package/dist/workers/wasm_signer_worker_bg.wasm +0 -0
- package/package.json +1 -1
- package/dist/esm/react/core/types/rpc.js +0 -9
- package/dist/esm/react/shared-ts/src/signing-lanes/linkedEcdsaScope.js +0 -1
- package/dist/esm/react/shared-ts/src/utils/paillier.js +0 -3
- package/dist/esm/sdk/device-linking-DpVGjSeq.js +0 -221
- package/dist/esm/sdk/ecdsaPresignLifecycle-CnSnzoRJ.js +0 -5511
- package/dist/esm/sdk/evmFamilyEcdsaIdentity-_kuKSW35.js +0 -1385
- package/dist/esm/sdk/participants-Bcnsa_ip.js +0 -232
- package/dist/esm/sdk/registrationIntent-DwAIMQYh.js +0 -1623
- package/dist/esm/sdk/signer-worker-DYRteieu.js +0 -48
- package/dist/esm/shared-ts/src/signing-lanes/linkedEcdsaScope.js +0 -1
- package/dist/esm/shared-ts/src/utils/paillier.js +0 -3
- package/dist/public/sdk/device-linking-DpVGjSeq.js +0 -221
- package/dist/public/sdk/ecdsaPresignLifecycle-CnSnzoRJ.js +0 -5511
- package/dist/public/sdk/evmFamilyEcdsaIdentity-_kuKSW35.js +0 -1385
- package/dist/public/sdk/participants-Bcnsa_ip.js +0 -232
- package/dist/public/sdk/registrationIntent-DwAIMQYh.js +0 -1623
- package/dist/public/sdk/signer-worker-DYRteieu.js +0 -48
- package/dist/types/shared-ts/src/passkey-custody/credentialObservations.d.ts +0 -74
- package/dist/types/shared-ts/src/passkey-custody/kekContext.d.ts +0 -34
- package/dist/types/shared-ts/src/signing-lanes/linkedEcdsaScope.d.ts +0 -62
- package/dist/types/shared-ts/src/signing-lanes/linkedEcdsaScope.typecheck.d.ts +0 -2
- package/dist/types/shared-ts/src/signing-lanes/validation.d.ts +0 -11
- package/dist/types/shared-ts/src/utils/bigint.d.ts +0 -3
- package/dist/types/shared-ts/src/utils/paillier.d.ts +0 -37
- package/dist/types/shared-ts/src/utils/recoveryDomain.d.ts +0 -12
- package/dist/types/shared-ts/src/utils/signerDomain.typecheck.d.ts +0 -2
- package/dist/types/shared-ts/src/wallet-recovery/recoveryKekContext.d.ts +0 -37
- package/dist/types/wallet/src/SeamsWeb/operations/devices/qrLinkSession.d.ts +0 -7
- package/dist/types/wallet/src/SeamsWeb/operations/session/thresholdWarmSessionDefaults.d.ts +0 -11
- package/dist/types/wallet/src/SeamsWeb/walletIframe/SeamsWebIframe.d.ts +0 -113
- package/dist/types/wallet/src/SeamsWeb/walletIframe/client/env.d.ts +0 -7
- package/dist/types/wallet/src/SeamsWeb/walletIframe/client/index.d.ts +0 -12
- package/dist/types/wallet/src/SeamsWeb/walletIframe/index.d.ts +0 -21
- package/dist/types/wallet/src/core/platform/webCryptoHkdf.d.ts +0 -7
- package/dist/types/wallet/src/core/rpcClients/relayer/routerAbPublicKeyset.d.ts +0 -5
- package/dist/types/wallet/src/core/rpcClients/relayer/thresholdEcdsa.typecheck.d.ts +0 -2
- package/dist/types/wallet/src/core/rpcClients/relayer/walletCredentialActivity.d.ts +0 -48
- package/dist/types/wallet/src/core/signingEngine/flows/recovery/recoveryStorePorts.d.ts +0 -7
- package/dist/types/wallet/src/core/signingEngine/session/holderShares/holderShareEnvelopeAad.d.ts +0 -14
- package/dist/types/wallet/src/core/signingEngine/session/identity/ecdsaDerivationSigningMaterialHandle.d.ts +0 -19
- package/dist/types/wallet/src/core/signingEngine/session/identity/ecdsaDerivationSigningMaterialHandle.typecheck.d.ts +0 -2
- package/dist/types/wallet/src/core/signingEngine/session/lanes/laneRecords.d.ts +0 -3
- package/dist/types/wallet/src/core/signingEngine/session/lanes/operations/holderDeliveryCoordinator.d.ts +0 -29
- package/dist/types/wallet/src/core/signingEngine/session/lanes/operations/ports.d.ts +0 -53
- package/dist/types/wallet/src/core/signingEngine/session/lanes/operations/sourceLaneOperationCoordinator.d.ts +0 -24
- package/dist/types/wallet/src/core/signingEngine/session/operationState/stepUpFreshness.d.ts +0 -135
- package/dist/types/wallet/src/core/signingEngine/session/operationState/stepUpFreshness.typecheck.d.ts +0 -2
- package/dist/types/wallet/src/core/signingEngine/session/passkey/envelopes/index.d.ts +0 -19
- package/dist/types/wallet/src/core/signingEngine/session/passkey/runtime.d.ts +0 -23
- package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/walletAuthPolicyError.d.ts +0 -17
- package/dist/types/wallet/src/core/signingEngine/threshold/crypto/ed25519WrapKeySalt.d.ts +0 -2
- package/dist/types/wallet/src/core/signingEngine/useCases/lifecycle.d.ts +0 -758
- package/dist/types/wallet/src/core/signingEngine/useCases/lifecycle.typecheck.d.ts +0 -2
- package/dist/types/wallet/src/core/signingEngine/useCases/registerWallet.d.ts +0 -71
- package/dist/types/wallet/src/core/signingEngine/useCases/restorePersistedSessions.d.ts +0 -51
- package/dist/types/wallet/src/core/signingEngine/useCases/signEvmFamily.d.ts +0 -47
- package/dist/types/wallet/src/core/signingEngine/useCases/signNear.d.ts +0 -60
- package/dist/types/wallet/src/core/signingEngine/useCases/unlockWallet.d.ts +0 -69
- package/dist/types/wallet/src/core/signingEngine/walletCustody/coldUnlock.d.ts +0 -57
- package/dist/types/wallet/src/core/signingEngine/workerManager/laneWorkerChannels.d.ts +0 -81
- package/dist/types/wallet/src/core/signingEngine/workerManager/workers/laneHolderWorkerBackend.d.ts +0 -54
- package/dist/types/wallet/src/react/components/AccountMenuButton/HaloBorder/index.d.ts +0 -33
- package/dist/types/wallet/src/react/components/AccountMenuButton/PasskeyHaloLoading.d.ts +0 -10
- package/dist/types/wallet/src/react/components/AccountMenuButton/icons/EclipseIcon.d.ts +0 -8
- package/dist/types/wallet/src/react/components/ArrowRightAnim.d.ts +0 -19
- package/dist/types/wallet/src/react/components/HostedSeamsAuthMenu/index.d.ts +0 -5
- package/dist/types/wallet/src/theme/base-styles.runtime.d.ts +0 -15
- /package/dist/esm/sdk/{base-CMsoJcVv.js → base-D1B5mGin.js} +0 -0
- /package/dist/esm/sdk/{bytes-CwytAKz8.js → bytes-qKxKn4gg.js} +0 -0
- /package/dist/esm/sdk/{csp-stylesheet-DLj_a6t_.js → csp-stylesheet-btENhsNp.js} +0 -0
- /package/dist/esm/sdk/{events-Z_Rmy0Hn.js → events-DYoBL2HO.js} +0 -0
- /package/dist/esm/sdk/{executeWorkerOperation-Bn8GEuT_.js → executeWorkerOperation-Cl9whMK7.js} +0 -0
- /package/dist/esm/sdk/{jsonRpc-MUsR5-C6.js → jsonRpc-VVkaQkFD.js} +0 -0
- /package/dist/esm/sdk/{keccak-DY5wDsym.js → keccak-DUL3d8SF.js} +0 -0
- /package/dist/esm/sdk/{nearRpcResults-DwvW43FL.js → nearRpcResults-DoUgDATm.js} +0 -0
- /package/dist/esm/sdk/{prfCache-CgAr-VEU.js → prfCache-wqQSjYLn.js} +0 -0
- /package/dist/esm/sdk/{profileAccountProjection-C9rVhbeJ.js → profileAccountProjection-uZVJuBvS.js} +0 -0
- /package/dist/esm/sdk/{promptText-BEgOkGxB.js → promptText-CuRa_ivd.js} +0 -0
- /package/dist/esm/sdk/{shared-Qy1DGMqH.js → shared-DkbeLCI3.js} +0 -0
- /package/dist/esm/sdk/{signerSlot-DbNAs-kc.js → signerSlot-_ovonwVX.js} +0 -0
- /package/dist/esm/sdk/{signingSessionSeal-CdtgXHSL.js → signingSessionSeal-Cu-GHm6y.js} +0 -0
- /package/dist/esm/sdk/{surface-measurement-reporter-D7BNehf4.js → surface-measurement-reporter-CSTyRsMa.js} +0 -0
- /package/dist/esm/sdk/{walletIframeIdentity-UmQTJsHc.js → walletIframeIdentity-DB6Z2EC9.js} +0 -0
- /package/dist/esm/sdk/{webauthnPromptCoordinator-CLeba8ru.js → webauthnPromptCoordinator-L96oVvLz.js} +0 -0
- /package/dist/public/sdk/{base-CMsoJcVv.js → base-D1B5mGin.js} +0 -0
- /package/dist/public/sdk/{bytes-CwytAKz8.js → bytes-qKxKn4gg.js} +0 -0
- /package/dist/public/sdk/{csp-stylesheet-DLj_a6t_.js → csp-stylesheet-btENhsNp.js} +0 -0
- /package/dist/public/sdk/{events-Z_Rmy0Hn.js → events-DYoBL2HO.js} +0 -0
- /package/dist/public/sdk/{executeWorkerOperation-Bn8GEuT_.js → executeWorkerOperation-Cl9whMK7.js} +0 -0
- /package/dist/public/sdk/{jsonRpc-MUsR5-C6.js → jsonRpc-VVkaQkFD.js} +0 -0
- /package/dist/public/sdk/{keccak-DY5wDsym.js → keccak-DUL3d8SF.js} +0 -0
- /package/dist/public/sdk/{nearRpcResults-DwvW43FL.js → nearRpcResults-DoUgDATm.js} +0 -0
- /package/dist/public/sdk/{prfCache-CgAr-VEU.js → prfCache-wqQSjYLn.js} +0 -0
- /package/dist/public/sdk/{profileAccountProjection-C9rVhbeJ.js → profileAccountProjection-uZVJuBvS.js} +0 -0
- /package/dist/public/sdk/{promptText-BEgOkGxB.js → promptText-CuRa_ivd.js} +0 -0
- /package/dist/public/sdk/{shared-Qy1DGMqH.js → shared-DkbeLCI3.js} +0 -0
- /package/dist/public/sdk/{signerSlot-DbNAs-kc.js → signerSlot-_ovonwVX.js} +0 -0
- /package/dist/public/sdk/{signingSessionSeal-CdtgXHSL.js → signingSessionSeal-Cu-GHm6y.js} +0 -0
- /package/dist/public/sdk/{surface-measurement-reporter-D7BNehf4.js → surface-measurement-reporter-CSTyRsMa.js} +0 -0
- /package/dist/public/sdk/{walletIframeIdentity-UmQTJsHc.js → walletIframeIdentity-DB6Z2EC9.js} +0 -0
- /package/dist/public/sdk/{webauthnPromptCoordinator-CLeba8ru.js → webauthnPromptCoordinator-L96oVvLz.js} +0 -0
|
@@ -1,27 +1,29 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { A as parseWalletRecoveryOperationId, B as normalizeTrimmedString, D as parseWalletAuthorityId, F as normalizeFiniteNumber, M as parseWebAuthnRpId, O as parseWalletId, S as parseThresholdEd25519SessionId, T as parseWalletAuthMethodId, g as parseMpcMaterialOwnerRef, h as parseMpcMaterialActivationRef, i as parseCapabilityInstanceRef, j as parseWebAuthnCredentialIdB64u, k as parseWalletKeyId, n as hasWhitespaceOrControlCharacters, o as parseEmailOtpChallengeId, r as mpcMaterialActivationRefsEqual, s as parseEmailOtpProviderUserId, w as parseVerifiedEmailAddress } from "./domainIds-lcrFg6Sa.js";
|
|
2
|
+
import { _ as requireRecord, h as requireCanonicalString, m as requireArray } from "./validation-gat4LEKm.js";
|
|
2
3
|
import { i as base64UrlEncode, r as base64UrlDecode } from "./base64-Clm8C-e9.js";
|
|
3
4
|
import { r as secureRandomId } from "./secureRandomId-BORsmdS4.js";
|
|
4
|
-
import {
|
|
5
|
-
import { A as
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { a as
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import { i as
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
5
|
+
import { M as sameDelegatedWalletAuthorityV1, b as parseEd25519PublicKeyB64u, h as normalizeRuntimePolicyScope, o as normalizeThresholdRuntimePolicyScope } from "./sessionPolicy-CHiilOAB.js";
|
|
6
|
+
import { $ as parseWalletAuthAuthority, A as parseRouterAbEcdsaVerifiedClientActivationFactsV1, At as walletSessionPreservesCapabilities, Ct as routerAbMpcMaterialActivationRefFromWire, E as parseRouterAbEcdsaRegistrationActivationReceiptV1, F as routerAbEcdsaDerivationNormalSigningScopeCanonicalBytesV1, R as sameRouterAbEcdsaDerivationNormalSigningStateV1, V as sameRouterAbEcdsaRegistrationActivationReceiptV1, X as isPasskeyWalletAuthAuthority, Y as isEmailOtpWalletAuthAuthority, Z as parseEmailOtpWalletAuthAuthority, _t as parseSdkEcdsaDerivationSigningRootId, at as parseEcdsaCapabilityManifestId, bt as canonicalRouterAbMpcMaterialActivationRefBytes, ct as parseEcdsaCiphertextDigest, dt as parseEcdsaMaterialSealingKeyId, et as parseWalletAuthAuthorityRef, ft as parseEcdsaPendingCiphertextDigest, j as requireRouterAbEcdsaDerivationNormalSigningStateV1, kt as parseWalletSessionOperationCredentialV1, lt as parseEcdsaIv12B64u, mt as parseEvmFamilyEcdsaSignerId, ot as parseEcdsaCapabilityManifestRevision, pt as parseEcdsaServerGeneration, rt as parseCanonicalEcdsaServerActivationRequest, st as parseEcdsaCiphertextB64u, tt as walletAuthAuthoritiesMatch, v as parseRouterAbEcdsaDerivationPublicCapabilityV1, vt as parseSdkEcdsaDerivationSigningRootVersion, wt as routerAbMpcMaterialActivationRefToWire, z as sameRouterAbEcdsaDerivationPublicCapabilityV1 } from "./ecdsaPresignLifecycle-BFOTNYCK.js";
|
|
7
|
+
import { d as parseMpcWalletSigningQuotaId, h as parseWalletSessionId, l as parseDeviceId, m as parseWalletSessionAuthorizationId } from "./capabilityKinds-hvYqa6S_.js";
|
|
8
|
+
import { f as alphabetizeStringify, h as sha256HexUtf8, m as sha256BytesUtf8, p as sha256Bytes } from "./chains-BMh3btVo.js";
|
|
9
|
+
import { a as sha256DigestB64u, i as parseIsoTimestamp, n as parseCorrelationId, r as parseDigestB64u } from "./canonicalPrimitives-BTHWz80v.js";
|
|
10
|
+
import { a as thresholdEcdsaChainTargetFromRequest, c as toWalletId } from "./ecdsaChainTarget-Bl-JWyuw.js";
|
|
11
|
+
import { r as SIGNER_KINDS } from "./signerDomain-IEAVrOrc.js";
|
|
12
|
+
import { a as toIndexedDbChainTargetKey, i as normalizeLastUserScope, n as normalizeIndexedDbAccountModel, r as normalizeIndexedDbChainIdKey, t as normalizeIndexedDbAccountAddress } from "./normalization-CBt413-z.js";
|
|
13
|
+
import { _ as SEAMS_WALLET_INDEXES, f as parseRecoveryCodeReservationId, g as SEAMS_WALLET_DB_NAME, h as seamsWalletDB, u as parseWalletRecoveryCommittedProjectionV1, v as SEAMS_WALLET_STORES } from "./wallet-recovery-Bz9qKgaL.js";
|
|
14
|
+
import { B as buildNearProfileId, L as buildEnvelopeAAD, M as WALLET_CUSTODY_ED25519_MATERIAL_KEY_KIND, N as assertWalletCustodyEd25519MaterialBindingV1, P as buildWalletCustodyEd25519MaterialRecordV1, R as normalizePayloadEnvelope, z as sanitizePayload } from "./accountLifecycle-BAGG_rbk.js";
|
|
15
|
+
import { t as toAccountId } from "./accountIds-DhIPGOSN.js";
|
|
16
|
+
import { Jt as parseRouterAbEd25519YaoCeremonyBindingV1, Kt as parseRouterAbEd25519YaoActivationPublicReceiptV1, Mt as parseLinkedDeviceEcdsaSourcePreservingActivationReceiptV1, Qt as parseRouterAbEd25519YaoParticipantIdsV1, Y as parseLocalAuthorityInstallationReceiptV1, an as parseRouterAbEd25519YaoRegistrationActivationExecuteRequestV1, b as toParticipantId, in as parseRouterAbEd25519YaoRegistrationActivationAdmissionReceiptV1, l as buildVerifiedEcdsaPublicFacts, ln as sameRouterAbEd25519YaoActivationBindingV1, qt as parseRouterAbEd25519YaoApplicationBindingFactsV1, sn as parseRouterAbEd25519YaoRegistrationAdmissionRequestV1, x as toRpId, y as toEvmFamilyEcdsaKeyHandle } from "./evmFamilyEcdsaIdentity-Co5XDcEA.js";
|
|
17
|
+
import { T as sameWalletAuthMethodRecordV2, a as isActiveEcdsaWalletAuthorityV1, c as isEcdsaExtensionOfEd25519WalletAuthority, i as extendEcdsaWalletAuthorityWithEd25519, m as walletAuthorityDigestsMatchV1, o as isActiveRecoveredWalletAuthorityV1, r as encodeWalletSignerActivationSetV1, u as parseWalletAuthorityV1, w as parseWalletAuthMethodRecordV2 } from "./walletAuthority-BQBxgUBn.js";
|
|
18
|
+
import { i as nearEd25519SigningKeyIdFromString, o as walletIdFromString } from "./registrationIds-DLSdEKSv.js";
|
|
19
|
+
import { d as parsePasskeyCustodyEnvelopeRecord, p as sameWalletCustodyEnvelopeOwnership } from "./passkey-custody-Bk1jAknm.js";
|
|
20
|
+
import { a as parseEcdsaRoleLocalPersistedMaterialRef, d as parseEcdsaRelayerKeyId, n as parseEcdsaRoleLocalBindingDigest, r as parseEcdsaRoleLocalDurableMaterialRef, s as parseEcdsaThresholdKeyId, t as parseEcdsaClientVerifyingPublicKey33B64u, u as parseEcdsaKeyHandle } from "./keyMaterialBrands-CX41hur6.js";
|
|
21
|
+
import { v as parseNearProvisioningState } from "./sdkSentEvents-MqDkbQg1.js";
|
|
22
|
+
import { t as parseSignerSlot } from "./signerSlot-_ovonwVX.js";
|
|
23
|
+
import { C as buildEcdsaRoleLocalPublicFacts, _ as buildServerCommittedEcdsaActivationJournal, a as buildEcdsaManifestIdentity, b as unwrapDomainId, c as buildEncryptedEcdsaPendingCandidate, d as buildNoCurrentEcdsaManifestExpectation, f as buildNoCurrentEcdsaServerGenerationExpectation, g as buildReplacedEcdsaCapabilityManifest, h as buildPreparedEvmFamilySigner, i as buildEcdsaCapabilityScope, l as buildExactEcdsaManifestExpectation, m as buildPreparedEcdsaActivationJournal, n as buildDurableEcdsaMaterialBinding, o as buildEcdsaRoleLocalMaterialBinding, p as buildPreparedEcdsaActivationCandidate, r as buildEcdsaActivationBinding, s as buildEcdsaServerActivationCommit, t as buildActiveEcdsaCapabilityManifest, u as buildExactEcdsaServerGenerationExpectation, v as buildValidatedEncryptedEcdsaReadyMaterial } from "./ecdsaCapabilityManifest-kzO_fW09.js";
|
|
24
|
+
import { i as parseEcdsaClientPresignPoolIdentity, n as ecdsaClientPresignPoolKey, r as equalEcdsaClientPresignPoolIdentity } from "./ecdsaPresignPoolIdentity-BjxZVIqn.js";
|
|
25
|
+
import { _ as NonceCoordinatorDegradationReason, b as NonceDurableLeaseState, u as nonceLaneKey, v as NonceCoordinatorFallback } from "./nonceLaneKeys-C3c9lG6u.js";
|
|
26
|
+
import { i as buildNearAccountRefs, n as resolveProfileAccountContextFromCandidates } from "./profileAccountProjection-uZVJuBvS.js";
|
|
25
27
|
//#region src/core/indexedDB/linkedAuthoritySignerMaterial.ts
|
|
26
28
|
function linkedAuthorityMaterialSealAadV1(input) {
|
|
27
29
|
return alphabetizeStringify({
|
|
@@ -36,7 +38,7 @@ function linkedAuthorityMaterialSealAadV1(input) {
|
|
|
36
38
|
});
|
|
37
39
|
}
|
|
38
40
|
function parseWalletAuthorityLinkedSignerMaterialRecordV1(value) {
|
|
39
|
-
const record = requireRecord
|
|
41
|
+
const record = requireRecord(value, "linked signer material record");
|
|
40
42
|
if (record.kind !== "wallet_authority_linked_signer_material_v1") throw new Error("linked signer material record kind is invalid");
|
|
41
43
|
if (record.keyFamily !== "ed25519" && record.keyFamily !== "ecdsa_secp256k1") throw new Error("linked signer material keyFamily is invalid");
|
|
42
44
|
const commonKeys = [
|
|
@@ -56,7 +58,7 @@ function parseWalletAuthorityLinkedSignerMaterialRecordV1(value) {
|
|
|
56
58
|
const authorityId = parseBoundaryValue(parseWalletAuthorityId(record.authorityId), "authorityId");
|
|
57
59
|
const walletAuthMethodId = parseBoundaryValue(parseWalletAuthMethodId(record.walletAuthMethodId), "walletAuthMethodId");
|
|
58
60
|
const materialActivation = parseBoundaryValue(parseMpcMaterialActivationRef(record.materialActivation), "materialActivation");
|
|
59
|
-
const activationId =
|
|
61
|
+
const activationId = requireCanonicalString(record.activationId, "activationId", "must be a non-empty canonical string");
|
|
60
62
|
if (materialActivation.activationId !== activationId) throw new Error("linked signer material activationId does not match materialActivation");
|
|
61
63
|
const sealedMaterialB64u = parseCanonicalNonEmptyB64u(record.sealedMaterialB64u, "sealedMaterialB64u");
|
|
62
64
|
const sealedMaterialDigestB64u = parseDigestB64u(record.sealedMaterialDigestB64u);
|
|
@@ -131,7 +133,7 @@ async function openWalletAuthorityLinkedSignerMaterialV1(input) {
|
|
|
131
133
|
reason: "sealed_material_invalid"
|
|
132
134
|
};
|
|
133
135
|
}
|
|
134
|
-
if (
|
|
136
|
+
if (await sha256DigestB64u(sealed) !== record.sealedMaterialDigestB64u) {
|
|
135
137
|
sealed.fill(0);
|
|
136
138
|
return {
|
|
137
139
|
kind: "wallet_authority_linked_signer_material_open_failed_v1",
|
|
@@ -191,7 +193,7 @@ async function openWalletAuthorityLinkedSignerMaterialV1(input) {
|
|
|
191
193
|
}
|
|
192
194
|
}
|
|
193
195
|
function parseWalletAuthorityLinkedMaterialTargetFactorV1(value) {
|
|
194
|
-
const record = requireRecord
|
|
196
|
+
const record = requireRecord(value, "linked signer material target factor");
|
|
195
197
|
if (record.kind === "passkey") {
|
|
196
198
|
exactKeys(record, [
|
|
197
199
|
"kind",
|
|
@@ -216,20 +218,20 @@ function parseWalletAuthorityLinkedMaterialTargetFactorV1(value) {
|
|
|
216
218
|
"emailHashHex",
|
|
217
219
|
"registrationAuthorityId"
|
|
218
220
|
], "linked signer material email target factor");
|
|
219
|
-
const emailHashHex =
|
|
221
|
+
const emailHashHex = requireCanonicalString(record.emailHashHex, "targetFactor.emailHashHex", "must be a non-empty canonical string");
|
|
220
222
|
if (!/^[0-9a-f]{64}$/.test(emailHashHex)) throw new Error("targetFactor.emailHashHex is invalid");
|
|
221
223
|
return {
|
|
222
224
|
kind: "email_otp",
|
|
223
225
|
walletAuthMethodId: parseBoundaryValue(parseWalletAuthMethodId(record.walletAuthMethodId), "targetFactor.walletAuthMethodId"),
|
|
224
226
|
verificationDigestB64u: parseDigestB64u(record.verificationDigestB64u),
|
|
225
227
|
emailHashHex,
|
|
226
|
-
registrationAuthorityId:
|
|
228
|
+
registrationAuthorityId: requireCanonicalString(record.registrationAuthorityId, "targetFactor.registrationAuthorityId", "must be a non-empty canonical string")
|
|
227
229
|
};
|
|
228
230
|
}
|
|
229
231
|
throw new Error("linked signer material target factor kind is invalid");
|
|
230
232
|
}
|
|
231
233
|
function parseEd25519PublicFacts(value, materialActivation) {
|
|
232
|
-
const record = requireRecord
|
|
234
|
+
const record = requireRecord(value, "linked signer material Ed25519 public facts");
|
|
233
235
|
exactKeys(record, [
|
|
234
236
|
"keyFamily",
|
|
235
237
|
"participantIds",
|
|
@@ -251,7 +253,7 @@ function parseEd25519PublicFacts(value, materialActivation) {
|
|
|
251
253
|
};
|
|
252
254
|
}
|
|
253
255
|
function parseEcdsaPublicFacts$1(value, materialActivation) {
|
|
254
|
-
const record = requireRecord
|
|
256
|
+
const record = requireRecord(value, "linked signer material ECDSA public facts");
|
|
255
257
|
exactKeys(record, [
|
|
256
258
|
"keyFamily",
|
|
257
259
|
"ecdsaThresholdKeyId",
|
|
@@ -280,14 +282,6 @@ function parseBoundaryValue(result, label) {
|
|
|
280
282
|
if (!result.ok) throw new Error(`${label}: ${result.error.message}`);
|
|
281
283
|
return result.value;
|
|
282
284
|
}
|
|
283
|
-
function requireNonEmptyString$1(value, label) {
|
|
284
|
-
if (typeof value !== "string" || value.length === 0 || value.trim() !== value) throw new Error(`${label} must be a non-empty canonical string`);
|
|
285
|
-
return value;
|
|
286
|
-
}
|
|
287
|
-
function requireRecord$2(value, label) {
|
|
288
|
-
if (typeof value !== "object" || value === null || Array.isArray(value)) throw new Error(`${label} must be an object`);
|
|
289
|
-
return value;
|
|
290
|
-
}
|
|
291
285
|
function exactKeys(record, keys, label) {
|
|
292
286
|
const actual = Object.keys(record);
|
|
293
287
|
if (actual.length !== keys.length || keys.some((key) => !actual.includes(key))) throw new Error(`${label} fields are invalid`);
|
|
@@ -2440,7 +2434,7 @@ var WalletSessionAuthorizationRepository = class {
|
|
|
2440
2434
|
};
|
|
2441
2435
|
const walletSessionAuthorizations = new WalletSessionAuthorizationRepository();
|
|
2442
2436
|
//#endregion
|
|
2443
|
-
//#region src/core/indexedDB/seamsWalletDB/
|
|
2437
|
+
//#region src/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestRecords.ts
|
|
2444
2438
|
const MANIFEST_RECORD_VERSION = "ecdsa_capability_manifest_v3";
|
|
2445
2439
|
const POINTER_RECORD_VERSION = "ecdsa_current_capability_manifest_v2";
|
|
2446
2440
|
const MATERIAL_RECORD_VERSION = "ecdsa_role_local_material_v2";
|
|
@@ -2452,40 +2446,11 @@ const MATERIAL_STORE = SEAMS_WALLET_STORES.ecdsaRoleLocalMaterial;
|
|
|
2452
2446
|
const JOURNAL_STORE = SEAMS_WALLET_STORES.ecdsaActivationCommitJournals;
|
|
2453
2447
|
const SEALING_KEY_STORE = SEAMS_WALLET_STORES.ecdsaMaterialSealingKeys;
|
|
2454
2448
|
const PRESIGNATURE_STORE = SEAMS_WALLET_STORES.ecdsaClientPresignatures;
|
|
2455
|
-
const AES_GCM_IV_BYTES = 12;
|
|
2456
|
-
const MATERIAL_AAD_VERSION = 1;
|
|
2457
|
-
const CLIENT_PRESIGNATURE_AAD_DOMAIN = "seams/ecdsa-client-presignature/v1";
|
|
2458
|
-
const MAX_EXPIRED_CLIENT_PRESIGNATURE_DELETIONS_PER_TRANSACTION = 32;
|
|
2459
|
-
const MAX_DURABLE_CLIENT_PRESIGNATURE_FUTURE_SKEW_MS = 5 * 6e4;
|
|
2460
|
-
function activeManifestMatchesWalletCustodyImport(input) {
|
|
2461
|
-
const manifest = input.manifest;
|
|
2462
|
-
const binding = input.activationBinding;
|
|
2463
|
-
return walletAuthAuthorityRefsMatch(manifest.signer.authority, binding.signer.authority) && ecdsaCapabilityScopesMatch(manifest.signer.scope, binding.signer.scope) && manifest.signer.walletId === binding.signer.walletId && manifest.signer.capability === binding.signer.capability && manifest.signer.materialOwner === binding.signer.materialOwner && manifest.signer.signingRootId === binding.signer.signingRootId && manifest.signer.signingRootVersion === binding.signer.signingRootVersion && ecdsaRegisteredPublicFactsMatch(manifest.signer.registeredPublicFacts, input.registeredPublicFacts) && ecdsaServerActivationCommitsMatch(manifest.activation.serverActivation, input.serverActivation) && mpcMaterialActivationRefsEqual(manifest.activation.materialActivation, routerAbMpcMaterialActivationRefFromWire(input.serverActivation.serverActivationReceipt.protocolReceipt.ecdsa_activation.material_activation)) && manifest.durableMaterial.bindingDigest === binding.bindingDigest && manifest.durableMaterial.durableMaterialRef === binding.durableMaterialRef && ecdsaRoleLocalMaterialBindingsMatch(manifest.durableMaterial.roleLocalBinding, binding.roleLocalBinding) && ecdsaRoleLocalPublicFactsMatch(manifest.durableMaterial.roleLocalPublicFacts, input.roleLocalPublicFacts) && sameRouterAbEcdsaDerivationNormalSigningStateV1(manifest.durableMaterial.routerAbEcdsaDerivationNormalSigning, input.routerAbEcdsaDerivationNormalSigning) && runtimePolicyScopesMatch(manifest.durableMaterial.runtimePolicyScope, normalizeRuntimePolicyScope(input.runtimePolicyScope));
|
|
2464
|
-
}
|
|
2465
|
-
var FinalizationControlError = class extends Error {
|
|
2466
|
-
constructor(kind, message) {
|
|
2467
|
-
super(message);
|
|
2468
|
-
this.name = "FinalizationControlError";
|
|
2469
|
-
this.kind = kind;
|
|
2470
|
-
}
|
|
2471
|
-
};
|
|
2472
|
-
function requireRecord$1(value, label) {
|
|
2473
|
-
if (value === null || typeof value !== "object" || Array.isArray(value)) throw new Error(`${label} must be an object`);
|
|
2474
|
-
return value;
|
|
2475
|
-
}
|
|
2476
2449
|
function requireExactKeys$1(record, label, expectedKeys) {
|
|
2477
2450
|
const actual = Object.keys(record).sort();
|
|
2478
2451
|
const expected = [...expectedKeys].sort();
|
|
2479
2452
|
if (actual.length !== expected.length || actual.some((field, index) => field !== expected[index])) throw new Error(`${label} has unexpected fields`);
|
|
2480
2453
|
}
|
|
2481
|
-
function requireArray(value, label) {
|
|
2482
|
-
if (!Array.isArray(value)) throw new Error(`${label} must be an array`);
|
|
2483
|
-
return value;
|
|
2484
|
-
}
|
|
2485
|
-
function unwrapDomainId(result) {
|
|
2486
|
-
if (!result.ok) throw new Error(result.error.message);
|
|
2487
|
-
return result.value;
|
|
2488
|
-
}
|
|
2489
2454
|
function normalizeSelector(selector) {
|
|
2490
2455
|
const authority = parseWalletAuthAuthorityRef(selector.authority);
|
|
2491
2456
|
if (!authority) throw new Error("ECDSA capability selector authority is invalid");
|
|
@@ -2494,17 +2459,17 @@ function normalizeSelector(selector) {
|
|
|
2494
2459
|
authority
|
|
2495
2460
|
};
|
|
2496
2461
|
}
|
|
2497
|
-
function
|
|
2462
|
+
function selectorFromSigner(signer) {
|
|
2498
2463
|
return {
|
|
2499
|
-
capability:
|
|
2500
|
-
authority:
|
|
2464
|
+
capability: signer.capability,
|
|
2465
|
+
authority: signer.authority
|
|
2501
2466
|
};
|
|
2502
2467
|
}
|
|
2468
|
+
function selectorFromJournal(journal) {
|
|
2469
|
+
return selectorFromSigner(journal.candidate.activationBinding.signer);
|
|
2470
|
+
}
|
|
2503
2471
|
function selectorFromManifest(manifest) {
|
|
2504
|
-
return
|
|
2505
|
-
capability: manifest.signer.capability,
|
|
2506
|
-
authority: manifest.signer.authority
|
|
2507
|
-
};
|
|
2472
|
+
return selectorFromSigner(manifest.signer);
|
|
2508
2473
|
}
|
|
2509
2474
|
function selectorKey(selector) {
|
|
2510
2475
|
return [
|
|
@@ -2513,6 +2478,22 @@ function selectorKey(selector) {
|
|
|
2513
2478
|
String(selector.authority.authorityDigest)
|
|
2514
2479
|
];
|
|
2515
2480
|
}
|
|
2481
|
+
function selectorColumns(selector) {
|
|
2482
|
+
return {
|
|
2483
|
+
capability_ref: selector.capability,
|
|
2484
|
+
wallet_id: selector.authority.walletId,
|
|
2485
|
+
authority_digest: selector.authority.authorityDigest,
|
|
2486
|
+
wallet_auth_method_id: selector.authority.walletAuthMethodId
|
|
2487
|
+
};
|
|
2488
|
+
}
|
|
2489
|
+
function authorityFromColumns(record) {
|
|
2490
|
+
return parseWalletAuthAuthorityRef({
|
|
2491
|
+
kind: "wallet_auth_authority_ref",
|
|
2492
|
+
walletId: record.wallet_id,
|
|
2493
|
+
authorityDigest: record.authority_digest,
|
|
2494
|
+
walletAuthMethodId: record.wallet_auth_method_id
|
|
2495
|
+
});
|
|
2496
|
+
}
|
|
2516
2497
|
function walletAuthAuthorityRefsMatch(left, right) {
|
|
2517
2498
|
return left.kind === right.kind && left.walletId === right.walletId && left.authorityDigest === right.authorityDigest && left.walletAuthMethodId === right.walletAuthMethodId;
|
|
2518
2499
|
}
|
|
@@ -2545,7 +2526,7 @@ function ecdsaRoleLocalPublicFactsMatch(left, right) {
|
|
|
2545
2526
|
return left.walletId === right.walletId && ecdsaChainTargetsMatch(left.chainTarget, right.chainTarget) && left.keyHandle === right.keyHandle && left.ecdsaThresholdKeyId === right.ecdsaThresholdKeyId && left.signingRootId === right.signingRootId && left.signingRootVersion === right.signingRootVersion && left.applicationBindingDigestB64u === right.applicationBindingDigestB64u && left.clientParticipantId === right.clientParticipantId && left.relayerParticipantId === right.relayerParticipantId && orderedNumberValuesMatch(left.participantIds, right.participantIds) && left.contextBinding32B64u === right.contextBinding32B64u && left.derivationClientSharePublicKey33B64u === right.derivationClientSharePublicKey33B64u && left.relayerPublicKey33B64u === right.relayerPublicKey33B64u && left.groupPublicKey33B64u === right.groupPublicKey33B64u && left.ethereumAddress === right.ethereumAddress && sameRouterAbEcdsaDerivationPublicCapabilityV1(left.publicCapability, right.publicCapability);
|
|
2546
2527
|
}
|
|
2547
2528
|
function ecdsaRegisteredPublicFactsMatch(left, right) {
|
|
2548
|
-
return left.kind === right.kind && left.keyHandle === right.keyHandle && left.publicKeyB64u === right.publicKeyB64u && left.participantIds
|
|
2529
|
+
return left.kind === right.kind && left.keyHandle === right.keyHandle && left.publicKeyB64u === right.publicKeyB64u && orderedNumberValuesMatch(left.participantIds, right.participantIds) && left.thresholdOwnerAddress === right.thresholdOwnerAddress;
|
|
2549
2530
|
}
|
|
2550
2531
|
function ecdsaManifestIdentitiesMatch(left, right) {
|
|
2551
2532
|
return left.manifestId === right.manifestId && left.manifestRevision === right.manifestRevision;
|
|
@@ -2566,17 +2547,17 @@ function ecdsaServerGenerationExpectationsMatch(left, right) {
|
|
|
2566
2547
|
default: return assertNever$1(left);
|
|
2567
2548
|
}
|
|
2568
2549
|
}
|
|
2569
|
-
function
|
|
2550
|
+
function ecdsaEvmFamilySignersMatch(left, right) {
|
|
2570
2551
|
return left.kind === right.kind && left.capability === right.capability && left.signerId === right.signerId && left.walletId === right.walletId && walletAuthAuthorityRefsMatch(left.authority, right.authority) && ecdsaCapabilityScopesMatch(left.scope, right.scope) && left.materialOwner === right.materialOwner && left.signingRootId === right.signingRootId && left.signingRootVersion === right.signingRootVersion;
|
|
2571
2552
|
}
|
|
2572
2553
|
function ecdsaRegisteredEvmFamilySignersMatch(left, right) {
|
|
2573
|
-
return
|
|
2554
|
+
return ecdsaEvmFamilySignersMatch(left, right) && ecdsaRegisteredPublicFactsMatch(left.registeredPublicFacts, right.registeredPublicFacts);
|
|
2574
2555
|
}
|
|
2575
2556
|
function ecdsaEncryptedPendingCandidatesMatch(left, right) {
|
|
2576
2557
|
return left.kind === right.kind && left.sealingKeyId === right.sealingKeyId && left.iv12B64u === right.iv12B64u && left.ciphertextB64u === right.ciphertextB64u && left.ciphertextDigest === right.ciphertextDigest;
|
|
2577
2558
|
}
|
|
2578
2559
|
function ecdsaActivationBindingsMatch(left, right) {
|
|
2579
|
-
return left.kind === right.kind && ecdsaManifestIdentitiesMatch(left.targetManifest, right.targetManifest) &&
|
|
2560
|
+
return left.kind === right.kind && ecdsaManifestIdentitiesMatch(left.targetManifest, right.targetManifest) && ecdsaEvmFamilySignersMatch(left.signer, right.signer) && ecdsaRoleLocalMaterialBindingsMatch(left.roleLocalBinding, right.roleLocalBinding) && left.bindingDigest === right.bindingDigest && left.durableMaterialRef === right.durableMaterialRef;
|
|
2580
2561
|
}
|
|
2581
2562
|
function ecdsaServerActivationCommitsMatch(left, right) {
|
|
2582
2563
|
return left.kind === right.kind && left.correlationId === right.correlationId && left.activationRequestDigest === right.activationRequestDigest && left.serverGeneration === right.serverGeneration && ecdsaServerActivationReceiptsMatch(left.serverActivationReceipt, right.serverActivationReceipt);
|
|
@@ -2610,54 +2591,46 @@ function ecdsaActiveCapabilityManifestsMatch(left, right) {
|
|
|
2610
2591
|
}
|
|
2611
2592
|
function serverActivationRecordMatches(expected, record) {
|
|
2612
2593
|
try {
|
|
2613
|
-
const receipt = requireRecord
|
|
2594
|
+
const receipt = requireRecord(record.serverActivationReceipt, "ECDSA server activation receipt");
|
|
2614
2595
|
return record.kind === expected.kind && parseCorrelationId(record.correlationId) === expected.correlationId && parseDigestB64u(record.activationRequestDigest) === expected.activationRequestDigest && parseEcdsaServerGeneration(record.serverGeneration) === expected.serverGeneration && receipt.kind === expected.serverActivationReceipt.kind && receipt.lifecycleId === String(expected.serverActivationReceipt.lifecycleId) && receipt.activationDigest === String(expected.serverActivationReceipt.activationDigest) && parseIsoTimestamp(receipt.activatedAt) === expected.serverActivationReceipt.activatedAt && sameRouterAbEcdsaRegistrationActivationReceiptV1(parseRouterAbEcdsaRegistrationActivationReceiptV1(receipt.protocolReceipt), expected.serverActivationReceipt.protocolReceipt);
|
|
2615
2596
|
} catch {
|
|
2616
2597
|
return false;
|
|
2617
2598
|
}
|
|
2618
2599
|
}
|
|
2619
|
-
async function persistenceDigest(category, selector, detail) {
|
|
2620
|
-
return parseDigestB64u(base64UrlEncode(await sha256BytesUtf8(alphabetizeStringify({
|
|
2621
|
-
category,
|
|
2622
|
-
capability_ref: selector.capability,
|
|
2623
|
-
wallet_id: selector.authority.walletId,
|
|
2624
|
-
authority_digest: selector.authority.authorityDigest,
|
|
2625
|
-
wallet_auth_method_id: selector.authority.walletAuthMethodId,
|
|
2626
|
-
detail
|
|
2627
|
-
}))));
|
|
2628
|
-
}
|
|
2629
|
-
function retryCorrelation() {
|
|
2630
|
-
return parseCorrelationId(secureRandomId("ecdsa-persistence-retry", 16, "ECDSA persistence retry correlations"));
|
|
2631
|
-
}
|
|
2632
2600
|
function buildPreparedJournalFromEncryptedCandidate(input) {
|
|
2633
2601
|
const candidate = buildPreparedEcdsaActivationCandidate({
|
|
2634
2602
|
activationBinding: input.preparation.activationBinding,
|
|
2635
2603
|
encryptedPending: input.encryptedPending
|
|
2636
2604
|
});
|
|
2637
|
-
|
|
2605
|
+
return buildPreparedJournalForExpectations({
|
|
2606
|
+
...input.preparation,
|
|
2607
|
+
candidate
|
|
2608
|
+
});
|
|
2609
|
+
}
|
|
2610
|
+
function buildPreparedJournalForExpectations(input) {
|
|
2611
|
+
const common = {
|
|
2612
|
+
journalId: input.journalId,
|
|
2613
|
+
candidate: input.candidate,
|
|
2614
|
+
requestDigest: input.requestDigest,
|
|
2615
|
+
canonicalRequest: input.canonicalRequest,
|
|
2616
|
+
createdAt: input.createdAt
|
|
2617
|
+
};
|
|
2618
|
+
switch (input.expectedManifest.kind) {
|
|
2638
2619
|
case "no_current_manifest":
|
|
2639
|
-
if (input.
|
|
2620
|
+
if (input.expectedGeneration.kind !== "no_current_generation") throw new Error("Initial ECDSA activation cannot expect a server generation");
|
|
2640
2621
|
return buildPreparedEcdsaActivationJournal({
|
|
2641
|
-
|
|
2642
|
-
expectedManifest: input.
|
|
2643
|
-
expectedGeneration: input.
|
|
2644
|
-
candidate,
|
|
2645
|
-
requestDigest: input.preparation.requestDigest,
|
|
2646
|
-
canonicalRequest: input.preparation.canonicalRequest,
|
|
2647
|
-
createdAt: input.preparation.createdAt
|
|
2622
|
+
...common,
|
|
2623
|
+
expectedManifest: input.expectedManifest,
|
|
2624
|
+
expectedGeneration: input.expectedGeneration
|
|
2648
2625
|
});
|
|
2649
2626
|
case "exact_manifest":
|
|
2650
|
-
if (input.
|
|
2627
|
+
if (input.expectedGeneration.kind !== "exact_generation") throw new Error("Replacement ECDSA activation requires an exact server generation");
|
|
2651
2628
|
return buildPreparedEcdsaActivationJournal({
|
|
2652
|
-
|
|
2653
|
-
expectedManifest: input.
|
|
2654
|
-
expectedGeneration: input.
|
|
2655
|
-
candidate,
|
|
2656
|
-
requestDigest: input.preparation.requestDigest,
|
|
2657
|
-
canonicalRequest: input.preparation.canonicalRequest,
|
|
2658
|
-
createdAt: input.preparation.createdAt
|
|
2629
|
+
...common,
|
|
2630
|
+
expectedManifest: input.expectedManifest,
|
|
2631
|
+
expectedGeneration: input.expectedGeneration
|
|
2659
2632
|
});
|
|
2660
|
-
default: return assertNever$1(input.
|
|
2633
|
+
default: return assertNever$1(input.expectedManifest);
|
|
2661
2634
|
}
|
|
2662
2635
|
}
|
|
2663
2636
|
function decodeCanonicalStateBlob(value, label) {
|
|
@@ -2669,391 +2642,126 @@ function decodeCanonicalStateBlob(value, label) {
|
|
|
2669
2642
|
}
|
|
2670
2643
|
return bytes;
|
|
2671
2644
|
}
|
|
2672
|
-
function activationBindingAadProjection(binding) {
|
|
2673
|
-
return {
|
|
2674
|
-
target_manifest: binding.targetManifest,
|
|
2675
|
-
signer: {
|
|
2676
|
-
capability: binding.signer.capability,
|
|
2677
|
-
signer_id: binding.signer.signerId,
|
|
2678
|
-
wallet_id: binding.signer.walletId,
|
|
2679
|
-
authority: binding.signer.authority,
|
|
2680
|
-
scope: binding.signer.scope,
|
|
2681
|
-
material_owner: binding.signer.materialOwner,
|
|
2682
|
-
signing_root_id: binding.signer.signingRootId,
|
|
2683
|
-
signing_root_version: binding.signer.signingRootVersion
|
|
2684
|
-
},
|
|
2685
|
-
role_local_binding: binding.roleLocalBinding,
|
|
2686
|
-
binding_digest: binding.bindingDigest,
|
|
2687
|
-
durable_material_ref: binding.durableMaterialRef
|
|
2688
|
-
};
|
|
2689
|
-
}
|
|
2690
|
-
function activeManifestBindingAadProjection(manifest) {
|
|
2691
|
-
return {
|
|
2692
|
-
target_manifest: manifest.identity,
|
|
2693
|
-
signer: {
|
|
2694
|
-
capability: manifest.signer.capability,
|
|
2695
|
-
signer_id: manifest.signer.signerId,
|
|
2696
|
-
wallet_id: manifest.signer.walletId,
|
|
2697
|
-
authority: manifest.signer.authority,
|
|
2698
|
-
scope: manifest.signer.scope,
|
|
2699
|
-
material_owner: manifest.signer.materialOwner,
|
|
2700
|
-
signing_root_id: manifest.signer.signingRootId,
|
|
2701
|
-
signing_root_version: manifest.signer.signingRootVersion
|
|
2702
|
-
},
|
|
2703
|
-
role_local_binding: manifest.durableMaterial.roleLocalBinding,
|
|
2704
|
-
binding_digest: manifest.durableMaterial.bindingDigest,
|
|
2705
|
-
durable_material_ref: manifest.durableMaterial.durableMaterialRef
|
|
2706
|
-
};
|
|
2707
|
-
}
|
|
2708
|
-
function pendingAadProjection(input) {
|
|
2709
|
-
if ("activationBinding" in input) return {
|
|
2710
|
-
version: MATERIAL_AAD_VERSION,
|
|
2711
|
-
stage: "activation_prepared",
|
|
2712
|
-
journal_id: input.journalId,
|
|
2713
|
-
expected_manifest: input.expectedManifest,
|
|
2714
|
-
activation_command: {
|
|
2715
|
-
kind: "ecdsa_server_activation_command",
|
|
2716
|
-
correlationId: input.journalId,
|
|
2717
|
-
expectedGeneration: input.expectedGeneration,
|
|
2718
|
-
requestDigest: input.requestDigest,
|
|
2719
|
-
canonicalRequest: input.canonicalRequest
|
|
2720
|
-
},
|
|
2721
|
-
activation_binding: activationBindingAadProjection(input.activationBinding),
|
|
2722
|
-
created_at: input.createdAt
|
|
2723
|
-
};
|
|
2724
|
-
return {
|
|
2725
|
-
version: MATERIAL_AAD_VERSION,
|
|
2726
|
-
stage: "activation_prepared",
|
|
2727
|
-
journal_id: input.journalId,
|
|
2728
|
-
expected_manifest: input.expectedManifest,
|
|
2729
|
-
activation_command: input.activationCommand,
|
|
2730
|
-
activation_binding: activationBindingAadProjection(input.candidate.activationBinding),
|
|
2731
|
-
created_at: input.createdAt
|
|
2732
|
-
};
|
|
2733
|
-
}
|
|
2734
|
-
function readyAadProjection(input) {
|
|
2735
|
-
return {
|
|
2736
|
-
version: MATERIAL_AAD_VERSION,
|
|
2737
|
-
stage: "activation_ready",
|
|
2738
|
-
activation_binding: input.kind === "server_activation_committed" ? activationBindingAadProjection(input.candidate.activationBinding) : activeManifestBindingAadProjection(input),
|
|
2739
|
-
server_activation: input.kind === "server_activation_committed" ? input.serverActivation : input.activation.serverActivation
|
|
2740
|
-
};
|
|
2741
|
-
}
|
|
2742
|
-
function importedReadyAadProjection(input) {
|
|
2743
|
-
return {
|
|
2744
|
-
version: MATERIAL_AAD_VERSION,
|
|
2745
|
-
stage: "activation_ready",
|
|
2746
|
-
activation_binding: activationBindingAadProjection(input.activationBinding),
|
|
2747
|
-
server_activation: input.serverActivation
|
|
2748
|
-
};
|
|
2749
|
-
}
|
|
2750
2645
|
function additionalData(projection) {
|
|
2751
2646
|
return new TextEncoder().encode(alphabetizeStringify(projection));
|
|
2752
2647
|
}
|
|
2753
|
-
function
|
|
2754
|
-
|
|
2755
|
-
|
|
2756
|
-
|
|
2648
|
+
async function generateMaterialSealingKey() {
|
|
2649
|
+
return await crypto.subtle.generateKey({
|
|
2650
|
+
name: "AES-GCM",
|
|
2651
|
+
length: 256
|
|
2652
|
+
}, false, ["encrypt", "decrypt"]);
|
|
2757
2653
|
}
|
|
2758
|
-
function
|
|
2759
|
-
|
|
2760
|
-
|
|
2654
|
+
async function encryptStateBlob(input) {
|
|
2655
|
+
const plaintext = decodeCanonicalStateBlob(input.stateBlobB64u, "ECDSA state blob");
|
|
2656
|
+
const iv12 = crypto.getRandomValues(new Uint8Array(12));
|
|
2657
|
+
const aad = additionalData(input.aadProjection);
|
|
2658
|
+
try {
|
|
2659
|
+
const ciphertext = new Uint8Array(await crypto.subtle.encrypt({
|
|
2660
|
+
name: "AES-GCM",
|
|
2661
|
+
iv: iv12,
|
|
2662
|
+
additionalData: aad
|
|
2663
|
+
}, input.key, plaintext));
|
|
2664
|
+
try {
|
|
2665
|
+
return {
|
|
2666
|
+
iv12B64u: parseEcdsaIv12B64u(base64UrlEncode(iv12)),
|
|
2667
|
+
ciphertextB64u: parseEcdsaCiphertextB64u(base64UrlEncode(ciphertext)),
|
|
2668
|
+
digestB64u: base64UrlEncode(await sha256Bytes(ciphertext))
|
|
2669
|
+
};
|
|
2670
|
+
} finally {
|
|
2671
|
+
ciphertext.fill(0);
|
|
2672
|
+
}
|
|
2673
|
+
} finally {
|
|
2674
|
+
plaintext.fill(0);
|
|
2675
|
+
aad.fill(0);
|
|
2676
|
+
}
|
|
2761
2677
|
}
|
|
2762
|
-
function
|
|
2763
|
-
|
|
2764
|
-
|
|
2678
|
+
async function ciphertextDigestB64u(ciphertextB64u) {
|
|
2679
|
+
const ciphertext = base64UrlDecode(ciphertextB64u);
|
|
2680
|
+
try {
|
|
2681
|
+
return base64UrlEncode(await sha256Bytes(ciphertext));
|
|
2682
|
+
} finally {
|
|
2683
|
+
ciphertext.fill(0);
|
|
2684
|
+
}
|
|
2765
2685
|
}
|
|
2766
|
-
function
|
|
2767
|
-
|
|
2768
|
-
const
|
|
2769
|
-
|
|
2686
|
+
async function decryptStateBlob(input) {
|
|
2687
|
+
const iv12 = base64UrlDecode(input.iv12B64u);
|
|
2688
|
+
const ciphertext = base64UrlDecode(input.ciphertextB64u);
|
|
2689
|
+
const aad = additionalData(input.aadProjection);
|
|
2690
|
+
let plaintext = null;
|
|
2691
|
+
try {
|
|
2692
|
+
plaintext = new Uint8Array(await crypto.subtle.decrypt({
|
|
2693
|
+
name: "AES-GCM",
|
|
2694
|
+
iv: iv12,
|
|
2695
|
+
additionalData: aad
|
|
2696
|
+
}, input.key, ciphertext));
|
|
2697
|
+
if (plaintext.length === 0) throw new Error("decrypted ECDSA state blob must not be empty");
|
|
2698
|
+
return base64UrlEncode(plaintext);
|
|
2699
|
+
} finally {
|
|
2700
|
+
iv12.fill(0);
|
|
2701
|
+
ciphertext.fill(0);
|
|
2702
|
+
aad.fill(0);
|
|
2703
|
+
plaintext?.fill(0);
|
|
2704
|
+
}
|
|
2770
2705
|
}
|
|
2771
|
-
function
|
|
2772
|
-
|
|
2706
|
+
function parseManifestIdentity(value) {
|
|
2707
|
+
const record = requireRecord(value, "ECDSA manifest identity");
|
|
2708
|
+
requireExactKeys$1(record, "ECDSA manifest identity", ["manifestId", "manifestRevision"]);
|
|
2709
|
+
return buildEcdsaManifestIdentity({
|
|
2710
|
+
manifestId: parseEcdsaCapabilityManifestId(record.manifestId),
|
|
2711
|
+
manifestRevision: parseEcdsaCapabilityManifestRevision(record.manifestRevision)
|
|
2712
|
+
});
|
|
2773
2713
|
}
|
|
2774
|
-
|
|
2775
|
-
|
|
2776
|
-
|
|
2777
|
-
|
|
2778
|
-
|
|
2779
|
-
|
|
2780
|
-
|
|
2714
|
+
function parseManifestExpectation(value) {
|
|
2715
|
+
const record = requireRecord(value, "ECDSA manifest expectation");
|
|
2716
|
+
switch (record.kind) {
|
|
2717
|
+
case "no_current_manifest":
|
|
2718
|
+
requireExactKeys$1(record, "ECDSA no-current manifest expectation", ["kind"]);
|
|
2719
|
+
return buildNoCurrentEcdsaManifestExpectation();
|
|
2720
|
+
case "exact_manifest":
|
|
2721
|
+
requireExactKeys$1(record, "ECDSA exact manifest expectation", [
|
|
2722
|
+
"kind",
|
|
2723
|
+
"manifestId",
|
|
2724
|
+
"manifestRevision"
|
|
2725
|
+
]);
|
|
2726
|
+
return buildExactEcdsaManifestExpectation(buildEcdsaManifestIdentity({
|
|
2727
|
+
manifestId: parseEcdsaCapabilityManifestId(record.manifestId),
|
|
2728
|
+
manifestRevision: parseEcdsaCapabilityManifestRevision(record.manifestRevision)
|
|
2729
|
+
}));
|
|
2730
|
+
default: throw new Error("ECDSA manifest expectation kind is invalid");
|
|
2781
2731
|
}
|
|
2782
|
-
return deletedCount;
|
|
2783
2732
|
}
|
|
2784
|
-
function
|
|
2785
|
-
|
|
2786
|
-
|
|
2787
|
-
|
|
2788
|
-
|
|
2789
|
-
|
|
2790
|
-
|
|
2791
|
-
|
|
2792
|
-
|
|
2793
|
-
|
|
2794
|
-
|
|
2795
|
-
|
|
2796
|
-
|
|
2797
|
-
|
|
2798
|
-
|
|
2799
|
-
|
|
2800
|
-
|
|
2801
|
-
|
|
2802
|
-
|
|
2803
|
-
|
|
2804
|
-
|
|
2805
|
-
|
|
2806
|
-
|
|
2807
|
-
|
|
2808
|
-
|
|
2809
|
-
|
|
2810
|
-
|
|
2811
|
-
"
|
|
2812
|
-
|
|
2813
|
-
"sealed"
|
|
2814
|
-
]);
|
|
2815
|
-
if (record.kind !== "sealed_available_client_presignature_v1") throw new Error("ECDSA durable presignature row kind is invalid");
|
|
2816
|
-
const poolIdentityRecord = requireRecord$1(record.pool_identity, "ECDSA durable presignature pool identity");
|
|
2817
|
-
requireExactKeys$1(poolIdentityRecord, "ECDSA durable presignature pool identity", [
|
|
2818
|
-
"activationEpoch",
|
|
2819
|
-
"capability",
|
|
2820
|
-
"keyBinding",
|
|
2821
|
-
"keyEpoch",
|
|
2822
|
-
"materialActivationB64u",
|
|
2823
|
-
"materialActivationId",
|
|
2824
|
-
"pairRole",
|
|
2825
|
-
"protocolId",
|
|
2826
|
-
"relayerUrl",
|
|
2827
|
-
"signingScopeB64u",
|
|
2828
|
-
"walletId"
|
|
2829
|
-
]);
|
|
2830
|
-
const poolIdentity = parseEcdsaClientPresignPoolIdentity(poolIdentityRecord);
|
|
2831
|
-
const recordId = parseDurableClientPresignatureRecordId(record.record_id);
|
|
2832
|
-
const poolIdentityKeyValue = String(record.pool_identity_key ?? "");
|
|
2833
|
-
if (poolIdentityKeyValue !== ecdsaClientPresignPoolKey(poolIdentity)) throw new Error("ECDSA durable presignature pool identity index is inconsistent");
|
|
2834
|
-
const walletId = String(record.wallet_id ?? "").trim();
|
|
2835
|
-
const materialActivationId = String(record.material_activation_id ?? "").trim();
|
|
2836
|
-
if (!walletId || walletId !== poolIdentity.walletId) throw new Error("ECDSA durable presignature wallet binding is inconsistent");
|
|
2837
|
-
if (!materialActivationId || materialActivationId !== poolIdentity.materialActivationId) throw new Error("ECDSA durable presignature activation binding is inconsistent");
|
|
2838
|
-
const durableMaterialRef = parseEcdsaRoleLocalPersistedMaterialRef(record.durable_material_ref);
|
|
2839
|
-
if (durableMaterialRef.materialActivation.activationId !== poolIdentity.materialActivationId || durableMaterialRef.materialActivation.capability !== poolIdentity.capability || durableMaterialRef.materialActivation.keyBinding !== poolIdentity.keyBinding || durableMaterialRef.materialActivation.materialOwner !== poolIdentity.walletId) throw new Error("ECDSA durable presignature material binding is inconsistent");
|
|
2840
|
-
const presignatureId = String(record.presignature_id ?? "").trim();
|
|
2841
|
-
if (!presignatureId) throw new Error("ECDSA durable presignature id is invalid");
|
|
2842
|
-
const groupPublicKey33B64u = parseEcdsaClientVerifyingPublicKey33B64u(record.group_public_key33_b64u);
|
|
2843
|
-
const bigR33B64u = parseEcdsaClientVerifyingPublicKey33B64u(record.big_r33_b64u);
|
|
2844
|
-
const createdAtMs = parsePresignatureTimestamp(record.created_at_ms, "created_at_ms");
|
|
2845
|
-
const expiresAtMs = parsePresignatureTimestamp(record.expires_at_ms, "expires_at_ms");
|
|
2846
|
-
if (createdAtMs > Date.now() + MAX_DURABLE_CLIENT_PRESIGNATURE_FUTURE_SKEW_MS) throw new Error("ECDSA durable presignature creation timestamp is in the future");
|
|
2847
|
-
if (expiresAtMs <= createdAtMs) throw new Error("ECDSA durable presignature expiry must follow creation");
|
|
2848
|
-
if (expiresAtMs - createdAtMs > 7776e6) throw new Error("ECDSA durable presignature lifetime exceeds the maximum");
|
|
2849
|
-
const sealed = requireRecord$1(record.sealed, "ECDSA durable presignature sealed payload");
|
|
2850
|
-
requireExactKeys$1(sealed, "ECDSA durable presignature sealed payload", [
|
|
2851
|
-
"kind",
|
|
2852
|
-
"sealing_key_id",
|
|
2853
|
-
"iv12_b64u",
|
|
2854
|
-
"ciphertext_b64u",
|
|
2855
|
-
"ciphertext_digest_b64u"
|
|
2856
|
-
]);
|
|
2857
|
-
if (sealed.kind !== "ecdsa_activation_aes_gcm_v1") throw new Error("ECDSA durable presignature sealing kind is invalid");
|
|
2858
|
-
return {
|
|
2859
|
-
kind: "sealed_available_client_presignature_v1",
|
|
2860
|
-
record_id: recordId,
|
|
2861
|
-
pool_identity: poolIdentity,
|
|
2862
|
-
pool_identity_key: poolIdentityKeyValue,
|
|
2863
|
-
wallet_id: walletId,
|
|
2864
|
-
material_activation_id: materialActivationId,
|
|
2865
|
-
durable_material_ref: durableMaterialRef,
|
|
2866
|
-
presignature_id: presignatureId,
|
|
2867
|
-
group_public_key33_b64u: groupPublicKey33B64u,
|
|
2868
|
-
big_r33_b64u: bigR33B64u,
|
|
2869
|
-
created_at_ms: createdAtMs,
|
|
2870
|
-
expires_at_ms: expiresAtMs,
|
|
2871
|
-
sealed: {
|
|
2872
|
-
kind: "ecdsa_activation_aes_gcm_v1",
|
|
2873
|
-
sealing_key_id: parseEcdsaMaterialSealingKeyId(sealed.sealing_key_id),
|
|
2874
|
-
iv12_b64u: parseEcdsaIv12B64u(sealed.iv12_b64u),
|
|
2875
|
-
ciphertext_b64u: parseEcdsaCiphertextB64u(sealed.ciphertext_b64u),
|
|
2876
|
-
ciphertext_digest_b64u: parseEcdsaCiphertextDigest(sealed.ciphertext_digest_b64u)
|
|
2877
|
-
}
|
|
2878
|
-
};
|
|
2879
|
-
}
|
|
2880
|
-
function metadataFromPresignatureRow(row) {
|
|
2881
|
-
return {
|
|
2882
|
-
kind: "sealed_available_client_presignature_v1",
|
|
2883
|
-
recordId: row.record_id,
|
|
2884
|
-
poolIdentity: row.pool_identity,
|
|
2885
|
-
durableMaterialRef: row.durable_material_ref,
|
|
2886
|
-
presignatureId: row.presignature_id,
|
|
2887
|
-
groupPublicKey33B64u: row.group_public_key33_b64u,
|
|
2888
|
-
bigR33B64u: row.big_r33_b64u,
|
|
2889
|
-
createdAtMs: row.created_at_ms,
|
|
2890
|
-
expiresAtMs: row.expires_at_ms,
|
|
2891
|
-
sealingKeyId: row.sealed.sealing_key_id
|
|
2892
|
-
};
|
|
2893
|
-
}
|
|
2894
|
-
async function encryptPresignatureBytes(input) {
|
|
2895
|
-
const iv12 = crypto.getRandomValues(new Uint8Array(AES_GCM_IV_BYTES));
|
|
2896
|
-
const aad = additionalData(presignatureAadProjection(input.metadata));
|
|
2897
|
-
try {
|
|
2898
|
-
const ciphertext = new Uint8Array(await crypto.subtle.encrypt({
|
|
2899
|
-
name: "AES-GCM",
|
|
2900
|
-
iv: iv12,
|
|
2901
|
-
additionalData: aad
|
|
2902
|
-
}, input.key, input.plaintext97));
|
|
2903
|
-
try {
|
|
2904
|
-
const ciphertextB64u = base64UrlEncode(ciphertext);
|
|
2905
|
-
return {
|
|
2906
|
-
iv12B64u: parseEcdsaIv12B64u(base64UrlEncode(iv12)),
|
|
2907
|
-
ciphertextB64u: parseEcdsaCiphertextB64u(ciphertextB64u),
|
|
2908
|
-
ciphertextDigestB64u: parseEcdsaCiphertextDigest(base64UrlEncode(await sha256Bytes(ciphertext)))
|
|
2909
|
-
};
|
|
2910
|
-
} finally {
|
|
2911
|
-
ciphertext.fill(0);
|
|
2912
|
-
}
|
|
2913
|
-
} finally {
|
|
2914
|
-
iv12.fill(0);
|
|
2915
|
-
aad.fill(0);
|
|
2916
|
-
input.plaintext97.fill(0);
|
|
2917
|
-
}
|
|
2918
|
-
}
|
|
2919
|
-
async function decryptPresignatureBytes(input) {
|
|
2920
|
-
const iv12 = base64UrlDecode(input.sealed.iv12_b64u);
|
|
2921
|
-
const ciphertext = base64UrlDecode(input.sealed.ciphertext_b64u);
|
|
2922
|
-
const aad = additionalData(presignatureAadProjection(input.metadata));
|
|
2923
|
-
let plaintext = null;
|
|
2924
|
-
try {
|
|
2925
|
-
if (base64UrlEncode(await sha256Bytes(ciphertext)) !== input.sealed.ciphertext_digest_b64u) throw new Error("ECDSA durable presignature ciphertext digest mismatch");
|
|
2926
|
-
plaintext = new Uint8Array(await crypto.subtle.decrypt({
|
|
2927
|
-
name: "AES-GCM",
|
|
2928
|
-
iv: iv12,
|
|
2929
|
-
additionalData: aad
|
|
2930
|
-
}, input.key, ciphertext));
|
|
2931
|
-
if (plaintext.length !== 97) throw new Error("ECDSA durable presignature plaintext length is invalid");
|
|
2932
|
-
return plaintext.slice();
|
|
2933
|
-
} finally {
|
|
2934
|
-
iv12.fill(0);
|
|
2935
|
-
ciphertext.fill(0);
|
|
2936
|
-
aad.fill(0);
|
|
2937
|
-
plaintext?.fill(0);
|
|
2938
|
-
}
|
|
2939
|
-
}
|
|
2940
|
-
async function generateMaterialSealingKey() {
|
|
2941
|
-
return await crypto.subtle.generateKey({
|
|
2942
|
-
name: "AES-GCM",
|
|
2943
|
-
length: 256
|
|
2944
|
-
}, false, ["encrypt", "decrypt"]);
|
|
2945
|
-
}
|
|
2946
|
-
async function encryptStateBlob(input) {
|
|
2947
|
-
const plaintext = decodeCanonicalStateBlob(input.stateBlobB64u, "ECDSA state blob");
|
|
2948
|
-
const iv12 = crypto.getRandomValues(new Uint8Array(AES_GCM_IV_BYTES));
|
|
2949
|
-
const aad = additionalData(input.aadProjection);
|
|
2950
|
-
try {
|
|
2951
|
-
const ciphertext = new Uint8Array(await crypto.subtle.encrypt({
|
|
2952
|
-
name: "AES-GCM",
|
|
2953
|
-
iv: iv12,
|
|
2954
|
-
additionalData: aad
|
|
2955
|
-
}, input.key, plaintext));
|
|
2956
|
-
try {
|
|
2957
|
-
return {
|
|
2958
|
-
iv12B64u: parseEcdsaIv12B64u(base64UrlEncode(iv12)),
|
|
2959
|
-
ciphertextB64u: parseEcdsaCiphertextB64u(base64UrlEncode(ciphertext)),
|
|
2960
|
-
digestB64u: base64UrlEncode(await sha256Bytes(ciphertext))
|
|
2961
|
-
};
|
|
2962
|
-
} finally {
|
|
2963
|
-
ciphertext.fill(0);
|
|
2964
|
-
}
|
|
2965
|
-
} finally {
|
|
2966
|
-
plaintext.fill(0);
|
|
2967
|
-
aad.fill(0);
|
|
2968
|
-
}
|
|
2969
|
-
}
|
|
2970
|
-
async function ciphertextDigestB64u(ciphertextB64u) {
|
|
2971
|
-
const ciphertext = base64UrlDecode(ciphertextB64u);
|
|
2972
|
-
try {
|
|
2973
|
-
return base64UrlEncode(await sha256Bytes(ciphertext));
|
|
2974
|
-
} finally {
|
|
2975
|
-
ciphertext.fill(0);
|
|
2976
|
-
}
|
|
2977
|
-
}
|
|
2978
|
-
async function decryptStateBlob(input) {
|
|
2979
|
-
const iv12 = base64UrlDecode(input.iv12B64u);
|
|
2980
|
-
const ciphertext = base64UrlDecode(input.ciphertextB64u);
|
|
2981
|
-
const aad = additionalData(input.aadProjection);
|
|
2982
|
-
let plaintext = null;
|
|
2983
|
-
try {
|
|
2984
|
-
plaintext = new Uint8Array(await crypto.subtle.decrypt({
|
|
2985
|
-
name: "AES-GCM",
|
|
2986
|
-
iv: iv12,
|
|
2987
|
-
additionalData: aad
|
|
2988
|
-
}, input.key, ciphertext));
|
|
2989
|
-
if (plaintext.length === 0) throw new Error("decrypted ECDSA state blob must not be empty");
|
|
2990
|
-
return base64UrlEncode(plaintext);
|
|
2991
|
-
} finally {
|
|
2992
|
-
iv12.fill(0);
|
|
2993
|
-
ciphertext.fill(0);
|
|
2994
|
-
aad.fill(0);
|
|
2995
|
-
plaintext?.fill(0);
|
|
2996
|
-
}
|
|
2997
|
-
}
|
|
2998
|
-
function parseManifestIdentity(value) {
|
|
2999
|
-
const record = requireRecord$1(value, "ECDSA manifest identity");
|
|
3000
|
-
requireExactKeys$1(record, "ECDSA manifest identity", ["manifestId", "manifestRevision"]);
|
|
3001
|
-
return buildEcdsaManifestIdentity({
|
|
3002
|
-
manifestId: parseEcdsaCapabilityManifestId(record.manifestId),
|
|
3003
|
-
manifestRevision: parseEcdsaCapabilityManifestRevision(record.manifestRevision)
|
|
3004
|
-
});
|
|
3005
|
-
}
|
|
3006
|
-
function parseManifestExpectation(value) {
|
|
3007
|
-
const record = requireRecord$1(value, "ECDSA manifest expectation");
|
|
3008
|
-
switch (record.kind) {
|
|
3009
|
-
case "no_current_manifest":
|
|
3010
|
-
requireExactKeys$1(record, "ECDSA no-current manifest expectation", ["kind"]);
|
|
3011
|
-
return buildNoCurrentEcdsaManifestExpectation();
|
|
3012
|
-
case "exact_manifest":
|
|
3013
|
-
requireExactKeys$1(record, "ECDSA exact manifest expectation", [
|
|
3014
|
-
"kind",
|
|
3015
|
-
"manifestId",
|
|
3016
|
-
"manifestRevision"
|
|
3017
|
-
]);
|
|
3018
|
-
return buildExactEcdsaManifestExpectation(buildEcdsaManifestIdentity({
|
|
3019
|
-
manifestId: parseEcdsaCapabilityManifestId(record.manifestId),
|
|
3020
|
-
manifestRevision: parseEcdsaCapabilityManifestRevision(record.manifestRevision)
|
|
3021
|
-
}));
|
|
3022
|
-
default: throw new Error("ECDSA manifest expectation kind is invalid");
|
|
3023
|
-
}
|
|
3024
|
-
}
|
|
3025
|
-
function parseChainTarget$1(value) {
|
|
3026
|
-
const record = requireRecord$1(value, "ECDSA capability target");
|
|
3027
|
-
switch (record.kind) {
|
|
3028
|
-
case "evm":
|
|
3029
|
-
requireExactKeys$1(record, "ECDSA EVM capability target", [
|
|
3030
|
-
"kind",
|
|
3031
|
-
"namespace",
|
|
3032
|
-
"chainId",
|
|
3033
|
-
"networkSlug"
|
|
3034
|
-
]);
|
|
3035
|
-
return thresholdEcdsaChainTargetFromRequest({
|
|
3036
|
-
kind: record.kind,
|
|
3037
|
-
namespace: record.namespace,
|
|
3038
|
-
chainId: record.chainId,
|
|
3039
|
-
networkSlug: record.networkSlug
|
|
3040
|
-
});
|
|
3041
|
-
case "tempo":
|
|
3042
|
-
requireExactKeys$1(record, "ECDSA Tempo capability target", [
|
|
3043
|
-
"kind",
|
|
3044
|
-
"chainId",
|
|
3045
|
-
"networkSlug"
|
|
3046
|
-
]);
|
|
3047
|
-
return thresholdEcdsaChainTargetFromRequest({
|
|
3048
|
-
kind: record.kind,
|
|
3049
|
-
chainId: record.chainId,
|
|
3050
|
-
networkSlug: record.networkSlug
|
|
3051
|
-
});
|
|
3052
|
-
default: throw new Error("ECDSA capability target kind is invalid");
|
|
3053
|
-
}
|
|
2733
|
+
function parseChainTarget$1(value) {
|
|
2734
|
+
const record = requireRecord(value, "ECDSA capability target");
|
|
2735
|
+
switch (record.kind) {
|
|
2736
|
+
case "evm":
|
|
2737
|
+
requireExactKeys$1(record, "ECDSA EVM capability target", [
|
|
2738
|
+
"kind",
|
|
2739
|
+
"namespace",
|
|
2740
|
+
"chainId",
|
|
2741
|
+
"networkSlug"
|
|
2742
|
+
]);
|
|
2743
|
+
return thresholdEcdsaChainTargetFromRequest({
|
|
2744
|
+
kind: record.kind,
|
|
2745
|
+
namespace: record.namespace,
|
|
2746
|
+
chainId: record.chainId,
|
|
2747
|
+
networkSlug: record.networkSlug
|
|
2748
|
+
});
|
|
2749
|
+
case "tempo":
|
|
2750
|
+
requireExactKeys$1(record, "ECDSA Tempo capability target", [
|
|
2751
|
+
"kind",
|
|
2752
|
+
"chainId",
|
|
2753
|
+
"networkSlug"
|
|
2754
|
+
]);
|
|
2755
|
+
return thresholdEcdsaChainTargetFromRequest({
|
|
2756
|
+
kind: record.kind,
|
|
2757
|
+
chainId: record.chainId,
|
|
2758
|
+
networkSlug: record.networkSlug
|
|
2759
|
+
});
|
|
2760
|
+
default: throw new Error("ECDSA capability target kind is invalid");
|
|
2761
|
+
}
|
|
3054
2762
|
}
|
|
3055
2763
|
function parseCapabilityScope(value) {
|
|
3056
|
-
const record = requireRecord
|
|
2764
|
+
const record = requireRecord(value, "ECDSA capability scope");
|
|
3057
2765
|
requireExactKeys$1(record, "ECDSA capability scope", ["kind", "targetMemberships"]);
|
|
3058
2766
|
if (record.kind !== "evm_family") throw new Error("ECDSA capability scope kind is invalid");
|
|
3059
2767
|
const targetValues = requireArray(record.targetMemberships, "ECDSA capability target memberships");
|
|
@@ -3064,7 +2772,7 @@ function parseCapabilityScope(value) {
|
|
|
3064
2772
|
return buildEcdsaCapabilityScope({ targetMemberships: [first, ...rest] });
|
|
3065
2773
|
}
|
|
3066
2774
|
function parseRoleLocalBinding(value) {
|
|
3067
|
-
const record = requireRecord
|
|
2775
|
+
const record = requireRecord(value, "ECDSA role-local material binding");
|
|
3068
2776
|
requireExactKeys$1(record, "ECDSA role-local material binding", [
|
|
3069
2777
|
"kind",
|
|
3070
2778
|
"keyHandle",
|
|
@@ -3088,7 +2796,7 @@ function parseRoleLocalBinding(value) {
|
|
|
3088
2796
|
});
|
|
3089
2797
|
}
|
|
3090
2798
|
function parsePreparedSigner(value) {
|
|
3091
|
-
const record = requireRecord
|
|
2799
|
+
const record = requireRecord(value, "prepared ECDSA signer");
|
|
3092
2800
|
requireExactKeys$1(record, "prepared ECDSA signer", [
|
|
3093
2801
|
"kind",
|
|
3094
2802
|
"capability",
|
|
@@ -3115,7 +2823,7 @@ function parsePreparedSigner(value) {
|
|
|
3115
2823
|
});
|
|
3116
2824
|
}
|
|
3117
2825
|
function parseEncryptedPendingCandidate(value) {
|
|
3118
|
-
const record = requireRecord
|
|
2826
|
+
const record = requireRecord(value, "encrypted ECDSA pending candidate");
|
|
3119
2827
|
requireExactKeys$1(record, "encrypted ECDSA pending candidate", [
|
|
3120
2828
|
"kind",
|
|
3121
2829
|
"sealingKeyId",
|
|
@@ -3132,7 +2840,7 @@ function parseEncryptedPendingCandidate(value) {
|
|
|
3132
2840
|
});
|
|
3133
2841
|
}
|
|
3134
2842
|
function parseActivationBinding(value) {
|
|
3135
|
-
const record = requireRecord
|
|
2843
|
+
const record = requireRecord(value, "ECDSA activation binding");
|
|
3136
2844
|
requireExactKeys$1(record, "ECDSA activation binding", [
|
|
3137
2845
|
"kind",
|
|
3138
2846
|
"targetManifest",
|
|
@@ -3151,7 +2859,7 @@ function parseActivationBinding(value) {
|
|
|
3151
2859
|
});
|
|
3152
2860
|
}
|
|
3153
2861
|
function parsePreparedCandidate(value) {
|
|
3154
|
-
const record = requireRecord
|
|
2862
|
+
const record = requireRecord(value, "prepared ECDSA activation candidate");
|
|
3155
2863
|
requireExactKeys$1(record, "prepared ECDSA activation candidate", [
|
|
3156
2864
|
"kind",
|
|
3157
2865
|
"activationBinding",
|
|
@@ -3164,7 +2872,7 @@ function parsePreparedCandidate(value) {
|
|
|
3164
2872
|
});
|
|
3165
2873
|
}
|
|
3166
2874
|
function parseExpectedServerGeneration(value) {
|
|
3167
|
-
const record = requireRecord
|
|
2875
|
+
const record = requireRecord(value, "ECDSA server generation expectation");
|
|
3168
2876
|
switch (record.kind) {
|
|
3169
2877
|
case "no_current_generation":
|
|
3170
2878
|
requireExactKeys$1(record, "ECDSA no-current server generation expectation", ["kind"]);
|
|
@@ -3176,7 +2884,7 @@ function parseExpectedServerGeneration(value) {
|
|
|
3176
2884
|
}
|
|
3177
2885
|
}
|
|
3178
2886
|
function parsePreparedJournal(value) {
|
|
3179
|
-
const record = requireRecord
|
|
2887
|
+
const record = requireRecord(value, "prepared ECDSA activation journal");
|
|
3180
2888
|
requireExactKeys$1(record, "prepared ECDSA activation journal", [
|
|
3181
2889
|
"kind",
|
|
3182
2890
|
"journalId",
|
|
@@ -3186,7 +2894,7 @@ function parsePreparedJournal(value) {
|
|
|
3186
2894
|
"createdAt"
|
|
3187
2895
|
]);
|
|
3188
2896
|
if (record.kind !== "activation_prepared") throw new Error("prepared ECDSA activation journal kind is invalid");
|
|
3189
|
-
const command = requireRecord
|
|
2897
|
+
const command = requireRecord(record.activationCommand, "ECDSA activation command");
|
|
3190
2898
|
requireExactKeys$1(command, "ECDSA activation command", [
|
|
3191
2899
|
"kind",
|
|
3192
2900
|
"correlationId",
|
|
@@ -3236,34 +2944,18 @@ function preparedJournalValueFromCommitted(record) {
|
|
|
3236
2944
|
}
|
|
3237
2945
|
function preparedJournalProjection(journal) {
|
|
3238
2946
|
if (journal.kind === "activation_prepared") return journal;
|
|
3239
|
-
|
|
3240
|
-
|
|
3241
|
-
|
|
3242
|
-
|
|
3243
|
-
|
|
3244
|
-
|
|
3245
|
-
|
|
3246
|
-
|
|
3247
|
-
|
|
3248
|
-
canonicalRequest: journal.activationCommand.canonicalRequest,
|
|
3249
|
-
createdAt: journal.createdAt
|
|
3250
|
-
});
|
|
3251
|
-
case "exact_manifest":
|
|
3252
|
-
if (journal.activationCommand.expectedGeneration.kind !== "exact_generation") throw new Error("Replacement ECDSA activation requires an exact server generation");
|
|
3253
|
-
return buildPreparedEcdsaActivationJournal({
|
|
3254
|
-
journalId: journal.journalId,
|
|
3255
|
-
expectedManifest: journal.expectedManifest,
|
|
3256
|
-
expectedGeneration: journal.activationCommand.expectedGeneration,
|
|
3257
|
-
candidate: journal.candidate,
|
|
3258
|
-
requestDigest: journal.activationCommand.requestDigest,
|
|
3259
|
-
canonicalRequest: journal.activationCommand.canonicalRequest,
|
|
3260
|
-
createdAt: journal.createdAt
|
|
3261
|
-
});
|
|
3262
|
-
default: return assertNever$1(journal.expectedManifest);
|
|
3263
|
-
}
|
|
2947
|
+
return buildPreparedJournalForExpectations({
|
|
2948
|
+
journalId: journal.journalId,
|
|
2949
|
+
expectedManifest: journal.expectedManifest,
|
|
2950
|
+
expectedGeneration: journal.activationCommand.expectedGeneration,
|
|
2951
|
+
candidate: journal.candidate,
|
|
2952
|
+
requestDigest: journal.activationCommand.requestDigest,
|
|
2953
|
+
canonicalRequest: journal.activationCommand.canonicalRequest,
|
|
2954
|
+
createdAt: journal.createdAt
|
|
2955
|
+
});
|
|
3264
2956
|
}
|
|
3265
2957
|
function parseCommittedJournal(value) {
|
|
3266
|
-
const record = requireRecord
|
|
2958
|
+
const record = requireRecord(value, "server-committed ECDSA activation journal");
|
|
3267
2959
|
requireExactKeys$1(record, "server-committed ECDSA activation journal", [
|
|
3268
2960
|
"kind",
|
|
3269
2961
|
"journalId",
|
|
@@ -3275,16 +2967,25 @@ function parseCommittedJournal(value) {
|
|
|
3275
2967
|
]);
|
|
3276
2968
|
if (record.kind !== "server_activation_committed") throw new Error("server-committed ECDSA activation journal kind is invalid");
|
|
3277
2969
|
const preparedJournal = parsePreparedJournal(preparedJournalValueFromCommitted(record));
|
|
3278
|
-
const serverActivation =
|
|
3279
|
-
|
|
3280
|
-
|
|
3281
|
-
|
|
2970
|
+
const serverActivation = parseServerActivationRecord(record.serverActivation);
|
|
2971
|
+
const committed = buildServerCommittedEcdsaActivationJournal({
|
|
2972
|
+
preparedJournal,
|
|
2973
|
+
serverCommit: serverActivation.serverCommit
|
|
2974
|
+
});
|
|
2975
|
+
if (!serverActivationRecordMatches(committed.serverActivation, serverActivation.record)) throw new Error("ECDSA server activation commit fields are inconsistent");
|
|
2976
|
+
return committed;
|
|
2977
|
+
}
|
|
2978
|
+
function parseServerActivationRecord(value) {
|
|
2979
|
+
const record = requireRecord(value, "ECDSA server activation commit");
|
|
2980
|
+
requireExactKeys$1(record, "ECDSA server activation commit", [
|
|
2981
|
+
"kind",
|
|
2982
|
+
"correlationId",
|
|
3282
2983
|
"activationRequestDigest",
|
|
3283
2984
|
"serverGeneration",
|
|
3284
2985
|
"serverActivationReceipt"
|
|
3285
2986
|
]);
|
|
3286
|
-
if (
|
|
3287
|
-
const receipt = requireRecord
|
|
2987
|
+
if (record.kind !== "ecdsa_server_activation_commit") throw new Error("ECDSA server activation commit kind is invalid");
|
|
2988
|
+
const receipt = requireRecord(record.serverActivationReceipt, "ECDSA server activation receipt");
|
|
3288
2989
|
requireExactKeys$1(receipt, "ECDSA server activation receipt", [
|
|
3289
2990
|
"kind",
|
|
3290
2991
|
"lifecycleId",
|
|
@@ -3293,20 +2994,18 @@ function parseCommittedJournal(value) {
|
|
|
3293
2994
|
"protocolReceipt"
|
|
3294
2995
|
]);
|
|
3295
2996
|
if (receipt.kind !== "ecdsa_server_activation_receipt") throw new Error("ECDSA server activation receipt kind is invalid");
|
|
3296
|
-
|
|
3297
|
-
|
|
2997
|
+
return {
|
|
2998
|
+
record,
|
|
3298
2999
|
serverCommit: {
|
|
3299
|
-
correlationId: parseCorrelationId(
|
|
3300
|
-
activationRequestDigest: parseDigestB64u(
|
|
3301
|
-
serverGeneration: parseEcdsaServerGeneration(
|
|
3000
|
+
correlationId: parseCorrelationId(record.correlationId),
|
|
3001
|
+
activationRequestDigest: parseDigestB64u(record.activationRequestDigest),
|
|
3002
|
+
serverGeneration: parseEcdsaServerGeneration(record.serverGeneration),
|
|
3302
3003
|
protocolReceipt: receipt.protocolReceipt
|
|
3303
3004
|
}
|
|
3304
|
-
}
|
|
3305
|
-
if (!serverActivationRecordMatches(committed.serverActivation, serverActivation)) throw new Error("ECDSA server activation commit fields are inconsistent");
|
|
3306
|
-
return committed;
|
|
3005
|
+
};
|
|
3307
3006
|
}
|
|
3308
3007
|
function parseJournal(value) {
|
|
3309
|
-
const record = requireRecord
|
|
3008
|
+
const record = requireRecord(value, "ECDSA activation journal");
|
|
3310
3009
|
switch (record.kind) {
|
|
3311
3010
|
case "activation_prepared": return parsePreparedJournal(record);
|
|
3312
3011
|
case "server_activation_committed": return parseCommittedJournal(record);
|
|
@@ -3314,7 +3013,7 @@ function parseJournal(value) {
|
|
|
3314
3013
|
}
|
|
3315
3014
|
}
|
|
3316
3015
|
function parseRegisteredPublicFacts(value) {
|
|
3317
|
-
const record = requireRecord
|
|
3016
|
+
const record = requireRecord(value, "registered ECDSA public facts");
|
|
3318
3017
|
requireExactKeys$1(record, "registered ECDSA public facts", [
|
|
3319
3018
|
"kind",
|
|
3320
3019
|
"keyHandle",
|
|
@@ -3330,20 +3029,8 @@ function parseRegisteredPublicFacts(value) {
|
|
|
3330
3029
|
thresholdOwnerAddress: record.thresholdOwnerAddress
|
|
3331
3030
|
});
|
|
3332
3031
|
}
|
|
3333
|
-
function storedActiveProof(input) {
|
|
3334
|
-
return {
|
|
3335
|
-
activation_binding: input.activationBinding,
|
|
3336
|
-
server_activation: input.serverActivation,
|
|
3337
|
-
registered_public_facts: input.activeManifest.signer.registeredPublicFacts,
|
|
3338
|
-
role_local_public_facts: input.durableMaterial.roleLocalPublicFacts,
|
|
3339
|
-
router_ab_ecdsa_derivation_normal_signing: input.durableMaterial.routerAbEcdsaDerivationNormalSigning,
|
|
3340
|
-
runtime_policy_scope: input.durableMaterial.runtimePolicyScope,
|
|
3341
|
-
ciphertext_digest: input.durableMaterial.ciphertextDigest,
|
|
3342
|
-
committed_at: input.activeManifest.committedAt
|
|
3343
|
-
};
|
|
3344
|
-
}
|
|
3345
3032
|
function parseActiveProof(value) {
|
|
3346
|
-
const record = requireRecord
|
|
3033
|
+
const record = requireRecord(value, "active ECDSA manifest proof");
|
|
3347
3034
|
requireExactKeys$1(record, "active ECDSA manifest proof", [
|
|
3348
3035
|
"activation_binding",
|
|
3349
3036
|
"server_activation",
|
|
@@ -3355,34 +3042,12 @@ function parseActiveProof(value) {
|
|
|
3355
3042
|
"committed_at"
|
|
3356
3043
|
]);
|
|
3357
3044
|
const activationBinding = parseActivationBinding(record.activation_binding);
|
|
3358
|
-
const serverActivationRecord =
|
|
3359
|
-
requireExactKeys$1(serverActivationRecord, "ECDSA server activation commit", [
|
|
3360
|
-
"kind",
|
|
3361
|
-
"correlationId",
|
|
3362
|
-
"activationRequestDigest",
|
|
3363
|
-
"serverGeneration",
|
|
3364
|
-
"serverActivationReceipt"
|
|
3365
|
-
]);
|
|
3366
|
-
if (serverActivationRecord.kind !== "ecdsa_server_activation_commit") throw new Error("ECDSA server activation commit kind is invalid");
|
|
3367
|
-
const receipt = requireRecord$1(serverActivationRecord.serverActivationReceipt, "ECDSA server activation receipt");
|
|
3368
|
-
requireExactKeys$1(receipt, "ECDSA server activation receipt", [
|
|
3369
|
-
"kind",
|
|
3370
|
-
"lifecycleId",
|
|
3371
|
-
"activationDigest",
|
|
3372
|
-
"activatedAt",
|
|
3373
|
-
"protocolReceipt"
|
|
3374
|
-
]);
|
|
3375
|
-
if (receipt.kind !== "ecdsa_server_activation_receipt") throw new Error("ECDSA server activation receipt kind is invalid");
|
|
3045
|
+
const serverActivationRecord = parseServerActivationRecord(record.server_activation);
|
|
3376
3046
|
const serverActivation = buildEcdsaServerActivationCommit({
|
|
3377
3047
|
activationBinding,
|
|
3378
|
-
serverCommit:
|
|
3379
|
-
correlationId: parseCorrelationId(serverActivationRecord.correlationId),
|
|
3380
|
-
activationRequestDigest: parseDigestB64u(serverActivationRecord.activationRequestDigest),
|
|
3381
|
-
serverGeneration: parseEcdsaServerGeneration(serverActivationRecord.serverGeneration),
|
|
3382
|
-
protocolReceipt: receipt.protocolReceipt
|
|
3383
|
-
}
|
|
3048
|
+
serverCommit: serverActivationRecord.serverCommit
|
|
3384
3049
|
});
|
|
3385
|
-
if (!serverActivationRecordMatches(serverActivation, serverActivationRecord)) throw new Error("ECDSA server activation commit fields are inconsistent");
|
|
3050
|
+
if (!serverActivationRecordMatches(serverActivation, serverActivationRecord.record)) throw new Error("ECDSA server activation commit fields are inconsistent");
|
|
3386
3051
|
const durableMaterial = buildDurableEcdsaMaterialBinding({
|
|
3387
3052
|
activationBinding,
|
|
3388
3053
|
serverActivation,
|
|
@@ -3406,34 +3071,8 @@ function parseActiveProof(value) {
|
|
|
3406
3071
|
committedAt
|
|
3407
3072
|
};
|
|
3408
3073
|
}
|
|
3409
|
-
function manifestRowCommon(proof, manifestState) {
|
|
3410
|
-
const selector = selectorFromManifest(proof.activeManifest);
|
|
3411
|
-
return {
|
|
3412
|
-
record_version: MANIFEST_RECORD_VERSION,
|
|
3413
|
-
manifest_id: proof.activeManifest.identity.manifestId,
|
|
3414
|
-
manifest_revision: proof.activeManifest.identity.manifestRevision,
|
|
3415
|
-
capability_ref: selector.capability,
|
|
3416
|
-
wallet_id: selector.authority.walletId,
|
|
3417
|
-
authority_digest: selector.authority.authorityDigest,
|
|
3418
|
-
wallet_auth_method_id: selector.authority.walletAuthMethodId,
|
|
3419
|
-
manifest_state: manifestState
|
|
3420
|
-
};
|
|
3421
|
-
}
|
|
3422
|
-
function storedActiveManifestRow(proof) {
|
|
3423
|
-
return {
|
|
3424
|
-
...manifestRowCommon(proof, "active"),
|
|
3425
|
-
active_proof: storedActiveProof(proof)
|
|
3426
|
-
};
|
|
3427
|
-
}
|
|
3428
|
-
function storedReplacedManifestRow(previous, replacement) {
|
|
3429
|
-
return {
|
|
3430
|
-
...manifestRowCommon(previous, "replaced"),
|
|
3431
|
-
active_proof: storedActiveProof(previous),
|
|
3432
|
-
replacement_proof: storedActiveProof(replacement)
|
|
3433
|
-
};
|
|
3434
|
-
}
|
|
3435
3074
|
function parseManifestRow(value) {
|
|
3436
|
-
const record = requireRecord
|
|
3075
|
+
const record = requireRecord(value, "ECDSA capability manifest row");
|
|
3437
3076
|
const commonKeys = [
|
|
3438
3077
|
"record_version",
|
|
3439
3078
|
"manifest_id",
|
|
@@ -3480,22 +3119,18 @@ function parseManifestRow(value) {
|
|
|
3480
3119
|
}
|
|
3481
3120
|
}
|
|
3482
3121
|
function assertManifestRowCommon(record, manifest, selector) {
|
|
3483
|
-
if (record.record_version !==
|
|
3122
|
+
if (record.record_version !== "ecdsa_capability_manifest_v3" || parseEcdsaCapabilityManifestId(record.manifest_id) !== manifest.identity.manifestId || parseEcdsaCapabilityManifestRevision(record.manifest_revision) !== manifest.identity.manifestRevision || String(record.capability_ref) !== String(selector.capability) || String(record.wallet_id) !== String(selector.authority.walletId) || String(record.authority_digest) !== String(selector.authority.authorityDigest)) throw new Error("ECDSA capability manifest row identity is inconsistent");
|
|
3484
3123
|
}
|
|
3485
3124
|
function storedPointerRow(manifest) {
|
|
3486
|
-
const selector = selectorFromManifest(manifest);
|
|
3487
3125
|
return {
|
|
3488
3126
|
record_version: POINTER_RECORD_VERSION,
|
|
3489
|
-
|
|
3490
|
-
wallet_id: selector.authority.walletId,
|
|
3491
|
-
authority_digest: selector.authority.authorityDigest,
|
|
3492
|
-
wallet_auth_method_id: selector.authority.walletAuthMethodId,
|
|
3127
|
+
...selectorColumns(selectorFromManifest(manifest)),
|
|
3493
3128
|
manifest_id: manifest.identity.manifestId,
|
|
3494
3129
|
manifest_revision: manifest.identity.manifestRevision
|
|
3495
3130
|
};
|
|
3496
3131
|
}
|
|
3497
3132
|
function parsePointerRow(value) {
|
|
3498
|
-
const record = requireRecord
|
|
3133
|
+
const record = requireRecord(value, "current ECDSA capability pointer");
|
|
3499
3134
|
requireExactKeys$1(record, "current ECDSA capability pointer", [
|
|
3500
3135
|
"record_version",
|
|
3501
3136
|
"capability_ref",
|
|
@@ -3506,12 +3141,7 @@ function parsePointerRow(value) {
|
|
|
3506
3141
|
"manifest_revision"
|
|
3507
3142
|
]);
|
|
3508
3143
|
if (record.record_version !== POINTER_RECORD_VERSION) throw new Error("current ECDSA capability pointer version is invalid");
|
|
3509
|
-
const authority =
|
|
3510
|
-
kind: "wallet_auth_authority_ref",
|
|
3511
|
-
walletId: record.wallet_id,
|
|
3512
|
-
authorityDigest: record.authority_digest,
|
|
3513
|
-
walletAuthMethodId: record.wallet_auth_method_id
|
|
3514
|
-
});
|
|
3144
|
+
const authority = authorityFromColumns(record);
|
|
3515
3145
|
if (!authority) throw new Error("current ECDSA capability pointer authority is invalid");
|
|
3516
3146
|
return {
|
|
3517
3147
|
selector: {
|
|
@@ -3523,22 +3153,18 @@ function parsePointerRow(value) {
|
|
|
3523
3153
|
};
|
|
3524
3154
|
}
|
|
3525
3155
|
function storedMaterialRow(material, manifest) {
|
|
3526
|
-
const selector = selectorFromManifest(manifest);
|
|
3527
3156
|
return {
|
|
3528
3157
|
record_version: MATERIAL_RECORD_VERSION,
|
|
3529
3158
|
durable_material_ref: material.binding.durableMaterialRef,
|
|
3530
3159
|
binding_digest: material.binding.bindingDigest,
|
|
3531
|
-
|
|
3532
|
-
wallet_id: selector.authority.walletId,
|
|
3533
|
-
authority_digest: selector.authority.authorityDigest,
|
|
3534
|
-
wallet_auth_method_id: selector.authority.walletAuthMethodId,
|
|
3160
|
+
...selectorColumns(selectorFromManifest(manifest)),
|
|
3535
3161
|
sealing_key_id: material.sealingKeyId,
|
|
3536
3162
|
iv: material.iv12B64u,
|
|
3537
3163
|
ciphertext: material.ciphertextB64u
|
|
3538
3164
|
};
|
|
3539
3165
|
}
|
|
3540
3166
|
function parseMaterialLocator(value) {
|
|
3541
|
-
const record = requireRecord
|
|
3167
|
+
const record = requireRecord(value, "ECDSA role-local material row");
|
|
3542
3168
|
requireExactKeys$1(record, "ECDSA role-local material row", [
|
|
3543
3169
|
"record_version",
|
|
3544
3170
|
"durable_material_ref",
|
|
@@ -3552,12 +3178,7 @@ function parseMaterialLocator(value) {
|
|
|
3552
3178
|
"ciphertext"
|
|
3553
3179
|
]);
|
|
3554
3180
|
if (record.record_version !== MATERIAL_RECORD_VERSION) throw new Error("ECDSA role-local material row version is invalid");
|
|
3555
|
-
const authority =
|
|
3556
|
-
kind: "wallet_auth_authority_ref",
|
|
3557
|
-
walletId: record.wallet_id,
|
|
3558
|
-
authorityDigest: record.authority_digest,
|
|
3559
|
-
walletAuthMethodId: record.wallet_auth_method_id
|
|
3560
|
-
});
|
|
3181
|
+
const authority = authorityFromColumns(record);
|
|
3561
3182
|
if (!authority) throw new Error("ECDSA role-local material authority is invalid");
|
|
3562
3183
|
return {
|
|
3563
3184
|
durableMaterialRef: parseEcdsaRoleLocalDurableMaterialRef(record.durable_material_ref),
|
|
@@ -3569,7 +3190,7 @@ function parseMaterialLocator(value) {
|
|
|
3569
3190
|
};
|
|
3570
3191
|
}
|
|
3571
3192
|
function parseMaterialRow(value, activeProof) {
|
|
3572
|
-
const record = requireRecord
|
|
3193
|
+
const record = requireRecord(value, "ECDSA role-local material row");
|
|
3573
3194
|
const locator = parseMaterialLocator(record);
|
|
3574
3195
|
const material = buildValidatedEncryptedEcdsaReadyMaterial({
|
|
3575
3196
|
binding: activeProof.durableMaterial,
|
|
@@ -3584,19 +3205,15 @@ function materialMatchesManifest(material, manifest) {
|
|
|
3584
3205
|
return material.binding.durableMaterialRef === manifest.durableMaterial.durableMaterialRef && material.binding.bindingDigest === manifest.durableMaterial.bindingDigest && material.binding.lifecycleId === manifest.durableMaterial.lifecycleId && material.binding.ciphertextDigest === manifest.durableMaterial.ciphertextDigest && material.binding.activationDigest === manifest.durableMaterial.activationDigest && material.binding.activatedAt === manifest.durableMaterial.activatedAt && mpcMaterialActivationRefsEqual(material.binding.materialActivation, manifest.durableMaterial.materialActivation) && ecdsaRoleLocalMaterialBindingsMatch(material.binding.roleLocalBinding, manifest.durableMaterial.roleLocalBinding);
|
|
3585
3206
|
}
|
|
3586
3207
|
function storedJournalRow(journal) {
|
|
3587
|
-
const selector = selectorFromJournal(journal);
|
|
3588
3208
|
return {
|
|
3589
3209
|
record_version: JOURNAL_RECORD_VERSION,
|
|
3590
3210
|
journal_id: journal.journalId,
|
|
3591
|
-
|
|
3592
|
-
wallet_id: selector.authority.walletId,
|
|
3593
|
-
authority_digest: selector.authority.authorityDigest,
|
|
3594
|
-
wallet_auth_method_id: selector.authority.walletAuthMethodId,
|
|
3211
|
+
...selectorColumns(selectorFromJournal(journal)),
|
|
3595
3212
|
journal
|
|
3596
3213
|
};
|
|
3597
3214
|
}
|
|
3598
3215
|
function parseJournalRow(value) {
|
|
3599
|
-
const record = requireRecord
|
|
3216
|
+
const record = requireRecord(value, "ECDSA activation commit journal row");
|
|
3600
3217
|
requireExactKeys$1(record, "ECDSA activation commit journal row", [
|
|
3601
3218
|
"record_version",
|
|
3602
3219
|
"journal_id",
|
|
@@ -3628,7 +3245,7 @@ function storedSealingKeyRow(keyId, key) {
|
|
|
3628
3245
|
};
|
|
3629
3246
|
}
|
|
3630
3247
|
function parseSealingKeyRow(value) {
|
|
3631
|
-
const record = requireRecord
|
|
3248
|
+
const record = requireRecord(value, "ECDSA material sealing key row");
|
|
3632
3249
|
requireExactKeys$1(record, "ECDSA material sealing key row", [
|
|
3633
3250
|
"record_version",
|
|
3634
3251
|
"key_id",
|
|
@@ -3641,1531 +3258,1557 @@ function parseSealingKeyRow(value) {
|
|
|
3641
3258
|
key: record.key
|
|
3642
3259
|
};
|
|
3643
3260
|
}
|
|
3644
|
-
|
|
3645
|
-
|
|
3646
|
-
activationBinding: input.activationBinding,
|
|
3647
|
-
serverCommit: input.serverCommit
|
|
3648
|
-
});
|
|
3649
|
-
const sealingKeyId = parseEcdsaMaterialSealingKeyId(secureRandomId("ecdsa-material-sealing-key", 32, "ECDSA material sealing key identities"));
|
|
3650
|
-
const sealingKey = await generateMaterialSealingKey();
|
|
3651
|
-
const encrypted = await encryptStateBlob({
|
|
3652
|
-
key: sealingKey,
|
|
3653
|
-
stateBlobB64u: input.readyStateBlobB64u,
|
|
3654
|
-
aadProjection: importedReadyAadProjection({
|
|
3655
|
-
activationBinding: input.activationBinding,
|
|
3656
|
-
serverActivation
|
|
3657
|
-
})
|
|
3658
|
-
});
|
|
3659
|
-
const durableMaterial = buildDurableEcdsaMaterialBinding({
|
|
3660
|
-
activationBinding: input.activationBinding,
|
|
3661
|
-
serverActivation,
|
|
3662
|
-
routerAbEcdsaDerivationNormalSigning: input.routerAbEcdsaDerivationNormalSigning,
|
|
3663
|
-
roleLocalPublicFacts: input.roleLocalPublicFacts,
|
|
3664
|
-
ciphertextDigest: parseEcdsaCiphertextDigest(encrypted.digestB64u),
|
|
3665
|
-
runtimePolicyScope: input.runtimePolicyScope
|
|
3666
|
-
});
|
|
3667
|
-
const readyMaterial = buildValidatedEncryptedEcdsaReadyMaterial({
|
|
3668
|
-
binding: durableMaterial,
|
|
3669
|
-
sealingKeyId,
|
|
3670
|
-
iv12B64u: encrypted.iv12B64u,
|
|
3671
|
-
ciphertextB64u: encrypted.ciphertextB64u
|
|
3672
|
-
});
|
|
3673
|
-
const activeManifest = buildActiveEcdsaCapabilityManifest({
|
|
3674
|
-
activationBinding: input.activationBinding,
|
|
3675
|
-
serverActivation,
|
|
3676
|
-
registeredPublicFacts: input.registeredPublicFacts,
|
|
3677
|
-
durableMaterial,
|
|
3678
|
-
committedAt: input.committedAt
|
|
3679
|
-
});
|
|
3680
|
-
return {
|
|
3681
|
-
activationBinding: input.activationBinding,
|
|
3682
|
-
serverActivation,
|
|
3683
|
-
sealingKey,
|
|
3684
|
-
readyMaterial,
|
|
3685
|
-
activeManifest,
|
|
3686
|
-
roleLocalMaterialRef: {
|
|
3687
|
-
kind: "ecdsa_role_local_persisted_material_ref_v1",
|
|
3688
|
-
durableMaterialRef: readyMaterial.binding.durableMaterialRef,
|
|
3689
|
-
bindingDigest: readyMaterial.binding.bindingDigest,
|
|
3690
|
-
materialActivation: readyMaterial.binding.materialActivation
|
|
3691
|
-
}
|
|
3692
|
-
};
|
|
3261
|
+
function assertNever$1(value) {
|
|
3262
|
+
throw new Error(`Unexpected ECDSA persistence branch: ${String(value)}`);
|
|
3693
3263
|
}
|
|
3694
|
-
|
|
3695
|
-
|
|
3696
|
-
|
|
3697
|
-
|
|
3698
|
-
|
|
3699
|
-
|
|
3700
|
-
const
|
|
3701
|
-
|
|
3702
|
-
serverActivation: prepared.serverActivation,
|
|
3703
|
-
durableMaterial: prepared.readyMaterial.binding,
|
|
3704
|
-
activeManifest: prepared.activeManifest,
|
|
3705
|
-
committedAt: prepared.activeManifest.committedAt
|
|
3706
|
-
};
|
|
3707
|
-
await context.store(SEALING_KEY_STORE).add(storedSealingKeyRow(prepared.readyMaterial.sealingKeyId, prepared.sealingKey));
|
|
3708
|
-
await context.store(MATERIAL_STORE).add(storedMaterialRow(prepared.readyMaterial, prepared.activeManifest));
|
|
3709
|
-
await context.store(MANIFEST_STORE).add(storedActiveManifestRow(activeProof));
|
|
3710
|
-
await pointerStore.put(storedPointerRow(prepared.activeManifest));
|
|
3264
|
+
//#endregion
|
|
3265
|
+
//#region src/core/indexedDB/seamsWalletDB/ecdsaClientPresignatures.ts
|
|
3266
|
+
const CLIENT_PRESIGNATURE_AAD_DOMAIN = "seams/ecdsa-client-presignature/v1";
|
|
3267
|
+
const MAX_EXPIRED_CLIENT_PRESIGNATURE_DELETIONS_PER_TRANSACTION = 32;
|
|
3268
|
+
function activeMaterialMatchesPresignature(material, poolIdentity, materialRef) {
|
|
3269
|
+
const scope = material.binding.routerAbEcdsaDerivationNormalSigning.scope;
|
|
3270
|
+
const materialActivation = routerAbMpcMaterialActivationRefToWire(material.binding.materialActivation);
|
|
3271
|
+
return scope.wallet_id === poolIdentity.walletId && base64UrlEncode(routerAbEcdsaDerivationNormalSigningScopeCanonicalBytesV1(scope)) === poolIdentity.signingScopeB64u && base64UrlEncode(canonicalRouterAbMpcMaterialActivationRefBytes(materialActivation)) === poolIdentity.materialActivationB64u && scope.signing_worker.key_epoch === poolIdentity.keyEpoch && scope.activation_epoch === poolIdentity.activationEpoch && materialActivation.activation_id === poolIdentity.materialActivationId && materialActivation.capability === poolIdentity.capability && materialActivation.key_binding === poolIdentity.keyBinding && materialActivation.material_owner === poolIdentity.walletId && material.binding.durableMaterialRef === materialRef.durableMaterialRef && material.binding.bindingDigest === materialRef.bindingDigest && mpcMaterialActivationRefsEqual(material.binding.materialActivation, materialRef.materialActivation);
|
|
3711
3272
|
}
|
|
3712
|
-
function
|
|
3713
|
-
|
|
3714
|
-
activationBinding: input.committedJournal.candidate.activationBinding,
|
|
3715
|
-
serverActivation: input.committedJournal.serverActivation,
|
|
3716
|
-
durableMaterial: input.readyMaterial.binding,
|
|
3717
|
-
activeManifest: input.activeManifest,
|
|
3718
|
-
committedAt: input.activeManifest.committedAt
|
|
3719
|
-
}));
|
|
3720
|
-
if (!ecdsaActiveCapabilityManifestsMatch(parsed.activeManifest, input.activeManifest) || !ecdsaDurableMaterialBindingsMatch(parsed.durableMaterial, input.readyMaterial.binding)) throw new Error("ECDSA finalization input does not describe one exact active manifest");
|
|
3721
|
-
return parsed;
|
|
3273
|
+
function materialRefMatchesPoolIdentity(materialRef, poolIdentity) {
|
|
3274
|
+
return materialRef.materialActivation.activationId === poolIdentity.materialActivationId && materialRef.materialActivation.capability === poolIdentity.capability && materialRef.materialActivation.keyBinding === poolIdentity.keyBinding && materialRef.materialActivation.materialOwner === poolIdentity.walletId;
|
|
3722
3275
|
}
|
|
3723
|
-
function
|
|
3724
|
-
|
|
3725
|
-
|
|
3726
|
-
if (pointerRaw !== void 0) throw new FinalizationControlError("exact_record_conflict", "initial ECDSA activation found an existing current pointer");
|
|
3727
|
-
return null;
|
|
3728
|
-
case "exact_manifest": {
|
|
3729
|
-
if (pointerRaw === void 0) throw new FinalizationControlError("exact_record_conflict", "replacement ECDSA activation is missing its expected current pointer");
|
|
3730
|
-
let pointer;
|
|
3731
|
-
try {
|
|
3732
|
-
pointer = parsePointerRow(pointerRaw);
|
|
3733
|
-
} catch (error) {
|
|
3734
|
-
throw new FinalizationControlError("corrupt", errorMessage(error));
|
|
3735
|
-
}
|
|
3736
|
-
if (!selectorsMatch(pointer.selector, selector) || pointer.manifestId !== expected.manifestId || pointer.manifestRevision !== expected.manifestRevision) throw new FinalizationControlError("exact_record_conflict", "replacement ECDSA activation pointer CAS did not match");
|
|
3737
|
-
return pointer;
|
|
3738
|
-
}
|
|
3739
|
-
}
|
|
3740
|
-
return assertNever$1(expected);
|
|
3276
|
+
function parseDurableClientPresignatureRecordId(value) {
|
|
3277
|
+
if (typeof value !== "string" || !/^ecdsa-client-presignature-[A-Za-z0-9_-]+$/.test(value)) throw new Error("ECDSA durable presignature record id is invalid");
|
|
3278
|
+
return value;
|
|
3741
3279
|
}
|
|
3742
|
-
function
|
|
3743
|
-
|
|
3280
|
+
function parsePresignatureTimestamp(value, label) {
|
|
3281
|
+
if (typeof value !== "number" || !Number.isSafeInteger(value) || value <= 0) throw new Error(`${label} is invalid`);
|
|
3282
|
+
return value;
|
|
3744
3283
|
}
|
|
3745
|
-
function
|
|
3746
|
-
|
|
3284
|
+
function rawRecordId(value) {
|
|
3285
|
+
if (!value || typeof value !== "object" || !("record_id" in value)) return null;
|
|
3286
|
+
const recordId = value.record_id;
|
|
3287
|
+
return typeof recordId === "string" ? recordId : null;
|
|
3747
3288
|
}
|
|
3748
|
-
function
|
|
3749
|
-
|
|
3289
|
+
function supportsStrictIndexedDbDurability() {
|
|
3290
|
+
return typeof IDBTransaction !== "undefined" && "durability" in IDBTransaction.prototype;
|
|
3750
3291
|
}
|
|
3751
|
-
async function
|
|
3752
|
-
|
|
3753
|
-
|
|
3754
|
-
|
|
3755
|
-
|
|
3756
|
-
|
|
3757
|
-
persisted = parseJournalRow(raw);
|
|
3758
|
-
} catch {
|
|
3759
|
-
return { kind: "corrupt" };
|
|
3760
|
-
}
|
|
3761
|
-
if (persisted.journal.journalId !== preparedJournal.journalId) return { kind: "corrupt" };
|
|
3762
|
-
switch (persisted.journal.kind) {
|
|
3763
|
-
case "server_activation_committed": return { kind: "server_activation_committed" };
|
|
3764
|
-
case "activation_prepared":
|
|
3765
|
-
if (!ecdsaActivationCommitJournalsMatch(persisted.journal, preparedJournal)) return { kind: "exact_record_conflict" };
|
|
3766
|
-
await context.store(SEALING_KEY_STORE).delete(persisted.journal.candidate.encryptedPending.sealingKeyId);
|
|
3767
|
-
await journalStore.delete(persisted.journal.journalId);
|
|
3768
|
-
return { kind: "cancelled" };
|
|
3292
|
+
async function deleteCursorRows(cursor, limit = Number.POSITIVE_INFINITY) {
|
|
3293
|
+
let deletedCount = 0;
|
|
3294
|
+
while (cursor && deletedCount < limit) {
|
|
3295
|
+
await cursor.delete();
|
|
3296
|
+
deletedCount += 1;
|
|
3297
|
+
cursor = await cursor.continue();
|
|
3769
3298
|
}
|
|
3770
|
-
return
|
|
3771
|
-
}
|
|
3772
|
-
async function readPointerRowsForWallet(context, walletId) {
|
|
3773
|
-
return await context.store(POINTER_STORE).index(SEAMS_WALLET_INDEXES.walletId).getAll(walletId);
|
|
3299
|
+
return deletedCount;
|
|
3774
3300
|
}
|
|
3775
|
-
async function
|
|
3776
|
-
return await context.store(
|
|
3301
|
+
async function deleteExpiredClientPresignatureRows(context, walletId, nowMs) {
|
|
3302
|
+
return await deleteCursorRows(await context.store(PRESIGNATURE_STORE).index(SEAMS_WALLET_INDEXES.walletExpiresAt).openCursor(IDBKeyRange.bound([walletId, 0], [walletId, nowMs])), MAX_EXPIRED_CLIENT_PRESIGNATURE_DELETIONS_PER_TRANSACTION);
|
|
3777
3303
|
}
|
|
3778
|
-
|
|
3779
|
-
|
|
3780
|
-
|
|
3304
|
+
async function readAvailableClientPresignatureRows(context, poolIdentity, nowMs) {
|
|
3305
|
+
await deleteExpiredClientPresignatureRows(context, poolIdentity.walletId, nowMs);
|
|
3306
|
+
const store = context.store(PRESIGNATURE_STORE);
|
|
3307
|
+
const rows = await store.index(SEAMS_WALLET_INDEXES.poolIdentityKey).getAll(ecdsaClientPresignPoolKey(poolIdentity));
|
|
3308
|
+
const available = [];
|
|
3309
|
+
for (const raw of rows) try {
|
|
3310
|
+
const row = parseSealedAvailableClientPresignatureRow(raw);
|
|
3311
|
+
if (row.expires_at_ms <= nowMs) await store.delete(row.record_id);
|
|
3312
|
+
else available.push(row);
|
|
3313
|
+
} catch {
|
|
3314
|
+
const malformedRecordId = rawRecordId(raw);
|
|
3315
|
+
if (malformedRecordId) await store.delete(malformedRecordId);
|
|
3781
3316
|
}
|
|
3782
|
-
|
|
3783
|
-
|
|
3784
|
-
|
|
3785
|
-
|
|
3786
|
-
|
|
3787
|
-
|
|
3788
|
-
|
|
3789
|
-
|
|
3790
|
-
|
|
3791
|
-
|
|
3792
|
-
|
|
3793
|
-
|
|
3794
|
-
|
|
3795
|
-
|
|
3796
|
-
|
|
3797
|
-
|
|
3798
|
-
|
|
3799
|
-
|
|
3800
|
-
|
|
3801
|
-
|
|
3802
|
-
|
|
3803
|
-
|
|
3804
|
-
|
|
3805
|
-
|
|
3317
|
+
return available;
|
|
3318
|
+
}
|
|
3319
|
+
function presignatureAadProjection(metadata) {
|
|
3320
|
+
return {
|
|
3321
|
+
domain: CLIENT_PRESIGNATURE_AAD_DOMAIN,
|
|
3322
|
+
version: 1,
|
|
3323
|
+
pool_identity: metadata.poolIdentity,
|
|
3324
|
+
durable_material_ref: metadata.durableMaterialRef,
|
|
3325
|
+
presignature_id: metadata.presignatureId,
|
|
3326
|
+
group_public_key33_b64u: metadata.groupPublicKey33B64u,
|
|
3327
|
+
big_r33_b64u: metadata.bigR33B64u,
|
|
3328
|
+
created_at_ms: metadata.createdAtMs,
|
|
3329
|
+
expires_at_ms: metadata.expiresAtMs,
|
|
3330
|
+
sealing_key_id: metadata.sealingKeyId
|
|
3331
|
+
};
|
|
3332
|
+
}
|
|
3333
|
+
function parseSealedAvailableClientPresignatureRow(value) {
|
|
3334
|
+
const record = requireRecord(value, "ECDSA durable presignature row");
|
|
3335
|
+
requireExactKeys$1(record, "ECDSA durable presignature row", [
|
|
3336
|
+
"kind",
|
|
3337
|
+
"record_id",
|
|
3338
|
+
"pool_identity",
|
|
3339
|
+
"pool_identity_key",
|
|
3340
|
+
"wallet_id",
|
|
3341
|
+
"material_activation_id",
|
|
3342
|
+
"durable_material_ref",
|
|
3343
|
+
"presignature_id",
|
|
3344
|
+
"group_public_key33_b64u",
|
|
3345
|
+
"big_r33_b64u",
|
|
3346
|
+
"created_at_ms",
|
|
3347
|
+
"expires_at_ms",
|
|
3348
|
+
"sealed"
|
|
3349
|
+
]);
|
|
3350
|
+
if (record.kind !== "sealed_available_client_presignature_v1") throw new Error("ECDSA durable presignature row kind is invalid");
|
|
3351
|
+
const poolIdentityRecord = requireRecord(record.pool_identity, "ECDSA durable presignature pool identity");
|
|
3352
|
+
requireExactKeys$1(poolIdentityRecord, "ECDSA durable presignature pool identity", [
|
|
3353
|
+
"activationEpoch",
|
|
3354
|
+
"capability",
|
|
3355
|
+
"keyBinding",
|
|
3356
|
+
"keyEpoch",
|
|
3357
|
+
"materialActivationB64u",
|
|
3358
|
+
"materialActivationId",
|
|
3359
|
+
"pairRole",
|
|
3360
|
+
"protocolId",
|
|
3361
|
+
"relayerUrl",
|
|
3362
|
+
"signingScopeB64u",
|
|
3363
|
+
"walletId"
|
|
3364
|
+
]);
|
|
3365
|
+
const poolIdentity = parseEcdsaClientPresignPoolIdentity(poolIdentityRecord);
|
|
3366
|
+
const recordId = parseDurableClientPresignatureRecordId(record.record_id);
|
|
3367
|
+
const poolIdentityKeyValue = String(record.pool_identity_key ?? "");
|
|
3368
|
+
if (poolIdentityKeyValue !== ecdsaClientPresignPoolKey(poolIdentity)) throw new Error("ECDSA durable presignature pool identity index is inconsistent");
|
|
3369
|
+
const walletId = String(record.wallet_id ?? "").trim();
|
|
3370
|
+
const materialActivationId = String(record.material_activation_id ?? "").trim();
|
|
3371
|
+
if (!walletId || walletId !== poolIdentity.walletId) throw new Error("ECDSA durable presignature wallet binding is inconsistent");
|
|
3372
|
+
if (!materialActivationId || materialActivationId !== poolIdentity.materialActivationId) throw new Error("ECDSA durable presignature activation binding is inconsistent");
|
|
3373
|
+
const durableMaterialRef = parseEcdsaRoleLocalPersistedMaterialRef(record.durable_material_ref);
|
|
3374
|
+
if (!materialRefMatchesPoolIdentity(durableMaterialRef, poolIdentity)) throw new Error("ECDSA durable presignature material binding is inconsistent");
|
|
3375
|
+
const presignatureId = String(record.presignature_id ?? "").trim();
|
|
3376
|
+
if (!presignatureId) throw new Error("ECDSA durable presignature id is invalid");
|
|
3377
|
+
const groupPublicKey33B64u = parseEcdsaClientVerifyingPublicKey33B64u(record.group_public_key33_b64u);
|
|
3378
|
+
const bigR33B64u = parseEcdsaClientVerifyingPublicKey33B64u(record.big_r33_b64u);
|
|
3379
|
+
const createdAtMs = parsePresignatureTimestamp(record.created_at_ms, "created_at_ms");
|
|
3380
|
+
const expiresAtMs = parsePresignatureTimestamp(record.expires_at_ms, "expires_at_ms");
|
|
3381
|
+
if (createdAtMs > Date.now() + 3e5) throw new Error("ECDSA durable presignature creation timestamp is in the future");
|
|
3382
|
+
if (expiresAtMs <= createdAtMs) throw new Error("ECDSA durable presignature expiry must follow creation");
|
|
3383
|
+
if (expiresAtMs - createdAtMs > 7776e6) throw new Error("ECDSA durable presignature lifetime exceeds the maximum");
|
|
3384
|
+
const sealed = requireRecord(record.sealed, "ECDSA durable presignature sealed payload");
|
|
3385
|
+
requireExactKeys$1(sealed, "ECDSA durable presignature sealed payload", [
|
|
3386
|
+
"kind",
|
|
3387
|
+
"sealing_key_id",
|
|
3388
|
+
"iv12_b64u",
|
|
3389
|
+
"ciphertext_b64u",
|
|
3390
|
+
"ciphertext_digest_b64u"
|
|
3391
|
+
]);
|
|
3392
|
+
if (sealed.kind !== "ecdsa_activation_aes_gcm_v1") throw new Error("ECDSA durable presignature sealing kind is invalid");
|
|
3393
|
+
return {
|
|
3394
|
+
kind: "sealed_available_client_presignature_v1",
|
|
3395
|
+
record_id: recordId,
|
|
3396
|
+
pool_identity: poolIdentity,
|
|
3397
|
+
pool_identity_key: poolIdentityKeyValue,
|
|
3398
|
+
wallet_id: walletId,
|
|
3399
|
+
material_activation_id: materialActivationId,
|
|
3400
|
+
durable_material_ref: durableMaterialRef,
|
|
3401
|
+
presignature_id: presignatureId,
|
|
3402
|
+
group_public_key33_b64u: groupPublicKey33B64u,
|
|
3403
|
+
big_r33_b64u: bigR33B64u,
|
|
3404
|
+
created_at_ms: createdAtMs,
|
|
3405
|
+
expires_at_ms: expiresAtMs,
|
|
3406
|
+
sealed: {
|
|
3407
|
+
kind: "ecdsa_activation_aes_gcm_v1",
|
|
3408
|
+
sealing_key_id: parseEcdsaMaterialSealingKeyId(sealed.sealing_key_id),
|
|
3409
|
+
iv12_b64u: parseEcdsaIv12B64u(sealed.iv12_b64u),
|
|
3410
|
+
ciphertext_b64u: parseEcdsaCiphertextB64u(sealed.ciphertext_b64u),
|
|
3411
|
+
ciphertext_digest_b64u: parseEcdsaCiphertextDigest(sealed.ciphertext_digest_b64u)
|
|
3806
3412
|
}
|
|
3807
|
-
|
|
3808
|
-
|
|
3809
|
-
|
|
3810
|
-
|
|
3811
|
-
|
|
3812
|
-
|
|
3813
|
-
|
|
3814
|
-
|
|
3815
|
-
|
|
3816
|
-
|
|
3817
|
-
|
|
3818
|
-
|
|
3819
|
-
|
|
3820
|
-
|
|
3821
|
-
|
|
3413
|
+
};
|
|
3414
|
+
}
|
|
3415
|
+
function metadataFromPresignatureRow(row) {
|
|
3416
|
+
return {
|
|
3417
|
+
kind: "sealed_available_client_presignature_v1",
|
|
3418
|
+
recordId: row.record_id,
|
|
3419
|
+
poolIdentity: row.pool_identity,
|
|
3420
|
+
durableMaterialRef: row.durable_material_ref,
|
|
3421
|
+
presignatureId: row.presignature_id,
|
|
3422
|
+
groupPublicKey33B64u: row.group_public_key33_b64u,
|
|
3423
|
+
bigR33B64u: row.big_r33_b64u,
|
|
3424
|
+
createdAtMs: row.created_at_ms,
|
|
3425
|
+
expiresAtMs: row.expires_at_ms,
|
|
3426
|
+
sealingKeyId: row.sealed.sealing_key_id
|
|
3427
|
+
};
|
|
3428
|
+
}
|
|
3429
|
+
async function encryptPresignatureBytes(input) {
|
|
3430
|
+
const iv12 = crypto.getRandomValues(new Uint8Array(12));
|
|
3431
|
+
const aad = additionalData(presignatureAadProjection(input.metadata));
|
|
3432
|
+
try {
|
|
3433
|
+
const ciphertext = new Uint8Array(await crypto.subtle.encrypt({
|
|
3434
|
+
name: "AES-GCM",
|
|
3435
|
+
iv: iv12,
|
|
3436
|
+
additionalData: aad
|
|
3437
|
+
}, input.key, input.plaintext97));
|
|
3438
|
+
try {
|
|
3439
|
+
const ciphertextB64u = base64UrlEncode(ciphertext);
|
|
3440
|
+
return {
|
|
3441
|
+
iv12B64u: parseEcdsaIv12B64u(base64UrlEncode(iv12)),
|
|
3442
|
+
ciphertextB64u: parseEcdsaCiphertextB64u(ciphertextB64u),
|
|
3443
|
+
ciphertextDigestB64u: parseEcdsaCiphertextDigest(base64UrlEncode(await sha256Bytes(ciphertext)))
|
|
3444
|
+
};
|
|
3445
|
+
} finally {
|
|
3446
|
+
ciphertext.fill(0);
|
|
3447
|
+
}
|
|
3448
|
+
} finally {
|
|
3449
|
+
iv12.fill(0);
|
|
3450
|
+
aad.fill(0);
|
|
3451
|
+
input.plaintext97.fill(0);
|
|
3452
|
+
}
|
|
3453
|
+
}
|
|
3454
|
+
async function decryptPresignatureBytes(input) {
|
|
3455
|
+
const iv12 = base64UrlDecode(input.sealed.iv12_b64u);
|
|
3456
|
+
const ciphertext = base64UrlDecode(input.sealed.ciphertext_b64u);
|
|
3457
|
+
const aad = additionalData(presignatureAadProjection(input.metadata));
|
|
3458
|
+
let plaintext = null;
|
|
3459
|
+
try {
|
|
3460
|
+
if (base64UrlEncode(await sha256Bytes(ciphertext)) !== input.sealed.ciphertext_digest_b64u) throw new Error("ECDSA durable presignature ciphertext digest mismatch");
|
|
3461
|
+
plaintext = new Uint8Array(await crypto.subtle.decrypt({
|
|
3462
|
+
name: "AES-GCM",
|
|
3463
|
+
iv: iv12,
|
|
3464
|
+
additionalData: aad
|
|
3465
|
+
}, input.key, ciphertext));
|
|
3466
|
+
if (plaintext.length !== 97) throw new Error("ECDSA durable presignature plaintext length is invalid");
|
|
3467
|
+
return plaintext.slice();
|
|
3468
|
+
} finally {
|
|
3469
|
+
iv12.fill(0);
|
|
3470
|
+
ciphertext.fill(0);
|
|
3471
|
+
aad.fill(0);
|
|
3472
|
+
plaintext?.fill(0);
|
|
3473
|
+
}
|
|
3474
|
+
}
|
|
3475
|
+
async function retireClientPresignaturesForActivationInTransaction(context, walletId, materialActivationId) {
|
|
3476
|
+
const store = context.store(PRESIGNATURE_STORE);
|
|
3477
|
+
const rows = await store.index(SEAMS_WALLET_INDEXES.walletMaterialActivationId).getAll([walletId, materialActivationId]);
|
|
3478
|
+
for (const raw of rows) {
|
|
3479
|
+
const recordId = rawRecordId(raw);
|
|
3480
|
+
if (recordId) await store.delete(recordId);
|
|
3481
|
+
}
|
|
3482
|
+
}
|
|
3483
|
+
//#endregion
|
|
3484
|
+
//#region src/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestLookups.ts
|
|
3485
|
+
async function persistenceDigest(category, selector, detail) {
|
|
3486
|
+
return parseDigestB64u(base64UrlEncode(await sha256BytesUtf8(alphabetizeStringify({
|
|
3487
|
+
category,
|
|
3488
|
+
...selectorColumns(selector),
|
|
3489
|
+
detail
|
|
3490
|
+
}))));
|
|
3491
|
+
}
|
|
3492
|
+
async function journalConstraintConflict(selector, error) {
|
|
3493
|
+
return {
|
|
3494
|
+
kind: "exact_record_conflict",
|
|
3495
|
+
conflictDigest: await persistenceDigest("journal_constraint_conflict", selector, ecdsaManifestErrorMessage(error))
|
|
3496
|
+
};
|
|
3497
|
+
}
|
|
3498
|
+
function retryCorrelation() {
|
|
3499
|
+
return parseCorrelationId(secureRandomId("ecdsa-persistence-retry", 16, "ECDSA persistence retry correlations"));
|
|
3500
|
+
}
|
|
3501
|
+
function ecdsaManifestErrorMessage(error) {
|
|
3502
|
+
return error instanceof Error ? error.message : String(error);
|
|
3503
|
+
}
|
|
3504
|
+
function isConstraintError(error) {
|
|
3505
|
+
return error instanceof DOMException && error.name === "ConstraintError";
|
|
3506
|
+
}
|
|
3507
|
+
async function readPointerRowsForWallet(context, walletId) {
|
|
3508
|
+
return await context.store(POINTER_STORE).index(SEAMS_WALLET_INDEXES.walletId).getAll(walletId);
|
|
3509
|
+
}
|
|
3510
|
+
async function readActivationJournalRows(context) {
|
|
3511
|
+
return await context.store(JOURNAL_STORE).getAll();
|
|
3512
|
+
}
|
|
3513
|
+
async function readActiveManifestRows(context, selector) {
|
|
3514
|
+
return await context.store(MANIFEST_STORE).index(SEAMS_WALLET_INDEXES.capabilityWalletAuthorityState).getAll([...selectorKey(selector), "active"]);
|
|
3515
|
+
}
|
|
3516
|
+
function activeLookupUsesMaterialActivation(lookup, materialActivation) {
|
|
3517
|
+
return mpcMaterialActivationRefsEqual(lookup.manifest.activation.materialActivation, materialActivation) && mpcMaterialActivationRefsEqual(lookup.manifest.durableMaterial.materialActivation, materialActivation) && mpcMaterialActivationRefsEqual(lookup.material.binding.materialActivation, materialActivation);
|
|
3518
|
+
}
|
|
3519
|
+
function materialRefOpenFailure(failure) {
|
|
3520
|
+
switch (failure.kind) {
|
|
3521
|
+
case "missing":
|
|
3522
|
+
case "retired": return { kind: "missing" };
|
|
3523
|
+
case "exact_binding_mismatch": return { kind: "binding_mismatch" };
|
|
3524
|
+
case "exact_record_conflict":
|
|
3525
|
+
case "corrupt": return { kind: "corrupt" };
|
|
3526
|
+
case "persistence_unavailable": return { kind: "persistence_unavailable" };
|
|
3527
|
+
}
|
|
3528
|
+
return assertNever$1(failure);
|
|
3529
|
+
}
|
|
3530
|
+
async function lookupInTransaction(context, selector) {
|
|
3531
|
+
const pointerRaw = await context.store(POINTER_STORE).get(selectorKey(selector));
|
|
3532
|
+
if (pointerRaw === void 0) return await lookupWithoutPointer(context, selector);
|
|
3533
|
+
let pointer;
|
|
3534
|
+
try {
|
|
3535
|
+
pointer = parsePointerRow(pointerRaw);
|
|
3536
|
+
} catch (error) {
|
|
3537
|
+
return {
|
|
3538
|
+
kind: "corrupt",
|
|
3539
|
+
detail: ecdsaManifestErrorMessage(error)
|
|
3822
3540
|
};
|
|
3823
|
-
|
|
3541
|
+
}
|
|
3542
|
+
if (!selectorsMatch(pointer.selector, selector)) return {
|
|
3543
|
+
kind: "exact_binding_mismatch",
|
|
3544
|
+
detail: "current ECDSA pointer belongs to a different exact authority"
|
|
3545
|
+
};
|
|
3546
|
+
const manifestRaw = await context.store(MANIFEST_STORE).get(pointer.manifestId);
|
|
3547
|
+
if (manifestRaw === void 0) return {
|
|
3548
|
+
kind: "exact_record_conflict",
|
|
3549
|
+
detail: "current ECDSA pointer references a missing manifest"
|
|
3550
|
+
};
|
|
3551
|
+
let parsedManifest;
|
|
3552
|
+
try {
|
|
3553
|
+
parsedManifest = parseManifestRow(manifestRaw);
|
|
3554
|
+
} catch (error) {
|
|
3555
|
+
return {
|
|
3556
|
+
kind: "corrupt",
|
|
3557
|
+
detail: ecdsaManifestErrorMessage(error)
|
|
3558
|
+
};
|
|
3559
|
+
}
|
|
3560
|
+
if (!selectorsMatch(parsedManifest.selector, selector)) return {
|
|
3561
|
+
kind: "exact_binding_mismatch",
|
|
3562
|
+
detail: "current ECDSA manifest belongs to a different exact authority"
|
|
3563
|
+
};
|
|
3564
|
+
if (parsedManifest.manifest.identity.manifestId !== pointer.manifestId || parsedManifest.manifest.identity.manifestRevision !== pointer.manifestRevision) return {
|
|
3565
|
+
kind: "exact_record_conflict",
|
|
3566
|
+
detail: "current ECDSA pointer does not match its manifest identity"
|
|
3567
|
+
};
|
|
3568
|
+
if (parsedManifest.state === "replaced") return {
|
|
3569
|
+
kind: "retired",
|
|
3570
|
+
manifest: parsedManifest.manifest
|
|
3571
|
+
};
|
|
3572
|
+
const activeRows = await readActiveManifestRows(context, selector);
|
|
3573
|
+
if (activeRows.length !== 1) return {
|
|
3574
|
+
kind: "exact_record_conflict",
|
|
3575
|
+
detail: "exact ECDSA authority has multiple current manifests"
|
|
3576
|
+
};
|
|
3577
|
+
let indexedActive;
|
|
3578
|
+
try {
|
|
3579
|
+
indexedActive = parseManifestRow(activeRows[0]);
|
|
3580
|
+
} catch (error) {
|
|
3581
|
+
return {
|
|
3582
|
+
kind: "corrupt",
|
|
3583
|
+
detail: ecdsaManifestErrorMessage(error)
|
|
3584
|
+
};
|
|
3585
|
+
}
|
|
3586
|
+
if (indexedActive.state !== "active" || indexedActive.manifest.identity.manifestId !== pointer.manifestId) return {
|
|
3587
|
+
kind: "exact_record_conflict",
|
|
3588
|
+
detail: "exact ECDSA current index disagrees with its pointer"
|
|
3589
|
+
};
|
|
3590
|
+
const materialRaw = await context.store(MATERIAL_STORE).get(parsedManifest.manifest.durableMaterial.durableMaterialRef);
|
|
3591
|
+
if (materialRaw === void 0) return {
|
|
3592
|
+
kind: "missing",
|
|
3593
|
+
subject: "material",
|
|
3594
|
+
detail: "active ECDSA manifest is missing its ready material"
|
|
3595
|
+
};
|
|
3596
|
+
let material;
|
|
3597
|
+
try {
|
|
3598
|
+
material = parseMaterialRow(materialRaw, parsedManifest.activeProof);
|
|
3599
|
+
} catch (error) {
|
|
3600
|
+
return {
|
|
3601
|
+
kind: "corrupt",
|
|
3602
|
+
detail: ecdsaManifestErrorMessage(error)
|
|
3603
|
+
};
|
|
3604
|
+
}
|
|
3605
|
+
if (!materialMatchesManifest(material, parsedManifest.manifest)) return {
|
|
3606
|
+
kind: "exact_binding_mismatch",
|
|
3607
|
+
detail: "active ECDSA material does not match its manifest"
|
|
3608
|
+
};
|
|
3609
|
+
const sealingKeyRaw = await context.store(SEALING_KEY_STORE).get(material.sealingKeyId);
|
|
3610
|
+
if (sealingKeyRaw === void 0) return {
|
|
3611
|
+
kind: "missing",
|
|
3612
|
+
subject: "material",
|
|
3613
|
+
detail: "active ECDSA material is missing its sealing key"
|
|
3614
|
+
};
|
|
3615
|
+
try {
|
|
3616
|
+
if (parseSealingKeyRow(sealingKeyRaw).keyId !== material.sealingKeyId) return {
|
|
3617
|
+
kind: "exact_binding_mismatch",
|
|
3618
|
+
detail: "active ECDSA material sealing key id does not match"
|
|
3619
|
+
};
|
|
3620
|
+
} catch (error) {
|
|
3621
|
+
return {
|
|
3622
|
+
kind: "corrupt",
|
|
3623
|
+
detail: ecdsaManifestErrorMessage(error)
|
|
3624
|
+
};
|
|
3625
|
+
}
|
|
3626
|
+
if (await ciphertextDigestB64u(material.ciphertextB64u) !== material.binding.ciphertextDigest) return {
|
|
3627
|
+
kind: "corrupt",
|
|
3628
|
+
detail: "active ECDSA material ciphertext digest is invalid"
|
|
3629
|
+
};
|
|
3630
|
+
return {
|
|
3631
|
+
kind: "active",
|
|
3632
|
+
manifest: parsedManifest.manifest,
|
|
3633
|
+
material
|
|
3634
|
+
};
|
|
3635
|
+
}
|
|
3636
|
+
async function lookupWithoutPointer(context, selector) {
|
|
3637
|
+
const rows = await context.store(MANIFEST_STORE).index(SEAMS_WALLET_INDEXES.capabilityWallet).getAll([String(selector.capability), String(selector.authority.walletId)]);
|
|
3638
|
+
if (rows.length === 0) return {
|
|
3639
|
+
kind: "missing",
|
|
3640
|
+
subject: "capability",
|
|
3641
|
+
detail: "no ECDSA capability manifest exists"
|
|
3642
|
+
};
|
|
3643
|
+
let hasDifferentAuthority = false;
|
|
3644
|
+
let hasExactAuthority = false;
|
|
3645
|
+
let hasSameMethodUnderAnotherDigest = false;
|
|
3646
|
+
for (const raw of rows) {
|
|
3647
|
+
let parsed;
|
|
3824
3648
|
try {
|
|
3825
|
-
|
|
3826
|
-
|
|
3827
|
-
|
|
3828
|
-
|
|
3829
|
-
|
|
3830
|
-
|
|
3831
|
-
|
|
3832
|
-
|
|
3649
|
+
parsed = parseManifestRow(raw);
|
|
3650
|
+
} catch (error) {
|
|
3651
|
+
return {
|
|
3652
|
+
kind: "corrupt",
|
|
3653
|
+
detail: ecdsaManifestErrorMessage(error)
|
|
3654
|
+
};
|
|
3655
|
+
}
|
|
3656
|
+
if (selectorsMatch(parsed.selector, selector)) {
|
|
3657
|
+
hasExactAuthority = true;
|
|
3658
|
+
continue;
|
|
3659
|
+
}
|
|
3660
|
+
hasDifferentAuthority = true;
|
|
3661
|
+
if (parsed.selector.authority.walletAuthMethodId === selector.authority.walletAuthMethodId) hasSameMethodUnderAnotherDigest = true;
|
|
3662
|
+
}
|
|
3663
|
+
if (hasExactAuthority) return {
|
|
3664
|
+
kind: "exact_record_conflict",
|
|
3665
|
+
detail: "exact ECDSA authority has manifest history without a current pointer"
|
|
3666
|
+
};
|
|
3667
|
+
if (hasSameMethodUnderAnotherDigest) return {
|
|
3668
|
+
kind: "exact_binding_mismatch",
|
|
3669
|
+
detail: "ECDSA capability exists for this method under a different authority digest"
|
|
3670
|
+
};
|
|
3671
|
+
if (hasDifferentAuthority) return {
|
|
3672
|
+
kind: "missing",
|
|
3673
|
+
subject: "capability",
|
|
3674
|
+
detail: "no ECDSA capability manifest exists for this exact authority"
|
|
3675
|
+
};
|
|
3676
|
+
return {
|
|
3677
|
+
kind: "missing",
|
|
3678
|
+
subject: "capability",
|
|
3679
|
+
detail: "no exact ECDSA capability manifest exists"
|
|
3680
|
+
};
|
|
3681
|
+
}
|
|
3682
|
+
//#endregion
|
|
3683
|
+
//#region src/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestStore.ts
|
|
3684
|
+
const MATERIAL_AAD_VERSION = 1;
|
|
3685
|
+
function activeManifestMatchesWalletCustodyImport(manifest, input, serverActivation) {
|
|
3686
|
+
const binding = input.activationBinding;
|
|
3687
|
+
return walletAuthAuthorityRefsMatch(manifest.signer.authority, binding.signer.authority) && ecdsaCapabilityScopesMatch(manifest.signer.scope, binding.signer.scope) && manifest.signer.walletId === binding.signer.walletId && manifest.signer.capability === binding.signer.capability && manifest.signer.materialOwner === binding.signer.materialOwner && manifest.signer.signingRootId === binding.signer.signingRootId && manifest.signer.signingRootVersion === binding.signer.signingRootVersion && ecdsaRegisteredPublicFactsMatch(manifest.signer.registeredPublicFacts, input.registeredPublicFacts) && ecdsaServerActivationCommitsMatch(manifest.activation.serverActivation, serverActivation) && mpcMaterialActivationRefsEqual(manifest.activation.materialActivation, routerAbMpcMaterialActivationRefFromWire(serverActivation.serverActivationReceipt.protocolReceipt.ecdsa_activation.material_activation)) && manifest.durableMaterial.bindingDigest === binding.bindingDigest && manifest.durableMaterial.durableMaterialRef === binding.durableMaterialRef && ecdsaRoleLocalMaterialBindingsMatch(manifest.durableMaterial.roleLocalBinding, binding.roleLocalBinding) && ecdsaRoleLocalPublicFactsMatch(manifest.durableMaterial.roleLocalPublicFacts, input.roleLocalPublicFacts) && sameRouterAbEcdsaDerivationNormalSigningStateV1(manifest.durableMaterial.routerAbEcdsaDerivationNormalSigning, input.routerAbEcdsaDerivationNormalSigning) && runtimePolicyScopesMatch(manifest.durableMaterial.runtimePolicyScope, normalizeRuntimePolicyScope(input.runtimePolicyScope));
|
|
3688
|
+
}
|
|
3689
|
+
var FinalizationControlError = class extends Error {
|
|
3690
|
+
constructor(kind, message) {
|
|
3691
|
+
super(message);
|
|
3692
|
+
this.name = "FinalizationControlError";
|
|
3693
|
+
this.kind = kind;
|
|
3694
|
+
}
|
|
3695
|
+
};
|
|
3696
|
+
function activationBindingAadProjection(binding) {
|
|
3697
|
+
return {
|
|
3698
|
+
target_manifest: binding.targetManifest,
|
|
3699
|
+
signer: {
|
|
3700
|
+
capability: binding.signer.capability,
|
|
3701
|
+
signer_id: binding.signer.signerId,
|
|
3702
|
+
wallet_id: binding.signer.walletId,
|
|
3703
|
+
authority: binding.signer.authority,
|
|
3704
|
+
scope: binding.signer.scope,
|
|
3705
|
+
material_owner: binding.signer.materialOwner,
|
|
3706
|
+
signing_root_id: binding.signer.signingRootId,
|
|
3707
|
+
signing_root_version: binding.signer.signingRootVersion
|
|
3708
|
+
},
|
|
3709
|
+
role_local_binding: binding.roleLocalBinding,
|
|
3710
|
+
binding_digest: binding.bindingDigest,
|
|
3711
|
+
durable_material_ref: binding.durableMaterialRef
|
|
3712
|
+
};
|
|
3713
|
+
}
|
|
3714
|
+
function pendingAadProjection(input) {
|
|
3715
|
+
if ("activationBinding" in input) return {
|
|
3716
|
+
version: MATERIAL_AAD_VERSION,
|
|
3717
|
+
stage: "activation_prepared",
|
|
3718
|
+
journal_id: input.journalId,
|
|
3719
|
+
expected_manifest: input.expectedManifest,
|
|
3720
|
+
activation_command: {
|
|
3721
|
+
kind: "ecdsa_server_activation_command",
|
|
3722
|
+
correlationId: input.journalId,
|
|
3723
|
+
expectedGeneration: input.expectedGeneration,
|
|
3724
|
+
requestDigest: input.requestDigest,
|
|
3725
|
+
canonicalRequest: input.canonicalRequest
|
|
3726
|
+
},
|
|
3727
|
+
activation_binding: activationBindingAadProjection(input.activationBinding),
|
|
3728
|
+
created_at: input.createdAt
|
|
3729
|
+
};
|
|
3730
|
+
return {
|
|
3731
|
+
version: MATERIAL_AAD_VERSION,
|
|
3732
|
+
stage: "activation_prepared",
|
|
3733
|
+
journal_id: input.journalId,
|
|
3734
|
+
expected_manifest: input.expectedManifest,
|
|
3735
|
+
activation_command: input.activationCommand,
|
|
3736
|
+
activation_binding: activationBindingAadProjection(input.candidate.activationBinding),
|
|
3737
|
+
created_at: input.createdAt
|
|
3738
|
+
};
|
|
3739
|
+
}
|
|
3740
|
+
function readyAadProjection(input) {
|
|
3741
|
+
if (input.kind === "server_activation_committed") return readyAadProjectionFor(input.candidate.activationBinding, input.serverActivation);
|
|
3742
|
+
return readyAadProjectionFor({
|
|
3743
|
+
targetManifest: input.identity,
|
|
3744
|
+
signer: input.signer,
|
|
3745
|
+
roleLocalBinding: input.durableMaterial.roleLocalBinding,
|
|
3746
|
+
bindingDigest: input.durableMaterial.bindingDigest,
|
|
3747
|
+
durableMaterialRef: input.durableMaterial.durableMaterialRef
|
|
3748
|
+
}, input.activation.serverActivation);
|
|
3749
|
+
}
|
|
3750
|
+
function readyAadProjectionFor(activationBinding, serverActivation) {
|
|
3751
|
+
return {
|
|
3752
|
+
version: MATERIAL_AAD_VERSION,
|
|
3753
|
+
stage: "activation_ready",
|
|
3754
|
+
activation_binding: activationBindingAadProjection(activationBinding),
|
|
3755
|
+
server_activation: serverActivation
|
|
3756
|
+
};
|
|
3757
|
+
}
|
|
3758
|
+
function storedActiveProof(input) {
|
|
3759
|
+
return {
|
|
3760
|
+
activation_binding: input.activationBinding,
|
|
3761
|
+
server_activation: input.serverActivation,
|
|
3762
|
+
registered_public_facts: input.activeManifest.signer.registeredPublicFacts,
|
|
3763
|
+
role_local_public_facts: input.durableMaterial.roleLocalPublicFacts,
|
|
3764
|
+
router_ab_ecdsa_derivation_normal_signing: input.durableMaterial.routerAbEcdsaDerivationNormalSigning,
|
|
3765
|
+
runtime_policy_scope: input.durableMaterial.runtimePolicyScope,
|
|
3766
|
+
ciphertext_digest: input.durableMaterial.ciphertextDigest,
|
|
3767
|
+
committed_at: input.activeManifest.committedAt
|
|
3768
|
+
};
|
|
3769
|
+
}
|
|
3770
|
+
function manifestRowCommon(proof, manifestState) {
|
|
3771
|
+
return {
|
|
3772
|
+
record_version: MANIFEST_RECORD_VERSION,
|
|
3773
|
+
manifest_id: proof.activeManifest.identity.manifestId,
|
|
3774
|
+
manifest_revision: proof.activeManifest.identity.manifestRevision,
|
|
3775
|
+
...selectorColumns(selectorFromManifest(proof.activeManifest)),
|
|
3776
|
+
manifest_state: manifestState
|
|
3777
|
+
};
|
|
3778
|
+
}
|
|
3779
|
+
function storedActiveManifestRow(proof) {
|
|
3780
|
+
return {
|
|
3781
|
+
...manifestRowCommon(proof, "active"),
|
|
3782
|
+
active_proof: storedActiveProof(proof)
|
|
3783
|
+
};
|
|
3784
|
+
}
|
|
3785
|
+
function storedReplacedManifestRow(previous, replacement) {
|
|
3786
|
+
return {
|
|
3787
|
+
...manifestRowCommon(previous, "replaced"),
|
|
3788
|
+
active_proof: storedActiveProof(previous),
|
|
3789
|
+
replacement_proof: storedActiveProof(replacement)
|
|
3790
|
+
};
|
|
3791
|
+
}
|
|
3792
|
+
async function prepareImportedWalletCustodyEcdsaContinuity(input) {
|
|
3793
|
+
const serverActivation = buildEcdsaServerActivationCommit({
|
|
3794
|
+
activationBinding: input.activationBinding,
|
|
3795
|
+
serverCommit: input.serverCommit
|
|
3796
|
+
});
|
|
3797
|
+
const sealingKeyId = parseEcdsaMaterialSealingKeyId(secureRandomId("ecdsa-material-sealing-key", 32, "ECDSA material sealing key identities"));
|
|
3798
|
+
const sealingKey = await generateMaterialSealingKey();
|
|
3799
|
+
const encrypted = await encryptStateBlob({
|
|
3800
|
+
key: sealingKey,
|
|
3801
|
+
stateBlobB64u: input.readyStateBlobB64u,
|
|
3802
|
+
aadProjection: readyAadProjectionFor(input.activationBinding, serverActivation)
|
|
3803
|
+
});
|
|
3804
|
+
const durableMaterial = buildDurableEcdsaMaterialBinding({
|
|
3805
|
+
activationBinding: input.activationBinding,
|
|
3806
|
+
serverActivation,
|
|
3807
|
+
routerAbEcdsaDerivationNormalSigning: input.routerAbEcdsaDerivationNormalSigning,
|
|
3808
|
+
roleLocalPublicFacts: input.roleLocalPublicFacts,
|
|
3809
|
+
ciphertextDigest: parseEcdsaCiphertextDigest(encrypted.digestB64u),
|
|
3810
|
+
runtimePolicyScope: input.runtimePolicyScope
|
|
3811
|
+
});
|
|
3812
|
+
const readyMaterial = buildValidatedEncryptedEcdsaReadyMaterial({
|
|
3813
|
+
binding: durableMaterial,
|
|
3814
|
+
sealingKeyId,
|
|
3815
|
+
iv12B64u: encrypted.iv12B64u,
|
|
3816
|
+
ciphertextB64u: encrypted.ciphertextB64u
|
|
3817
|
+
});
|
|
3818
|
+
const activeManifest = buildActiveEcdsaCapabilityManifest({
|
|
3819
|
+
activationBinding: input.activationBinding,
|
|
3820
|
+
serverActivation,
|
|
3821
|
+
registeredPublicFacts: input.registeredPublicFacts,
|
|
3822
|
+
durableMaterial,
|
|
3823
|
+
committedAt: input.committedAt
|
|
3824
|
+
});
|
|
3825
|
+
return {
|
|
3826
|
+
activationBinding: input.activationBinding,
|
|
3827
|
+
serverActivation,
|
|
3828
|
+
sealingKey,
|
|
3829
|
+
readyMaterial,
|
|
3830
|
+
activeManifest,
|
|
3831
|
+
roleLocalMaterialRef: {
|
|
3832
|
+
kind: "ecdsa_role_local_persisted_material_ref_v1",
|
|
3833
|
+
durableMaterialRef: readyMaterial.binding.durableMaterialRef,
|
|
3834
|
+
bindingDigest: readyMaterial.binding.bindingDigest,
|
|
3835
|
+
materialActivation: readyMaterial.binding.materialActivation
|
|
3833
3836
|
}
|
|
3834
|
-
|
|
3835
|
-
|
|
3836
|
-
|
|
3837
|
-
|
|
3838
|
-
|
|
3839
|
-
|
|
3840
|
-
|
|
3841
|
-
|
|
3842
|
-
|
|
3843
|
-
|
|
3844
|
-
|
|
3845
|
-
|
|
3846
|
-
|
|
3847
|
-
|
|
3848
|
-
|
|
3849
|
-
|
|
3850
|
-
|
|
3851
|
-
|
|
3852
|
-
|
|
3837
|
+
};
|
|
3838
|
+
}
|
|
3839
|
+
async function persistPreparedImportedWalletCustodyEcdsaContinuityInTransaction(context, prepared) {
|
|
3840
|
+
const selector = selectorFromManifest(prepared.activeManifest);
|
|
3841
|
+
const pointerStore = context.store(POINTER_STORE);
|
|
3842
|
+
const existingPointer = await pointerStore.get(selectorKey(selector));
|
|
3843
|
+
const activeRows = await readActiveManifestRows(context, selector);
|
|
3844
|
+
if (existingPointer !== void 0 || activeRows.length !== 0) throw new FinalizationControlError("exact_record_conflict", "ECDSA custody import found an existing active manifest");
|
|
3845
|
+
const activeProof = {
|
|
3846
|
+
activationBinding: prepared.activationBinding,
|
|
3847
|
+
serverActivation: prepared.serverActivation,
|
|
3848
|
+
durableMaterial: prepared.readyMaterial.binding,
|
|
3849
|
+
activeManifest: prepared.activeManifest,
|
|
3850
|
+
committedAt: prepared.activeManifest.committedAt
|
|
3851
|
+
};
|
|
3852
|
+
await context.store(SEALING_KEY_STORE).add(storedSealingKeyRow(prepared.readyMaterial.sealingKeyId, prepared.sealingKey));
|
|
3853
|
+
await context.store(MATERIAL_STORE).add(storedMaterialRow(prepared.readyMaterial, prepared.activeManifest));
|
|
3854
|
+
await context.store(MANIFEST_STORE).add(storedActiveManifestRow(activeProof));
|
|
3855
|
+
await pointerStore.put(storedPointerRow(prepared.activeManifest));
|
|
3856
|
+
}
|
|
3857
|
+
function assertActiveProofInput(input) {
|
|
3858
|
+
const parsed = parseActiveProof(storedActiveProof({
|
|
3859
|
+
activationBinding: input.committedJournal.candidate.activationBinding,
|
|
3860
|
+
serverActivation: input.committedJournal.serverActivation,
|
|
3861
|
+
durableMaterial: input.readyMaterial.binding,
|
|
3862
|
+
activeManifest: input.activeManifest,
|
|
3863
|
+
committedAt: input.activeManifest.committedAt
|
|
3864
|
+
}));
|
|
3865
|
+
if (!ecdsaActiveCapabilityManifestsMatch(parsed.activeManifest, input.activeManifest) || !ecdsaDurableMaterialBindingsMatch(parsed.durableMaterial, input.readyMaterial.binding)) throw new Error("ECDSA finalization input does not describe one exact active manifest");
|
|
3866
|
+
return parsed;
|
|
3867
|
+
}
|
|
3868
|
+
function assertExpectedPointer(expected, pointerRaw, selector) {
|
|
3869
|
+
switch (expected.kind) {
|
|
3870
|
+
case "no_current_manifest":
|
|
3871
|
+
if (pointerRaw !== void 0) throw new FinalizationControlError("exact_record_conflict", "initial ECDSA activation found an existing current pointer");
|
|
3872
|
+
return null;
|
|
3873
|
+
case "exact_manifest": {
|
|
3874
|
+
if (pointerRaw === void 0) throw new FinalizationControlError("exact_record_conflict", "replacement ECDSA activation is missing its expected current pointer");
|
|
3875
|
+
let pointer;
|
|
3876
|
+
try {
|
|
3877
|
+
pointer = parsePointerRow(pointerRaw);
|
|
3878
|
+
} catch (error) {
|
|
3879
|
+
throw new FinalizationControlError("corrupt", ecdsaManifestErrorMessage(error));
|
|
3853
3880
|
}
|
|
3854
|
-
|
|
3855
|
-
|
|
3856
|
-
const result = await this.manager.runTransaction([PRESIGNATURE_STORE, MATERIAL_STORE], "readwrite", async (context) => {
|
|
3857
|
-
const nowMs = Date.now();
|
|
3858
|
-
await deleteExpiredClientPresignatureRows(context, poolIdentity.walletId, nowMs);
|
|
3859
|
-
const store = context.store(PRESIGNATURE_STORE);
|
|
3860
|
-
const rows = await store.index(SEAMS_WALLET_INDEXES.poolIdentityKey).getAll(row.pool_identity_key);
|
|
3861
|
-
let availableCount = 0;
|
|
3862
|
-
for (const raw of rows) try {
|
|
3863
|
-
const existing = parseSealedAvailableClientPresignatureRow(raw);
|
|
3864
|
-
if (existing.expires_at_ms <= nowMs) await store.delete(existing.record_id);
|
|
3865
|
-
else availableCount += 1;
|
|
3866
|
-
} catch {
|
|
3867
|
-
const malformedRecordId = rawRecordId(raw);
|
|
3868
|
-
if (malformedRecordId) await store.delete(malformedRecordId);
|
|
3869
|
-
}
|
|
3870
|
-
if (availableCount >= 5) return { kind: "capacity_full" };
|
|
3871
|
-
const materialRow = await context.store(MATERIAL_STORE).get(durableMaterialRef.durableMaterialRef);
|
|
3872
|
-
if (materialRow === void 0) return { kind: "persistence_unavailable" };
|
|
3873
|
-
try {
|
|
3874
|
-
const locator = parseMaterialLocator(materialRow);
|
|
3875
|
-
const materialRecord = requireRecord$1(materialRow, "ECDSA role-local material row");
|
|
3876
|
-
if (locator.durableMaterialRef !== durableMaterialRef.durableMaterialRef || locator.bindingDigest !== durableMaterialRef.bindingDigest || locator.selector.capability !== lookup.manifest.signer.capability || String(locator.selector.authority.walletId) !== poolIdentity.walletId || parseEcdsaMaterialSealingKeyId(materialRecord.sealing_key_id) !== lookup.material.sealingKeyId) return { kind: "persistence_unavailable" };
|
|
3877
|
-
} catch {
|
|
3878
|
-
return { kind: "persistence_unavailable" };
|
|
3879
|
-
}
|
|
3880
|
-
await store.put(row);
|
|
3881
|
-
return { kind: "stored" };
|
|
3882
|
-
}, { durability: "strict" });
|
|
3883
|
-
return result.kind === "stored" ? {
|
|
3884
|
-
kind: "stored",
|
|
3885
|
-
metadata
|
|
3886
|
-
} : result;
|
|
3887
|
-
} catch {
|
|
3888
|
-
return { kind: "persistence_ambiguous" };
|
|
3889
|
-
}
|
|
3890
|
-
}
|
|
3891
|
-
async listAvailableClientPresignatures(poolIdentityInput) {
|
|
3892
|
-
if (!supportsStrictIndexedDbDurability()) return [];
|
|
3893
|
-
const poolIdentity = parseEcdsaClientPresignPoolIdentity(poolIdentityInput);
|
|
3894
|
-
const nowMs = Date.now();
|
|
3895
|
-
try {
|
|
3896
|
-
return await this.manager.runTransaction([PRESIGNATURE_STORE], "readwrite", async (context) => {
|
|
3897
|
-
await deleteExpiredClientPresignatureRows(context, poolIdentity.walletId, nowMs);
|
|
3898
|
-
const store = context.store(PRESIGNATURE_STORE);
|
|
3899
|
-
const rows = await store.index(SEAMS_WALLET_INDEXES.poolIdentityKey).getAll(ecdsaClientPresignPoolKey(poolIdentity));
|
|
3900
|
-
const metadata = [];
|
|
3901
|
-
for (const raw of rows) try {
|
|
3902
|
-
const row = parseSealedAvailableClientPresignatureRow(raw);
|
|
3903
|
-
if (row.expires_at_ms <= nowMs) {
|
|
3904
|
-
await store.delete(row.record_id);
|
|
3905
|
-
continue;
|
|
3906
|
-
}
|
|
3907
|
-
metadata.push(metadataFromPresignatureRow(row));
|
|
3908
|
-
} catch {
|
|
3909
|
-
const malformedRecordId = rawRecordId(raw);
|
|
3910
|
-
if (malformedRecordId) await store.delete(malformedRecordId);
|
|
3911
|
-
}
|
|
3912
|
-
return metadata.sort((left, right) => left.createdAtMs - right.createdAtMs);
|
|
3913
|
-
});
|
|
3914
|
-
} catch {
|
|
3915
|
-
return [];
|
|
3916
|
-
}
|
|
3917
|
-
}
|
|
3918
|
-
async takeClientPresignature(input) {
|
|
3919
|
-
if (!supportsStrictIndexedDbDurability()) return { kind: "persistence_unavailable" };
|
|
3920
|
-
const recordId = parseDurableClientPresignatureRecordId(input.recordId);
|
|
3921
|
-
const poolIdentity = parseEcdsaClientPresignPoolIdentity(input.poolIdentity);
|
|
3922
|
-
let row;
|
|
3923
|
-
try {
|
|
3924
|
-
const claimed = await this.manager.runTransaction([PRESIGNATURE_STORE], "readwrite", async (context) => {
|
|
3925
|
-
const store = context.store(PRESIGNATURE_STORE);
|
|
3926
|
-
const raw = await store.get(recordId);
|
|
3927
|
-
if (raw === void 0) return { kind: "claimed_elsewhere" };
|
|
3928
|
-
let parsed;
|
|
3929
|
-
try {
|
|
3930
|
-
parsed = parseSealedAvailableClientPresignatureRow(raw);
|
|
3931
|
-
} catch {
|
|
3932
|
-
const malformedRecordId = rawRecordId(raw);
|
|
3933
|
-
if (malformedRecordId) await store.delete(malformedRecordId);
|
|
3934
|
-
return { kind: "corrupt" };
|
|
3935
|
-
}
|
|
3936
|
-
if (!equalEcdsaClientPresignPoolIdentity(parsed.pool_identity, poolIdentity)) {
|
|
3937
|
-
await store.delete(recordId);
|
|
3938
|
-
return { kind: "binding_rejected" };
|
|
3939
|
-
}
|
|
3940
|
-
if (parsed.expires_at_ms <= Date.now()) {
|
|
3941
|
-
await store.delete(recordId);
|
|
3942
|
-
return { kind: "expired" };
|
|
3943
|
-
}
|
|
3944
|
-
await store.delete(recordId);
|
|
3945
|
-
return {
|
|
3946
|
-
kind: "claimed",
|
|
3947
|
-
row: parsed
|
|
3948
|
-
};
|
|
3949
|
-
}, { durability: "strict" });
|
|
3950
|
-
if (claimed.kind !== "claimed") return { kind: claimed.kind };
|
|
3951
|
-
row = claimed.row;
|
|
3952
|
-
} catch {
|
|
3953
|
-
return { kind: "persistence_unavailable" };
|
|
3954
|
-
}
|
|
3955
|
-
let lookup;
|
|
3956
|
-
try {
|
|
3957
|
-
lookup = await this.lookupByMaterialRef(row.durable_material_ref);
|
|
3958
|
-
} catch {
|
|
3959
|
-
return { kind: "persistence_unavailable" };
|
|
3960
|
-
}
|
|
3961
|
-
if (lookup.kind !== "active" || !activeMaterialMatchesPresignaturePoolIdentity(lookup.material, poolIdentity) || lookup.material.sealingKeyId !== row.sealed.sealing_key_id || lookup.material.binding.durableMaterialRef !== row.durable_material_ref.durableMaterialRef || lookup.material.binding.bindingDigest !== row.durable_material_ref.bindingDigest || !mpcMaterialActivationRefsEqual(lookup.material.binding.materialActivation, row.durable_material_ref.materialActivation)) return { kind: "binding_rejected" };
|
|
3962
|
-
let sealingKey;
|
|
3963
|
-
try {
|
|
3964
|
-
sealingKey = await this.readMaterialSealingKey(row.sealed.sealing_key_id);
|
|
3965
|
-
} catch {
|
|
3966
|
-
return { kind: "persistence_unavailable" };
|
|
3967
|
-
}
|
|
3968
|
-
if (!sealingKey) return { kind: "corrupt" };
|
|
3969
|
-
const metadata = metadataFromPresignatureRow(row);
|
|
3970
|
-
try {
|
|
3971
|
-
return {
|
|
3972
|
-
kind: "opened",
|
|
3973
|
-
metadata,
|
|
3974
|
-
plaintext97: await decryptPresignatureBytes({
|
|
3975
|
-
key: sealingKey,
|
|
3976
|
-
metadata,
|
|
3977
|
-
sealed: row.sealed
|
|
3978
|
-
})
|
|
3979
|
-
};
|
|
3980
|
-
} catch {
|
|
3981
|
-
return { kind: "corrupt" };
|
|
3881
|
+
if (!selectorsMatch(pointer.selector, selector) || pointer.manifestId !== expected.manifestId || pointer.manifestRevision !== expected.manifestRevision) throw new FinalizationControlError("exact_record_conflict", "replacement ECDSA activation pointer CAS did not match");
|
|
3882
|
+
return pointer;
|
|
3982
3883
|
}
|
|
3983
3884
|
}
|
|
3984
|
-
|
|
3985
|
-
|
|
3986
|
-
|
|
3987
|
-
|
|
3988
|
-
|
|
3989
|
-
|
|
3990
|
-
|
|
3991
|
-
|
|
3992
|
-
|
|
3993
|
-
}
|
|
3994
|
-
|
|
3995
|
-
return await this.manager.runTransaction([PRESIGNATURE_STORE], "readwrite", async (context) => {
|
|
3996
|
-
const store = context.store(PRESIGNATURE_STORE);
|
|
3997
|
-
let deletedCount = 0;
|
|
3998
|
-
switch (target.kind) {
|
|
3999
|
-
case "wallet": {
|
|
4000
|
-
const walletId = String(target.walletId).trim();
|
|
4001
|
-
if (!walletId) throw new Error("ECDSA durable presignature wallet id is required");
|
|
4002
|
-
let cursor = await store.index(SEAMS_WALLET_INDEXES.walletId).openCursor(walletId);
|
|
4003
|
-
while (cursor) {
|
|
4004
|
-
await cursor.delete();
|
|
4005
|
-
deletedCount += 1;
|
|
4006
|
-
cursor = await cursor.continue();
|
|
4007
|
-
}
|
|
4008
|
-
break;
|
|
4009
|
-
}
|
|
4010
|
-
case "all": {
|
|
4011
|
-
let cursor = await store.openCursor();
|
|
4012
|
-
while (cursor) {
|
|
4013
|
-
await cursor.delete();
|
|
4014
|
-
deletedCount += 1;
|
|
4015
|
-
cursor = await cursor.continue();
|
|
4016
|
-
}
|
|
4017
|
-
break;
|
|
4018
|
-
}
|
|
4019
|
-
}
|
|
4020
|
-
return deletedCount;
|
|
4021
|
-
});
|
|
3885
|
+
return assertNever$1(expected);
|
|
3886
|
+
}
|
|
3887
|
+
async function cancelPreparedActivationInTransaction(preparedJournal, context) {
|
|
3888
|
+
const journalStore = context.store(JOURNAL_STORE);
|
|
3889
|
+
const raw = await journalStore.get(preparedJournal.journalId);
|
|
3890
|
+
if (raw === void 0) return { kind: "missing" };
|
|
3891
|
+
let persisted;
|
|
3892
|
+
try {
|
|
3893
|
+
persisted = parseJournalRow(raw);
|
|
3894
|
+
} catch {
|
|
3895
|
+
return { kind: "corrupt" };
|
|
4022
3896
|
}
|
|
4023
|
-
|
|
4024
|
-
|
|
4025
|
-
|
|
4026
|
-
|
|
4027
|
-
|
|
4028
|
-
|
|
4029
|
-
|
|
4030
|
-
return { kind: "
|
|
4031
|
-
}
|
|
4032
|
-
const selectors = [];
|
|
4033
|
-
try {
|
|
4034
|
-
for (const row of rows) {
|
|
4035
|
-
const pointer = parsePointerRow(row);
|
|
4036
|
-
if (pointer.selector.authority.walletId === parsedWalletId.value) selectors.push(pointer.selector);
|
|
4037
|
-
}
|
|
4038
|
-
} catch {
|
|
4039
|
-
return { kind: "invalid_current_state" };
|
|
4040
|
-
}
|
|
4041
|
-
const subjects = [];
|
|
4042
|
-
for (const selector of selectors) {
|
|
4043
|
-
const lookup = await this.lookup(selector);
|
|
4044
|
-
if (lookup.kind === "persistence_unavailable") return { kind: "persistence_unavailable" };
|
|
4045
|
-
if (lookup.kind !== "active") return { kind: "invalid_current_state" };
|
|
4046
|
-
subjects.push({
|
|
4047
|
-
capability: lookup.manifest.signer.capability,
|
|
4048
|
-
authority: lookup.manifest.signer.authority,
|
|
4049
|
-
ecdsaThresholdKeyId: lookup.manifest.durableMaterial.roleLocalBinding.ecdsaThresholdKeyId
|
|
4050
|
-
});
|
|
4051
|
-
}
|
|
4052
|
-
return {
|
|
4053
|
-
kind: "resolved",
|
|
4054
|
-
subjects
|
|
4055
|
-
};
|
|
3897
|
+
if (persisted.journal.journalId !== preparedJournal.journalId) return { kind: "corrupt" };
|
|
3898
|
+
switch (persisted.journal.kind) {
|
|
3899
|
+
case "server_activation_committed": return { kind: "server_activation_committed" };
|
|
3900
|
+
case "activation_prepared":
|
|
3901
|
+
if (!ecdsaActivationCommitJournalsMatch(persisted.journal, preparedJournal)) return { kind: "exact_record_conflict" };
|
|
3902
|
+
await context.store(SEALING_KEY_STORE).delete(persisted.journal.candidate.encryptedPending.sealingKeyId);
|
|
3903
|
+
await journalStore.delete(persisted.journal.journalId);
|
|
3904
|
+
return { kind: "cancelled" };
|
|
4056
3905
|
}
|
|
4057
|
-
|
|
4058
|
-
|
|
4059
|
-
|
|
4060
|
-
|
|
4061
|
-
|
|
4062
|
-
|
|
4063
|
-
|
|
4064
|
-
|
|
4065
|
-
|
|
4066
|
-
|
|
4067
|
-
|
|
4068
|
-
|
|
4069
|
-
|
|
4070
|
-
|
|
4071
|
-
|
|
4072
|
-
|
|
4073
|
-
|
|
4074
|
-
|
|
4075
|
-
|
|
4076
|
-
|
|
4077
|
-
|
|
4078
|
-
|
|
3906
|
+
return assertNever$1(persisted.journal);
|
|
3907
|
+
}
|
|
3908
|
+
function persistPreparedContinuity(manager, prepared) {
|
|
3909
|
+
return manager.runTransaction([
|
|
3910
|
+
MANIFEST_STORE,
|
|
3911
|
+
POINTER_STORE,
|
|
3912
|
+
MATERIAL_STORE,
|
|
3913
|
+
SEALING_KEY_STORE
|
|
3914
|
+
], "readwrite", (context) => persistPreparedImportedWalletCustodyEcdsaContinuityInTransaction(context, prepared));
|
|
3915
|
+
}
|
|
3916
|
+
async function importCommittedActivation(store, input, persist) {
|
|
3917
|
+
const serverActivation = buildEcdsaServerActivationCommit({
|
|
3918
|
+
activationBinding: input.activationBinding,
|
|
3919
|
+
serverCommit: input.serverCommit
|
|
3920
|
+
});
|
|
3921
|
+
const selector = selectorFromSigner(input.activationBinding.signer);
|
|
3922
|
+
const existing = await store.lookup(selector);
|
|
3923
|
+
if (existing.kind === "active") {
|
|
3924
|
+
if (activeManifestMatchesWalletCustodyImport(existing.manifest, input, serverActivation)) return {
|
|
3925
|
+
kind: "committed",
|
|
3926
|
+
manifest: existing.manifest,
|
|
3927
|
+
material: existing.material
|
|
3928
|
+
};
|
|
4079
3929
|
return {
|
|
4080
|
-
kind: "
|
|
4081
|
-
|
|
3930
|
+
kind: "exact_record_conflict",
|
|
3931
|
+
selector,
|
|
3932
|
+
conflictDigest: await persistenceDigest("custody_import_conflict", selector, "ECDSA custody import conflicts with the active manifest")
|
|
4082
3933
|
};
|
|
4083
3934
|
}
|
|
4084
|
-
|
|
4085
|
-
const
|
|
4086
|
-
|
|
4087
|
-
|
|
3935
|
+
try {
|
|
3936
|
+
const prepared = await prepareImportedWalletCustodyEcdsaContinuity(input);
|
|
3937
|
+
await persist(prepared);
|
|
3938
|
+
return {
|
|
3939
|
+
kind: "committed",
|
|
3940
|
+
manifest: prepared.activeManifest,
|
|
3941
|
+
material: prepared.readyMaterial
|
|
4088
3942
|
};
|
|
4089
|
-
|
|
4090
|
-
|
|
4091
|
-
const
|
|
4092
|
-
|
|
4093
|
-
|
|
4094
|
-
|
|
4095
|
-
|
|
4096
|
-
});
|
|
4097
|
-
const journal = buildPreparedJournalFromEncryptedCandidate({
|
|
4098
|
-
preparation: input,
|
|
4099
|
-
encryptedPending: buildEncryptedEcdsaPendingCandidate({
|
|
4100
|
-
sealingKeyId: keyId,
|
|
4101
|
-
iv12B64u: encrypted.iv12B64u,
|
|
4102
|
-
ciphertextB64u: encrypted.ciphertextB64u,
|
|
4103
|
-
ciphertextDigest: parseEcdsaPendingCiphertextDigest(encrypted.digestB64u)
|
|
4104
|
-
})
|
|
4105
|
-
});
|
|
4106
|
-
await this.manager.runTransaction([SEALING_KEY_STORE, JOURNAL_STORE], "readwrite", async (context) => {
|
|
4107
|
-
await context.store(SEALING_KEY_STORE).add(storedSealingKeyRow(keyId, key));
|
|
4108
|
-
await context.store(JOURNAL_STORE).add(storedJournalRow(journal));
|
|
4109
|
-
});
|
|
4110
|
-
return {
|
|
4111
|
-
kind: "stored",
|
|
4112
|
-
journal
|
|
4113
|
-
};
|
|
4114
|
-
} catch (error) {
|
|
4115
|
-
if (isConstraintError(error)) return {
|
|
4116
|
-
kind: "exact_record_conflict",
|
|
4117
|
-
conflictDigest: await persistenceDigest("journal_constraint_conflict", selector, errorMessage(error))
|
|
4118
|
-
};
|
|
4119
|
-
if (error instanceof DOMException && error.name === "OperationError") return {
|
|
4120
|
-
kind: "corrupt",
|
|
4121
|
-
corruptionDigest: await persistenceDigest("journal_encryption_failed", selector, errorMessage(error))
|
|
4122
|
-
};
|
|
4123
|
-
if (error instanceof Error && !(error instanceof DOMException)) return {
|
|
4124
|
-
kind: "corrupt",
|
|
4125
|
-
corruptionDigest: await persistenceDigest("journal_preparation_invalid", selector, error.message)
|
|
3943
|
+
} catch (error) {
|
|
3944
|
+
if (error instanceof FinalizationControlError || isConstraintError(error)) {
|
|
3945
|
+
const replay = await store.lookup(selector);
|
|
3946
|
+
if (replay.kind === "active" && activeManifestMatchesWalletCustodyImport(replay.manifest, input, serverActivation)) return {
|
|
3947
|
+
kind: "committed",
|
|
3948
|
+
manifest: replay.manifest,
|
|
3949
|
+
material: replay.material
|
|
4126
3950
|
};
|
|
4127
3951
|
return {
|
|
4128
|
-
kind: "
|
|
4129
|
-
|
|
3952
|
+
kind: "exact_record_conflict",
|
|
3953
|
+
selector,
|
|
3954
|
+
conflictDigest: await persistenceDigest("custody_import_conflict", selector, ecdsaManifestErrorMessage(error))
|
|
4130
3955
|
};
|
|
4131
3956
|
}
|
|
3957
|
+
return {
|
|
3958
|
+
kind: "corrupt",
|
|
3959
|
+
selector,
|
|
3960
|
+
corruptionDigest: await persistenceDigest("custody_import_corrupt", selector, ecdsaManifestErrorMessage(error))
|
|
3961
|
+
};
|
|
4132
3962
|
}
|
|
4133
|
-
|
|
4134
|
-
|
|
4135
|
-
|
|
4136
|
-
|
|
4137
|
-
} catch (error) {
|
|
4138
|
-
return {
|
|
4139
|
-
kind: "corrupt",
|
|
4140
|
-
corruptionDigest: await persistenceDigest("server_activation_commit_corrupt", selectorFromJournal(input.preparedJournal), errorMessage(error))
|
|
4141
|
-
};
|
|
4142
|
-
}
|
|
4143
|
-
return await this.putActivationJournal(committedJournal);
|
|
3963
|
+
}
|
|
3964
|
+
var IndexedDbEcdsaCapabilityManifestStore = class {
|
|
3965
|
+
constructor(manager = seamsWalletDB) {
|
|
3966
|
+
this.manager = manager;
|
|
4144
3967
|
}
|
|
4145
|
-
async
|
|
4146
|
-
|
|
4147
|
-
|
|
4148
|
-
|
|
4149
|
-
|
|
4150
|
-
|
|
4151
|
-
|
|
4152
|
-
|
|
4153
|
-
|
|
4154
|
-
|
|
4155
|
-
}
|
|
4156
|
-
|
|
3968
|
+
async admitClientPresignature(input) {
|
|
3969
|
+
if (!supportsStrictIndexedDbDurability()) return { kind: "persistence_unavailable" };
|
|
3970
|
+
const poolIdentity = parseEcdsaClientPresignPoolIdentity(input.poolIdentity);
|
|
3971
|
+
const durableMaterialRef = parseEcdsaRoleLocalPersistedMaterialRef(input.durableMaterialRef);
|
|
3972
|
+
if (!materialRefMatchesPoolIdentity(durableMaterialRef, poolIdentity)) return { kind: "persistence_unavailable" };
|
|
3973
|
+
if (input.groupPublicKey33.length !== 33 || input.bigR33.length !== 33) return { kind: "persistence_unavailable" };
|
|
3974
|
+
const createdAtMs = parsePresignatureTimestamp(input.createdAtMs, "createdAtMs");
|
|
3975
|
+
const expiresAtMs = parsePresignatureTimestamp(input.expiresAtMs, "expiresAtMs");
|
|
3976
|
+
if (createdAtMs > Date.now() + 3e5 || expiresAtMs <= createdAtMs || expiresAtMs > createdAtMs + 7776e6) return { kind: "persistence_unavailable" };
|
|
3977
|
+
const presignatureId = String(input.presignatureId || "").trim();
|
|
3978
|
+
if (!presignatureId || input.plaintext97.length !== 97) return { kind: "persistence_unavailable" };
|
|
3979
|
+
let lookup;
|
|
4157
3980
|
try {
|
|
4158
|
-
|
|
4159
|
-
|
|
4160
|
-
|
|
4161
|
-
key: sealingKey,
|
|
4162
|
-
iv12B64u: journal.candidate.encryptedPending.iv12B64u,
|
|
4163
|
-
ciphertextB64u: journal.candidate.encryptedPending.ciphertextB64u,
|
|
4164
|
-
aadProjection: pendingAadProjection(journal)
|
|
4165
|
-
});
|
|
4166
|
-
await this.manager.runTransaction([SEALING_KEY_STORE, JOURNAL_STORE], "readwrite", async (context) => {
|
|
4167
|
-
const sealingKeyRaw = await context.store(SEALING_KEY_STORE).get(journal.candidate.encryptedPending.sealingKeyId);
|
|
4168
|
-
if (sealingKeyRaw === void 0) throw new FinalizationControlError("corrupt", "ECDSA activation journal references a missing sealing key");
|
|
4169
|
-
try {
|
|
4170
|
-
parseSealingKeyRow(sealingKeyRaw);
|
|
4171
|
-
} catch (error) {
|
|
4172
|
-
throw new FinalizationControlError("corrupt", errorMessage(error));
|
|
4173
|
-
}
|
|
4174
|
-
const journalStore = context.store(JOURNAL_STORE);
|
|
4175
|
-
const existingRaw = await journalStore.get(journal.journalId);
|
|
4176
|
-
if (existingRaw === void 0) throw new FinalizationControlError("exact_record_conflict", "ECDSA committed activation is missing its prepared journal");
|
|
4177
|
-
let existing;
|
|
4178
|
-
try {
|
|
4179
|
-
existing = parseJournalRow(existingRaw);
|
|
4180
|
-
} catch (error) {
|
|
4181
|
-
throw new FinalizationControlError("corrupt", errorMessage(error));
|
|
4182
|
-
}
|
|
4183
|
-
if (!selectorsMatch(existing.selector, selector) || existing.journal.kind === "activation_prepared" && !ecdsaActivationCommitJournalsMatch(existing.journal, preparedJournalProjection(journal)) || existing.journal.kind === "server_activation_committed" && !ecdsaActivationCommitJournalsMatch(existing.journal, journal)) throw new FinalizationControlError("exact_record_conflict", "ECDSA activation journal conflicts with its existing correlation");
|
|
4184
|
-
await journalStore.put(storedJournalRow(journal));
|
|
4185
|
-
});
|
|
4186
|
-
return {
|
|
4187
|
-
kind: "stored",
|
|
4188
|
-
journal
|
|
4189
|
-
};
|
|
4190
|
-
} catch (error) {
|
|
4191
|
-
if (error instanceof FinalizationControlError) {
|
|
4192
|
-
const digest = await persistenceDigest(error.kind === "corrupt" ? "journal_corrupt" : "journal_conflict", selector, error.message);
|
|
4193
|
-
return error.kind === "corrupt" ? {
|
|
4194
|
-
kind: "corrupt",
|
|
4195
|
-
corruptionDigest: digest
|
|
4196
|
-
} : {
|
|
4197
|
-
kind: "exact_record_conflict",
|
|
4198
|
-
conflictDigest: digest
|
|
4199
|
-
};
|
|
4200
|
-
}
|
|
4201
|
-
if (isConstraintError(error)) return {
|
|
4202
|
-
kind: "exact_record_conflict",
|
|
4203
|
-
conflictDigest: await persistenceDigest("journal_constraint_conflict", selector, errorMessage(error))
|
|
4204
|
-
};
|
|
4205
|
-
if (error instanceof DOMException && error.name === "OperationError") return {
|
|
4206
|
-
kind: "corrupt",
|
|
4207
|
-
corruptionDigest: await persistenceDigest("journal_ciphertext_corrupt", selector, errorMessage(error))
|
|
4208
|
-
};
|
|
4209
|
-
return {
|
|
4210
|
-
kind: "persistence_unavailable",
|
|
4211
|
-
retryCorrelation: retryCorrelation()
|
|
4212
|
-
};
|
|
3981
|
+
lookup = await this.lookupByMaterialRef(durableMaterialRef);
|
|
3982
|
+
} catch {
|
|
3983
|
+
return { kind: "persistence_unavailable" };
|
|
4213
3984
|
}
|
|
4214
|
-
|
|
4215
|
-
|
|
4216
|
-
|
|
3985
|
+
if (lookup.kind !== "active") return { kind: "persistence_unavailable" };
|
|
3986
|
+
if (!activeMaterialMatchesPresignature(lookup.material, poolIdentity, durableMaterialRef)) return { kind: "persistence_unavailable" };
|
|
3987
|
+
let sealingKey;
|
|
4217
3988
|
try {
|
|
4218
|
-
|
|
4219
|
-
if (raw === void 0) return { kind: "missing" };
|
|
4220
|
-
try {
|
|
4221
|
-
const parsed = parseJournalRow(raw);
|
|
4222
|
-
return parsed.journal.journalId === journalId ? {
|
|
4223
|
-
kind: "found",
|
|
4224
|
-
journal: parsed.journal
|
|
4225
|
-
} : { kind: "corrupt" };
|
|
4226
|
-
} catch {
|
|
4227
|
-
return { kind: "corrupt" };
|
|
4228
|
-
}
|
|
3989
|
+
sealingKey = await this.readMaterialSealingKey(lookup.material.sealingKeyId);
|
|
4229
3990
|
} catch {
|
|
4230
3991
|
return { kind: "persistence_unavailable" };
|
|
4231
3992
|
}
|
|
4232
|
-
|
|
4233
|
-
|
|
4234
|
-
|
|
3993
|
+
if (!sealingKey) return { kind: "persistence_unavailable" };
|
|
3994
|
+
const recordId = parseDurableClientPresignatureRecordId(secureRandomId("ecdsa-client-presignature", 32, "ECDSA durable presignature record"));
|
|
3995
|
+
const groupPublicKey33B64u = parseEcdsaClientVerifyingPublicKey33B64u(base64UrlEncode(input.groupPublicKey33));
|
|
3996
|
+
const bigR33B64u = parseEcdsaClientVerifyingPublicKey33B64u(base64UrlEncode(input.bigR33));
|
|
3997
|
+
const metadata = {
|
|
3998
|
+
kind: "sealed_available_client_presignature_v1",
|
|
3999
|
+
recordId,
|
|
4000
|
+
poolIdentity,
|
|
4001
|
+
durableMaterialRef,
|
|
4002
|
+
presignatureId,
|
|
4003
|
+
groupPublicKey33B64u,
|
|
4004
|
+
bigR33B64u,
|
|
4005
|
+
createdAtMs,
|
|
4006
|
+
expiresAtMs,
|
|
4007
|
+
sealingKeyId: lookup.material.sealingKeyId
|
|
4008
|
+
};
|
|
4009
|
+
let encrypted;
|
|
4235
4010
|
try {
|
|
4236
|
-
|
|
4011
|
+
encrypted = await encryptPresignatureBytes({
|
|
4012
|
+
key: sealingKey,
|
|
4013
|
+
plaintext97: input.plaintext97,
|
|
4014
|
+
metadata
|
|
4015
|
+
});
|
|
4237
4016
|
} catch {
|
|
4238
|
-
|
|
4017
|
+
input.plaintext97.fill(0);
|
|
4018
|
+
return { kind: "persistence_unavailable" };
|
|
4239
4019
|
}
|
|
4240
|
-
|
|
4241
|
-
|
|
4242
|
-
|
|
4243
|
-
|
|
4244
|
-
|
|
4245
|
-
|
|
4246
|
-
|
|
4247
|
-
|
|
4248
|
-
|
|
4249
|
-
|
|
4250
|
-
|
|
4020
|
+
const row = {
|
|
4021
|
+
kind: "sealed_available_client_presignature_v1",
|
|
4022
|
+
record_id: recordId,
|
|
4023
|
+
pool_identity: poolIdentity,
|
|
4024
|
+
pool_identity_key: ecdsaClientPresignPoolKey(poolIdentity),
|
|
4025
|
+
wallet_id: poolIdentity.walletId,
|
|
4026
|
+
material_activation_id: poolIdentity.materialActivationId,
|
|
4027
|
+
durable_material_ref: durableMaterialRef,
|
|
4028
|
+
presignature_id: presignatureId,
|
|
4029
|
+
group_public_key33_b64u: groupPublicKey33B64u,
|
|
4030
|
+
big_r33_b64u: bigR33B64u,
|
|
4031
|
+
created_at_ms: createdAtMs,
|
|
4032
|
+
expires_at_ms: expiresAtMs,
|
|
4033
|
+
sealed: {
|
|
4034
|
+
kind: "ecdsa_activation_aes_gcm_v1",
|
|
4035
|
+
sealing_key_id: lookup.material.sealingKeyId,
|
|
4036
|
+
iv12_b64u: encrypted.iv12B64u,
|
|
4037
|
+
ciphertext_b64u: encrypted.ciphertextB64u,
|
|
4038
|
+
ciphertext_digest_b64u: encrypted.ciphertextDigestB64u
|
|
4251
4039
|
}
|
|
4252
|
-
}
|
|
4253
|
-
return { kind: "persistence_unavailable" };
|
|
4254
|
-
}
|
|
4255
|
-
}
|
|
4256
|
-
async cancelPreparedActivation(preparedJournal) {
|
|
4257
|
-
try {
|
|
4258
|
-
return await this.manager.runTransaction([SEALING_KEY_STORE, JOURNAL_STORE], "readwrite", cancelPreparedActivationInTransaction.bind(void 0, preparedJournal));
|
|
4259
|
-
} catch {
|
|
4260
|
-
return { kind: "persistence_unavailable" };
|
|
4261
|
-
}
|
|
4262
|
-
}
|
|
4263
|
-
async openPreparedActivation(journalIdInput) {
|
|
4264
|
-
const read = await this.readActivationJournal(journalIdInput);
|
|
4265
|
-
if (read.kind !== "found") return read;
|
|
4266
|
-
const encryptedPending = read.journal.candidate.encryptedPending;
|
|
4040
|
+
};
|
|
4267
4041
|
try {
|
|
4268
|
-
|
|
4269
|
-
|
|
4270
|
-
|
|
4271
|
-
|
|
4272
|
-
|
|
4273
|
-
|
|
4274
|
-
|
|
4275
|
-
|
|
4276
|
-
|
|
4277
|
-
|
|
4278
|
-
|
|
4279
|
-
|
|
4280
|
-
|
|
4042
|
+
const result = await this.manager.runTransaction([PRESIGNATURE_STORE, MATERIAL_STORE], "readwrite", async (context) => {
|
|
4043
|
+
if ((await readAvailableClientPresignatureRows(context, poolIdentity, Date.now())).length >= 5) return { kind: "capacity_full" };
|
|
4044
|
+
const materialRow = await context.store(MATERIAL_STORE).get(durableMaterialRef.durableMaterialRef);
|
|
4045
|
+
if (materialRow === void 0) return { kind: "persistence_unavailable" };
|
|
4046
|
+
try {
|
|
4047
|
+
const locator = parseMaterialLocator(materialRow);
|
|
4048
|
+
const materialRecord = requireRecord(materialRow, "ECDSA role-local material row");
|
|
4049
|
+
if (locator.durableMaterialRef !== durableMaterialRef.durableMaterialRef || locator.bindingDigest !== durableMaterialRef.bindingDigest || locator.selector.capability !== lookup.manifest.signer.capability || String(locator.selector.authority.walletId) !== poolIdentity.walletId || parseEcdsaMaterialSealingKeyId(materialRecord.sealing_key_id) !== lookup.material.sealingKeyId) return { kind: "persistence_unavailable" };
|
|
4050
|
+
} catch {
|
|
4051
|
+
return { kind: "persistence_unavailable" };
|
|
4052
|
+
}
|
|
4053
|
+
await context.store(PRESIGNATURE_STORE).put(row);
|
|
4054
|
+
return { kind: "stored" };
|
|
4055
|
+
}, { durability: "strict" });
|
|
4056
|
+
return result.kind === "stored" ? {
|
|
4057
|
+
kind: "stored",
|
|
4058
|
+
metadata
|
|
4059
|
+
} : result;
|
|
4281
4060
|
} catch {
|
|
4282
|
-
return { kind: "
|
|
4061
|
+
return { kind: "persistence_ambiguous" };
|
|
4283
4062
|
}
|
|
4284
4063
|
}
|
|
4285
|
-
async
|
|
4286
|
-
|
|
4287
|
-
|
|
4064
|
+
async listAvailableClientPresignatures(poolIdentityInput) {
|
|
4065
|
+
if (!supportsStrictIndexedDbDurability()) return [];
|
|
4066
|
+
const poolIdentity = parseEcdsaClientPresignPoolIdentity(poolIdentityInput);
|
|
4067
|
+
const nowMs = Date.now();
|
|
4288
4068
|
try {
|
|
4289
|
-
|
|
4290
|
-
|
|
4291
|
-
|
|
4292
|
-
MATERIAL_STORE,
|
|
4293
|
-
SEALING_KEY_STORE
|
|
4294
|
-
], "readonly", async (context) => await lookupInTransaction(context, selector));
|
|
4069
|
+
return await this.manager.runTransaction([PRESIGNATURE_STORE], "readwrite", async (context) => {
|
|
4070
|
+
return (await readAvailableClientPresignatureRows(context, poolIdentity, nowMs)).map(metadataFromPresignatureRow).sort((left, right) => left.createdAtMs - right.createdAtMs);
|
|
4071
|
+
});
|
|
4295
4072
|
} catch {
|
|
4296
|
-
return
|
|
4297
|
-
kind: "persistence_unavailable",
|
|
4298
|
-
selector,
|
|
4299
|
-
retryCorrelation: retryCorrelation()
|
|
4300
|
-
};
|
|
4301
|
-
}
|
|
4302
|
-
switch (observation.kind) {
|
|
4303
|
-
case "active": return observation;
|
|
4304
|
-
case "retired": return observation;
|
|
4305
|
-
case "missing": return {
|
|
4306
|
-
kind: "missing",
|
|
4307
|
-
selector,
|
|
4308
|
-
subject: observation.subject
|
|
4309
|
-
};
|
|
4310
|
-
case "exact_binding_mismatch": return {
|
|
4311
|
-
kind: "exact_binding_mismatch",
|
|
4312
|
-
selector,
|
|
4313
|
-
failureDigest: await persistenceDigest(observation.kind, selector, observation.detail)
|
|
4314
|
-
};
|
|
4315
|
-
case "exact_record_conflict": return {
|
|
4316
|
-
kind: "exact_record_conflict",
|
|
4317
|
-
selector,
|
|
4318
|
-
conflictDigest: await persistenceDigest(observation.kind, selector, observation.detail)
|
|
4319
|
-
};
|
|
4320
|
-
case "corrupt": return {
|
|
4321
|
-
kind: "corrupt",
|
|
4322
|
-
selector,
|
|
4323
|
-
corruptionDigest: await persistenceDigest(observation.kind, selector, observation.detail)
|
|
4324
|
-
};
|
|
4073
|
+
return [];
|
|
4325
4074
|
}
|
|
4326
|
-
return assertNever$1(observation);
|
|
4327
4075
|
}
|
|
4328
|
-
async
|
|
4329
|
-
|
|
4330
|
-
const
|
|
4331
|
-
const
|
|
4332
|
-
|
|
4333
|
-
kind: "corrupt",
|
|
4334
|
-
capability
|
|
4335
|
-
};
|
|
4336
|
-
const walletId = walletIdResult.value;
|
|
4337
|
-
const materialActivation = materialActivationResult.value;
|
|
4338
|
-
let rows;
|
|
4076
|
+
async takeClientPresignature(input) {
|
|
4077
|
+
if (!supportsStrictIndexedDbDurability()) return { kind: "persistence_unavailable" };
|
|
4078
|
+
const recordId = parseDurableClientPresignatureRecordId(input.recordId);
|
|
4079
|
+
const poolIdentity = parseEcdsaClientPresignPoolIdentity(input.poolIdentity);
|
|
4080
|
+
let row;
|
|
4339
4081
|
try {
|
|
4340
|
-
|
|
4082
|
+
const claimed = await this.manager.runTransaction([PRESIGNATURE_STORE], "readwrite", async (context) => {
|
|
4083
|
+
const store = context.store(PRESIGNATURE_STORE);
|
|
4084
|
+
const raw = await store.get(recordId);
|
|
4085
|
+
if (raw === void 0) return { kind: "claimed_elsewhere" };
|
|
4086
|
+
let parsed;
|
|
4087
|
+
try {
|
|
4088
|
+
parsed = parseSealedAvailableClientPresignatureRow(raw);
|
|
4089
|
+
} catch {
|
|
4090
|
+
const malformedRecordId = rawRecordId(raw);
|
|
4091
|
+
if (malformedRecordId) await store.delete(malformedRecordId);
|
|
4092
|
+
return { kind: "corrupt" };
|
|
4093
|
+
}
|
|
4094
|
+
if (!equalEcdsaClientPresignPoolIdentity(parsed.pool_identity, poolIdentity)) {
|
|
4095
|
+
await store.delete(recordId);
|
|
4096
|
+
return { kind: "binding_rejected" };
|
|
4097
|
+
}
|
|
4098
|
+
if (parsed.expires_at_ms <= Date.now()) {
|
|
4099
|
+
await store.delete(recordId);
|
|
4100
|
+
return { kind: "expired" };
|
|
4101
|
+
}
|
|
4102
|
+
await store.delete(recordId);
|
|
4103
|
+
return {
|
|
4104
|
+
kind: "claimed",
|
|
4105
|
+
row: parsed
|
|
4106
|
+
};
|
|
4107
|
+
}, { durability: "strict" });
|
|
4108
|
+
if (claimed.kind !== "claimed") return { kind: claimed.kind };
|
|
4109
|
+
row = claimed.row;
|
|
4341
4110
|
} catch {
|
|
4342
|
-
return {
|
|
4343
|
-
kind: "persistence_unavailable",
|
|
4344
|
-
capability
|
|
4345
|
-
};
|
|
4111
|
+
return { kind: "persistence_unavailable" };
|
|
4346
4112
|
}
|
|
4347
|
-
|
|
4113
|
+
let lookup;
|
|
4348
4114
|
try {
|
|
4349
|
-
|
|
4350
|
-
const pointer = parsePointerRow(row);
|
|
4351
|
-
if (pointer.selector.authority.walletId === walletId) selectors.push(pointer.selector);
|
|
4352
|
-
}
|
|
4115
|
+
lookup = await this.lookupByMaterialRef(row.durable_material_ref);
|
|
4353
4116
|
} catch {
|
|
4354
|
-
return {
|
|
4355
|
-
kind: "corrupt",
|
|
4356
|
-
capability
|
|
4357
|
-
};
|
|
4358
|
-
}
|
|
4359
|
-
if (selectors.length === 0) return {
|
|
4360
|
-
kind: "missing",
|
|
4361
|
-
subject: "capability",
|
|
4362
|
-
capability
|
|
4363
|
-
};
|
|
4364
|
-
const exact = [];
|
|
4365
|
-
for (const selector of selectors) {
|
|
4366
|
-
const lookup = await this.lookup(selector);
|
|
4367
|
-
switch (lookup.kind) {
|
|
4368
|
-
case "active":
|
|
4369
|
-
if (mpcMaterialActivationRefsEqual(lookup.manifest.activation.materialActivation, materialActivation) && mpcMaterialActivationRefsEqual(lookup.manifest.durableMaterial.materialActivation, materialActivation) && mpcMaterialActivationRefsEqual(lookup.material.binding.materialActivation, materialActivation)) exact.push(lookup);
|
|
4370
|
-
break;
|
|
4371
|
-
case "retired": break;
|
|
4372
|
-
case "missing": return {
|
|
4373
|
-
kind: "missing",
|
|
4374
|
-
subject: lookup.subject,
|
|
4375
|
-
capability
|
|
4376
|
-
};
|
|
4377
|
-
case "exact_binding_mismatch":
|
|
4378
|
-
case "exact_record_conflict":
|
|
4379
|
-
case "corrupt":
|
|
4380
|
-
case "persistence_unavailable": return {
|
|
4381
|
-
kind: lookup.kind,
|
|
4382
|
-
capability
|
|
4383
|
-
};
|
|
4384
|
-
}
|
|
4385
|
-
}
|
|
4386
|
-
const requested = input.authority;
|
|
4387
|
-
if (requested) {
|
|
4388
|
-
const selected = exact.filter((candidate) => walletAuthAuthorityRefsMatch(candidate.manifest.signer.authority, requested));
|
|
4389
|
-
if (selected.length > 1) return {
|
|
4390
|
-
kind: "exact_record_conflict",
|
|
4391
|
-
capability
|
|
4392
|
-
};
|
|
4393
|
-
return selected[0] ?? {
|
|
4394
|
-
kind: "exact_binding_mismatch",
|
|
4395
|
-
capability
|
|
4396
|
-
};
|
|
4117
|
+
return { kind: "persistence_unavailable" };
|
|
4397
4118
|
}
|
|
4398
|
-
if (
|
|
4399
|
-
|
|
4400
|
-
capability,
|
|
4401
|
-
authorities: exact.map((candidate) => candidate.manifest.signer.authority)
|
|
4402
|
-
};
|
|
4403
|
-
return exact[0] ?? {
|
|
4404
|
-
kind: "exact_binding_mismatch",
|
|
4405
|
-
capability
|
|
4406
|
-
};
|
|
4407
|
-
}
|
|
4408
|
-
async openActiveMaterial(selectorInput) {
|
|
4409
|
-
const selector = normalizeSelector(selectorInput);
|
|
4410
|
-
const lookup = await this.lookup(selector);
|
|
4411
|
-
if (lookup.kind !== "active") return lookup;
|
|
4412
|
-
return await this.openActiveMaterialLookup(lookup);
|
|
4413
|
-
}
|
|
4414
|
-
async lookupByMaterialRef(materialRefInput) {
|
|
4415
|
-
const materialRef = parseEcdsaRoleLocalPersistedMaterialRef(materialRefInput);
|
|
4416
|
-
const capability = materialRef.materialActivation.capability;
|
|
4417
|
-
let raw;
|
|
4119
|
+
if (lookup.kind !== "active" || !activeMaterialMatchesPresignature(lookup.material, poolIdentity, row.durable_material_ref) || lookup.material.sealingKeyId !== row.sealed.sealing_key_id) return { kind: "binding_rejected" };
|
|
4120
|
+
let sealingKey;
|
|
4418
4121
|
try {
|
|
4419
|
-
|
|
4122
|
+
sealingKey = await this.readMaterialSealingKey(row.sealed.sealing_key_id);
|
|
4420
4123
|
} catch {
|
|
4421
|
-
return {
|
|
4422
|
-
kind: "persistence_unavailable",
|
|
4423
|
-
capability
|
|
4424
|
-
};
|
|
4124
|
+
return { kind: "persistence_unavailable" };
|
|
4425
4125
|
}
|
|
4426
|
-
if (
|
|
4427
|
-
|
|
4126
|
+
if (!sealingKey) return { kind: "corrupt" };
|
|
4127
|
+
const metadata = metadataFromPresignatureRow(row);
|
|
4428
4128
|
try {
|
|
4429
|
-
locator = parseMaterialLocator(raw);
|
|
4430
|
-
} catch {
|
|
4431
4129
|
return {
|
|
4432
|
-
kind: "
|
|
4433
|
-
|
|
4434
|
-
|
|
4435
|
-
|
|
4436
|
-
|
|
4437
|
-
|
|
4438
|
-
|
|
4439
|
-
};
|
|
4440
|
-
const lookup = await this.lookup(locator.selector);
|
|
4441
|
-
switch (lookup.kind) {
|
|
4442
|
-
case "active":
|
|
4443
|
-
if (lookup.manifest.durableMaterial.durableMaterialRef !== materialRef.durableMaterialRef || lookup.manifest.durableMaterial.bindingDigest !== materialRef.bindingDigest || !mpcMaterialActivationRefsEqual(lookup.manifest.activation.materialActivation, materialRef.materialActivation) || !mpcMaterialActivationRefsEqual(lookup.manifest.durableMaterial.materialActivation, materialRef.materialActivation) || !mpcMaterialActivationRefsEqual(lookup.material.binding.materialActivation, materialRef.materialActivation)) return {
|
|
4444
|
-
kind: "exact_binding_mismatch",
|
|
4445
|
-
capability
|
|
4446
|
-
};
|
|
4447
|
-
return lookup;
|
|
4448
|
-
case "retired": return lookup;
|
|
4449
|
-
case "missing": return {
|
|
4450
|
-
kind: "missing",
|
|
4451
|
-
subject: lookup.subject,
|
|
4452
|
-
capability
|
|
4453
|
-
};
|
|
4454
|
-
case "exact_binding_mismatch":
|
|
4455
|
-
case "exact_record_conflict":
|
|
4456
|
-
case "corrupt":
|
|
4457
|
-
case "persistence_unavailable": return {
|
|
4458
|
-
kind: lookup.kind,
|
|
4459
|
-
capability
|
|
4130
|
+
kind: "opened",
|
|
4131
|
+
metadata,
|
|
4132
|
+
plaintext97: await decryptPresignatureBytes({
|
|
4133
|
+
key: sealingKey,
|
|
4134
|
+
metadata,
|
|
4135
|
+
sealed: row.sealed
|
|
4136
|
+
})
|
|
4460
4137
|
};
|
|
4138
|
+
} catch {
|
|
4139
|
+
return { kind: "corrupt" };
|
|
4461
4140
|
}
|
|
4462
|
-
return assertNever$1(lookup);
|
|
4463
4141
|
}
|
|
4464
|
-
async
|
|
4465
|
-
const
|
|
4142
|
+
async deleteClientPresignature(input) {
|
|
4143
|
+
const recordId = parseDurableClientPresignatureRecordId(input.recordId);
|
|
4144
|
+
const poolIdentity = parseEcdsaClientPresignPoolIdentity(input.poolIdentity);
|
|
4145
|
+
await this.manager.runTransaction([PRESIGNATURE_STORE], "readwrite", async (context) => {
|
|
4146
|
+
const store = context.store(PRESIGNATURE_STORE);
|
|
4147
|
+
const raw = await store.get(recordId);
|
|
4148
|
+
if (raw === void 0) return;
|
|
4149
|
+
if (equalEcdsaClientPresignPoolIdentity(parseSealedAvailableClientPresignatureRow(raw).pool_identity, poolIdentity)) await store.delete(recordId);
|
|
4150
|
+
});
|
|
4151
|
+
}
|
|
4152
|
+
async deleteClientPresignatures(target) {
|
|
4153
|
+
return await this.manager.runTransaction([PRESIGNATURE_STORE], "readwrite", async (context) => {
|
|
4154
|
+
const store = context.store(PRESIGNATURE_STORE);
|
|
4155
|
+
let deletedCount = 0;
|
|
4156
|
+
switch (target.kind) {
|
|
4157
|
+
case "wallet": {
|
|
4158
|
+
const walletId = String(target.walletId).trim();
|
|
4159
|
+
if (!walletId) throw new Error("ECDSA durable presignature wallet id is required");
|
|
4160
|
+
deletedCount = await deleteCursorRows(await store.index(SEAMS_WALLET_INDEXES.walletId).openCursor(walletId));
|
|
4161
|
+
break;
|
|
4162
|
+
}
|
|
4163
|
+
case "all":
|
|
4164
|
+
deletedCount = await deleteCursorRows(await store.openCursor());
|
|
4165
|
+
break;
|
|
4166
|
+
}
|
|
4167
|
+
return deletedCount;
|
|
4168
|
+
});
|
|
4169
|
+
}
|
|
4170
|
+
async listActiveWalletCapabilitySubjects(walletIdInput) {
|
|
4171
|
+
const parsedWalletId = parseWalletId(walletIdInput);
|
|
4172
|
+
if (!parsedWalletId.ok) return { kind: "invalid_current_state" };
|
|
4466
4173
|
let rows;
|
|
4467
4174
|
try {
|
|
4468
|
-
rows = await this.manager.runTransaction([
|
|
4175
|
+
rows = await this.manager.runTransaction([POINTER_STORE], "readonly", (context) => readPointerRowsForWallet(context, parsedWalletId.value));
|
|
4469
4176
|
} catch {
|
|
4470
|
-
return {
|
|
4471
|
-
kind: "persistence_unavailable",
|
|
4472
|
-
capability
|
|
4473
|
-
};
|
|
4177
|
+
return { kind: "persistence_unavailable" };
|
|
4474
4178
|
}
|
|
4475
|
-
const
|
|
4476
|
-
|
|
4477
|
-
|
|
4478
|
-
|
|
4479
|
-
|
|
4480
|
-
parsed = parseManifestRow(raw);
|
|
4481
|
-
} catch {
|
|
4482
|
-
return {
|
|
4483
|
-
kind: "corrupt",
|
|
4484
|
-
capability
|
|
4485
|
-
};
|
|
4486
|
-
}
|
|
4487
|
-
const durableMaterial = parsed.activeProof.durableMaterial;
|
|
4488
|
-
if (durableMaterial.durableMaterialRef !== materialRef.durableMaterialRef) continue;
|
|
4489
|
-
if (durableMaterial.bindingDigest !== materialRef.bindingDigest || !mpcMaterialActivationRefsEqual(durableMaterial.materialActivation, materialRef.materialActivation)) {
|
|
4490
|
-
bindingMismatch = true;
|
|
4491
|
-
continue;
|
|
4179
|
+
const selectors = [];
|
|
4180
|
+
try {
|
|
4181
|
+
for (const row of rows) {
|
|
4182
|
+
const pointer = parsePointerRow(row);
|
|
4183
|
+
if (pointer.selector.authority.walletId === parsedWalletId.value) selectors.push(pointer.selector);
|
|
4492
4184
|
}
|
|
4493
|
-
|
|
4185
|
+
} catch {
|
|
4186
|
+
return { kind: "invalid_current_state" };
|
|
4187
|
+
}
|
|
4188
|
+
const subjects = [];
|
|
4189
|
+
for (const selector of selectors) {
|
|
4190
|
+
const lookup = await this.lookup(selector);
|
|
4191
|
+
if (lookup.kind === "persistence_unavailable") return { kind: "persistence_unavailable" };
|
|
4192
|
+
if (lookup.kind !== "active") return { kind: "invalid_current_state" };
|
|
4193
|
+
subjects.push({
|
|
4194
|
+
capability: lookup.manifest.signer.capability,
|
|
4195
|
+
authority: lookup.manifest.signer.authority,
|
|
4196
|
+
ecdsaThresholdKeyId: lookup.manifest.durableMaterial.roleLocalBinding.ecdsaThresholdKeyId
|
|
4197
|
+
});
|
|
4494
4198
|
}
|
|
4495
|
-
if (exact.length > 1) return {
|
|
4496
|
-
kind: "exact_record_conflict",
|
|
4497
|
-
capability
|
|
4498
|
-
};
|
|
4499
|
-
const [matched] = exact;
|
|
4500
|
-
if (!matched) return bindingMismatch ? {
|
|
4501
|
-
kind: "exact_binding_mismatch",
|
|
4502
|
-
capability
|
|
4503
|
-
} : {
|
|
4504
|
-
kind: "missing",
|
|
4505
|
-
subject: "material",
|
|
4506
|
-
capability
|
|
4507
|
-
};
|
|
4508
|
-
if (matched.state === "replaced") return {
|
|
4509
|
-
kind: "retired",
|
|
4510
|
-
manifest: matched.manifest
|
|
4511
|
-
};
|
|
4512
4199
|
return {
|
|
4513
|
-
kind: "
|
|
4514
|
-
|
|
4515
|
-
capability
|
|
4200
|
+
kind: "resolved",
|
|
4201
|
+
subjects
|
|
4516
4202
|
};
|
|
4517
4203
|
}
|
|
4518
|
-
async
|
|
4519
|
-
const
|
|
4520
|
-
|
|
4521
|
-
|
|
4522
|
-
const sealingKey = await this.readMaterialSealingKey(lookup.material.sealingKeyId);
|
|
4523
|
-
if (!sealingKey) throw new Error("active ECDSA material sealing key is missing");
|
|
4524
|
-
return {
|
|
4525
|
-
kind: "active",
|
|
4526
|
-
manifest: lookup.manifest,
|
|
4527
|
-
readyStateBlobB64u: await decryptStateBlob({
|
|
4528
|
-
key: sealingKey,
|
|
4529
|
-
iv12B64u: lookup.material.iv12B64u,
|
|
4530
|
-
ciphertextB64u: lookup.material.ciphertextB64u,
|
|
4531
|
-
aadProjection: readyAadProjection(lookup.manifest)
|
|
4532
|
-
})
|
|
4533
|
-
};
|
|
4534
|
-
} catch (error) {
|
|
4535
|
-
return {
|
|
4536
|
-
kind: "corrupt",
|
|
4537
|
-
selector,
|
|
4538
|
-
corruptionDigest: await persistenceDigest("active_material_open_corrupt", selector, errorMessage(error))
|
|
4539
|
-
};
|
|
4540
|
-
}
|
|
4541
|
-
}
|
|
4542
|
-
async openActiveMaterialByRef(materialRefInput) {
|
|
4543
|
-
let lookup;
|
|
4204
|
+
async listWalletActivationJournalSelectors(walletIdInput) {
|
|
4205
|
+
const parsedWalletId = parseWalletId(walletIdInput);
|
|
4206
|
+
if (!parsedWalletId.ok) return { kind: "invalid_current_state" };
|
|
4207
|
+
let rows;
|
|
4544
4208
|
try {
|
|
4545
|
-
|
|
4209
|
+
rows = await this.manager.runTransaction([JOURNAL_STORE], "readonly", readActivationJournalRows);
|
|
4546
4210
|
} catch {
|
|
4547
|
-
return { kind: "
|
|
4211
|
+
return { kind: "persistence_unavailable" };
|
|
4548
4212
|
}
|
|
4549
|
-
|
|
4550
|
-
|
|
4551
|
-
|
|
4552
|
-
|
|
4553
|
-
|
|
4554
|
-
|
|
4555
|
-
case "retired": return { kind: "missing" };
|
|
4556
|
-
case "exact_binding_mismatch": return { kind: "binding_mismatch" };
|
|
4557
|
-
case "exact_record_conflict":
|
|
4558
|
-
case "corrupt": return { kind: "corrupt" };
|
|
4559
|
-
case "persistence_unavailable": return { kind: "persistence_unavailable" };
|
|
4560
|
-
}
|
|
4561
|
-
return assertNever$1(opened);
|
|
4213
|
+
const selectors = [];
|
|
4214
|
+
try {
|
|
4215
|
+
for (const row of rows) {
|
|
4216
|
+
const signer = parseJournalRow(row).journal.candidate.activationBinding.signer;
|
|
4217
|
+
if (signer.authority.walletId !== parsedWalletId.value) continue;
|
|
4218
|
+
selectors.push(selectorFromSigner(signer));
|
|
4562
4219
|
}
|
|
4563
|
-
|
|
4564
|
-
|
|
4565
|
-
case "exact_binding_mismatch": return { kind: "binding_mismatch" };
|
|
4566
|
-
case "exact_record_conflict":
|
|
4567
|
-
case "corrupt": return { kind: "corrupt" };
|
|
4568
|
-
case "persistence_unavailable": return { kind: "persistence_unavailable" };
|
|
4220
|
+
} catch {
|
|
4221
|
+
return { kind: "invalid_current_state" };
|
|
4569
4222
|
}
|
|
4570
|
-
return
|
|
4223
|
+
return {
|
|
4224
|
+
kind: "resolved",
|
|
4225
|
+
selectors
|
|
4226
|
+
};
|
|
4571
4227
|
}
|
|
4572
|
-
async
|
|
4573
|
-
const selector =
|
|
4228
|
+
async prepareActivation(input) {
|
|
4229
|
+
const selector = selectorFromSigner(input.activationBinding.signer);
|
|
4574
4230
|
try {
|
|
4575
|
-
const
|
|
4576
|
-
const
|
|
4577
|
-
const sealingKey = await this.readMaterialSealingKey(sealingKeyId);
|
|
4578
|
-
if (!sealingKey) throw new Error("ECDSA activation material sealing key is missing");
|
|
4231
|
+
const keyId = parseEcdsaMaterialSealingKeyId(secureRandomId("ecdsa-material-key", 32, "ECDSA activation material sealing key"));
|
|
4232
|
+
const key = await generateMaterialSealingKey();
|
|
4579
4233
|
const encrypted = await encryptStateBlob({
|
|
4580
|
-
key
|
|
4581
|
-
stateBlobB64u: input.
|
|
4582
|
-
aadProjection:
|
|
4583
|
-
});
|
|
4584
|
-
const durableMaterial = buildDurableEcdsaMaterialBinding({
|
|
4585
|
-
activationBinding: parsedJournal.candidate.activationBinding,
|
|
4586
|
-
serverActivation: parsedJournal.serverActivation,
|
|
4587
|
-
routerAbEcdsaDerivationNormalSigning: input.routerAbEcdsaDerivationNormalSigning,
|
|
4588
|
-
roleLocalPublicFacts: buildEcdsaRoleLocalPublicFacts(input.roleLocalPublicFacts),
|
|
4589
|
-
ciphertextDigest: parseEcdsaCiphertextDigest(encrypted.digestB64u),
|
|
4590
|
-
runtimePolicyScope: input.runtimePolicyScope
|
|
4591
|
-
});
|
|
4592
|
-
const readyMaterial = buildValidatedEncryptedEcdsaReadyMaterial({
|
|
4593
|
-
binding: durableMaterial,
|
|
4594
|
-
sealingKeyId,
|
|
4595
|
-
iv12B64u: encrypted.iv12B64u,
|
|
4596
|
-
ciphertextB64u: encrypted.ciphertextB64u
|
|
4234
|
+
key,
|
|
4235
|
+
stateBlobB64u: input.pendingPayloadB64u,
|
|
4236
|
+
aadProjection: pendingAadProjection(input)
|
|
4597
4237
|
});
|
|
4598
|
-
const
|
|
4599
|
-
|
|
4600
|
-
|
|
4601
|
-
|
|
4602
|
-
|
|
4603
|
-
|
|
4238
|
+
const journal = buildPreparedJournalFromEncryptedCandidate({
|
|
4239
|
+
preparation: input,
|
|
4240
|
+
encryptedPending: buildEncryptedEcdsaPendingCandidate({
|
|
4241
|
+
sealingKeyId: keyId,
|
|
4242
|
+
iv12B64u: encrypted.iv12B64u,
|
|
4243
|
+
ciphertextB64u: encrypted.ciphertextB64u,
|
|
4244
|
+
ciphertextDigest: parseEcdsaPendingCiphertextDigest(encrypted.digestB64u)
|
|
4245
|
+
})
|
|
4604
4246
|
});
|
|
4605
|
-
|
|
4606
|
-
|
|
4607
|
-
|
|
4608
|
-
activeManifest
|
|
4247
|
+
await this.manager.runTransaction([SEALING_KEY_STORE, JOURNAL_STORE], "readwrite", async (context) => {
|
|
4248
|
+
await context.store(SEALING_KEY_STORE).add(storedSealingKeyRow(keyId, key));
|
|
4249
|
+
await context.store(JOURNAL_STORE).add(storedJournalRow(journal));
|
|
4609
4250
|
});
|
|
4610
|
-
} catch (error) {
|
|
4611
4251
|
return {
|
|
4612
|
-
kind: "
|
|
4613
|
-
|
|
4614
|
-
corruptionDigest: await persistenceDigest("activation_seal_corrupt", selector, errorMessage(error))
|
|
4615
|
-
};
|
|
4616
|
-
}
|
|
4617
|
-
}
|
|
4618
|
-
async importCommittedWalletCustodyActivation(input) {
|
|
4619
|
-
const serverActivation = buildEcdsaServerActivationCommit({
|
|
4620
|
-
activationBinding: input.activationBinding,
|
|
4621
|
-
serverCommit: input.serverCommit
|
|
4622
|
-
});
|
|
4623
|
-
const selector = {
|
|
4624
|
-
capability: input.activationBinding.signer.capability,
|
|
4625
|
-
authority: input.activationBinding.signer.authority
|
|
4626
|
-
};
|
|
4627
|
-
const existing = await this.lookup(selector);
|
|
4628
|
-
if (existing.kind === "active") {
|
|
4629
|
-
if (activeManifestMatchesWalletCustodyImport({
|
|
4630
|
-
manifest: existing.manifest,
|
|
4631
|
-
activationBinding: input.activationBinding,
|
|
4632
|
-
serverActivation,
|
|
4633
|
-
registeredPublicFacts: input.registeredPublicFacts,
|
|
4634
|
-
roleLocalPublicFacts: input.roleLocalPublicFacts,
|
|
4635
|
-
routerAbEcdsaDerivationNormalSigning: input.routerAbEcdsaDerivationNormalSigning,
|
|
4636
|
-
runtimePolicyScope: input.runtimePolicyScope
|
|
4637
|
-
})) return {
|
|
4638
|
-
kind: "committed",
|
|
4639
|
-
manifest: existing.manifest,
|
|
4640
|
-
material: existing.material
|
|
4252
|
+
kind: "stored",
|
|
4253
|
+
journal
|
|
4641
4254
|
};
|
|
4642
|
-
|
|
4643
|
-
|
|
4644
|
-
|
|
4645
|
-
|
|
4255
|
+
} catch (error) {
|
|
4256
|
+
if (isConstraintError(error)) return await journalConstraintConflict(selector, error);
|
|
4257
|
+
if (error instanceof DOMException && error.name === "OperationError") return {
|
|
4258
|
+
kind: "corrupt",
|
|
4259
|
+
corruptionDigest: await persistenceDigest("journal_encryption_failed", selector, ecdsaManifestErrorMessage(error))
|
|
4646
4260
|
};
|
|
4647
|
-
|
|
4648
|
-
|
|
4649
|
-
|
|
4650
|
-
await this.manager.runTransaction([
|
|
4651
|
-
MANIFEST_STORE,
|
|
4652
|
-
POINTER_STORE,
|
|
4653
|
-
MATERIAL_STORE,
|
|
4654
|
-
SEALING_KEY_STORE
|
|
4655
|
-
], "readwrite", (context) => persistPreparedImportedWalletCustodyEcdsaContinuityInTransaction(context, prepared));
|
|
4656
|
-
return {
|
|
4657
|
-
kind: "committed",
|
|
4658
|
-
manifest: prepared.activeManifest,
|
|
4659
|
-
material: prepared.readyMaterial
|
|
4261
|
+
if (error instanceof Error && !(error instanceof DOMException)) return {
|
|
4262
|
+
kind: "corrupt",
|
|
4263
|
+
corruptionDigest: await persistenceDigest("journal_preparation_invalid", selector, error.message)
|
|
4660
4264
|
};
|
|
4661
|
-
} catch (error) {
|
|
4662
|
-
if (error instanceof FinalizationControlError || isConstraintError(error)) {
|
|
4663
|
-
const replay = await this.lookup(selector);
|
|
4664
|
-
if (replay.kind === "active" && activeManifestMatchesWalletCustodyImport({
|
|
4665
|
-
manifest: replay.manifest,
|
|
4666
|
-
activationBinding: input.activationBinding,
|
|
4667
|
-
serverActivation,
|
|
4668
|
-
registeredPublicFacts: input.registeredPublicFacts,
|
|
4669
|
-
roleLocalPublicFacts: input.roleLocalPublicFacts,
|
|
4670
|
-
routerAbEcdsaDerivationNormalSigning: input.routerAbEcdsaDerivationNormalSigning,
|
|
4671
|
-
runtimePolicyScope: input.runtimePolicyScope
|
|
4672
|
-
})) return {
|
|
4673
|
-
kind: "committed",
|
|
4674
|
-
manifest: replay.manifest,
|
|
4675
|
-
material: replay.material
|
|
4676
|
-
};
|
|
4677
|
-
return {
|
|
4678
|
-
kind: "exact_record_conflict",
|
|
4679
|
-
selector,
|
|
4680
|
-
conflictDigest: await persistenceDigest("custody_import_conflict", selector, errorMessage(error))
|
|
4681
|
-
};
|
|
4682
|
-
}
|
|
4683
4265
|
return {
|
|
4684
|
-
kind: "
|
|
4685
|
-
|
|
4686
|
-
corruptionDigest: await persistenceDigest("custody_import_corrupt", selector, errorMessage(error))
|
|
4266
|
+
kind: "persistence_unavailable",
|
|
4267
|
+
retryCorrelation: retryCorrelation()
|
|
4687
4268
|
};
|
|
4688
4269
|
}
|
|
4689
4270
|
}
|
|
4690
|
-
async
|
|
4691
|
-
|
|
4692
|
-
|
|
4693
|
-
|
|
4694
|
-
|
|
4695
|
-
|
|
4696
|
-
|
|
4697
|
-
|
|
4698
|
-
|
|
4699
|
-
|
|
4700
|
-
|
|
4701
|
-
if (raw === void 0) return null;
|
|
4702
|
-
const parsed = parseSealingKeyRow(raw);
|
|
4703
|
-
if (parsed.keyId !== keyId) throw new Error("ECDSA material sealing key row identity is inconsistent");
|
|
4704
|
-
return parsed.key;
|
|
4271
|
+
async recordServerActivation(input) {
|
|
4272
|
+
let committedJournal;
|
|
4273
|
+
try {
|
|
4274
|
+
committedJournal = buildServerCommittedEcdsaActivationJournal(input);
|
|
4275
|
+
} catch (error) {
|
|
4276
|
+
return {
|
|
4277
|
+
kind: "corrupt",
|
|
4278
|
+
corruptionDigest: await persistenceDigest("server_activation_commit_corrupt", selectorFromJournal(input.preparedJournal), ecdsaManifestErrorMessage(error))
|
|
4279
|
+
};
|
|
4280
|
+
}
|
|
4281
|
+
return await this.putActivationJournal(committedJournal);
|
|
4705
4282
|
}
|
|
4706
|
-
async
|
|
4707
|
-
let
|
|
4283
|
+
async putActivationJournal(journalInput) {
|
|
4284
|
+
let journal;
|
|
4708
4285
|
try {
|
|
4709
|
-
|
|
4286
|
+
journal = parseCommittedJournal(journalInput);
|
|
4287
|
+
if (await ciphertextDigestB64u(journal.candidate.encryptedPending.ciphertextB64u) !== journal.candidate.encryptedPending.ciphertextDigest) throw new Error("ECDSA pending material ciphertext digest is invalid");
|
|
4710
4288
|
} catch (error) {
|
|
4711
|
-
const selector = selectorFromJournal(input.committedJournal);
|
|
4712
4289
|
return {
|
|
4713
4290
|
kind: "corrupt",
|
|
4714
|
-
|
|
4715
|
-
corruptionDigest: await persistenceDigest("finalization_input_corrupt", selector, errorMessage(error))
|
|
4291
|
+
corruptionDigest: await persistenceDigest("journal_input_corrupt", selectorFromJournal(journalInput), ecdsaManifestErrorMessage(error))
|
|
4716
4292
|
};
|
|
4717
4293
|
}
|
|
4718
|
-
const selector =
|
|
4294
|
+
const selector = selectorFromJournal(journal);
|
|
4719
4295
|
try {
|
|
4720
|
-
|
|
4721
|
-
|
|
4722
|
-
if (!sealingKey) throw new FinalizationControlError("corrupt", "ECDSA ready material sealing key is missing");
|
|
4296
|
+
const sealingKey = await this.readMaterialSealingKey(journal.candidate.encryptedPending.sealingKeyId);
|
|
4297
|
+
if (!sealingKey) throw new FinalizationControlError("corrupt", "ECDSA activation journal references a missing sealing key");
|
|
4723
4298
|
await decryptStateBlob({
|
|
4724
4299
|
key: sealingKey,
|
|
4725
|
-
iv12B64u:
|
|
4726
|
-
ciphertextB64u:
|
|
4727
|
-
aadProjection:
|
|
4300
|
+
iv12B64u: journal.candidate.encryptedPending.iv12B64u,
|
|
4301
|
+
ciphertextB64u: journal.candidate.encryptedPending.ciphertextB64u,
|
|
4302
|
+
aadProjection: pendingAadProjection(journal)
|
|
4728
4303
|
});
|
|
4729
|
-
await this.manager.runTransaction([
|
|
4730
|
-
|
|
4731
|
-
|
|
4732
|
-
|
|
4733
|
-
|
|
4734
|
-
|
|
4735
|
-
|
|
4736
|
-
|
|
4737
|
-
|
|
4304
|
+
await this.manager.runTransaction([SEALING_KEY_STORE, JOURNAL_STORE], "readwrite", async (context) => {
|
|
4305
|
+
const sealingKeyRaw = await context.store(SEALING_KEY_STORE).get(journal.candidate.encryptedPending.sealingKeyId);
|
|
4306
|
+
if (sealingKeyRaw === void 0) throw new FinalizationControlError("corrupt", "ECDSA activation journal references a missing sealing key");
|
|
4307
|
+
try {
|
|
4308
|
+
parseSealingKeyRow(sealingKeyRaw);
|
|
4309
|
+
} catch (error) {
|
|
4310
|
+
throw new FinalizationControlError("corrupt", ecdsaManifestErrorMessage(error));
|
|
4311
|
+
}
|
|
4312
|
+
const journalStore = context.store(JOURNAL_STORE);
|
|
4313
|
+
const existingRaw = await journalStore.get(journal.journalId);
|
|
4314
|
+
if (existingRaw === void 0) throw new FinalizationControlError("exact_record_conflict", "ECDSA committed activation is missing its prepared journal");
|
|
4315
|
+
let existing;
|
|
4316
|
+
try {
|
|
4317
|
+
existing = parseJournalRow(existingRaw);
|
|
4318
|
+
} catch (error) {
|
|
4319
|
+
throw new FinalizationControlError("corrupt", ecdsaManifestErrorMessage(error));
|
|
4320
|
+
}
|
|
4321
|
+
if (!selectorsMatch(existing.selector, selector) || existing.journal.kind === "activation_prepared" && !ecdsaActivationCommitJournalsMatch(existing.journal, preparedJournalProjection(journal)) || existing.journal.kind === "server_activation_committed" && !ecdsaActivationCommitJournalsMatch(existing.journal, journal)) throw new FinalizationControlError("exact_record_conflict", "ECDSA activation journal conflicts with its existing correlation");
|
|
4322
|
+
await journalStore.put(storedJournalRow(journal));
|
|
4738
4323
|
});
|
|
4739
4324
|
return {
|
|
4740
|
-
kind: "
|
|
4741
|
-
|
|
4742
|
-
material: input.readyMaterial
|
|
4325
|
+
kind: "stored",
|
|
4326
|
+
journal
|
|
4743
4327
|
};
|
|
4744
4328
|
} catch (error) {
|
|
4745
4329
|
if (error instanceof FinalizationControlError) {
|
|
4746
|
-
const digest = await persistenceDigest(error.kind === "corrupt" ? "
|
|
4330
|
+
const digest = await persistenceDigest(error.kind === "corrupt" ? "journal_corrupt" : "journal_conflict", selector, error.message);
|
|
4747
4331
|
return error.kind === "corrupt" ? {
|
|
4748
4332
|
kind: "corrupt",
|
|
4749
|
-
selector,
|
|
4750
4333
|
corruptionDigest: digest
|
|
4751
4334
|
} : {
|
|
4752
4335
|
kind: "exact_record_conflict",
|
|
4753
|
-
selector,
|
|
4754
4336
|
conflictDigest: digest
|
|
4755
4337
|
};
|
|
4756
4338
|
}
|
|
4757
|
-
if (isConstraintError(error)) return
|
|
4758
|
-
|
|
4759
|
-
|
|
4760
|
-
|
|
4339
|
+
if (isConstraintError(error)) return await journalConstraintConflict(selector, error);
|
|
4340
|
+
if (error instanceof DOMException && error.name === "OperationError") return {
|
|
4341
|
+
kind: "corrupt",
|
|
4342
|
+
corruptionDigest: await persistenceDigest("journal_ciphertext_corrupt", selector, ecdsaManifestErrorMessage(error))
|
|
4761
4343
|
};
|
|
4762
4344
|
return {
|
|
4763
4345
|
kind: "persistence_unavailable",
|
|
4764
|
-
selector,
|
|
4765
4346
|
retryCorrelation: retryCorrelation()
|
|
4766
4347
|
};
|
|
4767
4348
|
}
|
|
4768
4349
|
}
|
|
4769
|
-
|
|
4770
|
-
|
|
4771
|
-
|
|
4772
|
-
|
|
4773
|
-
|
|
4774
|
-
|
|
4775
|
-
|
|
4776
|
-
|
|
4777
|
-
|
|
4778
|
-
|
|
4779
|
-
|
|
4780
|
-
|
|
4781
|
-
|
|
4782
|
-
|
|
4783
|
-
|
|
4784
|
-
|
|
4785
|
-
const signer = buildPreparedEvmFamilySigner({
|
|
4786
|
-
capability: materialActivation.capability,
|
|
4787
|
-
signerId: parseEvmFamilyEcdsaSignerId(secureRandomId("ecdsa-signer", 32, "ECDSA custody signer identities")),
|
|
4788
|
-
authority,
|
|
4789
|
-
scope: buildEcdsaCapabilityScope({ targetMemberships: input.chainTargets }),
|
|
4790
|
-
materialOwner: materialActivation.materialOwner,
|
|
4791
|
-
signingRootId: parseSdkEcdsaDerivationSigningRootId(input.signingRootId),
|
|
4792
|
-
signingRootVersion: parseSdkEcdsaDerivationSigningRootVersion(input.signingRootVersion)
|
|
4793
|
-
});
|
|
4794
|
-
const activationBinding = buildEcdsaActivationBinding({
|
|
4795
|
-
targetManifest: buildEcdsaManifestIdentity({
|
|
4796
|
-
manifestId: parseEcdsaCapabilityManifestId(secureRandomId("ecdsa-manifest", 32, "ECDSA custody manifest identities")),
|
|
4797
|
-
manifestRevision: parseEcdsaCapabilityManifestRevision(1)
|
|
4798
|
-
}),
|
|
4799
|
-
signer,
|
|
4800
|
-
roleLocalBinding,
|
|
4801
|
-
bindingDigest: parseEcdsaRoleLocalBindingDigest(input.publicFacts.contextBinding32B64u),
|
|
4802
|
-
durableMaterialRef: parseEcdsaRoleLocalDurableMaterialRef(secureRandomId("ecdsa-role-local-material", 32, "ECDSA custody material identities"))
|
|
4803
|
-
});
|
|
4804
|
-
const ethereumAddress = input.publicFacts.ethereumAddress;
|
|
4805
|
-
const registeredPublicFacts = buildVerifiedEcdsaPublicFacts({
|
|
4806
|
-
keyHandle: toEvmFamilyEcdsaKeyHandle(input.keyHandle),
|
|
4807
|
-
publicKeyB64u: input.publicFacts.groupPublicKey33B64u,
|
|
4808
|
-
participantIds,
|
|
4809
|
-
thresholdOwnerAddress: ethereumAddress
|
|
4810
|
-
});
|
|
4811
|
-
const roleLocalPublicFacts = buildEcdsaRoleLocalPublicFacts({
|
|
4812
|
-
walletId: authority.walletId,
|
|
4813
|
-
chainTarget: input.chainTargets[0],
|
|
4814
|
-
keyHandle: roleLocalBinding.keyHandle,
|
|
4815
|
-
ecdsaThresholdKeyId: roleLocalBinding.ecdsaThresholdKeyId,
|
|
4816
|
-
signingRootId: signer.signingRootId,
|
|
4817
|
-
signingRootVersion: signer.signingRootVersion,
|
|
4818
|
-
applicationBindingDigestB64u: publicCapability.context.application_binding_digest_b64u,
|
|
4819
|
-
clientParticipantId: participantIds[0],
|
|
4820
|
-
relayerParticipantId: participantIds[1],
|
|
4821
|
-
participantIds,
|
|
4822
|
-
contextBinding32B64u: input.publicFacts.contextBinding32B64u,
|
|
4823
|
-
derivationClientSharePublicKey33B64u: input.publicFacts.derivationClientSharePublicKey33B64u,
|
|
4824
|
-
relayerPublicKey33B64u: input.publicFacts.relayerPublicKey33B64u,
|
|
4825
|
-
groupPublicKey33B64u: input.publicFacts.groupPublicKey33B64u,
|
|
4826
|
-
ethereumAddress,
|
|
4827
|
-
publicCapability
|
|
4828
|
-
});
|
|
4829
|
-
const normalSigning = {
|
|
4830
|
-
kind: "router_ab_ecdsa_derivation_normal_signing_v1",
|
|
4831
|
-
scope: {
|
|
4832
|
-
wallet_id: String(authority.walletId),
|
|
4833
|
-
ecdsa_threshold_key_id: String(roleLocalBinding.ecdsaThresholdKeyId),
|
|
4834
|
-
signing_root_id: String(signer.signingRootId),
|
|
4835
|
-
signing_root_version: String(signer.signingRootVersion),
|
|
4836
|
-
context: receipt.ecdsa_activation.context,
|
|
4837
|
-
public_identity: receipt.ecdsa_activation.public_identity,
|
|
4838
|
-
material_activation: receipt.ecdsa_activation.material_activation,
|
|
4839
|
-
signing_worker: receipt.ecdsa_activation.signing_worker,
|
|
4840
|
-
activation_epoch: receipt.ecdsa_activation.activation_epoch
|
|
4350
|
+
async readActivationJournal(journalIdInput) {
|
|
4351
|
+
const journalId = parseCorrelationId(journalIdInput);
|
|
4352
|
+
try {
|
|
4353
|
+
const raw = await this.manager.runTransaction([JOURNAL_STORE], "readonly", async (context) => await context.store(JOURNAL_STORE).get(journalId));
|
|
4354
|
+
if (raw === void 0) return { kind: "missing" };
|
|
4355
|
+
try {
|
|
4356
|
+
const parsed = parseJournalRow(raw);
|
|
4357
|
+
return parsed.journal.journalId === journalId ? {
|
|
4358
|
+
kind: "found",
|
|
4359
|
+
journal: parsed.journal
|
|
4360
|
+
} : { kind: "corrupt" };
|
|
4361
|
+
} catch {
|
|
4362
|
+
return { kind: "corrupt" };
|
|
4363
|
+
}
|
|
4364
|
+
} catch {
|
|
4365
|
+
return { kind: "persistence_unavailable" };
|
|
4841
4366
|
}
|
|
4842
|
-
};
|
|
4843
|
-
return {
|
|
4844
|
-
activationBinding,
|
|
4845
|
-
serverCommit: {
|
|
4846
|
-
correlationId: receipt.activation_correlation_id,
|
|
4847
|
-
activationRequestDigest: parseDigestB64u(base64UrlEncode(Uint8Array.from(receipt.activation_request_digest.bytes))),
|
|
4848
|
-
serverGeneration: receipt.server_generation,
|
|
4849
|
-
protocolReceipt: receipt
|
|
4850
|
-
},
|
|
4851
|
-
readyStateBlobB64u: input.readyStateBlobB64u,
|
|
4852
|
-
registeredPublicFacts,
|
|
4853
|
-
roleLocalPublicFacts,
|
|
4854
|
-
routerAbEcdsaDerivationNormalSigning: normalSigning,
|
|
4855
|
-
runtimePolicyScope: normalizeRuntimePolicyScope(input.runtimePolicyScope),
|
|
4856
|
-
committedAt: parseIsoTimestamp(new Date(receipt.ecdsa_activation.activated_at_ms).toISOString())
|
|
4857
|
-
};
|
|
4858
|
-
}
|
|
4859
|
-
async function prepareWalletCustodyEcdsaContinuity(input) {
|
|
4860
|
-
return prepareImportedWalletCustodyEcdsaContinuity(buildWalletCustodyEcdsaContinuityImportInput(input));
|
|
4861
|
-
}
|
|
4862
|
-
async function importWalletCustodyEcdsaContinuity(input) {
|
|
4863
|
-
const preparedInput = buildWalletCustodyEcdsaContinuityImportInput(input);
|
|
4864
|
-
const serverActivation = buildEcdsaServerActivationCommit({
|
|
4865
|
-
activationBinding: preparedInput.activationBinding,
|
|
4866
|
-
serverCommit: preparedInput.serverCommit
|
|
4867
|
-
});
|
|
4868
|
-
const selector = {
|
|
4869
|
-
capability: preparedInput.activationBinding.signer.capability,
|
|
4870
|
-
authority: preparedInput.activationBinding.signer.authority
|
|
4871
|
-
};
|
|
4872
|
-
const existing = await input.store.lookup(selector);
|
|
4873
|
-
if (existing.kind === "active") {
|
|
4874
|
-
if (activeManifestMatchesWalletCustodyImport({
|
|
4875
|
-
manifest: existing.manifest,
|
|
4876
|
-
activationBinding: preparedInput.activationBinding,
|
|
4877
|
-
serverActivation,
|
|
4878
|
-
registeredPublicFacts: preparedInput.registeredPublicFacts,
|
|
4879
|
-
roleLocalPublicFacts: preparedInput.roleLocalPublicFacts,
|
|
4880
|
-
routerAbEcdsaDerivationNormalSigning: preparedInput.routerAbEcdsaDerivationNormalSigning,
|
|
4881
|
-
runtimePolicyScope: preparedInput.runtimePolicyScope
|
|
4882
|
-
})) return {
|
|
4883
|
-
kind: "committed",
|
|
4884
|
-
manifest: existing.manifest,
|
|
4885
|
-
material: existing.material
|
|
4886
|
-
};
|
|
4887
|
-
return {
|
|
4888
|
-
kind: "exact_record_conflict",
|
|
4889
|
-
selector,
|
|
4890
|
-
conflictDigest: await persistenceDigest("custody_import_conflict", selector, "ECDSA custody import conflicts with the active manifest")
|
|
4891
|
-
};
|
|
4892
4367
|
}
|
|
4893
|
-
|
|
4894
|
-
|
|
4895
|
-
|
|
4896
|
-
|
|
4897
|
-
|
|
4898
|
-
|
|
4899
|
-
|
|
4900
|
-
|
|
4901
|
-
|
|
4902
|
-
|
|
4903
|
-
|
|
4904
|
-
|
|
4905
|
-
|
|
4906
|
-
|
|
4907
|
-
|
|
4908
|
-
|
|
4909
|
-
|
|
4910
|
-
|
|
4911
|
-
|
|
4912
|
-
|
|
4913
|
-
|
|
4914
|
-
|
|
4915
|
-
|
|
4368
|
+
async discoverActivationJournal(selectorInput) {
|
|
4369
|
+
let selector;
|
|
4370
|
+
try {
|
|
4371
|
+
selector = normalizeSelector(selectorInput);
|
|
4372
|
+
} catch {
|
|
4373
|
+
return { kind: "corrupt" };
|
|
4374
|
+
}
|
|
4375
|
+
try {
|
|
4376
|
+
const raw = await this.manager.runTransaction([JOURNAL_STORE], "readonly", async (context) => await context.store(JOURNAL_STORE).index(SEAMS_WALLET_INDEXES.capabilityWalletAuthority).get(selectorKey(selector)));
|
|
4377
|
+
if (raw === void 0) return { kind: "missing" };
|
|
4378
|
+
try {
|
|
4379
|
+
const parsed = parseJournalRow(raw);
|
|
4380
|
+
return selectorsMatch(parsed.selector, selector) ? {
|
|
4381
|
+
kind: "found",
|
|
4382
|
+
journal: parsed.journal
|
|
4383
|
+
} : { kind: "corrupt" };
|
|
4384
|
+
} catch {
|
|
4385
|
+
return { kind: "corrupt" };
|
|
4386
|
+
}
|
|
4387
|
+
} catch {
|
|
4388
|
+
return { kind: "persistence_unavailable" };
|
|
4389
|
+
}
|
|
4390
|
+
}
|
|
4391
|
+
async cancelPreparedActivation(preparedJournal) {
|
|
4392
|
+
try {
|
|
4393
|
+
return await this.manager.runTransaction([SEALING_KEY_STORE, JOURNAL_STORE], "readwrite", cancelPreparedActivationInTransaction.bind(void 0, preparedJournal));
|
|
4394
|
+
} catch {
|
|
4395
|
+
return { kind: "persistence_unavailable" };
|
|
4396
|
+
}
|
|
4397
|
+
}
|
|
4398
|
+
async openPreparedActivation(journalIdInput) {
|
|
4399
|
+
const read = await this.readActivationJournal(journalIdInput);
|
|
4400
|
+
if (read.kind !== "found") return read;
|
|
4401
|
+
const encryptedPending = read.journal.candidate.encryptedPending;
|
|
4402
|
+
try {
|
|
4403
|
+
if (await ciphertextDigestB64u(encryptedPending.ciphertextB64u) !== encryptedPending.ciphertextDigest) return { kind: "corrupt" };
|
|
4404
|
+
const sealingKey = await this.readMaterialSealingKey(encryptedPending.sealingKeyId);
|
|
4405
|
+
if (!sealingKey) return { kind: "corrupt" };
|
|
4406
|
+
return {
|
|
4407
|
+
kind: "found",
|
|
4408
|
+
journal: read.journal,
|
|
4409
|
+
pendingPayloadB64u: await decryptStateBlob({
|
|
4410
|
+
key: sealingKey,
|
|
4411
|
+
iv12B64u: encryptedPending.iv12B64u,
|
|
4412
|
+
ciphertextB64u: encryptedPending.ciphertextB64u,
|
|
4413
|
+
aadProjection: pendingAadProjection(read.journal)
|
|
4414
|
+
})
|
|
4916
4415
|
};
|
|
4416
|
+
} catch {
|
|
4417
|
+
return { kind: "corrupt" };
|
|
4418
|
+
}
|
|
4419
|
+
}
|
|
4420
|
+
async lookup(selectorInput) {
|
|
4421
|
+
const selector = normalizeSelector(selectorInput);
|
|
4422
|
+
let observation;
|
|
4423
|
+
try {
|
|
4424
|
+
observation = await this.manager.runTransaction([
|
|
4425
|
+
MANIFEST_STORE,
|
|
4426
|
+
POINTER_STORE,
|
|
4427
|
+
MATERIAL_STORE,
|
|
4428
|
+
SEALING_KEY_STORE
|
|
4429
|
+
], "readonly", async (context) => await lookupInTransaction(context, selector));
|
|
4430
|
+
} catch {
|
|
4917
4431
|
return {
|
|
4432
|
+
kind: "persistence_unavailable",
|
|
4433
|
+
selector,
|
|
4434
|
+
retryCorrelation: retryCorrelation()
|
|
4435
|
+
};
|
|
4436
|
+
}
|
|
4437
|
+
switch (observation.kind) {
|
|
4438
|
+
case "active": return observation;
|
|
4439
|
+
case "retired": return observation;
|
|
4440
|
+
case "missing": return {
|
|
4441
|
+
kind: "missing",
|
|
4442
|
+
selector,
|
|
4443
|
+
subject: observation.subject
|
|
4444
|
+
};
|
|
4445
|
+
case "exact_binding_mismatch": return {
|
|
4446
|
+
kind: "exact_binding_mismatch",
|
|
4447
|
+
selector,
|
|
4448
|
+
failureDigest: await persistenceDigest(observation.kind, selector, observation.detail)
|
|
4449
|
+
};
|
|
4450
|
+
case "exact_record_conflict": return {
|
|
4918
4451
|
kind: "exact_record_conflict",
|
|
4919
4452
|
selector,
|
|
4920
|
-
conflictDigest: await persistenceDigest(
|
|
4453
|
+
conflictDigest: await persistenceDigest(observation.kind, selector, observation.detail)
|
|
4454
|
+
};
|
|
4455
|
+
case "corrupt": return {
|
|
4456
|
+
kind: "corrupt",
|
|
4457
|
+
selector,
|
|
4458
|
+
corruptionDigest: await persistenceDigest(observation.kind, selector, observation.detail)
|
|
4921
4459
|
};
|
|
4922
4460
|
}
|
|
4923
|
-
return
|
|
4924
|
-
kind: "corrupt",
|
|
4925
|
-
selector,
|
|
4926
|
-
corruptionDigest: await persistenceDigest("custody_import_corrupt", selector, errorMessage(error))
|
|
4927
|
-
};
|
|
4928
|
-
}
|
|
4929
|
-
}
|
|
4930
|
-
async function assertSharedWalletAuthorityMembership(input) {
|
|
4931
|
-
const repositories = new SeamsWalletRepositories(seamsWalletDB);
|
|
4932
|
-
for (const walletAuthMethodId of input.walletAuthMethodIds) {
|
|
4933
|
-
const authMethod = await repositories.getWalletAuthMethodV2(String(walletAuthMethodId));
|
|
4934
|
-
if (!authMethod || authMethod.status !== "active" || authMethod.walletId !== input.walletId || authMethod.walletAuthorityId !== input.walletAuthorityId) throw new Error(`ECDSA custody continuity method ${String(walletAuthMethodId)} is not an active member of the wallet authority`);
|
|
4461
|
+
return assertNever$1(observation);
|
|
4935
4462
|
}
|
|
4936
|
-
|
|
4937
|
-
|
|
4938
|
-
|
|
4939
|
-
|
|
4940
|
-
|
|
4941
|
-
|
|
4942
|
-
|
|
4943
|
-
* The membership check is the whole safety argument. Copying access to a method
|
|
4944
|
-
* on another wallet authority would hand that credential custody it was never
|
|
4945
|
-
* granted, so both methods are read back and required to be active members of
|
|
4946
|
-
* the exact same authority before anything is opened.
|
|
4947
|
-
*/
|
|
4948
|
-
async function copyWalletCustodyEcdsaContinuityToAuthMethod(input) {
|
|
4949
|
-
if (input.targetAuthority.walletId !== input.walletId || input.targetAuthority.walletAuthMethodId === input.sourceWalletAuthMethodId) throw new Error("ECDSA custody continuity target is invalid");
|
|
4950
|
-
await assertSharedWalletAuthorityMembership({
|
|
4951
|
-
walletId: input.walletId,
|
|
4952
|
-
walletAuthorityId: input.walletAuthorityId,
|
|
4953
|
-
walletAuthMethodIds: [input.sourceWalletAuthMethodId, input.targetAuthority.walletAuthMethodId]
|
|
4954
|
-
});
|
|
4955
|
-
const store = new IndexedDbEcdsaCapabilityManifestStore();
|
|
4956
|
-
const listed = await store.listActiveWalletCapabilitySubjects(input.walletId);
|
|
4957
|
-
if (listed.kind !== "resolved") throw new Error(`ECDSA custody continuity inventory is ${listed.kind}`);
|
|
4958
|
-
if (listed.subjects.length === 0) return;
|
|
4959
|
-
const sources = listed.subjects.filter((subject) => subject.authority.walletAuthMethodId === input.sourceWalletAuthMethodId);
|
|
4960
|
-
if (sources.length === 0) throw new Error(`ECDSA custody continuity found no active capability for source method ${String(input.sourceWalletAuthMethodId)} among [${listed.subjects.map((subject) => String(subject.authority.walletAuthMethodId)).join(", ")}]`);
|
|
4961
|
-
for (const source of sources) {
|
|
4962
|
-
const sourceLookup = await store.lookup(source);
|
|
4963
|
-
if (sourceLookup.kind !== "active") throw new Error(`ECDSA custody continuity source is ${sourceLookup.kind}`);
|
|
4964
|
-
const targetSelector = {
|
|
4965
|
-
capability: source.capability,
|
|
4966
|
-
authority: input.targetAuthority
|
|
4463
|
+
async lookupByMaterialActivation(input) {
|
|
4464
|
+
const walletIdResult = parseWalletId(input.walletId);
|
|
4465
|
+
const materialActivationResult = parseMpcMaterialActivationRef(input.materialActivation);
|
|
4466
|
+
const capability = materialActivationResult.ok ? materialActivationResult.value.capability : input.materialActivation.capability;
|
|
4467
|
+
if (!walletIdResult.ok || !materialActivationResult.ok) return {
|
|
4468
|
+
kind: "corrupt",
|
|
4469
|
+
capability
|
|
4967
4470
|
};
|
|
4968
|
-
const
|
|
4969
|
-
|
|
4970
|
-
|
|
4971
|
-
|
|
4972
|
-
|
|
4973
|
-
|
|
4471
|
+
const walletId = walletIdResult.value;
|
|
4472
|
+
const materialActivation = materialActivationResult.value;
|
|
4473
|
+
let rows;
|
|
4474
|
+
try {
|
|
4475
|
+
rows = await this.manager.runTransaction([POINTER_STORE], "readonly", async (context) => await readPointerRowsForWallet(context, walletId));
|
|
4476
|
+
} catch {
|
|
4477
|
+
return {
|
|
4478
|
+
kind: "persistence_unavailable",
|
|
4479
|
+
capability
|
|
4480
|
+
};
|
|
4974
4481
|
}
|
|
4975
|
-
|
|
4976
|
-
|
|
4977
|
-
|
|
4978
|
-
|
|
4979
|
-
|
|
4980
|
-
const imported = await importWalletCustodyEcdsaContinuity({
|
|
4981
|
-
store,
|
|
4982
|
-
authority: input.targetAuthority,
|
|
4983
|
-
chainTargets: manifest.signer.scope.targetMemberships,
|
|
4984
|
-
walletId: String(input.walletId),
|
|
4985
|
-
keyHandle: publicFacts.keyHandle,
|
|
4986
|
-
ecdsaThresholdKeyId: String(publicFacts.ecdsaThresholdKeyId),
|
|
4987
|
-
signingRootId: String(publicFacts.signingRootId),
|
|
4988
|
-
signingRootVersion: String(publicFacts.signingRootVersion),
|
|
4989
|
-
relayerKeyId: String(manifest.durableMaterial.roleLocalBinding.relayerKeyId),
|
|
4990
|
-
participantIds: publicFacts.participantIds,
|
|
4991
|
-
publicCapability: publicFacts.publicCapability,
|
|
4992
|
-
activationReceipt: manifest.activation.serverActivation.serverActivationReceipt.protocolReceipt,
|
|
4993
|
-
runtimePolicyScope: manifest.durableMaterial.runtimePolicyScope,
|
|
4994
|
-
readyStateBlobB64u: opened.readyStateBlobB64u,
|
|
4995
|
-
publicFacts: {
|
|
4996
|
-
contextBinding32B64u: publicFacts.contextBinding32B64u,
|
|
4997
|
-
derivationClientSharePublicKey33B64u: publicFacts.derivationClientSharePublicKey33B64u,
|
|
4998
|
-
clientVerifyingShare33B64u: publicFacts.publicCapability.public_identity.derivation_client_share_public_key33_b64u,
|
|
4999
|
-
relayerPublicKey33B64u: publicFacts.relayerPublicKey33B64u,
|
|
5000
|
-
groupPublicKey33B64u: publicFacts.groupPublicKey33B64u,
|
|
5001
|
-
ethereumAddress: publicFacts.ethereumAddress,
|
|
5002
|
-
clientShareRetryCounter: publicFacts.publicCapability.public_identity.client_share_retry_counter,
|
|
5003
|
-
relayerShareRetryCounter: publicFacts.publicCapability.public_identity.server_share_retry_counter
|
|
4482
|
+
const selectors = [];
|
|
4483
|
+
try {
|
|
4484
|
+
for (const row of rows) {
|
|
4485
|
+
const pointer = parsePointerRow(row);
|
|
4486
|
+
if (pointer.selector.authority.walletId === walletId) selectors.push(pointer.selector);
|
|
5004
4487
|
}
|
|
5005
|
-
}
|
|
5006
|
-
|
|
5007
|
-
|
|
5008
|
-
|
|
5009
|
-
|
|
5010
|
-
|
|
5011
|
-
|
|
5012
|
-
|
|
5013
|
-
|
|
5014
|
-
|
|
5015
|
-
} catch (error) {
|
|
5016
|
-
return {
|
|
5017
|
-
kind: "corrupt",
|
|
5018
|
-
detail: errorMessage(error)
|
|
4488
|
+
} catch {
|
|
4489
|
+
return {
|
|
4490
|
+
kind: "corrupt",
|
|
4491
|
+
capability
|
|
4492
|
+
};
|
|
4493
|
+
}
|
|
4494
|
+
if (selectors.length === 0) return {
|
|
4495
|
+
kind: "missing",
|
|
4496
|
+
subject: "capability",
|
|
4497
|
+
capability
|
|
5019
4498
|
};
|
|
5020
|
-
|
|
5021
|
-
|
|
5022
|
-
|
|
5023
|
-
|
|
5024
|
-
|
|
5025
|
-
|
|
5026
|
-
|
|
5027
|
-
|
|
5028
|
-
|
|
5029
|
-
|
|
5030
|
-
|
|
5031
|
-
|
|
5032
|
-
|
|
5033
|
-
|
|
5034
|
-
|
|
5035
|
-
|
|
5036
|
-
|
|
4499
|
+
const exact = [];
|
|
4500
|
+
for (const selector of selectors) {
|
|
4501
|
+
const lookup = await this.lookup(selector);
|
|
4502
|
+
switch (lookup.kind) {
|
|
4503
|
+
case "active":
|
|
4504
|
+
if (activeLookupUsesMaterialActivation(lookup, materialActivation)) exact.push(lookup);
|
|
4505
|
+
break;
|
|
4506
|
+
case "retired": break;
|
|
4507
|
+
case "missing": return {
|
|
4508
|
+
kind: "missing",
|
|
4509
|
+
subject: lookup.subject,
|
|
4510
|
+
capability
|
|
4511
|
+
};
|
|
4512
|
+
case "exact_binding_mismatch":
|
|
4513
|
+
case "exact_record_conflict":
|
|
4514
|
+
case "corrupt":
|
|
4515
|
+
case "persistence_unavailable": return {
|
|
4516
|
+
kind: lookup.kind,
|
|
4517
|
+
capability
|
|
4518
|
+
};
|
|
4519
|
+
}
|
|
4520
|
+
}
|
|
4521
|
+
const requested = input.authority;
|
|
4522
|
+
if (requested) {
|
|
4523
|
+
const selected = exact.filter((candidate) => walletAuthAuthorityRefsMatch(candidate.manifest.signer.authority, requested));
|
|
4524
|
+
if (selected.length > 1) return {
|
|
4525
|
+
kind: "exact_record_conflict",
|
|
4526
|
+
capability
|
|
4527
|
+
};
|
|
4528
|
+
return selected[0] ?? {
|
|
4529
|
+
kind: "exact_binding_mismatch",
|
|
4530
|
+
capability
|
|
4531
|
+
};
|
|
4532
|
+
}
|
|
4533
|
+
if (exact.length > 1) return {
|
|
4534
|
+
kind: "ambiguous_authority",
|
|
4535
|
+
capability,
|
|
4536
|
+
authorities: exact.map((candidate) => candidate.manifest.signer.authority)
|
|
4537
|
+
};
|
|
4538
|
+
return exact[0] ?? {
|
|
4539
|
+
kind: "exact_binding_mismatch",
|
|
4540
|
+
capability
|
|
5037
4541
|
};
|
|
5038
4542
|
}
|
|
5039
|
-
|
|
5040
|
-
|
|
5041
|
-
|
|
5042
|
-
|
|
5043
|
-
|
|
5044
|
-
|
|
5045
|
-
|
|
5046
|
-
|
|
5047
|
-
|
|
5048
|
-
|
|
5049
|
-
|
|
5050
|
-
|
|
5051
|
-
|
|
5052
|
-
|
|
5053
|
-
|
|
5054
|
-
|
|
5055
|
-
|
|
5056
|
-
|
|
5057
|
-
|
|
5058
|
-
|
|
5059
|
-
|
|
5060
|
-
|
|
5061
|
-
|
|
5062
|
-
|
|
4543
|
+
async openActiveMaterial(selectorInput) {
|
|
4544
|
+
const selector = normalizeSelector(selectorInput);
|
|
4545
|
+
const lookup = await this.lookup(selector);
|
|
4546
|
+
if (lookup.kind !== "active") return lookup;
|
|
4547
|
+
return await this.openActiveMaterialLookup(lookup);
|
|
4548
|
+
}
|
|
4549
|
+
async lookupByMaterialRef(materialRefInput) {
|
|
4550
|
+
const materialRef = parseEcdsaRoleLocalPersistedMaterialRef(materialRefInput);
|
|
4551
|
+
const capability = materialRef.materialActivation.capability;
|
|
4552
|
+
let raw;
|
|
4553
|
+
try {
|
|
4554
|
+
raw = await this.manager.runTransaction([MATERIAL_STORE], "readonly", async (context) => await context.store(MATERIAL_STORE).get(materialRef.durableMaterialRef));
|
|
4555
|
+
} catch {
|
|
4556
|
+
return {
|
|
4557
|
+
kind: "persistence_unavailable",
|
|
4558
|
+
capability
|
|
4559
|
+
};
|
|
4560
|
+
}
|
|
4561
|
+
if (raw === void 0) return await this.lookupMissingMaterialByRef(materialRef);
|
|
4562
|
+
let locator;
|
|
4563
|
+
try {
|
|
4564
|
+
locator = parseMaterialLocator(raw);
|
|
4565
|
+
} catch {
|
|
4566
|
+
return {
|
|
4567
|
+
kind: "corrupt",
|
|
4568
|
+
capability
|
|
4569
|
+
};
|
|
4570
|
+
}
|
|
4571
|
+
if (locator.durableMaterialRef !== materialRef.durableMaterialRef || locator.bindingDigest !== materialRef.bindingDigest) return {
|
|
4572
|
+
kind: "exact_binding_mismatch",
|
|
4573
|
+
capability
|
|
5063
4574
|
};
|
|
4575
|
+
const lookup = await this.lookup(locator.selector);
|
|
4576
|
+
switch (lookup.kind) {
|
|
4577
|
+
case "active":
|
|
4578
|
+
if (lookup.manifest.durableMaterial.durableMaterialRef !== materialRef.durableMaterialRef || lookup.manifest.durableMaterial.bindingDigest !== materialRef.bindingDigest || !activeLookupUsesMaterialActivation(lookup, materialRef.materialActivation)) return {
|
|
4579
|
+
kind: "exact_binding_mismatch",
|
|
4580
|
+
capability
|
|
4581
|
+
};
|
|
4582
|
+
return lookup;
|
|
4583
|
+
case "retired": return lookup;
|
|
4584
|
+
case "missing": return {
|
|
4585
|
+
kind: "missing",
|
|
4586
|
+
subject: lookup.subject,
|
|
4587
|
+
capability
|
|
4588
|
+
};
|
|
4589
|
+
case "exact_binding_mismatch":
|
|
4590
|
+
case "exact_record_conflict":
|
|
4591
|
+
case "corrupt":
|
|
4592
|
+
case "persistence_unavailable": return {
|
|
4593
|
+
kind: lookup.kind,
|
|
4594
|
+
capability
|
|
4595
|
+
};
|
|
4596
|
+
}
|
|
4597
|
+
return assertNever$1(lookup);
|
|
5064
4598
|
}
|
|
5065
|
-
|
|
5066
|
-
|
|
5067
|
-
|
|
5068
|
-
|
|
5069
|
-
|
|
5070
|
-
|
|
5071
|
-
|
|
5072
|
-
|
|
5073
|
-
|
|
5074
|
-
|
|
5075
|
-
|
|
5076
|
-
|
|
5077
|
-
|
|
5078
|
-
|
|
5079
|
-
|
|
5080
|
-
|
|
5081
|
-
|
|
4599
|
+
async lookupMissingMaterialByRef(materialRef) {
|
|
4600
|
+
const capability = materialRef.materialActivation.capability;
|
|
4601
|
+
let rows;
|
|
4602
|
+
try {
|
|
4603
|
+
rows = await this.manager.runTransaction([MANIFEST_STORE], "readonly", async (context) => await context.store(MANIFEST_STORE).getAll());
|
|
4604
|
+
} catch {
|
|
4605
|
+
return {
|
|
4606
|
+
kind: "persistence_unavailable",
|
|
4607
|
+
capability
|
|
4608
|
+
};
|
|
4609
|
+
}
|
|
4610
|
+
const exact = [];
|
|
4611
|
+
let bindingMismatch = false;
|
|
4612
|
+
for (const raw of rows) {
|
|
4613
|
+
let parsed;
|
|
4614
|
+
try {
|
|
4615
|
+
parsed = parseManifestRow(raw);
|
|
4616
|
+
} catch {
|
|
4617
|
+
return {
|
|
4618
|
+
kind: "corrupt",
|
|
4619
|
+
capability
|
|
4620
|
+
};
|
|
4621
|
+
}
|
|
4622
|
+
const durableMaterial = parsed.activeProof.durableMaterial;
|
|
4623
|
+
if (durableMaterial.durableMaterialRef !== materialRef.durableMaterialRef) continue;
|
|
4624
|
+
if (durableMaterial.bindingDigest !== materialRef.bindingDigest || !mpcMaterialActivationRefsEqual(durableMaterial.materialActivation, materialRef.materialActivation)) {
|
|
4625
|
+
bindingMismatch = true;
|
|
4626
|
+
continue;
|
|
4627
|
+
}
|
|
4628
|
+
exact.push(parsed);
|
|
4629
|
+
}
|
|
4630
|
+
if (exact.length > 1) return {
|
|
4631
|
+
kind: "exact_record_conflict",
|
|
4632
|
+
capability
|
|
5082
4633
|
};
|
|
5083
|
-
|
|
5084
|
-
|
|
5085
|
-
kind: "exact_binding_mismatch",
|
|
5086
|
-
detail: "active ECDSA material does not match its manifest"
|
|
5087
|
-
};
|
|
5088
|
-
const sealingKeyRaw = await context.store(SEALING_KEY_STORE).get(material.sealingKeyId);
|
|
5089
|
-
if (sealingKeyRaw === void 0) return {
|
|
5090
|
-
kind: "missing",
|
|
5091
|
-
subject: "material",
|
|
5092
|
-
detail: "active ECDSA material is missing its sealing key"
|
|
5093
|
-
};
|
|
5094
|
-
try {
|
|
5095
|
-
if (parseSealingKeyRow(sealingKeyRaw).keyId !== material.sealingKeyId) return {
|
|
4634
|
+
const [matched] = exact;
|
|
4635
|
+
if (!matched) return bindingMismatch ? {
|
|
5096
4636
|
kind: "exact_binding_mismatch",
|
|
5097
|
-
|
|
4637
|
+
capability
|
|
4638
|
+
} : {
|
|
4639
|
+
kind: "missing",
|
|
4640
|
+
subject: "material",
|
|
4641
|
+
capability
|
|
4642
|
+
};
|
|
4643
|
+
if (matched.state === "replaced") return {
|
|
4644
|
+
kind: "retired",
|
|
4645
|
+
manifest: matched.manifest
|
|
5098
4646
|
};
|
|
5099
|
-
} catch (error) {
|
|
5100
4647
|
return {
|
|
5101
|
-
kind: "
|
|
5102
|
-
|
|
4648
|
+
kind: "missing",
|
|
4649
|
+
subject: "material",
|
|
4650
|
+
capability
|
|
5103
4651
|
};
|
|
5104
4652
|
}
|
|
5105
|
-
|
|
5106
|
-
|
|
5107
|
-
detail: "active ECDSA material ciphertext digest is invalid"
|
|
5108
|
-
};
|
|
5109
|
-
return {
|
|
5110
|
-
kind: "active",
|
|
5111
|
-
manifest: parsedManifest.manifest,
|
|
5112
|
-
material
|
|
5113
|
-
};
|
|
5114
|
-
}
|
|
5115
|
-
async function lookupWithoutPointer(context, selector) {
|
|
5116
|
-
const rows = await context.store(MANIFEST_STORE).index(SEAMS_WALLET_INDEXES.capabilityWallet).getAll([String(selector.capability), String(selector.authority.walletId)]);
|
|
5117
|
-
if (rows.length === 0) return {
|
|
5118
|
-
kind: "missing",
|
|
5119
|
-
subject: "capability",
|
|
5120
|
-
detail: "no ECDSA capability manifest exists"
|
|
5121
|
-
};
|
|
5122
|
-
let hasDifferentAuthority = false;
|
|
5123
|
-
let hasExactAuthority = false;
|
|
5124
|
-
let hasSameMethodUnderAnotherDigest = false;
|
|
5125
|
-
for (const raw of rows) {
|
|
5126
|
-
let parsed;
|
|
4653
|
+
async openActiveMaterialLookup(lookup) {
|
|
4654
|
+
const selector = selectorFromManifest(lookup.manifest);
|
|
5127
4655
|
try {
|
|
5128
|
-
|
|
4656
|
+
if (await ciphertextDigestB64u(lookup.material.ciphertextB64u) !== lookup.material.binding.ciphertextDigest) throw new Error("active ECDSA material ciphertext digest is invalid");
|
|
4657
|
+
const sealingKey = await this.readMaterialSealingKey(lookup.material.sealingKeyId);
|
|
4658
|
+
if (!sealingKey) throw new Error("active ECDSA material sealing key is missing");
|
|
4659
|
+
return {
|
|
4660
|
+
kind: "active",
|
|
4661
|
+
manifest: lookup.manifest,
|
|
4662
|
+
readyStateBlobB64u: await decryptStateBlob({
|
|
4663
|
+
key: sealingKey,
|
|
4664
|
+
iv12B64u: lookup.material.iv12B64u,
|
|
4665
|
+
ciphertextB64u: lookup.material.ciphertextB64u,
|
|
4666
|
+
aadProjection: readyAadProjection(lookup.manifest)
|
|
4667
|
+
})
|
|
4668
|
+
};
|
|
4669
|
+
} catch (error) {
|
|
4670
|
+
return {
|
|
4671
|
+
kind: "corrupt",
|
|
4672
|
+
selector,
|
|
4673
|
+
corruptionDigest: await persistenceDigest("active_material_open_corrupt", selector, ecdsaManifestErrorMessage(error))
|
|
4674
|
+
};
|
|
4675
|
+
}
|
|
4676
|
+
}
|
|
4677
|
+
async openActiveMaterialByRef(materialRefInput) {
|
|
4678
|
+
let lookup;
|
|
4679
|
+
try {
|
|
4680
|
+
lookup = await this.lookupByMaterialRef(materialRefInput);
|
|
4681
|
+
} catch {
|
|
4682
|
+
return { kind: "corrupt" };
|
|
4683
|
+
}
|
|
4684
|
+
if (lookup.kind !== "active") return materialRefOpenFailure(lookup);
|
|
4685
|
+
const opened = await this.openActiveMaterialLookup(lookup);
|
|
4686
|
+
return opened.kind === "active" ? opened : materialRefOpenFailure(opened);
|
|
4687
|
+
}
|
|
4688
|
+
async sealAndFinalizeActivation(input) {
|
|
4689
|
+
const selector = selectorFromJournal(input.committedJournal);
|
|
4690
|
+
try {
|
|
4691
|
+
const parsedJournal = parseCommittedJournal(input.committedJournal);
|
|
4692
|
+
const sealingKeyId = parsedJournal.candidate.encryptedPending.sealingKeyId;
|
|
4693
|
+
const sealingKey = await this.readMaterialSealingKey(sealingKeyId);
|
|
4694
|
+
if (!sealingKey) throw new Error("ECDSA activation material sealing key is missing");
|
|
4695
|
+
const encrypted = await encryptStateBlob({
|
|
4696
|
+
key: sealingKey,
|
|
4697
|
+
stateBlobB64u: input.readyStateBlobB64u,
|
|
4698
|
+
aadProjection: readyAadProjection(parsedJournal)
|
|
4699
|
+
});
|
|
4700
|
+
const durableMaterial = buildDurableEcdsaMaterialBinding({
|
|
4701
|
+
activationBinding: parsedJournal.candidate.activationBinding,
|
|
4702
|
+
serverActivation: parsedJournal.serverActivation,
|
|
4703
|
+
routerAbEcdsaDerivationNormalSigning: input.routerAbEcdsaDerivationNormalSigning,
|
|
4704
|
+
roleLocalPublicFacts: buildEcdsaRoleLocalPublicFacts(input.roleLocalPublicFacts),
|
|
4705
|
+
ciphertextDigest: parseEcdsaCiphertextDigest(encrypted.digestB64u),
|
|
4706
|
+
runtimePolicyScope: input.runtimePolicyScope
|
|
4707
|
+
});
|
|
4708
|
+
const readyMaterial = buildValidatedEncryptedEcdsaReadyMaterial({
|
|
4709
|
+
binding: durableMaterial,
|
|
4710
|
+
sealingKeyId,
|
|
4711
|
+
iv12B64u: encrypted.iv12B64u,
|
|
4712
|
+
ciphertextB64u: encrypted.ciphertextB64u
|
|
4713
|
+
});
|
|
4714
|
+
const activeManifest = buildActiveEcdsaCapabilityManifest({
|
|
4715
|
+
activationBinding: parsedJournal.candidate.activationBinding,
|
|
4716
|
+
serverActivation: parsedJournal.serverActivation,
|
|
4717
|
+
registeredPublicFacts: input.registeredPublicFacts,
|
|
4718
|
+
durableMaterial,
|
|
4719
|
+
committedAt: input.committedAt
|
|
4720
|
+
});
|
|
4721
|
+
return await this.finalizeActivation({
|
|
4722
|
+
committedJournal: parsedJournal,
|
|
4723
|
+
readyMaterial,
|
|
4724
|
+
activeManifest
|
|
4725
|
+
});
|
|
4726
|
+
} catch (error) {
|
|
4727
|
+
return {
|
|
4728
|
+
kind: "corrupt",
|
|
4729
|
+
selector,
|
|
4730
|
+
corruptionDigest: await persistenceDigest("activation_seal_corrupt", selector, ecdsaManifestErrorMessage(error))
|
|
4731
|
+
};
|
|
4732
|
+
}
|
|
4733
|
+
}
|
|
4734
|
+
async importCommittedWalletCustodyActivation(input) {
|
|
4735
|
+
return await importCommittedActivation(this, input, (prepared) => persistPreparedContinuity(this.manager, prepared));
|
|
4736
|
+
}
|
|
4737
|
+
async persistPreparedWalletCustodyEcdsaContinuity(prepared) {
|
|
4738
|
+
await persistPreparedContinuity(this.manager, prepared);
|
|
4739
|
+
}
|
|
4740
|
+
async readMaterialSealingKey(keyIdInput) {
|
|
4741
|
+
const keyId = parseEcdsaMaterialSealingKeyId(keyIdInput);
|
|
4742
|
+
const raw = await this.manager.runTransaction([SEALING_KEY_STORE], "readonly", async (context) => await context.store(SEALING_KEY_STORE).get(keyId));
|
|
4743
|
+
if (raw === void 0) return null;
|
|
4744
|
+
const parsed = parseSealingKeyRow(raw);
|
|
4745
|
+
if (parsed.keyId !== keyId) throw new Error("ECDSA material sealing key row identity is inconsistent");
|
|
4746
|
+
return parsed.key;
|
|
4747
|
+
}
|
|
4748
|
+
async finalizeActivation(input) {
|
|
4749
|
+
let activeProof;
|
|
4750
|
+
try {
|
|
4751
|
+
activeProof = assertActiveProofInput(input);
|
|
4752
|
+
} catch (error) {
|
|
4753
|
+
const selector = selectorFromJournal(input.committedJournal);
|
|
4754
|
+
return {
|
|
4755
|
+
kind: "corrupt",
|
|
4756
|
+
selector,
|
|
4757
|
+
corruptionDigest: await persistenceDigest("finalization_input_corrupt", selector, ecdsaManifestErrorMessage(error))
|
|
4758
|
+
};
|
|
4759
|
+
}
|
|
4760
|
+
const selector = selectorFromManifest(activeProof.activeManifest);
|
|
4761
|
+
try {
|
|
4762
|
+
if (await ciphertextDigestB64u(input.readyMaterial.ciphertextB64u) !== input.readyMaterial.binding.ciphertextDigest) throw new FinalizationControlError("corrupt", "ECDSA ready material ciphertext digest is invalid");
|
|
4763
|
+
const sealingKey = await this.readMaterialSealingKey(input.readyMaterial.sealingKeyId);
|
|
4764
|
+
if (!sealingKey) throw new FinalizationControlError("corrupt", "ECDSA ready material sealing key is missing");
|
|
4765
|
+
await decryptStateBlob({
|
|
4766
|
+
key: sealingKey,
|
|
4767
|
+
iv12B64u: input.readyMaterial.iv12B64u,
|
|
4768
|
+
ciphertextB64u: input.readyMaterial.ciphertextB64u,
|
|
4769
|
+
aadProjection: readyAadProjection(input.committedJournal)
|
|
4770
|
+
});
|
|
4771
|
+
await this.manager.runTransaction([
|
|
4772
|
+
MANIFEST_STORE,
|
|
4773
|
+
POINTER_STORE,
|
|
4774
|
+
MATERIAL_STORE,
|
|
4775
|
+
JOURNAL_STORE,
|
|
4776
|
+
SEALING_KEY_STORE,
|
|
4777
|
+
PRESIGNATURE_STORE
|
|
4778
|
+
], "readwrite", async (context) => {
|
|
4779
|
+
await finalizeInTransaction(context, input, activeProof, selector);
|
|
4780
|
+
});
|
|
4781
|
+
return {
|
|
4782
|
+
kind: "committed",
|
|
4783
|
+
manifest: activeProof.activeManifest,
|
|
4784
|
+
material: input.readyMaterial
|
|
4785
|
+
};
|
|
5129
4786
|
} catch (error) {
|
|
4787
|
+
if (error instanceof FinalizationControlError) {
|
|
4788
|
+
const digest = await persistenceDigest(error.kind === "corrupt" ? "finalization_corrupt" : "finalization_conflict", selector, error.message);
|
|
4789
|
+
return error.kind === "corrupt" ? {
|
|
4790
|
+
kind: "corrupt",
|
|
4791
|
+
selector,
|
|
4792
|
+
corruptionDigest: digest
|
|
4793
|
+
} : {
|
|
4794
|
+
kind: "exact_record_conflict",
|
|
4795
|
+
selector,
|
|
4796
|
+
conflictDigest: digest
|
|
4797
|
+
};
|
|
4798
|
+
}
|
|
4799
|
+
if (isConstraintError(error)) return {
|
|
4800
|
+
kind: "exact_record_conflict",
|
|
4801
|
+
selector,
|
|
4802
|
+
conflictDigest: await persistenceDigest("finalization_constraint_conflict", selector, ecdsaManifestErrorMessage(error))
|
|
4803
|
+
};
|
|
5130
4804
|
return {
|
|
5131
|
-
kind: "
|
|
5132
|
-
|
|
4805
|
+
kind: "persistence_unavailable",
|
|
4806
|
+
selector,
|
|
4807
|
+
retryCorrelation: retryCorrelation()
|
|
5133
4808
|
};
|
|
5134
4809
|
}
|
|
5135
|
-
if (selectorsMatch(parsed.selector, selector)) {
|
|
5136
|
-
hasExactAuthority = true;
|
|
5137
|
-
continue;
|
|
5138
|
-
}
|
|
5139
|
-
hasDifferentAuthority = true;
|
|
5140
|
-
if (parsed.selector.authority.walletAuthMethodId === selector.authority.walletAuthMethodId) hasSameMethodUnderAnotherDigest = true;
|
|
5141
|
-
}
|
|
5142
|
-
if (hasExactAuthority) return {
|
|
5143
|
-
kind: "exact_record_conflict",
|
|
5144
|
-
detail: "exact ECDSA authority has manifest history without a current pointer"
|
|
5145
|
-
};
|
|
5146
|
-
if (hasSameMethodUnderAnotherDigest) return {
|
|
5147
|
-
kind: "exact_binding_mismatch",
|
|
5148
|
-
detail: "ECDSA capability exists for this method under a different authority digest"
|
|
5149
|
-
};
|
|
5150
|
-
if (hasDifferentAuthority) return {
|
|
5151
|
-
kind: "missing",
|
|
5152
|
-
subject: "capability",
|
|
5153
|
-
detail: "no ECDSA capability manifest exists for this exact authority"
|
|
5154
|
-
};
|
|
5155
|
-
return {
|
|
5156
|
-
kind: "missing",
|
|
5157
|
-
subject: "capability",
|
|
5158
|
-
detail: "no exact ECDSA capability manifest exists"
|
|
5159
|
-
};
|
|
5160
|
-
}
|
|
5161
|
-
async function retireClientPresignaturesForActivationInTransaction(context, walletId, materialActivationId) {
|
|
5162
|
-
const store = context.store(PRESIGNATURE_STORE);
|
|
5163
|
-
const rows = await store.index(SEAMS_WALLET_INDEXES.walletMaterialActivationId).getAll([walletId, materialActivationId]);
|
|
5164
|
-
for (const raw of rows) {
|
|
5165
|
-
const recordId = rawRecordId(raw);
|
|
5166
|
-
if (recordId) await store.delete(recordId);
|
|
5167
4810
|
}
|
|
5168
|
-
}
|
|
4811
|
+
};
|
|
5169
4812
|
async function finalizeInTransaction(context, input, activeProof, selector) {
|
|
5170
4813
|
const journalStore = context.store(JOURNAL_STORE);
|
|
5171
4814
|
const journalRaw = await journalStore.get(input.committedJournal.journalId);
|
|
@@ -5174,7 +4817,7 @@ async function finalizeInTransaction(context, input, activeProof, selector) {
|
|
|
5174
4817
|
try {
|
|
5175
4818
|
persistedJournal = parseJournalRow(journalRaw);
|
|
5176
4819
|
} catch (error) {
|
|
5177
|
-
throw new FinalizationControlError("corrupt",
|
|
4820
|
+
throw new FinalizationControlError("corrupt", ecdsaManifestErrorMessage(error));
|
|
5178
4821
|
}
|
|
5179
4822
|
if (persistedJournal.journal.kind !== "server_activation_committed" || !selectorsMatch(persistedJournal.selector, selector) || !ecdsaActivationCommitJournalsMatch(persistedJournal.journal, input.committedJournal)) throw new FinalizationControlError("exact_record_conflict", "ECDSA finalization journal does not match its committed activation");
|
|
5180
4823
|
const sealingKeyRaw = await context.store(SEALING_KEY_STORE).get(input.readyMaterial.sealingKeyId);
|
|
@@ -5182,13 +4825,13 @@ async function finalizeInTransaction(context, input, activeProof, selector) {
|
|
|
5182
4825
|
try {
|
|
5183
4826
|
parseSealingKeyRow(sealingKeyRaw);
|
|
5184
4827
|
} catch (error) {
|
|
5185
|
-
throw new FinalizationControlError("corrupt",
|
|
4828
|
+
throw new FinalizationControlError("corrupt", ecdsaManifestErrorMessage(error));
|
|
5186
4829
|
}
|
|
5187
4830
|
const pointerStore = context.store(POINTER_STORE);
|
|
5188
4831
|
const pointerRaw = await pointerStore.get(selectorKey(selector));
|
|
5189
4832
|
const expected = input.committedJournal.expectedManifest;
|
|
5190
4833
|
const currentPointer = assertExpectedPointer(expected, pointerRaw, selector);
|
|
5191
|
-
const activeRows = await context
|
|
4834
|
+
const activeRows = await readActiveManifestRows(context, selector);
|
|
5192
4835
|
let previousProof = null;
|
|
5193
4836
|
let previousSealingKeyId = null;
|
|
5194
4837
|
if (currentPointer === null) {
|
|
@@ -5199,7 +4842,7 @@ async function finalizeInTransaction(context, input, activeProof, selector) {
|
|
|
5199
4842
|
try {
|
|
5200
4843
|
previousManifest = parseManifestRow(activeRows[0]);
|
|
5201
4844
|
} catch (error) {
|
|
5202
|
-
throw new FinalizationControlError("corrupt",
|
|
4845
|
+
throw new FinalizationControlError("corrupt", ecdsaManifestErrorMessage(error));
|
|
5203
4846
|
}
|
|
5204
4847
|
if (previousManifest.state !== "active" || previousManifest.manifest.identity.manifestId !== currentPointer.manifestId) throw new FinalizationControlError("exact_record_conflict", "replacement ECDSA activation current manifest does not match its pointer");
|
|
5205
4848
|
if (input.committedJournal.activationCommand.expectedGeneration.kind !== "exact_generation" || previousManifest.activeProof.serverActivation.serverGeneration !== input.committedJournal.activationCommand.expectedGeneration.serverGeneration) throw new FinalizationControlError("exact_record_conflict", "replacement ECDSA activation server generation CAS did not match");
|
|
@@ -5211,7 +4854,7 @@ async function finalizeInTransaction(context, input, activeProof, selector) {
|
|
|
5211
4854
|
if (previousMaterial.sealingKeyId === input.readyMaterial.sealingKeyId) throw new Error("replacement ECDSA activation must use a fresh material sealing key");
|
|
5212
4855
|
previousSealingKeyId = previousMaterial.sealingKeyId;
|
|
5213
4856
|
} catch (error) {
|
|
5214
|
-
throw new FinalizationControlError("corrupt",
|
|
4857
|
+
throw new FinalizationControlError("corrupt", ecdsaManifestErrorMessage(error));
|
|
5215
4858
|
}
|
|
5216
4859
|
previousProof = previousManifest.activeProof;
|
|
5217
4860
|
}
|
|
@@ -5253,19 +4896,11 @@ async function publishEd25519YaoPublicCapabilityReferenceAndLane(store, referenc
|
|
|
5253
4896
|
await store.upsert(identity);
|
|
5254
4897
|
await store.upsertLane(reference);
|
|
5255
4898
|
}
|
|
5256
|
-
function requireRecord(value, label) {
|
|
5257
|
-
if (!value || typeof value !== "object" || Array.isArray(value)) throw new Error(`${label} must be an object`);
|
|
5258
|
-
return value;
|
|
5259
|
-
}
|
|
5260
4899
|
function requireExactKeys(record, expectedKeys, label) {
|
|
5261
4900
|
const actual = Object.keys(record).sort();
|
|
5262
4901
|
const expected = [...expectedKeys].sort();
|
|
5263
4902
|
if (actual.length !== expected.length || actual.some((key, index) => key !== expected[index])) throw new Error(`${label} contains unexpected fields`);
|
|
5264
4903
|
}
|
|
5265
|
-
function requireNonEmptyString(value, label) {
|
|
5266
|
-
if (typeof value !== "string" || value.trim() !== value || value.length === 0) throw new Error(`${label} must be a non-empty normalized string`);
|
|
5267
|
-
return value;
|
|
5268
|
-
}
|
|
5269
4904
|
function requireNonNegativeInteger(value, label) {
|
|
5270
4905
|
if (typeof value !== "number" || !Number.isSafeInteger(value) || value < 0) throw new Error(`${label} must be a non-negative integer`);
|
|
5271
4906
|
return value;
|
|
@@ -5276,7 +4911,7 @@ function requirePositiveInteger(value, label) {
|
|
|
5276
4911
|
}
|
|
5277
4912
|
function parseSigningLaneAuth(value, label) {
|
|
5278
4913
|
const record = requireRecord(value, label);
|
|
5279
|
-
const kind =
|
|
4914
|
+
const kind = requireCanonicalString(record.kind, `${label}.kind`, "must be a non-empty normalized string");
|
|
5280
4915
|
switch (kind) {
|
|
5281
4916
|
case "passkey":
|
|
5282
4917
|
requireExactKeys(record, [
|
|
@@ -5286,14 +4921,14 @@ function parseSigningLaneAuth(value, label) {
|
|
|
5286
4921
|
], label);
|
|
5287
4922
|
return {
|
|
5288
4923
|
kind,
|
|
5289
|
-
rpId: toRpId(
|
|
5290
|
-
credentialIdB64u:
|
|
4924
|
+
rpId: toRpId(requireCanonicalString(record.rpId, `${label}.rpId`, "must be a non-empty normalized string")),
|
|
4925
|
+
credentialIdB64u: requireCanonicalString(record.credentialIdB64u, `${label}.credentialIdB64u`, "must be a non-empty normalized string")
|
|
5291
4926
|
};
|
|
5292
4927
|
case "email_otp":
|
|
5293
4928
|
requireExactKeys(record, ["kind", "providerSubjectId"], label);
|
|
5294
4929
|
return {
|
|
5295
4930
|
kind,
|
|
5296
|
-
providerSubjectId:
|
|
4931
|
+
providerSubjectId: requireCanonicalString(record.providerSubjectId, `${label}.providerSubjectId`, "must be a non-empty normalized string")
|
|
5297
4932
|
};
|
|
5298
4933
|
default: throw new Error(`${label}.kind is invalid`);
|
|
5299
4934
|
}
|
|
@@ -5314,8 +4949,8 @@ function parsePublicCapabilityIdentity(value, label) {
|
|
|
5314
4949
|
const runtimePolicyScope = normalizeThresholdRuntimePolicyScope(record.runtimePolicyScope);
|
|
5315
4950
|
if (!runtimePolicyScope) throw new Error(`${label}.runtimePolicyScope is invalid`);
|
|
5316
4951
|
return {
|
|
5317
|
-
walletId: toWalletId(
|
|
5318
|
-
nearAccountId: toAccountId(
|
|
4952
|
+
walletId: toWalletId(requireCanonicalString(record.walletId, `${label}.walletId`, "must be a non-empty normalized string")),
|
|
4953
|
+
nearAccountId: toAccountId(requireCanonicalString(record.nearAccountId, `${label}.nearAccountId`, "must be a non-empty normalized string")),
|
|
5319
4954
|
thresholdSessionId: thresholdSessionId.value,
|
|
5320
4955
|
runtimePolicyScope,
|
|
5321
4956
|
materialActivation: materialActivation.value
|
|
@@ -5346,7 +4981,7 @@ function parsePublicCapabilityLane(value, label) {
|
|
|
5346
4981
|
if (signerSlot === null) throw new Error(`${label}.signerSlot is invalid`);
|
|
5347
4982
|
const common = {
|
|
5348
4983
|
...base,
|
|
5349
|
-
nearEd25519SigningKeyId: nearEd25519SigningKeyIdFromString(
|
|
4984
|
+
nearEd25519SigningKeyId: nearEd25519SigningKeyIdFromString(requireCanonicalString(record.nearEd25519SigningKeyId, `${label}.nearEd25519SigningKeyId`, "must be a non-empty normalized string")),
|
|
5350
4985
|
signerSlot
|
|
5351
4986
|
};
|
|
5352
4987
|
switch (auth.kind) {
|
|
@@ -5366,7 +5001,7 @@ function parsePublicCapabilityLane(value, label) {
|
|
|
5366
5001
|
function parseEd25519YaoPublicCapabilityReferencesV1(value) {
|
|
5367
5002
|
const record = requireRecord(value, "Ed25519 Yao public capability references");
|
|
5368
5003
|
requireExactKeys(record, ["kind", "identities"], "Ed25519 Yao public capability references");
|
|
5369
|
-
if (record.kind !==
|
|
5004
|
+
if (record.kind !== ED25519_YAO_PUBLIC_CAPABILITY_REFERENCES_KIND_V1) throw new Error("Ed25519 Yao public capability references kind is invalid");
|
|
5370
5005
|
if (!Array.isArray(record.identities)) throw new Error("Ed25519 Yao public capability identities must be an array");
|
|
5371
5006
|
if (record.identities.length > MAX_PUBLIC_CAPABILITY_REFERENCES) throw new Error("Ed25519 Yao public capability reference capacity is exceeded");
|
|
5372
5007
|
const identities = record.identities.map((identity, index) => parsePublicCapabilityIdentity(identity, `Ed25519 Yao public capability identity ${index}`));
|
|
@@ -5379,7 +5014,7 @@ function parseEd25519YaoPublicCapabilityReferencesV1(value) {
|
|
|
5379
5014
|
function parseEd25519YaoPublicCapabilityLanesV1(value) {
|
|
5380
5015
|
const record = requireRecord(value, "Ed25519 Yao public capability lanes");
|
|
5381
5016
|
requireExactKeys(record, ["kind", "lanes"], "Ed25519 Yao public capability lanes");
|
|
5382
|
-
if (record.kind !==
|
|
5017
|
+
if (record.kind !== ED25519_YAO_PUBLIC_CAPABILITY_LANES_KIND_V1) throw new Error("Ed25519 Yao public capability lanes kind is invalid");
|
|
5383
5018
|
if (!Array.isArray(record.lanes)) throw new Error("Ed25519 Yao public capability lanes must be an array");
|
|
5384
5019
|
if (record.lanes.length > MAX_PUBLIC_CAPABILITY_LANES) throw new Error("Ed25519 Yao public capability lane capacity is exceeded");
|
|
5385
5020
|
const lanes = record.lanes.map((lane, index) => parsePublicCapabilityLane(lane, `Ed25519 Yao public capability lane ${index}`));
|
|
@@ -5422,7 +5057,7 @@ function clonePublicCapabilityLane(lane) {
|
|
|
5422
5057
|
}
|
|
5423
5058
|
async function upsertEd25519YaoPublicCapabilityReferenceInTransaction(store, identity) {
|
|
5424
5059
|
const currentRow = await store.get(ED25519_YAO_PUBLIC_CAPABILITY_REFERENCES_APP_STATE_KEY);
|
|
5425
|
-
if (currentRow !== void 0 && currentRow.key !==
|
|
5060
|
+
if (currentRow !== void 0 && currentRow.key !== ED25519_YAO_PUBLIC_CAPABILITY_REFERENCES_APP_STATE_KEY) throw new Error("Ed25519 Yao public capability reference app-state key is inconsistent");
|
|
5426
5061
|
const current = currentRow === void 0 ? emptyPublicCapabilityReferences() : parseEd25519YaoPublicCapabilityReferencesV1(currentRow.value);
|
|
5427
5062
|
const normalized = clonePublicCapabilityIdentity(identity);
|
|
5428
5063
|
const identities = current.identities.filter((candidate) => String(candidate.walletId) !== String(normalized.walletId) || String(candidate.nearAccountId) !== String(normalized.nearAccountId));
|
|
@@ -8313,8 +7948,7 @@ var SeamsWalletRepositories = class {
|
|
|
8313
7948
|
return await this.resolveWalletAuthorityForSelection(walletId, null);
|
|
8314
7949
|
}
|
|
8315
7950
|
/**
|
|
8316
|
-
*
|
|
8317
|
-
* one.
|
|
7951
|
+
* Resolve the authority as a named method rather than as the selected one.
|
|
8318
7952
|
*
|
|
8319
7953
|
* Unlocking a sibling is how an added method comes into use - invariant 9
|
|
8320
7954
|
* makes lock and unlock the route - and the unlock moves the selection to it.
|
|
@@ -8546,6 +8180,55 @@ var SeamsWalletRepositories = class {
|
|
|
8546
8180
|
}));
|
|
8547
8181
|
});
|
|
8548
8182
|
}
|
|
8183
|
+
/**
|
|
8184
|
+
* Adopts the authority the Gateway returned after this wallet added an ECDSA
|
|
8185
|
+
* signer: the local authority extended with exactly the activation this
|
|
8186
|
+
* device made, nothing else changed. The Gateway promoted the wallet's live
|
|
8187
|
+
* Wallet Sessions to it; the next exact status read carries that promotion
|
|
8188
|
+
* into the local session, which keeps its operation credential.
|
|
8189
|
+
*/
|
|
8190
|
+
async adoptAddedEcdsaSignerAuthority(input) {
|
|
8191
|
+
const parsed = parseWalletAuthorityV1(input.authority);
|
|
8192
|
+
if (!parsed.ok || parsed.value.state !== "active" || !await walletAuthorityDigestsMatchV1(parsed.value)) throw new Error("Added ECDSA signer authority is invalid");
|
|
8193
|
+
const next = parsed.value;
|
|
8194
|
+
const nextEcdsa = next.signerActivations.ecdsa;
|
|
8195
|
+
if (!nextEcdsa || !mpcMaterialActivationRefsEqual(nextEcdsa.materialActivation, input.materialActivation)) throw new Error("Added ECDSA signer authority does not carry the activated signer");
|
|
8196
|
+
await this.manager.runTransaction([SEAMS_WALLET_STORES.walletAuthorities], "readwrite", async (ctx) => {
|
|
8197
|
+
const store = ctx.store(SEAMS_WALLET_STORES.walletAuthorities);
|
|
8198
|
+
const current = parseWalletAuthorityStorageRow(await store.get(next.authorityId));
|
|
8199
|
+
if (!current || current.record.state !== "active") throw new Error("Added ECDSA signer has no active local authority to extend");
|
|
8200
|
+
if (current.record.authorityDigestB64u === next.authorityDigestB64u) return;
|
|
8201
|
+
if (!isEcdsaExtensionOfEd25519WalletAuthority(current.record, next)) throw new Error("Added ECDSA signer authority is not an extension of the local authority");
|
|
8202
|
+
await store.put(walletAuthorityStorageRow(next));
|
|
8203
|
+
});
|
|
8204
|
+
}
|
|
8205
|
+
/**
|
|
8206
|
+
* Replaces the exact active Wallet Session with the one a status read
|
|
8207
|
+
* returned, only while it still binds the wallet's stored authority and its
|
|
8208
|
+
* unlocked selection. The status crosses the network, and a publication
|
|
8209
|
+
* can commit meanwhile: deferred NEAR provisioning extends the authority
|
|
8210
|
+
* and rebinds the session in one transaction. Writing the older status
|
|
8211
|
+
* after it would bind the session to an authority digest no longer stored,
|
|
8212
|
+
* and every exact-session check would refuse it until another status read.
|
|
8213
|
+
*/
|
|
8214
|
+
async replaceExactActiveWalletSessionFromStatus(input) {
|
|
8215
|
+
return await this.manager.runTransaction([
|
|
8216
|
+
SEAMS_WALLET_STORES.walletAuthorities,
|
|
8217
|
+
SEAMS_WALLET_STORES.walletSessionAuthorizations,
|
|
8218
|
+
SEAMS_WALLET_STORES.walletSelections
|
|
8219
|
+
], "readwrite", this.replaceExactActiveWalletSessionFromStatusInTransaction.bind(this, input));
|
|
8220
|
+
}
|
|
8221
|
+
async replaceExactActiveWalletSessionFromStatusInTransaction(input, ctx) {
|
|
8222
|
+
const authority = parseWalletAuthorityStorageRow(await ctx.store(SEAMS_WALLET_STORES.walletAuthorities).get(input.active.authorityId));
|
|
8223
|
+
const selection = parseWalletSelectionStorageRow(await ctx.store(SEAMS_WALLET_STORES.walletSelections).get(input.active.walletId));
|
|
8224
|
+
if (!authority || authority.record.state !== "active" || authority.record.walletId !== input.active.walletId || authority.record.authorityDigestB64u !== input.active.authorityDigestB64u || authority.record.revocationEpoch !== input.active.authorityRevocationEpoch || !selection || selection.record.lockState !== "unlocked" || selection.record.walletAuthMethodId !== input.active.authMethodId) return { kind: "superseded" };
|
|
8225
|
+
await replaceExactActiveWalletSessionAuthorizationInTransaction({
|
|
8226
|
+
ctx,
|
|
8227
|
+
active: input.active,
|
|
8228
|
+
operationCredential: input.operationCredential
|
|
8229
|
+
});
|
|
8230
|
+
return { kind: "replaced" };
|
|
8231
|
+
}
|
|
8549
8232
|
async reconcilePendingNearRegistrationAuthority(input) {
|
|
8550
8233
|
const authority = await this.getWalletAuthority(input.walletSession.authorityId);
|
|
8551
8234
|
if (!authority || authority.state !== "active" || !isActiveEcdsaWalletAuthorityV1(authority)) return;
|
|
@@ -10477,6 +10160,12 @@ var UnifiedIndexedDBManager = class {
|
|
|
10477
10160
|
async publishPendingWalletRegistrationCommitAndRetain(input) {
|
|
10478
10161
|
return this.seamsWalletRepositories.publishPendingWalletRegistrationCommitAndRetain(input);
|
|
10479
10162
|
}
|
|
10163
|
+
async adoptAddedEcdsaSignerAuthority(input) {
|
|
10164
|
+
await this.seamsWalletRepositories.adoptAddedEcdsaSignerAuthority(input);
|
|
10165
|
+
}
|
|
10166
|
+
async replaceExactActiveWalletSessionFromStatus(input) {
|
|
10167
|
+
return await this.seamsWalletRepositories.replaceExactActiveWalletSessionFromStatus(input);
|
|
10168
|
+
}
|
|
10480
10169
|
async reconcilePendingNearRegistrationAuthority(input) {
|
|
10481
10170
|
await this.seamsWalletRepositories.reconcilePendingNearRegistrationAuthority(input);
|
|
10482
10171
|
}
|
|
@@ -11262,4 +10951,180 @@ async function loadWalletCustodyEd25519MaterialV1(input) {
|
|
|
11262
10951
|
};
|
|
11263
10952
|
}
|
|
11264
10953
|
//#endregion
|
|
11265
|
-
|
|
10954
|
+
//#region src/core/indexedDB/seamsWalletDB/walletCustodyEcdsaContinuity.ts
|
|
10955
|
+
function buildWalletCustodyEcdsaContinuityImportInput(input) {
|
|
10956
|
+
const authority = parseWalletAuthAuthorityRef(input.authority);
|
|
10957
|
+
if (!authority || String(authority.walletId) !== String(input.walletId)) throw new Error("ECDSA custody import authority is invalid");
|
|
10958
|
+
const publicCapability = parseRouterAbEcdsaDerivationPublicCapabilityV1(input.publicCapability);
|
|
10959
|
+
const receipt = parseRouterAbEcdsaRegistrationActivationReceiptV1(input.activationReceipt);
|
|
10960
|
+
const materialActivation = routerAbMpcMaterialActivationRefFromWire(receipt.ecdsa_activation.material_activation);
|
|
10961
|
+
if (!mpcMaterialActivationRefsEqual(materialActivation, routerAbMpcMaterialActivationRefFromWire(publicCapability.material_activation))) throw new Error("ECDSA custody continuity changed the material activation");
|
|
10962
|
+
const participantIds = [toParticipantId(input.participantIds[0]), toParticipantId(input.participantIds[1])];
|
|
10963
|
+
const roleLocalBinding = buildEcdsaRoleLocalMaterialBinding({
|
|
10964
|
+
keyHandle: parseEcdsaKeyHandle(input.keyHandle),
|
|
10965
|
+
ecdsaThresholdKeyId: parseEcdsaThresholdKeyId(input.ecdsaThresholdKeyId),
|
|
10966
|
+
clientVerifyingPublicKey33B64u: parseEcdsaClientVerifyingPublicKey33B64u(input.publicFacts.derivationClientSharePublicKey33B64u),
|
|
10967
|
+
participantIds,
|
|
10968
|
+
relayerKeyId: parseEcdsaRelayerKeyId(input.relayerKeyId)
|
|
10969
|
+
});
|
|
10970
|
+
const signer = buildPreparedEvmFamilySigner({
|
|
10971
|
+
capability: materialActivation.capability,
|
|
10972
|
+
signerId: parseEvmFamilyEcdsaSignerId(secureRandomId("ecdsa-signer", 32, "ECDSA custody signer identities")),
|
|
10973
|
+
authority,
|
|
10974
|
+
scope: buildEcdsaCapabilityScope({ targetMemberships: input.chainTargets }),
|
|
10975
|
+
materialOwner: materialActivation.materialOwner,
|
|
10976
|
+
signingRootId: parseSdkEcdsaDerivationSigningRootId(input.signingRootId),
|
|
10977
|
+
signingRootVersion: parseSdkEcdsaDerivationSigningRootVersion(input.signingRootVersion)
|
|
10978
|
+
});
|
|
10979
|
+
const activationBinding = buildEcdsaActivationBinding({
|
|
10980
|
+
targetManifest: buildEcdsaManifestIdentity({
|
|
10981
|
+
manifestId: parseEcdsaCapabilityManifestId(secureRandomId("ecdsa-manifest", 32, "ECDSA custody manifest identities")),
|
|
10982
|
+
manifestRevision: parseEcdsaCapabilityManifestRevision(1)
|
|
10983
|
+
}),
|
|
10984
|
+
signer,
|
|
10985
|
+
roleLocalBinding,
|
|
10986
|
+
bindingDigest: parseEcdsaRoleLocalBindingDigest(input.publicFacts.contextBinding32B64u),
|
|
10987
|
+
durableMaterialRef: parseEcdsaRoleLocalDurableMaterialRef(secureRandomId("ecdsa-role-local-material", 32, "ECDSA custody material identities"))
|
|
10988
|
+
});
|
|
10989
|
+
const ethereumAddress = input.publicFacts.ethereumAddress;
|
|
10990
|
+
const registeredPublicFacts = buildVerifiedEcdsaPublicFacts({
|
|
10991
|
+
keyHandle: toEvmFamilyEcdsaKeyHandle(input.keyHandle),
|
|
10992
|
+
publicKeyB64u: input.publicFacts.groupPublicKey33B64u,
|
|
10993
|
+
participantIds,
|
|
10994
|
+
thresholdOwnerAddress: ethereumAddress
|
|
10995
|
+
});
|
|
10996
|
+
const roleLocalPublicFacts = buildEcdsaRoleLocalPublicFacts({
|
|
10997
|
+
walletId: authority.walletId,
|
|
10998
|
+
chainTarget: input.chainTargets[0],
|
|
10999
|
+
keyHandle: roleLocalBinding.keyHandle,
|
|
11000
|
+
ecdsaThresholdKeyId: roleLocalBinding.ecdsaThresholdKeyId,
|
|
11001
|
+
signingRootId: signer.signingRootId,
|
|
11002
|
+
signingRootVersion: signer.signingRootVersion,
|
|
11003
|
+
applicationBindingDigestB64u: publicCapability.context.application_binding_digest_b64u,
|
|
11004
|
+
clientParticipantId: participantIds[0],
|
|
11005
|
+
relayerParticipantId: participantIds[1],
|
|
11006
|
+
participantIds,
|
|
11007
|
+
contextBinding32B64u: input.publicFacts.contextBinding32B64u,
|
|
11008
|
+
derivationClientSharePublicKey33B64u: input.publicFacts.derivationClientSharePublicKey33B64u,
|
|
11009
|
+
relayerPublicKey33B64u: input.publicFacts.relayerPublicKey33B64u,
|
|
11010
|
+
groupPublicKey33B64u: input.publicFacts.groupPublicKey33B64u,
|
|
11011
|
+
ethereumAddress,
|
|
11012
|
+
publicCapability
|
|
11013
|
+
});
|
|
11014
|
+
const normalSigning = {
|
|
11015
|
+
kind: "router_ab_ecdsa_derivation_normal_signing_v1",
|
|
11016
|
+
scope: {
|
|
11017
|
+
wallet_id: String(authority.walletId),
|
|
11018
|
+
ecdsa_threshold_key_id: String(roleLocalBinding.ecdsaThresholdKeyId),
|
|
11019
|
+
signing_root_id: String(signer.signingRootId),
|
|
11020
|
+
signing_root_version: String(signer.signingRootVersion),
|
|
11021
|
+
context: receipt.ecdsa_activation.context,
|
|
11022
|
+
public_identity: receipt.ecdsa_activation.public_identity,
|
|
11023
|
+
material_activation: receipt.ecdsa_activation.material_activation,
|
|
11024
|
+
signing_worker: receipt.ecdsa_activation.signing_worker,
|
|
11025
|
+
activation_epoch: receipt.ecdsa_activation.activation_epoch
|
|
11026
|
+
}
|
|
11027
|
+
};
|
|
11028
|
+
return {
|
|
11029
|
+
activationBinding,
|
|
11030
|
+
serverCommit: {
|
|
11031
|
+
correlationId: receipt.activation_correlation_id,
|
|
11032
|
+
activationRequestDigest: parseDigestB64u(base64UrlEncode(Uint8Array.from(receipt.activation_request_digest.bytes))),
|
|
11033
|
+
serverGeneration: receipt.server_generation,
|
|
11034
|
+
protocolReceipt: receipt
|
|
11035
|
+
},
|
|
11036
|
+
readyStateBlobB64u: input.readyStateBlobB64u,
|
|
11037
|
+
registeredPublicFacts,
|
|
11038
|
+
roleLocalPublicFacts,
|
|
11039
|
+
routerAbEcdsaDerivationNormalSigning: normalSigning,
|
|
11040
|
+
runtimePolicyScope: normalizeRuntimePolicyScope(input.runtimePolicyScope),
|
|
11041
|
+
committedAt: parseIsoTimestamp(new Date(receipt.ecdsa_activation.activated_at_ms).toISOString())
|
|
11042
|
+
};
|
|
11043
|
+
}
|
|
11044
|
+
async function prepareWalletCustodyEcdsaContinuity(input) {
|
|
11045
|
+
return prepareImportedWalletCustodyEcdsaContinuity(buildWalletCustodyEcdsaContinuityImportInput(input));
|
|
11046
|
+
}
|
|
11047
|
+
async function importWalletCustodyEcdsaContinuity(input) {
|
|
11048
|
+
return await importCommittedActivation(input.store, buildWalletCustodyEcdsaContinuityImportInput(input), (prepared) => input.store.persistPreparedWalletCustodyEcdsaContinuity(prepared));
|
|
11049
|
+
}
|
|
11050
|
+
async function assertSharedWalletAuthorityMembership(input) {
|
|
11051
|
+
const repositories = new SeamsWalletRepositories(seamsWalletDB);
|
|
11052
|
+
for (const walletAuthMethodId of input.walletAuthMethodIds) {
|
|
11053
|
+
const authMethod = await repositories.getWalletAuthMethodV2(String(walletAuthMethodId));
|
|
11054
|
+
if (!authMethod || authMethod.status !== "active" || authMethod.walletId !== input.walletId || authMethod.walletAuthorityId !== input.walletAuthorityId) throw new Error(`ECDSA custody continuity method ${String(walletAuthMethodId)} is not an active member of the wallet authority`);
|
|
11055
|
+
}
|
|
11056
|
+
}
|
|
11057
|
+
/**
|
|
11058
|
+
* Give an added auth method its own encrypted access projection over the
|
|
11059
|
+
* activation the wallet already has. The activation is not re-created and the
|
|
11060
|
+
* source credential's authority is not widened; only a second method-bound
|
|
11061
|
+
* record over the same material appears.
|
|
11062
|
+
*
|
|
11063
|
+
* The membership check is the whole safety argument. Copying access to a method
|
|
11064
|
+
* on another wallet authority would hand that credential custody it was never
|
|
11065
|
+
* granted, so both methods are read back and required to be active members of
|
|
11066
|
+
* the exact same authority before anything is opened.
|
|
11067
|
+
*/
|
|
11068
|
+
async function copyWalletCustodyEcdsaContinuityToAuthMethod(input) {
|
|
11069
|
+
if (input.targetAuthority.walletId !== input.walletId || input.targetAuthority.walletAuthMethodId === input.sourceWalletAuthMethodId) throw new Error("ECDSA custody continuity target is invalid");
|
|
11070
|
+
await assertSharedWalletAuthorityMembership({
|
|
11071
|
+
walletId: input.walletId,
|
|
11072
|
+
walletAuthorityId: input.walletAuthorityId,
|
|
11073
|
+
walletAuthMethodIds: [input.sourceWalletAuthMethodId, input.targetAuthority.walletAuthMethodId]
|
|
11074
|
+
});
|
|
11075
|
+
const store = new IndexedDbEcdsaCapabilityManifestStore();
|
|
11076
|
+
const listed = await store.listActiveWalletCapabilitySubjects(input.walletId);
|
|
11077
|
+
if (listed.kind !== "resolved") throw new Error(`ECDSA custody continuity inventory is ${listed.kind}`);
|
|
11078
|
+
if (listed.subjects.length === 0) return;
|
|
11079
|
+
const sources = listed.subjects.filter((subject) => subject.authority.walletAuthMethodId === input.sourceWalletAuthMethodId);
|
|
11080
|
+
if (sources.length === 0) throw new Error(`ECDSA custody continuity found no active capability for source method ${String(input.sourceWalletAuthMethodId)} among [${listed.subjects.map((subject) => String(subject.authority.walletAuthMethodId)).join(", ")}]`);
|
|
11081
|
+
for (const source of sources) {
|
|
11082
|
+
const sourceLookup = await store.lookup(source);
|
|
11083
|
+
if (sourceLookup.kind !== "active") throw new Error(`ECDSA custody continuity source is ${sourceLookup.kind}`);
|
|
11084
|
+
const targetSelector = {
|
|
11085
|
+
capability: source.capability,
|
|
11086
|
+
authority: input.targetAuthority
|
|
11087
|
+
};
|
|
11088
|
+
const targetLookup = await store.lookup(targetSelector);
|
|
11089
|
+
if (targetLookup.kind === "active") {
|
|
11090
|
+
const targetMaterial = targetLookup.manifest.durableMaterial;
|
|
11091
|
+
const sourceMaterial = sourceLookup.manifest.durableMaterial;
|
|
11092
|
+
if (targetMaterial.activationDigest !== sourceMaterial.activationDigest || targetMaterial.bindingDigest !== sourceMaterial.bindingDigest || targetMaterial.roleLocalBinding.ecdsaThresholdKeyId !== sourceMaterial.roleLocalBinding.ecdsaThresholdKeyId || !ecdsaRoleLocalMaterialBindingsMatch(targetMaterial.roleLocalBinding, sourceMaterial.roleLocalBinding) || !ecdsaRoleLocalPublicFactsMatch(targetMaterial.roleLocalPublicFacts, sourceMaterial.roleLocalPublicFacts) || !ecdsaRegisteredPublicFactsMatch(targetLookup.manifest.signer.registeredPublicFacts, sourceLookup.manifest.signer.registeredPublicFacts)) throw new Error("ECDSA custody continuity target conflicts with source material");
|
|
11093
|
+
continue;
|
|
11094
|
+
}
|
|
11095
|
+
if (targetLookup.kind !== "missing") throw new Error(`ECDSA custody continuity target is ${targetLookup.kind}`);
|
|
11096
|
+
const opened = await store.openActiveMaterialLookup(sourceLookup);
|
|
11097
|
+
if (opened.kind !== "active") throw new Error(`ECDSA custody continuity material is ${opened.kind}`);
|
|
11098
|
+
const manifest = opened.manifest;
|
|
11099
|
+
const publicFacts = manifest.durableMaterial.roleLocalPublicFacts;
|
|
11100
|
+
const imported = await importWalletCustodyEcdsaContinuity({
|
|
11101
|
+
store,
|
|
11102
|
+
authority: input.targetAuthority,
|
|
11103
|
+
chainTargets: manifest.signer.scope.targetMemberships,
|
|
11104
|
+
walletId: String(input.walletId),
|
|
11105
|
+
keyHandle: publicFacts.keyHandle,
|
|
11106
|
+
ecdsaThresholdKeyId: String(publicFacts.ecdsaThresholdKeyId),
|
|
11107
|
+
signingRootId: String(publicFacts.signingRootId),
|
|
11108
|
+
signingRootVersion: String(publicFacts.signingRootVersion),
|
|
11109
|
+
relayerKeyId: String(manifest.durableMaterial.roleLocalBinding.relayerKeyId),
|
|
11110
|
+
participantIds: publicFacts.participantIds,
|
|
11111
|
+
publicCapability: publicFacts.publicCapability,
|
|
11112
|
+
activationReceipt: manifest.activation.serverActivation.serverActivationReceipt.protocolReceipt,
|
|
11113
|
+
runtimePolicyScope: manifest.durableMaterial.runtimePolicyScope,
|
|
11114
|
+
readyStateBlobB64u: opened.readyStateBlobB64u,
|
|
11115
|
+
publicFacts: {
|
|
11116
|
+
contextBinding32B64u: publicFacts.contextBinding32B64u,
|
|
11117
|
+
derivationClientSharePublicKey33B64u: publicFacts.derivationClientSharePublicKey33B64u,
|
|
11118
|
+
clientVerifyingShare33B64u: publicFacts.publicCapability.public_identity.derivation_client_share_public_key33_b64u,
|
|
11119
|
+
relayerPublicKey33B64u: publicFacts.relayerPublicKey33B64u,
|
|
11120
|
+
groupPublicKey33B64u: publicFacts.groupPublicKey33B64u,
|
|
11121
|
+
ethereumAddress: publicFacts.ethereumAddress,
|
|
11122
|
+
clientShareRetryCounter: publicFacts.publicCapability.public_identity.client_share_retry_counter,
|
|
11123
|
+
relayerShareRetryCounter: publicFacts.publicCapability.public_identity.server_share_retry_counter
|
|
11124
|
+
}
|
|
11125
|
+
});
|
|
11126
|
+
if (imported.kind !== "committed") throw new Error(`ECDSA custody continuity import is ${imported.kind}`);
|
|
11127
|
+
}
|
|
11128
|
+
}
|
|
11129
|
+
//#endregion
|
|
11130
|
+
export { openWalletAuthorityLinkedSignerMaterialV1 as A, parsePendingWalletRegistrationCommitV1 as C, createRouterAbTraceContextV1 as D, ROUTER_AB_TRACE_ID_HEADER_V1 as E, parseRouterAbTraceContextV1 as O, assertPendingWalletRegistrationIdentity as S, preparePendingNearRegistration as T, ecdsaCapabilityScopesMatch as _, loadWalletCustodyEd25519MaterialV1 as a, walletSessionAuthorizations as b, resolveAccountKeyMaterialTarget as c, configureIndexedDB as d, createIndexedDBNonceLaneCoordinationStore as f, IndexedDbEcdsaCapabilityManifestStore as g, readEmailOtpProviderSubjectForWalletV1 as h, deleteWalletCustodyEd25519MaterialV1 as i, parseWalletAuthorityLinkedSignerMaterialRecordV1 as j, computeWalletEcdsaKeyFactsInventoryChallengeDigestB64u as k, storeAccountKeyMaterial as l, publishEd25519YaoPublicCapabilityReferenceAndLane as m, importWalletCustodyEcdsaContinuity as n, persistWalletCustodyEd25519MaterialV1 as o, IndexedDbEd25519YaoPublicCapabilityReferenceStore as p, prepareWalletCustodyEcdsaContinuity as r, getAccountKeyMaterial as s, copyWalletCustodyEcdsaContinuityToAuthMethod as t, IndexedDBManager as u, runtimePolicyScopesMatch as v, planPendingNearRegistration as w, pendingWalletRecoveryCommitIdentityMatches as x, WalletSessionAuthorizationUpgradeRequiredError as y };
|