@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.
Files changed (1456) hide show
  1. package/dist/.build-inputs.sha256 +1 -1
  2. package/dist/esm/SeamsWeb/SeamsWeb.js +33 -93
  3. package/dist/esm/SeamsWeb/assembly/browserSigningSurfaceAssembly.js +25 -5
  4. package/dist/esm/SeamsWeb/assembly/createBrowserSigningStores.js +1 -2
  5. package/dist/esm/SeamsWeb/operations/auth/login.js +13 -37
  6. package/dist/esm/SeamsWeb/operations/auth/walletUnlockSubject.js +1 -1
  7. package/dist/esm/SeamsWeb/operations/authMethods/addAuthMethodSourceClaim.js +1 -1
  8. package/dist/esm/SeamsWeb/operations/authMethods/emailOtp/addEmailOtp.js +4 -3
  9. package/dist/esm/SeamsWeb/operations/authMethods/emailOtp/challenge.js +1 -1
  10. package/dist/esm/SeamsWeb/operations/authMethods/emailOtp/googleEmailOtpWalletAuthFlow.js +1 -1
  11. package/dist/esm/SeamsWeb/operations/authMethods/emailOtp/localEmailOtpProjection.js +1 -1
  12. package/dist/esm/SeamsWeb/operations/authMethods/emailOtp/registrationOffer.js +6 -15
  13. package/dist/esm/SeamsWeb/operations/authMethods/emailOtp/walletActivation.js +2 -2
  14. package/dist/esm/SeamsWeb/operations/authMethods/passkey/addPasskey.js +5 -4
  15. package/dist/esm/SeamsWeb/operations/authMethods/passkey/exactPasskeyAuthority.js +34 -0
  16. package/dist/esm/SeamsWeb/operations/authMethods/passkey/localPasskeyProjection.js +4 -42
  17. package/dist/esm/SeamsWeb/operations/authMethods/revokeAuthMethod.js +3 -2
  18. package/dist/esm/SeamsWeb/operations/devices/deviceLinkingAuthorityInstallation.js +2 -2
  19. package/dist/esm/SeamsWeb/operations/devices/deviceLinkingEd25519ExportRoot.js +1 -1
  20. package/dist/esm/SeamsWeb/operations/devices/deviceLinkingHttpTransport.js +6 -5
  21. package/dist/esm/SeamsWeb/operations/devices/deviceLinkingOwnerTransport.js +1 -1
  22. package/dist/esm/SeamsWeb/operations/devices/deviceLinkingResume.js +3 -3
  23. package/dist/esm/SeamsWeb/operations/devices/deviceLinkingWorkerChannels.js +2 -1
  24. package/dist/esm/SeamsWeb/operations/devices/linkDevice.js +1 -1671
  25. package/dist/esm/SeamsWeb/operations/devices/linkDeviceFlow.js +1358 -0
  26. package/dist/esm/SeamsWeb/operations/devices/linkDeviceFlowSupport.js +143 -0
  27. package/dist/esm/SeamsWeb/operations/devices/linkDeviceTargetActivation.js +119 -0
  28. package/dist/esm/SeamsWeb/operations/devices/scanDevice.js +1 -1
  29. package/dist/esm/SeamsWeb/operations/devices/walletHostComposition.js +13 -3
  30. package/dist/esm/SeamsWeb/operations/devices/walletHostOwnerAuthority.js +12 -4
  31. package/dist/esm/SeamsWeb/operations/near/index.js +1 -1
  32. package/dist/esm/SeamsWeb/operations/near/signNEP413.js +1 -1
  33. package/dist/esm/SeamsWeb/operations/recovery/accountSync.js +1 -1
  34. package/dist/esm/SeamsWeb/operations/recovery/recoveryWalletBinding.js +1 -1
  35. package/dist/esm/SeamsWeb/operations/recovery/syncAccount.js +7 -7
  36. package/dist/esm/SeamsWeb/operations/recovery/walletRecoveryCommit.js +6 -10
  37. package/dist/esm/SeamsWeb/operations/recovery/walletRecoveryDurablePayload.js +4 -2
  38. package/dist/esm/SeamsWeb/operations/recovery/walletRecoveryRotation.js +2 -2
  39. package/dist/esm/SeamsWeb/operations/registration/pendingEcdsaRegistrationRecovery.js +39 -5
  40. package/dist/esm/SeamsWeb/operations/registration/pendingEcdsaRegistrationRecoveryUnlock.js +21 -42
  41. package/dist/esm/SeamsWeb/operations/registration/pendingEcdsaRegistrationRecoveryValidation.js +3 -3
  42. package/dist/esm/SeamsWeb/operations/registration/pendingRegistrationRecovery.js +2 -2
  43. package/dist/esm/SeamsWeb/operations/registration/registration.js +122 -87
  44. package/dist/esm/SeamsWeb/operations/registration/registrationEd25519Yao.js +37 -6
  45. package/dist/esm/SeamsWeb/operations/registration/registrationSignerSet.js +1 -1
  46. package/dist/esm/SeamsWeb/operations/registration/registrationStrictEcdsa.js +4 -3
  47. package/dist/esm/SeamsWeb/operations/registration/registrationTerminalCommit.js +1 -1
  48. package/dist/esm/SeamsWeb/operations/registration/registrationTiming.js +194 -539
  49. package/dist/esm/SeamsWeb/publicApi/awaitNearReady.js +3 -1
  50. package/dist/esm/SeamsWeb/publicApi/devices.js +1 -1
  51. package/dist/esm/SeamsWeb/signingSurface/BrowserSigningSurface.js +22 -24
  52. package/dist/esm/SeamsWeb/walletIframe/client/progress/on-events-progress-bus.js +0 -4
  53. package/dist/esm/SeamsWeb/walletIframe/client/router.js +4 -3
  54. package/dist/esm/SeamsWeb/walletIframe/client/surface/geometry.js +6 -88
  55. package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/AuthMenuSurface.js +1 -1
  56. package/dist/esm/SeamsWeb/walletIframe/shared/exactSessionState.js +26 -36
  57. package/dist/esm/SeamsWeb/walletIframe/shared/messages.js +3 -1
  58. package/dist/esm/SeamsWeb/walletIframe/shared/transactionReview.js +2 -4
  59. package/dist/esm/advanced.js +3 -2
  60. package/dist/esm/core/accountData/near/keyMaterial.js +2 -2
  61. package/dist/esm/core/config/chains.js +1 -0
  62. package/dist/esm/core/indexedDB/index.js +1 -7
  63. package/dist/esm/core/indexedDB/keyMaterialEnvelope.js +1 -5
  64. package/dist/esm/core/indexedDB/linkedAuthoritySignerMaterial.js +7 -14
  65. package/dist/esm/core/indexedDB/pendingWalletRecoveryCommit.js +2 -2
  66. package/dist/esm/core/indexedDB/pendingWalletRegistrationCommit.js +1 -1
  67. package/dist/esm/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestLookups.js +209 -0
  68. package/dist/esm/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestRecords.js +848 -0
  69. package/dist/esm/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestStore.js +122 -1721
  70. package/dist/esm/core/indexedDB/seamsWalletDB/ecdsaClientPresignatures.js +235 -0
  71. package/dist/esm/core/indexedDB/seamsWalletDB/repositories.js +60 -11
  72. package/dist/esm/core/indexedDB/seamsWalletDB/walletCustodyEcdsaContinuity.js +198 -0
  73. package/dist/esm/core/indexedDB/seamsWalletDB/walletSessionAuthorizationStore.js +1 -1
  74. package/dist/esm/core/indexedDB/unifiedIndexedDBManager.js +6 -0
  75. package/dist/esm/core/indexedDB/walletCustodyEd25519MaterialRecord.js +1 -1
  76. package/dist/esm/core/platform/browser/createBrowserPlatformRuntime.js +0 -43
  77. package/dist/esm/core/rpcClients/near/NearClient.js +20 -215
  78. package/dist/esm/core/rpcClients/near/rpcCalls.js +4 -4
  79. package/dist/esm/core/rpcClients/relayer/routerAbNormalSigning.js +57 -86
  80. package/dist/esm/core/rpcClients/relayer/thresholdEcdsa.js +1 -1
  81. package/dist/esm/core/rpcClients/relayer/walletRecoveryPrepare.js +6 -6
  82. package/dist/esm/core/rpcClients/relayer/walletRecoveryRotate.js +0 -1
  83. package/dist/esm/core/rpcClients/relayer/walletRegistration.js +43 -61
  84. package/dist/esm/core/rpcClients/relayer/walletRegistrationTerminalResponse.js +6 -12
  85. package/dist/esm/core/rpcClients/relayer/walletSessionAuthorizationStatus.js +1 -1
  86. package/dist/esm/core/signingEngine/assembly/ports/evmFamily.js +1 -1
  87. package/dist/esm/core/signingEngine/assembly/ports/stepUpRuntime.js +0 -1
  88. package/dist/esm/core/signingEngine/chains/evm/display/evmTx.js +1 -6
  89. package/dist/esm/core/signingEngine/chains/evm/evmCryptoWasm.js +1 -36
  90. package/dist/esm/core/signingEngine/chains/near/display.js +14 -1
  91. package/dist/esm/core/signingEngine/chains/tempo/display.js +1 -6
  92. package/dist/esm/core/signingEngine/flows/recovery/ecdsaDerivationExport.js +4 -4
  93. package/dist/esm/core/signingEngine/flows/recovery/ecdsaExportFlow.js +7 -8
  94. package/dist/esm/core/signingEngine/flows/recovery/ecdsaExportMaterial.js +2 -2
  95. package/dist/esm/core/signingEngine/flows/recovery/ed25519YaoExportFlow.js +1 -1
  96. package/dist/esm/core/signingEngine/flows/recovery/passkeyEd25519YaoRecovery.js +18 -26
  97. package/dist/esm/core/signingEngine/flows/registration/accountLifecycle.js +245 -503
  98. package/dist/esm/core/signingEngine/flows/registration/services/passkeyEd25519YaoAddSigner.js +8 -11
  99. package/dist/esm/core/signingEngine/flows/signEvmFamily/authPlanning.js +1 -1
  100. package/dist/esm/core/signingEngine/flows/signEvmFamily/ecdsaSelection.js +1 -1
  101. package/dist/esm/core/signingEngine/flows/signEvmFamily/emailOtpSigningSession.js +1 -1
  102. package/dist/esm/core/signingEngine/flows/signEvmFamily/readySecp256k1Material.js +2 -2
  103. package/dist/esm/core/signingEngine/flows/signEvmFamily/signEvmFamily.js +1 -3
  104. package/dist/esm/core/signingEngine/flows/signEvmFamily/signEvmFamilyWithUiConfirmForTempo.js +1 -1
  105. package/dist/esm/core/signingEngine/flows/signEvmFamily/signEvmWithUiConfirm.js +1 -1
  106. package/dist/esm/core/signingEngine/flows/signEvmFamily/signers/secp256k1.js +1 -2
  107. package/dist/esm/core/signingEngine/flows/signEvmFamily/signingFlow.js +4 -4
  108. package/dist/esm/core/signingEngine/flows/signEvmFamily/signingFlowRuntime.js +42 -12
  109. package/dist/esm/core/signingEngine/flows/signNear/shared/ed25519YaoNormalSigning.js +21 -2
  110. package/dist/esm/core/signingEngine/flows/signNear/shared/signatureOnlySigning.js +343 -0
  111. package/dist/esm/core/signingEngine/flows/signNear/signDelegate.js +66 -312
  112. package/dist/esm/core/signingEngine/flows/signNear/signNear.js +44 -48
  113. package/dist/esm/core/signingEngine/flows/signNear/signNep413.js +58 -305
  114. package/dist/esm/core/signingEngine/flows/signNear/signTransactions.js +58 -22
  115. package/dist/esm/core/signingEngine/interfaces/accountAuthMetadata.js +0 -1
  116. package/dist/esm/core/signingEngine/nonce/nearNonceLane.js +0 -29
  117. package/dist/esm/core/signingEngine/routerAb/ecdsaDerivation/presignaturePool.js +14 -148
  118. package/dist/esm/core/signingEngine/routerAb/ecdsaDerivation/signingMaterialRef.js +2 -1
  119. package/dist/esm/core/signingEngine/session/availability/availableSigningLanes.js +4 -4
  120. package/dist/esm/core/signingEngine/session/availability/persistedAvailableSigningLanes.js +2 -2
  121. package/dist/esm/core/signingEngine/session/emailOtp/coordinatorRuntime.js +0 -2
  122. package/dist/esm/core/signingEngine/session/emailOtp/ecdsaLogin.js +2 -2
  123. package/dist/esm/core/signingEngine/session/emailOtp/ecdsaPublication.js +3 -3
  124. package/dist/esm/core/signingEngine/session/emailOtp/ecdsaRecovery.js +3 -3
  125. package/dist/esm/core/signingEngine/session/emailOtp/ecdsaSigningSessionAuthority.js +1 -1
  126. package/dist/esm/core/signingEngine/session/emailOtp/ed25519ExportContext.js +9 -16
  127. package/dist/esm/core/signingEngine/session/emailOtp/exportRecovery.js +2 -2
  128. package/dist/esm/core/signingEngine/session/emailOtp/exportRecoveryRuntime.js +0 -9
  129. package/dist/esm/core/signingEngine/session/emailOtp/publicTypes.js +1 -2
  130. package/dist/esm/core/signingEngine/session/emailOtp/sealedRefreshPolicy.js +0 -28
  131. package/dist/esm/core/signingEngine/session/emailOtp/sealedSessionRegistry.js +1 -1
  132. package/dist/esm/core/signingEngine/session/emailOtp/walletUnlock.js +1 -1
  133. package/dist/esm/core/signingEngine/session/identity/evmFamilyEcdsaIdentity.js +2 -2
  134. package/dist/esm/core/signingEngine/session/identity/exactSigningLaneIdentity.js +1 -1
  135. package/dist/esm/core/signingEngine/session/identity/laneIdentity.js +5 -4
  136. package/dist/esm/core/signingEngine/session/identity/ownerLaneScope.js +1 -1
  137. package/dist/esm/core/signingEngine/session/keyMaterialBrands.js +2 -21
  138. package/dist/esm/core/signingEngine/session/material/activeWalletAuthorityEcdsaRuntime.js +41 -62
  139. package/dist/esm/core/signingEngine/session/material/ecdsaCapabilityManifest.js +6 -2
  140. package/dist/esm/core/signingEngine/session/material/ecdsaSealedRuntime.js +3 -3
  141. package/dist/esm/core/signingEngine/session/material/ecdsaSigningCapability.js +1 -1
  142. package/dist/esm/core/signingEngine/session/material/nearEd25519YaoSigningPreparation.js +1 -1
  143. package/dist/esm/core/signingEngine/session/operationState/authorizationAdmission.js +4 -4
  144. package/dist/esm/core/signingEngine/session/operationState/trace.js +10 -1
  145. package/dist/esm/core/signingEngine/session/passkey/ecdsaKeyFactsInventory.js +1 -1
  146. package/dist/esm/core/signingEngine/session/passkey/ecdsaRecovery.js +1 -1
  147. package/dist/esm/core/signingEngine/session/passkey/ed25519YaoLocalMaterial.js +39 -59
  148. package/dist/esm/core/signingEngine/session/passkey/ed25519YaoRecoveryCapability.js +13 -22
  149. package/dist/esm/core/signingEngine/session/passkey/ed25519YaoWarmRecovery.js +11 -20
  150. package/dist/esm/core/signingEngine/session/passkey/unlockEcdsaWarmupPlanner.js +1 -1
  151. package/dist/esm/core/signingEngine/session/persistence/ecdsaRoleLocalRecords.js +1 -1
  152. package/dist/esm/core/signingEngine/session/persistence/sealedSessionRecords.js +764 -0
  153. package/dist/esm/core/signingEngine/session/persistence/sealedSessionStore.js +42 -862
  154. package/dist/esm/core/signingEngine/session/public.js +1 -1
  155. package/dist/esm/core/signingEngine/session/sealedRecovery/recoveryRecord.js +3 -3
  156. package/dist/esm/core/signingEngine/session/warmCapabilities/capabilityReaderCore.js +1 -1
  157. package/dist/esm/core/signingEngine/session/warmCapabilities/ecdsaLoginPrefill.js +2 -1
  158. package/dist/esm/core/signingEngine/session/warmCapabilities/ecdsaProvisionPlan.js +0 -1
  159. package/dist/esm/core/signingEngine/session/warmCapabilities/ed25519SealedSessionRuntime.js +3 -3
  160. package/dist/esm/core/signingEngine/session/warmCapabilities/routerAbEd25519WalletSessionState.js +1 -1
  161. package/dist/esm/core/signingEngine/session/warmCapabilities/types.js +0 -1
  162. package/dist/esm/core/signingEngine/session/warmCapabilities/volatileWarmMaterialCommands.js +3 -5
  163. package/dist/esm/core/signingEngine/stepUpConfirmation/passkeyPrompt/touchIdPrompt.js +2 -3
  164. package/dist/esm/core/signingEngine/threshold/crypto/ecdsaDerivationClientWasm.js +3 -2
  165. package/dist/esm/core/signingEngine/threshold/crypto/ed25519YaoLaneWasm.js +2 -2
  166. package/dist/esm/core/signingEngine/threshold/ecdsa/activation.js +3 -2
  167. package/dist/esm/core/signingEngine/threshold/ed25519/connectSession.js +1 -1
  168. package/dist/esm/core/signingEngine/threshold/ed25519/walletSession.js +2 -2
  169. package/dist/esm/core/signingEngine/threshold/ed25519/yaoActiveClientRegistry.js +1 -1
  170. package/dist/esm/core/signingEngine/threshold/ed25519/yaoPublicCapabilityReferences.js +12 -19
  171. package/dist/esm/core/signingEngine/threshold/sessionPolicy.js +1 -1
  172. package/dist/esm/core/signingEngine/uiConfirm/PasskeyMpcSessionDurableState.js +4 -3
  173. package/dist/esm/core/signingEngine/uiConfirm/PasskeyMpcSessionManager.js +2 -2
  174. package/dist/esm/core/signingEngine/uiConfirm/handlers/flows/adapters/adapters.js +7 -0
  175. package/dist/esm/core/signingEngine/uiConfirm/handlers/flows/signing.js +9 -16
  176. package/dist/esm/core/signingEngine/uiConfirm/ui/confirm-surface-resize.js +5 -5
  177. package/dist/esm/core/signingEngine/uiConfirm/ui/confirmation-model.js +1 -1
  178. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/ConfirmationModal.js +1 -0
  179. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/TransactionLabel.js +1 -1
  180. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/TransactionReceipt.js +79 -9
  181. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/TransactionReview.js +31 -78
  182. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/confirmation-controller.js +1 -0
  183. package/dist/esm/core/signingEngine/walletCustody/activateEd25519Capability.js +2 -1
  184. package/dist/esm/core/signingEngine/walletCustody/ceremonyActiveClientMetadata.js +3 -4
  185. package/dist/esm/core/signingEngine/walletCustody/emailOtpLink.js +2 -2
  186. package/dist/esm/core/signingEngine/walletCustody/openCustodyCache.js +1 -1
  187. package/dist/esm/core/signingEngine/walletCustody/recoveryReplacementEnvelope.js +2 -1
  188. package/dist/esm/core/signingEngine/walletCustody/unlockedEd25519ExportRootCapability.js +56 -9
  189. package/dist/esm/core/signingEngine/walletCustody/walletRecoveryEcdsa.js +1 -1
  190. package/dist/esm/core/signingEngine/walletCustody/walletRecoveryEd25519.js +2 -2
  191. package/dist/esm/core/signingEngine/walletCustody/walletRecoveryRotation.js +52 -81
  192. package/dist/esm/core/signingEngine/webauthnAuth/credentials/credentialExtensions.js +2 -4
  193. package/dist/esm/core/signingEngine/webauthnAuth/credentials/helpers.js +1 -1
  194. package/dist/esm/core/signingEngine/workerManager/deviceLinkingPorts.js +13 -16
  195. package/dist/esm/core/signingEngine/workerManager/deviceLinkingSourceContribution.js +28 -3
  196. package/dist/esm/core/signingEngine/workerManager/ecdsaClientWorkerChannels.js +3 -1
  197. package/dist/esm/core/signingEngine/workerManager/workerTransport.js +20 -5
  198. package/dist/esm/core/signingEngine/workerManager/workerTypes.js +2 -1
  199. package/dist/esm/core/types/linkDevice.js +2 -3
  200. package/dist/esm/core/types/sdkSentEvents.js +7 -5
  201. package/dist/esm/core/types/signer-worker.js +1 -58
  202. package/dist/esm/index.js +1 -1
  203. package/dist/esm/plugins/vite.js +1 -1
  204. package/dist/esm/react/SeamsWeb/SeamsWeb.js +32 -92
  205. package/dist/esm/react/SeamsWeb/assembly/browserSigningSurfaceAssembly.js +25 -5
  206. package/dist/esm/react/SeamsWeb/assembly/createBrowserSigningStores.js +1 -2
  207. package/dist/esm/react/SeamsWeb/operations/auth/login.js +10 -34
  208. package/dist/esm/react/SeamsWeb/operations/auth/walletAuth.js +1 -1
  209. package/dist/esm/react/SeamsWeb/operations/auth/walletUnlockSubject.js +1 -1
  210. package/dist/esm/react/SeamsWeb/operations/authMethods/addAuthMethodSourceClaim.js +1 -1
  211. package/dist/esm/react/SeamsWeb/operations/authMethods/emailOtp/addEmailOtp.js +4 -3
  212. package/dist/esm/react/SeamsWeb/operations/authMethods/emailOtp/googleEmailOtpWalletAuthFlow.js +1 -1
  213. package/dist/esm/react/SeamsWeb/operations/authMethods/emailOtp/localEmailOtpProjection.js +1 -1
  214. package/dist/esm/react/SeamsWeb/operations/authMethods/emailOtp/registrationOffer.js +6 -15
  215. package/dist/esm/react/SeamsWeb/operations/authMethods/emailOtp/walletActivation.js +1 -1
  216. package/dist/esm/react/SeamsWeb/operations/authMethods/passkey/addPasskey.js +5 -4
  217. package/dist/esm/react/SeamsWeb/operations/authMethods/passkey/exactPasskeyAuthority.js +34 -0
  218. package/dist/esm/react/SeamsWeb/operations/authMethods/passkey/localPasskeyProjection.js +3 -3
  219. package/dist/esm/react/SeamsWeb/operations/authMethods/revokeAuthMethod.js +3 -2
  220. package/dist/esm/react/SeamsWeb/operations/devices/deviceLinkingAuthorityInstallation.js +2 -2
  221. package/dist/esm/react/SeamsWeb/operations/devices/deviceLinkingEd25519ExportRoot.js +1 -1
  222. package/dist/esm/react/SeamsWeb/operations/devices/deviceLinkingHttpTransport.js +5 -4
  223. package/dist/esm/react/SeamsWeb/operations/devices/deviceLinkingOwnerTransport.js +1 -1
  224. package/dist/esm/react/SeamsWeb/operations/devices/deviceLinkingResume.js +3 -3
  225. package/dist/esm/react/SeamsWeb/operations/devices/deviceLinkingWorkerChannels.js +2 -1
  226. package/dist/esm/react/SeamsWeb/operations/devices/linkDevice.js +1 -1671
  227. package/dist/esm/react/SeamsWeb/operations/devices/linkDeviceFlow.js +1358 -0
  228. package/dist/esm/react/SeamsWeb/operations/devices/linkDeviceFlowSupport.js +143 -0
  229. package/dist/esm/react/SeamsWeb/operations/devices/linkDeviceTargetActivation.js +119 -0
  230. package/dist/esm/react/SeamsWeb/operations/devices/walletHostComposition.js +13 -3
  231. package/dist/esm/react/SeamsWeb/operations/devices/walletHostOwnerAuthority.js +11 -3
  232. package/dist/esm/react/SeamsWeb/operations/near/index.js +1 -1
  233. package/dist/esm/react/SeamsWeb/operations/recovery/accountSync.js +1 -1
  234. package/dist/esm/react/SeamsWeb/operations/recovery/recoveryWalletBinding.js +1 -1
  235. package/dist/esm/react/SeamsWeb/operations/recovery/syncAccount.js +5 -5
  236. package/dist/esm/react/SeamsWeb/operations/recovery/walletRecoveryCommit.js +5 -9
  237. package/dist/esm/react/SeamsWeb/operations/recovery/walletRecoveryDurablePayload.js +3 -1
  238. package/dist/esm/react/SeamsWeb/operations/registration/pendingEcdsaRegistrationRecovery.js +38 -4
  239. package/dist/esm/react/SeamsWeb/operations/registration/pendingEcdsaRegistrationRecoveryUnlock.js +20 -41
  240. package/dist/esm/react/SeamsWeb/operations/registration/pendingEcdsaRegistrationRecoveryValidation.js +3 -3
  241. package/dist/esm/react/SeamsWeb/operations/registration/pendingRegistrationRecovery.js +2 -2
  242. package/dist/esm/react/SeamsWeb/operations/registration/registration.js +117 -82
  243. package/dist/esm/react/SeamsWeb/operations/registration/registrationEd25519Yao.js +35 -4
  244. package/dist/esm/react/SeamsWeb/operations/registration/registrationSignerSet.js +1 -1
  245. package/dist/esm/react/SeamsWeb/operations/registration/registrationStrictEcdsa.js +5 -4
  246. package/dist/esm/react/SeamsWeb/operations/registration/registrationTiming.js +194 -539
  247. package/dist/esm/react/SeamsWeb/publicApi/awaitNearReady.js +3 -1
  248. package/dist/esm/react/SeamsWeb/publicApi/devices.js +1 -1
  249. package/dist/esm/react/SeamsWeb/signingSurface/BrowserSigningSurface.js +21 -23
  250. package/dist/esm/react/SeamsWeb/walletIframe/client/progress/on-events-progress-bus.js +0 -4
  251. package/dist/esm/react/SeamsWeb/walletIframe/client/router.js +4 -3
  252. package/dist/esm/react/SeamsWeb/walletIframe/client/surface/geometry.js +8 -5
  253. package/dist/esm/react/SeamsWeb/walletIframe/shared/exactSessionState.js +27 -37
  254. package/dist/esm/react/SeamsWeb/walletIframe/shared/messages.js +3 -1
  255. package/dist/esm/react/SeamsWeb/walletIframe/shared/transactionReview.js +3 -5
  256. package/dist/esm/react/components/AccountMenuButton/AccountMenuDialog.js +93 -0
  257. package/dist/esm/react/components/AccountMenuButton/AuthenticationMethodsModal.js +187 -249
  258. package/dist/esm/react/components/AccountMenuButton/LinkedDevicesModal.js +195 -257
  259. package/dist/esm/react/components/AccountMenuButton/ProfileDropdown.js +1 -1
  260. package/dist/esm/react/components/AccountMenuButton/TransactionSettingsSection.js +1 -1
  261. package/dist/esm/react/components/AccountMenuButton/UserAccountButton.js +1 -1
  262. package/dist/esm/react/components/AccountMenuButton/icons/MoonIcon.js +6 -41
  263. package/dist/esm/react/components/AccountMenuButton/icons/SunIcon.js +43 -78
  264. package/dist/esm/react/components/AccountMenuButton/icons/strokeIcon.js +43 -0
  265. package/dist/esm/react/components/AccountMenuButton/index.js +1 -1
  266. package/dist/esm/react/components/theme/design-tokens.js +0 -1
  267. package/dist/esm/react/core/config/chains.js +1 -0
  268. package/dist/esm/react/core/indexedDB/keyMaterialEnvelope.js +1 -5
  269. package/dist/esm/react/core/indexedDB/linkedAuthoritySignerMaterial.js +7 -14
  270. package/dist/esm/react/core/indexedDB/pendingWalletRecoveryCommit.js +1 -1
  271. package/dist/esm/react/core/indexedDB/pendingWalletRegistrationCommit.js +1 -1
  272. package/dist/esm/react/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestLookups.js +209 -0
  273. package/dist/esm/react/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestRecords.js +848 -0
  274. package/dist/esm/react/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestStore.js +122 -1721
  275. package/dist/esm/react/core/indexedDB/seamsWalletDB/ecdsaClientPresignatures.js +235 -0
  276. package/dist/esm/react/core/indexedDB/seamsWalletDB/repositories.js +56 -7
  277. package/dist/esm/react/core/indexedDB/seamsWalletDB/walletCustodyEcdsaContinuity.js +198 -0
  278. package/dist/esm/react/core/indexedDB/seamsWalletDB/walletSessionAuthorizationStore.js +1 -1
  279. package/dist/esm/react/core/indexedDB/unifiedIndexedDBManager.js +6 -0
  280. package/dist/esm/react/core/indexedDB/walletCustodyEd25519MaterialRecord.js +1 -1
  281. package/dist/esm/react/core/platform/browser/createBrowserPlatformRuntime.js +1 -44
  282. package/dist/esm/react/core/rpcClients/near/NearClient.js +19 -214
  283. package/dist/esm/react/core/rpcClients/near/rpcCalls.js +1 -1
  284. package/dist/esm/react/core/rpcClients/relayer/routerAbNormalSigning.js +56 -85
  285. package/dist/esm/react/core/rpcClients/relayer/walletRecoveryPrepare.js +2 -2
  286. package/dist/esm/react/core/rpcClients/relayer/walletRecoveryRotate.js +0 -1
  287. package/dist/esm/react/core/rpcClients/relayer/walletRegistration.js +40 -58
  288. package/dist/esm/react/core/rpcClients/relayer/walletRegistrationTerminalResponse.js +4 -10
  289. package/dist/esm/react/core/rpcClients/relayer/walletSessionAuthorizationStatus.js +1 -1
  290. package/dist/esm/react/core/signingEngine/assembly/ports/stepUpRuntime.js +0 -1
  291. package/dist/esm/react/core/signingEngine/chains/evm/display/evmTx.js +1 -6
  292. package/dist/esm/react/core/signingEngine/chains/near/display.js +14 -1
  293. package/dist/esm/react/core/signingEngine/chains/tempo/display.js +1 -6
  294. package/dist/esm/react/core/signingEngine/flows/recovery/ecdsaDerivationExport.js +1 -1
  295. package/dist/esm/react/core/signingEngine/flows/recovery/ecdsaExportFlow.js +5 -6
  296. package/dist/esm/react/core/signingEngine/flows/recovery/exportLaneSelection.js +1 -1
  297. package/dist/esm/react/core/signingEngine/flows/recovery/passkeyEd25519YaoRecovery.js +16 -24
  298. package/dist/esm/react/core/signingEngine/flows/registration/accountLifecycle.js +246 -504
  299. package/dist/esm/react/core/signingEngine/flows/registration/services/passkeyEd25519YaoAddSigner.js +7 -10
  300. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/authPlanning.js +1 -1
  301. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/ecdsaLanes.js +1 -1
  302. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/ecdsaSelection.js +1 -1
  303. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/preparedSigning.js +1 -1
  304. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signEvmFamily.js +3 -5
  305. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signEvmFamilyWithUiConfirmForTempo.js +1 -1
  306. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signEvmWithUiConfirm.js +1 -1
  307. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signers/secp256k1.js +1 -2
  308. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signingFlow.js +4 -4
  309. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signingFlowRuntime.js +41 -11
  310. package/dist/esm/react/core/signingEngine/flows/signNear/shared/ed25519YaoNormalSigning.js +20 -1
  311. package/dist/esm/react/core/signingEngine/flows/signNear/shared/signatureOnlySigning.js +343 -0
  312. package/dist/esm/react/core/signingEngine/flows/signNear/shared/signingSessionAuthMode.js +1 -1
  313. package/dist/esm/react/core/signingEngine/flows/signNear/signDelegate.js +66 -312
  314. package/dist/esm/react/core/signingEngine/flows/signNear/signNear.js +45 -49
  315. package/dist/esm/react/core/signingEngine/flows/signNear/signNep413.js +58 -305
  316. package/dist/esm/react/core/signingEngine/flows/signNear/signTransactions.js +59 -23
  317. package/dist/esm/react/core/signingEngine/interfaces/accountAuthMetadata.js +0 -1
  318. package/dist/esm/react/core/signingEngine/nonce/nearNonceLane.js +0 -29
  319. package/dist/esm/react/core/signingEngine/routerAb/ecdsaDerivation/presignaturePool.js +13 -147
  320. package/dist/esm/react/core/signingEngine/routerAb/ecdsaDerivation/signingMaterialRef.js +2 -1
  321. package/dist/esm/react/core/signingEngine/session/SigningSessionCoordinator.js +1 -1
  322. package/dist/esm/react/core/signingEngine/session/availability/availableSigningLanes.js +4 -4
  323. package/dist/esm/react/core/signingEngine/session/availability/persistedAvailableSigningLanes.js +3 -3
  324. package/dist/esm/react/core/signingEngine/session/emailOtp/coordinatorRuntime.js +0 -2
  325. package/dist/esm/react/core/signingEngine/session/emailOtp/ecdsaLogin.js +2 -2
  326. package/dist/esm/react/core/signingEngine/session/emailOtp/ecdsaPublication.js +1 -1
  327. package/dist/esm/react/core/signingEngine/session/emailOtp/ecdsaRecovery.js +2 -2
  328. package/dist/esm/react/core/signingEngine/session/emailOtp/ed25519ExportContext.js +7 -14
  329. package/dist/esm/react/core/signingEngine/session/emailOtp/exportRecovery.js +1 -1
  330. package/dist/esm/react/core/signingEngine/session/emailOtp/exportRecoveryRuntime.js +0 -9
  331. package/dist/esm/react/core/signingEngine/session/emailOtp/publicTypes.js +0 -1
  332. package/dist/esm/react/core/signingEngine/session/emailOtp/sealedRefreshPolicy.js +0 -28
  333. package/dist/esm/react/core/signingEngine/session/emailOtp/sealedSessionRegistry.js +1 -1
  334. package/dist/esm/react/core/signingEngine/session/emailOtp/walletUnlock.js +1 -1
  335. package/dist/esm/react/core/signingEngine/session/emailOtp/workerEnrollment.js +1 -1
  336. package/dist/esm/react/core/signingEngine/session/identity/clientSessionPersistenceState.js +1 -1
  337. package/dist/esm/react/core/signingEngine/session/identity/evmFamilyEcdsaIdentity.js +3 -3
  338. package/dist/esm/react/core/signingEngine/session/identity/exactSigningLaneIdentity.js +2 -2
  339. package/dist/esm/react/core/signingEngine/session/identity/laneIdentity.js +6 -5
  340. package/dist/esm/react/core/signingEngine/session/keyMaterialBrands.js +2 -21
  341. package/dist/esm/react/core/signingEngine/session/material/activeWalletAuthorityEcdsaRuntime.js +39 -60
  342. package/dist/esm/react/core/signingEngine/session/material/ecdsaCapabilityManifest.js +5 -1
  343. package/dist/esm/react/core/signingEngine/session/material/nearEd25519YaoSigningPreparation.js +1 -1
  344. package/dist/esm/react/core/signingEngine/session/operationState/authorizationAdmission.js +4 -4
  345. package/dist/esm/react/core/signingEngine/session/operationState/trace.js +10 -1
  346. package/dist/esm/react/core/signingEngine/session/passkey/ecdsaBootstrap.js +1 -1
  347. package/dist/esm/react/core/signingEngine/session/passkey/ecdsaKeyFactsInventory.js +1 -1
  348. package/dist/esm/react/core/signingEngine/session/passkey/ecdsaRecovery.js +1 -1
  349. package/dist/esm/react/core/signingEngine/session/passkey/ecdsaWarmCapabilityBootstrap.js +1 -1
  350. package/dist/esm/react/core/signingEngine/session/passkey/ed25519SessionProvision.js +1 -1
  351. package/dist/esm/react/core/signingEngine/session/passkey/ed25519YaoLocalMaterial.js +37 -57
  352. package/dist/esm/react/core/signingEngine/session/passkey/ed25519YaoRecoveryCapability.js +12 -21
  353. package/dist/esm/react/core/signingEngine/session/passkey/ed25519YaoWarmRecovery.js +10 -19
  354. package/dist/esm/react/core/signingEngine/session/persistence/sealedSessionRecords.js +764 -0
  355. package/dist/esm/react/core/signingEngine/session/persistence/sealedSessionStore.js +41 -858
  356. package/dist/esm/react/core/signingEngine/session/postconditions/runtimePostconditions.js +1 -1
  357. package/dist/esm/react/core/signingEngine/session/public.js +2 -2
  358. package/dist/esm/react/core/signingEngine/session/warmCapabilities/capabilityReaderCore.js +1 -1
  359. package/dist/esm/react/core/signingEngine/session/warmCapabilities/ecdsaBootstrapPersistence.js +1 -1
  360. package/dist/esm/react/core/signingEngine/session/warmCapabilities/ecdsaLoginPrefill.js +2 -1
  361. package/dist/esm/react/core/signingEngine/session/warmCapabilities/ecdsaProvisionPlan.js +0 -1
  362. package/dist/esm/react/core/signingEngine/session/warmCapabilities/ed25519SealedSessionRuntime.js +3 -3
  363. package/dist/esm/react/core/signingEngine/session/warmCapabilities/nearEd25519CapabilityRehydration.js +1 -1
  364. package/dist/esm/react/core/signingEngine/session/warmCapabilities/sealedRefreshParity.js +1 -1
  365. package/dist/esm/react/core/signingEngine/session/warmCapabilities/types.js +1 -2
  366. package/dist/esm/react/core/signingEngine/session/warmCapabilities/volatileWarmMaterialCommands.js +3 -5
  367. package/dist/esm/react/core/signingEngine/stepUpConfirmation/passkeyPrompt/touchIdPrompt.js +2 -3
  368. package/dist/esm/react/core/signingEngine/threshold/crypto/ecdsaDerivationClientWasm.js +2 -1
  369. package/dist/esm/react/core/signingEngine/threshold/crypto/ed25519YaoLaneWasm.js +2 -2
  370. package/dist/esm/react/core/signingEngine/threshold/ecdsa/activation.js +2 -1
  371. package/dist/esm/react/core/signingEngine/threshold/ecdsa/bootstrapSession.js +1 -1
  372. package/dist/esm/react/core/signingEngine/threshold/ed25519/walletSession.js +1 -1
  373. package/dist/esm/react/core/signingEngine/threshold/ed25519/yaoPublicCapabilityReferences.js +12 -19
  374. package/dist/esm/react/core/signingEngine/uiConfirm/PasskeyMpcSessionDurableState.js +2 -1
  375. package/dist/esm/react/core/signingEngine/uiConfirm/PasskeyMpcSessionManager.js +1 -1
  376. package/dist/esm/react/core/signingEngine/uiConfirm/handlers/flows/adapters/adapters.js +7 -0
  377. package/dist/esm/react/core/signingEngine/uiConfirm/handlers/flows/localOnly.js +1 -1
  378. package/dist/esm/react/core/signingEngine/uiConfirm/handlers/flows/signing.js +9 -16
  379. package/dist/esm/react/core/signingEngine/uiConfirm/ui/confirm-surface-resize.js +5 -5
  380. package/dist/esm/react/core/signingEngine/uiConfirm/ui/confirmation-model.js +1 -1
  381. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/ConfirmationModal.js +1 -0
  382. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/TransactionLabel.js +1 -1
  383. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/TransactionReceipt.js +79 -9
  384. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/TransactionReview.js +31 -78
  385. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/confirmation-controller.js +1 -0
  386. package/dist/esm/react/core/signingEngine/walletCustody/activateEd25519Capability.js +2 -1
  387. package/dist/esm/react/core/signingEngine/walletCustody/ceremonyActiveClientMetadata.js +3 -4
  388. package/dist/esm/react/core/signingEngine/walletCustody/emailOtpLink.js +2 -2
  389. package/dist/esm/react/core/signingEngine/walletCustody/recoveryReplacementEnvelope.js +2 -1
  390. package/dist/esm/react/core/signingEngine/walletCustody/unlockedEd25519ExportRootCapability.js +55 -8
  391. package/dist/esm/react/core/signingEngine/walletCustody/walletRecoveryRotation.js +52 -81
  392. package/dist/esm/react/core/signingEngine/webauthnAuth/credentials/credentialExtensions.js +2 -4
  393. package/dist/esm/react/core/signingEngine/workerManager/deviceLinkingPorts.js +13 -16
  394. package/dist/esm/react/core/signingEngine/workerManager/deviceLinkingSourceContribution.js +29 -4
  395. package/dist/esm/react/core/signingEngine/workerManager/ecdsaClientWorkerChannels.js +4 -2
  396. package/dist/esm/react/core/signingEngine/workerManager/workerTransport.js +20 -5
  397. package/dist/esm/react/core/signingEngine/workerManager/workerTypes.js +2 -1
  398. package/dist/esm/react/core/types/linkDevice.js +2 -3
  399. package/dist/esm/react/core/types/sdkSentEvents.js +7 -5
  400. package/dist/esm/react/hooks/useQRCamera.js +1 -1
  401. package/dist/esm/react/shared-ts/src/authorization/delegatedAuthority.js +1 -1
  402. package/dist/esm/react/shared-ts/src/authorization/operationFingerprint.js +0 -1
  403. package/dist/esm/react/shared-ts/src/authorization/walletAuthority.js +92 -227
  404. package/dist/esm/react/shared-ts/src/authorization/walletCustodyOperation.js +4 -6
  405. package/dist/esm/react/shared-ts/src/device-linking/activeWalletSession.js +70 -1
  406. package/dist/esm/react/shared-ts/src/device-linking/authorityActivation.js +142 -0
  407. package/dist/esm/react/shared-ts/src/device-linking/committedSignerPackages.js +3 -3
  408. package/dist/esm/react/shared-ts/src/device-linking/delegatedActivationPlan.js +3 -1
  409. package/dist/esm/react/shared-ts/src/device-linking/deviceManagement.js +120 -0
  410. package/dist/esm/react/shared-ts/src/device-linking/digests.js +8 -63
  411. package/dist/esm/react/shared-ts/src/device-linking/ed25519ExportRoot.js +3 -1
  412. package/dist/esm/react/shared-ts/src/device-linking/index.js +6 -4
  413. package/dist/esm/react/shared-ts/src/device-linking/parsers.js +546 -1308
  414. package/dist/esm/react/shared-ts/src/device-linking/requestProof.js +3 -3
  415. package/dist/esm/react/shared-ts/src/device-linking/sourceContribution.js +8 -11
  416. package/dist/esm/react/shared-ts/src/device-linking/walletSessionCredentialDelivery.js +7 -7
  417. package/dist/esm/react/shared-ts/src/device-linking/wireFields.js +59 -0
  418. package/dist/esm/react/shared-ts/src/near/nearClient.js +252 -0
  419. package/dist/esm/react/shared-ts/src/passkey-custody/custodyEnvelope.js +6 -4
  420. package/dist/esm/react/shared-ts/src/passkey-custody/custodySecretBinding.js +6 -4
  421. package/dist/esm/react/shared-ts/src/passkey-custody/primitives.js +5 -39
  422. package/dist/esm/react/shared-ts/src/signing-lanes/index.js +4 -3
  423. package/dist/esm/react/shared-ts/src/signing-lanes/ownerContinuity.js +6 -1
  424. package/dist/esm/react/shared-ts/src/signing-lanes/participantDigest.js +2 -0
  425. package/dist/esm/react/shared-ts/src/signing-lanes/participants.js +2 -5
  426. package/dist/esm/react/shared-ts/src/signing-lanes/recordParsers.js +7 -7
  427. package/dist/esm/react/shared-ts/src/signing-lanes/rotationDigests.js +2 -0
  428. package/dist/esm/react/shared-ts/src/signing-lanes/rotationParsers.js +3 -3
  429. package/dist/esm/react/shared-ts/src/signing-lanes/rotationProtocolParsers.js +8 -0
  430. package/dist/esm/react/shared-ts/src/signing-lanes/rotationWireFields.js +3 -0
  431. package/dist/esm/react/shared-ts/src/threshold/ed25519OperationFingerprint.js +34 -42
  432. package/dist/esm/react/shared-ts/src/threshold/keyMaterialBrands.js +25 -0
  433. package/dist/esm/react/shared-ts/src/threshold/secp256k1.js +1 -2
  434. package/dist/esm/react/shared-ts/src/utils/addAuthMethodRegistration.js +3 -4
  435. package/dist/esm/react/shared-ts/src/utils/canonicalPrimitives.js +8 -1
  436. package/dist/esm/react/shared-ts/src/utils/digestEncoding.js +63 -0
  437. package/dist/esm/react/shared-ts/src/utils/ecdsaKeyFactsInventory.js +1 -1
  438. package/dist/esm/react/shared-ts/src/utils/emailOtpDomain.js +3 -3
  439. package/dist/esm/react/shared-ts/src/utils/encoders.js +1 -1
  440. package/dist/esm/react/shared-ts/src/utils/errors.js +1 -1
  441. package/dist/esm/react/shared-ts/src/utils/exactRecord.js +44 -0
  442. package/dist/esm/react/shared-ts/src/utils/index.js +12 -8
  443. package/dist/esm/react/shared-ts/src/utils/registrationAuthMethodInput.js +84 -0
  444. package/dist/esm/react/shared-ts/src/utils/registrationEstablishedSession.js +2 -2
  445. package/dist/esm/react/shared-ts/src/utils/registrationIds.js +226 -0
  446. package/dist/esm/react/shared-ts/src/utils/registrationIntent.js +4 -1081
  447. package/dist/esm/react/shared-ts/src/utils/registrationSignerPlan.js +442 -0
  448. package/dist/esm/react/shared-ts/src/utils/routerAbEcdsaDerivation.js +9 -8
  449. package/dist/esm/react/shared-ts/src/utils/routerAbEd25519Yao.js +3 -76
  450. package/dist/esm/react/shared-ts/src/utils/routerAbEd25519YaoDigests.js +76 -0
  451. package/dist/esm/react/shared-ts/src/utils/routerAbNormalSigningIdentity.js +1 -4
  452. package/dist/esm/react/shared-ts/src/utils/routerAbPublicKeyset.js +2 -6
  453. package/dist/esm/react/shared-ts/src/utils/secureRandomId.js +1 -1
  454. package/dist/esm/react/shared-ts/src/utils/signerDomain.js +1 -16
  455. package/dist/esm/react/shared-ts/src/utils/validation.js +36 -2
  456. package/dist/esm/react/shared-ts/src/utils/walletAuthAuthority.js +1 -1
  457. package/dist/esm/react/shared-ts/src/utils/walletAuthMethodRecord.js +357 -0
  458. package/dist/esm/react/shared-ts/src/utils/walletCapabilityBindings.js +2 -2
  459. package/dist/esm/react/shared-ts/src/utils/wireSchema.js +66 -0
  460. package/dist/esm/react/shared-ts/src/wallet-recovery/walletRecoveryCommittedProjection.js +10 -13
  461. package/dist/esm/react/shared-ts/src/wallet-recovery/walletRecoveryEcdsaPossession.js +4 -8
  462. package/dist/esm/react/shared-ts/src/wallet-recovery/walletRecoveryEnvelopeSet.js +3 -1
  463. package/dist/esm/react/utils/qrScanner.js +2 -19
  464. package/dist/{public/sdk/ConfirmationDrawer-G0bT0Dbu.js → esm/sdk/ConfirmationDrawer-MgFTBwwK.js} +2 -1
  465. package/dist/esm/sdk/{EvmClient-CHw6txjt.js → EvmClient-f3gUhS2L.js} +1 -1
  466. package/dist/esm/sdk/{NearClient-BQgcqAzG.js → NearClient-DY4NfHeD.js} +194 -147
  467. package/dist/esm/sdk/{NonceCoordinator-C7QltTDC.js → NonceCoordinator-4XWPhYww.js} +4 -33
  468. package/dist/esm/sdk/{accountIds-Ck4GAQfm.js → accountIds-DhIPGOSN.js} +1 -1
  469. package/dist/{public/sdk/accountLifecycle-Ddavc_FC.js → esm/sdk/accountLifecycle-BAGG_rbk.js} +253 -514
  470. package/dist/esm/sdk/{actions-DsBQcjBn.js → actions-CCvThiKe.js} +1 -1
  471. package/dist/esm/sdk/{adapters-LgE4nnos.js → adapters-B4JeK1nJ.js} +134 -105
  472. package/dist/esm/sdk/canonicalPrimitives-BTHWz80v.js +36 -0
  473. package/dist/{public/sdk/canonicalSignerErrorCode-DAzYzisf.js → esm/sdk/canonicalSignerErrorCode-CRoJMVpp.js} +2 -2
  474. package/dist/{public/sdk/capabilityKinds-jwCEaqBU.js → esm/sdk/capabilityKinds-hvYqa6S_.js} +1 -1
  475. package/dist/esm/sdk/chains-BMh3btVo.js +124 -0
  476. package/dist/{public/sdk/challengeDelivery-BjLKoou3.js → esm/sdk/challengeDelivery-Dd0586fo.js} +2 -2
  477. package/dist/esm/sdk/{configHelpers-DB73zYvO.js → configHelpers-vAQCzUD0.js} +3 -3
  478. package/dist/{public/sdk/defaultConfigs-CyNOW4Sy.js → esm/sdk/defaultConfigs-B3c16M_8.js} +5 -5
  479. package/dist/esm/sdk/{display-Cw90-qmF.js → display-KdIL0ff7.js} +3 -8
  480. package/dist/esm/sdk/{normalize-BephcEIF.js → domainIds-lcrFg6Sa.js} +84 -84
  481. package/dist/{public/sdk/ecdsaCapabilityManifest-C8itxV9S.js → esm/sdk/ecdsaCapabilityManifest-kzO_fW09.js} +12 -8
  482. package/dist/esm/sdk/{ecdsaChainTarget-BOTPGIU_.js → ecdsaChainTarget-Bl-JWyuw.js} +2 -2
  483. package/dist/esm/sdk/ecdsaPresignLifecycle-BFOTNYCK.js +1983 -0
  484. package/dist/esm/sdk/{ecdsaPresignPoolIdentity-Yopr4jvS.js → ecdsaPresignPoolIdentity-BjxZVIqn.js} +1 -1
  485. package/dist/{public/sdk/ecdsaWalletRecords-CAbbVhEY.js → esm/sdk/ecdsaWalletRecords-Cz4m6bIz.js} +6 -4
  486. package/dist/esm/sdk/encoders-D8d07vpx.js +0 -0
  487. package/dist/esm/sdk/{enrichDisplayModelWithAbi-DnjR1CqT.js → enrichDisplayModelWithAbi-CWggsykc.js} +2 -2
  488. package/dist/{public/sdk/evmCryptoWasm-BVj135bZ.js → esm/sdk/evmCryptoWasm-DWklhEEb.js} +1 -1
  489. package/dist/esm/sdk/evmFamilyEcdsaIdentity-Co5XDcEA.js +4288 -0
  490. package/dist/{public/sdk/exactSessionState-Bt0HforB.js → esm/sdk/exactSessionState-CiD5fBEs.js} +45 -54
  491. package/dist/esm/sdk/exactSigningLaneIdentity-DQeqPMST.js +335 -0
  492. package/dist/esm/sdk/{export-viewer-host-B3K81QGA.js → export-viewer-host-ZqA2Yz3H.js} +3 -3
  493. package/dist/esm/sdk/{helpers-DpRjHMBx.js → helpers-ZrowMnev.js} +3 -6
  494. package/dist/{public/sdk/host-Y_xmIzPO.js → esm/sdk/host-BWBbCAMu.js} +12 -12
  495. package/dist/{public/sdk/intentDigest-A1MbbJPu.js → esm/sdk/intentDigest-CvOSNlCH.js} +2 -2
  496. package/dist/esm/sdk/{jsxRuntime.module-FAP0NE9p.js → jsxRuntime.module-CuH5ZEIA.js} +1 -1
  497. package/dist/{public/sdk/keyMaterialBrands-BbjCfzXv.js → esm/sdk/keyMaterialBrands-CX41hur6.js} +15 -13
  498. package/dist/esm/sdk/{localOnly-B5TYHJiq.js → localOnly-Bg8UuLZ5.js} +8 -10
  499. package/dist/esm/sdk/{messages-B3UbNZYc.js → messages-C7Dbx9iN.js} +6 -4
  500. package/dist/{public/sdk/mountExportPrivateKeySurface-CNc6Mch4.js → esm/sdk/mountExportPrivateKeySurface-DgX-IBG_.js} +4 -4
  501. package/dist/{public/sdk/mountRecoveryCodeBackupSurface-ChwzwnYG.js → esm/sdk/mountRecoveryCodeBackupSurface-DXrExiJ7.js} +2 -2
  502. package/dist/{public/sdk/nearEd25519YaoMaterialActivation-BLxVE6E5.js → esm/sdk/nearEd25519YaoMaterialActivation-DPb0s3hQ.js} +53 -78
  503. package/dist/{public/sdk/nearEd25519YaoSigningPreparation-DX6xG-IW.js → esm/sdk/nearEd25519YaoSigningPreparation-BeD-SmbK.js} +10 -8
  504. package/dist/esm/sdk/{nonceLaneKeys-B_RcSS6M.js → nonceLaneKeys-C3c9lG6u.js} +1 -1
  505. package/dist/{public/sdk/normalization-oJyXl3Vn.js → esm/sdk/normalization-CBt413-z.js} +2 -2
  506. package/dist/esm/sdk/{operationFingerprint-DEPg9A3h.js → operationFingerprint-C8Trar4R.js} +4 -4
  507. package/dist/{public/sdk/operationFingerprint-CsYO6b0a.js → esm/sdk/operationFingerprint-CGZui5dR.js} +2 -1
  508. package/dist/{public/sdk/passkey-custody-BaHyYMhj.js → esm/sdk/passkey-custody-Bk1jAknm.js} +7 -6
  509. package/dist/{public/sdk/pendingWalletRecoveryCodeBackup-DyvRysWg.js → esm/sdk/pendingWalletRecoveryCodeBackup-DLzBb3WQ.js} +3 -3
  510. package/dist/esm/sdk/{recovery-entrypoint-D39R1avB.js → recovery-entrypoint-DW2tGyMs.js} +19 -16
  511. package/dist/esm/sdk/{registration-D-istkMZ.js → registration-BZDzDv91.js} +2849 -3156
  512. package/dist/esm/sdk/{registration-BtPLgKHk.js → registration-BzVHODuD.js} +4 -4
  513. package/dist/{public/sdk/registrationAccounts-AO3QHjas.js → esm/sdk/registrationAccounts-CKku_Sgy.js} +6 -4
  514. package/dist/esm/sdk/registrationIds-DLSdEKSv.js +310 -0
  515. package/dist/esm/sdk/registrationIntent-D0PxwEY4.js +393 -0
  516. package/dist/{public/sdk/registrationPreparationPreload-CvnlDCVn.js → esm/sdk/registrationPreparationPreload-CIAuRlxI.js} +2 -2
  517. package/dist/esm/sdk/registrationSignerPlan-CAikVZZQ.js +440 -0
  518. package/dist/esm/sdk/{relayerHttp-LsVTZCxA.js → relayerHttp-VC8Holz1.js} +1 -1
  519. package/dist/{public/sdk/routePlan-nLpPFHB-.js → esm/sdk/routePlan-D59x5xzQ.js} +1 -1
  520. package/dist/{public/sdk/router-CeFS9SgT.js → esm/sdk/router-C5lF_J_u.js} +23 -25
  521. package/dist/{public/sdk/routerAbNormalSigning-DktZKnf1.js → esm/sdk/routerAbNormalSigning-fhvpDtmY.js} +63 -92
  522. package/dist/esm/sdk/router_ab_ed25519_yao_client_bg.wasm +0 -0
  523. package/dist/{public/sdk/runtime-auth-B7z1ANNp.js → esm/sdk/runtime-auth-DFTqwj3u.js} +35 -45
  524. package/dist/esm/sdk/{runtime-device-link-B8HGDakg.js → runtime-device-link-C1Oub8Lw.js} +25 -22
  525. package/dist/{public/sdk/runtime-ecdsa-tempo-DKdS5-us.js → esm/sdk/runtime-ecdsa-tempo-rkWwolw1.js} +24 -21
  526. package/dist/{public/sdk/runtime-email-otp-D5bxhdyG.js → esm/sdk/runtime-email-otp-vuUG5LYl.js} +23 -20
  527. package/dist/esm/sdk/{runtime-export--hvNrx8l.js → runtime-export-FZWj0HxJ.js} +26 -22
  528. package/dist/esm/sdk/{runtime-near-CEexHoug.js → runtime-near-B9cjurVD.js} +24 -22
  529. package/dist/esm/sdk/{runtime-preferences-BiqPp1lV.js → runtime-preferences-Dq0bfyS5.js} +24 -21
  530. package/dist/{public/sdk/runtime-recovery-BYu1gDq_.js → esm/sdk/runtime-recovery-C-vfFKF3.js} +23 -20
  531. package/dist/{public/sdk/runtime-recovery-codes-DW7bB2tO.js → esm/sdk/runtime-recovery-codes-bTm3fLV4.js} +15 -19
  532. package/dist/esm/sdk/{runtimeContext-CH97jPZ0.js → runtimeContext-iLXnxVlZ.js} +615 -850
  533. package/dist/{public/sdk/runtimeLoader-BFAmJAbu.js → esm/sdk/runtimeLoader-hod6T2-m.js} +12 -12
  534. package/dist/{public/sdk/sdkSentEvents-5Pi-hjHB.js → esm/sdk/sdkSentEvents-MqDkbQg1.js} +10 -8
  535. package/dist/{public/sdk/secp256k1-Cr1jBW1n.js → esm/sdk/secp256k1-el9aE4Sv.js} +22 -156
  536. package/dist/esm/sdk/sessionPolicy-CHiilOAB.js +453 -0
  537. package/dist/{public/sdk/signEvmFamily-Dxk4sBPY.js → esm/sdk/signEvmFamily-e4IWWsZs.js} +108 -99
  538. package/dist/esm/sdk/{signEvmFamilyWithUiConfirmForTempo-DHTBHHgE.js → signEvmFamilyWithUiConfirmForTempo-Cu9qdk8M.js} +11 -15
  539. package/dist/{public/sdk/signEvmWithUiConfirm-CSxTBQUW.js → esm/sdk/signEvmWithUiConfirm-C61TCBnh.js} +6 -10
  540. package/dist/{public/sdk/signNear-B0OCVKoH.js → esm/sdk/signNear-Bblwn2kT.js} +763 -807
  541. package/dist/esm/sdk/{evmAdapter-C5NR5tiV.js → signatureUses-BkGyYt8F.js} +12 -3
  542. package/dist/{public/sdk/signerDomain-DDLiwuYS.js → esm/sdk/signerDomain-IEAVrOrc.js} +3 -18
  543. package/dist/{public/sdk/signerLoader-D0WU1jq_.js → esm/sdk/signerLoader-D7Aey0FD.js} +4 -4
  544. package/dist/esm/sdk/{signatureUses-C1o1pDql.js → signingFlow-rZfPegH9.js} +16 -29
  545. package/dist/{public/sdk/trace-DWnDLSuV.js → esm/sdk/trace-rHe0wz7q.js} +11 -2
  546. package/dist/{public/sdk/transaction-activity-DKgIGpKG.js → esm/sdk/transaction-activity-CSMCveBn.js} +1 -1
  547. package/dist/esm/sdk/{transactionReview-UoZQ2opj.js → transactionReview-DpHLTznU.js} +4 -6
  548. package/dist/{public/sdk/transactionReviewAdmission-Cv9kTr4c.js → esm/sdk/transactionReviewAdmission-BCPvl8OZ.js} +2 -2
  549. package/dist/esm/sdk/{transactionState-Bpm4GamO.js → transactionState-DP9O8F6f.js} +12 -10
  550. package/dist/esm/sdk/tx-confirm-ui.js +182 -154
  551. package/dist/esm/sdk/types-Dx9fczU7.js +111 -0
  552. package/dist/{public/sdk/validation-BphUDXs7.js → esm/sdk/validation-gat4LEKm.js} +36 -2
  553. package/dist/esm/sdk/wallet-iframe-host-ecdsa.js +2 -2
  554. package/dist/esm/sdk/wallet-iframe-host-full.js +2 -2
  555. package/dist/esm/sdk/wallet-iframe-host-near.js +2 -2
  556. package/dist/esm/sdk/wallet-iframe-host-runtime.js +2 -2
  557. package/dist/esm/sdk/{wallet-recovery-CKqoHbxT.js → wallet-recovery-Bz9qKgaL.js} +19 -25
  558. package/dist/esm/sdk/wallet-service.css +21 -0
  559. package/dist/esm/sdk/wallet-ui.css +95 -45
  560. package/dist/{public/sdk/sessionPolicy-B4FsPuk2.js → esm/sdk/walletAuthority-BQBxgUBn.js} +506 -445
  561. package/dist/{public/sdk/ed25519SeedMaterial-Cghz8-XB.js → esm/sdk/walletCustodyEcdsaContinuity-Hn4ORIbf.js} +1898 -2033
  562. package/dist/{public/sdk/walletRecoveryCommit-G6w6N5RV.js → esm/sdk/walletRecoveryCommit-sjGNTHUj.js} +17 -22
  563. package/dist/esm/sdk/{walletRecoveryRotate-BYOYJAyb.js → walletRecoveryRotate-BgLlW5ih.js} +1 -1
  564. package/dist/esm/sdk/{warmSessionHydration-DDNYdTCz.js → warmSessionHydration-Os8niEm7.js} +1 -1
  565. package/dist/esm/sdk/{webauthnP256-CHqprSh1.js → webauthnP256-DC5EIbKN.js} +1 -1
  566. package/dist/esm/shared-ts/src/authorization/delegatedAuthority.js +1 -1
  567. package/dist/esm/shared-ts/src/authorization/operationFingerprint.js +1 -2
  568. package/dist/esm/shared-ts/src/authorization/walletAuthority.js +93 -228
  569. package/dist/esm/shared-ts/src/authorization/walletCustodyOperation.js +4 -6
  570. package/dist/esm/shared-ts/src/device-linking/activeWalletSession.js +70 -1
  571. package/dist/esm/shared-ts/src/device-linking/authorityActivation.js +142 -0
  572. package/dist/esm/shared-ts/src/device-linking/committedSignerPackages.js +3 -3
  573. package/dist/esm/shared-ts/src/device-linking/delegatedActivationPlan.js +3 -1
  574. package/dist/esm/shared-ts/src/device-linking/deviceManagement.js +120 -0
  575. package/dist/esm/shared-ts/src/device-linking/digests.js +8 -63
  576. package/dist/esm/shared-ts/src/device-linking/ed25519ExportRoot.js +3 -1
  577. package/dist/esm/shared-ts/src/device-linking/index.js +6 -4
  578. package/dist/esm/shared-ts/src/device-linking/parsers.js +550 -1311
  579. package/dist/esm/shared-ts/src/device-linking/requestProof.js +3 -3
  580. package/dist/esm/shared-ts/src/device-linking/sourceContribution.js +7 -10
  581. package/dist/esm/shared-ts/src/device-linking/walletSessionCredentialDelivery.js +7 -7
  582. package/dist/esm/shared-ts/src/device-linking/wireFields.js +59 -0
  583. package/dist/esm/shared-ts/src/near/nearClient.js +252 -0
  584. package/dist/esm/shared-ts/src/passkey-custody/custodyEnvelope.js +6 -4
  585. package/dist/esm/shared-ts/src/passkey-custody/custodySecretBinding.js +6 -4
  586. package/dist/esm/shared-ts/src/passkey-custody/primitives.js +5 -39
  587. package/dist/esm/shared-ts/src/signing-lanes/index.js +4 -3
  588. package/dist/esm/shared-ts/src/signing-lanes/ownerContinuity.js +6 -1
  589. package/dist/esm/shared-ts/src/signing-lanes/participantDigest.js +2 -0
  590. package/dist/esm/shared-ts/src/signing-lanes/participants.js +2 -5
  591. package/dist/esm/shared-ts/src/signing-lanes/recordParsers.js +7 -7
  592. package/dist/esm/shared-ts/src/signing-lanes/rotationDigests.js +2 -0
  593. package/dist/esm/shared-ts/src/signing-lanes/rotationParsers.js +3 -3
  594. package/dist/esm/shared-ts/src/signing-lanes/rotationProtocolParsers.js +8 -0
  595. package/dist/esm/shared-ts/src/signing-lanes/rotationWireFields.js +3 -0
  596. package/dist/esm/shared-ts/src/threshold/ed25519OperationFingerprint.js +34 -42
  597. package/dist/esm/shared-ts/src/threshold/keyMaterialBrands.js +25 -0
  598. package/dist/esm/shared-ts/src/threshold/secp256k1.js +1 -2
  599. package/dist/esm/shared-ts/src/utils/addAuthMethodRegistration.js +3 -4
  600. package/dist/esm/shared-ts/src/utils/canonicalPrimitives.js +8 -1
  601. package/dist/esm/shared-ts/src/utils/digestEncoding.js +63 -0
  602. package/dist/esm/shared-ts/src/utils/ecdsaKeyFactsInventory.js +1 -1
  603. package/dist/esm/shared-ts/src/utils/emailOtpDomain.js +3 -3
  604. package/dist/esm/shared-ts/src/utils/encoders.js +1 -1
  605. package/dist/esm/shared-ts/src/utils/errors.js +1 -1
  606. package/dist/esm/shared-ts/src/utils/exactRecord.js +44 -0
  607. package/dist/esm/shared-ts/src/utils/index.js +18 -14
  608. package/dist/esm/shared-ts/src/utils/registrationAuthMethodInput.js +84 -0
  609. package/dist/esm/shared-ts/src/utils/registrationEstablishedSession.js +5 -5
  610. package/dist/esm/shared-ts/src/utils/registrationIds.js +226 -0
  611. package/dist/esm/shared-ts/src/utils/registrationIntent.js +4 -1081
  612. package/dist/esm/shared-ts/src/utils/registrationSignerPlan.js +442 -0
  613. package/dist/esm/shared-ts/src/utils/routerAbEcdsaDerivation.js +11 -10
  614. package/dist/esm/shared-ts/src/utils/routerAbEd25519Yao.js +3 -76
  615. package/dist/esm/shared-ts/src/utils/routerAbEd25519YaoDigests.js +76 -0
  616. package/dist/esm/shared-ts/src/utils/routerAbNormalSigningIdentity.js +1 -4
  617. package/dist/esm/shared-ts/src/utils/routerAbPublicKeyset.js +2 -6
  618. package/dist/esm/shared-ts/src/utils/secureRandomId.js +1 -1
  619. package/dist/esm/shared-ts/src/utils/signerDomain.js +1 -16
  620. package/dist/esm/shared-ts/src/utils/validation.js +36 -2
  621. package/dist/esm/shared-ts/src/utils/walletAuthAuthority.js +1 -1
  622. package/dist/esm/shared-ts/src/utils/walletAuthMethodRecord.js +357 -0
  623. package/dist/esm/shared-ts/src/utils/walletCapabilityBindings.js +2 -2
  624. package/dist/esm/shared-ts/src/utils/wireSchema.js +66 -0
  625. package/dist/esm/shared-ts/src/wallet-recovery/recoveryCodeLocator.js +1 -1
  626. package/dist/esm/shared-ts/src/wallet-recovery/recoveryCodeReservation.js +1 -1
  627. package/dist/esm/shared-ts/src/wallet-recovery/recoveryKeyId.js +1 -1
  628. package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryCommittedProjection.js +10 -13
  629. package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryEcdsaPossession.js +4 -8
  630. package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryEnvelopeSet.js +3 -1
  631. package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker.d.ts +18 -5
  632. package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker.js +44 -9
  633. package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker_bg.wasm +0 -0
  634. package/dist/esm/wasm/router_ab_ecdsa_client/pkg/router_ab_ecdsa_client.d.ts +10 -1
  635. package/dist/esm/wasm/router_ab_ecdsa_client/pkg/router_ab_ecdsa_client.js +31 -1
  636. package/dist/esm/wasm/router_ab_ecdsa_client/pkg/router_ab_ecdsa_client_bg.wasm +0 -0
  637. package/dist/esm/wasm/router_ab_ed25519_yao_client/pkg/router_ab_ed25519_yao_client.d.ts +1 -1
  638. package/dist/esm/wasm/router_ab_ed25519_yao_client/pkg/router_ab_ed25519_yao_client.js +1 -1
  639. package/dist/esm/wasm/router_ab_ed25519_yao_client/pkg/router_ab_ed25519_yao_client_bg.wasm +0 -0
  640. package/dist/public/headers.manifest.json +1 -1
  641. package/dist/{esm/sdk/ConfirmationDrawer-G0bT0Dbu.js → public/sdk/ConfirmationDrawer-MgFTBwwK.js} +2 -1
  642. package/dist/public/sdk/{EvmClient-CHw6txjt.js → EvmClient-f3gUhS2L.js} +1 -1
  643. package/dist/public/sdk/{NearClient-BQgcqAzG.js → NearClient-DY4NfHeD.js} +194 -147
  644. package/dist/public/sdk/{NonceCoordinator-C7QltTDC.js → NonceCoordinator-4XWPhYww.js} +4 -33
  645. package/dist/public/sdk/{accountIds-Ck4GAQfm.js → accountIds-DhIPGOSN.js} +1 -1
  646. package/dist/{esm/sdk/accountLifecycle-Ddavc_FC.js → public/sdk/accountLifecycle-BAGG_rbk.js} +253 -514
  647. package/dist/public/sdk/{actions-DsBQcjBn.js → actions-CCvThiKe.js} +1 -1
  648. package/dist/public/sdk/{adapters-LgE4nnos.js → adapters-B4JeK1nJ.js} +134 -105
  649. package/dist/public/sdk/canonicalPrimitives-BTHWz80v.js +36 -0
  650. package/dist/{esm/sdk/canonicalSignerErrorCode-DAzYzisf.js → public/sdk/canonicalSignerErrorCode-CRoJMVpp.js} +2 -2
  651. package/dist/{esm/sdk/capabilityKinds-jwCEaqBU.js → public/sdk/capabilityKinds-hvYqa6S_.js} +1 -1
  652. package/dist/public/sdk/chains-BMh3btVo.js +124 -0
  653. package/dist/{esm/sdk/challengeDelivery-BjLKoou3.js → public/sdk/challengeDelivery-Dd0586fo.js} +2 -2
  654. package/dist/public/sdk/{configHelpers-DB73zYvO.js → configHelpers-vAQCzUD0.js} +3 -3
  655. package/dist/{esm/sdk/defaultConfigs-CyNOW4Sy.js → public/sdk/defaultConfigs-B3c16M_8.js} +5 -5
  656. package/dist/public/sdk/{display-Cw90-qmF.js → display-KdIL0ff7.js} +3 -8
  657. package/dist/public/sdk/{normalize-BephcEIF.js → domainIds-lcrFg6Sa.js} +84 -84
  658. package/dist/{esm/sdk/ecdsaCapabilityManifest-C8itxV9S.js → public/sdk/ecdsaCapabilityManifest-kzO_fW09.js} +12 -8
  659. package/dist/public/sdk/{ecdsaChainTarget-BOTPGIU_.js → ecdsaChainTarget-Bl-JWyuw.js} +2 -2
  660. package/dist/public/sdk/ecdsaPresignLifecycle-BFOTNYCK.js +1983 -0
  661. package/dist/public/sdk/{ecdsaPresignPoolIdentity-Yopr4jvS.js → ecdsaPresignPoolIdentity-BjxZVIqn.js} +1 -1
  662. package/dist/{esm/sdk/ecdsaWalletRecords-CAbbVhEY.js → public/sdk/ecdsaWalletRecords-Cz4m6bIz.js} +6 -4
  663. package/dist/public/sdk/encoders-D8d07vpx.js +0 -0
  664. package/dist/public/sdk/{enrichDisplayModelWithAbi-DnjR1CqT.js → enrichDisplayModelWithAbi-CWggsykc.js} +2 -2
  665. package/dist/{esm/sdk/evmCryptoWasm-BVj135bZ.js → public/sdk/evmCryptoWasm-DWklhEEb.js} +1 -1
  666. package/dist/public/sdk/evmFamilyEcdsaIdentity-Co5XDcEA.js +4288 -0
  667. package/dist/{esm/sdk/exactSessionState-Bt0HforB.js → public/sdk/exactSessionState-CiD5fBEs.js} +45 -54
  668. package/dist/public/sdk/exactSigningLaneIdentity-DQeqPMST.js +335 -0
  669. package/dist/public/sdk/{export-viewer-host-B3K81QGA.js → export-viewer-host-ZqA2Yz3H.js} +3 -3
  670. package/dist/public/sdk/{helpers-DpRjHMBx.js → helpers-ZrowMnev.js} +3 -6
  671. package/dist/{esm/sdk/host-Y_xmIzPO.js → public/sdk/host-BWBbCAMu.js} +12 -12
  672. package/dist/{esm/sdk/intentDigest-A1MbbJPu.js → public/sdk/intentDigest-CvOSNlCH.js} +2 -2
  673. package/dist/public/sdk/{jsxRuntime.module-FAP0NE9p.js → jsxRuntime.module-CuH5ZEIA.js} +1 -1
  674. package/dist/{esm/sdk/keyMaterialBrands-BbjCfzXv.js → public/sdk/keyMaterialBrands-CX41hur6.js} +15 -13
  675. package/dist/public/sdk/{localOnly-B5TYHJiq.js → localOnly-Bg8UuLZ5.js} +8 -10
  676. package/dist/public/sdk/{messages-B3UbNZYc.js → messages-C7Dbx9iN.js} +6 -4
  677. package/dist/{esm/sdk/mountExportPrivateKeySurface-CNc6Mch4.js → public/sdk/mountExportPrivateKeySurface-DgX-IBG_.js} +4 -4
  678. package/dist/{esm/sdk/mountRecoveryCodeBackupSurface-ChwzwnYG.js → public/sdk/mountRecoveryCodeBackupSurface-DXrExiJ7.js} +2 -2
  679. package/dist/{esm/sdk/nearEd25519YaoMaterialActivation-BLxVE6E5.js → public/sdk/nearEd25519YaoMaterialActivation-DPb0s3hQ.js} +53 -78
  680. package/dist/{esm/sdk/nearEd25519YaoSigningPreparation-DX6xG-IW.js → public/sdk/nearEd25519YaoSigningPreparation-BeD-SmbK.js} +10 -8
  681. package/dist/public/sdk/{nonceLaneKeys-B_RcSS6M.js → nonceLaneKeys-C3c9lG6u.js} +1 -1
  682. package/dist/{esm/sdk/normalization-oJyXl3Vn.js → public/sdk/normalization-CBt413-z.js} +2 -2
  683. package/dist/public/sdk/{operationFingerprint-DEPg9A3h.js → operationFingerprint-C8Trar4R.js} +4 -4
  684. package/dist/{esm/sdk/operationFingerprint-CsYO6b0a.js → public/sdk/operationFingerprint-CGZui5dR.js} +2 -1
  685. package/dist/{esm/sdk/passkey-custody-BaHyYMhj.js → public/sdk/passkey-custody-Bk1jAknm.js} +7 -6
  686. package/dist/{esm/sdk/pendingWalletRecoveryCodeBackup-DyvRysWg.js → public/sdk/pendingWalletRecoveryCodeBackup-DLzBb3WQ.js} +3 -3
  687. package/dist/public/sdk/{recovery-entrypoint-D39R1avB.js → recovery-entrypoint-DW2tGyMs.js} +19 -16
  688. package/dist/public/sdk/{registration-D-istkMZ.js → registration-BZDzDv91.js} +2849 -3156
  689. package/dist/public/sdk/{registration-BtPLgKHk.js → registration-BzVHODuD.js} +4 -4
  690. package/dist/{esm/sdk/registrationAccounts-AO3QHjas.js → public/sdk/registrationAccounts-CKku_Sgy.js} +6 -4
  691. package/dist/public/sdk/registrationIds-DLSdEKSv.js +310 -0
  692. package/dist/public/sdk/registrationIntent-D0PxwEY4.js +393 -0
  693. package/dist/{esm/sdk/registrationPreparationPreload-CvnlDCVn.js → public/sdk/registrationPreparationPreload-CIAuRlxI.js} +2 -2
  694. package/dist/public/sdk/registrationSignerPlan-CAikVZZQ.js +440 -0
  695. package/dist/public/sdk/{relayerHttp-LsVTZCxA.js → relayerHttp-VC8Holz1.js} +1 -1
  696. package/dist/{esm/sdk/routePlan-nLpPFHB-.js → public/sdk/routePlan-D59x5xzQ.js} +1 -1
  697. package/dist/{esm/sdk/router-CeFS9SgT.js → public/sdk/router-C5lF_J_u.js} +23 -25
  698. package/dist/{esm/sdk/routerAbNormalSigning-DktZKnf1.js → public/sdk/routerAbNormalSigning-fhvpDtmY.js} +63 -92
  699. package/dist/public/sdk/router_ab_ed25519_yao_client_bg.wasm +0 -0
  700. package/dist/{esm/sdk/runtime-auth-B7z1ANNp.js → public/sdk/runtime-auth-DFTqwj3u.js} +35 -45
  701. package/dist/public/sdk/{runtime-device-link-B8HGDakg.js → runtime-device-link-C1Oub8Lw.js} +25 -22
  702. package/dist/{esm/sdk/runtime-ecdsa-tempo-DKdS5-us.js → public/sdk/runtime-ecdsa-tempo-rkWwolw1.js} +24 -21
  703. package/dist/{esm/sdk/runtime-email-otp-D5bxhdyG.js → public/sdk/runtime-email-otp-vuUG5LYl.js} +23 -20
  704. package/dist/public/sdk/{runtime-export--hvNrx8l.js → runtime-export-FZWj0HxJ.js} +26 -22
  705. package/dist/public/sdk/{runtime-near-CEexHoug.js → runtime-near-B9cjurVD.js} +24 -22
  706. package/dist/public/sdk/{runtime-preferences-BiqPp1lV.js → runtime-preferences-Dq0bfyS5.js} +24 -21
  707. package/dist/{esm/sdk/runtime-recovery-BYu1gDq_.js → public/sdk/runtime-recovery-C-vfFKF3.js} +23 -20
  708. package/dist/{esm/sdk/runtime-recovery-codes-DW7bB2tO.js → public/sdk/runtime-recovery-codes-bTm3fLV4.js} +15 -19
  709. package/dist/public/sdk/{runtimeContext-CH97jPZ0.js → runtimeContext-iLXnxVlZ.js} +615 -850
  710. package/dist/{esm/sdk/runtimeLoader-BFAmJAbu.js → public/sdk/runtimeLoader-hod6T2-m.js} +12 -12
  711. package/dist/{esm/sdk/sdkSentEvents-5Pi-hjHB.js → public/sdk/sdkSentEvents-MqDkbQg1.js} +10 -8
  712. package/dist/{esm/sdk/secp256k1-Cr1jBW1n.js → public/sdk/secp256k1-el9aE4Sv.js} +22 -156
  713. package/dist/public/sdk/sessionPolicy-CHiilOAB.js +453 -0
  714. package/dist/{esm/sdk/signEvmFamily-Dxk4sBPY.js → public/sdk/signEvmFamily-e4IWWsZs.js} +108 -99
  715. package/dist/public/sdk/{signEvmFamilyWithUiConfirmForTempo-DHTBHHgE.js → signEvmFamilyWithUiConfirmForTempo-Cu9qdk8M.js} +11 -15
  716. package/dist/{esm/sdk/signEvmWithUiConfirm-CSxTBQUW.js → public/sdk/signEvmWithUiConfirm-C61TCBnh.js} +6 -10
  717. package/dist/{esm/sdk/signNear-B0OCVKoH.js → public/sdk/signNear-Bblwn2kT.js} +763 -807
  718. package/dist/public/sdk/{evmAdapter-C5NR5tiV.js → signatureUses-BkGyYt8F.js} +12 -3
  719. package/dist/{esm/sdk/signerDomain-DDLiwuYS.js → public/sdk/signerDomain-IEAVrOrc.js} +3 -18
  720. package/dist/{esm/sdk/signerLoader-D0WU1jq_.js → public/sdk/signerLoader-D7Aey0FD.js} +4 -4
  721. package/dist/public/sdk/{signatureUses-C1o1pDql.js → signingFlow-rZfPegH9.js} +16 -29
  722. package/dist/{esm/sdk/trace-DWnDLSuV.js → public/sdk/trace-rHe0wz7q.js} +11 -2
  723. package/dist/{esm/sdk/transaction-activity-DKgIGpKG.js → public/sdk/transaction-activity-CSMCveBn.js} +1 -1
  724. package/dist/public/sdk/{transactionReview-UoZQ2opj.js → transactionReview-DpHLTznU.js} +4 -6
  725. package/dist/{esm/sdk/transactionReviewAdmission-Cv9kTr4c.js → public/sdk/transactionReviewAdmission-BCPvl8OZ.js} +2 -2
  726. package/dist/public/sdk/{transactionState-Bpm4GamO.js → transactionState-DP9O8F6f.js} +12 -10
  727. package/dist/public/sdk/tx-confirm-ui.js +182 -154
  728. package/dist/public/sdk/types-Dx9fczU7.js +111 -0
  729. package/dist/{esm/sdk/validation-BphUDXs7.js → public/sdk/validation-gat4LEKm.js} +36 -2
  730. package/dist/public/sdk/wallet-iframe-host-ecdsa.js +2 -2
  731. package/dist/public/sdk/wallet-iframe-host-full.js +2 -2
  732. package/dist/public/sdk/wallet-iframe-host-near.js +2 -2
  733. package/dist/public/sdk/wallet-iframe-host-runtime.js +2 -2
  734. package/dist/public/sdk/{wallet-recovery-CKqoHbxT.js → wallet-recovery-Bz9qKgaL.js} +19 -25
  735. package/dist/public/sdk/wallet-service.css +21 -0
  736. package/dist/public/sdk/wallet-ui.css +95 -45
  737. package/dist/{esm/sdk/sessionPolicy-B4FsPuk2.js → public/sdk/walletAuthority-BQBxgUBn.js} +506 -445
  738. package/dist/{esm/sdk/ed25519SeedMaterial-Cghz8-XB.js → public/sdk/walletCustodyEcdsaContinuity-Hn4ORIbf.js} +1898 -2033
  739. package/dist/{esm/sdk/walletRecoveryCommit-G6w6N5RV.js → public/sdk/walletRecoveryCommit-sjGNTHUj.js} +17 -22
  740. package/dist/public/sdk/{walletRecoveryRotate-BYOYJAyb.js → walletRecoveryRotate-BgLlW5ih.js} +1 -1
  741. package/dist/public/sdk/{warmSessionHydration-DDNYdTCz.js → warmSessionHydration-Os8niEm7.js} +1 -1
  742. package/dist/public/sdk/{webauthnP256-CHqprSh1.js → webauthnP256-DC5EIbKN.js} +1 -1
  743. package/dist/public/sdk/workers/device-linking-key.worker.js +2954 -3134
  744. package/dist/public/sdk/workers/ecdsa-derivation-client.worker.js +1688 -2144
  745. package/dist/public/sdk/workers/ecdsa-online-client.worker.js +9 -117
  746. package/dist/public/sdk/workers/ecdsa-presign-client.worker.js +44 -147
  747. package/dist/public/sdk/workers/email-otp.worker.js +9265 -9596
  748. package/dist/public/sdk/workers/evm-crypto.worker.js +8 -6
  749. package/dist/public/sdk/workers/near-signer.worker.js +4 -4
  750. package/dist/public/sdk/workers/near_signer.wasm +0 -0
  751. package/dist/public/sdk/workers/passkey-confirm.worker.js +6 -3
  752. package/dist/public/sdk/workers/passkey-mpc-export.worker.js +95 -101
  753. package/dist/public/sdk/workers/passkey-mpc-session.worker.js +205 -202
  754. package/dist/public/sdk/workers/router_ab_ecdsa_client_bg.wasm +0 -0
  755. package/dist/public/sdk/workers/router_ab_ed25519_yao_client_bg.wasm +0 -0
  756. package/dist/public/sdk/workers/tempo-signer.worker.js +8 -6
  757. package/dist/public/sdk/workers/wallet-custody-ceremony.worker.js +223 -215
  758. package/dist/public/sdk/workers/wallet_custody_ceremony_bg.wasm +0 -0
  759. package/dist/public/sdk/workers/wasm_signer_worker_bg.wasm +0 -0
  760. package/dist/public/wallet-assets.manifest.json +334 -214
  761. package/dist/public/wallet-service/index.html +4 -4
  762. package/dist/types/shared-ts/src/authorization/capabilityKinds.d.ts +8 -26
  763. package/dist/types/shared-ts/src/authorization/delegatedAuthority.d.ts +0 -8
  764. package/dist/types/shared-ts/src/authorization/operationFingerprint.d.ts +1 -3
  765. package/dist/types/shared-ts/src/authorization/walletAuthority.d.ts +25 -12
  766. package/dist/types/shared-ts/src/authorization/walletSessionIssuance.d.ts +2 -1
  767. package/dist/types/shared-ts/src/device-linking/activeWalletSession.d.ts +3 -2
  768. package/dist/types/shared-ts/src/device-linking/authorityActivation.d.ts +5 -0
  769. package/dist/types/shared-ts/src/device-linking/committedSignerPackages.d.ts +2 -5
  770. package/dist/types/shared-ts/src/device-linking/contracts.d.ts +8 -11
  771. package/dist/types/shared-ts/src/device-linking/contracts.typecheck.d.ts +2 -1
  772. package/dist/types/shared-ts/src/device-linking/deviceManagement.d.ts +7 -0
  773. package/dist/types/shared-ts/src/device-linking/digests.d.ts +0 -5
  774. package/dist/types/shared-ts/src/device-linking/ed25519ExportRoot.d.ts +3 -2
  775. package/dist/types/shared-ts/src/device-linking/index.d.ts +2 -0
  776. package/dist/types/shared-ts/src/device-linking/parsers.d.ts +4 -41
  777. package/dist/types/shared-ts/src/device-linking/requestProof.d.ts +0 -1
  778. package/dist/types/shared-ts/src/device-linking/sourceContribution.d.ts +3 -2
  779. package/dist/types/shared-ts/src/device-linking/walletSessionCredentialDelivery.d.ts +2 -1
  780. package/dist/types/shared-ts/src/device-linking/wireFields.d.ts +26 -0
  781. package/dist/types/shared-ts/src/near/actions.d.ts +4 -4
  782. package/dist/types/shared-ts/src/near/delegate.d.ts +3 -2
  783. package/dist/types/shared-ts/src/near/nearClient.d.ts +145 -0
  784. package/dist/types/shared-ts/src/passkey-custody/ceremonyCommitPayload.d.ts +0 -22
  785. package/dist/types/shared-ts/src/passkey-custody/credentialActivity.d.ts +2 -4
  786. package/dist/types/shared-ts/src/passkey-custody/custodyEnvelope.d.ts +9 -18
  787. package/dist/types/shared-ts/src/passkey-custody/custodySecretBinding.d.ts +8 -24
  788. package/dist/types/shared-ts/src/passkey-custody/index.d.ts +0 -2
  789. package/dist/types/shared-ts/src/passkey-custody/primitives.d.ts +0 -14
  790. package/dist/types/shared-ts/src/signing-lanes/evmFamilySigningKeySlotId.d.ts +0 -15
  791. package/dist/types/shared-ts/src/signing-lanes/execution.d.ts +2 -51
  792. package/dist/types/shared-ts/src/signing-lanes/index.d.ts +1 -2
  793. package/dist/types/shared-ts/src/signing-lanes/ownerContinuity.d.ts +1 -2
  794. package/dist/types/shared-ts/src/signing-lanes/participantDigest.d.ts +5 -27
  795. package/dist/types/shared-ts/src/signing-lanes/participants.d.ts +0 -11
  796. package/dist/types/shared-ts/src/signing-lanes/recordParsers.d.ts +6 -53
  797. package/dist/types/shared-ts/src/signing-lanes/records.d.ts +1 -2
  798. package/dist/types/shared-ts/src/signing-lanes/rotation.d.ts +15 -37
  799. package/dist/types/shared-ts/src/signing-lanes/rotationDigests.d.ts +1 -20
  800. package/dist/types/shared-ts/src/signing-lanes/rotationLifecycle.d.ts +4 -25
  801. package/dist/types/shared-ts/src/signing-lanes/rotationParsers.d.ts +1 -41
  802. package/dist/types/shared-ts/src/signing-lanes/rotationProtocolParsers.d.ts +6 -0
  803. package/dist/types/shared-ts/src/signing-lanes/rotationWireFields.d.ts +20 -0
  804. package/dist/types/shared-ts/src/threshold/ecdsaDerivationRoleLocalBootstrap.d.ts +2 -35
  805. package/dist/types/shared-ts/src/threshold/ed25519OperationFingerprint.d.ts +8 -35
  806. package/dist/types/shared-ts/src/threshold/keyMaterialBrands.d.ts +25 -0
  807. package/dist/types/shared-ts/src/threshold/participants.d.ts +3 -9
  808. package/dist/types/shared-ts/src/threshold/secp256k1.d.ts +0 -37
  809. package/dist/types/shared-ts/src/threshold/sessionPolicy.d.ts +24 -0
  810. package/dist/types/shared-ts/src/threshold/signingRootScope.d.ts +2 -5
  811. package/dist/types/shared-ts/src/utils/addAuthMethodRegistration.d.ts +3 -4
  812. package/dist/types/shared-ts/src/utils/addWalletAuthMethod.d.ts +7 -108
  813. package/dist/types/shared-ts/src/utils/addWalletAuthMethod.typecheck.d.ts +16 -3
  814. package/dist/types/shared-ts/src/utils/canonicalPrimitives.d.ts +2 -0
  815. package/dist/types/shared-ts/src/utils/digestEncoding.d.ts +9 -0
  816. package/dist/types/shared-ts/src/utils/domainIds.d.ts +1 -2
  817. package/dist/types/shared-ts/src/utils/ecdsaKeyFactsInventory.d.ts +1 -2
  818. package/dist/types/shared-ts/src/utils/emailOtpDomain.d.ts +5 -5
  819. package/dist/types/shared-ts/src/utils/emailOtpRecoveryKey.d.ts +0 -2
  820. package/dist/types/shared-ts/src/utils/errors.d.ts +0 -7
  821. package/dist/types/shared-ts/src/utils/exactRecord.d.ts +12 -0
  822. package/dist/types/shared-ts/src/utils/index.d.ts +5 -2
  823. package/dist/types/shared-ts/src/utils/jsonRpc.d.ts +3 -2
  824. package/dist/types/shared-ts/src/utils/near.d.ts +2 -1
  825. package/dist/types/shared-ts/src/utils/nearRpcResults.d.ts +7 -7
  826. package/dist/types/shared-ts/src/utils/normalize.d.ts +0 -4
  827. package/dist/types/shared-ts/src/utils/registrationAuthMethodInput.d.ts +184 -0
  828. package/dist/types/shared-ts/src/utils/registrationContracts.d.ts +76 -0
  829. package/dist/types/shared-ts/src/utils/registrationEstablishedSession.d.ts +1 -2
  830. package/dist/types/shared-ts/src/utils/registrationIds.d.ts +56 -0
  831. package/dist/types/shared-ts/src/utils/registrationIntent.d.ts +9 -514
  832. package/dist/types/shared-ts/src/utils/registrationSignerPlan.d.ts +142 -0
  833. package/dist/types/shared-ts/src/utils/routerAbEcdsaDerivation.d.ts +21 -92
  834. package/dist/types/shared-ts/src/utils/routerAbEd25519Yao.d.ts +14 -99
  835. package/dist/types/shared-ts/src/utils/routerAbEd25519YaoDigests.d.ts +39 -0
  836. package/dist/types/shared-ts/src/utils/routerAbPublicKeyset.d.ts +10 -15
  837. package/dist/types/shared-ts/src/utils/routerAbTraceContext.d.ts +2 -1
  838. package/dist/types/shared-ts/src/utils/secureRandomId.d.ts +0 -2
  839. package/dist/types/shared-ts/src/utils/signerDomain.d.ts +3 -35
  840. package/dist/types/shared-ts/src/utils/signerSlot.d.ts +0 -4
  841. package/dist/types/shared-ts/src/utils/signingSessionSeal.d.ts +1 -7
  842. package/dist/types/shared-ts/src/utils/validation.d.ts +10 -10
  843. package/dist/types/shared-ts/src/utils/variant.d.ts +11 -0
  844. package/dist/types/shared-ts/src/utils/variant.typecheck.d.ts +22 -0
  845. package/dist/types/shared-ts/src/utils/walletAddSignerActivation.d.ts +2 -2
  846. package/dist/types/shared-ts/src/utils/walletAuthAuthority.d.ts +1 -58
  847. package/dist/types/shared-ts/src/utils/walletAuthMethodRecord.d.ts +104 -0
  848. package/dist/types/shared-ts/src/utils/walletCapabilityBindings.d.ts +3 -7
  849. package/dist/types/shared-ts/src/utils/webauthnDeviceInfo.d.ts +3 -4
  850. package/dist/types/shared-ts/src/utils/wireSchema.d.ts +60 -0
  851. package/dist/types/shared-ts/src/wallet-recovery/backupAcknowledgement.d.ts +2 -1
  852. package/dist/types/shared-ts/src/wallet-recovery/index.d.ts +0 -1
  853. package/dist/types/shared-ts/src/wallet-recovery/recoveryCodeLocator.d.ts +0 -16
  854. package/dist/types/shared-ts/src/wallet-recovery/recoveryCodeReservation.d.ts +2 -11
  855. package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryCommittedProjection.d.ts +6 -18
  856. package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryEcdsaPossession.d.ts +0 -2
  857. package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryEnvelopeSet.d.ts +1 -3
  858. package/dist/types/wallet/src/SeamsWeb/SeamsWeb.d.ts +0 -12
  859. package/dist/types/wallet/src/SeamsWeb/assembly/browserSigningSurfaceAssembly.d.ts +3 -13
  860. package/dist/types/wallet/src/SeamsWeb/assembly/browserSigningSurfacePorts.d.ts +2 -1
  861. package/dist/types/wallet/src/SeamsWeb/assembly/browserWorkerWarmupPolicy.d.ts +1 -3
  862. package/dist/types/wallet/src/SeamsWeb/assembly/createBrowserSigningStores.d.ts +2 -1
  863. package/dist/types/wallet/src/SeamsWeb/assembly/initializeBrowserSigningRuntime.d.ts +2 -1
  864. package/dist/types/wallet/src/SeamsWeb/assembly/preconnectWalletAssets.d.ts +2 -3
  865. package/dist/types/wallet/src/SeamsWeb/operations/auth/login.d.ts +13 -88
  866. package/dist/types/wallet/src/SeamsWeb/operations/auth/walletAuth.d.ts +2 -2
  867. package/dist/types/wallet/src/SeamsWeb/operations/auth/walletUnlockEcdsaSubject.d.ts +2 -18
  868. package/dist/types/wallet/src/SeamsWeb/operations/auth/walletUnlockSubject.d.ts +4 -7
  869. package/dist/types/wallet/src/SeamsWeb/operations/authMethods/addAuthMethodSourceClaim.d.ts +5 -6
  870. package/dist/types/wallet/src/SeamsWeb/operations/authMethods/emailOtp/addEmailOtp.d.ts +1 -1
  871. package/dist/types/wallet/src/SeamsWeb/operations/authMethods/emailOtp/challenge.d.ts +0 -13
  872. package/dist/types/wallet/src/SeamsWeb/operations/authMethods/emailOtp/googleEmailOtpWalletAuthFlow.d.ts +0 -1
  873. package/dist/types/wallet/src/SeamsWeb/operations/authMethods/emailOtp/localEmailOtpProjection.d.ts +2 -1
  874. package/dist/types/wallet/src/SeamsWeb/operations/authMethods/emailOtp/registrationAuthority.d.ts +2 -2
  875. package/dist/types/wallet/src/SeamsWeb/operations/authMethods/emailOtp/registrationOffer.d.ts +1 -2
  876. package/dist/types/wallet/src/SeamsWeb/operations/authMethods/passkey/exactPasskeyAuthority.d.ts +20 -0
  877. package/dist/types/wallet/src/SeamsWeb/operations/authMethods/passkey/localPasskeyProjection.d.ts +4 -42
  878. package/dist/types/wallet/src/SeamsWeb/operations/authMethods/passkey/registrationAuthority.d.ts +2 -1
  879. package/dist/types/wallet/src/SeamsWeb/operations/authMethods/revokeAuthMethod.d.ts +1 -9
  880. package/dist/types/wallet/src/SeamsWeb/operations/authMethods/sourcePasskeyProof.d.ts +2 -7
  881. package/dist/types/wallet/src/SeamsWeb/operations/devices/deviceLinkingAuthorityInstallation.d.ts +0 -13
  882. package/dist/types/wallet/src/SeamsWeb/operations/devices/deviceLinkingComposition.d.ts +2 -21
  883. package/dist/types/wallet/src/SeamsWeb/operations/devices/deviceLinkingEd25519ExportRoot.d.ts +2 -2
  884. package/dist/types/wallet/src/SeamsWeb/operations/devices/deviceLinkingHttpTransport.d.ts +4 -17
  885. package/dist/types/wallet/src/SeamsWeb/operations/devices/deviceLinkingOwnerTransport.d.ts +2 -1
  886. package/dist/types/wallet/src/SeamsWeb/operations/devices/deviceLinkingPorts.d.ts +10 -16
  887. package/dist/types/wallet/src/SeamsWeb/operations/devices/deviceLinkingResume.d.ts +4 -3
  888. package/dist/types/wallet/src/SeamsWeb/operations/devices/deviceLinkingWorkerChannels.d.ts +2 -14
  889. package/dist/types/wallet/src/SeamsWeb/operations/devices/linkDevice.d.ts +3 -91
  890. package/dist/types/wallet/src/SeamsWeb/operations/devices/linkDeviceFlow.d.ts +88 -0
  891. package/dist/types/wallet/src/SeamsWeb/operations/devices/linkDeviceFlowSupport.d.ts +53 -0
  892. package/dist/types/wallet/src/SeamsWeb/operations/devices/linkDeviceTargetActivation.d.ts +149 -0
  893. package/dist/types/wallet/src/SeamsWeb/operations/devices/scanDevice.d.ts +2 -1
  894. package/dist/types/wallet/src/SeamsWeb/operations/devices/walletHostComposition.d.ts +4 -9
  895. package/dist/types/wallet/src/SeamsWeb/operations/devices/walletHostOwnerAuthority.d.ts +9 -5
  896. package/dist/types/wallet/src/SeamsWeb/operations/near/actions.d.ts +0 -46
  897. package/dist/types/wallet/src/SeamsWeb/operations/near/delegateAction.d.ts +2 -1
  898. package/dist/types/wallet/src/SeamsWeb/operations/near/signingEventHelpers.d.ts +2 -1
  899. package/dist/types/wallet/src/SeamsWeb/operations/recovery/accountSync.d.ts +2 -1
  900. package/dist/types/wallet/src/SeamsWeb/operations/recovery/recoveryWalletBinding.d.ts +1 -2
  901. package/dist/types/wallet/src/SeamsWeb/operations/recovery/syncAccount.d.ts +1 -77
  902. package/dist/types/wallet/src/SeamsWeb/operations/recovery/walletRecovery.d.ts +8 -7
  903. package/dist/types/wallet/src/SeamsWeb/operations/recovery/walletRecoveryCodeBackup.d.ts +1 -1
  904. package/dist/types/wallet/src/SeamsWeb/operations/recovery/walletRecoveryCommit.d.ts +0 -2
  905. package/dist/types/wallet/src/SeamsWeb/operations/recovery/walletRecoveryRotation.d.ts +0 -8
  906. package/dist/types/wallet/src/SeamsWeb/operations/registration/pendingEcdsaRegistrationRecovery.d.ts +1 -1
  907. package/dist/types/wallet/src/SeamsWeb/operations/registration/pendingEcdsaRegistrationRecoveryValidation.d.ts +2 -2
  908. package/dist/types/wallet/src/SeamsWeb/operations/registration/pendingRegistrationRecovery.d.ts +8 -10
  909. package/dist/types/wallet/src/SeamsWeb/operations/registration/registration.d.ts +10 -234
  910. package/dist/types/wallet/src/SeamsWeb/operations/registration/registrationEd25519Yao.d.ts +18 -5
  911. package/dist/types/wallet/src/SeamsWeb/operations/registration/registrationSignerSet.d.ts +2 -6
  912. package/dist/types/wallet/src/SeamsWeb/operations/registration/registrationStrictEcdsa.d.ts +1 -7
  913. package/dist/types/wallet/src/SeamsWeb/operations/registration/registrationTerminalCommit.d.ts +2 -2
  914. package/dist/types/wallet/src/SeamsWeb/operations/registration/registrationTiming.d.ts +49 -275
  915. package/dist/types/wallet/src/SeamsWeb/operations/session/thresholdEcdsaProvisioning.d.ts +3 -2
  916. package/dist/types/wallet/src/SeamsWeb/operations/tempo/executeEvmFamilyTransaction.d.ts +1 -1
  917. package/dist/types/wallet/src/SeamsWeb/publicApi/awaitNearReady.d.ts +0 -1
  918. package/dist/types/wallet/src/SeamsWeb/publicApi/capabilitySelection.d.ts +1 -1
  919. package/dist/types/wallet/src/SeamsWeb/publicApi/currentWallet.d.ts +2 -1
  920. package/dist/types/wallet/src/SeamsWeb/publicApi/devices.d.ts +1 -1
  921. package/dist/types/wallet/src/SeamsWeb/publicApi/keyExport.d.ts +1 -4
  922. package/dist/types/wallet/src/SeamsWeb/publicApi/near.d.ts +0 -8
  923. package/dist/types/wallet/src/SeamsWeb/publicApi/transactionReview.d.ts +2 -1
  924. package/dist/types/wallet/src/SeamsWeb/publicApi/types.d.ts +22 -20
  925. package/dist/types/wallet/src/SeamsWeb/registrationIntent.typecheck.d.ts +8 -0
  926. package/dist/types/wallet/src/SeamsWeb/signingSurface/BrowserSigningSurface.d.ts +14 -61
  927. package/dist/types/wallet/src/SeamsWeb/signingSurface/ports.d.ts +2 -4
  928. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/overlay/overlay-controller.d.ts +3 -3
  929. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/overlay/overlay-styles.d.ts +3 -3
  930. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/progress/on-events-progress-bus.d.ts +0 -13
  931. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/router.d.ts +3 -4
  932. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/surface/domain.d.ts +8 -39
  933. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/surface/geometry.d.ts +3 -7
  934. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/surface/renderer.d.ts +2 -2
  935. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/transport/IframeTransport.d.ts +3 -7
  936. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/transport/iframe-transport-dom.d.ts +2 -3
  937. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/transport/iframe-transport-handshake.d.ts +1 -11
  938. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/transport/webauthn-bridge.d.ts +0 -6
  939. package/dist/types/wallet/src/SeamsWeb/walletIframe/coordinator.d.ts +2 -1
  940. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/auth-menu/controller.d.ts +2 -3
  941. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/auth-menu/domain.d.ts +2 -8
  942. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/auth-menu/passkey.d.ts +3 -3
  943. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/auth-menu/session.d.ts +2 -4
  944. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/bootstrap.d.ts +0 -4
  945. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/canonicalSignerErrorCode.d.ts +2 -7
  946. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/context.d.ts +0 -5
  947. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/handlers/authMenu.d.ts +0 -1
  948. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/handlers/walletIframeHandler.types.d.ts +0 -13
  949. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/hostedWalletSeamsSession.d.ts +1 -2
  950. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/requestRouter.d.ts +10 -10
  951. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/runtimeLoader.d.ts +2 -1
  952. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/ui/auth-menu/AuthMenuSurface.d.ts +2 -1
  953. package/dist/types/wallet/src/SeamsWeb/walletIframe/sanitization.d.ts +0 -7
  954. package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/exactSessionReconciliation.d.ts +3 -2
  955. package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/exactSessionState.d.ts +2 -2
  956. package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/messages.d.ts +53 -58
  957. package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/transactionReview.d.ts +3 -2
  958. package/dist/types/wallet/src/core/accountData/near/accountProjection.d.ts +4 -49
  959. package/dist/types/wallet/src/core/accountData/near/keyMaterial.d.ts +1 -16
  960. package/dist/types/wallet/src/core/accountData/near/profileId.d.ts +2 -2
  961. package/dist/types/wallet/src/core/browser/walletIframe/events.d.ts +0 -1
  962. package/dist/types/wallet/src/core/config/chains.d.ts +0 -2
  963. package/dist/types/wallet/src/core/config/configBuilder.d.ts +0 -4
  964. package/dist/types/wallet/src/core/config/configHelpers.d.ts +1 -21
  965. package/dist/types/wallet/src/core/config/defaultConfigs.d.ts +1 -4
  966. package/dist/types/wallet/src/core/config/registrationConfig.typecheck.d.ts +1 -2
  967. package/dist/types/wallet/src/core/indexedDB/accountKeyMaterial.d.ts +5 -4
  968. package/dist/types/wallet/src/core/indexedDB/accountSignerLifecycle.d.ts +1 -1
  969. package/dist/types/wallet/src/core/indexedDB/index.d.ts +1 -5
  970. package/dist/types/wallet/src/core/indexedDB/keyMaterialEnvelope.d.ts +1 -2
  971. package/dist/types/wallet/src/core/indexedDB/linkedAuthoritySignerMaterial.d.ts +3 -3
  972. package/dist/types/wallet/src/core/indexedDB/normalization.d.ts +0 -3
  973. package/dist/types/wallet/src/core/indexedDB/passkeyClientDB.types.d.ts +5 -18
  974. package/dist/types/wallet/src/core/indexedDB/pendingWalletRegistrationCommit.d.ts +2 -4
  975. package/dist/types/wallet/src/core/indexedDB/profileAccountProjection.d.ts +3 -14
  976. package/dist/types/wallet/src/core/indexedDB/schemaNames.d.ts +2 -1
  977. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestLookups.d.ts +177 -0
  978. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestRecords.d.ts +155 -0
  979. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestStore.d.ts +15 -256
  980. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/ecdsaClientPresignatures.d.ts +101 -0
  981. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/laneHolderMaterialStore.d.ts +0 -1
  982. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/manager.d.ts +2 -1
  983. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/pendingWalletRecoveryCodeBackup.d.ts +3 -2
  984. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/repositories.d.ts +49 -44
  985. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/signingSessionSeals.d.ts +2 -1
  986. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/walletCustodyEcdsaContinuity.d.ts +47 -0
  987. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/walletSessionAuthorizationStore.d.ts +2 -2
  988. package/dist/types/wallet/src/core/indexedDB/unifiedIndexedDBManager.d.ts +7 -4
  989. package/dist/types/wallet/src/core/platform/ecdsaRoleLocalRecords.d.ts +1 -40
  990. package/dist/types/wallet/src/core/platform/secretSources.d.ts +1 -1
  991. package/dist/types/wallet/src/core/platform/signerCoreCommandAdapters.typecheck.d.ts +25 -0
  992. package/dist/types/wallet/src/core/rpcClients/evm/EvmClient.d.ts +1 -2
  993. package/dist/types/wallet/src/core/rpcClients/evm/nonceBackend.d.ts +6 -22
  994. package/dist/types/wallet/src/core/rpcClients/near/NearClient.d.ts +13 -133
  995. package/dist/types/wallet/src/core/rpcClients/near/rpcCalls.d.ts +5 -31
  996. package/dist/types/wallet/src/core/rpcClients/relayer/ownerWalletExecutionLanePreflight.d.ts +0 -1
  997. package/dist/types/wallet/src/core/rpcClients/relayer/passkeyCustodyEnvelope.d.ts +4 -3
  998. package/dist/types/wallet/src/core/rpcClients/relayer/registrationSignerSetRequest.d.ts +3 -2
  999. package/dist/types/wallet/src/core/rpcClients/relayer/relayerHttp.d.ts +2 -2
  1000. package/dist/types/wallet/src/core/rpcClients/relayer/routerAbNormalSigning.d.ts +10 -39
  1001. package/dist/types/wallet/src/core/rpcClients/relayer/sealedRefreshCapabilities.d.ts +0 -14
  1002. package/dist/types/wallet/src/core/rpcClients/relayer/thresholdEcdsa.d.ts +4 -66
  1003. package/dist/types/wallet/src/core/rpcClients/relayer/walletRecoveryFinalize.d.ts +2 -5
  1004. package/dist/types/wallet/src/core/rpcClients/relayer/walletRecoveryGoogleEmailOtp.d.ts +4 -7
  1005. package/dist/types/wallet/src/core/rpcClients/relayer/walletRecoveryPrepare.d.ts +4 -4
  1006. package/dist/types/wallet/src/core/rpcClients/relayer/walletRecoveryRotate.d.ts +3 -19
  1007. package/dist/types/wallet/src/core/rpcClients/relayer/walletRegistration.d.ts +32 -106
  1008. package/dist/types/wallet/src/core/rpcClients/relayer/walletRegistrationTerminalResponse.d.ts +2 -2
  1009. package/dist/types/wallet/src/core/rpcClients/relayer/walletSessionAuthorizationStatus.d.ts +2 -10
  1010. package/dist/types/wallet/src/core/runtime/runtime.types.d.ts +7 -6
  1011. package/dist/types/wallet/src/core/signingEngine/assembly/createManagers.d.ts +2 -1
  1012. package/dist/types/wallet/src/core/signingEngine/assembly/ports/warmSigning.d.ts +1 -1
  1013. package/dist/types/wallet/src/core/signingEngine/assembly/warmup.d.ts +2 -1
  1014. package/dist/types/wallet/src/core/signingEngine/chains/evm/bytes.d.ts +0 -2
  1015. package/dist/types/wallet/src/core/signingEngine/chains/evm/display/evmTx.d.ts +2 -1
  1016. package/dist/types/wallet/src/core/signingEngine/chains/evm/display/functionSelectors.d.ts +0 -1
  1017. package/dist/types/wallet/src/core/signingEngine/chains/evm/evmAdapter.d.ts +2 -1
  1018. package/dist/types/wallet/src/core/signingEngine/chains/evm/evmCryptoWasm.d.ts +0 -9
  1019. package/dist/types/wallet/src/core/signingEngine/chains/evm/evmSigning.types.d.ts +2 -2
  1020. package/dist/types/wallet/src/core/signingEngine/chains/near/display.d.ts +4 -2
  1021. package/dist/types/wallet/src/core/signingEngine/chains/near/payloads.d.ts +4 -3
  1022. package/dist/types/wallet/src/core/signingEngine/chains/tempo/display.d.ts +2 -1
  1023. package/dist/types/wallet/src/core/signingEngine/chains/tempo/tempoAdapter.d.ts +2 -1
  1024. package/dist/types/wallet/src/core/signingEngine/chains/tempo/tempoSigning.types.d.ts +4 -7
  1025. package/dist/types/wallet/src/core/signingEngine/flows/recovery/ecdsaDerivationExport.d.ts +4 -101
  1026. package/dist/types/wallet/src/core/signingEngine/flows/recovery/ecdsaExportMaterial.d.ts +1 -17
  1027. package/dist/types/wallet/src/core/signingEngine/flows/recovery/ed25519YaoExportFlow.d.ts +1 -1
  1028. package/dist/types/wallet/src/core/signingEngine/flows/recovery/exportKeypairOperation.d.ts +1 -1
  1029. package/dist/types/wallet/src/core/signingEngine/flows/recovery/keyExportConfirmation.d.ts +2 -5
  1030. package/dist/types/wallet/src/core/signingEngine/flows/recovery/keyExportFlow.d.ts +2 -2
  1031. package/dist/types/wallet/src/core/signingEngine/flows/recovery/passkeyEd25519YaoRecovery.d.ts +3 -6
  1032. package/dist/types/wallet/src/core/signingEngine/flows/recovery/stepUpAuthorization.d.ts +3 -3
  1033. package/dist/types/wallet/src/core/signingEngine/flows/registration/accountLifecycle.d.ts +9 -20
  1034. package/dist/types/wallet/src/core/signingEngine/flows/registration/nearProvisioningRegistry.d.ts +2 -20
  1035. package/dist/types/wallet/src/core/signingEngine/flows/registration/services/ecdsaRegistrationSessions.d.ts +2 -1
  1036. package/dist/types/wallet/src/core/signingEngine/flows/registration/services/passkeyEd25519YaoAddSigner.d.ts +5 -10
  1037. package/dist/types/wallet/src/core/signingEngine/flows/shared/signingConfirmation.d.ts +0 -15
  1038. package/dist/types/wallet/src/core/signingEngine/flows/shared/signingStateMachine.d.ts +7 -50
  1039. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/authPlanning.d.ts +1 -1
  1040. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/ecdsaSelection.d.ts +2 -6
  1041. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/emailOtpSigningSession.d.ts +1 -1
  1042. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/errors.d.ts +3 -15
  1043. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/executorThresholdState.d.ts +0 -4
  1044. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/freshAuthRetryPolicy.d.ts +3 -3
  1045. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/freshWalletSessionRetry.d.ts +2 -1
  1046. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/nonceResolution.d.ts +0 -1
  1047. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/preparedSigning.d.ts +5 -14
  1048. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/readySecp256k1Material.d.ts +0 -5
  1049. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/requireEvmFamilyStepUpAuth.d.ts +7 -7
  1050. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/signatureUses.d.ts +0 -2
  1051. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/signerLoader.d.ts +5 -4
  1052. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/signers/secp256k1.d.ts +2 -3
  1053. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/signingFlow.d.ts +12 -12
  1054. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/signingFlowRuntime.d.ts +1 -41
  1055. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/stepUpAuthorization.d.ts +4 -22
  1056. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/thresholdAdmission.d.ts +2 -1
  1057. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/types.d.ts +2 -1
  1058. package/dist/types/wallet/src/core/signingEngine/flows/signNear/implicitAccountFunding.d.ts +1 -1
  1059. package/dist/types/wallet/src/core/signingEngine/flows/signNear/requireNearStepUpAuth.d.ts +3 -3
  1060. package/dist/types/wallet/src/core/signingEngine/flows/signNear/shared/ed25519YaoCapabilityResolution.d.ts +1 -1
  1061. package/dist/types/wallet/src/core/signingEngine/flows/signNear/shared/ed25519YaoNormalSigning.d.ts +2 -2
  1062. package/dist/types/wallet/src/core/signingEngine/flows/signNear/shared/operationStepUpPreparation.d.ts +1 -1
  1063. package/dist/types/wallet/src/core/signingEngine/flows/signNear/shared/signatureOnlySigning.d.ts +126 -0
  1064. package/dist/types/wallet/src/core/signingEngine/flows/signNear/shared/signingMaterials.d.ts +2 -1
  1065. package/dist/types/wallet/src/core/signingEngine/flows/signNear/shared/signingSessionAuthMode.d.ts +3 -3
  1066. package/dist/types/wallet/src/core/signingEngine/flows/signNear/signNear.d.ts +6 -5
  1067. package/dist/types/wallet/src/core/signingEngine/flows/signNear/stepUpAuthorization.d.ts +1 -6
  1068. package/dist/types/wallet/src/core/signingEngine/interfaces/accountAuthMetadata.d.ts +0 -1
  1069. package/dist/types/wallet/src/core/signingEngine/interfaces/display.d.ts +7 -6
  1070. package/dist/types/wallet/src/core/signingEngine/interfaces/ecdsaChainTarget.d.ts +1 -1
  1071. package/dist/types/wallet/src/core/signingEngine/interfaces/near.d.ts +5 -44
  1072. package/dist/types/wallet/src/core/signingEngine/interfaces/operationDeps.d.ts +2 -14
  1073. package/dist/types/wallet/src/core/signingEngine/interfaces/operationStepUpPreparation.d.ts +1 -1
  1074. package/dist/types/wallet/src/core/signingEngine/interfaces/signing.d.ts +8 -17
  1075. package/dist/types/wallet/src/core/signingEngine/nonce/evmNonceLane.d.ts +2 -2
  1076. package/dist/types/wallet/src/core/signingEngine/nonce/nearNonceLane.d.ts +5 -29
  1077. package/dist/types/wallet/src/core/signingEngine/nonce/nearNonceLaneIdentity.d.ts +0 -1
  1078. package/dist/types/wallet/src/core/signingEngine/nonce/nearTransactionReadiness.d.ts +2 -1
  1079. package/dist/types/wallet/src/core/signingEngine/nonce/nonceCoordinationRecordBoundary.d.ts +0 -1
  1080. package/dist/types/wallet/src/core/signingEngine/nonce/nonceDiagnostics.d.ts +3 -4
  1081. package/dist/types/wallet/src/core/signingEngine/nonce/nonceLaneKeys.d.ts +1 -3
  1082. package/dist/types/wallet/src/core/signingEngine/nonce/nonceLeaseState.d.ts +2 -1
  1083. package/dist/types/wallet/src/core/signingEngine/nonce/nonceTypes.d.ts +13 -13
  1084. package/dist/types/wallet/src/core/signingEngine/routerAb/ecdsaDerivation/clientCeremony.d.ts +1 -1
  1085. package/dist/types/wallet/src/core/signingEngine/routerAb/ecdsaDerivation/httpRequest.d.ts +0 -1
  1086. package/dist/types/wallet/src/core/signingEngine/routerAb/ecdsaDerivation/poolFillRoutes.d.ts +5 -4
  1087. package/dist/types/wallet/src/core/signingEngine/routerAb/ecdsaDerivation/presignaturePool.d.ts +1 -7
  1088. package/dist/types/wallet/src/core/signingEngine/routerAb/ecdsaDerivation/presignatureRefillProgress.d.ts +2 -1
  1089. package/dist/types/wallet/src/core/signingEngine/routerAb/ecdsaDerivation/registrationPendingFinalization.d.ts +1 -1
  1090. package/dist/types/wallet/src/core/signingEngine/session/SigningSessionCoordinator.d.ts +5 -8
  1091. package/dist/types/wallet/src/core/signingEngine/session/authority/authorityOperationResolver.d.ts +1 -1
  1092. package/dist/types/wallet/src/core/signingEngine/session/availability/availableSigningLanes.d.ts +14 -37
  1093. package/dist/types/wallet/src/core/signingEngine/session/availability/clientSessionExpiryInvalidator.d.ts +3 -2
  1094. package/dist/types/wallet/src/core/signingEngine/session/availability/persistedAvailableSigningLanes.d.ts +3 -2
  1095. package/dist/types/wallet/src/core/signingEngine/session/availability/readiness.d.ts +6 -31
  1096. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/challengeDelivery.d.ts +0 -5
  1097. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/coordinatorRuntime.d.ts +0 -1
  1098. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/ecdsaBootstrapCommit.d.ts +1 -21
  1099. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/ecdsaLogin.d.ts +6 -61
  1100. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/ecdsaPublication.d.ts +4 -21
  1101. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/ecdsaRecovery.d.ts +3 -19
  1102. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/ecdsaSigningSessionAuthority.d.ts +3 -2
  1103. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/ed25519ExportContext.d.ts +4 -6
  1104. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/exportRecoveryRuntime.d.ts +0 -1
  1105. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/ports.d.ts +2 -3
  1106. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/publicTypes.d.ts +4 -6
  1107. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/routePlan.d.ts +4 -15
  1108. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/runtimeConfig.d.ts +2 -1
  1109. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/sealedRefreshPolicy.d.ts +4 -17
  1110. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/sealedRestoreOrchestrator.d.ts +2 -1
  1111. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/sealedSessionRegistry.d.ts +2 -1
  1112. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/secretEscrow.d.ts +4 -11
  1113. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/walletUnlock.d.ts +1 -1
  1114. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/warmSessionRuntime.d.ts +2 -1
  1115. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/workerRequests.d.ts +1 -1
  1116. package/dist/types/wallet/src/core/signingEngine/session/holderShares/holderShareHandle.d.ts +0 -13
  1117. package/dist/types/wallet/src/core/signingEngine/session/identity/clientSessionPersistenceState.d.ts +6 -7
  1118. package/dist/types/wallet/src/core/signingEngine/session/identity/emailOtpEcdsaDerivationIdentity.d.ts +0 -3
  1119. package/dist/types/wallet/src/core/signingEngine/session/identity/evmFamilyEcdsaIdentity.d.ts +17 -31
  1120. package/dist/types/wallet/src/core/signingEngine/session/identity/exactSigningLaneIdentity.d.ts +10 -27
  1121. package/dist/types/wallet/src/core/signingEngine/session/identity/exactWalletSessionCredential.d.ts +9 -8
  1122. package/dist/types/wallet/src/core/signingEngine/session/identity/laneIdentity.d.ts +8 -12
  1123. package/dist/types/wallet/src/core/signingEngine/session/identity/ownerLaneScope.d.ts +9 -17
  1124. package/dist/types/wallet/src/core/signingEngine/session/identity/selectLane.d.ts +12 -28
  1125. package/dist/types/wallet/src/core/signingEngine/session/identity/signingLaneAuthBinding.d.ts +4 -3
  1126. package/dist/types/wallet/src/core/signingEngine/session/identity/walletUnlockSubject.d.ts +1 -1
  1127. package/dist/types/wallet/src/core/signingEngine/session/keyMaterialBrands.d.ts +3 -27
  1128. package/dist/types/wallet/src/core/signingEngine/session/lanes/operations/activationCoordinator.d.ts +0 -1
  1129. package/dist/types/wallet/src/core/signingEngine/session/lanes/operations/laneMaterialInvalidation.d.ts +2 -37
  1130. package/dist/types/wallet/src/core/signingEngine/session/lanes/operations/recipientPreparation.d.ts +4 -16
  1131. package/dist/types/wallet/src/core/signingEngine/session/lanes/walletExecutionLaneHydration.d.ts +5 -42
  1132. package/dist/types/wallet/src/core/signingEngine/session/lifecycle/canonicalWalletSessionStatus.d.ts +2 -1
  1133. package/dist/types/wallet/src/core/signingEngine/session/lifecycle/walletSessionStatus.d.ts +2 -6
  1134. package/dist/types/wallet/src/core/signingEngine/session/material/activeEcdsaCapabilityRuntime.d.ts +4 -3
  1135. package/dist/types/wallet/src/core/signingEngine/session/material/activeWalletAuthorityEcdsaRuntime.d.ts +5 -5
  1136. package/dist/types/wallet/src/core/signingEngine/session/material/ecdsaCapabilityHydration.d.ts +1 -1
  1137. package/dist/types/wallet/src/core/signingEngine/session/material/ecdsaCapabilityManifest.d.ts +5 -5
  1138. package/dist/types/wallet/src/core/signingEngine/session/material/ecdsaRoleLocalMaterialResolver.d.ts +2 -2
  1139. package/dist/types/wallet/src/core/signingEngine/session/material/ecdsaSealedRuntime.d.ts +3 -31
  1140. package/dist/types/wallet/src/core/signingEngine/session/material/ecdsaSigningCapability.d.ts +5 -9
  1141. package/dist/types/wallet/src/core/signingEngine/session/material/mpcCapabilityHydration.d.ts +4 -5
  1142. package/dist/types/wallet/src/core/signingEngine/session/material/nearEd25519YaoSigningPreparation.d.ts +5 -4
  1143. package/dist/types/wallet/src/core/signingEngine/session/material/walletSigningStateFailure.d.ts +9 -8
  1144. package/dist/types/wallet/src/core/signingEngine/session/operationState/authorizationAdmission.d.ts +5 -9
  1145. package/dist/types/wallet/src/core/signingEngine/session/operationState/lanes.d.ts +13 -16
  1146. package/dist/types/wallet/src/core/signingEngine/session/operationState/preparedOperation.d.ts +2 -1
  1147. package/dist/types/wallet/src/core/signingEngine/session/operationState/trace.d.ts +6 -9
  1148. package/dist/types/wallet/src/core/signingEngine/session/operationState/transactionState.d.ts +5 -26
  1149. package/dist/types/wallet/src/core/signingEngine/session/operationState/types.d.ts +16 -32
  1150. package/dist/types/wallet/src/core/signingEngine/session/passkey/ecdsaBootstrap.d.ts +4 -4
  1151. package/dist/types/wallet/src/core/signingEngine/session/passkey/ecdsaSessionProvision.d.ts +3 -19
  1152. package/dist/types/wallet/src/core/signingEngine/session/passkey/ecdsaWarmCapabilityBootstrap.d.ts +4 -15
  1153. package/dist/types/wallet/src/core/signingEngine/session/passkey/ed25519Provisioner.d.ts +2 -1
  1154. package/dist/types/wallet/src/core/signingEngine/session/passkey/ed25519SessionProvision.d.ts +1 -1
  1155. package/dist/types/wallet/src/core/signingEngine/session/passkey/ed25519SessionProvision.typecheck.d.ts +7 -1
  1156. package/dist/types/wallet/src/core/signingEngine/session/passkey/ed25519YaoLocalMaterial.d.ts +10 -94
  1157. package/dist/types/wallet/src/core/signingEngine/session/passkey/ed25519YaoSealedSession.d.ts +3 -2
  1158. package/dist/types/wallet/src/core/signingEngine/session/passkey/ed25519YaoWarmRecovery.d.ts +3 -13
  1159. package/dist/types/wallet/src/core/signingEngine/session/passkey/passkeyCustodySessionCache.d.ts +0 -40
  1160. package/dist/types/wallet/src/core/signingEngine/session/passkey/prfCache.d.ts +2 -1
  1161. package/dist/types/wallet/src/core/signingEngine/session/passkey/unlockEcdsaWarmupPlanner.d.ts +5 -5
  1162. package/dist/types/wallet/src/core/signingEngine/session/passkey/warmSessionMaterialWriter.d.ts +1 -1
  1163. package/dist/types/wallet/src/core/signingEngine/session/persistence/durableSealedSessionCommands.d.ts +5 -7
  1164. package/dist/types/wallet/src/core/signingEngine/session/persistence/ecdsaRoleLocalRecords.d.ts +0 -1
  1165. package/dist/types/wallet/src/core/signingEngine/session/persistence/ecdsaSealedRecordKey.d.ts +2 -1
  1166. package/dist/types/wallet/src/core/signingEngine/session/persistence/sealedSessionRecords.d.ts +212 -0
  1167. package/dist/types/wallet/src/core/signingEngine/session/persistence/sealedSessionStore.d.ts +4 -199
  1168. package/dist/types/wallet/src/core/signingEngine/session/postconditions/runtimePostconditions.d.ts +6 -35
  1169. package/dist/types/wallet/src/core/signingEngine/session/public.d.ts +1 -1
  1170. package/dist/types/wallet/src/core/signingEngine/session/routerAbSigningWalletSession.d.ts +4 -3
  1171. package/dist/types/wallet/src/core/signingEngine/session/sealedRecovery/recoveryRecord.d.ts +2 -2
  1172. package/dist/types/wallet/src/core/signingEngine/session/userPreferences.d.ts +2 -1
  1173. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/capabilityReader.d.ts +3 -6
  1174. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/capabilityReaderCore.d.ts +5 -4
  1175. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/clearVolatileWarmSigningMaterial.d.ts +2 -1
  1176. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/ecdsaLoginPrefill.d.ts +2 -1
  1177. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/ecdsaProvisionPlan.d.ts +6 -40
  1178. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/ecdsaProvisionPlan.typecheck.d.ts +4 -0
  1179. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/ed25519SealedSessionRuntime.d.ts +3 -36
  1180. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/persistencePorts.d.ts +2 -70
  1181. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/readModel.d.ts +4 -12
  1182. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/routerAbEd25519WalletSessionState.d.ts +4 -3
  1183. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/routerAbWalletSessionCredential.d.ts +2 -1
  1184. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/transitions.d.ts +3 -2
  1185. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/types.d.ts +5 -36
  1186. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/types.typecheck.d.ts +10 -1
  1187. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/volatileWarmMaterialCommands.d.ts +1 -2
  1188. package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/channel/confirmCommon.d.ts +3 -2
  1189. package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/channel/confirmTypes.d.ts +6 -17
  1190. package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/confirmOperation.d.ts +4 -5
  1191. package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/methodRunners.d.ts +4 -3
  1192. package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/methodSelection.d.ts +5 -10
  1193. package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/otpPrompt/exportAuthorization.d.ts +7 -6
  1194. package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/otpPrompt/signingPrompt.d.ts +2 -2
  1195. package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/passkeyPrompt/touchIdPrompt.d.ts +2 -3
  1196. package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/passkeyPrompt/webauthnPromptCoordinator.d.ts +3 -7
  1197. package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/requireStepUpAuth.d.ts +2 -2
  1198. package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/types.d.ts +8 -8
  1199. package/dist/types/wallet/src/core/signingEngine/threshold/commitQueueShared.d.ts +2 -2
  1200. package/dist/types/wallet/src/core/signingEngine/threshold/crypto/ecdsaDerivationClientWasm.d.ts +4 -16
  1201. package/dist/types/wallet/src/core/signingEngine/threshold/crypto/ecdsaLaneWasm.d.ts +0 -9
  1202. package/dist/types/wallet/src/core/signingEngine/threshold/crypto/ed25519YaoLaneWasm.d.ts +5 -31
  1203. package/dist/types/wallet/src/core/signingEngine/threshold/crypto/webauthn.d.ts +1 -46
  1204. package/dist/types/wallet/src/core/signingEngine/threshold/ecdsa/activation.d.ts +2 -9
  1205. package/dist/types/wallet/src/core/signingEngine/threshold/ecdsa/operationStepUp.d.ts +2 -1
  1206. package/dist/types/wallet/src/core/signingEngine/threshold/ecdsa/postRegistrationSessionActivation.d.ts +5 -4
  1207. package/dist/types/wallet/src/core/signingEngine/threshold/ecdsa/signingQueue.d.ts +3 -6
  1208. package/dist/types/wallet/src/core/signingEngine/threshold/ed25519/commitQueue.d.ts +3 -6
  1209. package/dist/types/wallet/src/core/signingEngine/threshold/ed25519/connectSession.d.ts +1 -1
  1210. package/dist/types/wallet/src/core/signingEngine/threshold/ed25519/walletSession.d.ts +6 -6
  1211. package/dist/types/wallet/src/core/signingEngine/threshold/ed25519/yaoActiveClientRegistry.d.ts +2 -1
  1212. package/dist/types/wallet/src/core/signingEngine/threshold/ed25519/yaoClient.d.ts +17 -49
  1213. package/dist/types/wallet/src/core/signingEngine/threshold/ed25519/yaoPageLifecycleOwner.d.ts +2 -1
  1214. package/dist/types/wallet/src/core/signingEngine/threshold/ed25519/yaoPublicCapabilityReferences.d.ts +2 -15
  1215. package/dist/types/wallet/src/core/signingEngine/threshold/sessionPolicy.d.ts +2 -53
  1216. package/dist/types/wallet/src/core/signingEngine/uiConfirm/handlers/flows/adapters/adapters.d.ts +1 -1
  1217. package/dist/types/wallet/src/core/signingEngine/uiConfirm/handlers/flows/adapters/request.d.ts +1 -5
  1218. package/dist/types/wallet/src/core/signingEngine/uiConfirm/handlers/flows/signing.d.ts +1 -7
  1219. package/dist/types/wallet/src/core/signingEngine/uiConfirm/nearFundingNotice.d.ts +2 -5
  1220. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/confirm-surface-resize.d.ts +3 -32
  1221. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/confirm-ui-types.d.ts +2 -0
  1222. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/confirmation-model.d.ts +3 -2
  1223. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/export-private-key-reveal.d.ts +0 -1
  1224. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/ConfirmationModal.d.ts +2 -1
  1225. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/EmailOtpInput.d.ts +2 -1
  1226. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/PadlockIcon.d.ts +2 -1
  1227. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/TransactionLabel.d.ts +1 -0
  1228. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/TransactionReceipt.d.ts +11 -2
  1229. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/TransactionReview.d.ts +4 -21
  1230. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/TransactionTree.d.ts +1 -1
  1231. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/confirmation-controller.d.ts +2 -1
  1232. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/email-otp-session.d.ts +2 -1
  1233. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/mountRecoveryCodeBackupSurface.d.ts +2 -2
  1234. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/seamsWordmarkPaths.d.ts +0 -2
  1235. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/surface-resize-events.d.ts +2 -2
  1236. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/transaction-display/renderers/fallback.d.ts +0 -2
  1237. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/transaction-display/renderers/types.d.ts +2 -1
  1238. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/transaction-display/tree.d.ts +3 -3
  1239. package/dist/types/wallet/src/core/signingEngine/uiConfirm/uiConfirm.types.d.ts +9 -9
  1240. package/dist/types/wallet/src/core/signingEngine/walletCustody/activateEd25519Capability.d.ts +2 -1
  1241. package/dist/types/wallet/src/core/signingEngine/walletCustody/ceremonyActiveClientMetadata.d.ts +3 -4
  1242. package/dist/types/wallet/src/core/signingEngine/walletCustody/ceremonyDriver.d.ts +1 -1
  1243. package/dist/types/wallet/src/core/signingEngine/walletCustody/ceremonyStepRunner.d.ts +4 -3
  1244. package/dist/types/wallet/src/core/signingEngine/walletCustody/ed25519SeedMaterial.d.ts +1 -1
  1245. package/dist/types/wallet/src/core/signingEngine/walletCustody/emailOtpLink.d.ts +2 -1
  1246. package/dist/types/wallet/src/core/signingEngine/walletCustody/joinCustodyWire.d.ts +2 -1
  1247. package/dist/types/wallet/src/core/signingEngine/walletCustody/openCustodyCache.d.ts +6 -5
  1248. package/dist/types/wallet/src/core/signingEngine/walletCustody/passkeyLink.d.ts +1 -52
  1249. package/dist/types/wallet/src/core/signingEngine/walletCustody/recoveryReplacementEnvelope.d.ts +0 -5
  1250. package/dist/types/wallet/src/core/signingEngine/walletCustody/registrationCeremony.d.ts +16 -26
  1251. package/dist/types/wallet/src/core/signingEngine/walletCustody/unlockedEd25519ExportRootCapability.d.ts +22 -12
  1252. package/dist/types/wallet/src/core/signingEngine/walletCustody/walletRecoveryEd25519.d.ts +1 -1
  1253. package/dist/types/wallet/src/core/signingEngine/walletCustody/walletRecoveryRotation.d.ts +3 -2
  1254. package/dist/types/wallet/src/core/signingEngine/webauthnAuth/credentials/collectAuthenticationCredentialForChallengeB64u.d.ts +1 -2
  1255. package/dist/types/wallet/src/core/signingEngine/webauthnAuth/credentials/credentialExtensions.d.ts +2 -5
  1256. package/dist/types/wallet/src/core/signingEngine/webauthnAuth/credentials/helpers.d.ts +0 -9
  1257. package/dist/types/wallet/src/core/signingEngine/webauthnAuth/fallbacks/safari-fallbacks.d.ts +4 -9
  1258. package/dist/types/wallet/src/core/signingEngine/workerManager/deviceLinkingPorts.d.ts +3 -12
  1259. package/dist/types/wallet/src/core/signingEngine/workerManager/deviceLinkingSourceContribution.d.ts +17 -9
  1260. package/dist/types/wallet/src/core/signingEngine/workerManager/ecdsaClientWorkerChannels.d.ts +7 -7
  1261. package/dist/types/wallet/src/core/signingEngine/workerManager/workerTransport.d.ts +5 -5
  1262. package/dist/types/wallet/src/core/signingEngine/workerManager/workerTypes.d.ts +75 -81
  1263. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/device-linking-key/ecdsaTargetShareHpke.d.ts +7 -0
  1264. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/device-linking-key/ordinaryMaterialState.d.ts +50 -0
  1265. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/device-linking-key/requests.d.ts +89 -0
  1266. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/device-linking-key.worker.d.ts +1 -10
  1267. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/ecdsaLaneHolderWorkerRuntime.d.ts +2 -2
  1268. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/crypto.d.ts +66 -0
  1269. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/custodyRestore.d.ts +91 -0
  1270. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/dispatch.d.ts +4 -0
  1271. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/ed25519YaoExport.d.ts +45 -0
  1272. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/enrollment.d.ts +47 -0
  1273. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/fetch.d.ts +2 -1
  1274. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/materialParsing.d.ts +45 -0
  1275. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/operationRequestParsing.d.ts +7 -0
  1276. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/otpVerification.d.ts +53 -0
  1277. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/passkeyCustodyLink.d.ts +18 -0
  1278. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/payloadParsing.d.ts +48 -0
  1279. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/recovery.d.ts +9 -0
  1280. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/requestEnvelope.d.ts +11 -0
  1281. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/sessionState.d.ts +74 -0
  1282. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/unlock.d.ts +133 -0
  1283. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/opaqueEcdsaPresignAuthority.d.ts +6 -6
  1284. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/shamir3pass/clientSealPreparation.d.ts +2 -2
  1285. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/shamir3pass/runtime.d.ts +2 -1
  1286. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/workerErrorPayload.d.ts +16 -0
  1287. package/dist/types/wallet/src/core/types/accountIds.d.ts +2 -1
  1288. package/dist/types/wallet/src/core/types/authenticatorOptions.d.ts +0 -2
  1289. package/dist/types/wallet/src/core/types/confirmationConfig.d.ts +4 -4
  1290. package/dist/types/wallet/src/core/types/ecdsaSignerProvisioningDefaults.d.ts +2 -1
  1291. package/dist/types/wallet/src/core/types/errors.d.ts +2 -1
  1292. package/dist/types/wallet/src/core/types/linkDevice.d.ts +2 -3
  1293. package/dist/types/wallet/src/core/types/rpc.d.ts +0 -30
  1294. package/dist/types/wallet/src/core/types/sdkSentEvents.d.ts +11 -11
  1295. package/dist/types/wallet/src/core/types/seams.d.ts +35 -55
  1296. package/dist/types/wallet/src/core/types/secure-confirm-worker.d.ts +3 -5
  1297. package/dist/types/wallet/src/core/types/signer-worker.d.ts +13 -70
  1298. package/dist/types/wallet/src/core/types/webauthn.d.ts +3 -12
  1299. package/dist/types/wallet/src/core/walletRuntimePaths/base.d.ts +0 -28
  1300. package/dist/types/wallet/src/core/walletRuntimePaths/wasm-loader.d.ts +2 -1
  1301. package/dist/types/wallet/src/core/walletRuntimePaths/workers.d.ts +0 -11
  1302. package/dist/types/wallet/src/externalEvm/boundary.d.ts +2 -2
  1303. package/dist/types/wallet/src/index.d.ts +3 -1
  1304. package/dist/types/wallet/src/plugins/plugin-utils.d.ts +1 -3
  1305. package/dist/types/wallet/src/react/components/AccountMenuButton/AccountMenuDialog.d.ts +21 -0
  1306. package/dist/types/wallet/src/react/components/AccountMenuButton/AccountsSection.d.ts +2 -1
  1307. package/dist/types/wallet/src/react/components/AccountMenuButton/AuthenticationMethodsModal.d.ts +1 -1
  1308. package/dist/types/wallet/src/react/components/AccountMenuButton/ExportKeysSection.d.ts +2 -1
  1309. package/dist/types/wallet/src/react/components/AccountMenuButton/LinkedDevicesModal.d.ts +1 -1
  1310. package/dist/types/wallet/src/react/components/AccountMenuButton/SegmentedControl.d.ts +2 -2
  1311. package/dist/types/wallet/src/react/components/AccountMenuButton/UserAccountButton.d.ts +0 -7
  1312. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/GlobeIcon.d.ts +1 -1
  1313. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/KeyIcon.d.ts +1 -1
  1314. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/LaptopIcon.d.ts +1 -1
  1315. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/LinkIcon.d.ts +1 -1
  1316. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/LockIcon.d.ts +1 -1
  1317. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/MailIcon.d.ts +1 -1
  1318. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/MoonIcon.d.ts +1 -5
  1319. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/RecoveryCodesIcon.d.ts +1 -1
  1320. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/ScanIcon.d.ts +1 -1
  1321. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/SlidersIcon.d.ts +1 -1
  1322. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/SmartphoneIcon.d.ts +1 -1
  1323. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/SunIcon.d.ts +1 -5
  1324. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/strokeIcon.d.ts +10 -0
  1325. package/dist/types/wallet/src/react/components/HostedSeamsAuthMenu/types.d.ts +1 -1
  1326. package/dist/types/wallet/src/react/components/QRCodeIcon.d.ts +1 -1
  1327. package/dist/types/wallet/src/react/components/theme/ThemeProvider.d.ts +0 -9
  1328. package/dist/types/wallet/src/react/components/theme/design-tokens.d.ts +2 -205
  1329. package/dist/types/wallet/src/react/context/reactLoginStateBuilders.d.ts +2 -9
  1330. package/dist/types/wallet/src/react/hooks/useAccountInput.d.ts +2 -2
  1331. package/dist/types/wallet/src/react/index.d.ts +3 -1
  1332. package/dist/types/wallet/src/react/transactionReview/boundCalls.d.ts +108 -8
  1333. package/dist/types/wallet/src/react/transactionReview/controller.d.ts +0 -37
  1334. package/dist/types/wallet/src/react/types.d.ts +2 -2
  1335. package/dist/types/wallet/src/utils/deviceDetection.d.ts +2 -58
  1336. package/dist/types/wallet/src/utils/intentDigest.d.ts +1 -6
  1337. package/dist/types/wallet/src/utils/qrScanner.d.ts +4 -38
  1338. package/dist/workers/device-linking-key.worker.js +2954 -3134
  1339. package/dist/workers/ecdsa-derivation-client.worker.js +1688 -2144
  1340. package/dist/workers/ecdsa-online-client.worker.js +9 -117
  1341. package/dist/workers/ecdsa-presign-client.worker.js +44 -147
  1342. package/dist/workers/email-otp.worker.js +9265 -9596
  1343. package/dist/workers/evm-crypto.worker.js +8 -6
  1344. package/dist/workers/near-signer.worker.js +4 -4
  1345. package/dist/workers/near_signer.wasm +0 -0
  1346. package/dist/workers/passkey-confirm.worker.js +6 -3
  1347. package/dist/workers/passkey-mpc-export.worker.js +95 -101
  1348. package/dist/workers/passkey-mpc-session.worker.js +205 -202
  1349. package/dist/workers/router_ab_ecdsa_client_bg.wasm +0 -0
  1350. package/dist/workers/router_ab_ed25519_yao_client_bg.wasm +0 -0
  1351. package/dist/workers/tempo-signer.worker.js +8 -6
  1352. package/dist/workers/wallet-custody-ceremony.worker.js +223 -215
  1353. package/dist/workers/wallet_custody_ceremony_bg.wasm +0 -0
  1354. package/dist/workers/wasm_signer_worker_bg.wasm +0 -0
  1355. package/package.json +1 -1
  1356. package/dist/esm/react/core/types/rpc.js +0 -9
  1357. package/dist/esm/react/shared-ts/src/signing-lanes/linkedEcdsaScope.js +0 -1
  1358. package/dist/esm/react/shared-ts/src/utils/paillier.js +0 -3
  1359. package/dist/esm/sdk/device-linking-DpVGjSeq.js +0 -221
  1360. package/dist/esm/sdk/ecdsaPresignLifecycle-CnSnzoRJ.js +0 -5511
  1361. package/dist/esm/sdk/evmFamilyEcdsaIdentity-_kuKSW35.js +0 -1385
  1362. package/dist/esm/sdk/participants-Bcnsa_ip.js +0 -232
  1363. package/dist/esm/sdk/registrationIntent-DwAIMQYh.js +0 -1623
  1364. package/dist/esm/sdk/signer-worker-DYRteieu.js +0 -48
  1365. package/dist/esm/shared-ts/src/signing-lanes/linkedEcdsaScope.js +0 -1
  1366. package/dist/esm/shared-ts/src/utils/paillier.js +0 -3
  1367. package/dist/public/sdk/device-linking-DpVGjSeq.js +0 -221
  1368. package/dist/public/sdk/ecdsaPresignLifecycle-CnSnzoRJ.js +0 -5511
  1369. package/dist/public/sdk/evmFamilyEcdsaIdentity-_kuKSW35.js +0 -1385
  1370. package/dist/public/sdk/participants-Bcnsa_ip.js +0 -232
  1371. package/dist/public/sdk/registrationIntent-DwAIMQYh.js +0 -1623
  1372. package/dist/public/sdk/signer-worker-DYRteieu.js +0 -48
  1373. package/dist/types/shared-ts/src/passkey-custody/credentialObservations.d.ts +0 -74
  1374. package/dist/types/shared-ts/src/passkey-custody/kekContext.d.ts +0 -34
  1375. package/dist/types/shared-ts/src/signing-lanes/linkedEcdsaScope.d.ts +0 -62
  1376. package/dist/types/shared-ts/src/signing-lanes/linkedEcdsaScope.typecheck.d.ts +0 -2
  1377. package/dist/types/shared-ts/src/signing-lanes/validation.d.ts +0 -11
  1378. package/dist/types/shared-ts/src/utils/bigint.d.ts +0 -3
  1379. package/dist/types/shared-ts/src/utils/paillier.d.ts +0 -37
  1380. package/dist/types/shared-ts/src/utils/recoveryDomain.d.ts +0 -12
  1381. package/dist/types/shared-ts/src/utils/signerDomain.typecheck.d.ts +0 -2
  1382. package/dist/types/shared-ts/src/wallet-recovery/recoveryKekContext.d.ts +0 -37
  1383. package/dist/types/wallet/src/SeamsWeb/operations/devices/qrLinkSession.d.ts +0 -7
  1384. package/dist/types/wallet/src/SeamsWeb/operations/session/thresholdWarmSessionDefaults.d.ts +0 -11
  1385. package/dist/types/wallet/src/SeamsWeb/walletIframe/SeamsWebIframe.d.ts +0 -113
  1386. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/env.d.ts +0 -7
  1387. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/index.d.ts +0 -12
  1388. package/dist/types/wallet/src/SeamsWeb/walletIframe/index.d.ts +0 -21
  1389. package/dist/types/wallet/src/core/platform/webCryptoHkdf.d.ts +0 -7
  1390. package/dist/types/wallet/src/core/rpcClients/relayer/routerAbPublicKeyset.d.ts +0 -5
  1391. package/dist/types/wallet/src/core/rpcClients/relayer/thresholdEcdsa.typecheck.d.ts +0 -2
  1392. package/dist/types/wallet/src/core/rpcClients/relayer/walletCredentialActivity.d.ts +0 -48
  1393. package/dist/types/wallet/src/core/signingEngine/flows/recovery/recoveryStorePorts.d.ts +0 -7
  1394. package/dist/types/wallet/src/core/signingEngine/session/holderShares/holderShareEnvelopeAad.d.ts +0 -14
  1395. package/dist/types/wallet/src/core/signingEngine/session/identity/ecdsaDerivationSigningMaterialHandle.d.ts +0 -19
  1396. package/dist/types/wallet/src/core/signingEngine/session/identity/ecdsaDerivationSigningMaterialHandle.typecheck.d.ts +0 -2
  1397. package/dist/types/wallet/src/core/signingEngine/session/lanes/laneRecords.d.ts +0 -3
  1398. package/dist/types/wallet/src/core/signingEngine/session/lanes/operations/holderDeliveryCoordinator.d.ts +0 -29
  1399. package/dist/types/wallet/src/core/signingEngine/session/lanes/operations/ports.d.ts +0 -53
  1400. package/dist/types/wallet/src/core/signingEngine/session/lanes/operations/sourceLaneOperationCoordinator.d.ts +0 -24
  1401. package/dist/types/wallet/src/core/signingEngine/session/operationState/stepUpFreshness.d.ts +0 -135
  1402. package/dist/types/wallet/src/core/signingEngine/session/operationState/stepUpFreshness.typecheck.d.ts +0 -2
  1403. package/dist/types/wallet/src/core/signingEngine/session/passkey/envelopes/index.d.ts +0 -19
  1404. package/dist/types/wallet/src/core/signingEngine/session/passkey/runtime.d.ts +0 -23
  1405. package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/walletAuthPolicyError.d.ts +0 -17
  1406. package/dist/types/wallet/src/core/signingEngine/threshold/crypto/ed25519WrapKeySalt.d.ts +0 -2
  1407. package/dist/types/wallet/src/core/signingEngine/useCases/lifecycle.d.ts +0 -758
  1408. package/dist/types/wallet/src/core/signingEngine/useCases/lifecycle.typecheck.d.ts +0 -2
  1409. package/dist/types/wallet/src/core/signingEngine/useCases/registerWallet.d.ts +0 -71
  1410. package/dist/types/wallet/src/core/signingEngine/useCases/restorePersistedSessions.d.ts +0 -51
  1411. package/dist/types/wallet/src/core/signingEngine/useCases/signEvmFamily.d.ts +0 -47
  1412. package/dist/types/wallet/src/core/signingEngine/useCases/signNear.d.ts +0 -60
  1413. package/dist/types/wallet/src/core/signingEngine/useCases/unlockWallet.d.ts +0 -69
  1414. package/dist/types/wallet/src/core/signingEngine/walletCustody/coldUnlock.d.ts +0 -57
  1415. package/dist/types/wallet/src/core/signingEngine/workerManager/laneWorkerChannels.d.ts +0 -81
  1416. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/laneHolderWorkerBackend.d.ts +0 -54
  1417. package/dist/types/wallet/src/react/components/AccountMenuButton/HaloBorder/index.d.ts +0 -33
  1418. package/dist/types/wallet/src/react/components/AccountMenuButton/PasskeyHaloLoading.d.ts +0 -10
  1419. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/EclipseIcon.d.ts +0 -8
  1420. package/dist/types/wallet/src/react/components/ArrowRightAnim.d.ts +0 -19
  1421. package/dist/types/wallet/src/react/components/HostedSeamsAuthMenu/index.d.ts +0 -5
  1422. package/dist/types/wallet/src/theme/base-styles.runtime.d.ts +0 -15
  1423. /package/dist/esm/sdk/{base-CMsoJcVv.js → base-D1B5mGin.js} +0 -0
  1424. /package/dist/esm/sdk/{bytes-CwytAKz8.js → bytes-qKxKn4gg.js} +0 -0
  1425. /package/dist/esm/sdk/{csp-stylesheet-DLj_a6t_.js → csp-stylesheet-btENhsNp.js} +0 -0
  1426. /package/dist/esm/sdk/{events-Z_Rmy0Hn.js → events-DYoBL2HO.js} +0 -0
  1427. /package/dist/esm/sdk/{executeWorkerOperation-Bn8GEuT_.js → executeWorkerOperation-Cl9whMK7.js} +0 -0
  1428. /package/dist/esm/sdk/{jsonRpc-MUsR5-C6.js → jsonRpc-VVkaQkFD.js} +0 -0
  1429. /package/dist/esm/sdk/{keccak-DY5wDsym.js → keccak-DUL3d8SF.js} +0 -0
  1430. /package/dist/esm/sdk/{nearRpcResults-DwvW43FL.js → nearRpcResults-DoUgDATm.js} +0 -0
  1431. /package/dist/esm/sdk/{prfCache-CgAr-VEU.js → prfCache-wqQSjYLn.js} +0 -0
  1432. /package/dist/esm/sdk/{profileAccountProjection-C9rVhbeJ.js → profileAccountProjection-uZVJuBvS.js} +0 -0
  1433. /package/dist/esm/sdk/{promptText-BEgOkGxB.js → promptText-CuRa_ivd.js} +0 -0
  1434. /package/dist/esm/sdk/{shared-Qy1DGMqH.js → shared-DkbeLCI3.js} +0 -0
  1435. /package/dist/esm/sdk/{signerSlot-DbNAs-kc.js → signerSlot-_ovonwVX.js} +0 -0
  1436. /package/dist/esm/sdk/{signingSessionSeal-CdtgXHSL.js → signingSessionSeal-Cu-GHm6y.js} +0 -0
  1437. /package/dist/esm/sdk/{surface-measurement-reporter-D7BNehf4.js → surface-measurement-reporter-CSTyRsMa.js} +0 -0
  1438. /package/dist/esm/sdk/{walletIframeIdentity-UmQTJsHc.js → walletIframeIdentity-DB6Z2EC9.js} +0 -0
  1439. /package/dist/esm/sdk/{webauthnPromptCoordinator-CLeba8ru.js → webauthnPromptCoordinator-L96oVvLz.js} +0 -0
  1440. /package/dist/public/sdk/{base-CMsoJcVv.js → base-D1B5mGin.js} +0 -0
  1441. /package/dist/public/sdk/{bytes-CwytAKz8.js → bytes-qKxKn4gg.js} +0 -0
  1442. /package/dist/public/sdk/{csp-stylesheet-DLj_a6t_.js → csp-stylesheet-btENhsNp.js} +0 -0
  1443. /package/dist/public/sdk/{events-Z_Rmy0Hn.js → events-DYoBL2HO.js} +0 -0
  1444. /package/dist/public/sdk/{executeWorkerOperation-Bn8GEuT_.js → executeWorkerOperation-Cl9whMK7.js} +0 -0
  1445. /package/dist/public/sdk/{jsonRpc-MUsR5-C6.js → jsonRpc-VVkaQkFD.js} +0 -0
  1446. /package/dist/public/sdk/{keccak-DY5wDsym.js → keccak-DUL3d8SF.js} +0 -0
  1447. /package/dist/public/sdk/{nearRpcResults-DwvW43FL.js → nearRpcResults-DoUgDATm.js} +0 -0
  1448. /package/dist/public/sdk/{prfCache-CgAr-VEU.js → prfCache-wqQSjYLn.js} +0 -0
  1449. /package/dist/public/sdk/{profileAccountProjection-C9rVhbeJ.js → profileAccountProjection-uZVJuBvS.js} +0 -0
  1450. /package/dist/public/sdk/{promptText-BEgOkGxB.js → promptText-CuRa_ivd.js} +0 -0
  1451. /package/dist/public/sdk/{shared-Qy1DGMqH.js → shared-DkbeLCI3.js} +0 -0
  1452. /package/dist/public/sdk/{signerSlot-DbNAs-kc.js → signerSlot-_ovonwVX.js} +0 -0
  1453. /package/dist/public/sdk/{signingSessionSeal-CdtgXHSL.js → signingSessionSeal-Cu-GHm6y.js} +0 -0
  1454. /package/dist/public/sdk/{surface-measurement-reporter-D7BNehf4.js → surface-measurement-reporter-CSTyRsMa.js} +0 -0
  1455. /package/dist/public/sdk/{walletIframeIdentity-UmQTJsHc.js → walletIframeIdentity-DB6Z2EC9.js} +0 -0
  1456. /package/dist/public/sdk/{webauthnPromptCoordinator-CLeba8ru.js → webauthnPromptCoordinator-L96oVvLz.js} +0 -0
@@ -1,27 +1,29 @@
1
- import { B as parseWalletRecoveryOperationId, E as parseMpcMaterialOwnerRef, F as parseWalletAuthMethodId, H as parseWebAuthnRpId, L as parseWalletAuthorityId, M as parseThresholdEd25519SessionId, P as parseVerifiedEmailAddress, R as parseWalletId, T as parseMpcMaterialActivationRef, V as parseWebAuthnCredentialIdB64u, _ as parseEmailOtpProviderUserId, c as normalizeTrimmedString, f as hasWhitespaceOrControlCharacters, g as parseEmailOtpChallengeId, m as parseCapabilityInstanceRef, p as mpcMaterialActivationRefsEqual, r as normalizeFiniteNumber, z as parseWalletKeyId } from "./normalize-BephcEIF.js";
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 { u as walletSessionPreservesCapabilities } from "./device-linking-DpVGjSeq.js";
5
- import { A as alphabetizeStringify, D as sameWalletAuthMethodRecordV2, F as parseCorrelationId, I as parseDigestB64u, L as parseIsoTimestamp, M as sha256BytesUtf8, N as sha256HexUtf8, b as parseWalletAuthMethodRecordV2, j as sha256Bytes, k as walletIdFromString, m as nearEd25519SigningKeyIdFromString } from "./registrationIntent-DwAIMQYh.js";
6
- import { a as thresholdEcdsaChainTargetFromRequest, c as toWalletId } from "./ecdsaChainTarget-BOTPGIU_.js";
7
- import { r as SIGNER_KINDS } from "./signerDomain-DDLiwuYS.js";
8
- import { a as toIndexedDbChainTargetKey, i as normalizeLastUserScope, n as normalizeIndexedDbAccountModel, r as normalizeIndexedDbChainIdKey, t as normalizeIndexedDbAccountAddress } from "./normalization-oJyXl3Vn.js";
9
- 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-CKqoHbxT.js";
10
- import { d as parseEd25519PublicKeyB64u, o as normalizeRuntimePolicyScope } from "./participants-Bcnsa_ip.js";
11
- 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-Ddavc_FC.js";
12
- import { t as toAccountId } from "./accountIds-Ck4GAQfm.js";
13
- import { D as sameDelegatedWalletAuthorityV1, f as encodeWalletSignerActivationSetV1, h as isActiveRecoveredWalletAuthorityV1, m as isActiveEcdsaWalletAuthorityV1, o as normalizeThresholdRuntimePolicyScope, p as extendEcdsaWalletAuthorityWithEd25519, v as parseWalletAuthorityV1, x as walletAuthorityDigestsMatchV1 } from "./sessionPolicy-B4FsPuk2.js";
14
- import { Bt as parseWalletAuthAuthorityRef, Cn as routerAbMpcMaterialActivationRefToWire, Dt as sameRouterAbEcdsaRegistrationActivationReceiptV1, Ft as isEmailOtpWalletAuthAuthority, I as parseLocalAuthorityInstallationReceiptV1, It as isPasskeyWalletAuthAuthority, Lt as parseEmailOtpWalletAuthAuthority, R as parseWalletSessionOperationCredentialV1, Sn as routerAbMpcMaterialActivationRefFromWire, Tt as sameRouterAbEcdsaDerivationPublicCapabilityV1, V as parseLinkedDeviceEcdsaSourcePreservingActivationReceiptV1, Vt as walletAuthAuthoritiesMatch, _n as sameRouterAbEd25519YaoActivationBindingV1, _t as requireRouterAbEcdsaDerivationNormalSigningStateV1, en as parseRouterAbEd25519YaoActivationPublicReceiptV1, fn as parseRouterAbEd25519YaoRegistrationActivationAdmissionReceiptV1, ft as parseRouterAbEcdsaRegistrationActivationReceiptV1, gt as parseRouterAbEcdsaVerifiedClientActivationFactsV1, hn as parseRouterAbEd25519YaoRegistrationAdmissionRequestV1, it as parseRouterAbEcdsaDerivationPublicCapabilityV1, nn as parseRouterAbEd25519YaoCeremonyBindingV1, on as parseRouterAbEd25519YaoParticipantIdsV1, pn as parseRouterAbEd25519YaoRegistrationActivationExecuteRequestV1, tn as parseRouterAbEd25519YaoApplicationBindingFactsV1, wt as sameRouterAbEcdsaDerivationNormalSigningStateV1, xt as routerAbEcdsaDerivationNormalSigningScopeCanonicalBytesV1, yn as canonicalRouterAbMpcMaterialActivationRefBytes, zt as parseWalletAuthAuthority } from "./ecdsaPresignLifecycle-CnSnzoRJ.js";
15
- import { d as parseMpcWalletSigningQuotaId, h as parseWalletSessionId, l as parseDeviceId, m as parseWalletSessionAuthorizationId } from "./capabilityKinds-jwCEaqBU.js";
16
- import { _t as parseEvmFamilyEcdsaSignerId, b as toParticipantId, bt as parseSdkEcdsaDerivationSigningRootId, ct as parseEcdsaCapabilityManifestId, dt as parseEcdsaCiphertextDigest, ft as parseEcdsaIv12B64u, gt as parseEcdsaServerGeneration, ht as parseEcdsaPendingCiphertextDigest, l as buildVerifiedEcdsaPublicFacts, lt as parseEcdsaCapabilityManifestRevision, mt as parseEcdsaMaterialSealingKeyId, ot as parseCanonicalEcdsaServerActivationRequest, ut as parseEcdsaCiphertextB64u, x as toRpId, xt as parseSdkEcdsaDerivationSigningRootVersion, y as toEvmFamilyEcdsaKeyHandle } from "./evmFamilyEcdsaIdentity-_kuKSW35.js";
17
- import { d as parsePasskeyCustodyEnvelopeRecord, p as sameWalletCustodyEnvelopeOwnership } from "./passkey-custody-BaHyYMhj.js";
18
- import { a as parseEcdsaRelayerKeyId, d as parseEcdsaThresholdKeyId, i as parseEcdsaKeyHandle, l as parseEcdsaRoleLocalPersistedMaterialRef, n as parseEcdsaClientVerifyingPublicKey33B64u, o as parseEcdsaRoleLocalBindingDigest, s as parseEcdsaRoleLocalDurableMaterialRef } from "./keyMaterialBrands-BbjCfzXv.js";
19
- import { v as parseNearProvisioningState } from "./sdkSentEvents-5Pi-hjHB.js";
20
- import { t as parseSignerSlot } from "./signerSlot-DbNAs-kc.js";
21
- import { S as buildEcdsaRoleLocalPublicFacts, _ as buildServerCommittedEcdsaActivationJournal, a as buildEcdsaManifestIdentity, 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-C8itxV9S.js";
22
- import { i as parseEcdsaClientPresignPoolIdentity, n as ecdsaClientPresignPoolKey, r as equalEcdsaClientPresignPoolIdentity } from "./ecdsaPresignPoolIdentity-Yopr4jvS.js";
23
- import { _ as NonceCoordinatorDegradationReason, b as NonceDurableLeaseState, u as nonceLaneKey, v as NonceCoordinatorFallback } from "./nonceLaneKeys-B_RcSS6M.js";
24
- import { i as buildNearAccountRefs, n as resolveProfileAccountContextFromCandidates } from "./profileAccountProjection-C9rVhbeJ.js";
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$2(value, "linked signer material record");
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 = requireNonEmptyString$1(record.activationId, "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 (parseDigestB64u(base64UrlEncode(await sha256Bytes(sealed))) !== record.sealedMaterialDigestB64u) {
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$2(value, "linked signer material target factor");
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 = requireNonEmptyString$1(record.emailHashHex, "targetFactor.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: requireNonEmptyString$1(record.registrationAuthorityId, "targetFactor.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$2(value, "linked signer material Ed25519 public facts");
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$2(value, "linked signer material ECDSA public facts");
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/ecdsaCapabilityManifestStore.ts
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 selectorFromJournal(journal) {
2462
+ function selectorFromSigner(signer) {
2498
2463
  return {
2499
- capability: journal.candidate.activationBinding.signer.capability,
2500
- authority: journal.candidate.activationBinding.signer.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.length === right.participantIds.length && left.participantIds.every((participantId, index) => participantId === right.participantIds[index]) && left.thresholdOwnerAddress === right.thresholdOwnerAddress;
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 ecdsaPreparedEvmFamilySignersMatch(left, right) {
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 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 && ecdsaRegisteredPublicFactsMatch(left.registeredPublicFacts, right.registeredPublicFacts);
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) && ecdsaPreparedEvmFamilySignersMatch(left.signer, right.signer) && ecdsaRoleLocalMaterialBindingsMatch(left.roleLocalBinding, right.roleLocalBinding) && left.bindingDigest === right.bindingDigest && left.durableMaterialRef === right.durableMaterialRef;
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$1(record.serverActivationReceipt, "ECDSA server activation receipt");
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
- switch (input.preparation.expectedManifest.kind) {
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.preparation.expectedGeneration.kind !== "no_current_generation") throw new Error("Initial ECDSA activation cannot expect a server generation");
2620
+ if (input.expectedGeneration.kind !== "no_current_generation") throw new Error("Initial ECDSA activation cannot expect a server generation");
2640
2621
  return buildPreparedEcdsaActivationJournal({
2641
- journalId: input.preparation.journalId,
2642
- expectedManifest: input.preparation.expectedManifest,
2643
- expectedGeneration: input.preparation.expectedGeneration,
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.preparation.expectedGeneration.kind !== "exact_generation") throw new Error("Replacement ECDSA activation requires an exact server generation");
2627
+ if (input.expectedGeneration.kind !== "exact_generation") throw new Error("Replacement ECDSA activation requires an exact server generation");
2651
2628
  return buildPreparedEcdsaActivationJournal({
2652
- journalId: input.preparation.journalId,
2653
- expectedManifest: input.preparation.expectedManifest,
2654
- expectedGeneration: input.preparation.expectedGeneration,
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.preparation.expectedManifest);
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 activeMaterialMatchesPresignaturePoolIdentity(material, poolIdentity) {
2754
- const scope = material.binding.routerAbEcdsaDerivationNormalSigning.scope;
2755
- const materialActivation = routerAbMpcMaterialActivationRefToWire(material.binding.materialActivation);
2756
- 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;
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 parseDurableClientPresignatureRecordId(value) {
2759
- if (typeof value !== "string" || !/^ecdsa-client-presignature-[A-Za-z0-9_-]+$/.test(value)) throw new Error("ECDSA durable presignature record id is invalid");
2760
- return value;
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 parsePresignatureTimestamp(value, label) {
2763
- if (typeof value !== "number" || !Number.isSafeInteger(value) || value <= 0) throw new Error(`${label} is invalid`);
2764
- return value;
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 rawRecordId(value) {
2767
- if (!value || typeof value !== "object" || !("record_id" in value)) return null;
2768
- const recordId = value.record_id;
2769
- return typeof recordId === "string" ? recordId : null;
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 supportsStrictIndexedDbDurability() {
2772
- return typeof IDBTransaction !== "undefined" && "durability" in IDBTransaction.prototype;
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
- async function deleteExpiredClientPresignatureRows(context, walletId, nowMs) {
2775
- let cursor = await context.store(PRESIGNATURE_STORE).index(SEAMS_WALLET_INDEXES.walletExpiresAt).openCursor(IDBKeyRange.bound([walletId, 0], [walletId, nowMs]));
2776
- let deletedCount = 0;
2777
- while (cursor && deletedCount < MAX_EXPIRED_CLIENT_PRESIGNATURE_DELETIONS_PER_TRANSACTION) {
2778
- await cursor.delete();
2779
- deletedCount += 1;
2780
- cursor = await cursor.continue();
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 presignatureAadProjection(metadata) {
2785
- return {
2786
- domain: CLIENT_PRESIGNATURE_AAD_DOMAIN,
2787
- version: 1,
2788
- pool_identity: metadata.poolIdentity,
2789
- durable_material_ref: metadata.durableMaterialRef,
2790
- presignature_id: metadata.presignatureId,
2791
- group_public_key33_b64u: metadata.groupPublicKey33B64u,
2792
- big_r33_b64u: metadata.bigR33B64u,
2793
- created_at_ms: metadata.createdAtMs,
2794
- expires_at_ms: metadata.expiresAtMs,
2795
- sealing_key_id: metadata.sealingKeyId
2796
- };
2797
- }
2798
- function parseSealedAvailableClientPresignatureRow(value) {
2799
- const record = requireRecord$1(value, "ECDSA durable presignature row");
2800
- requireExactKeys$1(record, "ECDSA durable presignature row", [
2801
- "kind",
2802
- "record_id",
2803
- "pool_identity",
2804
- "pool_identity_key",
2805
- "wallet_id",
2806
- "material_activation_id",
2807
- "durable_material_ref",
2808
- "presignature_id",
2809
- "group_public_key33_b64u",
2810
- "big_r33_b64u",
2811
- "created_at_ms",
2812
- "expires_at_ms",
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$1(value, "ECDSA capability scope");
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$1(value, "ECDSA role-local material binding");
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$1(value, "prepared ECDSA signer");
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$1(value, "encrypted ECDSA pending candidate");
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$1(value, "ECDSA activation binding");
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$1(value, "prepared ECDSA activation candidate");
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$1(value, "ECDSA server generation expectation");
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$1(value, "prepared ECDSA activation journal");
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$1(record.activationCommand, "ECDSA activation command");
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
- switch (journal.expectedManifest.kind) {
3240
- case "no_current_manifest":
3241
- if (journal.activationCommand.expectedGeneration.kind !== "no_current_generation") throw new Error("Initial ECDSA activation cannot expect a server generation");
3242
- return buildPreparedEcdsaActivationJournal({
3243
- journalId: journal.journalId,
3244
- expectedManifest: journal.expectedManifest,
3245
- expectedGeneration: journal.activationCommand.expectedGeneration,
3246
- candidate: journal.candidate,
3247
- requestDigest: journal.activationCommand.requestDigest,
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$1(value, "server-committed ECDSA activation journal");
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 = requireRecord$1(record.serverActivation, "ECDSA server activation commit");
3279
- requireExactKeys$1(serverActivation, "ECDSA server activation commit", [
3280
- "kind",
3281
- "correlationId",
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 (serverActivation.kind !== "ecdsa_server_activation_commit") throw new Error("ECDSA server activation commit kind is invalid");
3287
- const receipt = requireRecord$1(serverActivation.serverActivationReceipt, "ECDSA server activation receipt");
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
- const committed = buildServerCommittedEcdsaActivationJournal({
3297
- preparedJournal,
2997
+ return {
2998
+ record,
3298
2999
  serverCommit: {
3299
- correlationId: parseCorrelationId(serverActivation.correlationId),
3300
- activationRequestDigest: parseDigestB64u(serverActivation.activationRequestDigest),
3301
- serverGeneration: parseEcdsaServerGeneration(serverActivation.serverGeneration),
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$1(value, "ECDSA activation journal");
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$1(value, "registered ECDSA public facts");
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$1(value, "active ECDSA manifest proof");
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 = requireRecord$1(record.server_activation, "ECDSA server activation commit");
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$1(value, "ECDSA capability manifest row");
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 !== MANIFEST_RECORD_VERSION || 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");
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
- capability_ref: selector.capability,
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$1(value, "current ECDSA capability pointer");
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 = parseWalletAuthAuthorityRef({
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
- capability_ref: selector.capability,
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$1(value, "ECDSA role-local material row");
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 = parseWalletAuthAuthorityRef({
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$1(value, "ECDSA role-local material row");
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
- capability_ref: selector.capability,
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$1(value, "ECDSA activation commit journal row");
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$1(value, "ECDSA material sealing key row");
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
- async function prepareImportedWalletCustodyEcdsaContinuity(input) {
3645
- const serverActivation = buildEcdsaServerActivationCommit({
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
- async function persistPreparedImportedWalletCustodyEcdsaContinuityInTransaction(context, prepared) {
3695
- const selector = selectorFromManifest(prepared.activeManifest);
3696
- const pointerStore = context.store(POINTER_STORE);
3697
- const existingPointer = await pointerStore.get(selectorKey(selector));
3698
- const activeRows = await context.store(MANIFEST_STORE).index(SEAMS_WALLET_INDEXES.capabilityWalletAuthorityState).getAll([...selectorKey(selector), "active"]);
3699
- if (existingPointer !== void 0 || activeRows.length !== 0) throw new FinalizationControlError("exact_record_conflict", "ECDSA custody import found an existing active manifest");
3700
- const activeProof = {
3701
- activationBinding: prepared.activationBinding,
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 assertActiveProofInput(input) {
3713
- const parsed = parseActiveProof(storedActiveProof({
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 assertExpectedPointer(expected, pointerRaw, selector) {
3724
- switch (expected.kind) {
3725
- case "no_current_manifest":
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 errorMessage(error) {
3743
- return error instanceof Error ? error.message : String(error);
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 isConstraintError(error) {
3746
- return error instanceof DOMException && error.name === "ConstraintError";
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 assertNever$1(value) {
3749
- throw new Error(`Unexpected ECDSA persistence branch: ${String(value)}`);
3289
+ function supportsStrictIndexedDbDurability() {
3290
+ return typeof IDBTransaction !== "undefined" && "durability" in IDBTransaction.prototype;
3750
3291
  }
3751
- async function cancelPreparedActivationInTransaction(preparedJournal, context) {
3752
- const journalStore = context.store(JOURNAL_STORE);
3753
- const raw = await journalStore.get(preparedJournal.journalId);
3754
- if (raw === void 0) return { kind: "missing" };
3755
- let persisted;
3756
- try {
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 assertNever$1(persisted.journal);
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 readActivationJournalRows(context) {
3776
- return await context.store(JOURNAL_STORE).getAll();
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
- var IndexedDbEcdsaCapabilityManifestStore = class {
3779
- constructor(manager = seamsWalletDB) {
3780
- this.manager = manager;
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
- async admitClientPresignature(input) {
3783
- if (!supportsStrictIndexedDbDurability()) return { kind: "persistence_unavailable" };
3784
- const poolIdentity = parseEcdsaClientPresignPoolIdentity(input.poolIdentity);
3785
- const durableMaterialRef = parseEcdsaRoleLocalPersistedMaterialRef(input.durableMaterialRef);
3786
- if (durableMaterialRef.materialActivation.activationId !== poolIdentity.materialActivationId || durableMaterialRef.materialActivation.capability !== poolIdentity.capability || durableMaterialRef.materialActivation.keyBinding !== poolIdentity.keyBinding || durableMaterialRef.materialActivation.materialOwner !== poolIdentity.walletId) return { kind: "persistence_unavailable" };
3787
- if (input.groupPublicKey33.length !== 33 || input.bigR33.length !== 33) return { kind: "persistence_unavailable" };
3788
- const createdAtMs = parsePresignatureTimestamp(input.createdAtMs, "createdAtMs");
3789
- const expiresAtMs = parsePresignatureTimestamp(input.expiresAtMs, "expiresAtMs");
3790
- if (createdAtMs > Date.now() + MAX_DURABLE_CLIENT_PRESIGNATURE_FUTURE_SKEW_MS || expiresAtMs <= createdAtMs || expiresAtMs > createdAtMs + 7776e6) return { kind: "persistence_unavailable" };
3791
- const presignatureId = String(input.presignatureId || "").trim();
3792
- if (!presignatureId || input.plaintext97.length !== 97) return { kind: "persistence_unavailable" };
3793
- let lookup;
3794
- try {
3795
- lookup = await this.lookupByMaterialRef(durableMaterialRef);
3796
- } catch {
3797
- return { kind: "persistence_unavailable" };
3798
- }
3799
- if (lookup.kind !== "active") return { kind: "persistence_unavailable" };
3800
- if (!activeMaterialMatchesPresignaturePoolIdentity(lookup.material, poolIdentity) || lookup.material.binding.durableMaterialRef !== durableMaterialRef.durableMaterialRef || lookup.material.binding.bindingDigest !== durableMaterialRef.bindingDigest || !mpcMaterialActivationRefsEqual(lookup.material.binding.materialActivation, durableMaterialRef.materialActivation)) return { kind: "persistence_unavailable" };
3801
- let sealingKey;
3802
- try {
3803
- sealingKey = await this.readMaterialSealingKey(lookup.material.sealingKeyId);
3804
- } catch {
3805
- return { kind: "persistence_unavailable" };
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
- if (!sealingKey) return { kind: "persistence_unavailable" };
3808
- const recordId = parseDurableClientPresignatureRecordId(secureRandomId("ecdsa-client-presignature", 32, "ECDSA durable presignature record"));
3809
- const groupPublicKey33B64u = parseEcdsaClientVerifyingPublicKey33B64u(base64UrlEncode(input.groupPublicKey33));
3810
- const bigR33B64u = parseEcdsaClientVerifyingPublicKey33B64u(base64UrlEncode(input.bigR33));
3811
- const metadata = {
3812
- kind: "sealed_available_client_presignature_v1",
3813
- recordId,
3814
- poolIdentity,
3815
- durableMaterialRef,
3816
- presignatureId,
3817
- groupPublicKey33B64u,
3818
- bigR33B64u,
3819
- createdAtMs,
3820
- expiresAtMs,
3821
- sealingKeyId: lookup.material.sealingKeyId
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
- let encrypted;
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
- encrypted = await encryptPresignatureBytes({
3826
- key: sealingKey,
3827
- plaintext97: input.plaintext97,
3828
- metadata
3829
- });
3830
- } catch {
3831
- input.plaintext97.fill(0);
3832
- return { kind: "persistence_unavailable" };
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
- const row = {
3835
- kind: "sealed_available_client_presignature_v1",
3836
- record_id: recordId,
3837
- pool_identity: poolIdentity,
3838
- pool_identity_key: ecdsaClientPresignPoolKey(poolIdentity),
3839
- wallet_id: poolIdentity.walletId,
3840
- material_activation_id: poolIdentity.materialActivationId,
3841
- durable_material_ref: durableMaterialRef,
3842
- presignature_id: presignatureId,
3843
- group_public_key33_b64u: groupPublicKey33B64u,
3844
- big_r33_b64u: bigR33B64u,
3845
- created_at_ms: createdAtMs,
3846
- expires_at_ms: expiresAtMs,
3847
- sealed: {
3848
- kind: "ecdsa_activation_aes_gcm_v1",
3849
- sealing_key_id: lookup.material.sealingKeyId,
3850
- iv12_b64u: encrypted.iv12B64u,
3851
- ciphertext_b64u: encrypted.ciphertextB64u,
3852
- ciphertext_digest_b64u: encrypted.ciphertextDigestB64u
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
- try {
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
- async deleteClientPresignature(input) {
3985
- const recordId = parseDurableClientPresignatureRecordId(input.recordId);
3986
- const poolIdentity = parseEcdsaClientPresignPoolIdentity(input.poolIdentity);
3987
- await this.manager.runTransaction([PRESIGNATURE_STORE], "readwrite", async (context) => {
3988
- const store = context.store(PRESIGNATURE_STORE);
3989
- const raw = await store.get(recordId);
3990
- if (raw === void 0) return;
3991
- if (equalEcdsaClientPresignPoolIdentity(parseSealedAvailableClientPresignatureRow(raw).pool_identity, poolIdentity)) await store.delete(recordId);
3992
- });
3993
- }
3994
- async deleteClientPresignatures(target) {
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
- async listActiveWalletCapabilitySubjects(walletIdInput) {
4024
- const parsedWalletId = parseWalletId(walletIdInput);
4025
- if (!parsedWalletId.ok) return { kind: "invalid_current_state" };
4026
- let rows;
4027
- try {
4028
- rows = await this.manager.runTransaction([POINTER_STORE], "readonly", (context) => readPointerRowsForWallet(context, parsedWalletId.value));
4029
- } catch {
4030
- return { kind: "persistence_unavailable" };
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
- async listWalletActivationJournalSelectors(walletIdInput) {
4058
- const parsedWalletId = parseWalletId(walletIdInput);
4059
- if (!parsedWalletId.ok) return { kind: "invalid_current_state" };
4060
- let rows;
4061
- try {
4062
- rows = await this.manager.runTransaction([JOURNAL_STORE], "readonly", readActivationJournalRows);
4063
- } catch {
4064
- return { kind: "persistence_unavailable" };
4065
- }
4066
- const selectors = [];
4067
- try {
4068
- for (const row of rows) {
4069
- const signer = parseJournalRow(row).journal.candidate.activationBinding.signer;
4070
- if (signer.authority.walletId !== parsedWalletId.value) continue;
4071
- selectors.push({
4072
- capability: signer.capability,
4073
- authority: signer.authority
4074
- });
4075
- }
4076
- } catch {
4077
- return { kind: "invalid_current_state" };
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: "resolved",
4081
- selectors
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
- async prepareActivation(input) {
4085
- const selector = {
4086
- capability: input.activationBinding.signer.capability,
4087
- authority: input.activationBinding.signer.authority
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
- try {
4090
- const keyId = parseEcdsaMaterialSealingKeyId(secureRandomId("ecdsa-material-key", 32, "ECDSA activation material sealing key"));
4091
- const key = await generateMaterialSealingKey();
4092
- const encrypted = await encryptStateBlob({
4093
- key,
4094
- stateBlobB64u: input.pendingPayloadB64u,
4095
- aadProjection: pendingAadProjection(input)
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: "persistence_unavailable",
4129
- retryCorrelation: retryCorrelation()
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
- async recordServerActivation(input) {
4134
- let committedJournal;
4135
- try {
4136
- committedJournal = buildServerCommittedEcdsaActivationJournal(input);
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 putActivationJournal(journalInput) {
4146
- let journal;
4147
- try {
4148
- journal = parseCommittedJournal(journalInput);
4149
- if (await ciphertextDigestB64u(journal.candidate.encryptedPending.ciphertextB64u) !== journal.candidate.encryptedPending.ciphertextDigest) throw new Error("ECDSA pending material ciphertext digest is invalid");
4150
- } catch (error) {
4151
- return {
4152
- kind: "corrupt",
4153
- corruptionDigest: await persistenceDigest("journal_input_corrupt", selectorFromJournal(journalInput), errorMessage(error))
4154
- };
4155
- }
4156
- const selector = selectorFromJournal(journal);
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
- const sealingKey = await this.readMaterialSealingKey(journal.candidate.encryptedPending.sealingKeyId);
4159
- if (!sealingKey) throw new FinalizationControlError("corrupt", "ECDSA activation journal references a missing sealing key");
4160
- await decryptStateBlob({
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
- async readActivationJournal(journalIdInput) {
4216
- const journalId = parseCorrelationId(journalIdInput);
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
- const raw = await this.manager.runTransaction([JOURNAL_STORE], "readonly", async (context) => await context.store(JOURNAL_STORE).get(journalId));
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
- async discoverActivationJournal(selectorInput) {
4234
- let selector;
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
- selector = normalizeSelector(selectorInput);
4011
+ encrypted = await encryptPresignatureBytes({
4012
+ key: sealingKey,
4013
+ plaintext97: input.plaintext97,
4014
+ metadata
4015
+ });
4237
4016
  } catch {
4238
- return { kind: "corrupt" };
4017
+ input.plaintext97.fill(0);
4018
+ return { kind: "persistence_unavailable" };
4239
4019
  }
4240
- try {
4241
- const raw = await this.manager.runTransaction([JOURNAL_STORE], "readonly", async (context) => await context.store(JOURNAL_STORE).index(SEAMS_WALLET_INDEXES.capabilityWalletAuthority).get(selectorKey(selector)));
4242
- if (raw === void 0) return { kind: "missing" };
4243
- try {
4244
- const parsed = parseJournalRow(raw);
4245
- return selectorsMatch(parsed.selector, selector) ? {
4246
- kind: "found",
4247
- journal: parsed.journal
4248
- } : { kind: "corrupt" };
4249
- } catch {
4250
- return { kind: "corrupt" };
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
- } catch {
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
- if (await ciphertextDigestB64u(encryptedPending.ciphertextB64u) !== encryptedPending.ciphertextDigest) return { kind: "corrupt" };
4269
- const sealingKey = await this.readMaterialSealingKey(encryptedPending.sealingKeyId);
4270
- if (!sealingKey) return { kind: "corrupt" };
4271
- return {
4272
- kind: "found",
4273
- journal: read.journal,
4274
- pendingPayloadB64u: await decryptStateBlob({
4275
- key: sealingKey,
4276
- iv12B64u: encryptedPending.iv12B64u,
4277
- ciphertextB64u: encryptedPending.ciphertextB64u,
4278
- aadProjection: pendingAadProjection(read.journal)
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: "corrupt" };
4061
+ return { kind: "persistence_ambiguous" };
4283
4062
  }
4284
4063
  }
4285
- async lookup(selectorInput) {
4286
- const selector = normalizeSelector(selectorInput);
4287
- let observation;
4064
+ async listAvailableClientPresignatures(poolIdentityInput) {
4065
+ if (!supportsStrictIndexedDbDurability()) return [];
4066
+ const poolIdentity = parseEcdsaClientPresignPoolIdentity(poolIdentityInput);
4067
+ const nowMs = Date.now();
4288
4068
  try {
4289
- observation = await this.manager.runTransaction([
4290
- MANIFEST_STORE,
4291
- POINTER_STORE,
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 lookupByMaterialActivation(input) {
4329
- const walletIdResult = parseWalletId(input.walletId);
4330
- const materialActivationResult = parseMpcMaterialActivationRef(input.materialActivation);
4331
- const capability = materialActivationResult.ok ? materialActivationResult.value.capability : input.materialActivation.capability;
4332
- if (!walletIdResult.ok || !materialActivationResult.ok) return {
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
- rows = await this.manager.runTransaction([POINTER_STORE], "readonly", async (context) => await readPointerRowsForWallet(context, walletId));
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
- const selectors = [];
4113
+ let lookup;
4348
4114
  try {
4349
- for (const row of rows) {
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 (exact.length > 1) return {
4399
- kind: "ambiguous_authority",
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
- raw = await this.manager.runTransaction([MATERIAL_STORE], "readonly", async (context) => await context.store(MATERIAL_STORE).get(materialRef.durableMaterialRef));
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 (raw === void 0) return await this.lookupMissingMaterialByRef(materialRef);
4427
- let locator;
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: "corrupt",
4433
- capability
4434
- };
4435
- }
4436
- if (locator.durableMaterialRef !== materialRef.durableMaterialRef || locator.bindingDigest !== materialRef.bindingDigest) return {
4437
- kind: "exact_binding_mismatch",
4438
- capability
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 lookupMissingMaterialByRef(materialRef) {
4465
- const capability = materialRef.materialActivation.capability;
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([MANIFEST_STORE], "readonly", async (context) => await context.store(MANIFEST_STORE).getAll());
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 exact = [];
4476
- let bindingMismatch = false;
4477
- for (const raw of rows) {
4478
- let parsed;
4479
- try {
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
- exact.push(parsed);
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: "missing",
4514
- subject: "material",
4515
- capability
4200
+ kind: "resolved",
4201
+ subjects
4516
4202
  };
4517
4203
  }
4518
- async openActiveMaterialLookup(lookup) {
4519
- const selector = selectorFromManifest(lookup.manifest);
4520
- try {
4521
- if (await ciphertextDigestB64u(lookup.material.ciphertextB64u) !== lookup.material.binding.ciphertextDigest) throw new Error("active ECDSA material ciphertext digest is invalid");
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
- lookup = await this.lookupByMaterialRef(materialRefInput);
4209
+ rows = await this.manager.runTransaction([JOURNAL_STORE], "readonly", readActivationJournalRows);
4546
4210
  } catch {
4547
- return { kind: "corrupt" };
4211
+ return { kind: "persistence_unavailable" };
4548
4212
  }
4549
- switch (lookup.kind) {
4550
- case "active": {
4551
- const opened = await this.openActiveMaterialLookup(lookup);
4552
- switch (opened.kind) {
4553
- case "active": return opened;
4554
- case "missing":
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
- case "missing":
4564
- case "retired": return { kind: "missing" };
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 assertNever$1(lookup);
4223
+ return {
4224
+ kind: "resolved",
4225
+ selectors
4226
+ };
4571
4227
  }
4572
- async sealAndFinalizeActivation(input) {
4573
- const selector = selectorFromJournal(input.committedJournal);
4228
+ async prepareActivation(input) {
4229
+ const selector = selectorFromSigner(input.activationBinding.signer);
4574
4230
  try {
4575
- const parsedJournal = parseCommittedJournal(input.committedJournal);
4576
- const sealingKeyId = parsedJournal.candidate.encryptedPending.sealingKeyId;
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: sealingKey,
4581
- stateBlobB64u: input.readyStateBlobB64u,
4582
- aadProjection: readyAadProjection(parsedJournal)
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 activeManifest = buildActiveEcdsaCapabilityManifest({
4599
- activationBinding: parsedJournal.candidate.activationBinding,
4600
- serverActivation: parsedJournal.serverActivation,
4601
- registeredPublicFacts: input.registeredPublicFacts,
4602
- durableMaterial,
4603
- committedAt: input.committedAt
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
- return await this.finalizeActivation({
4606
- committedJournal: parsedJournal,
4607
- readyMaterial,
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: "corrupt",
4613
- selector,
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
- return {
4643
- kind: "exact_record_conflict",
4644
- selector,
4645
- conflictDigest: await persistenceDigest("custody_import_conflict", selector, "ECDSA custody import conflicts with the active manifest")
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
- try {
4649
- const prepared = await prepareImportedWalletCustodyEcdsaContinuity(input);
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: "corrupt",
4685
- selector,
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 persistPreparedWalletCustodyEcdsaContinuity(prepared) {
4691
- await this.manager.runTransaction([
4692
- MANIFEST_STORE,
4693
- POINTER_STORE,
4694
- MATERIAL_STORE,
4695
- SEALING_KEY_STORE
4696
- ], "readwrite", (context) => persistPreparedImportedWalletCustodyEcdsaContinuityInTransaction(context, prepared));
4697
- }
4698
- async readMaterialSealingKey(keyIdInput) {
4699
- const keyId = parseEcdsaMaterialSealingKeyId(keyIdInput);
4700
- const raw = await this.manager.runTransaction([SEALING_KEY_STORE], "readonly", async (context) => await context.store(SEALING_KEY_STORE).get(keyId));
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 finalizeActivation(input) {
4707
- let activeProof;
4283
+ async putActivationJournal(journalInput) {
4284
+ let journal;
4708
4285
  try {
4709
- activeProof = assertActiveProofInput(input);
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
- selector,
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 = selectorFromManifest(activeProof.activeManifest);
4294
+ const selector = selectorFromJournal(journal);
4719
4295
  try {
4720
- if (await ciphertextDigestB64u(input.readyMaterial.ciphertextB64u) !== input.readyMaterial.binding.ciphertextDigest) throw new FinalizationControlError("corrupt", "ECDSA ready material ciphertext digest is invalid");
4721
- const sealingKey = await this.readMaterialSealingKey(input.readyMaterial.sealingKeyId);
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: input.readyMaterial.iv12B64u,
4726
- ciphertextB64u: input.readyMaterial.ciphertextB64u,
4727
- aadProjection: readyAadProjection(input.committedJournal)
4300
+ iv12B64u: journal.candidate.encryptedPending.iv12B64u,
4301
+ ciphertextB64u: journal.candidate.encryptedPending.ciphertextB64u,
4302
+ aadProjection: pendingAadProjection(journal)
4728
4303
  });
4729
- await this.manager.runTransaction([
4730
- MANIFEST_STORE,
4731
- POINTER_STORE,
4732
- MATERIAL_STORE,
4733
- JOURNAL_STORE,
4734
- SEALING_KEY_STORE,
4735
- PRESIGNATURE_STORE
4736
- ], "readwrite", async (context) => {
4737
- await finalizeInTransaction(context, input, activeProof, selector);
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: "committed",
4741
- manifest: activeProof.activeManifest,
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" ? "finalization_corrupt" : "finalization_conflict", selector, error.message);
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
- kind: "exact_record_conflict",
4759
- selector,
4760
- conflictDigest: await persistenceDigest("finalization_constraint_conflict", selector, errorMessage(error))
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
- function buildWalletCustodyEcdsaContinuityImportInput(input) {
4771
- const authority = parseWalletAuthAuthorityRef(input.authority);
4772
- if (!authority || String(authority.walletId) !== String(input.walletId)) throw new Error("ECDSA custody import authority is invalid");
4773
- const publicCapability = parseRouterAbEcdsaDerivationPublicCapabilityV1(input.publicCapability);
4774
- const receipt = parseRouterAbEcdsaRegistrationActivationReceiptV1(input.activationReceipt);
4775
- const materialActivation = routerAbMpcMaterialActivationRefFromWire(receipt.ecdsa_activation.material_activation);
4776
- if (!mpcMaterialActivationRefsEqual(materialActivation, routerAbMpcMaterialActivationRefFromWire(publicCapability.material_activation))) throw new Error("ECDSA custody continuity changed the material activation");
4777
- const participantIds = [toParticipantId(input.participantIds[0]), toParticipantId(input.participantIds[1])];
4778
- const roleLocalBinding = buildEcdsaRoleLocalMaterialBinding({
4779
- keyHandle: parseEcdsaKeyHandle(input.keyHandle),
4780
- ecdsaThresholdKeyId: parseEcdsaThresholdKeyId(input.ecdsaThresholdKeyId),
4781
- clientVerifyingPublicKey33B64u: parseEcdsaClientVerifyingPublicKey33B64u(input.publicFacts.derivationClientSharePublicKey33B64u),
4782
- participantIds,
4783
- relayerKeyId: parseEcdsaRelayerKeyId(input.relayerKeyId)
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
- try {
4894
- const prepared = await prepareImportedWalletCustodyEcdsaContinuity(preparedInput);
4895
- await input.store.persistPreparedWalletCustodyEcdsaContinuity(prepared);
4896
- return {
4897
- kind: "committed",
4898
- manifest: prepared.activeManifest,
4899
- material: prepared.readyMaterial
4900
- };
4901
- } catch (error) {
4902
- if (error instanceof FinalizationControlError || isConstraintError(error)) {
4903
- const replay = await input.store.lookup(selector);
4904
- if (replay.kind === "active" && activeManifestMatchesWalletCustodyImport({
4905
- manifest: replay.manifest,
4906
- activationBinding: preparedInput.activationBinding,
4907
- serverActivation,
4908
- registeredPublicFacts: preparedInput.registeredPublicFacts,
4909
- roleLocalPublicFacts: preparedInput.roleLocalPublicFacts,
4910
- routerAbEcdsaDerivationNormalSigning: preparedInput.routerAbEcdsaDerivationNormalSigning,
4911
- runtimePolicyScope: preparedInput.runtimePolicyScope
4912
- })) return {
4913
- kind: "committed",
4914
- manifest: replay.manifest,
4915
- material: replay.material
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("custody_import_conflict", selector, errorMessage(error))
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
- * R109C: give an added auth method its own encrypted access projection over the
4939
- * activation the wallet already has. The activation is not re-created and the
4940
- * source credential's authority is not widened; only a second method-bound
4941
- * record over the same material appears.
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 targetLookup = await store.lookup(targetSelector);
4969
- if (targetLookup.kind === "active") {
4970
- const targetMaterial = targetLookup.manifest.durableMaterial;
4971
- const sourceMaterial = sourceLookup.manifest.durableMaterial;
4972
- 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");
4973
- continue;
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
- if (targetLookup.kind !== "missing") throw new Error(`ECDSA custody continuity target is ${targetLookup.kind}`);
4976
- const opened = await store.openActiveMaterialLookup(sourceLookup);
4977
- if (opened.kind !== "active") throw new Error(`ECDSA custody continuity material is ${opened.kind}`);
4978
- const manifest = opened.manifest;
4979
- const publicFacts = manifest.durableMaterial.roleLocalPublicFacts;
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
- if (imported.kind !== "committed") throw new Error(`ECDSA custody continuity import is ${imported.kind}`);
5007
- }
5008
- }
5009
- async function lookupInTransaction(context, selector) {
5010
- const pointerRaw = await context.store(POINTER_STORE).get(selectorKey(selector));
5011
- if (pointerRaw === void 0) return await lookupWithoutPointer(context, selector);
5012
- let pointer;
5013
- try {
5014
- pointer = parsePointerRow(pointerRaw);
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
- if (!selectorsMatch(pointer.selector, selector)) return {
5022
- kind: "exact_binding_mismatch",
5023
- detail: "current ECDSA pointer belongs to a different exact authority"
5024
- };
5025
- const manifestRaw = await context.store(MANIFEST_STORE).get(pointer.manifestId);
5026
- if (manifestRaw === void 0) return {
5027
- kind: "exact_record_conflict",
5028
- detail: "current ECDSA pointer references a missing manifest"
5029
- };
5030
- let parsedManifest;
5031
- try {
5032
- parsedManifest = parseManifestRow(manifestRaw);
5033
- } catch (error) {
5034
- return {
5035
- kind: "corrupt",
5036
- detail: errorMessage(error)
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
- if (!selectorsMatch(parsedManifest.selector, selector)) return {
5040
- kind: "exact_binding_mismatch",
5041
- detail: "current ECDSA manifest belongs to a different exact authority"
5042
- };
5043
- if (parsedManifest.manifest.identity.manifestId !== pointer.manifestId || parsedManifest.manifest.identity.manifestRevision !== pointer.manifestRevision) return {
5044
- kind: "exact_record_conflict",
5045
- detail: "current ECDSA pointer does not match its manifest identity"
5046
- };
5047
- if (parsedManifest.state === "replaced") return {
5048
- kind: "retired",
5049
- manifest: parsedManifest.manifest
5050
- };
5051
- const activeRows = await context.store(MANIFEST_STORE).index(SEAMS_WALLET_INDEXES.capabilityWalletAuthorityState).getAll([...selectorKey(selector), "active"]);
5052
- if (activeRows.length !== 1) return {
5053
- kind: "exact_record_conflict",
5054
- detail: "exact ECDSA authority has multiple current manifests"
5055
- };
5056
- let indexedActive;
5057
- try {
5058
- indexedActive = parseManifestRow(activeRows[0]);
5059
- } catch (error) {
5060
- return {
5061
- kind: "corrupt",
5062
- detail: errorMessage(error)
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
- if (indexedActive.state !== "active" || indexedActive.manifest.identity.manifestId !== pointer.manifestId) return {
5066
- kind: "exact_record_conflict",
5067
- detail: "exact ECDSA current index disagrees with its pointer"
5068
- };
5069
- const materialRaw = await context.store(MATERIAL_STORE).get(parsedManifest.manifest.durableMaterial.durableMaterialRef);
5070
- if (materialRaw === void 0) return {
5071
- kind: "missing",
5072
- subject: "material",
5073
- detail: "active ECDSA manifest is missing its ready material"
5074
- };
5075
- let material;
5076
- try {
5077
- material = parseMaterialRow(materialRaw, parsedManifest.activeProof);
5078
- } catch (error) {
5079
- return {
5080
- kind: "corrupt",
5081
- detail: errorMessage(error)
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
- if (!materialMatchesManifest(material, parsedManifest.manifest)) return {
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
- detail: "active ECDSA material sealing key id does not match"
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: "corrupt",
5102
- detail: errorMessage(error)
4648
+ kind: "missing",
4649
+ subject: "material",
4650
+ capability
5103
4651
  };
5104
4652
  }
5105
- if (await ciphertextDigestB64u(material.ciphertextB64u) !== material.binding.ciphertextDigest) return {
5106
- kind: "corrupt",
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
- parsed = parseManifestRow(raw);
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: "corrupt",
5132
- detail: errorMessage(error)
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", errorMessage(error));
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", errorMessage(error));
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.store(MANIFEST_STORE).index(SEAMS_WALLET_INDEXES.capabilityWalletAuthorityState).getAll([...selectorKey(selector), "active"]);
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", errorMessage(error));
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", errorMessage(error));
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 = requireNonEmptyString(record.kind, `${label}.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(requireNonEmptyString(record.rpId, `${label}.rpId`)),
5290
- credentialIdB64u: requireNonEmptyString(record.credentialIdB64u, `${label}.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: requireNonEmptyString(record.providerSubjectId, `${label}.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(requireNonEmptyString(record.walletId, `${label}.walletId`)),
5318
- nearAccountId: toAccountId(requireNonEmptyString(record.nearAccountId, `${label}.nearAccountId`)),
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(requireNonEmptyString(record.nearEd25519SigningKeyId, `${label}.nearEd25519SigningKeyId`)),
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 !== "ed25519_yao_public_capability_references_v1") throw new Error("Ed25519 Yao public capability references kind is invalid");
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 !== "ed25519_yao_public_capability_lanes_v1") throw new Error("Ed25519 Yao public capability lanes kind is invalid");
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 !== "ed25519YaoPublicCapabilityReferencesV1") throw new Error("Ed25519 Yao public capability reference app-state key is inconsistent");
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
- * R109C: resolve the authority as a named method rather than as the selected
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
- export { preparePendingNearRegistration as C, computeWalletEcdsaKeyFactsInventoryChallengeDigestB64u as D, parseRouterAbTraceContextV1 as E, openWalletAuthorityLinkedSignerMaterialV1 as O, planPendingNearRegistration as S, createRouterAbTraceContextV1 as T, WalletSessionAuthorizationUpgradeRequiredError as _, resolveAccountKeyMaterialTarget as a, assertPendingWalletRegistrationIdentity as b, configureIndexedDB as c, publishEd25519YaoPublicCapabilityReferenceAndLane as d, readEmailOtpProviderSubjectForWalletV1 as f, prepareWalletCustodyEcdsaContinuity as g, importWalletCustodyEcdsaContinuity as h, getAccountKeyMaterial as i, parseWalletAuthorityLinkedSignerMaterialRecordV1 as k, createIndexedDBNonceLaneCoordinationStore as l, copyWalletCustodyEcdsaContinuityToAuthMethod as m, loadWalletCustodyEd25519MaterialV1 as n, storeAccountKeyMaterial as o, IndexedDbEcdsaCapabilityManifestStore as p, persistWalletCustodyEd25519MaterialV1 as r, IndexedDBManager as s, deleteWalletCustodyEd25519MaterialV1 as t, IndexedDbEd25519YaoPublicCapabilityReferenceStore as u, walletSessionAuthorizations as v, ROUTER_AB_TRACE_ID_HEADER_V1 as w, parsePendingWalletRegistrationCommitV1 as x, pendingWalletRecoveryCommitIdentityMatches as y };
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 };