@seams/wallet 0.6.2 → 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 (1452) 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 +101 -58
  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 +42 -18
  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 +2 -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 +33 -16
  115. package/dist/esm/core/signingEngine/interfaces/accountAuthMetadata.js +0 -1
  116. package/dist/esm/core/signingEngine/routerAb/ecdsaDerivation/presignaturePool.js +14 -148
  117. package/dist/esm/core/signingEngine/routerAb/ecdsaDerivation/signingMaterialRef.js +2 -1
  118. package/dist/esm/core/signingEngine/session/availability/availableSigningLanes.js +4 -4
  119. package/dist/esm/core/signingEngine/session/availability/persistedAvailableSigningLanes.js +2 -2
  120. package/dist/esm/core/signingEngine/session/emailOtp/coordinatorRuntime.js +0 -2
  121. package/dist/esm/core/signingEngine/session/emailOtp/ecdsaLogin.js +2 -2
  122. package/dist/esm/core/signingEngine/session/emailOtp/ecdsaPublication.js +3 -3
  123. package/dist/esm/core/signingEngine/session/emailOtp/ecdsaRecovery.js +3 -3
  124. package/dist/esm/core/signingEngine/session/emailOtp/ecdsaSigningSessionAuthority.js +1 -1
  125. package/dist/esm/core/signingEngine/session/emailOtp/ed25519ExportContext.js +9 -16
  126. package/dist/esm/core/signingEngine/session/emailOtp/exportRecovery.js +2 -2
  127. package/dist/esm/core/signingEngine/session/emailOtp/exportRecoveryRuntime.js +0 -9
  128. package/dist/esm/core/signingEngine/session/emailOtp/publicTypes.js +1 -2
  129. package/dist/esm/core/signingEngine/session/emailOtp/sealedRefreshPolicy.js +0 -28
  130. package/dist/esm/core/signingEngine/session/emailOtp/sealedSessionRegistry.js +1 -1
  131. package/dist/esm/core/signingEngine/session/emailOtp/walletUnlock.js +1 -1
  132. package/dist/esm/core/signingEngine/session/identity/evmFamilyEcdsaIdentity.js +2 -2
  133. package/dist/esm/core/signingEngine/session/identity/exactSigningLaneIdentity.js +1 -1
  134. package/dist/esm/core/signingEngine/session/identity/laneIdentity.js +5 -4
  135. package/dist/esm/core/signingEngine/session/identity/ownerLaneScope.js +1 -1
  136. package/dist/esm/core/signingEngine/session/keyMaterialBrands.js +2 -21
  137. package/dist/esm/core/signingEngine/session/material/activeWalletAuthorityEcdsaRuntime.js +41 -62
  138. package/dist/esm/core/signingEngine/session/material/ecdsaCapabilityManifest.js +6 -2
  139. package/dist/esm/core/signingEngine/session/material/ecdsaSealedRuntime.js +3 -3
  140. package/dist/esm/core/signingEngine/session/material/ecdsaSigningCapability.js +1 -1
  141. package/dist/esm/core/signingEngine/session/material/nearEd25519YaoSigningPreparation.js +1 -1
  142. package/dist/esm/core/signingEngine/session/operationState/authorizationAdmission.js +4 -4
  143. package/dist/esm/core/signingEngine/session/passkey/ecdsaKeyFactsInventory.js +1 -1
  144. package/dist/esm/core/signingEngine/session/passkey/ecdsaRecovery.js +1 -1
  145. package/dist/esm/core/signingEngine/session/passkey/ed25519YaoLocalMaterial.js +39 -59
  146. package/dist/esm/core/signingEngine/session/passkey/ed25519YaoRecoveryCapability.js +13 -22
  147. package/dist/esm/core/signingEngine/session/passkey/ed25519YaoWarmRecovery.js +11 -20
  148. package/dist/esm/core/signingEngine/session/passkey/unlockEcdsaWarmupPlanner.js +1 -1
  149. package/dist/esm/core/signingEngine/session/persistence/ecdsaRoleLocalRecords.js +1 -1
  150. package/dist/esm/core/signingEngine/session/persistence/sealedSessionRecords.js +764 -0
  151. package/dist/esm/core/signingEngine/session/persistence/sealedSessionStore.js +42 -862
  152. package/dist/esm/core/signingEngine/session/public.js +1 -1
  153. package/dist/esm/core/signingEngine/session/sealedRecovery/recoveryRecord.js +3 -3
  154. package/dist/esm/core/signingEngine/session/warmCapabilities/capabilityReaderCore.js +1 -1
  155. package/dist/esm/core/signingEngine/session/warmCapabilities/ecdsaLoginPrefill.js +2 -1
  156. package/dist/esm/core/signingEngine/session/warmCapabilities/ecdsaProvisionPlan.js +0 -1
  157. package/dist/esm/core/signingEngine/session/warmCapabilities/ed25519SealedSessionRuntime.js +3 -3
  158. package/dist/esm/core/signingEngine/session/warmCapabilities/routerAbEd25519WalletSessionState.js +1 -1
  159. package/dist/esm/core/signingEngine/session/warmCapabilities/types.js +0 -1
  160. package/dist/esm/core/signingEngine/session/warmCapabilities/volatileWarmMaterialCommands.js +3 -5
  161. package/dist/esm/core/signingEngine/stepUpConfirmation/passkeyPrompt/touchIdPrompt.js +2 -3
  162. package/dist/esm/core/signingEngine/threshold/crypto/ecdsaDerivationClientWasm.js +3 -2
  163. package/dist/esm/core/signingEngine/threshold/crypto/ed25519YaoLaneWasm.js +2 -2
  164. package/dist/esm/core/signingEngine/threshold/ecdsa/activation.js +3 -2
  165. package/dist/esm/core/signingEngine/threshold/ed25519/connectSession.js +1 -1
  166. package/dist/esm/core/signingEngine/threshold/ed25519/walletSession.js +2 -2
  167. package/dist/esm/core/signingEngine/threshold/ed25519/yaoActiveClientRegistry.js +1 -1
  168. package/dist/esm/core/signingEngine/threshold/ed25519/yaoPublicCapabilityReferences.js +12 -19
  169. package/dist/esm/core/signingEngine/threshold/sessionPolicy.js +1 -1
  170. package/dist/esm/core/signingEngine/uiConfirm/PasskeyMpcSessionDurableState.js +4 -3
  171. package/dist/esm/core/signingEngine/uiConfirm/PasskeyMpcSessionManager.js +2 -2
  172. package/dist/esm/core/signingEngine/uiConfirm/handlers/flows/adapters/adapters.js +7 -0
  173. package/dist/esm/core/signingEngine/uiConfirm/handlers/flows/signing.js +9 -16
  174. package/dist/esm/core/signingEngine/uiConfirm/ui/confirm-surface-resize.js +5 -5
  175. package/dist/esm/core/signingEngine/uiConfirm/ui/confirmation-model.js +1 -1
  176. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/ConfirmationModal.js +1 -0
  177. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/TransactionLabel.js +1 -1
  178. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/TransactionReceipt.js +79 -9
  179. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/TransactionReview.js +31 -78
  180. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/confirmation-controller.js +1 -0
  181. package/dist/esm/core/signingEngine/walletCustody/activateEd25519Capability.js +2 -1
  182. package/dist/esm/core/signingEngine/walletCustody/ceremonyActiveClientMetadata.js +3 -4
  183. package/dist/esm/core/signingEngine/walletCustody/emailOtpLink.js +2 -2
  184. package/dist/esm/core/signingEngine/walletCustody/openCustodyCache.js +1 -1
  185. package/dist/esm/core/signingEngine/walletCustody/recoveryReplacementEnvelope.js +2 -1
  186. package/dist/esm/core/signingEngine/walletCustody/unlockedEd25519ExportRootCapability.js +56 -9
  187. package/dist/esm/core/signingEngine/walletCustody/walletRecoveryEcdsa.js +1 -1
  188. package/dist/esm/core/signingEngine/walletCustody/walletRecoveryEd25519.js +2 -2
  189. package/dist/esm/core/signingEngine/walletCustody/walletRecoveryRotation.js +52 -81
  190. package/dist/esm/core/signingEngine/webauthnAuth/credentials/credentialExtensions.js +2 -4
  191. package/dist/esm/core/signingEngine/webauthnAuth/credentials/helpers.js +1 -1
  192. package/dist/esm/core/signingEngine/workerManager/deviceLinkingPorts.js +13 -16
  193. package/dist/esm/core/signingEngine/workerManager/deviceLinkingSourceContribution.js +28 -3
  194. package/dist/esm/core/signingEngine/workerManager/ecdsaClientWorkerChannels.js +3 -1
  195. package/dist/esm/core/signingEngine/workerManager/workerTransport.js +20 -5
  196. package/dist/esm/core/signingEngine/workerManager/workerTypes.js +2 -1
  197. package/dist/esm/core/types/linkDevice.js +2 -3
  198. package/dist/esm/core/types/sdkSentEvents.js +7 -5
  199. package/dist/esm/core/types/signer-worker.js +1 -58
  200. package/dist/esm/index.js +1 -1
  201. package/dist/esm/plugins/vite.js +1 -1
  202. package/dist/esm/react/SeamsWeb/SeamsWeb.js +32 -92
  203. package/dist/esm/react/SeamsWeb/assembly/browserSigningSurfaceAssembly.js +25 -5
  204. package/dist/esm/react/SeamsWeb/assembly/createBrowserSigningStores.js +1 -2
  205. package/dist/esm/react/SeamsWeb/operations/auth/login.js +10 -34
  206. package/dist/esm/react/SeamsWeb/operations/auth/walletAuth.js +1 -1
  207. package/dist/esm/react/SeamsWeb/operations/auth/walletUnlockSubject.js +1 -1
  208. package/dist/esm/react/SeamsWeb/operations/authMethods/addAuthMethodSourceClaim.js +1 -1
  209. package/dist/esm/react/SeamsWeb/operations/authMethods/emailOtp/addEmailOtp.js +4 -3
  210. package/dist/esm/react/SeamsWeb/operations/authMethods/emailOtp/googleEmailOtpWalletAuthFlow.js +1 -1
  211. package/dist/esm/react/SeamsWeb/operations/authMethods/emailOtp/localEmailOtpProjection.js +1 -1
  212. package/dist/esm/react/SeamsWeb/operations/authMethods/emailOtp/registrationOffer.js +6 -15
  213. package/dist/esm/react/SeamsWeb/operations/authMethods/emailOtp/walletActivation.js +1 -1
  214. package/dist/esm/react/SeamsWeb/operations/authMethods/passkey/addPasskey.js +5 -4
  215. package/dist/esm/react/SeamsWeb/operations/authMethods/passkey/exactPasskeyAuthority.js +34 -0
  216. package/dist/esm/react/SeamsWeb/operations/authMethods/passkey/localPasskeyProjection.js +3 -3
  217. package/dist/esm/react/SeamsWeb/operations/authMethods/revokeAuthMethod.js +3 -2
  218. package/dist/esm/react/SeamsWeb/operations/devices/deviceLinkingAuthorityInstallation.js +2 -2
  219. package/dist/esm/react/SeamsWeb/operations/devices/deviceLinkingEd25519ExportRoot.js +1 -1
  220. package/dist/esm/react/SeamsWeb/operations/devices/deviceLinkingHttpTransport.js +5 -4
  221. package/dist/esm/react/SeamsWeb/operations/devices/deviceLinkingOwnerTransport.js +1 -1
  222. package/dist/esm/react/SeamsWeb/operations/devices/deviceLinkingResume.js +3 -3
  223. package/dist/esm/react/SeamsWeb/operations/devices/deviceLinkingWorkerChannels.js +2 -1
  224. package/dist/esm/react/SeamsWeb/operations/devices/linkDevice.js +1 -1671
  225. package/dist/esm/react/SeamsWeb/operations/devices/linkDeviceFlow.js +1358 -0
  226. package/dist/esm/react/SeamsWeb/operations/devices/linkDeviceFlowSupport.js +143 -0
  227. package/dist/esm/react/SeamsWeb/operations/devices/linkDeviceTargetActivation.js +119 -0
  228. package/dist/esm/react/SeamsWeb/operations/devices/walletHostComposition.js +13 -3
  229. package/dist/esm/react/SeamsWeb/operations/devices/walletHostOwnerAuthority.js +11 -3
  230. package/dist/esm/react/SeamsWeb/operations/near/index.js +1 -1
  231. package/dist/esm/react/SeamsWeb/operations/recovery/accountSync.js +1 -1
  232. package/dist/esm/react/SeamsWeb/operations/recovery/recoveryWalletBinding.js +1 -1
  233. package/dist/esm/react/SeamsWeb/operations/recovery/syncAccount.js +5 -5
  234. package/dist/esm/react/SeamsWeb/operations/recovery/walletRecoveryCommit.js +5 -9
  235. package/dist/esm/react/SeamsWeb/operations/recovery/walletRecoveryDurablePayload.js +3 -1
  236. package/dist/esm/react/SeamsWeb/operations/registration/pendingEcdsaRegistrationRecovery.js +38 -4
  237. package/dist/esm/react/SeamsWeb/operations/registration/pendingEcdsaRegistrationRecoveryUnlock.js +20 -41
  238. package/dist/esm/react/SeamsWeb/operations/registration/pendingEcdsaRegistrationRecoveryValidation.js +3 -3
  239. package/dist/esm/react/SeamsWeb/operations/registration/pendingRegistrationRecovery.js +2 -2
  240. package/dist/esm/react/SeamsWeb/operations/registration/registration.js +96 -53
  241. package/dist/esm/react/SeamsWeb/operations/registration/registrationEd25519Yao.js +35 -4
  242. package/dist/esm/react/SeamsWeb/operations/registration/registrationSignerSet.js +1 -1
  243. package/dist/esm/react/SeamsWeb/operations/registration/registrationStrictEcdsa.js +5 -4
  244. package/dist/esm/react/SeamsWeb/operations/registration/registrationTiming.js +194 -539
  245. package/dist/esm/react/SeamsWeb/publicApi/awaitNearReady.js +3 -1
  246. package/dist/esm/react/SeamsWeb/publicApi/devices.js +1 -1
  247. package/dist/esm/react/SeamsWeb/signingSurface/BrowserSigningSurface.js +21 -23
  248. package/dist/esm/react/SeamsWeb/walletIframe/client/progress/on-events-progress-bus.js +0 -4
  249. package/dist/esm/react/SeamsWeb/walletIframe/client/router.js +4 -3
  250. package/dist/esm/react/SeamsWeb/walletIframe/client/surface/geometry.js +8 -5
  251. package/dist/esm/react/SeamsWeb/walletIframe/shared/exactSessionState.js +27 -37
  252. package/dist/esm/react/SeamsWeb/walletIframe/shared/messages.js +3 -1
  253. package/dist/esm/react/SeamsWeb/walletIframe/shared/transactionReview.js +3 -5
  254. package/dist/esm/react/components/AccountMenuButton/AccountMenuDialog.js +93 -0
  255. package/dist/esm/react/components/AccountMenuButton/AuthenticationMethodsModal.js +187 -249
  256. package/dist/esm/react/components/AccountMenuButton/LinkedDevicesModal.js +195 -257
  257. package/dist/esm/react/components/AccountMenuButton/ProfileDropdown.js +1 -1
  258. package/dist/esm/react/components/AccountMenuButton/TransactionSettingsSection.js +1 -1
  259. package/dist/esm/react/components/AccountMenuButton/UserAccountButton.js +1 -1
  260. package/dist/esm/react/components/AccountMenuButton/icons/MoonIcon.js +6 -41
  261. package/dist/esm/react/components/AccountMenuButton/icons/SunIcon.js +43 -78
  262. package/dist/esm/react/components/AccountMenuButton/icons/strokeIcon.js +43 -0
  263. package/dist/esm/react/components/AccountMenuButton/index.js +1 -1
  264. package/dist/esm/react/components/theme/design-tokens.js +0 -1
  265. package/dist/esm/react/core/config/chains.js +1 -0
  266. package/dist/esm/react/core/indexedDB/keyMaterialEnvelope.js +1 -5
  267. package/dist/esm/react/core/indexedDB/linkedAuthoritySignerMaterial.js +7 -14
  268. package/dist/esm/react/core/indexedDB/pendingWalletRecoveryCommit.js +1 -1
  269. package/dist/esm/react/core/indexedDB/pendingWalletRegistrationCommit.js +1 -1
  270. package/dist/esm/react/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestLookups.js +209 -0
  271. package/dist/esm/react/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestRecords.js +848 -0
  272. package/dist/esm/react/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestStore.js +122 -1721
  273. package/dist/esm/react/core/indexedDB/seamsWalletDB/ecdsaClientPresignatures.js +235 -0
  274. package/dist/esm/react/core/indexedDB/seamsWalletDB/repositories.js +56 -7
  275. package/dist/esm/react/core/indexedDB/seamsWalletDB/walletCustodyEcdsaContinuity.js +198 -0
  276. package/dist/esm/react/core/indexedDB/seamsWalletDB/walletSessionAuthorizationStore.js +1 -1
  277. package/dist/esm/react/core/indexedDB/unifiedIndexedDBManager.js +6 -0
  278. package/dist/esm/react/core/indexedDB/walletCustodyEd25519MaterialRecord.js +1 -1
  279. package/dist/esm/react/core/platform/browser/createBrowserPlatformRuntime.js +1 -44
  280. package/dist/esm/react/core/rpcClients/near/NearClient.js +19 -214
  281. package/dist/esm/react/core/rpcClients/near/rpcCalls.js +1 -1
  282. package/dist/esm/react/core/rpcClients/relayer/routerAbNormalSigning.js +56 -85
  283. package/dist/esm/react/core/rpcClients/relayer/walletRecoveryPrepare.js +2 -2
  284. package/dist/esm/react/core/rpcClients/relayer/walletRecoveryRotate.js +0 -1
  285. package/dist/esm/react/core/rpcClients/relayer/walletRegistration.js +39 -15
  286. package/dist/esm/react/core/rpcClients/relayer/walletRegistrationTerminalResponse.js +4 -10
  287. package/dist/esm/react/core/rpcClients/relayer/walletSessionAuthorizationStatus.js +1 -1
  288. package/dist/esm/react/core/signingEngine/assembly/ports/stepUpRuntime.js +0 -1
  289. package/dist/esm/react/core/signingEngine/chains/evm/display/evmTx.js +1 -6
  290. package/dist/esm/react/core/signingEngine/chains/near/display.js +14 -1
  291. package/dist/esm/react/core/signingEngine/chains/tempo/display.js +1 -6
  292. package/dist/esm/react/core/signingEngine/flows/recovery/ecdsaDerivationExport.js +1 -1
  293. package/dist/esm/react/core/signingEngine/flows/recovery/ecdsaExportFlow.js +5 -6
  294. package/dist/esm/react/core/signingEngine/flows/recovery/exportLaneSelection.js +1 -1
  295. package/dist/esm/react/core/signingEngine/flows/recovery/passkeyEd25519YaoRecovery.js +16 -24
  296. package/dist/esm/react/core/signingEngine/flows/registration/accountLifecycle.js +246 -504
  297. package/dist/esm/react/core/signingEngine/flows/registration/services/passkeyEd25519YaoAddSigner.js +7 -10
  298. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/authPlanning.js +1 -1
  299. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/ecdsaLanes.js +1 -1
  300. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/ecdsaSelection.js +1 -1
  301. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/preparedSigning.js +1 -1
  302. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signEvmFamily.js +3 -5
  303. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signEvmFamilyWithUiConfirmForTempo.js +1 -1
  304. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signEvmWithUiConfirm.js +1 -1
  305. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signers/secp256k1.js +1 -2
  306. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signingFlow.js +4 -4
  307. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signingFlowRuntime.js +41 -11
  308. package/dist/esm/react/core/signingEngine/flows/signNear/shared/ed25519YaoNormalSigning.js +1 -1
  309. package/dist/esm/react/core/signingEngine/flows/signNear/shared/signatureOnlySigning.js +343 -0
  310. package/dist/esm/react/core/signingEngine/flows/signNear/shared/signingSessionAuthMode.js +1 -1
  311. package/dist/esm/react/core/signingEngine/flows/signNear/signDelegate.js +66 -312
  312. package/dist/esm/react/core/signingEngine/flows/signNear/signNear.js +45 -49
  313. package/dist/esm/react/core/signingEngine/flows/signNear/signNep413.js +58 -305
  314. package/dist/esm/react/core/signingEngine/flows/signNear/signTransactions.js +34 -17
  315. package/dist/esm/react/core/signingEngine/interfaces/accountAuthMetadata.js +0 -1
  316. package/dist/esm/react/core/signingEngine/routerAb/ecdsaDerivation/presignaturePool.js +13 -147
  317. package/dist/esm/react/core/signingEngine/routerAb/ecdsaDerivation/signingMaterialRef.js +2 -1
  318. package/dist/esm/react/core/signingEngine/session/SigningSessionCoordinator.js +1 -1
  319. package/dist/esm/react/core/signingEngine/session/availability/availableSigningLanes.js +4 -4
  320. package/dist/esm/react/core/signingEngine/session/availability/persistedAvailableSigningLanes.js +3 -3
  321. package/dist/esm/react/core/signingEngine/session/emailOtp/coordinatorRuntime.js +0 -2
  322. package/dist/esm/react/core/signingEngine/session/emailOtp/ecdsaLogin.js +2 -2
  323. package/dist/esm/react/core/signingEngine/session/emailOtp/ecdsaPublication.js +1 -1
  324. package/dist/esm/react/core/signingEngine/session/emailOtp/ecdsaRecovery.js +2 -2
  325. package/dist/esm/react/core/signingEngine/session/emailOtp/ed25519ExportContext.js +7 -14
  326. package/dist/esm/react/core/signingEngine/session/emailOtp/exportRecovery.js +1 -1
  327. package/dist/esm/react/core/signingEngine/session/emailOtp/exportRecoveryRuntime.js +0 -9
  328. package/dist/esm/react/core/signingEngine/session/emailOtp/publicTypes.js +0 -1
  329. package/dist/esm/react/core/signingEngine/session/emailOtp/sealedRefreshPolicy.js +0 -28
  330. package/dist/esm/react/core/signingEngine/session/emailOtp/sealedSessionRegistry.js +1 -1
  331. package/dist/esm/react/core/signingEngine/session/emailOtp/walletUnlock.js +1 -1
  332. package/dist/esm/react/core/signingEngine/session/emailOtp/workerEnrollment.js +1 -1
  333. package/dist/esm/react/core/signingEngine/session/identity/clientSessionPersistenceState.js +1 -1
  334. package/dist/esm/react/core/signingEngine/session/identity/evmFamilyEcdsaIdentity.js +3 -3
  335. package/dist/esm/react/core/signingEngine/session/identity/exactSigningLaneIdentity.js +2 -2
  336. package/dist/esm/react/core/signingEngine/session/identity/laneIdentity.js +6 -5
  337. package/dist/esm/react/core/signingEngine/session/keyMaterialBrands.js +2 -21
  338. package/dist/esm/react/core/signingEngine/session/material/activeWalletAuthorityEcdsaRuntime.js +39 -60
  339. package/dist/esm/react/core/signingEngine/session/material/ecdsaCapabilityManifest.js +5 -1
  340. package/dist/esm/react/core/signingEngine/session/material/nearEd25519YaoSigningPreparation.js +1 -1
  341. package/dist/esm/react/core/signingEngine/session/operationState/authorizationAdmission.js +4 -4
  342. package/dist/esm/react/core/signingEngine/session/passkey/ecdsaBootstrap.js +1 -1
  343. package/dist/esm/react/core/signingEngine/session/passkey/ecdsaKeyFactsInventory.js +1 -1
  344. package/dist/esm/react/core/signingEngine/session/passkey/ecdsaRecovery.js +1 -1
  345. package/dist/esm/react/core/signingEngine/session/passkey/ecdsaWarmCapabilityBootstrap.js +1 -1
  346. package/dist/esm/react/core/signingEngine/session/passkey/ed25519SessionProvision.js +1 -1
  347. package/dist/esm/react/core/signingEngine/session/passkey/ed25519YaoLocalMaterial.js +37 -57
  348. package/dist/esm/react/core/signingEngine/session/passkey/ed25519YaoRecoveryCapability.js +12 -21
  349. package/dist/esm/react/core/signingEngine/session/passkey/ed25519YaoWarmRecovery.js +10 -19
  350. package/dist/esm/react/core/signingEngine/session/persistence/sealedSessionRecords.js +764 -0
  351. package/dist/esm/react/core/signingEngine/session/persistence/sealedSessionStore.js +41 -858
  352. package/dist/esm/react/core/signingEngine/session/postconditions/runtimePostconditions.js +1 -1
  353. package/dist/esm/react/core/signingEngine/session/public.js +2 -2
  354. package/dist/esm/react/core/signingEngine/session/warmCapabilities/capabilityReaderCore.js +1 -1
  355. package/dist/esm/react/core/signingEngine/session/warmCapabilities/ecdsaBootstrapPersistence.js +1 -1
  356. package/dist/esm/react/core/signingEngine/session/warmCapabilities/ecdsaLoginPrefill.js +2 -1
  357. package/dist/esm/react/core/signingEngine/session/warmCapabilities/ecdsaProvisionPlan.js +0 -1
  358. package/dist/esm/react/core/signingEngine/session/warmCapabilities/ed25519SealedSessionRuntime.js +3 -3
  359. package/dist/esm/react/core/signingEngine/session/warmCapabilities/nearEd25519CapabilityRehydration.js +1 -1
  360. package/dist/esm/react/core/signingEngine/session/warmCapabilities/sealedRefreshParity.js +1 -1
  361. package/dist/esm/react/core/signingEngine/session/warmCapabilities/types.js +1 -2
  362. package/dist/esm/react/core/signingEngine/session/warmCapabilities/volatileWarmMaterialCommands.js +3 -5
  363. package/dist/esm/react/core/signingEngine/stepUpConfirmation/passkeyPrompt/touchIdPrompt.js +2 -3
  364. package/dist/esm/react/core/signingEngine/threshold/crypto/ecdsaDerivationClientWasm.js +2 -1
  365. package/dist/esm/react/core/signingEngine/threshold/crypto/ed25519YaoLaneWasm.js +2 -2
  366. package/dist/esm/react/core/signingEngine/threshold/ecdsa/activation.js +2 -1
  367. package/dist/esm/react/core/signingEngine/threshold/ecdsa/bootstrapSession.js +1 -1
  368. package/dist/esm/react/core/signingEngine/threshold/ed25519/walletSession.js +1 -1
  369. package/dist/esm/react/core/signingEngine/threshold/ed25519/yaoPublicCapabilityReferences.js +12 -19
  370. package/dist/esm/react/core/signingEngine/uiConfirm/PasskeyMpcSessionDurableState.js +2 -1
  371. package/dist/esm/react/core/signingEngine/uiConfirm/PasskeyMpcSessionManager.js +1 -1
  372. package/dist/esm/react/core/signingEngine/uiConfirm/handlers/flows/adapters/adapters.js +7 -0
  373. package/dist/esm/react/core/signingEngine/uiConfirm/handlers/flows/localOnly.js +1 -1
  374. package/dist/esm/react/core/signingEngine/uiConfirm/handlers/flows/signing.js +9 -16
  375. package/dist/esm/react/core/signingEngine/uiConfirm/ui/confirm-surface-resize.js +5 -5
  376. package/dist/esm/react/core/signingEngine/uiConfirm/ui/confirmation-model.js +1 -1
  377. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/ConfirmationModal.js +1 -0
  378. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/TransactionLabel.js +1 -1
  379. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/TransactionReceipt.js +79 -9
  380. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/TransactionReview.js +31 -78
  381. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/confirmation-controller.js +1 -0
  382. package/dist/esm/react/core/signingEngine/walletCustody/activateEd25519Capability.js +2 -1
  383. package/dist/esm/react/core/signingEngine/walletCustody/ceremonyActiveClientMetadata.js +3 -4
  384. package/dist/esm/react/core/signingEngine/walletCustody/emailOtpLink.js +2 -2
  385. package/dist/esm/react/core/signingEngine/walletCustody/recoveryReplacementEnvelope.js +2 -1
  386. package/dist/esm/react/core/signingEngine/walletCustody/unlockedEd25519ExportRootCapability.js +55 -8
  387. package/dist/esm/react/core/signingEngine/walletCustody/walletRecoveryRotation.js +52 -81
  388. package/dist/esm/react/core/signingEngine/webauthnAuth/credentials/credentialExtensions.js +2 -4
  389. package/dist/esm/react/core/signingEngine/workerManager/deviceLinkingPorts.js +13 -16
  390. package/dist/esm/react/core/signingEngine/workerManager/deviceLinkingSourceContribution.js +29 -4
  391. package/dist/esm/react/core/signingEngine/workerManager/ecdsaClientWorkerChannels.js +4 -2
  392. package/dist/esm/react/core/signingEngine/workerManager/workerTransport.js +20 -5
  393. package/dist/esm/react/core/signingEngine/workerManager/workerTypes.js +2 -1
  394. package/dist/esm/react/core/types/linkDevice.js +2 -3
  395. package/dist/esm/react/core/types/sdkSentEvents.js +7 -5
  396. package/dist/esm/react/hooks/useQRCamera.js +1 -1
  397. package/dist/esm/react/shared-ts/src/authorization/delegatedAuthority.js +1 -1
  398. package/dist/esm/react/shared-ts/src/authorization/operationFingerprint.js +0 -1
  399. package/dist/esm/react/shared-ts/src/authorization/walletAuthority.js +92 -227
  400. package/dist/esm/react/shared-ts/src/authorization/walletCustodyOperation.js +4 -6
  401. package/dist/esm/react/shared-ts/src/device-linking/activeWalletSession.js +70 -1
  402. package/dist/esm/react/shared-ts/src/device-linking/authorityActivation.js +142 -0
  403. package/dist/esm/react/shared-ts/src/device-linking/committedSignerPackages.js +3 -3
  404. package/dist/esm/react/shared-ts/src/device-linking/delegatedActivationPlan.js +3 -1
  405. package/dist/esm/react/shared-ts/src/device-linking/deviceManagement.js +120 -0
  406. package/dist/esm/react/shared-ts/src/device-linking/digests.js +8 -63
  407. package/dist/esm/react/shared-ts/src/device-linking/ed25519ExportRoot.js +3 -1
  408. package/dist/esm/react/shared-ts/src/device-linking/index.js +6 -4
  409. package/dist/esm/react/shared-ts/src/device-linking/parsers.js +546 -1308
  410. package/dist/esm/react/shared-ts/src/device-linking/requestProof.js +3 -3
  411. package/dist/esm/react/shared-ts/src/device-linking/sourceContribution.js +8 -11
  412. package/dist/esm/react/shared-ts/src/device-linking/walletSessionCredentialDelivery.js +7 -7
  413. package/dist/esm/react/shared-ts/src/device-linking/wireFields.js +59 -0
  414. package/dist/esm/react/shared-ts/src/near/nearClient.js +252 -0
  415. package/dist/esm/react/shared-ts/src/passkey-custody/custodyEnvelope.js +6 -4
  416. package/dist/esm/react/shared-ts/src/passkey-custody/custodySecretBinding.js +6 -4
  417. package/dist/esm/react/shared-ts/src/passkey-custody/primitives.js +5 -39
  418. package/dist/esm/react/shared-ts/src/signing-lanes/index.js +4 -3
  419. package/dist/esm/react/shared-ts/src/signing-lanes/ownerContinuity.js +6 -1
  420. package/dist/esm/react/shared-ts/src/signing-lanes/participantDigest.js +2 -0
  421. package/dist/esm/react/shared-ts/src/signing-lanes/participants.js +2 -5
  422. package/dist/esm/react/shared-ts/src/signing-lanes/recordParsers.js +7 -7
  423. package/dist/esm/react/shared-ts/src/signing-lanes/rotationDigests.js +2 -0
  424. package/dist/esm/react/shared-ts/src/signing-lanes/rotationParsers.js +3 -3
  425. package/dist/esm/react/shared-ts/src/signing-lanes/rotationProtocolParsers.js +8 -0
  426. package/dist/esm/react/shared-ts/src/signing-lanes/rotationWireFields.js +3 -0
  427. package/dist/esm/react/shared-ts/src/threshold/ed25519OperationFingerprint.js +34 -42
  428. package/dist/esm/react/shared-ts/src/threshold/keyMaterialBrands.js +25 -0
  429. package/dist/esm/react/shared-ts/src/threshold/secp256k1.js +1 -2
  430. package/dist/esm/react/shared-ts/src/utils/addAuthMethodRegistration.js +3 -4
  431. package/dist/esm/react/shared-ts/src/utils/canonicalPrimitives.js +8 -1
  432. package/dist/esm/react/shared-ts/src/utils/digestEncoding.js +63 -0
  433. package/dist/esm/react/shared-ts/src/utils/ecdsaKeyFactsInventory.js +1 -1
  434. package/dist/esm/react/shared-ts/src/utils/emailOtpDomain.js +3 -3
  435. package/dist/esm/react/shared-ts/src/utils/encoders.js +1 -1
  436. package/dist/esm/react/shared-ts/src/utils/errors.js +1 -1
  437. package/dist/esm/react/shared-ts/src/utils/exactRecord.js +44 -0
  438. package/dist/esm/react/shared-ts/src/utils/index.js +12 -8
  439. package/dist/esm/react/shared-ts/src/utils/registrationAuthMethodInput.js +84 -0
  440. package/dist/esm/react/shared-ts/src/utils/registrationEstablishedSession.js +2 -2
  441. package/dist/esm/react/shared-ts/src/utils/registrationIds.js +226 -0
  442. package/dist/esm/react/shared-ts/src/utils/registrationIntent.js +4 -1081
  443. package/dist/esm/react/shared-ts/src/utils/registrationSignerPlan.js +442 -0
  444. package/dist/esm/react/shared-ts/src/utils/routerAbEcdsaDerivation.js +9 -8
  445. package/dist/esm/react/shared-ts/src/utils/routerAbEd25519Yao.js +3 -76
  446. package/dist/esm/react/shared-ts/src/utils/routerAbEd25519YaoDigests.js +76 -0
  447. package/dist/esm/react/shared-ts/src/utils/routerAbNormalSigningIdentity.js +1 -4
  448. package/dist/esm/react/shared-ts/src/utils/routerAbPublicKeyset.js +2 -6
  449. package/dist/esm/react/shared-ts/src/utils/secureRandomId.js +1 -1
  450. package/dist/esm/react/shared-ts/src/utils/signerDomain.js +1 -16
  451. package/dist/esm/react/shared-ts/src/utils/validation.js +36 -2
  452. package/dist/esm/react/shared-ts/src/utils/walletAuthAuthority.js +1 -1
  453. package/dist/esm/react/shared-ts/src/utils/walletAuthMethodRecord.js +357 -0
  454. package/dist/esm/react/shared-ts/src/utils/walletCapabilityBindings.js +2 -2
  455. package/dist/esm/react/shared-ts/src/utils/wireSchema.js +66 -0
  456. package/dist/esm/react/shared-ts/src/wallet-recovery/walletRecoveryCommittedProjection.js +10 -13
  457. package/dist/esm/react/shared-ts/src/wallet-recovery/walletRecoveryEcdsaPossession.js +4 -8
  458. package/dist/esm/react/shared-ts/src/wallet-recovery/walletRecoveryEnvelopeSet.js +3 -1
  459. package/dist/esm/react/utils/qrScanner.js +2 -19
  460. package/dist/{public/sdk/ConfirmationDrawer-G0bT0Dbu.js → esm/sdk/ConfirmationDrawer-MgFTBwwK.js} +2 -1
  461. package/dist/esm/sdk/{EvmClient-CHw6txjt.js → EvmClient-f3gUhS2L.js} +1 -1
  462. package/dist/esm/sdk/{NearClient-BQgcqAzG.js → NearClient-DY4NfHeD.js} +194 -147
  463. package/dist/esm/sdk/{NonceCoordinator-C7mqpJiU.js → NonceCoordinator-4XWPhYww.js} +4 -4
  464. package/dist/esm/sdk/{accountIds-Ck4GAQfm.js → accountIds-DhIPGOSN.js} +1 -1
  465. package/dist/{public/sdk/accountLifecycle-Ddavc_FC.js → esm/sdk/accountLifecycle-BAGG_rbk.js} +253 -514
  466. package/dist/esm/sdk/{actions-DsBQcjBn.js → actions-CCvThiKe.js} +1 -1
  467. package/dist/esm/sdk/{adapters-m94YFj70.js → adapters-B4JeK1nJ.js} +134 -105
  468. package/dist/esm/sdk/canonicalPrimitives-BTHWz80v.js +36 -0
  469. package/dist/{public/sdk/canonicalSignerErrorCode-DAzYzisf.js → esm/sdk/canonicalSignerErrorCode-CRoJMVpp.js} +2 -2
  470. package/dist/{public/sdk/capabilityKinds-jwCEaqBU.js → esm/sdk/capabilityKinds-hvYqa6S_.js} +1 -1
  471. package/dist/esm/sdk/chains-BMh3btVo.js +124 -0
  472. package/dist/{public/sdk/challengeDelivery-BjLKoou3.js → esm/sdk/challengeDelivery-Dd0586fo.js} +2 -2
  473. package/dist/esm/sdk/{configHelpers-DB73zYvO.js → configHelpers-vAQCzUD0.js} +3 -3
  474. package/dist/{public/sdk/defaultConfigs-CyNOW4Sy.js → esm/sdk/defaultConfigs-B3c16M_8.js} +5 -5
  475. package/dist/esm/sdk/{display-DHdC2yXU.js → display-KdIL0ff7.js} +3 -8
  476. package/dist/esm/sdk/{normalize-BephcEIF.js → domainIds-lcrFg6Sa.js} +84 -84
  477. package/dist/{public/sdk/ecdsaCapabilityManifest-C8itxV9S.js → esm/sdk/ecdsaCapabilityManifest-kzO_fW09.js} +12 -8
  478. package/dist/esm/sdk/{ecdsaChainTarget-BOTPGIU_.js → ecdsaChainTarget-Bl-JWyuw.js} +2 -2
  479. package/dist/esm/sdk/ecdsaPresignLifecycle-BFOTNYCK.js +1983 -0
  480. package/dist/esm/sdk/{ecdsaPresignPoolIdentity-Yopr4jvS.js → ecdsaPresignPoolIdentity-BjxZVIqn.js} +1 -1
  481. package/dist/{public/sdk/ecdsaWalletRecords-CAbbVhEY.js → esm/sdk/ecdsaWalletRecords-Cz4m6bIz.js} +6 -4
  482. package/dist/esm/sdk/encoders-D8d07vpx.js +0 -0
  483. package/dist/esm/sdk/{enrichDisplayModelWithAbi-DnjR1CqT.js → enrichDisplayModelWithAbi-CWggsykc.js} +2 -2
  484. package/dist/{public/sdk/evmCryptoWasm-BVj135bZ.js → esm/sdk/evmCryptoWasm-DWklhEEb.js} +1 -1
  485. package/dist/esm/sdk/evmFamilyEcdsaIdentity-Co5XDcEA.js +4288 -0
  486. package/dist/{public/sdk/exactSessionState-Bt0HforB.js → esm/sdk/exactSessionState-CiD5fBEs.js} +45 -54
  487. package/dist/esm/sdk/exactSigningLaneIdentity-DQeqPMST.js +335 -0
  488. package/dist/esm/sdk/{export-viewer-host-CbqG8ZQV.js → export-viewer-host-ZqA2Yz3H.js} +3 -3
  489. package/dist/esm/sdk/{helpers-DpRjHMBx.js → helpers-ZrowMnev.js} +3 -6
  490. package/dist/{public/sdk/host-BPC1zSVg.js → esm/sdk/host-BWBbCAMu.js} +12 -12
  491. package/dist/{public/sdk/intentDigest-A1MbbJPu.js → esm/sdk/intentDigest-CvOSNlCH.js} +2 -2
  492. package/dist/esm/sdk/{jsxRuntime.module-FAP0NE9p.js → jsxRuntime.module-CuH5ZEIA.js} +1 -1
  493. package/dist/{public/sdk/keyMaterialBrands-BbjCfzXv.js → esm/sdk/keyMaterialBrands-CX41hur6.js} +15 -13
  494. package/dist/esm/sdk/{localOnly-CbLYTVbo.js → localOnly-Bg8UuLZ5.js} +8 -10
  495. package/dist/esm/sdk/{messages-B3UbNZYc.js → messages-C7Dbx9iN.js} +6 -4
  496. package/dist/{public/sdk/mountExportPrivateKeySurface-CNc6Mch4.js → esm/sdk/mountExportPrivateKeySurface-DgX-IBG_.js} +4 -4
  497. package/dist/{public/sdk/mountRecoveryCodeBackupSurface-ChwzwnYG.js → esm/sdk/mountRecoveryCodeBackupSurface-DXrExiJ7.js} +2 -2
  498. package/dist/{public/sdk/nearEd25519YaoMaterialActivation-Cz5UJQ_7.js → esm/sdk/nearEd25519YaoMaterialActivation-DPb0s3hQ.js} +52 -35
  499. package/dist/{public/sdk/nearEd25519YaoSigningPreparation-DX6xG-IW.js → esm/sdk/nearEd25519YaoSigningPreparation-BeD-SmbK.js} +10 -8
  500. package/dist/esm/sdk/{nonceLaneKeys-B_RcSS6M.js → nonceLaneKeys-C3c9lG6u.js} +1 -1
  501. package/dist/{public/sdk/normalization-oJyXl3Vn.js → esm/sdk/normalization-CBt413-z.js} +2 -2
  502. package/dist/esm/sdk/{operationFingerprint-DEPg9A3h.js → operationFingerprint-C8Trar4R.js} +4 -4
  503. package/dist/esm/sdk/{operationFingerprint-CsYO6b0a.js → operationFingerprint-CGZui5dR.js} +2 -1
  504. package/dist/{public/sdk/passkey-custody-BaHyYMhj.js → esm/sdk/passkey-custody-Bk1jAknm.js} +7 -6
  505. package/dist/{public/sdk/pendingWalletRecoveryCodeBackup-DyvRysWg.js → esm/sdk/pendingWalletRecoveryCodeBackup-DLzBb3WQ.js} +3 -3
  506. package/dist/esm/sdk/{recovery-entrypoint-D39R1avB.js → recovery-entrypoint-DW2tGyMs.js} +19 -16
  507. package/dist/esm/sdk/{registration-PIBMSsQR.js → registration-BZDzDv91.js} +2827 -3126
  508. package/dist/esm/sdk/{registration-DtDICj-o.js → registration-BzVHODuD.js} +4 -4
  509. package/dist/{public/sdk/registrationAccounts-AO3QHjas.js → esm/sdk/registrationAccounts-CKku_Sgy.js} +6 -4
  510. package/dist/esm/sdk/registrationIds-DLSdEKSv.js +310 -0
  511. package/dist/esm/sdk/registrationIntent-D0PxwEY4.js +393 -0
  512. package/dist/{public/sdk/registrationPreparationPreload-BZfAC_ba.js → esm/sdk/registrationPreparationPreload-CIAuRlxI.js} +2 -2
  513. package/dist/esm/sdk/registrationSignerPlan-CAikVZZQ.js +440 -0
  514. package/dist/esm/sdk/{relayerHttp-LsVTZCxA.js → relayerHttp-VC8Holz1.js} +1 -1
  515. package/dist/{public/sdk/routePlan-nLpPFHB-.js → esm/sdk/routePlan-D59x5xzQ.js} +1 -1
  516. package/dist/{public/sdk/router-CeFS9SgT.js → esm/sdk/router-C5lF_J_u.js} +23 -25
  517. package/dist/{public/sdk/routerAbNormalSigning-DktZKnf1.js → esm/sdk/routerAbNormalSigning-fhvpDtmY.js} +63 -92
  518. package/dist/esm/sdk/router_ab_ed25519_yao_client_bg.wasm +0 -0
  519. package/dist/{public/sdk/runtime-auth-D_lUQQlc.js → esm/sdk/runtime-auth-DFTqwj3u.js} +35 -45
  520. package/dist/esm/sdk/{runtime-device-link-CEph1iM0.js → runtime-device-link-C1Oub8Lw.js} +25 -22
  521. package/dist/{public/sdk/runtime-ecdsa-tempo-tUWnafRo.js → esm/sdk/runtime-ecdsa-tempo-rkWwolw1.js} +24 -21
  522. package/dist/{public/sdk/runtime-email-otp-1wIPTDim.js → esm/sdk/runtime-email-otp-vuUG5LYl.js} +23 -20
  523. package/dist/esm/sdk/{runtime-export-Du2d4_Vu.js → runtime-export-FZWj0HxJ.js} +26 -22
  524. package/dist/esm/sdk/{runtime-near-CGoWxu7u.js → runtime-near-B9cjurVD.js} +24 -22
  525. package/dist/esm/sdk/{runtime-preferences-JwJK_xP3.js → runtime-preferences-Dq0bfyS5.js} +24 -21
  526. package/dist/{public/sdk/runtime-recovery-BEqBdpyo.js → esm/sdk/runtime-recovery-C-vfFKF3.js} +23 -20
  527. package/dist/{public/sdk/runtime-recovery-codes-DW7bB2tO.js → esm/sdk/runtime-recovery-codes-bTm3fLV4.js} +15 -19
  528. package/dist/esm/sdk/{runtimeContext-CTt9ON27.js → runtimeContext-iLXnxVlZ.js} +615 -850
  529. package/dist/{public/sdk/runtimeLoader-ZXsvx9zX.js → esm/sdk/runtimeLoader-hod6T2-m.js} +12 -12
  530. package/dist/{public/sdk/sdkSentEvents-5Pi-hjHB.js → esm/sdk/sdkSentEvents-MqDkbQg1.js} +10 -8
  531. package/dist/{public/sdk/secp256k1-CWDid9WH.js → esm/sdk/secp256k1-el9aE4Sv.js} +22 -156
  532. package/dist/esm/sdk/sessionPolicy-CHiilOAB.js +453 -0
  533. package/dist/{public/sdk/signEvmFamily-pbMepepQ.js → esm/sdk/signEvmFamily-e4IWWsZs.js} +108 -99
  534. package/dist/esm/sdk/{signEvmFamilyWithUiConfirmForTempo-CxvfCI_o.js → signEvmFamilyWithUiConfirmForTempo-Cu9qdk8M.js} +11 -15
  535. package/dist/{public/sdk/signEvmWithUiConfirm-nk-r3Rff.js → esm/sdk/signEvmWithUiConfirm-C61TCBnh.js} +6 -10
  536. package/dist/{public/sdk/signNear-DVD9-IO5.js → esm/sdk/signNear-Bblwn2kT.js} +722 -803
  537. package/dist/esm/sdk/{evmAdapter-C5NR5tiV.js → signatureUses-BkGyYt8F.js} +12 -3
  538. package/dist/{public/sdk/signerDomain-DDLiwuYS.js → esm/sdk/signerDomain-IEAVrOrc.js} +3 -18
  539. package/dist/{public/sdk/signerLoader-D_w-SfR9.js → esm/sdk/signerLoader-D7Aey0FD.js} +4 -4
  540. package/dist/esm/sdk/{signatureUses-BY1IY7uz.js → signingFlow-rZfPegH9.js} +16 -29
  541. package/dist/esm/sdk/{trace-08ayoiNp.js → trace-rHe0wz7q.js} +1 -1
  542. package/dist/{public/sdk/transaction-activity-DKgIGpKG.js → esm/sdk/transaction-activity-CSMCveBn.js} +1 -1
  543. package/dist/esm/sdk/{transactionReview-UoZQ2opj.js → transactionReview-DpHLTznU.js} +4 -6
  544. package/dist/{public/sdk/transactionReviewAdmission-Cv9kTr4c.js → esm/sdk/transactionReviewAdmission-BCPvl8OZ.js} +2 -2
  545. package/dist/esm/sdk/{transactionState-Bpm4GamO.js → transactionState-DP9O8F6f.js} +12 -10
  546. package/dist/esm/sdk/tx-confirm-ui.js +182 -154
  547. package/dist/esm/sdk/types-Dx9fczU7.js +111 -0
  548. package/dist/{public/sdk/validation-BphUDXs7.js → esm/sdk/validation-gat4LEKm.js} +36 -2
  549. package/dist/esm/sdk/wallet-iframe-host-ecdsa.js +2 -2
  550. package/dist/esm/sdk/wallet-iframe-host-full.js +2 -2
  551. package/dist/esm/sdk/wallet-iframe-host-near.js +2 -2
  552. package/dist/esm/sdk/wallet-iframe-host-runtime.js +2 -2
  553. package/dist/esm/sdk/{wallet-recovery-CKqoHbxT.js → wallet-recovery-Bz9qKgaL.js} +19 -25
  554. package/dist/esm/sdk/wallet-service.css +21 -0
  555. package/dist/esm/sdk/wallet-ui.css +88 -44
  556. package/dist/{public/sdk/sessionPolicy-B4FsPuk2.js → esm/sdk/walletAuthority-BQBxgUBn.js} +506 -445
  557. package/dist/{public/sdk/ed25519SeedMaterial-Cghz8-XB.js → esm/sdk/walletCustodyEcdsaContinuity-Hn4ORIbf.js} +1898 -2033
  558. package/dist/{public/sdk/walletRecoveryCommit-G6w6N5RV.js → esm/sdk/walletRecoveryCommit-sjGNTHUj.js} +17 -22
  559. package/dist/esm/sdk/{walletRecoveryRotate-BYOYJAyb.js → walletRecoveryRotate-BgLlW5ih.js} +1 -1
  560. package/dist/esm/sdk/{warmSessionHydration-DDNYdTCz.js → warmSessionHydration-Os8niEm7.js} +1 -1
  561. package/dist/esm/sdk/{webauthnP256-CHqprSh1.js → webauthnP256-DC5EIbKN.js} +1 -1
  562. package/dist/esm/shared-ts/src/authorization/delegatedAuthority.js +1 -1
  563. package/dist/esm/shared-ts/src/authorization/operationFingerprint.js +1 -2
  564. package/dist/esm/shared-ts/src/authorization/walletAuthority.js +93 -228
  565. package/dist/esm/shared-ts/src/authorization/walletCustodyOperation.js +4 -6
  566. package/dist/esm/shared-ts/src/device-linking/activeWalletSession.js +70 -1
  567. package/dist/esm/shared-ts/src/device-linking/authorityActivation.js +142 -0
  568. package/dist/esm/shared-ts/src/device-linking/committedSignerPackages.js +3 -3
  569. package/dist/esm/shared-ts/src/device-linking/delegatedActivationPlan.js +3 -1
  570. package/dist/esm/shared-ts/src/device-linking/deviceManagement.js +120 -0
  571. package/dist/esm/shared-ts/src/device-linking/digests.js +8 -63
  572. package/dist/esm/shared-ts/src/device-linking/ed25519ExportRoot.js +3 -1
  573. package/dist/esm/shared-ts/src/device-linking/index.js +6 -4
  574. package/dist/esm/shared-ts/src/device-linking/parsers.js +550 -1311
  575. package/dist/esm/shared-ts/src/device-linking/requestProof.js +3 -3
  576. package/dist/esm/shared-ts/src/device-linking/sourceContribution.js +7 -10
  577. package/dist/esm/shared-ts/src/device-linking/walletSessionCredentialDelivery.js +7 -7
  578. package/dist/esm/shared-ts/src/device-linking/wireFields.js +59 -0
  579. package/dist/esm/shared-ts/src/near/nearClient.js +252 -0
  580. package/dist/esm/shared-ts/src/passkey-custody/custodyEnvelope.js +6 -4
  581. package/dist/esm/shared-ts/src/passkey-custody/custodySecretBinding.js +6 -4
  582. package/dist/esm/shared-ts/src/passkey-custody/primitives.js +5 -39
  583. package/dist/esm/shared-ts/src/signing-lanes/index.js +4 -3
  584. package/dist/esm/shared-ts/src/signing-lanes/ownerContinuity.js +6 -1
  585. package/dist/esm/shared-ts/src/signing-lanes/participantDigest.js +2 -0
  586. package/dist/esm/shared-ts/src/signing-lanes/participants.js +2 -5
  587. package/dist/esm/shared-ts/src/signing-lanes/recordParsers.js +7 -7
  588. package/dist/esm/shared-ts/src/signing-lanes/rotationDigests.js +2 -0
  589. package/dist/esm/shared-ts/src/signing-lanes/rotationParsers.js +3 -3
  590. package/dist/esm/shared-ts/src/signing-lanes/rotationProtocolParsers.js +8 -0
  591. package/dist/esm/shared-ts/src/signing-lanes/rotationWireFields.js +3 -0
  592. package/dist/esm/shared-ts/src/threshold/ed25519OperationFingerprint.js +34 -42
  593. package/dist/esm/shared-ts/src/threshold/keyMaterialBrands.js +25 -0
  594. package/dist/esm/shared-ts/src/threshold/secp256k1.js +1 -2
  595. package/dist/esm/shared-ts/src/utils/addAuthMethodRegistration.js +3 -4
  596. package/dist/esm/shared-ts/src/utils/canonicalPrimitives.js +8 -1
  597. package/dist/esm/shared-ts/src/utils/digestEncoding.js +63 -0
  598. package/dist/esm/shared-ts/src/utils/ecdsaKeyFactsInventory.js +1 -1
  599. package/dist/esm/shared-ts/src/utils/emailOtpDomain.js +3 -3
  600. package/dist/esm/shared-ts/src/utils/encoders.js +1 -1
  601. package/dist/esm/shared-ts/src/utils/errors.js +1 -1
  602. package/dist/esm/shared-ts/src/utils/exactRecord.js +44 -0
  603. package/dist/esm/shared-ts/src/utils/index.js +18 -14
  604. package/dist/esm/shared-ts/src/utils/registrationAuthMethodInput.js +84 -0
  605. package/dist/esm/shared-ts/src/utils/registrationEstablishedSession.js +5 -5
  606. package/dist/esm/shared-ts/src/utils/registrationIds.js +226 -0
  607. package/dist/esm/shared-ts/src/utils/registrationIntent.js +4 -1081
  608. package/dist/esm/shared-ts/src/utils/registrationSignerPlan.js +442 -0
  609. package/dist/esm/shared-ts/src/utils/routerAbEcdsaDerivation.js +11 -10
  610. package/dist/esm/shared-ts/src/utils/routerAbEd25519Yao.js +3 -76
  611. package/dist/esm/shared-ts/src/utils/routerAbEd25519YaoDigests.js +76 -0
  612. package/dist/esm/shared-ts/src/utils/routerAbNormalSigningIdentity.js +1 -4
  613. package/dist/esm/shared-ts/src/utils/routerAbPublicKeyset.js +2 -6
  614. package/dist/esm/shared-ts/src/utils/secureRandomId.js +1 -1
  615. package/dist/esm/shared-ts/src/utils/signerDomain.js +1 -16
  616. package/dist/esm/shared-ts/src/utils/validation.js +36 -2
  617. package/dist/esm/shared-ts/src/utils/walletAuthAuthority.js +1 -1
  618. package/dist/esm/shared-ts/src/utils/walletAuthMethodRecord.js +357 -0
  619. package/dist/esm/shared-ts/src/utils/walletCapabilityBindings.js +2 -2
  620. package/dist/esm/shared-ts/src/utils/wireSchema.js +66 -0
  621. package/dist/esm/shared-ts/src/wallet-recovery/recoveryCodeLocator.js +1 -1
  622. package/dist/esm/shared-ts/src/wallet-recovery/recoveryCodeReservation.js +1 -1
  623. package/dist/esm/shared-ts/src/wallet-recovery/recoveryKeyId.js +1 -1
  624. package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryCommittedProjection.js +10 -13
  625. package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryEcdsaPossession.js +4 -8
  626. package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryEnvelopeSet.js +3 -1
  627. package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker.d.ts +18 -5
  628. package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker.js +44 -9
  629. package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker_bg.wasm +0 -0
  630. package/dist/esm/wasm/router_ab_ecdsa_client/pkg/router_ab_ecdsa_client.d.ts +10 -1
  631. package/dist/esm/wasm/router_ab_ecdsa_client/pkg/router_ab_ecdsa_client.js +31 -1
  632. package/dist/esm/wasm/router_ab_ecdsa_client/pkg/router_ab_ecdsa_client_bg.wasm +0 -0
  633. package/dist/esm/wasm/router_ab_ed25519_yao_client/pkg/router_ab_ed25519_yao_client.d.ts +1 -1
  634. package/dist/esm/wasm/router_ab_ed25519_yao_client/pkg/router_ab_ed25519_yao_client.js +1 -1
  635. package/dist/esm/wasm/router_ab_ed25519_yao_client/pkg/router_ab_ed25519_yao_client_bg.wasm +0 -0
  636. package/dist/public/headers.manifest.json +1 -1
  637. package/dist/{esm/sdk/ConfirmationDrawer-G0bT0Dbu.js → public/sdk/ConfirmationDrawer-MgFTBwwK.js} +2 -1
  638. package/dist/public/sdk/{EvmClient-CHw6txjt.js → EvmClient-f3gUhS2L.js} +1 -1
  639. package/dist/public/sdk/{NearClient-BQgcqAzG.js → NearClient-DY4NfHeD.js} +194 -147
  640. package/dist/public/sdk/{NonceCoordinator-C7mqpJiU.js → NonceCoordinator-4XWPhYww.js} +4 -4
  641. package/dist/public/sdk/{accountIds-Ck4GAQfm.js → accountIds-DhIPGOSN.js} +1 -1
  642. package/dist/{esm/sdk/accountLifecycle-Ddavc_FC.js → public/sdk/accountLifecycle-BAGG_rbk.js} +253 -514
  643. package/dist/public/sdk/{actions-DsBQcjBn.js → actions-CCvThiKe.js} +1 -1
  644. package/dist/public/sdk/{adapters-m94YFj70.js → adapters-B4JeK1nJ.js} +134 -105
  645. package/dist/public/sdk/canonicalPrimitives-BTHWz80v.js +36 -0
  646. package/dist/{esm/sdk/canonicalSignerErrorCode-DAzYzisf.js → public/sdk/canonicalSignerErrorCode-CRoJMVpp.js} +2 -2
  647. package/dist/{esm/sdk/capabilityKinds-jwCEaqBU.js → public/sdk/capabilityKinds-hvYqa6S_.js} +1 -1
  648. package/dist/public/sdk/chains-BMh3btVo.js +124 -0
  649. package/dist/{esm/sdk/challengeDelivery-BjLKoou3.js → public/sdk/challengeDelivery-Dd0586fo.js} +2 -2
  650. package/dist/public/sdk/{configHelpers-DB73zYvO.js → configHelpers-vAQCzUD0.js} +3 -3
  651. package/dist/{esm/sdk/defaultConfigs-CyNOW4Sy.js → public/sdk/defaultConfigs-B3c16M_8.js} +5 -5
  652. package/dist/public/sdk/{display-DHdC2yXU.js → display-KdIL0ff7.js} +3 -8
  653. package/dist/public/sdk/{normalize-BephcEIF.js → domainIds-lcrFg6Sa.js} +84 -84
  654. package/dist/{esm/sdk/ecdsaCapabilityManifest-C8itxV9S.js → public/sdk/ecdsaCapabilityManifest-kzO_fW09.js} +12 -8
  655. package/dist/public/sdk/{ecdsaChainTarget-BOTPGIU_.js → ecdsaChainTarget-Bl-JWyuw.js} +2 -2
  656. package/dist/public/sdk/ecdsaPresignLifecycle-BFOTNYCK.js +1983 -0
  657. package/dist/public/sdk/{ecdsaPresignPoolIdentity-Yopr4jvS.js → ecdsaPresignPoolIdentity-BjxZVIqn.js} +1 -1
  658. package/dist/{esm/sdk/ecdsaWalletRecords-CAbbVhEY.js → public/sdk/ecdsaWalletRecords-Cz4m6bIz.js} +6 -4
  659. package/dist/public/sdk/encoders-D8d07vpx.js +0 -0
  660. package/dist/public/sdk/{enrichDisplayModelWithAbi-DnjR1CqT.js → enrichDisplayModelWithAbi-CWggsykc.js} +2 -2
  661. package/dist/{esm/sdk/evmCryptoWasm-BVj135bZ.js → public/sdk/evmCryptoWasm-DWklhEEb.js} +1 -1
  662. package/dist/public/sdk/evmFamilyEcdsaIdentity-Co5XDcEA.js +4288 -0
  663. package/dist/{esm/sdk/exactSessionState-Bt0HforB.js → public/sdk/exactSessionState-CiD5fBEs.js} +45 -54
  664. package/dist/public/sdk/exactSigningLaneIdentity-DQeqPMST.js +335 -0
  665. package/dist/public/sdk/{export-viewer-host-CbqG8ZQV.js → export-viewer-host-ZqA2Yz3H.js} +3 -3
  666. package/dist/public/sdk/{helpers-DpRjHMBx.js → helpers-ZrowMnev.js} +3 -6
  667. package/dist/{esm/sdk/host-BPC1zSVg.js → public/sdk/host-BWBbCAMu.js} +12 -12
  668. package/dist/{esm/sdk/intentDigest-A1MbbJPu.js → public/sdk/intentDigest-CvOSNlCH.js} +2 -2
  669. package/dist/public/sdk/{jsxRuntime.module-FAP0NE9p.js → jsxRuntime.module-CuH5ZEIA.js} +1 -1
  670. package/dist/{esm/sdk/keyMaterialBrands-BbjCfzXv.js → public/sdk/keyMaterialBrands-CX41hur6.js} +15 -13
  671. package/dist/public/sdk/{localOnly-CbLYTVbo.js → localOnly-Bg8UuLZ5.js} +8 -10
  672. package/dist/public/sdk/{messages-B3UbNZYc.js → messages-C7Dbx9iN.js} +6 -4
  673. package/dist/{esm/sdk/mountExportPrivateKeySurface-CNc6Mch4.js → public/sdk/mountExportPrivateKeySurface-DgX-IBG_.js} +4 -4
  674. package/dist/{esm/sdk/mountRecoveryCodeBackupSurface-ChwzwnYG.js → public/sdk/mountRecoveryCodeBackupSurface-DXrExiJ7.js} +2 -2
  675. package/dist/{esm/sdk/nearEd25519YaoMaterialActivation-Cz5UJQ_7.js → public/sdk/nearEd25519YaoMaterialActivation-DPb0s3hQ.js} +52 -35
  676. package/dist/{esm/sdk/nearEd25519YaoSigningPreparation-DX6xG-IW.js → public/sdk/nearEd25519YaoSigningPreparation-BeD-SmbK.js} +10 -8
  677. package/dist/public/sdk/{nonceLaneKeys-B_RcSS6M.js → nonceLaneKeys-C3c9lG6u.js} +1 -1
  678. package/dist/{esm/sdk/normalization-oJyXl3Vn.js → public/sdk/normalization-CBt413-z.js} +2 -2
  679. package/dist/public/sdk/{operationFingerprint-DEPg9A3h.js → operationFingerprint-C8Trar4R.js} +4 -4
  680. package/dist/public/sdk/{operationFingerprint-CsYO6b0a.js → operationFingerprint-CGZui5dR.js} +2 -1
  681. package/dist/{esm/sdk/passkey-custody-BaHyYMhj.js → public/sdk/passkey-custody-Bk1jAknm.js} +7 -6
  682. package/dist/{esm/sdk/pendingWalletRecoveryCodeBackup-DyvRysWg.js → public/sdk/pendingWalletRecoveryCodeBackup-DLzBb3WQ.js} +3 -3
  683. package/dist/public/sdk/{recovery-entrypoint-D39R1avB.js → recovery-entrypoint-DW2tGyMs.js} +19 -16
  684. package/dist/public/sdk/{registration-PIBMSsQR.js → registration-BZDzDv91.js} +2827 -3126
  685. package/dist/public/sdk/{registration-DtDICj-o.js → registration-BzVHODuD.js} +4 -4
  686. package/dist/{esm/sdk/registrationAccounts-AO3QHjas.js → public/sdk/registrationAccounts-CKku_Sgy.js} +6 -4
  687. package/dist/public/sdk/registrationIds-DLSdEKSv.js +310 -0
  688. package/dist/public/sdk/registrationIntent-D0PxwEY4.js +393 -0
  689. package/dist/{esm/sdk/registrationPreparationPreload-BZfAC_ba.js → public/sdk/registrationPreparationPreload-CIAuRlxI.js} +2 -2
  690. package/dist/public/sdk/registrationSignerPlan-CAikVZZQ.js +440 -0
  691. package/dist/public/sdk/{relayerHttp-LsVTZCxA.js → relayerHttp-VC8Holz1.js} +1 -1
  692. package/dist/{esm/sdk/routePlan-nLpPFHB-.js → public/sdk/routePlan-D59x5xzQ.js} +1 -1
  693. package/dist/{esm/sdk/router-CeFS9SgT.js → public/sdk/router-C5lF_J_u.js} +23 -25
  694. package/dist/{esm/sdk/routerAbNormalSigning-DktZKnf1.js → public/sdk/routerAbNormalSigning-fhvpDtmY.js} +63 -92
  695. package/dist/public/sdk/router_ab_ed25519_yao_client_bg.wasm +0 -0
  696. package/dist/{esm/sdk/runtime-auth-D_lUQQlc.js → public/sdk/runtime-auth-DFTqwj3u.js} +35 -45
  697. package/dist/public/sdk/{runtime-device-link-CEph1iM0.js → runtime-device-link-C1Oub8Lw.js} +25 -22
  698. package/dist/{esm/sdk/runtime-ecdsa-tempo-tUWnafRo.js → public/sdk/runtime-ecdsa-tempo-rkWwolw1.js} +24 -21
  699. package/dist/{esm/sdk/runtime-email-otp-1wIPTDim.js → public/sdk/runtime-email-otp-vuUG5LYl.js} +23 -20
  700. package/dist/public/sdk/{runtime-export-Du2d4_Vu.js → runtime-export-FZWj0HxJ.js} +26 -22
  701. package/dist/public/sdk/{runtime-near-CGoWxu7u.js → runtime-near-B9cjurVD.js} +24 -22
  702. package/dist/public/sdk/{runtime-preferences-JwJK_xP3.js → runtime-preferences-Dq0bfyS5.js} +24 -21
  703. package/dist/{esm/sdk/runtime-recovery-BEqBdpyo.js → public/sdk/runtime-recovery-C-vfFKF3.js} +23 -20
  704. package/dist/{esm/sdk/runtime-recovery-codes-DW7bB2tO.js → public/sdk/runtime-recovery-codes-bTm3fLV4.js} +15 -19
  705. package/dist/public/sdk/{runtimeContext-CTt9ON27.js → runtimeContext-iLXnxVlZ.js} +615 -850
  706. package/dist/{esm/sdk/runtimeLoader-ZXsvx9zX.js → public/sdk/runtimeLoader-hod6T2-m.js} +12 -12
  707. package/dist/{esm/sdk/sdkSentEvents-5Pi-hjHB.js → public/sdk/sdkSentEvents-MqDkbQg1.js} +10 -8
  708. package/dist/{esm/sdk/secp256k1-CWDid9WH.js → public/sdk/secp256k1-el9aE4Sv.js} +22 -156
  709. package/dist/public/sdk/sessionPolicy-CHiilOAB.js +453 -0
  710. package/dist/{esm/sdk/signEvmFamily-pbMepepQ.js → public/sdk/signEvmFamily-e4IWWsZs.js} +108 -99
  711. package/dist/public/sdk/{signEvmFamilyWithUiConfirmForTempo-CxvfCI_o.js → signEvmFamilyWithUiConfirmForTempo-Cu9qdk8M.js} +11 -15
  712. package/dist/{esm/sdk/signEvmWithUiConfirm-nk-r3Rff.js → public/sdk/signEvmWithUiConfirm-C61TCBnh.js} +6 -10
  713. package/dist/{esm/sdk/signNear-DVD9-IO5.js → public/sdk/signNear-Bblwn2kT.js} +722 -803
  714. package/dist/public/sdk/{evmAdapter-C5NR5tiV.js → signatureUses-BkGyYt8F.js} +12 -3
  715. package/dist/{esm/sdk/signerDomain-DDLiwuYS.js → public/sdk/signerDomain-IEAVrOrc.js} +3 -18
  716. package/dist/{esm/sdk/signerLoader-D_w-SfR9.js → public/sdk/signerLoader-D7Aey0FD.js} +4 -4
  717. package/dist/public/sdk/{signatureUses-BY1IY7uz.js → signingFlow-rZfPegH9.js} +16 -29
  718. package/dist/public/sdk/{trace-08ayoiNp.js → trace-rHe0wz7q.js} +1 -1
  719. package/dist/{esm/sdk/transaction-activity-DKgIGpKG.js → public/sdk/transaction-activity-CSMCveBn.js} +1 -1
  720. package/dist/public/sdk/{transactionReview-UoZQ2opj.js → transactionReview-DpHLTznU.js} +4 -6
  721. package/dist/{esm/sdk/transactionReviewAdmission-Cv9kTr4c.js → public/sdk/transactionReviewAdmission-BCPvl8OZ.js} +2 -2
  722. package/dist/public/sdk/{transactionState-Bpm4GamO.js → transactionState-DP9O8F6f.js} +12 -10
  723. package/dist/public/sdk/tx-confirm-ui.js +182 -154
  724. package/dist/public/sdk/types-Dx9fczU7.js +111 -0
  725. package/dist/{esm/sdk/validation-BphUDXs7.js → public/sdk/validation-gat4LEKm.js} +36 -2
  726. package/dist/public/sdk/wallet-iframe-host-ecdsa.js +2 -2
  727. package/dist/public/sdk/wallet-iframe-host-full.js +2 -2
  728. package/dist/public/sdk/wallet-iframe-host-near.js +2 -2
  729. package/dist/public/sdk/wallet-iframe-host-runtime.js +2 -2
  730. package/dist/public/sdk/{wallet-recovery-CKqoHbxT.js → wallet-recovery-Bz9qKgaL.js} +19 -25
  731. package/dist/public/sdk/wallet-service.css +21 -0
  732. package/dist/public/sdk/wallet-ui.css +88 -44
  733. package/dist/{esm/sdk/sessionPolicy-B4FsPuk2.js → public/sdk/walletAuthority-BQBxgUBn.js} +506 -445
  734. package/dist/{esm/sdk/ed25519SeedMaterial-Cghz8-XB.js → public/sdk/walletCustodyEcdsaContinuity-Hn4ORIbf.js} +1898 -2033
  735. package/dist/{esm/sdk/walletRecoveryCommit-G6w6N5RV.js → public/sdk/walletRecoveryCommit-sjGNTHUj.js} +17 -22
  736. package/dist/public/sdk/{walletRecoveryRotate-BYOYJAyb.js → walletRecoveryRotate-BgLlW5ih.js} +1 -1
  737. package/dist/public/sdk/{warmSessionHydration-DDNYdTCz.js → warmSessionHydration-Os8niEm7.js} +1 -1
  738. package/dist/public/sdk/{webauthnP256-CHqprSh1.js → webauthnP256-DC5EIbKN.js} +1 -1
  739. package/dist/public/sdk/workers/device-linking-key.worker.js +2954 -3134
  740. package/dist/public/sdk/workers/ecdsa-derivation-client.worker.js +1688 -2144
  741. package/dist/public/sdk/workers/ecdsa-online-client.worker.js +9 -117
  742. package/dist/public/sdk/workers/ecdsa-presign-client.worker.js +44 -147
  743. package/dist/public/sdk/workers/email-otp.worker.js +9265 -9596
  744. package/dist/public/sdk/workers/evm-crypto.worker.js +8 -6
  745. package/dist/public/sdk/workers/near-signer.worker.js +4 -4
  746. package/dist/public/sdk/workers/near_signer.wasm +0 -0
  747. package/dist/public/sdk/workers/passkey-confirm.worker.js +6 -3
  748. package/dist/public/sdk/workers/passkey-mpc-export.worker.js +95 -101
  749. package/dist/public/sdk/workers/passkey-mpc-session.worker.js +205 -202
  750. package/dist/public/sdk/workers/router_ab_ecdsa_client_bg.wasm +0 -0
  751. package/dist/public/sdk/workers/router_ab_ed25519_yao_client_bg.wasm +0 -0
  752. package/dist/public/sdk/workers/tempo-signer.worker.js +8 -6
  753. package/dist/public/sdk/workers/wallet-custody-ceremony.worker.js +223 -215
  754. package/dist/public/sdk/workers/wallet_custody_ceremony_bg.wasm +0 -0
  755. package/dist/public/sdk/workers/wasm_signer_worker_bg.wasm +0 -0
  756. package/dist/public/wallet-assets.manifest.json +334 -214
  757. package/dist/public/wallet-service/index.html +4 -4
  758. package/dist/types/shared-ts/src/authorization/capabilityKinds.d.ts +8 -26
  759. package/dist/types/shared-ts/src/authorization/delegatedAuthority.d.ts +0 -8
  760. package/dist/types/shared-ts/src/authorization/operationFingerprint.d.ts +1 -3
  761. package/dist/types/shared-ts/src/authorization/walletAuthority.d.ts +25 -12
  762. package/dist/types/shared-ts/src/authorization/walletSessionIssuance.d.ts +2 -1
  763. package/dist/types/shared-ts/src/device-linking/activeWalletSession.d.ts +3 -2
  764. package/dist/types/shared-ts/src/device-linking/authorityActivation.d.ts +5 -0
  765. package/dist/types/shared-ts/src/device-linking/committedSignerPackages.d.ts +2 -5
  766. package/dist/types/shared-ts/src/device-linking/contracts.d.ts +8 -11
  767. package/dist/types/shared-ts/src/device-linking/contracts.typecheck.d.ts +2 -1
  768. package/dist/types/shared-ts/src/device-linking/deviceManagement.d.ts +7 -0
  769. package/dist/types/shared-ts/src/device-linking/digests.d.ts +0 -5
  770. package/dist/types/shared-ts/src/device-linking/ed25519ExportRoot.d.ts +3 -2
  771. package/dist/types/shared-ts/src/device-linking/index.d.ts +2 -0
  772. package/dist/types/shared-ts/src/device-linking/parsers.d.ts +4 -41
  773. package/dist/types/shared-ts/src/device-linking/requestProof.d.ts +0 -1
  774. package/dist/types/shared-ts/src/device-linking/sourceContribution.d.ts +3 -2
  775. package/dist/types/shared-ts/src/device-linking/walletSessionCredentialDelivery.d.ts +2 -1
  776. package/dist/types/shared-ts/src/device-linking/wireFields.d.ts +26 -0
  777. package/dist/types/shared-ts/src/near/actions.d.ts +4 -4
  778. package/dist/types/shared-ts/src/near/delegate.d.ts +3 -2
  779. package/dist/types/shared-ts/src/near/nearClient.d.ts +145 -0
  780. package/dist/types/shared-ts/src/passkey-custody/ceremonyCommitPayload.d.ts +0 -22
  781. package/dist/types/shared-ts/src/passkey-custody/credentialActivity.d.ts +2 -4
  782. package/dist/types/shared-ts/src/passkey-custody/custodyEnvelope.d.ts +9 -18
  783. package/dist/types/shared-ts/src/passkey-custody/custodySecretBinding.d.ts +8 -24
  784. package/dist/types/shared-ts/src/passkey-custody/index.d.ts +0 -2
  785. package/dist/types/shared-ts/src/passkey-custody/primitives.d.ts +0 -14
  786. package/dist/types/shared-ts/src/signing-lanes/evmFamilySigningKeySlotId.d.ts +0 -15
  787. package/dist/types/shared-ts/src/signing-lanes/execution.d.ts +2 -51
  788. package/dist/types/shared-ts/src/signing-lanes/index.d.ts +1 -2
  789. package/dist/types/shared-ts/src/signing-lanes/ownerContinuity.d.ts +1 -2
  790. package/dist/types/shared-ts/src/signing-lanes/participantDigest.d.ts +5 -27
  791. package/dist/types/shared-ts/src/signing-lanes/participants.d.ts +0 -11
  792. package/dist/types/shared-ts/src/signing-lanes/recordParsers.d.ts +6 -53
  793. package/dist/types/shared-ts/src/signing-lanes/records.d.ts +1 -2
  794. package/dist/types/shared-ts/src/signing-lanes/rotation.d.ts +15 -37
  795. package/dist/types/shared-ts/src/signing-lanes/rotationDigests.d.ts +1 -20
  796. package/dist/types/shared-ts/src/signing-lanes/rotationLifecycle.d.ts +4 -25
  797. package/dist/types/shared-ts/src/signing-lanes/rotationParsers.d.ts +1 -41
  798. package/dist/types/shared-ts/src/signing-lanes/rotationProtocolParsers.d.ts +6 -0
  799. package/dist/types/shared-ts/src/signing-lanes/rotationWireFields.d.ts +20 -0
  800. package/dist/types/shared-ts/src/threshold/ecdsaDerivationRoleLocalBootstrap.d.ts +2 -35
  801. package/dist/types/shared-ts/src/threshold/ed25519OperationFingerprint.d.ts +8 -35
  802. package/dist/types/shared-ts/src/threshold/keyMaterialBrands.d.ts +25 -0
  803. package/dist/types/shared-ts/src/threshold/participants.d.ts +3 -9
  804. package/dist/types/shared-ts/src/threshold/secp256k1.d.ts +0 -37
  805. package/dist/types/shared-ts/src/threshold/sessionPolicy.d.ts +24 -0
  806. package/dist/types/shared-ts/src/threshold/signingRootScope.d.ts +2 -5
  807. package/dist/types/shared-ts/src/utils/addAuthMethodRegistration.d.ts +3 -4
  808. package/dist/types/shared-ts/src/utils/addWalletAuthMethod.d.ts +7 -108
  809. package/dist/types/shared-ts/src/utils/addWalletAuthMethod.typecheck.d.ts +16 -3
  810. package/dist/types/shared-ts/src/utils/canonicalPrimitives.d.ts +2 -0
  811. package/dist/types/shared-ts/src/utils/digestEncoding.d.ts +9 -0
  812. package/dist/types/shared-ts/src/utils/domainIds.d.ts +1 -2
  813. package/dist/types/shared-ts/src/utils/ecdsaKeyFactsInventory.d.ts +1 -2
  814. package/dist/types/shared-ts/src/utils/emailOtpDomain.d.ts +5 -5
  815. package/dist/types/shared-ts/src/utils/emailOtpRecoveryKey.d.ts +0 -2
  816. package/dist/types/shared-ts/src/utils/errors.d.ts +0 -7
  817. package/dist/types/shared-ts/src/utils/exactRecord.d.ts +12 -0
  818. package/dist/types/shared-ts/src/utils/index.d.ts +5 -2
  819. package/dist/types/shared-ts/src/utils/jsonRpc.d.ts +3 -2
  820. package/dist/types/shared-ts/src/utils/near.d.ts +2 -1
  821. package/dist/types/shared-ts/src/utils/nearRpcResults.d.ts +7 -7
  822. package/dist/types/shared-ts/src/utils/normalize.d.ts +0 -4
  823. package/dist/types/shared-ts/src/utils/registrationAuthMethodInput.d.ts +184 -0
  824. package/dist/types/shared-ts/src/utils/registrationContracts.d.ts +76 -0
  825. package/dist/types/shared-ts/src/utils/registrationEstablishedSession.d.ts +1 -2
  826. package/dist/types/shared-ts/src/utils/registrationIds.d.ts +56 -0
  827. package/dist/types/shared-ts/src/utils/registrationIntent.d.ts +9 -514
  828. package/dist/types/shared-ts/src/utils/registrationSignerPlan.d.ts +142 -0
  829. package/dist/types/shared-ts/src/utils/routerAbEcdsaDerivation.d.ts +21 -92
  830. package/dist/types/shared-ts/src/utils/routerAbEd25519Yao.d.ts +14 -99
  831. package/dist/types/shared-ts/src/utils/routerAbEd25519YaoDigests.d.ts +39 -0
  832. package/dist/types/shared-ts/src/utils/routerAbPublicKeyset.d.ts +10 -15
  833. package/dist/types/shared-ts/src/utils/routerAbTraceContext.d.ts +2 -1
  834. package/dist/types/shared-ts/src/utils/secureRandomId.d.ts +0 -2
  835. package/dist/types/shared-ts/src/utils/signerDomain.d.ts +3 -35
  836. package/dist/types/shared-ts/src/utils/signerSlot.d.ts +0 -4
  837. package/dist/types/shared-ts/src/utils/signingSessionSeal.d.ts +1 -7
  838. package/dist/types/shared-ts/src/utils/validation.d.ts +10 -10
  839. package/dist/types/shared-ts/src/utils/variant.d.ts +11 -0
  840. package/dist/types/shared-ts/src/utils/variant.typecheck.d.ts +22 -0
  841. package/dist/types/shared-ts/src/utils/walletAddSignerActivation.d.ts +2 -2
  842. package/dist/types/shared-ts/src/utils/walletAuthAuthority.d.ts +1 -58
  843. package/dist/types/shared-ts/src/utils/walletAuthMethodRecord.d.ts +104 -0
  844. package/dist/types/shared-ts/src/utils/walletCapabilityBindings.d.ts +3 -7
  845. package/dist/types/shared-ts/src/utils/webauthnDeviceInfo.d.ts +3 -4
  846. package/dist/types/shared-ts/src/utils/wireSchema.d.ts +60 -0
  847. package/dist/types/shared-ts/src/wallet-recovery/backupAcknowledgement.d.ts +2 -1
  848. package/dist/types/shared-ts/src/wallet-recovery/index.d.ts +0 -1
  849. package/dist/types/shared-ts/src/wallet-recovery/recoveryCodeLocator.d.ts +0 -16
  850. package/dist/types/shared-ts/src/wallet-recovery/recoveryCodeReservation.d.ts +2 -11
  851. package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryCommittedProjection.d.ts +6 -18
  852. package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryEcdsaPossession.d.ts +0 -2
  853. package/dist/types/shared-ts/src/wallet-recovery/walletRecoveryEnvelopeSet.d.ts +1 -3
  854. package/dist/types/wallet/src/SeamsWeb/SeamsWeb.d.ts +0 -12
  855. package/dist/types/wallet/src/SeamsWeb/assembly/browserSigningSurfaceAssembly.d.ts +3 -13
  856. package/dist/types/wallet/src/SeamsWeb/assembly/browserSigningSurfacePorts.d.ts +2 -1
  857. package/dist/types/wallet/src/SeamsWeb/assembly/browserWorkerWarmupPolicy.d.ts +1 -3
  858. package/dist/types/wallet/src/SeamsWeb/assembly/createBrowserSigningStores.d.ts +2 -1
  859. package/dist/types/wallet/src/SeamsWeb/assembly/initializeBrowserSigningRuntime.d.ts +2 -1
  860. package/dist/types/wallet/src/SeamsWeb/assembly/preconnectWalletAssets.d.ts +2 -3
  861. package/dist/types/wallet/src/SeamsWeb/operations/auth/login.d.ts +13 -88
  862. package/dist/types/wallet/src/SeamsWeb/operations/auth/walletAuth.d.ts +2 -2
  863. package/dist/types/wallet/src/SeamsWeb/operations/auth/walletUnlockEcdsaSubject.d.ts +2 -18
  864. package/dist/types/wallet/src/SeamsWeb/operations/auth/walletUnlockSubject.d.ts +4 -7
  865. package/dist/types/wallet/src/SeamsWeb/operations/authMethods/addAuthMethodSourceClaim.d.ts +5 -6
  866. package/dist/types/wallet/src/SeamsWeb/operations/authMethods/emailOtp/addEmailOtp.d.ts +1 -1
  867. package/dist/types/wallet/src/SeamsWeb/operations/authMethods/emailOtp/challenge.d.ts +0 -13
  868. package/dist/types/wallet/src/SeamsWeb/operations/authMethods/emailOtp/googleEmailOtpWalletAuthFlow.d.ts +0 -1
  869. package/dist/types/wallet/src/SeamsWeb/operations/authMethods/emailOtp/localEmailOtpProjection.d.ts +2 -1
  870. package/dist/types/wallet/src/SeamsWeb/operations/authMethods/emailOtp/registrationAuthority.d.ts +2 -2
  871. package/dist/types/wallet/src/SeamsWeb/operations/authMethods/emailOtp/registrationOffer.d.ts +1 -2
  872. package/dist/types/wallet/src/SeamsWeb/operations/authMethods/passkey/exactPasskeyAuthority.d.ts +20 -0
  873. package/dist/types/wallet/src/SeamsWeb/operations/authMethods/passkey/localPasskeyProjection.d.ts +4 -42
  874. package/dist/types/wallet/src/SeamsWeb/operations/authMethods/passkey/registrationAuthority.d.ts +2 -1
  875. package/dist/types/wallet/src/SeamsWeb/operations/authMethods/revokeAuthMethod.d.ts +1 -9
  876. package/dist/types/wallet/src/SeamsWeb/operations/authMethods/sourcePasskeyProof.d.ts +2 -7
  877. package/dist/types/wallet/src/SeamsWeb/operations/devices/deviceLinkingAuthorityInstallation.d.ts +0 -13
  878. package/dist/types/wallet/src/SeamsWeb/operations/devices/deviceLinkingComposition.d.ts +2 -21
  879. package/dist/types/wallet/src/SeamsWeb/operations/devices/deviceLinkingEd25519ExportRoot.d.ts +2 -2
  880. package/dist/types/wallet/src/SeamsWeb/operations/devices/deviceLinkingHttpTransport.d.ts +4 -17
  881. package/dist/types/wallet/src/SeamsWeb/operations/devices/deviceLinkingOwnerTransport.d.ts +2 -1
  882. package/dist/types/wallet/src/SeamsWeb/operations/devices/deviceLinkingPorts.d.ts +10 -16
  883. package/dist/types/wallet/src/SeamsWeb/operations/devices/deviceLinkingResume.d.ts +4 -3
  884. package/dist/types/wallet/src/SeamsWeb/operations/devices/deviceLinkingWorkerChannels.d.ts +2 -14
  885. package/dist/types/wallet/src/SeamsWeb/operations/devices/linkDevice.d.ts +3 -91
  886. package/dist/types/wallet/src/SeamsWeb/operations/devices/linkDeviceFlow.d.ts +88 -0
  887. package/dist/types/wallet/src/SeamsWeb/operations/devices/linkDeviceFlowSupport.d.ts +53 -0
  888. package/dist/types/wallet/src/SeamsWeb/operations/devices/linkDeviceTargetActivation.d.ts +149 -0
  889. package/dist/types/wallet/src/SeamsWeb/operations/devices/scanDevice.d.ts +2 -1
  890. package/dist/types/wallet/src/SeamsWeb/operations/devices/walletHostComposition.d.ts +4 -9
  891. package/dist/types/wallet/src/SeamsWeb/operations/devices/walletHostOwnerAuthority.d.ts +9 -5
  892. package/dist/types/wallet/src/SeamsWeb/operations/near/actions.d.ts +0 -46
  893. package/dist/types/wallet/src/SeamsWeb/operations/near/delegateAction.d.ts +2 -1
  894. package/dist/types/wallet/src/SeamsWeb/operations/near/signingEventHelpers.d.ts +2 -1
  895. package/dist/types/wallet/src/SeamsWeb/operations/recovery/accountSync.d.ts +2 -1
  896. package/dist/types/wallet/src/SeamsWeb/operations/recovery/recoveryWalletBinding.d.ts +1 -2
  897. package/dist/types/wallet/src/SeamsWeb/operations/recovery/syncAccount.d.ts +1 -77
  898. package/dist/types/wallet/src/SeamsWeb/operations/recovery/walletRecovery.d.ts +8 -7
  899. package/dist/types/wallet/src/SeamsWeb/operations/recovery/walletRecoveryCodeBackup.d.ts +1 -1
  900. package/dist/types/wallet/src/SeamsWeb/operations/recovery/walletRecoveryCommit.d.ts +0 -2
  901. package/dist/types/wallet/src/SeamsWeb/operations/recovery/walletRecoveryRotation.d.ts +0 -8
  902. package/dist/types/wallet/src/SeamsWeb/operations/registration/pendingEcdsaRegistrationRecovery.d.ts +1 -1
  903. package/dist/types/wallet/src/SeamsWeb/operations/registration/pendingEcdsaRegistrationRecoveryValidation.d.ts +2 -2
  904. package/dist/types/wallet/src/SeamsWeb/operations/registration/pendingRegistrationRecovery.d.ts +8 -10
  905. package/dist/types/wallet/src/SeamsWeb/operations/registration/registration.d.ts +10 -233
  906. package/dist/types/wallet/src/SeamsWeb/operations/registration/registrationEd25519Yao.d.ts +18 -5
  907. package/dist/types/wallet/src/SeamsWeb/operations/registration/registrationSignerSet.d.ts +2 -6
  908. package/dist/types/wallet/src/SeamsWeb/operations/registration/registrationStrictEcdsa.d.ts +1 -7
  909. package/dist/types/wallet/src/SeamsWeb/operations/registration/registrationTerminalCommit.d.ts +2 -2
  910. package/dist/types/wallet/src/SeamsWeb/operations/registration/registrationTiming.d.ts +49 -275
  911. package/dist/types/wallet/src/SeamsWeb/operations/session/thresholdEcdsaProvisioning.d.ts +3 -2
  912. package/dist/types/wallet/src/SeamsWeb/operations/tempo/executeEvmFamilyTransaction.d.ts +1 -1
  913. package/dist/types/wallet/src/SeamsWeb/publicApi/awaitNearReady.d.ts +0 -1
  914. package/dist/types/wallet/src/SeamsWeb/publicApi/capabilitySelection.d.ts +1 -1
  915. package/dist/types/wallet/src/SeamsWeb/publicApi/currentWallet.d.ts +2 -1
  916. package/dist/types/wallet/src/SeamsWeb/publicApi/devices.d.ts +1 -1
  917. package/dist/types/wallet/src/SeamsWeb/publicApi/keyExport.d.ts +1 -4
  918. package/dist/types/wallet/src/SeamsWeb/publicApi/near.d.ts +0 -8
  919. package/dist/types/wallet/src/SeamsWeb/publicApi/transactionReview.d.ts +2 -1
  920. package/dist/types/wallet/src/SeamsWeb/publicApi/types.d.ts +22 -20
  921. package/dist/types/wallet/src/SeamsWeb/registrationIntent.typecheck.d.ts +8 -0
  922. package/dist/types/wallet/src/SeamsWeb/signingSurface/BrowserSigningSurface.d.ts +14 -61
  923. package/dist/types/wallet/src/SeamsWeb/signingSurface/ports.d.ts +2 -4
  924. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/overlay/overlay-controller.d.ts +3 -3
  925. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/overlay/overlay-styles.d.ts +3 -3
  926. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/progress/on-events-progress-bus.d.ts +0 -13
  927. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/router.d.ts +3 -4
  928. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/surface/domain.d.ts +8 -39
  929. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/surface/geometry.d.ts +3 -7
  930. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/surface/renderer.d.ts +2 -2
  931. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/transport/IframeTransport.d.ts +3 -7
  932. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/transport/iframe-transport-dom.d.ts +2 -3
  933. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/transport/iframe-transport-handshake.d.ts +1 -11
  934. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/transport/webauthn-bridge.d.ts +0 -6
  935. package/dist/types/wallet/src/SeamsWeb/walletIframe/coordinator.d.ts +2 -1
  936. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/auth-menu/controller.d.ts +2 -3
  937. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/auth-menu/domain.d.ts +2 -8
  938. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/auth-menu/passkey.d.ts +3 -3
  939. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/auth-menu/session.d.ts +2 -4
  940. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/bootstrap.d.ts +0 -4
  941. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/canonicalSignerErrorCode.d.ts +2 -7
  942. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/context.d.ts +0 -5
  943. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/handlers/authMenu.d.ts +0 -1
  944. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/handlers/walletIframeHandler.types.d.ts +0 -13
  945. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/hostedWalletSeamsSession.d.ts +1 -2
  946. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/requestRouter.d.ts +10 -10
  947. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/runtimeLoader.d.ts +2 -1
  948. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/ui/auth-menu/AuthMenuSurface.d.ts +2 -1
  949. package/dist/types/wallet/src/SeamsWeb/walletIframe/sanitization.d.ts +0 -7
  950. package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/exactSessionReconciliation.d.ts +3 -2
  951. package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/exactSessionState.d.ts +2 -2
  952. package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/messages.d.ts +53 -58
  953. package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/transactionReview.d.ts +3 -2
  954. package/dist/types/wallet/src/core/accountData/near/accountProjection.d.ts +4 -49
  955. package/dist/types/wallet/src/core/accountData/near/keyMaterial.d.ts +1 -16
  956. package/dist/types/wallet/src/core/accountData/near/profileId.d.ts +2 -2
  957. package/dist/types/wallet/src/core/browser/walletIframe/events.d.ts +0 -1
  958. package/dist/types/wallet/src/core/config/chains.d.ts +0 -2
  959. package/dist/types/wallet/src/core/config/configBuilder.d.ts +0 -4
  960. package/dist/types/wallet/src/core/config/configHelpers.d.ts +1 -21
  961. package/dist/types/wallet/src/core/config/defaultConfigs.d.ts +1 -4
  962. package/dist/types/wallet/src/core/config/registrationConfig.typecheck.d.ts +1 -2
  963. package/dist/types/wallet/src/core/indexedDB/accountKeyMaterial.d.ts +5 -4
  964. package/dist/types/wallet/src/core/indexedDB/accountSignerLifecycle.d.ts +1 -1
  965. package/dist/types/wallet/src/core/indexedDB/index.d.ts +1 -5
  966. package/dist/types/wallet/src/core/indexedDB/keyMaterialEnvelope.d.ts +1 -2
  967. package/dist/types/wallet/src/core/indexedDB/linkedAuthoritySignerMaterial.d.ts +3 -3
  968. package/dist/types/wallet/src/core/indexedDB/normalization.d.ts +0 -3
  969. package/dist/types/wallet/src/core/indexedDB/passkeyClientDB.types.d.ts +5 -18
  970. package/dist/types/wallet/src/core/indexedDB/pendingWalletRegistrationCommit.d.ts +2 -4
  971. package/dist/types/wallet/src/core/indexedDB/profileAccountProjection.d.ts +3 -14
  972. package/dist/types/wallet/src/core/indexedDB/schemaNames.d.ts +2 -1
  973. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestLookups.d.ts +177 -0
  974. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestRecords.d.ts +155 -0
  975. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestStore.d.ts +15 -256
  976. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/ecdsaClientPresignatures.d.ts +101 -0
  977. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/laneHolderMaterialStore.d.ts +0 -1
  978. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/manager.d.ts +2 -1
  979. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/pendingWalletRecoveryCodeBackup.d.ts +3 -2
  980. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/repositories.d.ts +49 -44
  981. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/signingSessionSeals.d.ts +2 -1
  982. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/walletCustodyEcdsaContinuity.d.ts +47 -0
  983. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/walletSessionAuthorizationStore.d.ts +2 -2
  984. package/dist/types/wallet/src/core/indexedDB/unifiedIndexedDBManager.d.ts +7 -4
  985. package/dist/types/wallet/src/core/platform/ecdsaRoleLocalRecords.d.ts +1 -40
  986. package/dist/types/wallet/src/core/platform/secretSources.d.ts +1 -1
  987. package/dist/types/wallet/src/core/platform/signerCoreCommandAdapters.typecheck.d.ts +25 -0
  988. package/dist/types/wallet/src/core/rpcClients/evm/EvmClient.d.ts +1 -2
  989. package/dist/types/wallet/src/core/rpcClients/evm/nonceBackend.d.ts +6 -22
  990. package/dist/types/wallet/src/core/rpcClients/near/NearClient.d.ts +13 -133
  991. package/dist/types/wallet/src/core/rpcClients/near/rpcCalls.d.ts +5 -31
  992. package/dist/types/wallet/src/core/rpcClients/relayer/ownerWalletExecutionLanePreflight.d.ts +0 -1
  993. package/dist/types/wallet/src/core/rpcClients/relayer/passkeyCustodyEnvelope.d.ts +4 -3
  994. package/dist/types/wallet/src/core/rpcClients/relayer/registrationSignerSetRequest.d.ts +3 -2
  995. package/dist/types/wallet/src/core/rpcClients/relayer/relayerHttp.d.ts +2 -2
  996. package/dist/types/wallet/src/core/rpcClients/relayer/routerAbNormalSigning.d.ts +10 -39
  997. package/dist/types/wallet/src/core/rpcClients/relayer/sealedRefreshCapabilities.d.ts +0 -14
  998. package/dist/types/wallet/src/core/rpcClients/relayer/thresholdEcdsa.d.ts +4 -66
  999. package/dist/types/wallet/src/core/rpcClients/relayer/walletRecoveryFinalize.d.ts +2 -5
  1000. package/dist/types/wallet/src/core/rpcClients/relayer/walletRecoveryGoogleEmailOtp.d.ts +4 -7
  1001. package/dist/types/wallet/src/core/rpcClients/relayer/walletRecoveryPrepare.d.ts +4 -4
  1002. package/dist/types/wallet/src/core/rpcClients/relayer/walletRecoveryRotate.d.ts +3 -19
  1003. package/dist/types/wallet/src/core/rpcClients/relayer/walletRegistration.d.ts +32 -106
  1004. package/dist/types/wallet/src/core/rpcClients/relayer/walletRegistrationTerminalResponse.d.ts +2 -2
  1005. package/dist/types/wallet/src/core/rpcClients/relayer/walletSessionAuthorizationStatus.d.ts +2 -10
  1006. package/dist/types/wallet/src/core/runtime/runtime.types.d.ts +7 -6
  1007. package/dist/types/wallet/src/core/signingEngine/assembly/createManagers.d.ts +2 -1
  1008. package/dist/types/wallet/src/core/signingEngine/assembly/ports/warmSigning.d.ts +1 -1
  1009. package/dist/types/wallet/src/core/signingEngine/assembly/warmup.d.ts +2 -1
  1010. package/dist/types/wallet/src/core/signingEngine/chains/evm/bytes.d.ts +0 -2
  1011. package/dist/types/wallet/src/core/signingEngine/chains/evm/display/evmTx.d.ts +2 -1
  1012. package/dist/types/wallet/src/core/signingEngine/chains/evm/display/functionSelectors.d.ts +0 -1
  1013. package/dist/types/wallet/src/core/signingEngine/chains/evm/evmAdapter.d.ts +2 -1
  1014. package/dist/types/wallet/src/core/signingEngine/chains/evm/evmCryptoWasm.d.ts +0 -9
  1015. package/dist/types/wallet/src/core/signingEngine/chains/evm/evmSigning.types.d.ts +2 -2
  1016. package/dist/types/wallet/src/core/signingEngine/chains/near/display.d.ts +4 -2
  1017. package/dist/types/wallet/src/core/signingEngine/chains/near/payloads.d.ts +4 -3
  1018. package/dist/types/wallet/src/core/signingEngine/chains/tempo/display.d.ts +2 -1
  1019. package/dist/types/wallet/src/core/signingEngine/chains/tempo/tempoAdapter.d.ts +2 -1
  1020. package/dist/types/wallet/src/core/signingEngine/chains/tempo/tempoSigning.types.d.ts +4 -7
  1021. package/dist/types/wallet/src/core/signingEngine/flows/recovery/ecdsaDerivationExport.d.ts +4 -101
  1022. package/dist/types/wallet/src/core/signingEngine/flows/recovery/ecdsaExportMaterial.d.ts +1 -17
  1023. package/dist/types/wallet/src/core/signingEngine/flows/recovery/ed25519YaoExportFlow.d.ts +1 -1
  1024. package/dist/types/wallet/src/core/signingEngine/flows/recovery/exportKeypairOperation.d.ts +1 -1
  1025. package/dist/types/wallet/src/core/signingEngine/flows/recovery/keyExportConfirmation.d.ts +2 -5
  1026. package/dist/types/wallet/src/core/signingEngine/flows/recovery/keyExportFlow.d.ts +2 -2
  1027. package/dist/types/wallet/src/core/signingEngine/flows/recovery/passkeyEd25519YaoRecovery.d.ts +3 -6
  1028. package/dist/types/wallet/src/core/signingEngine/flows/recovery/stepUpAuthorization.d.ts +3 -3
  1029. package/dist/types/wallet/src/core/signingEngine/flows/registration/accountLifecycle.d.ts +9 -20
  1030. package/dist/types/wallet/src/core/signingEngine/flows/registration/nearProvisioningRegistry.d.ts +2 -20
  1031. package/dist/types/wallet/src/core/signingEngine/flows/registration/services/ecdsaRegistrationSessions.d.ts +2 -1
  1032. package/dist/types/wallet/src/core/signingEngine/flows/registration/services/passkeyEd25519YaoAddSigner.d.ts +5 -10
  1033. package/dist/types/wallet/src/core/signingEngine/flows/shared/signingConfirmation.d.ts +0 -15
  1034. package/dist/types/wallet/src/core/signingEngine/flows/shared/signingStateMachine.d.ts +7 -50
  1035. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/authPlanning.d.ts +1 -1
  1036. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/ecdsaSelection.d.ts +2 -6
  1037. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/emailOtpSigningSession.d.ts +1 -1
  1038. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/errors.d.ts +3 -15
  1039. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/executorThresholdState.d.ts +0 -4
  1040. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/freshAuthRetryPolicy.d.ts +3 -3
  1041. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/freshWalletSessionRetry.d.ts +2 -1
  1042. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/nonceResolution.d.ts +0 -1
  1043. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/preparedSigning.d.ts +5 -14
  1044. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/readySecp256k1Material.d.ts +0 -5
  1045. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/requireEvmFamilyStepUpAuth.d.ts +7 -7
  1046. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/signatureUses.d.ts +0 -2
  1047. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/signerLoader.d.ts +5 -4
  1048. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/signers/secp256k1.d.ts +2 -3
  1049. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/signingFlow.d.ts +12 -12
  1050. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/signingFlowRuntime.d.ts +1 -41
  1051. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/stepUpAuthorization.d.ts +4 -22
  1052. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/thresholdAdmission.d.ts +2 -1
  1053. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/types.d.ts +2 -1
  1054. package/dist/types/wallet/src/core/signingEngine/flows/signNear/implicitAccountFunding.d.ts +1 -1
  1055. package/dist/types/wallet/src/core/signingEngine/flows/signNear/requireNearStepUpAuth.d.ts +3 -3
  1056. package/dist/types/wallet/src/core/signingEngine/flows/signNear/shared/ed25519YaoCapabilityResolution.d.ts +1 -1
  1057. package/dist/types/wallet/src/core/signingEngine/flows/signNear/shared/ed25519YaoNormalSigning.d.ts +2 -2
  1058. package/dist/types/wallet/src/core/signingEngine/flows/signNear/shared/operationStepUpPreparation.d.ts +1 -1
  1059. package/dist/types/wallet/src/core/signingEngine/flows/signNear/shared/signatureOnlySigning.d.ts +126 -0
  1060. package/dist/types/wallet/src/core/signingEngine/flows/signNear/shared/signingMaterials.d.ts +2 -1
  1061. package/dist/types/wallet/src/core/signingEngine/flows/signNear/shared/signingSessionAuthMode.d.ts +3 -3
  1062. package/dist/types/wallet/src/core/signingEngine/flows/signNear/signNear.d.ts +6 -5
  1063. package/dist/types/wallet/src/core/signingEngine/flows/signNear/stepUpAuthorization.d.ts +1 -6
  1064. package/dist/types/wallet/src/core/signingEngine/interfaces/accountAuthMetadata.d.ts +0 -1
  1065. package/dist/types/wallet/src/core/signingEngine/interfaces/display.d.ts +7 -6
  1066. package/dist/types/wallet/src/core/signingEngine/interfaces/ecdsaChainTarget.d.ts +1 -1
  1067. package/dist/types/wallet/src/core/signingEngine/interfaces/near.d.ts +5 -44
  1068. package/dist/types/wallet/src/core/signingEngine/interfaces/operationDeps.d.ts +2 -14
  1069. package/dist/types/wallet/src/core/signingEngine/interfaces/operationStepUpPreparation.d.ts +1 -1
  1070. package/dist/types/wallet/src/core/signingEngine/interfaces/signing.d.ts +8 -17
  1071. package/dist/types/wallet/src/core/signingEngine/nonce/evmNonceLane.d.ts +2 -2
  1072. package/dist/types/wallet/src/core/signingEngine/nonce/nearNonceLane.d.ts +3 -28
  1073. package/dist/types/wallet/src/core/signingEngine/nonce/nearNonceLaneIdentity.d.ts +0 -1
  1074. package/dist/types/wallet/src/core/signingEngine/nonce/nearTransactionReadiness.d.ts +2 -1
  1075. package/dist/types/wallet/src/core/signingEngine/nonce/nonceCoordinationRecordBoundary.d.ts +0 -1
  1076. package/dist/types/wallet/src/core/signingEngine/nonce/nonceDiagnostics.d.ts +3 -4
  1077. package/dist/types/wallet/src/core/signingEngine/nonce/nonceLaneKeys.d.ts +1 -3
  1078. package/dist/types/wallet/src/core/signingEngine/nonce/nonceLeaseState.d.ts +2 -1
  1079. package/dist/types/wallet/src/core/signingEngine/nonce/nonceTypes.d.ts +13 -13
  1080. package/dist/types/wallet/src/core/signingEngine/routerAb/ecdsaDerivation/clientCeremony.d.ts +1 -1
  1081. package/dist/types/wallet/src/core/signingEngine/routerAb/ecdsaDerivation/httpRequest.d.ts +0 -1
  1082. package/dist/types/wallet/src/core/signingEngine/routerAb/ecdsaDerivation/poolFillRoutes.d.ts +5 -4
  1083. package/dist/types/wallet/src/core/signingEngine/routerAb/ecdsaDerivation/presignaturePool.d.ts +1 -7
  1084. package/dist/types/wallet/src/core/signingEngine/routerAb/ecdsaDerivation/presignatureRefillProgress.d.ts +2 -1
  1085. package/dist/types/wallet/src/core/signingEngine/routerAb/ecdsaDerivation/registrationPendingFinalization.d.ts +1 -1
  1086. package/dist/types/wallet/src/core/signingEngine/session/SigningSessionCoordinator.d.ts +5 -8
  1087. package/dist/types/wallet/src/core/signingEngine/session/authority/authorityOperationResolver.d.ts +1 -1
  1088. package/dist/types/wallet/src/core/signingEngine/session/availability/availableSigningLanes.d.ts +14 -37
  1089. package/dist/types/wallet/src/core/signingEngine/session/availability/clientSessionExpiryInvalidator.d.ts +3 -2
  1090. package/dist/types/wallet/src/core/signingEngine/session/availability/persistedAvailableSigningLanes.d.ts +3 -2
  1091. package/dist/types/wallet/src/core/signingEngine/session/availability/readiness.d.ts +6 -31
  1092. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/challengeDelivery.d.ts +0 -5
  1093. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/coordinatorRuntime.d.ts +0 -1
  1094. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/ecdsaBootstrapCommit.d.ts +1 -21
  1095. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/ecdsaLogin.d.ts +6 -61
  1096. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/ecdsaPublication.d.ts +4 -21
  1097. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/ecdsaRecovery.d.ts +3 -19
  1098. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/ecdsaSigningSessionAuthority.d.ts +3 -2
  1099. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/ed25519ExportContext.d.ts +4 -6
  1100. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/exportRecoveryRuntime.d.ts +0 -1
  1101. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/ports.d.ts +2 -3
  1102. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/publicTypes.d.ts +4 -6
  1103. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/routePlan.d.ts +4 -15
  1104. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/runtimeConfig.d.ts +2 -1
  1105. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/sealedRefreshPolicy.d.ts +4 -17
  1106. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/sealedRestoreOrchestrator.d.ts +2 -1
  1107. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/sealedSessionRegistry.d.ts +2 -1
  1108. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/secretEscrow.d.ts +4 -11
  1109. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/walletUnlock.d.ts +1 -1
  1110. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/warmSessionRuntime.d.ts +2 -1
  1111. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/workerRequests.d.ts +1 -1
  1112. package/dist/types/wallet/src/core/signingEngine/session/holderShares/holderShareHandle.d.ts +0 -13
  1113. package/dist/types/wallet/src/core/signingEngine/session/identity/clientSessionPersistenceState.d.ts +6 -7
  1114. package/dist/types/wallet/src/core/signingEngine/session/identity/emailOtpEcdsaDerivationIdentity.d.ts +0 -3
  1115. package/dist/types/wallet/src/core/signingEngine/session/identity/evmFamilyEcdsaIdentity.d.ts +17 -31
  1116. package/dist/types/wallet/src/core/signingEngine/session/identity/exactSigningLaneIdentity.d.ts +10 -27
  1117. package/dist/types/wallet/src/core/signingEngine/session/identity/exactWalletSessionCredential.d.ts +9 -8
  1118. package/dist/types/wallet/src/core/signingEngine/session/identity/laneIdentity.d.ts +8 -12
  1119. package/dist/types/wallet/src/core/signingEngine/session/identity/ownerLaneScope.d.ts +9 -17
  1120. package/dist/types/wallet/src/core/signingEngine/session/identity/selectLane.d.ts +12 -28
  1121. package/dist/types/wallet/src/core/signingEngine/session/identity/signingLaneAuthBinding.d.ts +4 -3
  1122. package/dist/types/wallet/src/core/signingEngine/session/identity/walletUnlockSubject.d.ts +1 -1
  1123. package/dist/types/wallet/src/core/signingEngine/session/keyMaterialBrands.d.ts +3 -27
  1124. package/dist/types/wallet/src/core/signingEngine/session/lanes/operations/activationCoordinator.d.ts +0 -1
  1125. package/dist/types/wallet/src/core/signingEngine/session/lanes/operations/laneMaterialInvalidation.d.ts +2 -37
  1126. package/dist/types/wallet/src/core/signingEngine/session/lanes/operations/recipientPreparation.d.ts +4 -16
  1127. package/dist/types/wallet/src/core/signingEngine/session/lanes/walletExecutionLaneHydration.d.ts +5 -42
  1128. package/dist/types/wallet/src/core/signingEngine/session/lifecycle/canonicalWalletSessionStatus.d.ts +2 -1
  1129. package/dist/types/wallet/src/core/signingEngine/session/lifecycle/walletSessionStatus.d.ts +2 -6
  1130. package/dist/types/wallet/src/core/signingEngine/session/material/activeEcdsaCapabilityRuntime.d.ts +4 -3
  1131. package/dist/types/wallet/src/core/signingEngine/session/material/activeWalletAuthorityEcdsaRuntime.d.ts +5 -5
  1132. package/dist/types/wallet/src/core/signingEngine/session/material/ecdsaCapabilityHydration.d.ts +1 -1
  1133. package/dist/types/wallet/src/core/signingEngine/session/material/ecdsaCapabilityManifest.d.ts +5 -5
  1134. package/dist/types/wallet/src/core/signingEngine/session/material/ecdsaRoleLocalMaterialResolver.d.ts +2 -2
  1135. package/dist/types/wallet/src/core/signingEngine/session/material/ecdsaSealedRuntime.d.ts +3 -31
  1136. package/dist/types/wallet/src/core/signingEngine/session/material/ecdsaSigningCapability.d.ts +5 -9
  1137. package/dist/types/wallet/src/core/signingEngine/session/material/mpcCapabilityHydration.d.ts +4 -5
  1138. package/dist/types/wallet/src/core/signingEngine/session/material/nearEd25519YaoSigningPreparation.d.ts +5 -4
  1139. package/dist/types/wallet/src/core/signingEngine/session/material/walletSigningStateFailure.d.ts +9 -8
  1140. package/dist/types/wallet/src/core/signingEngine/session/operationState/authorizationAdmission.d.ts +5 -9
  1141. package/dist/types/wallet/src/core/signingEngine/session/operationState/lanes.d.ts +13 -16
  1142. package/dist/types/wallet/src/core/signingEngine/session/operationState/preparedOperation.d.ts +2 -1
  1143. package/dist/types/wallet/src/core/signingEngine/session/operationState/trace.d.ts +5 -10
  1144. package/dist/types/wallet/src/core/signingEngine/session/operationState/transactionState.d.ts +5 -26
  1145. package/dist/types/wallet/src/core/signingEngine/session/operationState/types.d.ts +16 -32
  1146. package/dist/types/wallet/src/core/signingEngine/session/passkey/ecdsaBootstrap.d.ts +4 -4
  1147. package/dist/types/wallet/src/core/signingEngine/session/passkey/ecdsaSessionProvision.d.ts +3 -19
  1148. package/dist/types/wallet/src/core/signingEngine/session/passkey/ecdsaWarmCapabilityBootstrap.d.ts +4 -15
  1149. package/dist/types/wallet/src/core/signingEngine/session/passkey/ed25519Provisioner.d.ts +2 -1
  1150. package/dist/types/wallet/src/core/signingEngine/session/passkey/ed25519SessionProvision.d.ts +1 -1
  1151. package/dist/types/wallet/src/core/signingEngine/session/passkey/ed25519SessionProvision.typecheck.d.ts +7 -1
  1152. package/dist/types/wallet/src/core/signingEngine/session/passkey/ed25519YaoLocalMaterial.d.ts +10 -94
  1153. package/dist/types/wallet/src/core/signingEngine/session/passkey/ed25519YaoSealedSession.d.ts +3 -2
  1154. package/dist/types/wallet/src/core/signingEngine/session/passkey/ed25519YaoWarmRecovery.d.ts +3 -13
  1155. package/dist/types/wallet/src/core/signingEngine/session/passkey/passkeyCustodySessionCache.d.ts +0 -40
  1156. package/dist/types/wallet/src/core/signingEngine/session/passkey/prfCache.d.ts +2 -1
  1157. package/dist/types/wallet/src/core/signingEngine/session/passkey/unlockEcdsaWarmupPlanner.d.ts +5 -5
  1158. package/dist/types/wallet/src/core/signingEngine/session/passkey/warmSessionMaterialWriter.d.ts +1 -1
  1159. package/dist/types/wallet/src/core/signingEngine/session/persistence/durableSealedSessionCommands.d.ts +5 -7
  1160. package/dist/types/wallet/src/core/signingEngine/session/persistence/ecdsaRoleLocalRecords.d.ts +0 -1
  1161. package/dist/types/wallet/src/core/signingEngine/session/persistence/ecdsaSealedRecordKey.d.ts +2 -1
  1162. package/dist/types/wallet/src/core/signingEngine/session/persistence/sealedSessionRecords.d.ts +212 -0
  1163. package/dist/types/wallet/src/core/signingEngine/session/persistence/sealedSessionStore.d.ts +4 -199
  1164. package/dist/types/wallet/src/core/signingEngine/session/postconditions/runtimePostconditions.d.ts +6 -35
  1165. package/dist/types/wallet/src/core/signingEngine/session/public.d.ts +1 -1
  1166. package/dist/types/wallet/src/core/signingEngine/session/routerAbSigningWalletSession.d.ts +4 -3
  1167. package/dist/types/wallet/src/core/signingEngine/session/sealedRecovery/recoveryRecord.d.ts +2 -2
  1168. package/dist/types/wallet/src/core/signingEngine/session/userPreferences.d.ts +2 -1
  1169. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/capabilityReader.d.ts +3 -6
  1170. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/capabilityReaderCore.d.ts +5 -4
  1171. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/clearVolatileWarmSigningMaterial.d.ts +2 -1
  1172. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/ecdsaLoginPrefill.d.ts +2 -1
  1173. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/ecdsaProvisionPlan.d.ts +6 -40
  1174. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/ecdsaProvisionPlan.typecheck.d.ts +4 -0
  1175. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/ed25519SealedSessionRuntime.d.ts +3 -36
  1176. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/persistencePorts.d.ts +2 -70
  1177. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/readModel.d.ts +4 -12
  1178. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/routerAbEd25519WalletSessionState.d.ts +4 -3
  1179. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/routerAbWalletSessionCredential.d.ts +2 -1
  1180. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/transitions.d.ts +3 -2
  1181. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/types.d.ts +5 -36
  1182. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/types.typecheck.d.ts +10 -1
  1183. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/volatileWarmMaterialCommands.d.ts +1 -2
  1184. package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/channel/confirmCommon.d.ts +3 -2
  1185. package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/channel/confirmTypes.d.ts +6 -17
  1186. package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/confirmOperation.d.ts +4 -5
  1187. package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/methodRunners.d.ts +4 -3
  1188. package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/methodSelection.d.ts +5 -10
  1189. package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/otpPrompt/exportAuthorization.d.ts +7 -6
  1190. package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/otpPrompt/signingPrompt.d.ts +2 -2
  1191. package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/passkeyPrompt/touchIdPrompt.d.ts +2 -3
  1192. package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/passkeyPrompt/webauthnPromptCoordinator.d.ts +3 -7
  1193. package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/requireStepUpAuth.d.ts +2 -2
  1194. package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/types.d.ts +8 -8
  1195. package/dist/types/wallet/src/core/signingEngine/threshold/commitQueueShared.d.ts +2 -2
  1196. package/dist/types/wallet/src/core/signingEngine/threshold/crypto/ecdsaDerivationClientWasm.d.ts +4 -16
  1197. package/dist/types/wallet/src/core/signingEngine/threshold/crypto/ecdsaLaneWasm.d.ts +0 -9
  1198. package/dist/types/wallet/src/core/signingEngine/threshold/crypto/ed25519YaoLaneWasm.d.ts +5 -31
  1199. package/dist/types/wallet/src/core/signingEngine/threshold/crypto/webauthn.d.ts +1 -46
  1200. package/dist/types/wallet/src/core/signingEngine/threshold/ecdsa/activation.d.ts +2 -9
  1201. package/dist/types/wallet/src/core/signingEngine/threshold/ecdsa/operationStepUp.d.ts +2 -1
  1202. package/dist/types/wallet/src/core/signingEngine/threshold/ecdsa/postRegistrationSessionActivation.d.ts +5 -4
  1203. package/dist/types/wallet/src/core/signingEngine/threshold/ecdsa/signingQueue.d.ts +3 -6
  1204. package/dist/types/wallet/src/core/signingEngine/threshold/ed25519/commitQueue.d.ts +3 -6
  1205. package/dist/types/wallet/src/core/signingEngine/threshold/ed25519/connectSession.d.ts +1 -1
  1206. package/dist/types/wallet/src/core/signingEngine/threshold/ed25519/walletSession.d.ts +6 -6
  1207. package/dist/types/wallet/src/core/signingEngine/threshold/ed25519/yaoActiveClientRegistry.d.ts +2 -1
  1208. package/dist/types/wallet/src/core/signingEngine/threshold/ed25519/yaoClient.d.ts +17 -49
  1209. package/dist/types/wallet/src/core/signingEngine/threshold/ed25519/yaoPageLifecycleOwner.d.ts +2 -1
  1210. package/dist/types/wallet/src/core/signingEngine/threshold/ed25519/yaoPublicCapabilityReferences.d.ts +2 -15
  1211. package/dist/types/wallet/src/core/signingEngine/threshold/sessionPolicy.d.ts +2 -53
  1212. package/dist/types/wallet/src/core/signingEngine/uiConfirm/handlers/flows/adapters/adapters.d.ts +1 -1
  1213. package/dist/types/wallet/src/core/signingEngine/uiConfirm/handlers/flows/adapters/request.d.ts +1 -5
  1214. package/dist/types/wallet/src/core/signingEngine/uiConfirm/handlers/flows/signing.d.ts +1 -7
  1215. package/dist/types/wallet/src/core/signingEngine/uiConfirm/nearFundingNotice.d.ts +2 -5
  1216. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/confirm-surface-resize.d.ts +3 -32
  1217. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/confirm-ui-types.d.ts +2 -0
  1218. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/confirmation-model.d.ts +3 -2
  1219. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/export-private-key-reveal.d.ts +0 -1
  1220. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/ConfirmationModal.d.ts +2 -1
  1221. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/EmailOtpInput.d.ts +2 -1
  1222. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/PadlockIcon.d.ts +2 -1
  1223. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/TransactionLabel.d.ts +1 -0
  1224. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/TransactionReceipt.d.ts +11 -2
  1225. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/TransactionReview.d.ts +4 -21
  1226. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/TransactionTree.d.ts +1 -1
  1227. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/confirmation-controller.d.ts +2 -1
  1228. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/email-otp-session.d.ts +2 -1
  1229. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/mountRecoveryCodeBackupSurface.d.ts +2 -2
  1230. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/seamsWordmarkPaths.d.ts +0 -2
  1231. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/surface-resize-events.d.ts +2 -2
  1232. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/transaction-display/renderers/fallback.d.ts +0 -2
  1233. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/transaction-display/renderers/types.d.ts +2 -1
  1234. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/transaction-display/tree.d.ts +3 -3
  1235. package/dist/types/wallet/src/core/signingEngine/uiConfirm/uiConfirm.types.d.ts +9 -9
  1236. package/dist/types/wallet/src/core/signingEngine/walletCustody/activateEd25519Capability.d.ts +2 -1
  1237. package/dist/types/wallet/src/core/signingEngine/walletCustody/ceremonyActiveClientMetadata.d.ts +3 -4
  1238. package/dist/types/wallet/src/core/signingEngine/walletCustody/ceremonyDriver.d.ts +1 -1
  1239. package/dist/types/wallet/src/core/signingEngine/walletCustody/ceremonyStepRunner.d.ts +4 -3
  1240. package/dist/types/wallet/src/core/signingEngine/walletCustody/ed25519SeedMaterial.d.ts +1 -1
  1241. package/dist/types/wallet/src/core/signingEngine/walletCustody/emailOtpLink.d.ts +2 -1
  1242. package/dist/types/wallet/src/core/signingEngine/walletCustody/joinCustodyWire.d.ts +2 -1
  1243. package/dist/types/wallet/src/core/signingEngine/walletCustody/openCustodyCache.d.ts +6 -5
  1244. package/dist/types/wallet/src/core/signingEngine/walletCustody/passkeyLink.d.ts +1 -52
  1245. package/dist/types/wallet/src/core/signingEngine/walletCustody/recoveryReplacementEnvelope.d.ts +0 -5
  1246. package/dist/types/wallet/src/core/signingEngine/walletCustody/registrationCeremony.d.ts +16 -26
  1247. package/dist/types/wallet/src/core/signingEngine/walletCustody/unlockedEd25519ExportRootCapability.d.ts +22 -12
  1248. package/dist/types/wallet/src/core/signingEngine/walletCustody/walletRecoveryEd25519.d.ts +1 -1
  1249. package/dist/types/wallet/src/core/signingEngine/walletCustody/walletRecoveryRotation.d.ts +3 -2
  1250. package/dist/types/wallet/src/core/signingEngine/webauthnAuth/credentials/collectAuthenticationCredentialForChallengeB64u.d.ts +1 -2
  1251. package/dist/types/wallet/src/core/signingEngine/webauthnAuth/credentials/credentialExtensions.d.ts +2 -5
  1252. package/dist/types/wallet/src/core/signingEngine/webauthnAuth/credentials/helpers.d.ts +0 -9
  1253. package/dist/types/wallet/src/core/signingEngine/webauthnAuth/fallbacks/safari-fallbacks.d.ts +4 -9
  1254. package/dist/types/wallet/src/core/signingEngine/workerManager/deviceLinkingPorts.d.ts +3 -12
  1255. package/dist/types/wallet/src/core/signingEngine/workerManager/deviceLinkingSourceContribution.d.ts +17 -9
  1256. package/dist/types/wallet/src/core/signingEngine/workerManager/ecdsaClientWorkerChannels.d.ts +7 -7
  1257. package/dist/types/wallet/src/core/signingEngine/workerManager/workerTransport.d.ts +5 -5
  1258. package/dist/types/wallet/src/core/signingEngine/workerManager/workerTypes.d.ts +75 -81
  1259. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/device-linking-key/ecdsaTargetShareHpke.d.ts +7 -0
  1260. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/device-linking-key/ordinaryMaterialState.d.ts +50 -0
  1261. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/device-linking-key/requests.d.ts +89 -0
  1262. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/device-linking-key.worker.d.ts +1 -10
  1263. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/ecdsaLaneHolderWorkerRuntime.d.ts +2 -2
  1264. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/crypto.d.ts +66 -0
  1265. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/custodyRestore.d.ts +91 -0
  1266. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/dispatch.d.ts +4 -0
  1267. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/ed25519YaoExport.d.ts +45 -0
  1268. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/enrollment.d.ts +47 -0
  1269. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/fetch.d.ts +2 -1
  1270. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/materialParsing.d.ts +45 -0
  1271. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/operationRequestParsing.d.ts +7 -0
  1272. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/otpVerification.d.ts +53 -0
  1273. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/passkeyCustodyLink.d.ts +18 -0
  1274. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/payloadParsing.d.ts +48 -0
  1275. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/recovery.d.ts +9 -0
  1276. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/requestEnvelope.d.ts +11 -0
  1277. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/sessionState.d.ts +74 -0
  1278. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/unlock.d.ts +133 -0
  1279. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/opaqueEcdsaPresignAuthority.d.ts +6 -6
  1280. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/shamir3pass/clientSealPreparation.d.ts +2 -2
  1281. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/shamir3pass/runtime.d.ts +2 -1
  1282. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/workerErrorPayload.d.ts +16 -0
  1283. package/dist/types/wallet/src/core/types/accountIds.d.ts +2 -1
  1284. package/dist/types/wallet/src/core/types/authenticatorOptions.d.ts +0 -2
  1285. package/dist/types/wallet/src/core/types/confirmationConfig.d.ts +4 -4
  1286. package/dist/types/wallet/src/core/types/ecdsaSignerProvisioningDefaults.d.ts +2 -1
  1287. package/dist/types/wallet/src/core/types/errors.d.ts +2 -1
  1288. package/dist/types/wallet/src/core/types/linkDevice.d.ts +2 -3
  1289. package/dist/types/wallet/src/core/types/rpc.d.ts +0 -30
  1290. package/dist/types/wallet/src/core/types/sdkSentEvents.d.ts +11 -11
  1291. package/dist/types/wallet/src/core/types/seams.d.ts +35 -55
  1292. package/dist/types/wallet/src/core/types/secure-confirm-worker.d.ts +3 -5
  1293. package/dist/types/wallet/src/core/types/signer-worker.d.ts +13 -70
  1294. package/dist/types/wallet/src/core/types/webauthn.d.ts +3 -12
  1295. package/dist/types/wallet/src/core/walletRuntimePaths/base.d.ts +0 -28
  1296. package/dist/types/wallet/src/core/walletRuntimePaths/wasm-loader.d.ts +2 -1
  1297. package/dist/types/wallet/src/core/walletRuntimePaths/workers.d.ts +0 -11
  1298. package/dist/types/wallet/src/externalEvm/boundary.d.ts +2 -2
  1299. package/dist/types/wallet/src/index.d.ts +3 -1
  1300. package/dist/types/wallet/src/plugins/plugin-utils.d.ts +1 -3
  1301. package/dist/types/wallet/src/react/components/AccountMenuButton/AccountMenuDialog.d.ts +21 -0
  1302. package/dist/types/wallet/src/react/components/AccountMenuButton/AccountsSection.d.ts +2 -1
  1303. package/dist/types/wallet/src/react/components/AccountMenuButton/AuthenticationMethodsModal.d.ts +1 -1
  1304. package/dist/types/wallet/src/react/components/AccountMenuButton/ExportKeysSection.d.ts +2 -1
  1305. package/dist/types/wallet/src/react/components/AccountMenuButton/LinkedDevicesModal.d.ts +1 -1
  1306. package/dist/types/wallet/src/react/components/AccountMenuButton/SegmentedControl.d.ts +2 -2
  1307. package/dist/types/wallet/src/react/components/AccountMenuButton/UserAccountButton.d.ts +0 -7
  1308. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/GlobeIcon.d.ts +1 -1
  1309. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/KeyIcon.d.ts +1 -1
  1310. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/LaptopIcon.d.ts +1 -1
  1311. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/LinkIcon.d.ts +1 -1
  1312. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/LockIcon.d.ts +1 -1
  1313. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/MailIcon.d.ts +1 -1
  1314. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/MoonIcon.d.ts +1 -5
  1315. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/RecoveryCodesIcon.d.ts +1 -1
  1316. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/ScanIcon.d.ts +1 -1
  1317. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/SlidersIcon.d.ts +1 -1
  1318. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/SmartphoneIcon.d.ts +1 -1
  1319. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/SunIcon.d.ts +1 -5
  1320. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/strokeIcon.d.ts +10 -0
  1321. package/dist/types/wallet/src/react/components/HostedSeamsAuthMenu/types.d.ts +1 -1
  1322. package/dist/types/wallet/src/react/components/QRCodeIcon.d.ts +1 -1
  1323. package/dist/types/wallet/src/react/components/theme/ThemeProvider.d.ts +0 -9
  1324. package/dist/types/wallet/src/react/components/theme/design-tokens.d.ts +2 -205
  1325. package/dist/types/wallet/src/react/context/reactLoginStateBuilders.d.ts +2 -9
  1326. package/dist/types/wallet/src/react/hooks/useAccountInput.d.ts +2 -2
  1327. package/dist/types/wallet/src/react/index.d.ts +3 -1
  1328. package/dist/types/wallet/src/react/transactionReview/boundCalls.d.ts +108 -8
  1329. package/dist/types/wallet/src/react/transactionReview/controller.d.ts +0 -37
  1330. package/dist/types/wallet/src/react/types.d.ts +2 -2
  1331. package/dist/types/wallet/src/utils/deviceDetection.d.ts +2 -58
  1332. package/dist/types/wallet/src/utils/intentDigest.d.ts +1 -6
  1333. package/dist/types/wallet/src/utils/qrScanner.d.ts +4 -38
  1334. package/dist/workers/device-linking-key.worker.js +2954 -3134
  1335. package/dist/workers/ecdsa-derivation-client.worker.js +1688 -2144
  1336. package/dist/workers/ecdsa-online-client.worker.js +9 -117
  1337. package/dist/workers/ecdsa-presign-client.worker.js +44 -147
  1338. package/dist/workers/email-otp.worker.js +9265 -9596
  1339. package/dist/workers/evm-crypto.worker.js +8 -6
  1340. package/dist/workers/near-signer.worker.js +4 -4
  1341. package/dist/workers/near_signer.wasm +0 -0
  1342. package/dist/workers/passkey-confirm.worker.js +6 -3
  1343. package/dist/workers/passkey-mpc-export.worker.js +95 -101
  1344. package/dist/workers/passkey-mpc-session.worker.js +205 -202
  1345. package/dist/workers/router_ab_ecdsa_client_bg.wasm +0 -0
  1346. package/dist/workers/router_ab_ed25519_yao_client_bg.wasm +0 -0
  1347. package/dist/workers/tempo-signer.worker.js +8 -6
  1348. package/dist/workers/wallet-custody-ceremony.worker.js +223 -215
  1349. package/dist/workers/wallet_custody_ceremony_bg.wasm +0 -0
  1350. package/dist/workers/wasm_signer_worker_bg.wasm +0 -0
  1351. package/package.json +1 -1
  1352. package/dist/esm/react/core/types/rpc.js +0 -9
  1353. package/dist/esm/react/shared-ts/src/signing-lanes/linkedEcdsaScope.js +0 -1
  1354. package/dist/esm/react/shared-ts/src/utils/paillier.js +0 -3
  1355. package/dist/esm/sdk/device-linking-DpVGjSeq.js +0 -221
  1356. package/dist/esm/sdk/ecdsaPresignLifecycle-CnSnzoRJ.js +0 -5511
  1357. package/dist/esm/sdk/evmFamilyEcdsaIdentity-_kuKSW35.js +0 -1385
  1358. package/dist/esm/sdk/participants-Bcnsa_ip.js +0 -232
  1359. package/dist/esm/sdk/registrationIntent-DwAIMQYh.js +0 -1623
  1360. package/dist/esm/sdk/signer-worker-DYRteieu.js +0 -48
  1361. package/dist/esm/shared-ts/src/signing-lanes/linkedEcdsaScope.js +0 -1
  1362. package/dist/esm/shared-ts/src/utils/paillier.js +0 -3
  1363. package/dist/public/sdk/device-linking-DpVGjSeq.js +0 -221
  1364. package/dist/public/sdk/ecdsaPresignLifecycle-CnSnzoRJ.js +0 -5511
  1365. package/dist/public/sdk/evmFamilyEcdsaIdentity-_kuKSW35.js +0 -1385
  1366. package/dist/public/sdk/participants-Bcnsa_ip.js +0 -232
  1367. package/dist/public/sdk/registrationIntent-DwAIMQYh.js +0 -1623
  1368. package/dist/public/sdk/signer-worker-DYRteieu.js +0 -48
  1369. package/dist/types/shared-ts/src/passkey-custody/credentialObservations.d.ts +0 -74
  1370. package/dist/types/shared-ts/src/passkey-custody/kekContext.d.ts +0 -34
  1371. package/dist/types/shared-ts/src/signing-lanes/linkedEcdsaScope.d.ts +0 -62
  1372. package/dist/types/shared-ts/src/signing-lanes/linkedEcdsaScope.typecheck.d.ts +0 -2
  1373. package/dist/types/shared-ts/src/signing-lanes/validation.d.ts +0 -11
  1374. package/dist/types/shared-ts/src/utils/bigint.d.ts +0 -3
  1375. package/dist/types/shared-ts/src/utils/paillier.d.ts +0 -37
  1376. package/dist/types/shared-ts/src/utils/recoveryDomain.d.ts +0 -12
  1377. package/dist/types/shared-ts/src/utils/signerDomain.typecheck.d.ts +0 -2
  1378. package/dist/types/shared-ts/src/wallet-recovery/recoveryKekContext.d.ts +0 -37
  1379. package/dist/types/wallet/src/SeamsWeb/operations/devices/qrLinkSession.d.ts +0 -7
  1380. package/dist/types/wallet/src/SeamsWeb/operations/session/thresholdWarmSessionDefaults.d.ts +0 -11
  1381. package/dist/types/wallet/src/SeamsWeb/walletIframe/SeamsWebIframe.d.ts +0 -113
  1382. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/env.d.ts +0 -7
  1383. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/index.d.ts +0 -12
  1384. package/dist/types/wallet/src/SeamsWeb/walletIframe/index.d.ts +0 -21
  1385. package/dist/types/wallet/src/core/platform/webCryptoHkdf.d.ts +0 -7
  1386. package/dist/types/wallet/src/core/rpcClients/relayer/routerAbPublicKeyset.d.ts +0 -5
  1387. package/dist/types/wallet/src/core/rpcClients/relayer/thresholdEcdsa.typecheck.d.ts +0 -2
  1388. package/dist/types/wallet/src/core/rpcClients/relayer/walletCredentialActivity.d.ts +0 -48
  1389. package/dist/types/wallet/src/core/signingEngine/flows/recovery/recoveryStorePorts.d.ts +0 -7
  1390. package/dist/types/wallet/src/core/signingEngine/session/holderShares/holderShareEnvelopeAad.d.ts +0 -14
  1391. package/dist/types/wallet/src/core/signingEngine/session/identity/ecdsaDerivationSigningMaterialHandle.d.ts +0 -19
  1392. package/dist/types/wallet/src/core/signingEngine/session/identity/ecdsaDerivationSigningMaterialHandle.typecheck.d.ts +0 -2
  1393. package/dist/types/wallet/src/core/signingEngine/session/lanes/laneRecords.d.ts +0 -3
  1394. package/dist/types/wallet/src/core/signingEngine/session/lanes/operations/holderDeliveryCoordinator.d.ts +0 -29
  1395. package/dist/types/wallet/src/core/signingEngine/session/lanes/operations/ports.d.ts +0 -53
  1396. package/dist/types/wallet/src/core/signingEngine/session/lanes/operations/sourceLaneOperationCoordinator.d.ts +0 -24
  1397. package/dist/types/wallet/src/core/signingEngine/session/operationState/stepUpFreshness.d.ts +0 -135
  1398. package/dist/types/wallet/src/core/signingEngine/session/operationState/stepUpFreshness.typecheck.d.ts +0 -2
  1399. package/dist/types/wallet/src/core/signingEngine/session/passkey/envelopes/index.d.ts +0 -19
  1400. package/dist/types/wallet/src/core/signingEngine/session/passkey/runtime.d.ts +0 -23
  1401. package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/walletAuthPolicyError.d.ts +0 -17
  1402. package/dist/types/wallet/src/core/signingEngine/threshold/crypto/ed25519WrapKeySalt.d.ts +0 -2
  1403. package/dist/types/wallet/src/core/signingEngine/useCases/lifecycle.d.ts +0 -758
  1404. package/dist/types/wallet/src/core/signingEngine/useCases/lifecycle.typecheck.d.ts +0 -2
  1405. package/dist/types/wallet/src/core/signingEngine/useCases/registerWallet.d.ts +0 -71
  1406. package/dist/types/wallet/src/core/signingEngine/useCases/restorePersistedSessions.d.ts +0 -51
  1407. package/dist/types/wallet/src/core/signingEngine/useCases/signEvmFamily.d.ts +0 -47
  1408. package/dist/types/wallet/src/core/signingEngine/useCases/signNear.d.ts +0 -60
  1409. package/dist/types/wallet/src/core/signingEngine/useCases/unlockWallet.d.ts +0 -69
  1410. package/dist/types/wallet/src/core/signingEngine/walletCustody/coldUnlock.d.ts +0 -57
  1411. package/dist/types/wallet/src/core/signingEngine/workerManager/laneWorkerChannels.d.ts +0 -81
  1412. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/laneHolderWorkerBackend.d.ts +0 -54
  1413. package/dist/types/wallet/src/react/components/AccountMenuButton/HaloBorder/index.d.ts +0 -33
  1414. package/dist/types/wallet/src/react/components/AccountMenuButton/PasskeyHaloLoading.d.ts +0 -10
  1415. package/dist/types/wallet/src/react/components/AccountMenuButton/icons/EclipseIcon.d.ts +0 -8
  1416. package/dist/types/wallet/src/react/components/ArrowRightAnim.d.ts +0 -19
  1417. package/dist/types/wallet/src/react/components/HostedSeamsAuthMenu/index.d.ts +0 -5
  1418. package/dist/types/wallet/src/theme/base-styles.runtime.d.ts +0 -15
  1419. /package/dist/esm/sdk/{base-CMsoJcVv.js → base-D1B5mGin.js} +0 -0
  1420. /package/dist/esm/sdk/{bytes-CwytAKz8.js → bytes-qKxKn4gg.js} +0 -0
  1421. /package/dist/esm/sdk/{csp-stylesheet-DLj_a6t_.js → csp-stylesheet-btENhsNp.js} +0 -0
  1422. /package/dist/esm/sdk/{events-Z_Rmy0Hn.js → events-DYoBL2HO.js} +0 -0
  1423. /package/dist/esm/sdk/{executeWorkerOperation-Bn8GEuT_.js → executeWorkerOperation-Cl9whMK7.js} +0 -0
  1424. /package/dist/esm/sdk/{jsonRpc-MUsR5-C6.js → jsonRpc-VVkaQkFD.js} +0 -0
  1425. /package/dist/esm/sdk/{keccak-DY5wDsym.js → keccak-DUL3d8SF.js} +0 -0
  1426. /package/dist/esm/sdk/{nearRpcResults-DwvW43FL.js → nearRpcResults-DoUgDATm.js} +0 -0
  1427. /package/dist/esm/sdk/{prfCache-CgAr-VEU.js → prfCache-wqQSjYLn.js} +0 -0
  1428. /package/dist/esm/sdk/{profileAccountProjection-C9rVhbeJ.js → profileAccountProjection-uZVJuBvS.js} +0 -0
  1429. /package/dist/esm/sdk/{promptText-BEgOkGxB.js → promptText-CuRa_ivd.js} +0 -0
  1430. /package/dist/esm/sdk/{shared-Qy1DGMqH.js → shared-DkbeLCI3.js} +0 -0
  1431. /package/dist/esm/sdk/{signerSlot-DbNAs-kc.js → signerSlot-_ovonwVX.js} +0 -0
  1432. /package/dist/esm/sdk/{signingSessionSeal-CdtgXHSL.js → signingSessionSeal-Cu-GHm6y.js} +0 -0
  1433. /package/dist/esm/sdk/{surface-measurement-reporter-D7BNehf4.js → surface-measurement-reporter-CSTyRsMa.js} +0 -0
  1434. /package/dist/esm/sdk/{walletIframeIdentity-UmQTJsHc.js → walletIframeIdentity-DB6Z2EC9.js} +0 -0
  1435. /package/dist/esm/sdk/{webauthnPromptCoordinator-CLeba8ru.js → webauthnPromptCoordinator-L96oVvLz.js} +0 -0
  1436. /package/dist/public/sdk/{base-CMsoJcVv.js → base-D1B5mGin.js} +0 -0
  1437. /package/dist/public/sdk/{bytes-CwytAKz8.js → bytes-qKxKn4gg.js} +0 -0
  1438. /package/dist/public/sdk/{csp-stylesheet-DLj_a6t_.js → csp-stylesheet-btENhsNp.js} +0 -0
  1439. /package/dist/public/sdk/{events-Z_Rmy0Hn.js → events-DYoBL2HO.js} +0 -0
  1440. /package/dist/public/sdk/{executeWorkerOperation-Bn8GEuT_.js → executeWorkerOperation-Cl9whMK7.js} +0 -0
  1441. /package/dist/public/sdk/{jsonRpc-MUsR5-C6.js → jsonRpc-VVkaQkFD.js} +0 -0
  1442. /package/dist/public/sdk/{keccak-DY5wDsym.js → keccak-DUL3d8SF.js} +0 -0
  1443. /package/dist/public/sdk/{nearRpcResults-DwvW43FL.js → nearRpcResults-DoUgDATm.js} +0 -0
  1444. /package/dist/public/sdk/{prfCache-CgAr-VEU.js → prfCache-wqQSjYLn.js} +0 -0
  1445. /package/dist/public/sdk/{profileAccountProjection-C9rVhbeJ.js → profileAccountProjection-uZVJuBvS.js} +0 -0
  1446. /package/dist/public/sdk/{promptText-BEgOkGxB.js → promptText-CuRa_ivd.js} +0 -0
  1447. /package/dist/public/sdk/{shared-Qy1DGMqH.js → shared-DkbeLCI3.js} +0 -0
  1448. /package/dist/public/sdk/{signerSlot-DbNAs-kc.js → signerSlot-_ovonwVX.js} +0 -0
  1449. /package/dist/public/sdk/{signingSessionSeal-CdtgXHSL.js → signingSessionSeal-Cu-GHm6y.js} +0 -0
  1450. /package/dist/public/sdk/{surface-measurement-reporter-D7BNehf4.js → surface-measurement-reporter-CSTyRsMa.js} +0 -0
  1451. /package/dist/public/sdk/{walletIframeIdentity-UmQTJsHc.js → walletIframeIdentity-DB6Z2EC9.js} +0 -0
  1452. /package/dist/public/sdk/{webauthnPromptCoordinator-CLeba8ru.js → webauthnPromptCoordinator-L96oVvLz.js} +0 -0
@@ -0,0 +1,4288 @@
1
+ import { D as parseWalletAuthorityId, M as parseWebAuthnRpId, O as parseWalletId, T as parseWalletAuthMethodId, _ as parseMpcSigningWorkerRef, d as parseLinkedDeviceId, h as parseMpcMaterialActivationRef, k as parseWalletKeyId, l as parseLinkDeviceSessionId, n as hasWhitespaceOrControlCharacters, r as mpcMaterialActivationRefsEqual, u as parseLinkedDeviceEnrollmentId } from "./domainIds-lcrFg6Sa.js";
2
+ import { D as parseImplicitNearAccountId, O as parseNamedNearAccountId, _ as requireRecord, m as requireArray, v as requireRecordCopy } from "./validation-gat4LEKm.js";
3
+ import { i as base64UrlEncode, r as base64UrlDecode } from "./base64-Clm8C-e9.js";
4
+ import { N as exactRecord$3, O as delegatedWalletPermissionNamesV1, P as rejectUnknownFields$1, S as parseEnvelopeNonceB64u, T as parseSecp256k1CompressedPublicKeyB64u, _ as deriveEvmFamilySigningKeySlotId$1, b as parseEd25519PublicKeyB64u, d as normalizeThresholdEd25519ParticipantIds, g as signingRootScopeFromRuntimePolicyScope, x as parseEnvelopeCiphertextB64u, y as parseDigestField$1 } from "./sessionPolicy-CHiilOAB.js";
5
+ import { $t as wireObject, Bt as parseNonNegativeSafeInteger, Ct as routerAbMpcMaterialActivationRefFromWire, Et as requireRouterAbX25519PublicKey, Ft as keyLabeled, Gt as walletAuthMethodId, Ht as parseUnixTime, It as linkedDeviceId, Jt as walletKeyId, Kt as walletAuthorityId, Lt as nullableToken, Mt as credentialId, Nt as digest, Ot as parseActiveWalletSessionV1, Pt as enrollmentId, Qt as wireNullable, Rt as parseDelegatedWalletAuthority, Tt as sameRouterAbMpcMaterialActivationRef, Ut as rpId$1, Vt as parseTargetEmail, Wt as sessionId, Xt as walletSessionId, Yt as walletSessionAuthorizationId, Zt as wireLiteral, en as wireUnion, j as requireRouterAbEcdsaDerivationNormalSigningStateV1, jt as authorizationDeviceId, qt as walletId, xt as parseRouterAbMpcMaterialActivationRef, yt as parseSdkEcdsaDerivationThresholdKeyId, zt as parseNonEmptyToken } from "./ecdsaPresignLifecycle-BFOTNYCK.js";
6
+ import { d as parseMpcWalletSigningQuotaId, f as parsePrincipalId, h as parseWalletSessionId, l as parseDeviceId, m as parseWalletSessionAuthorizationId, p as parseTenantId } from "./capabilityKinds-hvYqa6S_.js";
7
+ import { f as alphabetizeStringify, m as sha256BytesUtf8 } from "./chains-BMh3btVo.js";
8
+ import { a as sha256DigestB64u, o as sha256Utf8DigestB64u, r as parseDigestB64u } from "./canonicalPrimitives-BTHWz80v.js";
9
+ import { c as toWalletId, l as walletIdFromWalletProfile } from "./ecdsaChainTarget-Bl-JWyuw.js";
10
+ import { n as SIGNER_AUTH_METHODS } from "./signerDomain-IEAVrOrc.js";
11
+ import { _ as rawDigest, b as u32, d as parseWalletSignerActivationSetV1, g as lp32, h as concat, u as parseWalletAuthorityV1, v as rawPublicKey, w as parseWalletAuthMethodRecordV2, x as u64, y as text } from "./walletAuthority-BQBxgUBn.js";
12
+ import { i as nearEd25519SigningKeyIdFromString } from "./registrationIds-DLSdEKSv.js";
13
+ import { r as SigningSessionIds } from "./types-Dx9fczU7.js";
14
+ //#region ../shared-ts/src/device-linking/contracts.ts
15
+ function assertNeverLinkSessionStateV1(value) {
16
+ throw new Error(`[LinkSessionStateV1] unsupported state: ${String(value)}`);
17
+ }
18
+ //#endregion
19
+ //#region ../shared-ts/src/device-linking/ed25519ExportRoot.ts
20
+ /**
21
+ * Authenticated relay records for the cross-device Ed25519 Yao Client export
22
+ * root. The relay sees only public routing facts and an encrypted root.
23
+ * Wallet-custody seed bindings deliberately have no representation here.
24
+ */
25
+ /** Frozen by signer-core's Ed25519 Yao Client-root transfer module. */
26
+ const LINKED_DEVICE_ED25519_EXPORT_ROOT_TRANSFER_ALG_V1 = "x25519-hkdf-sha256-chacha20poly1305-v1";
27
+ const X25519_PUBLIC_KEY_LENGTH = 32;
28
+ const UNPADDED_BASE64URL = /^[A-Za-z0-9_-]+$/;
29
+ const RECIPIENT_FIELDS = [
30
+ "kind",
31
+ "linkSessionId",
32
+ "walletId",
33
+ "walletKeyId",
34
+ "enrollmentId",
35
+ "deviceId",
36
+ "transferAlg",
37
+ "applicationBindingDigestB64u",
38
+ "registeredPublicKeyB64u",
39
+ "targetFactor",
40
+ "revocationEpoch",
41
+ "recipientPublicKeyB64u",
42
+ "registeredAtMs"
43
+ ];
44
+ const PACKAGE_FIELDS = [
45
+ "kind",
46
+ "linkSessionId",
47
+ "walletId",
48
+ "walletKeyId",
49
+ "enrollmentId",
50
+ "deviceId",
51
+ "transferAlg",
52
+ "applicationBindingDigestB64u",
53
+ "registeredPublicKeyB64u",
54
+ "targetFactor",
55
+ "revocationEpoch",
56
+ "recipientPublicKeyB64u",
57
+ "ephemeralPublicKeyB64u",
58
+ "nonceB64u",
59
+ "sealedExportRootB64u",
60
+ "bindingDigestB64u",
61
+ "ciphertextDigestB64u",
62
+ "sealedAtMs"
63
+ ];
64
+ function parseLinkedDeviceEd25519ExportRootRecipientPublicKeyB64u(value, label = "recipientPublicKeyB64u") {
65
+ if (typeof value !== "string" || !UNPADDED_BASE64URL.test(value)) throw new Error(`${label} must be unpadded base64url`);
66
+ let decoded;
67
+ try {
68
+ decoded = base64UrlDecode(value);
69
+ } catch {
70
+ throw new Error(`${label} must be valid base64url`);
71
+ }
72
+ if (base64UrlEncode(decoded) !== value) throw new Error(`${label} must be canonical base64url`);
73
+ if (decoded.length !== X25519_PUBLIC_KEY_LENGTH) throw new Error(`${label} must decode to a 32-byte X25519 public key`);
74
+ return value;
75
+ }
76
+ function buildLinkedDeviceEd25519ExportRootTransferBindingV1(input) {
77
+ return {
78
+ linkSessionId: input.linkSessionId,
79
+ walletId: input.walletId,
80
+ walletKeyId: input.walletKeyId,
81
+ targetFactor: input.targetFactor,
82
+ enrollmentId: input.enrollmentId,
83
+ deviceId: input.deviceId,
84
+ revocationEpoch: input.revocationEpoch,
85
+ applicationBindingDigestB64u: input.applicationBindingDigestB64u,
86
+ registeredPublicKeyB64u: input.registeredPublicKeyB64u,
87
+ recipientPublicKeyB64u: input.recipientPublicKeyB64u
88
+ };
89
+ }
90
+ /** Serializes exactly the six fields accepted by signer-core's AAD binding. */
91
+ function serializeLinkedDeviceEd25519ExportRootTransferBindingV1(binding) {
92
+ return JSON.stringify({
93
+ linkSessionId: String(binding.linkSessionId),
94
+ walletId: String(binding.walletId),
95
+ walletKeyId: String(binding.walletKeyId),
96
+ targetFactor: binding.targetFactor,
97
+ enrollmentId: String(binding.enrollmentId),
98
+ deviceId: String(binding.deviceId),
99
+ revocationEpoch: binding.revocationEpoch,
100
+ applicationBindingDigestB64u: String(binding.applicationBindingDigestB64u),
101
+ registeredPublicKeyB64u: String(binding.registeredPublicKeyB64u),
102
+ recipientPublicKeyB64u: String(binding.recipientPublicKeyB64u)
103
+ });
104
+ }
105
+ function parseLinkedDeviceEd25519ExportRootRecipientV1(raw) {
106
+ const record = exactRecord$2(raw, RECIPIENT_FIELDS, "LinkedDeviceEd25519ExportRootRecipientV1");
107
+ if (record.kind !== "linked_device_ed25519_export_root_recipient_v1") throw new Error("LinkedDeviceEd25519ExportRootRecipientV1.kind is invalid");
108
+ requireTransferAlg(record.transferAlg, "LinkedDeviceEd25519ExportRootRecipientV1.transferAlg");
109
+ return {
110
+ kind: "linked_device_ed25519_export_root_recipient_v1",
111
+ linkSessionId: parseRequired(parseLinkDeviceSessionId(record.linkSessionId), "LinkedDeviceEd25519ExportRootRecipientV1.linkSessionId"),
112
+ walletId: parseRequired(parseWalletId(record.walletId), "walletId"),
113
+ walletKeyId: parseRequired(parseWalletKeyId(record.walletKeyId), "walletKeyId"),
114
+ enrollmentId: parseRequired(parseLinkedDeviceEnrollmentId(record.enrollmentId), "enrollmentId"),
115
+ deviceId: parseRequired(parseLinkedDeviceId(record.deviceId), "deviceId"),
116
+ transferAlg: LINKED_DEVICE_ED25519_EXPORT_ROOT_TRANSFER_ALG_V1,
117
+ applicationBindingDigestB64u: parseDigestField$1(record.applicationBindingDigestB64u, "applicationBindingDigestB64u"),
118
+ registeredPublicKeyB64u: parseEd25519PublicKeyB64u(record.registeredPublicKeyB64u, "registeredPublicKeyB64u"),
119
+ targetFactor: parseTargetFactor$1(record.targetFactor),
120
+ revocationEpoch: parseRevocationEpoch(record.revocationEpoch, "revocationEpoch"),
121
+ recipientPublicKeyB64u: parseLinkedDeviceEd25519ExportRootRecipientPublicKeyB64u(record.recipientPublicKeyB64u, "recipientPublicKeyB64u"),
122
+ registeredAtMs: parseUnixMs(record.registeredAtMs, "registeredAtMs")
123
+ };
124
+ }
125
+ function parseLinkedDeviceEd25519ExportRootPackageV1(raw) {
126
+ const record = exactRecord$2(raw, PACKAGE_FIELDS, "LinkedDeviceEd25519ExportRootPackageV1");
127
+ if (record.kind !== "linked_device_ed25519_export_root_package_v1") throw new Error("LinkedDeviceEd25519ExportRootPackageV1.kind is invalid");
128
+ requireTransferAlg(record.transferAlg, "LinkedDeviceEd25519ExportRootPackageV1.transferAlg");
129
+ const recipientPublicKeyB64u = parseLinkedDeviceEd25519ExportRootRecipientPublicKeyB64u(record.recipientPublicKeyB64u, "recipientPublicKeyB64u");
130
+ const ephemeralPublicKeyB64u = parseLinkedDeviceEd25519ExportRootRecipientPublicKeyB64u(record.ephemeralPublicKeyB64u, "ephemeralPublicKeyB64u");
131
+ if (recipientPublicKeyB64u === ephemeralPublicKeyB64u) throw new Error("ephemeralPublicKeyB64u repeats the recipient key");
132
+ return {
133
+ kind: "linked_device_ed25519_export_root_package_v1",
134
+ linkSessionId: parseRequired(parseLinkDeviceSessionId(record.linkSessionId), "linkSessionId"),
135
+ walletId: parseRequired(parseWalletId(record.walletId), "walletId"),
136
+ walletKeyId: parseRequired(parseWalletKeyId(record.walletKeyId), "walletKeyId"),
137
+ enrollmentId: parseRequired(parseLinkedDeviceEnrollmentId(record.enrollmentId), "enrollmentId"),
138
+ deviceId: parseRequired(parseLinkedDeviceId(record.deviceId), "deviceId"),
139
+ transferAlg: LINKED_DEVICE_ED25519_EXPORT_ROOT_TRANSFER_ALG_V1,
140
+ applicationBindingDigestB64u: parseDigestField$1(record.applicationBindingDigestB64u, "applicationBindingDigestB64u"),
141
+ registeredPublicKeyB64u: parseEd25519PublicKeyB64u(record.registeredPublicKeyB64u, "registeredPublicKeyB64u"),
142
+ targetFactor: parseTargetFactor$1(record.targetFactor),
143
+ revocationEpoch: parseRevocationEpoch(record.revocationEpoch, "revocationEpoch"),
144
+ recipientPublicKeyB64u,
145
+ ephemeralPublicKeyB64u,
146
+ nonceB64u: parseEnvelopeNonceB64u(record.nonceB64u, "nonceB64u"),
147
+ sealedExportRootB64u: parseEnvelopeCiphertextB64u(record.sealedExportRootB64u, "sealedExportRootB64u"),
148
+ bindingDigestB64u: parseDigestField$1(record.bindingDigestB64u, "bindingDigestB64u"),
149
+ ciphertextDigestB64u: parseDigestField$1(record.ciphertextDigestB64u, "ciphertextDigestB64u"),
150
+ sealedAtMs: parseUnixMs(record.sealedAtMs, "sealedAtMs")
151
+ };
152
+ }
153
+ function parseTargetFactor$1(raw) {
154
+ switch (exactRecord$2(raw, ["kind"], "targetFactor").kind) {
155
+ case "passkey_prf": return { kind: "passkey_prf" };
156
+ case "email_otp": return { kind: "email_otp" };
157
+ default: throw new Error("targetFactor.kind is unsupported");
158
+ }
159
+ }
160
+ function exactRecord$2(raw, fields, label) {
161
+ const record = requireRecord(raw, label);
162
+ rejectUnknownFields$1(record, fields, label);
163
+ for (const field of fields) if (record[field] === void 0) throw new Error(`${label}.${field} is required`);
164
+ return record;
165
+ }
166
+ function requireTransferAlg(value, label) {
167
+ if (value !== "x25519-hkdf-sha256-chacha20poly1305-v1") throw new Error(`${label} must be ${LINKED_DEVICE_ED25519_EXPORT_ROOT_TRANSFER_ALG_V1}`);
168
+ }
169
+ function parseRevocationEpoch(value, label) {
170
+ if (typeof value !== "number" || !Number.isSafeInteger(value) || value < 0) throw new Error(`${label} must be a non-negative safe integer`);
171
+ return value;
172
+ }
173
+ function parseUnixMs(value, label) {
174
+ if (typeof value !== "number" || !Number.isSafeInteger(value) || value <= 0) throw new Error(`${label} must be a positive unix-millisecond timestamp`);
175
+ return value;
176
+ }
177
+ function parseRequired(parsed, label) {
178
+ if (!parsed.ok) throw new Error(`${label} ${parsed.error.message}`);
179
+ return parsed.value;
180
+ }
181
+ //#endregion
182
+ //#region ../shared-ts/src/utils/addAuthMethodRegistration.ts
183
+ /**
184
+ * The canonical WebAuthn registration options for adding a wallet auth method.
185
+ *
186
+ * This lives in the shared package because three parties read the same record:
187
+ * the server that mints it, the browser that passes it to
188
+ * `navigator.credentials.create`, and the linked-device target preparation that
189
+ * carries it to Device 2. One declaration, so a change to the ceremony cannot
190
+ * silently diverge from what a linked device creates its passkey against.
191
+ *
192
+ * Everything here is fixed by the canonical add-auth-method ceremony: two
193
+ * algorithms in a fixed order, a resident key, no attestation, and PRF
194
+ * evaluation. Encoding them as literal types rather than open unions is what
195
+ * makes a registration that drifted from the ceremony fail to parse instead of
196
+ * producing a credential nothing can finalize.
197
+ */
198
+ function record(value, label) {
199
+ if (typeof value !== "object" || value === null || Array.isArray(value)) throw new Error(`${label} must be an object`);
200
+ return value;
201
+ }
202
+ function token(value, label) {
203
+ if (typeof value !== "string") throw new Error(`${label} must be a string`);
204
+ const trimmed = value.trim();
205
+ if (!trimmed) throw new Error(`${label} must not be empty`);
206
+ if (trimmed !== value) throw new Error(`${label} must not be padded with whitespace`);
207
+ return trimmed;
208
+ }
209
+ /**
210
+ * The relying party is branded at the boundary rather than at each use, so a
211
+ * consumer cannot verify a credential against an unvalidated host string.
212
+ */
213
+ function rpId(value, label) {
214
+ const parsed = parseWebAuthnRpId(token(value, label));
215
+ if (!parsed.ok) throw new Error(`${label} is invalid: ${parsed.error.message}`);
216
+ return parsed.value;
217
+ }
218
+ function literal(value, expected, label) {
219
+ if (value !== expected) throw new Error(`${label} must be ${String(expected)}`);
220
+ return expected;
221
+ }
222
+ /**
223
+ * Throws on anything that is not exactly a canonical add-auth-method
224
+ * registration. Callers that need a nullable result wrap this rather than
225
+ * writing a second, looser reading of the same record.
226
+ */
227
+ function parseWalletAddAuthMethodRegistrationOptions(raw) {
228
+ const label = "WalletAddAuthMethodRegistrationOptions";
229
+ const value = record(raw, label);
230
+ literal(value.kind, "webauthn_add_auth_method_registration_v1", `${label}.kind`);
231
+ const user = record(value.user, `${label}.user`);
232
+ const selection = record(value.authenticatorSelection, `${label}.authenticatorSelection`);
233
+ const prfEval = record(record(record(value.extensions, `${label}.extensions`).prf, `${label}.extensions.prf`).eval, `${label}.extensions.prf.eval`);
234
+ if (!Array.isArray(value.pubKeyCredParams) || value.pubKeyCredParams.length !== 2) throw new Error(`${label}.pubKeyCredParams must list exactly two algorithms`);
235
+ const [first, second] = value.pubKeyCredParams;
236
+ literal(record(first, `${label}.pubKeyCredParams[0]`).type, "public-key", `${label}.pubKeyCredParams[0].type`);
237
+ literal(record(first, `${label}.pubKeyCredParams[0]`).alg, -7, `${label}.pubKeyCredParams[0].alg`);
238
+ literal(record(second, `${label}.pubKeyCredParams[1]`).type, "public-key", `${label}.pubKeyCredParams[1].type`);
239
+ literal(record(second, `${label}.pubKeyCredParams[1]`).alg, -257, `${label}.pubKeyCredParams[1].alg`);
240
+ if (!Array.isArray(value.excludeCredentials)) throw new Error(`${label}.excludeCredentials must be an array`);
241
+ const excludeCredentials = value.excludeCredentials.map((entry, index) => {
242
+ const credential = record(entry, `${label}.excludeCredentials[${index}]`);
243
+ return {
244
+ type: literal(credential.type, "public-key", `${label}.excludeCredentials[${index}].type`),
245
+ id: token(credential.id, `${label}.excludeCredentials[${index}].id`)
246
+ };
247
+ });
248
+ const timeoutMs = value.timeoutMs;
249
+ if (typeof timeoutMs !== "number" || !Number.isSafeInteger(timeoutMs) || timeoutMs <= 0) throw new Error(`${label}.timeoutMs must be a positive safe integer`);
250
+ return {
251
+ kind: "webauthn_add_auth_method_registration_v1",
252
+ challengeId: token(value.challengeId, `${label}.challengeId`),
253
+ challengeB64u: token(value.challengeB64u, `${label}.challengeB64u`),
254
+ rpId: rpId(value.rpId, `${label}.rpId`),
255
+ user: {
256
+ idB64u: token(user.idB64u, `${label}.user.idB64u`),
257
+ name: token(user.name, `${label}.user.name`),
258
+ displayName: token(user.displayName, `${label}.user.displayName`)
259
+ },
260
+ pubKeyCredParams: [{
261
+ type: "public-key",
262
+ alg: -7
263
+ }, {
264
+ type: "public-key",
265
+ alg: -257
266
+ }],
267
+ authenticatorSelection: {
268
+ residentKey: literal(selection.residentKey, "required", `${label}.authenticatorSelection.residentKey`),
269
+ userVerification: literal(selection.userVerification, "preferred", `${label}.authenticatorSelection.userVerification`)
270
+ },
271
+ timeoutMs,
272
+ attestation: literal(value.attestation, "none", `${label}.attestation`),
273
+ extensions: { prf: { eval: {
274
+ firstB64u: token(prfEval.firstB64u, `${label}.extensions.prf.eval.firstB64u`),
275
+ secondB64u: token(prfEval.secondB64u, `${label}.extensions.prf.eval.secondB64u`)
276
+ } } },
277
+ excludeCredentials
278
+ };
279
+ }
280
+ //#endregion
281
+ //#region ../shared-ts/src/utils/routerAbEd25519YaoDigests.ts
282
+ const APPLICATION_BINDING_DOMAIN = "seams/router-ab/ed25519-yao/application-binding/v1";
283
+ const UTF8 = new TextEncoder();
284
+ function requireVisibleIdentifier(value, label) {
285
+ if (typeof value !== "string" || value.length === 0) throw new Error(`${label} must be a non-empty visible ASCII string`);
286
+ for (let index = 0; index < value.length; index += 1) {
287
+ const code = value.charCodeAt(index);
288
+ if (code < 33 || code > 126) throw new Error(`${label} must contain visible ASCII bytes`);
289
+ }
290
+ return value;
291
+ }
292
+ function requireByte(value, label) {
293
+ if (typeof value !== "number" || !Number.isInteger(value) || value < 0 || value > 255) throw new Error(`${label} must be a byte`);
294
+ return value;
295
+ }
296
+ function requireBytes(value, label, minimumLength, maximumLength) {
297
+ if (!Array.isArray(value)) throw new Error(`${label} must be a byte array`);
298
+ if (value.length < minimumLength || value.length > maximumLength) throw new Error(`${label} has an invalid length`);
299
+ const parsed = [];
300
+ for (let index = 0; index < value.length; index += 1) parsed.push(requireByte(value[index], `${label}[${index}]`));
301
+ return parsed;
302
+ }
303
+ function requireBytes32(value, label, nonzero) {
304
+ const parsed = requireBytes(value, label, 32, 32);
305
+ if (nonzero && isZeroBytes(parsed)) throw new Error(`${label} must be nonzero`);
306
+ return parsed;
307
+ }
308
+ function isZeroBytes(value) {
309
+ for (const byte of value) if (byte !== 0) return false;
310
+ return true;
311
+ }
312
+ function equalBytes(left, right) {
313
+ if (left.length !== right.length) return false;
314
+ for (let index = 0; index < left.length; index += 1) if (left[index] !== right[index]) return false;
315
+ return true;
316
+ }
317
+ function u32BigEndian(value) {
318
+ const bytes = new Uint8Array(4);
319
+ new DataView(bytes.buffer).setUint32(0, value, false);
320
+ return bytes;
321
+ }
322
+ function concatenateBytes(chunks) {
323
+ let length = 0;
324
+ for (const chunk of chunks) length += chunk.length;
325
+ const output = new Uint8Array(length);
326
+ let offset = 0;
327
+ for (const chunk of chunks) {
328
+ output.set(chunk, offset);
329
+ offset += chunk.length;
330
+ }
331
+ return output;
332
+ }
333
+ function lengthDelimited(value) {
334
+ return concatenateBytes([u32BigEndian(value.length), value]);
335
+ }
336
+ function labeledField(label, value) {
337
+ return concatenateBytes([lengthDelimited(UTF8.encode(label)), lengthDelimited(value)]);
338
+ }
339
+ async function sha256(value) {
340
+ const digest = await globalThis.crypto.subtle.digest("SHA-256", value);
341
+ return new Uint8Array(digest);
342
+ }
343
+ async function deriveRouterAbEd25519YaoApplicationBindingDigestV1(facts) {
344
+ const encoded = concatenateBytes([
345
+ lengthDelimited(UTF8.encode(APPLICATION_BINDING_DOMAIN)),
346
+ labeledField("walletId", UTF8.encode(facts.wallet_id)),
347
+ labeledField("nearEd25519SigningKeyId", UTF8.encode(facts.near_ed25519_signing_key_id)),
348
+ labeledField("signingRootId", UTF8.encode(facts.signing_root_id)),
349
+ labeledField("keyCreationSignerSlot", u32BigEndian(facts.key_creation_signer_slot))
350
+ ]);
351
+ return Array.from(await sha256(encoded));
352
+ }
353
+ //#endregion
354
+ //#region ../shared-ts/src/utils/routerAbEd25519Yao.ts
355
+ const ROUTER_AB_ED25519_YAO_REGISTRATION_ADMISSION_PATH_V1 = "/router-ab/ed25519/yao/registration/admit";
356
+ const ROUTER_AB_ED25519_YAO_REGISTRATION_EXECUTE_PATH_V1 = "/router-ab/ed25519/yao/registration/execute";
357
+ const ROUTER_AB_ED25519_YAO_RECOVERY_ADMISSION_PATH_V1 = "/router-ab/ed25519/yao/recovery/admit";
358
+ const ROUTER_AB_ED25519_YAO_RECOVERY_EXECUTE_PATH_V1 = "/router-ab/ed25519/yao/recovery/execute";
359
+ const ROUTER_AB_ED25519_YAO_RECOVERY_ACTIVATE_PATH_V1 = "/router-ab/ed25519/yao/recovery/activate";
360
+ const ROUTER_AB_ED25519_YAO_RECOVERY_CHALLENGE_ID_HEADER_V1 = "x-seams-wallet-recovery-challenge-id";
361
+ const ROUTER_AB_ED25519_YAO_WARM_RECOVERY_BOOTSTRAP_PATH_V1 = "/router-ab/ed25519/yao/recovery/bootstrap";
362
+ const ROUTER_AB_ED25519_YAO_EMAIL_OTP_RECOVERY_BOOTSTRAP_KIND_V1 = "router_ab_ed25519_yao_email_otp_recovery_v1";
363
+ const ROUTER_AB_ED25519_YAO_EXPORT_ADMISSION_PATH_V1 = "/router-ab/ed25519/yao/export/admit";
364
+ const ROUTER_AB_ED25519_YAO_EXPORT_EXECUTE_PATH_V1 = "/router-ab/ed25519/yao/export/execute";
365
+ const ED25519_YAO_CONTROL_CIPHERTEXT_MAX_BYTES_V1 = 64 * 1024;
366
+ function sameRouterAbEd25519YaoActivationBindingV1(left, right) {
367
+ return left.operation === right.operation && sameRouterAbEd25519YaoByteSequence(left.session_id, right.session_id) && sameRouterAbEd25519YaoByteSequence(left.stable_key_context_binding, right.stable_key_context_binding) && sameRouterAbMpcMaterialActivationRef(left.material_activation, right.material_activation) && left.lifecycle.lifecycle_id === right.lifecycle.lifecycle_id && left.lifecycle.work_kind === right.lifecycle.work_kind && left.lifecycle.primitive_request_kind === right.lifecycle.primitive_request_kind && left.lifecycle.root_share_epoch === right.lifecycle.root_share_epoch && left.lifecycle.account_id === right.lifecycle.account_id && left.lifecycle.session_id === right.lifecycle.session_id && left.lifecycle.signer_set_id === right.lifecycle.signer_set_id && left.lifecycle.selected_server_id === right.lifecycle.selected_server_id;
368
+ }
369
+ function sameRouterAbEd25519YaoByteSequence(left, right) {
370
+ return left.length === right.length && left.every((value, index) => value === right[index]);
371
+ }
372
+ function sameRouterAbEd25519YaoParticipantPairV1(left, right) {
373
+ return left[0] === right[0] && left[1] === right[1];
374
+ }
375
+ function sameRouterAbEd25519YaoLifecycleScopeV1(left, right) {
376
+ return left.lifecycle_id === right.lifecycle_id && left.root_share_epoch === right.root_share_epoch && left.account_id === right.account_id && left.threshold_session_id === right.threshold_session_id && left.signer_set_id === right.signer_set_id && left.signing_worker_id === right.signing_worker_id && sameRouterAbMpcMaterialActivationRef(left.material_activation, right.material_activation);
377
+ }
378
+ function sameRouterAbEd25519YaoApplicationBindingFactsV1(left, right) {
379
+ return left.wallet_id === right.wallet_id && left.near_ed25519_signing_key_id === right.near_ed25519_signing_key_id && left.signing_root_id === right.signing_root_id && left.key_creation_signer_slot === right.key_creation_signer_slot;
380
+ }
381
+ function sameRouterAbEd25519YaoRegistrationAdmissionRequestV1(left, right) {
382
+ return sameRouterAbEd25519YaoLifecycleScopeV1(left.scope, right.scope) && sameRouterAbEd25519YaoApplicationBindingFactsV1(left.application_binding, right.application_binding) && sameRouterAbEd25519YaoParticipantPairV1(left.participant_ids, right.participant_ids);
383
+ }
384
+ const REGISTRATION_WORK_KIND = "registration_prepare";
385
+ const REGISTRATION_PRIMITIVE_REQUEST_KIND = "registration";
386
+ const RECOVERY_WORK_KIND = "recovery";
387
+ const RECOVERY_PRIMITIVE_REQUEST_KIND = "recovery";
388
+ const EXPORT_WORK_KIND = "key_export";
389
+ const EXPORT_PRIMITIVE_REQUEST_KIND = "export";
390
+ function requireExactKeys(record, label, allowedKeys) {
391
+ const allowed = new Set(allowedKeys);
392
+ for (const key of Object.keys(record)) if (!allowed.has(key)) throw new Error(`${label}.${key} is not a supported field`);
393
+ for (const key of allowedKeys) if (!Object.hasOwn(record, key)) throw new Error(`${label}.${key} is required`);
394
+ }
395
+ function requirePositiveU32(value, label) {
396
+ if (!Number.isInteger(value) || typeof value !== "number" || value <= 0 || value > 4294967295) throw new Error(`${label} must be a positive u32`);
397
+ return value;
398
+ }
399
+ function requirePositiveSafeInteger(value, label) {
400
+ if (typeof value !== "number" || !Number.isSafeInteger(value) || value <= 0) throw new Error(`${label} must be a positive safe integer`);
401
+ return value;
402
+ }
403
+ function parseOperation(value, label) {
404
+ switch (value) {
405
+ case "registration":
406
+ case "recovery":
407
+ case "refresh":
408
+ case "export":
409
+ case "lane_provisioning":
410
+ case "lane_refresh": return value;
411
+ default: throw new Error(`${label} is invalid`);
412
+ }
413
+ }
414
+ function parseDeriverRole(value, label) {
415
+ switch (value) {
416
+ case "deriver_a":
417
+ case "deriver_b": return value;
418
+ default: throw new Error(`${label} is invalid`);
419
+ }
420
+ }
421
+ function parseInputKind(value, label) {
422
+ switch (value) {
423
+ case "activation":
424
+ case "export": return value;
425
+ default: throw new Error(`${label} is invalid`);
426
+ }
427
+ }
428
+ function parsePackageKind(value, label) {
429
+ switch (value) {
430
+ case "activation_client":
431
+ case "activation_signing_worker":
432
+ case "export_client": return value;
433
+ default: throw new Error(`${label} is invalid`);
434
+ }
435
+ }
436
+ function parseWorkKind(value, label) {
437
+ switch (value) {
438
+ case "registration_prepare":
439
+ case "key_export":
440
+ case "recovery":
441
+ case "server_share_refresh": return value;
442
+ default: throw new Error(`${label} is invalid`);
443
+ }
444
+ }
445
+ function parsePrimitiveRequestKind(value, label) {
446
+ switch (value) {
447
+ case "registration":
448
+ case "recovery":
449
+ case "export":
450
+ case "refresh": return value;
451
+ default: throw new Error(`${label} is invalid`);
452
+ }
453
+ }
454
+ function parseRouterAbEd25519YaoApplicationBindingFactsV1(value) {
455
+ const record = requireRecord(value, "application_binding");
456
+ requireExactKeys(record, "application_binding", [
457
+ "wallet_id",
458
+ "near_ed25519_signing_key_id",
459
+ "signing_root_id",
460
+ "key_creation_signer_slot"
461
+ ]);
462
+ return {
463
+ wallet_id: requireVisibleIdentifier(record.wallet_id, "application_binding.wallet_id"),
464
+ near_ed25519_signing_key_id: requireVisibleIdentifier(record.near_ed25519_signing_key_id, "application_binding.near_ed25519_signing_key_id"),
465
+ signing_root_id: requireVisibleIdentifier(record.signing_root_id, "application_binding.signing_root_id"),
466
+ key_creation_signer_slot: requirePositiveU32(record.key_creation_signer_slot, "application_binding.key_creation_signer_slot")
467
+ };
468
+ }
469
+ function parsePublicLifecycleScope(value) {
470
+ const record = requireRecord(value, "scope");
471
+ requireExactKeys(record, "scope", [
472
+ "lifecycle_id",
473
+ "root_share_epoch",
474
+ "account_id",
475
+ "threshold_session_id",
476
+ "signer_set_id",
477
+ "signing_worker_id",
478
+ "material_activation"
479
+ ]);
480
+ const accountId = requireVisibleIdentifier(record.account_id, "scope.account_id");
481
+ const signingWorkerId = requireVisibleIdentifier(record.signing_worker_id, "scope.signing_worker_id");
482
+ const materialActivation = parseRouterAbMpcMaterialActivationRef(record.material_activation);
483
+ if (materialActivation.material_owner !== accountId || materialActivation.signing_worker !== signingWorkerId) throw new Error("scope.material_activation does not match the lifecycle owner and worker");
484
+ return {
485
+ lifecycle_id: requireVisibleIdentifier(record.lifecycle_id, "scope.lifecycle_id"),
486
+ root_share_epoch: requireVisibleIdentifier(record.root_share_epoch, "scope.root_share_epoch"),
487
+ account_id: accountId,
488
+ threshold_session_id: requireVisibleIdentifier(record.threshold_session_id, "scope.threshold_session_id"),
489
+ signer_set_id: requireVisibleIdentifier(record.signer_set_id, "scope.signer_set_id"),
490
+ signing_worker_id: signingWorkerId,
491
+ material_activation: materialActivation
492
+ };
493
+ }
494
+ function parseParticipantIds$1(value) {
495
+ if (!Array.isArray(value) || value.length !== 2) throw new Error("participant_ids must contain exactly two values");
496
+ const first = requirePositiveU32(value[0], "participant_ids[0]");
497
+ const second = requirePositiveU32(value[1], "participant_ids[1]");
498
+ if (first > 65535 || second > 65535 || first >= second) throw new Error("participant_ids must be distinct, nonzero, ascending u16 values");
499
+ return [first, second];
500
+ }
501
+ function parseRouterAbEd25519YaoParticipantIdsV1(value) {
502
+ return parseParticipantIds$1(value);
503
+ }
504
+ function parseAdmittedLifecycle(value) {
505
+ const record = requireRecord(value, "binding.lifecycle");
506
+ requireExactKeys(record, "binding.lifecycle", [
507
+ "lifecycle_id",
508
+ "work_kind",
509
+ "primitive_request_kind",
510
+ "root_share_epoch",
511
+ "account_id",
512
+ "session_id",
513
+ "signer_set_id",
514
+ "selected_server_id"
515
+ ]);
516
+ const lifecycle = {
517
+ lifecycle_id: requireVisibleIdentifier(record.lifecycle_id, "binding.lifecycle.lifecycle_id"),
518
+ work_kind: parseWorkKind(record.work_kind, "binding.lifecycle.work_kind"),
519
+ primitive_request_kind: parsePrimitiveRequestKind(record.primitive_request_kind, "binding.lifecycle.primitive_request_kind"),
520
+ root_share_epoch: requireVisibleIdentifier(record.root_share_epoch, "binding.lifecycle.root_share_epoch"),
521
+ account_id: requireVisibleIdentifier(record.account_id, "binding.lifecycle.account_id"),
522
+ session_id: requireVisibleIdentifier(record.session_id, "binding.lifecycle.session_id"),
523
+ signer_set_id: requireVisibleIdentifier(record.signer_set_id, "binding.lifecycle.signer_set_id"),
524
+ selected_server_id: requireVisibleIdentifier(record.selected_server_id, "binding.lifecycle.selected_server_id")
525
+ };
526
+ if (lifecycle.work_kind === REGISTRATION_WORK_KIND && lifecycle.primitive_request_kind !== REGISTRATION_PRIMITIVE_REQUEST_KIND) throw new Error("binding.lifecycle primitive request kind does not match its work kind");
527
+ if (lifecycle.work_kind === RECOVERY_WORK_KIND && lifecycle.primitive_request_kind !== RECOVERY_PRIMITIVE_REQUEST_KIND) throw new Error("binding.lifecycle primitive request kind does not match its work kind");
528
+ if (lifecycle.work_kind === EXPORT_WORK_KIND && lifecycle.primitive_request_kind !== EXPORT_PRIMITIVE_REQUEST_KIND) throw new Error("binding.lifecycle primitive request kind does not match its work kind");
529
+ return lifecycle;
530
+ }
531
+ function parseCeremonyBinding(value) {
532
+ const record = requireRecord(value, "binding");
533
+ requireExactKeys(record, "binding", [
534
+ "lifecycle",
535
+ "operation",
536
+ "session_id",
537
+ "stable_key_context_binding",
538
+ "material_activation"
539
+ ]);
540
+ const binding = {
541
+ lifecycle: parseAdmittedLifecycle(record.lifecycle),
542
+ operation: parseOperation(record.operation, "binding.operation"),
543
+ session_id: requireBytes32(record.session_id, "binding.session_id", true),
544
+ stable_key_context_binding: requireBytes32(record.stable_key_context_binding, "binding.stable_key_context_binding", false),
545
+ material_activation: parseRouterAbMpcMaterialActivationRef(record.material_activation)
546
+ };
547
+ if (binding.operation === "registration" && binding.lifecycle.work_kind !== REGISTRATION_WORK_KIND) throw new Error("binding operation does not match its lifecycle work kind");
548
+ if (binding.operation === "recovery" && binding.lifecycle.work_kind !== RECOVERY_WORK_KIND) throw new Error("binding operation does not match its lifecycle work kind");
549
+ if (binding.operation === "export" && binding.lifecycle.work_kind !== EXPORT_WORK_KIND) throw new Error("binding operation does not match its lifecycle work kind");
550
+ if (binding.material_activation.material_owner !== binding.lifecycle.account_id || binding.material_activation.signing_worker !== binding.lifecycle.selected_server_id) throw new Error("binding material activation does not match its lifecycle owner and worker");
551
+ return binding;
552
+ }
553
+ function parseRouterAbEd25519YaoCeremonyBindingV1(value) {
554
+ return parseCeremonyBinding(value);
555
+ }
556
+ function requireExportCeremonyBinding(value) {
557
+ const binding = parseCeremonyBinding(value);
558
+ if (binding.operation !== "export" || binding.lifecycle.work_kind !== EXPORT_WORK_KIND || binding.lifecycle.primitive_request_kind !== EXPORT_PRIMITIVE_REQUEST_KIND) throw new Error("export binding requires the exact export lifecycle");
559
+ return {
560
+ lifecycle: {
561
+ lifecycle_id: binding.lifecycle.lifecycle_id,
562
+ work_kind: EXPORT_WORK_KIND,
563
+ primitive_request_kind: EXPORT_PRIMITIVE_REQUEST_KIND,
564
+ root_share_epoch: binding.lifecycle.root_share_epoch,
565
+ account_id: binding.lifecycle.account_id,
566
+ session_id: binding.lifecycle.session_id,
567
+ signer_set_id: binding.lifecycle.signer_set_id,
568
+ selected_server_id: binding.lifecycle.selected_server_id
569
+ },
570
+ operation: "export",
571
+ session_id: binding.session_id,
572
+ stable_key_context_binding: binding.stable_key_context_binding,
573
+ material_activation: binding.material_activation
574
+ };
575
+ }
576
+ function parseExportBinding(value) {
577
+ const record = requireRecord(value, "export binding");
578
+ requireExactKeys(record, "export binding", [
579
+ "ceremony",
580
+ "registered_public_key",
581
+ "state_epoch",
582
+ "runtime_policy_binding",
583
+ "authorization_digest"
584
+ ]);
585
+ return {
586
+ ceremony: requireExportCeremonyBinding(record.ceremony),
587
+ registered_public_key: requireBytes32(record.registered_public_key, "export binding.registered_public_key", true),
588
+ state_epoch: requirePositiveSafeInteger(record.state_epoch, "export binding.state_epoch"),
589
+ runtime_policy_binding: requireBytes32(record.runtime_policy_binding, "export binding.runtime_policy_binding", true),
590
+ authorization_digest: requireBytes32(record.authorization_digest, "export binding.authorization_digest", true)
591
+ };
592
+ }
593
+ function requireActivationBinding(binding) {
594
+ switch (binding.operation) {
595
+ case "registration":
596
+ if (binding.lifecycle.work_kind !== REGISTRATION_WORK_KIND || binding.lifecycle.primitive_request_kind !== REGISTRATION_PRIMITIVE_REQUEST_KIND) throw new Error("activation binding has the wrong registration lifecycle kind");
597
+ return {
598
+ lifecycle: {
599
+ lifecycle_id: binding.lifecycle.lifecycle_id,
600
+ work_kind: REGISTRATION_WORK_KIND,
601
+ primitive_request_kind: REGISTRATION_PRIMITIVE_REQUEST_KIND,
602
+ root_share_epoch: binding.lifecycle.root_share_epoch,
603
+ account_id: binding.lifecycle.account_id,
604
+ session_id: binding.lifecycle.session_id,
605
+ signer_set_id: binding.lifecycle.signer_set_id,
606
+ selected_server_id: binding.lifecycle.selected_server_id
607
+ },
608
+ operation: "registration",
609
+ session_id: binding.session_id,
610
+ stable_key_context_binding: binding.stable_key_context_binding,
611
+ material_activation: binding.material_activation
612
+ };
613
+ case "recovery":
614
+ if (binding.lifecycle.work_kind !== RECOVERY_WORK_KIND || binding.lifecycle.primitive_request_kind !== RECOVERY_PRIMITIVE_REQUEST_KIND) throw new Error("activation binding has the wrong recovery lifecycle kind");
615
+ return {
616
+ lifecycle: {
617
+ lifecycle_id: binding.lifecycle.lifecycle_id,
618
+ work_kind: RECOVERY_WORK_KIND,
619
+ primitive_request_kind: RECOVERY_PRIMITIVE_REQUEST_KIND,
620
+ root_share_epoch: binding.lifecycle.root_share_epoch,
621
+ account_id: binding.lifecycle.account_id,
622
+ session_id: binding.lifecycle.session_id,
623
+ signer_set_id: binding.lifecycle.signer_set_id,
624
+ selected_server_id: binding.lifecycle.selected_server_id
625
+ },
626
+ operation: "recovery",
627
+ session_id: binding.session_id,
628
+ stable_key_context_binding: binding.stable_key_context_binding,
629
+ material_activation: binding.material_activation
630
+ };
631
+ case "refresh":
632
+ case "export":
633
+ case "lane_provisioning":
634
+ case "lane_refresh": throw new Error("activation binding has a non-activation operation");
635
+ }
636
+ }
637
+ function parseKeyset(value) {
638
+ const record = requireRecord(value, "keyset");
639
+ requireExactKeys(record, "keyset", [
640
+ "deriver_a_input_public_key",
641
+ "deriver_b_input_public_key",
642
+ "signing_worker_recipient_public_key"
643
+ ]);
644
+ const keyset = {
645
+ deriver_a_input_public_key: requireBytes32(record.deriver_a_input_public_key, "keyset.deriver_a_input_public_key", true),
646
+ deriver_b_input_public_key: requireBytes32(record.deriver_b_input_public_key, "keyset.deriver_b_input_public_key", true),
647
+ signing_worker_recipient_public_key: requireBytes32(record.signing_worker_recipient_public_key, "keyset.signing_worker_recipient_public_key", true)
648
+ };
649
+ if (equalBytes(keyset.deriver_a_input_public_key, keyset.deriver_b_input_public_key) || equalBytes(keyset.deriver_a_input_public_key, keyset.signing_worker_recipient_public_key) || equalBytes(keyset.deriver_b_input_public_key, keyset.signing_worker_recipient_public_key)) throw new Error("keyset public keys must be distinct");
650
+ return keyset;
651
+ }
652
+ function parseEncryptedInput(value, label) {
653
+ const record = requireRecord(value, label);
654
+ requireExactKeys(record, label, [
655
+ "kind",
656
+ "deriver",
657
+ "operation",
658
+ "session",
659
+ "stable_context_binding",
660
+ "encapsulated_key",
661
+ "ciphertext"
662
+ ]);
663
+ const input = {
664
+ kind: parseInputKind(record.kind, `${label}.kind`),
665
+ deriver: parseDeriverRole(record.deriver, `${label}.deriver`),
666
+ operation: parseOperation(record.operation, `${label}.operation`),
667
+ session: requireBytes32(record.session, `${label}.session`, true),
668
+ stable_context_binding: requireBytes32(record.stable_context_binding, `${label}.stable_context_binding`, true),
669
+ encapsulated_key: requireBytes32(record.encapsulated_key, `${label}.encapsulated_key`, true),
670
+ ciphertext: requireBytes(record.ciphertext, `${label}.ciphertext`, 16, ED25519_YAO_CONTROL_CIPHERTEXT_MAX_BYTES_V1)
671
+ };
672
+ if (input.kind === "activation" && input.operation === "export") throw new Error(`${label} operation does not match its circuit family`);
673
+ if (input.kind === "export" && input.operation !== "export") throw new Error(`${label} operation does not match its circuit family`);
674
+ return input;
675
+ }
676
+ function requireActivationInput(binding, input, expectedDeriver, label) {
677
+ if (input.kind !== "activation" || input.deriver !== expectedDeriver || input.operation !== binding.operation || !equalBytes(input.session, binding.session_id) || !equalBytes(input.stable_context_binding, binding.stable_key_context_binding)) throw new Error(`${label} does not match the admitted activation binding`);
678
+ switch (binding.operation) {
679
+ case "registration": return {
680
+ kind: "activation",
681
+ deriver: expectedDeriver,
682
+ operation: "registration",
683
+ session: input.session,
684
+ stable_context_binding: input.stable_context_binding,
685
+ encapsulated_key: input.encapsulated_key,
686
+ ciphertext: input.ciphertext
687
+ };
688
+ case "recovery": return {
689
+ kind: "activation",
690
+ deriver: expectedDeriver,
691
+ operation: "recovery",
692
+ session: input.session,
693
+ stable_context_binding: input.stable_context_binding,
694
+ encapsulated_key: input.encapsulated_key,
695
+ ciphertext: input.ciphertext
696
+ };
697
+ }
698
+ }
699
+ function requireExportInput(binding, input, expectedDeriver, label) {
700
+ if (input.kind !== "export" || input.deriver !== expectedDeriver || input.operation !== "export" || !equalBytes(input.session, binding.ceremony.session_id) || !equalBytes(input.stable_context_binding, binding.ceremony.stable_key_context_binding)) throw new Error(`${label} does not match the admitted export binding`);
701
+ return {
702
+ kind: "export",
703
+ deriver: expectedDeriver,
704
+ operation: "export",
705
+ session: input.session,
706
+ stable_context_binding: input.stable_context_binding,
707
+ encapsulated_key: input.encapsulated_key,
708
+ ciphertext: input.ciphertext
709
+ };
710
+ }
711
+ function parseEncryptedPackage(value, label) {
712
+ const record = requireRecord(value, label);
713
+ requireExactKeys(record, label, [
714
+ "kind",
715
+ "deriver",
716
+ "session",
717
+ "transcript",
718
+ "encapsulated_key",
719
+ "ciphertext"
720
+ ]);
721
+ return {
722
+ kind: parsePackageKind(record.kind, `${label}.kind`),
723
+ deriver: parseDeriverRole(record.deriver, `${label}.deriver`),
724
+ session: requireBytes32(record.session, `${label}.session`, true),
725
+ transcript: requireBytes32(record.transcript, `${label}.transcript`, true),
726
+ encapsulated_key: requireBytes32(record.encapsulated_key, `${label}.encapsulated_key`, true),
727
+ ciphertext: requireBytes(record.ciphertext, `${label}.ciphertext`, 16, ED25519_YAO_CONTROL_CIPHERTEXT_MAX_BYTES_V1)
728
+ };
729
+ }
730
+ function parseRouterAbEd25519YaoActivationPublicReceiptV1(value) {
731
+ const record = requireRecord(value, "public_receipt");
732
+ requireExactKeys(record, "public_receipt", [
733
+ "transcript",
734
+ "registered_public_key",
735
+ "joined_client_commitment",
736
+ "joined_signing_worker_commitment",
737
+ "signing_worker_verifying_share",
738
+ "state_epoch",
739
+ "material_activation"
740
+ ]);
741
+ return {
742
+ transcript: requireBytes32(record.transcript, "public_receipt.transcript", true),
743
+ registered_public_key: requireBytes32(record.registered_public_key, "public_receipt.registered_public_key", true),
744
+ joined_client_commitment: requireBytes32(record.joined_client_commitment, "public_receipt.joined_client_commitment", true),
745
+ joined_signing_worker_commitment: requireBytes32(record.joined_signing_worker_commitment, "public_receipt.joined_signing_worker_commitment", true),
746
+ signing_worker_verifying_share: requireBytes32(record.signing_worker_verifying_share, "public_receipt.signing_worker_verifying_share", true),
747
+ state_epoch: requirePositiveSafeInteger(record.state_epoch, "public_receipt.state_epoch"),
748
+ material_activation: parseRouterAbMpcMaterialActivationRef(record.material_activation)
749
+ };
750
+ }
751
+ function requireActivationClientPackage(binding, receipt, packageValue, expectedDeriver, label) {
752
+ if (packageValue.kind !== "activation_client" || packageValue.deriver !== expectedDeriver || !equalBytes(packageValue.session, binding.session_id) || !equalBytes(packageValue.transcript, receipt.transcript)) throw new Error(`${label} does not match the terminal activation receipt`);
753
+ return {
754
+ kind: "activation_client",
755
+ deriver: expectedDeriver,
756
+ session: packageValue.session,
757
+ transcript: packageValue.transcript,
758
+ encapsulated_key: packageValue.encapsulated_key,
759
+ ciphertext: packageValue.ciphertext
760
+ };
761
+ }
762
+ function requireExportClientPackage(binding, transcript, packageValue, expectedDeriver, label) {
763
+ if (packageValue.kind !== "export_client" || packageValue.deriver !== expectedDeriver || !equalBytes(packageValue.session, binding.ceremony.session_id) || !equalBytes(packageValue.transcript, transcript)) throw new Error(`${label} does not match the terminal export result`);
764
+ return {
765
+ kind: "export_client",
766
+ deriver: expectedDeriver,
767
+ session: packageValue.session,
768
+ transcript: packageValue.transcript,
769
+ encapsulated_key: packageValue.encapsulated_key,
770
+ ciphertext: packageValue.ciphertext
771
+ };
772
+ }
773
+ function parseBoundary(parser, value) {
774
+ try {
775
+ return {
776
+ ok: true,
777
+ value: parser(value)
778
+ };
779
+ } catch (error) {
780
+ return {
781
+ ok: false,
782
+ code: "invalid_body",
783
+ message: error instanceof Error ? error.message : String(error)
784
+ };
785
+ }
786
+ }
787
+ function parseRegistrationAdmissionRequestValue(value) {
788
+ const record = requireRecord(value, "registration admission request");
789
+ requireExactKeys(record, "registration admission request", [
790
+ "scope",
791
+ "application_binding",
792
+ "participant_ids"
793
+ ]);
794
+ return {
795
+ scope: parsePublicLifecycleScope(record.scope),
796
+ application_binding: parseRouterAbEd25519YaoApplicationBindingFactsV1(record.application_binding),
797
+ participant_ids: parseParticipantIds$1(record.participant_ids)
798
+ };
799
+ }
800
+ function parseRecoveryAdmissionRequestValue(value) {
801
+ const record = requireRecord(value, "recovery admission request");
802
+ requireExactKeys(record, "recovery admission request", [
803
+ "scope",
804
+ "active_material_activation",
805
+ "application_binding",
806
+ "participant_ids",
807
+ "active_capability_binding",
808
+ "replacement_capability_binding",
809
+ "registered_public_key"
810
+ ]);
811
+ const activeCapabilityBinding = requireBytes32(record.active_capability_binding, "recovery admission request.active_capability_binding", true);
812
+ const replacementCapabilityBinding = requireBytes32(record.replacement_capability_binding, "recovery admission request.replacement_capability_binding", true);
813
+ if (equalBytes(activeCapabilityBinding, replacementCapabilityBinding)) throw new Error("recovery replacement capability binding must be fresh");
814
+ const scope = parsePublicLifecycleScope(record.scope);
815
+ const activeMaterialActivation = parseRouterAbMpcMaterialActivationRef(record.active_material_activation);
816
+ const replacementMaterialActivation = scope.material_activation;
817
+ if (activeMaterialActivation.activation_id === replacementMaterialActivation.activation_id || activeMaterialActivation.lifecycle_binding === replacementMaterialActivation.lifecycle_binding) throw new Error("recovery replacement material activation identity must be fresh");
818
+ if (activeMaterialActivation.capability !== replacementMaterialActivation.capability || activeMaterialActivation.material_owner !== replacementMaterialActivation.material_owner || activeMaterialActivation.key_binding !== replacementMaterialActivation.key_binding || activeMaterialActivation.signing_worker !== replacementMaterialActivation.signing_worker) throw new Error("recovery replacement material activation changed stable identity facts");
819
+ return {
820
+ scope,
821
+ active_material_activation: activeMaterialActivation,
822
+ application_binding: parseRouterAbEd25519YaoApplicationBindingFactsV1(record.application_binding),
823
+ participant_ids: parseParticipantIds$1(record.participant_ids),
824
+ active_capability_binding: activeCapabilityBinding,
825
+ replacement_capability_binding: replacementCapabilityBinding,
826
+ registered_public_key: requireBytes32(record.registered_public_key, "recovery admission request.registered_public_key", true)
827
+ };
828
+ }
829
+ function parseWarmRecoveryBootstrapRequestValue(value) {
830
+ const record = requireRecord(value, "warm recovery bootstrap request");
831
+ requireExactKeys(record, "warm recovery bootstrap request", [
832
+ "kind",
833
+ "walletId",
834
+ "nearAccountId",
835
+ "nearEd25519SigningKeyId",
836
+ "signerSlot",
837
+ "thresholdSessionId",
838
+ "signingWorkerId",
839
+ "participantIds"
840
+ ]);
841
+ if (record.kind !== "router_ab_ed25519_yao_warm_recovery_bootstrap_request_v1") throw new Error("warm recovery bootstrap request.kind is invalid");
842
+ return {
843
+ kind: "router_ab_ed25519_yao_warm_recovery_bootstrap_request_v1",
844
+ walletId: requireVisibleIdentifier(record.walletId, "warm recovery bootstrap request.walletId"),
845
+ nearAccountId: requireVisibleIdentifier(record.nearAccountId, "warm recovery bootstrap request.nearAccountId"),
846
+ nearEd25519SigningKeyId: requireVisibleIdentifier(record.nearEd25519SigningKeyId, "warm recovery bootstrap request.nearEd25519SigningKeyId"),
847
+ signerSlot: requirePositiveSafeInteger(record.signerSlot, "warm recovery bootstrap request.signerSlot"),
848
+ thresholdSessionId: requireVisibleIdentifier(record.thresholdSessionId, "warm recovery bootstrap request.thresholdSessionId"),
849
+ signingWorkerId: requireVisibleIdentifier(record.signingWorkerId, "warm recovery bootstrap request.signingWorkerId"),
850
+ participantIds: parseParticipantIds$1(record.participantIds)
851
+ };
852
+ }
853
+ function parseExportAdmissionReceiptValue(value) {
854
+ const record = requireRecord(value, "export admission receipt");
855
+ requireExactKeys(record, "export admission receipt", ["binding", "keyset"]);
856
+ return {
857
+ binding: parseExportBinding(record.binding),
858
+ keyset: parseKeyset(record.keyset)
859
+ };
860
+ }
861
+ function parseExportExecuteRequestValue(value) {
862
+ const record = requireRecord(value, "export execute request");
863
+ requireExactKeys(record, "export execute request", [
864
+ "binding",
865
+ "deriver_a_input",
866
+ "deriver_b_input"
867
+ ]);
868
+ const binding = parseExportBinding(record.binding);
869
+ return {
870
+ binding,
871
+ deriver_a_input: requireExportInput(binding, parseEncryptedInput(record.deriver_a_input, "deriver_a_input"), "deriver_a", "deriver_a_input"),
872
+ deriver_b_input: requireExportInput(binding, parseEncryptedInput(record.deriver_b_input, "deriver_b_input"), "deriver_b", "deriver_b_input")
873
+ };
874
+ }
875
+ function parseExportResultValue(value) {
876
+ const record = requireRecord(value, "export result");
877
+ requireExactKeys(record, "export result", [
878
+ "binding",
879
+ "transcript",
880
+ "deriver_a_client_package",
881
+ "deriver_b_client_package"
882
+ ]);
883
+ const binding = parseExportBinding(record.binding);
884
+ const transcript = requireBytes32(record.transcript, "export result.transcript", true);
885
+ return {
886
+ binding,
887
+ transcript,
888
+ deriver_a_client_package: requireExportClientPackage(binding, transcript, parseEncryptedPackage(record.deriver_a_client_package, "deriver_a_client_package"), "deriver_a", "deriver_a_client_package"),
889
+ deriver_b_client_package: requireExportClientPackage(binding, transcript, parseEncryptedPackage(record.deriver_b_client_package, "deriver_b_client_package"), "deriver_b", "deriver_b_client_package")
890
+ };
891
+ }
892
+ function parseActivationAdmissionReceiptValue(value) {
893
+ const record = requireRecord(value, "activation admission receipt");
894
+ requireExactKeys(record, "activation admission receipt", ["binding", "keyset"]);
895
+ const binding = requireActivationBinding(parseCeremonyBinding(record.binding));
896
+ const keyset = parseKeyset(record.keyset);
897
+ switch (binding.operation) {
898
+ case "registration": return {
899
+ binding,
900
+ keyset
901
+ };
902
+ case "recovery": return {
903
+ binding,
904
+ keyset
905
+ };
906
+ }
907
+ }
908
+ function parseActivationExecuteRequestValue(value) {
909
+ const record = requireRecord(value, "activation execute request");
910
+ requireExactKeys(record, "activation execute request", [
911
+ "binding",
912
+ "deriver_a_input",
913
+ "deriver_b_input"
914
+ ]);
915
+ const binding = requireActivationBinding(parseCeremonyBinding(record.binding));
916
+ const deriverAInput = requireActivationInput(binding, parseEncryptedInput(record.deriver_a_input, "deriver_a_input"), "deriver_a", "deriver_a_input");
917
+ const deriverBInput = requireActivationInput(binding, parseEncryptedInput(record.deriver_b_input, "deriver_b_input"), "deriver_b", "deriver_b_input");
918
+ if (binding.operation === "registration") {
919
+ if (deriverAInput.operation !== "registration" || deriverBInput.operation !== "registration") throw new Error("activation inputs do not match registration binding");
920
+ return {
921
+ binding,
922
+ deriver_a_input: deriverAInput,
923
+ deriver_b_input: deriverBInput
924
+ };
925
+ }
926
+ if (deriverAInput.operation !== "recovery" || deriverBInput.operation !== "recovery") throw new Error("activation inputs do not match recovery binding");
927
+ return {
928
+ binding,
929
+ deriver_a_input: deriverAInput,
930
+ deriver_b_input: deriverBInput
931
+ };
932
+ }
933
+ function parseActivationResultValue(value) {
934
+ const record = requireRecord(value, "activation result");
935
+ requireExactKeys(record, "activation result", [
936
+ "binding",
937
+ "deriver_a_client_package",
938
+ "deriver_b_client_package",
939
+ "public_receipt"
940
+ ]);
941
+ const binding = requireActivationBinding(parseCeremonyBinding(record.binding));
942
+ const receipt = parseRouterAbEd25519YaoActivationPublicReceiptV1(record.public_receipt);
943
+ if (!sameRouterAbMpcMaterialActivationRef(binding.material_activation, receipt.material_activation)) throw new Error("activation result receipt material does not match the admitted binding");
944
+ const packageA = parseEncryptedPackage(record.deriver_a_client_package, "deriver_a_client_package");
945
+ const packageB = parseEncryptedPackage(record.deriver_b_client_package, "deriver_b_client_package");
946
+ const deriverAPackage = requireActivationClientPackage(binding, receipt, packageA, "deriver_a", "deriver_a_client_package");
947
+ const deriverBPackage = requireActivationClientPackage(binding, receipt, packageB, "deriver_b", "deriver_b_client_package");
948
+ switch (binding.operation) {
949
+ case "registration": return {
950
+ binding,
951
+ deriver_a_client_package: deriverAPackage,
952
+ deriver_b_client_package: deriverBPackage,
953
+ public_receipt: receipt
954
+ };
955
+ case "recovery": return {
956
+ binding,
957
+ deriver_a_client_package: deriverAPackage,
958
+ deriver_b_client_package: deriverBPackage,
959
+ public_receipt: receipt
960
+ };
961
+ }
962
+ }
963
+ function requireRecoveryBinding(value) {
964
+ const binding = requireActivationBinding(parseCeremonyBinding(value));
965
+ switch (binding.operation) {
966
+ case "registration": throw new Error("recovery activation requires a recovery binding");
967
+ case "recovery": return binding;
968
+ }
969
+ }
970
+ function parseRecoveryActivationReceiptValue(value) {
971
+ const record = requireRecord(value, "recovery activation receipt");
972
+ requireExactKeys(record, "recovery activation receipt", [
973
+ "binding",
974
+ "public_receipt",
975
+ "active_capability_binding",
976
+ "retired_capability_binding"
977
+ ]);
978
+ const activeCapabilityBinding = requireBytes32(record.active_capability_binding, "recovery activation receipt.active_capability_binding", true);
979
+ const retiredCapabilityBinding = requireBytes32(record.retired_capability_binding, "recovery activation receipt.retired_capability_binding", true);
980
+ if (equalBytes(activeCapabilityBinding, retiredCapabilityBinding)) throw new Error("recovery activation receipt capability bindings must be distinct");
981
+ return {
982
+ binding: requireRecoveryBinding(record.binding),
983
+ public_receipt: parseRouterAbEd25519YaoActivationPublicReceiptV1(record.public_receipt),
984
+ active_capability_binding: activeCapabilityBinding,
985
+ retired_capability_binding: retiredCapabilityBinding
986
+ };
987
+ }
988
+ function isActivationAdmissionReceiptFor(value, operation) {
989
+ return value.binding.operation === operation;
990
+ }
991
+ function isActivationExecuteRequestFor(value, operation) {
992
+ return value.binding.operation === operation;
993
+ }
994
+ function isActivationResultFor(value, operation) {
995
+ return value.binding.operation === operation;
996
+ }
997
+ function operationMismatch(operation) {
998
+ return {
999
+ ok: false,
1000
+ code: "invalid_body",
1001
+ message: `activation value must use the ${operation} operation`
1002
+ };
1003
+ }
1004
+ function parseRouterAbEd25519YaoRegistrationAdmissionRequestV1(value) {
1005
+ return parseBoundary(parseRegistrationAdmissionRequestValue, value);
1006
+ }
1007
+ function parseRouterAbEd25519YaoRecoveryAdmissionRequestV1(value) {
1008
+ return parseBoundary(parseRecoveryAdmissionRequestValue, value);
1009
+ }
1010
+ function parseRouterAbEd25519YaoWarmRecoveryBootstrapRequestV1(value) {
1011
+ return parseBoundary(parseWarmRecoveryBootstrapRequestValue, value);
1012
+ }
1013
+ function parseRouterAbEd25519YaoExportAdmissionReceiptV1(value) {
1014
+ return parseBoundary(parseExportAdmissionReceiptValue, value);
1015
+ }
1016
+ function parseRouterAbEd25519YaoExportExecuteRequestV1(value) {
1017
+ return parseBoundary(parseExportExecuteRequestValue, value);
1018
+ }
1019
+ function parseRouterAbEd25519YaoExportResultV1(value) {
1020
+ return parseBoundary(parseExportResultValue, value);
1021
+ }
1022
+ function parseRouterAbEd25519YaoActivationAdmissionReceiptV1(value) {
1023
+ return parseBoundary(parseActivationAdmissionReceiptValue, value);
1024
+ }
1025
+ function parseRouterAbEd25519YaoRegistrationActivationAdmissionReceiptV1(value) {
1026
+ const parsed = parseRouterAbEd25519YaoActivationAdmissionReceiptV1(value);
1027
+ if (!parsed.ok) return parsed;
1028
+ if (!isActivationAdmissionReceiptFor(parsed.value, "registration")) return operationMismatch("registration");
1029
+ return {
1030
+ ok: true,
1031
+ value: parsed.value
1032
+ };
1033
+ }
1034
+ function parseRouterAbEd25519YaoRecoveryActivationAdmissionReceiptV1(value) {
1035
+ const parsed = parseRouterAbEd25519YaoActivationAdmissionReceiptV1(value);
1036
+ if (!parsed.ok) return parsed;
1037
+ if (!isActivationAdmissionReceiptFor(parsed.value, "recovery")) return operationMismatch("recovery");
1038
+ return {
1039
+ ok: true,
1040
+ value: parsed.value
1041
+ };
1042
+ }
1043
+ function parseRouterAbEd25519YaoActivationExecuteRequestV1(value) {
1044
+ return parseBoundary(parseActivationExecuteRequestValue, value);
1045
+ }
1046
+ function parseRouterAbEd25519YaoRegistrationActivationExecuteRequestV1(value) {
1047
+ const parsed = parseRouterAbEd25519YaoActivationExecuteRequestV1(value);
1048
+ if (!parsed.ok) return parsed;
1049
+ if (!isActivationExecuteRequestFor(parsed.value, "registration")) return operationMismatch("registration");
1050
+ return {
1051
+ ok: true,
1052
+ value: parsed.value
1053
+ };
1054
+ }
1055
+ function parseRouterAbEd25519YaoRecoveryActivationExecuteRequestV1(value) {
1056
+ const parsed = parseRouterAbEd25519YaoActivationExecuteRequestV1(value);
1057
+ if (!parsed.ok) return parsed;
1058
+ if (!isActivationExecuteRequestFor(parsed.value, "recovery")) return operationMismatch("recovery");
1059
+ return {
1060
+ ok: true,
1061
+ value: parsed.value
1062
+ };
1063
+ }
1064
+ function parseRouterAbEd25519YaoActivationResultV1(value) {
1065
+ return parseBoundary(parseActivationResultValue, value);
1066
+ }
1067
+ function parseRouterAbEd25519YaoRegistrationActivationResultV1(value) {
1068
+ const parsed = parseRouterAbEd25519YaoActivationResultV1(value);
1069
+ if (!parsed.ok) return parsed;
1070
+ if (!isActivationResultFor(parsed.value, "registration")) return operationMismatch("registration");
1071
+ return {
1072
+ ok: true,
1073
+ value: parsed.value
1074
+ };
1075
+ }
1076
+ function parseRouterAbEd25519YaoRecoveryActivationResultV1(value) {
1077
+ const parsed = parseRouterAbEd25519YaoActivationResultV1(value);
1078
+ if (!parsed.ok) return parsed;
1079
+ if (!isActivationResultFor(parsed.value, "recovery")) return operationMismatch("recovery");
1080
+ return {
1081
+ ok: true,
1082
+ value: parsed.value
1083
+ };
1084
+ }
1085
+ function parseRouterAbEd25519YaoRecoveryActivationReceiptV1(value) {
1086
+ return parseBoundary(parseRecoveryActivationReceiptValue, value);
1087
+ }
1088
+ function parseRouterAbEd25519YaoEncryptedPackageV1(value) {
1089
+ return parseBoundary(parseEncryptedPackageValue, value);
1090
+ }
1091
+ function parseEncryptedPackageValue(value) {
1092
+ return parseEncryptedPackage(value, "encrypted_package");
1093
+ }
1094
+ //#endregion
1095
+ //#region ../shared-ts/src/device-linking/sourceContribution.ts
1096
+ /** Exact discriminator accepted by the ECDSA source-contribution core. */
1097
+ const LINKED_DEVICE_ECDSA_SOURCE_CONTRIBUTION_ENVELOPE_KIND_V1 = "seams/linked-device/ecdsa-source-contribution-envelope/v1";
1098
+ function parseLinkedDeviceOrdinaryMaterialSourceContributionV1(raw) {
1099
+ const record = requireRecordCopy(raw, "linked-device ordinary source contribution");
1100
+ switch (record.kind) {
1101
+ case "linked_device_ed25519_source_contribution_v1": return parseEd25519Contribution(record);
1102
+ case "linked_device_ecdsa_source_contribution_v1": return parseEcdsaContribution(record);
1103
+ default: throw new Error("linked-device ordinary source contribution kind is invalid");
1104
+ }
1105
+ }
1106
+ function parseLinkedDeviceEd25519SourcePreservingReservationV1(raw) {
1107
+ const record = exactRecord$1(raw, [
1108
+ "state",
1109
+ "reservation_id",
1110
+ "participant_ids",
1111
+ "activation_receipt",
1112
+ "deriver_a_client_package",
1113
+ "deriver_b_client_package"
1114
+ ], "linked-device Ed25519 source-preserving reservation");
1115
+ if (record.state !== "inactive") throw new Error("linked-device Ed25519 source-preserving reservation is not inactive");
1116
+ const activationReceipt = parseRouterAbEd25519YaoActivationPublicReceiptV1(record.activation_receipt);
1117
+ const participantIds = parseRouterAbEd25519YaoParticipantIdsV1(record.participant_ids);
1118
+ const deriverA = parseEd25519ClientPackage$1(record.deriver_a_client_package, "deriver_a");
1119
+ const deriverB = parseEd25519ClientPackage$1(record.deriver_b_client_package, "deriver_b");
1120
+ if (!sameBytes$1(activationReceipt.transcript, deriverA.transcript) || !sameBytes$1(activationReceipt.transcript, deriverB.transcript)) throw new Error("linked-device Ed25519 reservation packages have mismatched transcripts");
1121
+ return {
1122
+ state: "inactive",
1123
+ reservationId: requireText(record.reservation_id, "reservation_id"),
1124
+ participantIds,
1125
+ activationReceipt,
1126
+ deriver_a_client_package: deriverA,
1127
+ deriver_b_client_package: deriverB
1128
+ };
1129
+ }
1130
+ function parseLinkedDeviceOrdinaryMaterialSourceContributionTupleV1(raw) {
1131
+ if (!Array.isArray(raw) || raw.length === 0 || raw.length > 2) throw new Error("linked-device ordinary source contributions must contain one or two entries");
1132
+ const contributions = raw.map(parseLinkedDeviceOrdinaryMaterialSourceContributionV1);
1133
+ const families = contributions.map((entry) => entry.keyFamily);
1134
+ if (new Set(families).size !== families.length) throw new Error("linked-device ordinary source contributions repeat a key family");
1135
+ if (contributions.length === 2 && (contributions[0]?.keyFamily !== "ed25519" || contributions[1]?.keyFamily !== "ecdsa_secp256k1")) throw new Error("linked-device ordinary source contributions must be Ed25519 then ECDSA");
1136
+ const first = contributions[0];
1137
+ if (!first) throw new Error("linked-device ordinary source contributions are empty");
1138
+ return [first, ...contributions.slice(1)];
1139
+ }
1140
+ function parseLinkedDeviceEcdsaSourceContributionPreparationV1(raw) {
1141
+ const record = exactRecord$1(raw, [
1142
+ "linkSessionId",
1143
+ "enrollmentId",
1144
+ "sourceAuthorityId",
1145
+ "source",
1146
+ "target"
1147
+ ], "linked-device ECDSA source contribution preparation");
1148
+ const source = parseEcdsaSourceSigner(record.source);
1149
+ const target = parseEcdsaTarget(record.target);
1150
+ assertEcdsaSourceTargetActivations(source.activation, target.activation);
1151
+ return {
1152
+ linkSessionId: parseSessionId(record.linkSessionId),
1153
+ enrollmentId: parseEnrollmentId(record.enrollmentId),
1154
+ sourceAuthorityId: parseAuthorityId(record.sourceAuthorityId),
1155
+ source,
1156
+ target
1157
+ };
1158
+ }
1159
+ function parseLinkedDeviceOrdinaryMaterialSourceContributionPreparationV1(raw) {
1160
+ const record = requireRecordCopy(raw, "linked-device ordinary source contribution preparation");
1161
+ if (record.kind === "linked_device_ed25519_source_contribution_preparation_v1") return parseEd25519SourceContributionPreparation(record);
1162
+ if (Object.prototype.hasOwnProperty.call(record, "source") && Object.prototype.hasOwnProperty.call(record, "target")) return parseLinkedDeviceEcdsaSourceContributionPreparationV1(record);
1163
+ throw new Error("linked-device ordinary source contribution preparation family is invalid");
1164
+ }
1165
+ function parseLinkedDeviceOrdinaryMaterialSourceContributionPreparationTupleV1(raw) {
1166
+ if (!Array.isArray(raw) || raw.length === 0 || raw.length > 2) throw new Error("linked-device ordinary source contribution preparations must contain one or two entries");
1167
+ const preparations = raw.map(parseLinkedDeviceOrdinaryMaterialSourceContributionPreparationV1);
1168
+ const families = preparations.map((entry) => "kind" in entry ? "ed25519" : "ecdsa_secp256k1");
1169
+ if (new Set(families).size !== families.length) throw new Error("linked-device ordinary source contribution preparations repeat a key family");
1170
+ if (preparations.length === 2 && (families[0] !== "ed25519" || families[1] !== "ecdsa_secp256k1")) throw new Error("linked-device ordinary source contribution preparations must be ordered Ed25519 then ECDSA");
1171
+ const first = preparations[0];
1172
+ if (!first) throw new Error("linked-device ordinary source contribution preparation is empty");
1173
+ return [first, ...preparations.slice(1)];
1174
+ }
1175
+ function parseEd25519SourceContributionPreparation(record) {
1176
+ exactRecord$1(record, [
1177
+ "kind",
1178
+ "linkSessionId",
1179
+ "enrollmentId",
1180
+ "sourceAuthorityId",
1181
+ "walletKeyId",
1182
+ "targetDeviceId",
1183
+ "targetFactorVerificationDigestB64u",
1184
+ "sourceBinding",
1185
+ "targetAdmission",
1186
+ "applicationBinding",
1187
+ "sourceRevocationEpoch",
1188
+ "participantIds",
1189
+ "targetMaterialActivation",
1190
+ "targetClientRecipientPublicKeyB64u",
1191
+ "targetSigningWorkerRecipientPublicKeyB64u",
1192
+ "sourceRegisteredPublicKeyB64u"
1193
+ ], "linked-device Ed25519 source contribution preparation");
1194
+ if (record.kind !== "linked_device_ed25519_source_contribution_preparation_v1") throw new Error("linked-device Ed25519 source contribution preparation kind is invalid");
1195
+ const sourceBinding = parseRegistrationBinding(record.sourceBinding, "sourceBinding");
1196
+ const targetAdmissionResult = parseRouterAbEd25519YaoRegistrationActivationAdmissionReceiptV1(record.targetAdmission);
1197
+ if (!targetAdmissionResult.ok) throw new Error(`targetAdmission ${targetAdmissionResult.message}`);
1198
+ const targetAdmission = targetAdmissionResult.value;
1199
+ const applicationBinding = parseRouterAbEd25519YaoApplicationBindingFactsV1(record.applicationBinding);
1200
+ if (typeof record.sourceRevocationEpoch !== "number" || !Number.isSafeInteger(record.sourceRevocationEpoch) || record.sourceRevocationEpoch < 0) throw new Error("sourceRevocationEpoch must be a non-negative safe integer");
1201
+ const targetMaterialActivation = parseActivation$1(record.targetMaterialActivation, "targetMaterialActivation");
1202
+ const linkSessionId = parseSessionId(record.linkSessionId);
1203
+ const enrollmentId = parseEnrollmentId(record.enrollmentId);
1204
+ const sourceAuthorityId = parseAuthorityId(record.sourceAuthorityId);
1205
+ const walletKeyId = parseWalletKeyIdField(record.walletKeyId);
1206
+ const targetDeviceId = parseDeviceIdField(record.targetDeviceId);
1207
+ const targetFactorVerificationDigestB64u = parseDigestField(record.targetFactorVerificationDigestB64u, "targetFactorVerificationDigestB64u");
1208
+ const targetClientRecipientPublicKeyB64u = parseFixedBase64(record.targetClientRecipientPublicKeyB64u, 32, "targetClientRecipientPublicKeyB64u");
1209
+ const targetSigningWorkerRecipientPublicKeyB64u = parseFixedBase64(record.targetSigningWorkerRecipientPublicKeyB64u, 32, "targetSigningWorkerRecipientPublicKeyB64u");
1210
+ if (targetClientRecipientPublicKeyB64u === targetSigningWorkerRecipientPublicKeyB64u) throw new Error("linked-device Ed25519 source contribution recipients must differ");
1211
+ const participantIds = parseRouterAbEd25519YaoParticipantIdsV1(record.participantIds);
1212
+ assertSourceBindingContext(sourceBinding, linkSessionId, "sourceBinding");
1213
+ if (!mpcMaterialActivationRefsEqual(targetMaterialActivation, routerAbMpcMaterialActivationRefFromWire(targetAdmission.binding.material_activation))) throw new Error("targetAdmission activation differs from targetMaterialActivation");
1214
+ if (!sameEdStableIdentity(sourceBinding, targetAdmission.binding)) throw new Error("source and target Ed25519 contribution bindings differ");
1215
+ if (sourceBinding.material_activation.activation_id === targetMaterialActivation.activationId) throw new Error("source and target Ed25519 contribution activations must differ");
1216
+ return {
1217
+ kind: "linked_device_ed25519_source_contribution_preparation_v1",
1218
+ linkSessionId,
1219
+ enrollmentId,
1220
+ sourceAuthorityId,
1221
+ walletKeyId,
1222
+ targetDeviceId,
1223
+ targetFactorVerificationDigestB64u,
1224
+ sourceBinding,
1225
+ targetAdmission,
1226
+ applicationBinding,
1227
+ sourceRevocationEpoch: record.sourceRevocationEpoch,
1228
+ participantIds,
1229
+ targetMaterialActivation,
1230
+ targetClientRecipientPublicKeyB64u,
1231
+ targetSigningWorkerRecipientPublicKeyB64u,
1232
+ sourceRegisteredPublicKeyB64u: parseEd25519PublicKeyB64u(record.sourceRegisteredPublicKeyB64u, "sourceRegisteredPublicKeyB64u")
1233
+ };
1234
+ }
1235
+ function parseEd25519Contribution(record) {
1236
+ exactRecord$1(record, [
1237
+ "kind",
1238
+ "keyFamily",
1239
+ "linkSessionId",
1240
+ "enrollmentId",
1241
+ "sourceAuthorityId",
1242
+ "walletKeyId",
1243
+ "targetDeviceId",
1244
+ "targetFactorVerificationDigestB64u",
1245
+ "targetMaterialActivation",
1246
+ "targetClientRecipientPublicKeyB64u",
1247
+ "targetSigningWorkerRecipientPublicKeyB64u",
1248
+ "sourceBinding",
1249
+ "reservationId",
1250
+ "targetBinding",
1251
+ "activationReceipt",
1252
+ "participantIds",
1253
+ "deriver_a_client_package",
1254
+ "deriver_b_client_package",
1255
+ "sourceRegisteredPublicKeyB64u"
1256
+ ], "linked-device Ed25519 source contribution");
1257
+ if (record.kind !== "linked_device_ed25519_source_contribution_v1") throw new Error("linked-device Ed25519 source contribution kind is invalid");
1258
+ if (record.keyFamily !== "ed25519") throw new Error("linked-device Ed25519 source contribution family is invalid");
1259
+ const sourceBinding = parseRegistrationBinding(record.sourceBinding, "sourceBinding");
1260
+ const targetMaterialActivation = parseActivation$1(record.targetMaterialActivation, "source contribution targetMaterialActivation");
1261
+ const targetBinding = parseRegistrationBinding(record.targetBinding, "targetBinding");
1262
+ const activationReceipt = parseRouterAbEd25519YaoActivationPublicReceiptV1(record.activationReceipt);
1263
+ const reservationId = requireText(record.reservationId, "reservationId");
1264
+ const participantIds = parseRouterAbEd25519YaoParticipantIdsV1(record.participantIds);
1265
+ const linkSessionId = parseSessionId(record.linkSessionId);
1266
+ const enrollmentId = parseEnrollmentId(record.enrollmentId);
1267
+ const sourceAuthorityId = parseAuthorityId(record.sourceAuthorityId);
1268
+ const walletKeyId = parseWalletKeyIdField(record.walletKeyId);
1269
+ const targetDeviceId = parseDeviceIdField(record.targetDeviceId);
1270
+ const targetFactorVerificationDigestB64u = parseDigestField(record.targetFactorVerificationDigestB64u, "targetFactorVerificationDigestB64u");
1271
+ const targetClientRecipientPublicKeyB64u = parseFixedBase64(record.targetClientRecipientPublicKeyB64u, 32, "targetClientRecipientPublicKeyB64u");
1272
+ const targetSigningWorkerRecipientPublicKeyB64u = parseFixedBase64(record.targetSigningWorkerRecipientPublicKeyB64u, 32, "targetSigningWorkerRecipientPublicKeyB64u");
1273
+ if (targetClientRecipientPublicKeyB64u === targetSigningWorkerRecipientPublicKeyB64u) throw new Error("linked-device Ed25519 source contribution recipients must differ");
1274
+ assertSourceBindingContext(sourceBinding, linkSessionId, "sourceBinding");
1275
+ assertBindingContext(targetBinding, linkSessionId, targetMaterialActivation, "targetBinding");
1276
+ if (!sameEdStableIdentity(sourceBinding, targetBinding)) throw new Error("linked-device Ed25519 source contribution stable identity differs");
1277
+ if (!mpcMaterialActivationRefsEqual(routerAbMpcMaterialActivationRefFromWire(activationReceipt.material_activation), targetMaterialActivation)) throw new Error("linked-device Ed25519 source contribution receipt activation differs");
1278
+ const sourceRegisteredPublicKeyB64u = parseEd25519PublicKeyB64u(record.sourceRegisteredPublicKeyB64u, "sourceRegisteredPublicKeyB64u");
1279
+ if (!sameBytes$1(activationReceipt.registered_public_key, Array.from(base64UrlDecode(sourceRegisteredPublicKeyB64u)))) throw new Error("linked-device Ed25519 source contribution receipt public key differs");
1280
+ const deriverA = parseEd25519ClientPackage$1(record.deriver_a_client_package, "deriver_a");
1281
+ const deriverB = parseEd25519ClientPackage$1(record.deriver_b_client_package, "deriver_b");
1282
+ if (!sameBytes$1(activationReceipt.transcript, deriverA.transcript) || !sameBytes$1(activationReceipt.transcript, deriverB.transcript)) throw new Error("linked-device Ed25519 source contribution package transcript differs");
1283
+ if (sourceBinding.material_activation.activation_id === targetMaterialActivation.activationId) throw new Error("linked-device Ed25519 source contribution reuses the source activation");
1284
+ return {
1285
+ kind: "linked_device_ed25519_source_contribution_v1",
1286
+ keyFamily: "ed25519",
1287
+ linkSessionId,
1288
+ enrollmentId,
1289
+ sourceAuthorityId,
1290
+ walletKeyId,
1291
+ targetDeviceId,
1292
+ targetFactorVerificationDigestB64u,
1293
+ targetMaterialActivation,
1294
+ targetClientRecipientPublicKeyB64u,
1295
+ targetSigningWorkerRecipientPublicKeyB64u,
1296
+ sourceBinding,
1297
+ reservationId,
1298
+ targetBinding,
1299
+ activationReceipt,
1300
+ participantIds,
1301
+ deriver_a_client_package: deriverA,
1302
+ deriver_b_client_package: deriverB,
1303
+ sourceRegisteredPublicKeyB64u
1304
+ };
1305
+ }
1306
+ function parseEcdsaContribution(record) {
1307
+ exactRecord$1(record, [
1308
+ "kind",
1309
+ "keyFamily",
1310
+ "linkSessionId",
1311
+ "enrollmentId",
1312
+ "sourceAuthorityId",
1313
+ "walletKeyId",
1314
+ "targetDeviceId",
1315
+ "targetFactorVerificationDigestB64u",
1316
+ "sourceSigner",
1317
+ "sourceDerivation",
1318
+ "target",
1319
+ "package"
1320
+ ], "linked-device ECDSA source contribution");
1321
+ if (record.kind !== "linked_device_ecdsa_source_contribution_v1") throw new Error("linked-device ECDSA source contribution kind is invalid");
1322
+ if (record.keyFamily !== "ecdsa_secp256k1") throw new Error("linked-device ECDSA source contribution family is invalid");
1323
+ const linkSessionId = parseSessionId(record.linkSessionId);
1324
+ const enrollmentId = parseEnrollmentId(record.enrollmentId);
1325
+ const sourceAuthorityId = parseAuthorityId(record.sourceAuthorityId);
1326
+ const walletKeyId = parseWalletKeyIdField(record.walletKeyId);
1327
+ const targetDeviceId = parseDeviceIdField(record.targetDeviceId);
1328
+ const targetFactorVerificationDigestB64u = parseDigestField(record.targetFactorVerificationDigestB64u, "targetFactorVerificationDigestB64u");
1329
+ const sourceSigner = parseEcdsaSourceSigner(record.sourceSigner);
1330
+ const sourceDerivation = parseLinkedDeviceEcdsaSourceDerivationV1(record.sourceDerivation);
1331
+ const target = parseEcdsaTarget(record.target);
1332
+ assertEcdsaSourceTargetActivations(sourceSigner.activation, target.activation);
1333
+ const packageValue = parseLinkedDeviceEcdsaSourceContributionPackageV1(record.package);
1334
+ if (packageValue.binding.linkSessionId !== linkSessionId || packageValue.binding.enrollmentId !== enrollmentId || packageValue.binding.sourceAuthorityId !== sourceAuthorityId || packageValue.binding.target.targetDeviceId !== targetDeviceId || packageValue.binding.target.targetFactorVerificationDigestB64u !== targetFactorVerificationDigestB64u) throw new Error("linked-device ECDSA source contribution package binding differs");
1335
+ if (!sameEcdsaSourceSigner(packageValue.binding.source, sourceSigner)) throw new Error("linked-device ECDSA source contribution signer differs from package binding");
1336
+ if (!sameEcdsaTarget(packageValue.binding.target, target)) throw new Error("linked-device ECDSA source contribution target differs from package binding");
1337
+ return {
1338
+ kind: "linked_device_ecdsa_source_contribution_v1",
1339
+ keyFamily: "ecdsa_secp256k1",
1340
+ linkSessionId,
1341
+ enrollmentId,
1342
+ sourceAuthorityId,
1343
+ walletKeyId,
1344
+ targetDeviceId,
1345
+ targetFactorVerificationDigestB64u,
1346
+ sourceSigner,
1347
+ sourceDerivation,
1348
+ target,
1349
+ package: packageValue
1350
+ };
1351
+ }
1352
+ function parseLinkedDeviceEcdsaSourceDerivationV1(raw) {
1353
+ const record = exactRecord$1(raw, [
1354
+ "applicationBindingDigestB64u",
1355
+ "clientShareRetryCounter",
1356
+ "ecdsaThresholdKeyId",
1357
+ "sourceNormalSigning"
1358
+ ], "linked-device ECDSA source derivation");
1359
+ const clientShareRetryCounter = record.clientShareRetryCounter;
1360
+ if (typeof clientShareRetryCounter !== "number" || !Number.isSafeInteger(clientShareRetryCounter) || clientShareRetryCounter < 0) throw new Error("linked-device ECDSA source derivation retry counter is invalid");
1361
+ const applicationBindingDigestB64u = parseDigestField(record.applicationBindingDigestB64u, "sourceDerivation.applicationBindingDigestB64u");
1362
+ const sourceNormalSigning = requireRouterAbEcdsaDerivationNormalSigningStateV1(record.sourceNormalSigning);
1363
+ const ecdsaThresholdKeyId = parseSdkEcdsaDerivationThresholdKeyId(record.ecdsaThresholdKeyId);
1364
+ if (sourceNormalSigning.scope.context.application_binding_digest_b64u !== applicationBindingDigestB64u || sourceNormalSigning.scope.public_identity.client_share_retry_counter !== clientShareRetryCounter || sourceNormalSigning.scope.ecdsa_threshold_key_id !== ecdsaThresholdKeyId) throw new Error("linked-device ECDSA source derivation differs from normal signing");
1365
+ return {
1366
+ applicationBindingDigestB64u,
1367
+ clientShareRetryCounter,
1368
+ ecdsaThresholdKeyId,
1369
+ sourceNormalSigning
1370
+ };
1371
+ }
1372
+ function parseLinkedDeviceEcdsaSourcePreservingActivationReceiptV1(raw) {
1373
+ const record = exactRecord$1(raw, [
1374
+ "state",
1375
+ "binding",
1376
+ "sourceDerivation",
1377
+ "targetRelayerPublicKey33B64u",
1378
+ "thresholdPublicKey33B64u",
1379
+ "thresholdEthereumAddress20B64u",
1380
+ "normalSigning"
1381
+ ], "linked-device ECDSA source-preserving activation receipt");
1382
+ if (record.state !== "inactive") throw new Error("linked-device ECDSA source-preserving activation receipt is not inactive");
1383
+ const binding = parseLinkedDeviceEcdsaSourceContributionBindingV1(record.binding);
1384
+ const sourceDerivation = parseLinkedDeviceEcdsaSourceDerivationV1(record.sourceDerivation);
1385
+ const targetRelayerPublicKey33B64u = parseSecp256k1CompressedPublicKeyB64u(record.targetRelayerPublicKey33B64u, "targetRelayerPublicKey33B64u");
1386
+ const thresholdPublicKey33B64u = parseSecp256k1CompressedPublicKeyB64u(record.thresholdPublicKey33B64u, "thresholdPublicKey33B64u");
1387
+ const thresholdEthereumAddress20B64u = parseFixedBase64(record.thresholdEthereumAddress20B64u, 20, "thresholdEthereumAddress20B64u");
1388
+ const normalSigning = requireRouterAbEcdsaDerivationNormalSigningStateV1(record.normalSigning);
1389
+ assertLinkedDeviceEcdsaNormalSigningReceipt({
1390
+ binding,
1391
+ sourceDerivation,
1392
+ targetRelayerPublicKey33B64u,
1393
+ thresholdPublicKey33B64u,
1394
+ thresholdEthereumAddress20B64u,
1395
+ normalSigning
1396
+ });
1397
+ return {
1398
+ state: "inactive",
1399
+ binding,
1400
+ sourceDerivation,
1401
+ targetRelayerPublicKey33B64u,
1402
+ thresholdPublicKey33B64u,
1403
+ thresholdEthereumAddress20B64u,
1404
+ normalSigning
1405
+ };
1406
+ }
1407
+ function assertLinkedDeviceEcdsaNormalSigningReceipt(input) {
1408
+ const source = input.sourceDerivation.sourceNormalSigning.scope;
1409
+ const target = input.normalSigning.scope;
1410
+ if (!mpcMaterialActivationRefsEqual(routerAbMpcMaterialActivationRefFromWire(source.material_activation), input.binding.source.activation) || !mpcMaterialActivationRefsEqual(routerAbMpcMaterialActivationRefFromWire(target.material_activation), input.binding.target.activation) || source.wallet_id !== target.wallet_id || source.wallet_id !== input.binding.source.activation.materialOwner || target.wallet_id !== input.binding.target.activation.materialOwner || source.ecdsa_threshold_key_id !== target.ecdsa_threshold_key_id || source.signing_root_id !== target.signing_root_id || source.signing_root_version !== target.signing_root_version || source.context.application_binding_digest_b64u !== target.context.application_binding_digest_b64u || source.activation_epoch !== target.activation_epoch || source.public_identity.derivation_client_share_public_key33_b64u !== input.binding.source.clientPublicKey33B64u || source.public_identity.server_public_key33_b64u !== input.binding.source.relayerPublicKey33B64u || source.public_identity.threshold_public_key33_b64u !== input.binding.source.thresholdPublicKey33B64u || source.public_identity.ethereum_address20_b64u !== input.binding.source.thresholdEthereumAddress20B64u || target.public_identity.context_binding_b64u !== source.public_identity.context_binding_b64u || target.public_identity.derivation_client_share_public_key33_b64u !== input.binding.targetClientPublicKey33B64u || target.public_identity.server_public_key33_b64u !== input.targetRelayerPublicKey33B64u || target.public_identity.threshold_public_key33_b64u !== input.thresholdPublicKey33B64u || target.public_identity.ethereum_address20_b64u !== input.thresholdEthereumAddress20B64u || target.public_identity.client_share_retry_counter !== source.public_identity.client_share_retry_counter || target.public_identity.server_share_retry_counter !== source.public_identity.server_share_retry_counter || target.signing_worker.server_id !== input.binding.target.activation.signingWorker || target.signing_worker.key_epoch !== source.signing_worker.key_epoch || target.signing_worker.recipient_encryption_key !== routerAbX25519PublicKeyFromB64u(input.binding.target.signingWorkerRecipientPublicKeyB64u)) throw new Error("linked-device ECDSA normal signing state differs from its activation receipt");
1411
+ }
1412
+ function routerAbX25519PublicKeyFromB64u(value) {
1413
+ const bytes = base64UrlDecode(value);
1414
+ if (bytes.length !== 32 || base64UrlEncode(bytes) !== value) throw new Error("linked-device signing-worker recipient key is invalid");
1415
+ let hex = "";
1416
+ for (const byte of bytes) hex += byte.toString(16).padStart(2, "0");
1417
+ return `x25519:${hex}`;
1418
+ }
1419
+ function parseEd25519ClientPackage$1(raw, role) {
1420
+ const packageValue = parseRouterPackage(raw, `${role} client package`);
1421
+ if (packageValue.kind !== "activation_client" || packageValue.deriver !== role) throw new Error(`${role} client package is not an activation client package`);
1422
+ if (role === "deriver_a") return {
1423
+ kind: "activation_client",
1424
+ deriver: "deriver_a",
1425
+ session: packageValue.session,
1426
+ transcript: packageValue.transcript,
1427
+ encapsulated_key: packageValue.encapsulated_key,
1428
+ ciphertext: packageValue.ciphertext
1429
+ };
1430
+ return {
1431
+ kind: "activation_client",
1432
+ deriver: "deriver_b",
1433
+ session: packageValue.session,
1434
+ transcript: packageValue.transcript,
1435
+ encapsulated_key: packageValue.encapsulated_key,
1436
+ ciphertext: packageValue.ciphertext
1437
+ };
1438
+ }
1439
+ function parseRouterPackage(raw, label) {
1440
+ const parsed = parseRouterAbEd25519YaoEncryptedPackageV1(raw);
1441
+ if (!parsed.ok) throw new Error(`${label} ${parsed.message}`);
1442
+ return parsed.value;
1443
+ }
1444
+ function parseLinkedDeviceEcdsaSourceContributionPackageV1(raw) {
1445
+ const record = exactRecord$1(raw, [
1446
+ "binding",
1447
+ "encryptedDelta",
1448
+ "encryptedTargetClientShare"
1449
+ ], "linked-device ECDSA source contribution package");
1450
+ const binding = parseLinkedDeviceEcdsaSourceContributionBindingV1(record.binding);
1451
+ const encryptedDelta = parseLinkedDeviceEcdsaEncryptedSourceContributionV1(record.encryptedDelta, "encryptedDelta");
1452
+ const encryptedTargetClientShare = parseLinkedDeviceEcdsaEncryptedSourceContributionV1(record.encryptedTargetClientShare, "encryptedTargetClientShare");
1453
+ const bindingDigest = encryptedDelta.bindingDigestB64u;
1454
+ if (encryptedTargetClientShare.bindingDigestB64u !== bindingDigest) throw new Error("linked-device ECDSA source contribution envelope bindings differ");
1455
+ if (encryptedDelta.recipientPublicKeyB64u !== binding.target.signingWorkerRecipientPublicKeyB64u || encryptedTargetClientShare.recipientPublicKeyB64u !== binding.target.clientRecipientPublicKeyB64u) throw new Error("linked-device ECDSA source contribution envelope recipients differ");
1456
+ return {
1457
+ binding,
1458
+ encryptedDelta,
1459
+ encryptedTargetClientShare
1460
+ };
1461
+ }
1462
+ function parseLinkedDeviceEcdsaSourceContributionBindingV1(raw) {
1463
+ const record = exactRecord$1(raw, [
1464
+ "linkSessionId",
1465
+ "enrollmentId",
1466
+ "sourceAuthorityId",
1467
+ "source",
1468
+ "target",
1469
+ "targetClientPublicKey33B64u"
1470
+ ], "linked-device ECDSA source contribution binding");
1471
+ const source = parseEcdsaSourceSigner(record.source);
1472
+ const target = parseEcdsaTarget(record.target);
1473
+ assertEcdsaSourceTargetActivations(source.activation, target.activation);
1474
+ return {
1475
+ linkSessionId: requireText(record.linkSessionId, "binding.linkSessionId"),
1476
+ enrollmentId: requireText(record.enrollmentId, "binding.enrollmentId"),
1477
+ sourceAuthorityId: requireText(record.sourceAuthorityId, "binding.sourceAuthorityId"),
1478
+ source,
1479
+ target,
1480
+ targetClientPublicKey33B64u: parseSecp256k1CompressedPublicKeyB64u(record.targetClientPublicKey33B64u, "binding.targetClientPublicKey33B64u")
1481
+ };
1482
+ }
1483
+ function parseEcdsaSourceSigner(raw) {
1484
+ const record = exactRecord$1(raw, [
1485
+ "activation",
1486
+ "clientPublicKey33B64u",
1487
+ "relayerPublicKey33B64u",
1488
+ "thresholdPublicKey33B64u",
1489
+ "thresholdEthereumAddress20B64u"
1490
+ ], "linked-device ECDSA source signer");
1491
+ return {
1492
+ activation: parseActivation$1(record.activation, "source.activation"),
1493
+ clientPublicKey33B64u: parseSecp256k1CompressedPublicKeyB64u(record.clientPublicKey33B64u, "source.clientPublicKey33B64u"),
1494
+ relayerPublicKey33B64u: parseSecp256k1CompressedPublicKeyB64u(record.relayerPublicKey33B64u, "source.relayerPublicKey33B64u"),
1495
+ thresholdPublicKey33B64u: parseSecp256k1CompressedPublicKeyB64u(record.thresholdPublicKey33B64u, "source.thresholdPublicKey33B64u"),
1496
+ thresholdEthereumAddress20B64u: parseFixedBase64(record.thresholdEthereumAddress20B64u, 20, "source.thresholdEthereumAddress20B64u")
1497
+ };
1498
+ }
1499
+ function parseEcdsaTarget(raw) {
1500
+ const record = exactRecord$1(raw, [
1501
+ "activation",
1502
+ "targetDeviceId",
1503
+ "targetFactorVerificationDigestB64u",
1504
+ "clientRecipientPublicKeyB64u",
1505
+ "signingWorkerRecipientPublicKeyB64u"
1506
+ ], "linked-device ECDSA target recipient");
1507
+ const clientRecipientPublicKeyB64u = parseFixedBase64(record.clientRecipientPublicKeyB64u, 32, "target.clientRecipientPublicKeyB64u");
1508
+ const signingWorkerRecipientPublicKeyB64u = parseFixedBase64(record.signingWorkerRecipientPublicKeyB64u, 32, "target.signingWorkerRecipientPublicKeyB64u");
1509
+ if (clientRecipientPublicKeyB64u === signingWorkerRecipientPublicKeyB64u) throw new Error("linked-device ECDSA target recipients must differ");
1510
+ return {
1511
+ activation: parseActivation$1(record.activation, "target.activation"),
1512
+ targetDeviceId: parseDeviceIdField(record.targetDeviceId),
1513
+ targetFactorVerificationDigestB64u: parseDigestField(record.targetFactorVerificationDigestB64u, "target.targetFactorVerificationDigestB64u"),
1514
+ clientRecipientPublicKeyB64u,
1515
+ signingWorkerRecipientPublicKeyB64u
1516
+ };
1517
+ }
1518
+ function parseLinkedDeviceEcdsaEncryptedSourceContributionV1(raw, label) {
1519
+ const record = exactRecord$1(raw, [
1520
+ "kind",
1521
+ "recipientPublicKeyB64u",
1522
+ "bindingDigestB64u",
1523
+ "encappedKeyB64u",
1524
+ "ciphertextB64u"
1525
+ ], `linked-device ECDSA ${label}`);
1526
+ if (record.kind !== LINKED_DEVICE_ECDSA_SOURCE_CONTRIBUTION_ENVELOPE_KIND_V1) throw new Error(`${label}.kind is invalid`);
1527
+ return {
1528
+ kind: LINKED_DEVICE_ECDSA_SOURCE_CONTRIBUTION_ENVELOPE_KIND_V1,
1529
+ recipientPublicKeyB64u: parseFixedBase64(record.recipientPublicKeyB64u, 32, `${label}.recipientPublicKeyB64u`),
1530
+ bindingDigestB64u: parseDigestField(record.bindingDigestB64u, `${label}.bindingDigestB64u`),
1531
+ encappedKeyB64u: parseFixedBase64(record.encappedKeyB64u, 32, `${label}.encappedKeyB64u`),
1532
+ ciphertextB64u: parseEnvelopeCiphertextB64u(record.ciphertextB64u, `${label}.ciphertextB64u`)
1533
+ };
1534
+ }
1535
+ function parseRegistrationBinding(raw, label) {
1536
+ const binding = parseRouterAbEd25519YaoCeremonyBindingV1(raw);
1537
+ if (binding.operation !== "registration") throw new Error(`${label} must use the registration operation`);
1538
+ return binding;
1539
+ }
1540
+ function assertBindingContext(binding, linkSessionId, targetMaterialActivation, label) {
1541
+ if (binding.material_activation.activation_id !== targetMaterialActivation.activationId) throw new Error(`${label} activation does not match the target activation`);
1542
+ if (binding.material_activation.material_owner !== targetMaterialActivation.materialOwner) throw new Error(`${label} material owner does not match the target activation`);
1543
+ if (binding.material_activation.signing_worker !== targetMaterialActivation.signingWorker) throw new Error(`${label} signing worker does not match the target activation`);
1544
+ if (binding.session_id.length !== 32 || String(linkSessionId).length === 0) throw new Error(`${label} link binding is invalid`);
1545
+ }
1546
+ function assertSourceBindingContext(binding, linkSessionId, label) {
1547
+ if (binding.session_id.length !== 32 || String(linkSessionId).length === 0) throw new Error(`${label} link binding is invalid`);
1548
+ }
1549
+ function sameEdStableIdentity(left, right) {
1550
+ return left.operation === right.operation && left.stable_key_context_binding.every((value, index) => value === right.stable_key_context_binding[index]) && left.material_activation.capability === right.material_activation.capability && left.material_activation.material_owner === right.material_activation.material_owner && left.material_activation.key_binding === right.material_activation.key_binding && left.material_activation.lifecycle_binding === right.material_activation.lifecycle_binding && left.material_activation.signing_worker === right.material_activation.signing_worker && left.lifecycle.root_share_epoch === right.lifecycle.root_share_epoch && left.lifecycle.account_id === right.lifecycle.account_id && left.lifecycle.signer_set_id === right.lifecycle.signer_set_id && left.lifecycle.selected_server_id === right.lifecycle.selected_server_id;
1551
+ }
1552
+ function sameEcdsaSourceSigner(left, right) {
1553
+ return mpcMaterialActivationRefsEqual(left.activation, right.activation) && left.clientPublicKey33B64u === right.clientPublicKey33B64u && left.relayerPublicKey33B64u === right.relayerPublicKey33B64u && left.thresholdPublicKey33B64u === right.thresholdPublicKey33B64u && left.thresholdEthereumAddress20B64u === right.thresholdEthereumAddress20B64u;
1554
+ }
1555
+ function assertEcdsaSourceTargetActivations(source, target) {
1556
+ if (mpcMaterialActivationRefsEqual(source, target) || source.materialOwner !== target.materialOwner || source.signingWorker !== target.signingWorker) throw new Error("linked-device ECDSA source and target activations are invalid");
1557
+ }
1558
+ function sameEcdsaTarget(left, right) {
1559
+ return mpcMaterialActivationRefsEqual(left.activation, right.activation) && left.targetDeviceId === right.targetDeviceId && left.targetFactorVerificationDigestB64u === right.targetFactorVerificationDigestB64u && left.clientRecipientPublicKeyB64u === right.clientRecipientPublicKeyB64u && left.signingWorkerRecipientPublicKeyB64u === right.signingWorkerRecipientPublicKeyB64u;
1560
+ }
1561
+ function parseActivation$1(raw, label) {
1562
+ const parsed = parseMpcMaterialActivationRef(raw);
1563
+ if (!parsed.ok) throw new Error(`${label} ${parsed.error.message}`);
1564
+ return parsed.value;
1565
+ }
1566
+ function parseSessionId(raw) {
1567
+ const parsed = parseLinkDeviceSessionId(requireText(raw, "linkSessionId"));
1568
+ if (!parsed.ok) throw new Error(`linkSessionId ${parsed.error.message}`);
1569
+ return parsed.value;
1570
+ }
1571
+ function parseEnrollmentId(raw) {
1572
+ const parsed = parseLinkedDeviceEnrollmentId(requireText(raw, "enrollmentId"));
1573
+ if (!parsed.ok) throw new Error(`enrollmentId ${parsed.error.message}`);
1574
+ return parsed.value;
1575
+ }
1576
+ function parseAuthorityId(raw) {
1577
+ const parsed = parseWalletAuthorityId(requireText(raw, "sourceAuthorityId"));
1578
+ if (!parsed.ok) throw new Error(`sourceAuthorityId ${parsed.error.message}`);
1579
+ return parsed.value;
1580
+ }
1581
+ function parseWalletKeyIdField(raw) {
1582
+ const parsed = parseWalletKeyId(requireText(raw, "walletKeyId"));
1583
+ if (!parsed.ok) throw new Error(`walletKeyId ${parsed.error.message}`);
1584
+ return parsed.value;
1585
+ }
1586
+ function parseDeviceIdField(raw) {
1587
+ const parsed = parseDeviceId(requireText(raw, "targetDeviceId"));
1588
+ if (!parsed.ok) throw new Error(`targetDeviceId ${parsed.error.message}`);
1589
+ return parsed.value;
1590
+ }
1591
+ function parseDigestField(raw, label) {
1592
+ try {
1593
+ return parseDigestB64u(raw);
1594
+ } catch (error) {
1595
+ throw new Error(`${label} ${error instanceof Error ? error.message : "is invalid"}`);
1596
+ }
1597
+ }
1598
+ function parseFixedBase64(raw, byteLength, label) {
1599
+ if (typeof raw !== "string" || !/^[A-Za-z0-9_-]+$/.test(raw)) throw new Error(`${label} must be canonical base64url`);
1600
+ let decoded;
1601
+ try {
1602
+ decoded = base64UrlDecode(raw);
1603
+ } catch {
1604
+ throw new Error(`${label} must be canonical base64url`);
1605
+ }
1606
+ if (decoded.length !== byteLength || base64UrlEncode(decoded) !== raw) throw new Error(`${label} must decode to ${byteLength} bytes`);
1607
+ return raw;
1608
+ }
1609
+ function sameBytes$1(left, right) {
1610
+ return left.length === right.length && left.every((value, index) => value === right[index]);
1611
+ }
1612
+ function requireText(raw, label) {
1613
+ if (typeof raw !== "string" || raw.length === 0 || raw.trim() !== raw || [...raw].some((character) => {
1614
+ const code = character.charCodeAt(0);
1615
+ return code < 32 || code === 127;
1616
+ })) throw new Error(`${label} must be a non-empty visible string`);
1617
+ return raw;
1618
+ }
1619
+ function exactRecord$1(raw, keys, label) {
1620
+ const record = requireRecordCopy(raw, label);
1621
+ const expected = new Set(keys);
1622
+ const actual = Object.keys(record);
1623
+ if (actual.length !== keys.length || actual.some((key) => !expected.has(key)) || keys.some((key) => !Object.prototype.hasOwnProperty.call(record, key))) throw new Error(`${label} contains unknown or missing fields`);
1624
+ return record;
1625
+ }
1626
+ //#endregion
1627
+ //#region ../shared-ts/src/device-linking/committedSignerPackages.ts
1628
+ function parseCommittedAuthorityPackagesV1(raw) {
1629
+ const record = parseCommittedAuthorityPackagesWireV1(raw);
1630
+ if (record.kind !== "committed_authority_packages_v1") throw new Error("CommittedAuthorityPackagesV1.kind is invalid");
1631
+ const authority = parseWalletAuthorityV1(record.authority);
1632
+ if (!authority.ok || authority.value.state !== "pending_local_install") throw new Error("CommittedAuthorityPackagesV1.authority is not pending");
1633
+ const authMethod = parseWalletAuthMethodRecordV2(record.authMethod);
1634
+ if (!authMethod || authMethod.status !== "pending_local_install") throw new Error("CommittedAuthorityPackagesV1.authMethod is not pending");
1635
+ if (authMethod.walletId !== authority.value.walletId || authMethod.walletAuthorityId !== authority.value.authorityId) throw new Error("CommittedAuthorityPackagesV1 authority and auth method identities differ");
1636
+ const signerPackages = parseCommittedSignerPackageSetV1(record.signerPackages);
1637
+ assertSignerPackagesMatchAuthority(signerPackages, authority.value.signerActivations);
1638
+ const ed25519ExportRootPackage = record.ed25519ExportRootPackage === null ? null : parseLinkedDeviceEd25519ExportRootPackageV1(record.ed25519ExportRootPackage);
1639
+ if (ed25519ExportRootPackage) {
1640
+ if (ed25519ExportRootPackage.walletId !== authority.value.walletId || ed25519ExportRootPackage.revocationEpoch !== authority.value.revocationEpoch || authority.value.provenance.kind !== "device_link" || ed25519ExportRootPackage.enrollmentId !== authority.value.provenance.enrollmentId || ed25519ExportRootPackage.linkSessionId !== authority.value.provenance.linkSessionId || String(ed25519ExportRootPackage.deviceId) !== String(authority.value.principal.deviceId)) throw new Error("CommittedAuthorityPackagesV1 export root identity does not match authority");
1641
+ }
1642
+ return {
1643
+ kind: "committed_authority_packages_v1",
1644
+ authority: authority.value,
1645
+ authMethod,
1646
+ signerPackages,
1647
+ ed25519ExportRootPackage,
1648
+ packageSetDigestB64u: parseCommittedSignerPackageSetDigestB64u(record.packageSetDigestB64u)
1649
+ };
1650
+ }
1651
+ function assertSignerPackagesMatchAuthority(packages, activations) {
1652
+ if (packages.keyFamilies.length !== activations.keyFamilies.length) throw new Error("CommittedAuthorityPackagesV1 signer families do not match authority");
1653
+ for (let index = 0; index < packages.keyFamilies.length; index += 1) if (packages.keyFamilies[index] !== activations.keyFamilies[index]) throw new Error("CommittedAuthorityPackagesV1 signer family order does not match authority");
1654
+ if (packages.keyFamilies.length === 1 && packages.keyFamilies[0] === "ed25519") {
1655
+ if (!activations.ed25519 || !packages.ed25519) throw new Error("CommittedAuthorityPackagesV1 Ed25519 activation is missing");
1656
+ if (!mpcMaterialActivationRefsEqual(packages.ed25519.materialActivation, activations.ed25519.materialActivation)) throw new Error("CommittedAuthorityPackagesV1 Ed25519 activation does not match authority");
1657
+ return;
1658
+ }
1659
+ if (packages.keyFamilies.length === 1 && packages.keyFamilies[0] === "ecdsa_secp256k1") {
1660
+ if (!activations.ecdsa || !packages.ecdsa) throw new Error("CommittedAuthorityPackagesV1 ECDSA activation is missing");
1661
+ if (!mpcMaterialActivationRefsEqual(packages.ecdsa.materialActivation, activations.ecdsa.materialActivation)) throw new Error("CommittedAuthorityPackagesV1 ECDSA activation does not match authority");
1662
+ return;
1663
+ }
1664
+ if (!activations.ed25519 || !activations.ecdsa || !packages.ed25519 || !packages.ecdsa) throw new Error("CommittedAuthorityPackagesV1 combined activations are incomplete");
1665
+ if (!mpcMaterialActivationRefsEqual(packages.ed25519.materialActivation, activations.ed25519.materialActivation) || !mpcMaterialActivationRefsEqual(packages.ecdsa.materialActivation, activations.ecdsa.materialActivation)) throw new Error("CommittedAuthorityPackagesV1 activation references do not match authority");
1666
+ }
1667
+ function parseCommittedSignerPackageSetV1(raw) {
1668
+ const record = parseCommittedSignerPackageSetWireV1(raw);
1669
+ if (record.kind !== "committed_signer_package_set_v1") throw new Error("CommittedSignerPackageSetV1.kind is invalid");
1670
+ const keyFamilies = parseKeyFamilies(record.keyFamilies);
1671
+ if (keyFamilies.length === 1 && keyFamilies[0] === "ed25519") {
1672
+ if (!("ed25519" in record)) throw new Error("CommittedSignerPackageSetV1 fields are invalid");
1673
+ return {
1674
+ kind: "committed_signer_package_set_v1",
1675
+ keyFamilies,
1676
+ ed25519: parseEd25519Package(record.ed25519)
1677
+ };
1678
+ }
1679
+ if (keyFamilies.length === 1 && keyFamilies[0] === "ecdsa_secp256k1") {
1680
+ if (!("ecdsa" in record)) throw new Error("CommittedSignerPackageSetV1 fields are invalid");
1681
+ return {
1682
+ kind: "committed_signer_package_set_v1",
1683
+ keyFamilies,
1684
+ ecdsa: parseEcdsaPackage(record.ecdsa)
1685
+ };
1686
+ }
1687
+ if (!("ed25519" in record) || !("ecdsa" in record)) throw new Error("CommittedSignerPackageSetV1 fields are invalid");
1688
+ const ed25519 = parseEd25519Package(record.ed25519);
1689
+ const ecdsa = parseEcdsaPackage(record.ecdsa);
1690
+ if (ed25519.materialActivation.activationId === ecdsa.materialActivation.activationId) throw new Error("CommittedSignerPackageSetV1 activation references must be distinct");
1691
+ return {
1692
+ kind: "committed_signer_package_set_v1",
1693
+ keyFamilies,
1694
+ ed25519,
1695
+ ecdsa
1696
+ };
1697
+ }
1698
+ function parseCommittedSignerPackageSetDigestB64u(raw) {
1699
+ return parseDigestB64u(raw);
1700
+ }
1701
+ function parseEd25519Package(raw) {
1702
+ const record = parseCommittedEd25519SignerPackageWireV1(raw);
1703
+ if (record.kind !== "committed_ed25519_signer_package_v1") throw new Error("CommittedEd25519SignerPackageV1.kind is invalid");
1704
+ const materialActivation = parseActivation(record.materialActivation, "materialActivation");
1705
+ const targetBinding = parseRouterAbEd25519YaoCeremonyBindingV1(record.targetBinding);
1706
+ const applicationBinding = parseRouterAbEd25519YaoApplicationBindingFactsV1(record.applicationBinding);
1707
+ const activationReceipt = parseRouterAbEd25519YaoActivationPublicReceiptV1(record.activationReceipt);
1708
+ if (!mpcMaterialActivationRefsEqual(materialActivation, routerAbMpcMaterialActivationRefFromWire(activationReceipt.material_activation))) throw new Error("CommittedEd25519SignerPackageV1 activation receipt does not match material");
1709
+ if (!mpcMaterialActivationRefsEqual(materialActivation, routerAbMpcMaterialActivationRefFromWire(targetBinding.material_activation))) throw new Error("CommittedEd25519SignerPackageV1 target binding does not match material");
1710
+ const deriverA = parseEd25519ClientPackage(record.deriver_a_client_package, "deriver_a_client_package", "deriver_a");
1711
+ const deriverB = parseEd25519ClientPackage(record.deriver_b_client_package, "deriver_b_client_package", "deriver_b");
1712
+ if (!sameBytes(activationReceipt.transcript, deriverA.transcript) || !sameBytes(activationReceipt.transcript, deriverB.transcript)) throw new Error("CommittedEd25519SignerPackageV1 receipt transcript does not match packages");
1713
+ return {
1714
+ kind: "committed_ed25519_signer_package_v1",
1715
+ materialActivation,
1716
+ targetBinding,
1717
+ applicationBinding,
1718
+ participantIds: parseRouterAbEd25519YaoParticipantIdsV1(record.participantIds),
1719
+ activationReceipt,
1720
+ deriver_a_client_package: deriverA,
1721
+ deriver_b_client_package: deriverB
1722
+ };
1723
+ }
1724
+ function parseEcdsaPackage(raw) {
1725
+ const record = parseCommittedEcdsaSignerPackageWireV1(raw);
1726
+ if (record.kind !== "committed_ecdsa_signer_package_v1") throw new Error("CommittedEcdsaSignerPackageV1.kind is invalid");
1727
+ const materialActivation = parseActivation(record.materialActivation, "materialActivation");
1728
+ const activationReceipt = parseLinkedDeviceEcdsaSourcePreservingActivationReceiptV1(record.activationReceipt);
1729
+ const targetActivation = activationReceipt.binding.target.activation;
1730
+ if (!mpcMaterialActivationRefsEqual(materialActivation, targetActivation)) throw new Error("CommittedEcdsaSignerPackageV1 receipt activation does not match material");
1731
+ const encryptedTargetClientShare = parseLinkedDeviceEcdsaEncryptedSourceContributionV1(record.encryptedTargetClientShare, "encryptedTargetClientShare");
1732
+ if (encryptedTargetClientShare.recipientPublicKeyB64u !== activationReceipt.binding.target.clientRecipientPublicKeyB64u) throw new Error("CommittedEcdsaSignerPackageV1 client share recipient does not match receipt");
1733
+ return {
1734
+ kind: "committed_ecdsa_signer_package_v1",
1735
+ materialActivation,
1736
+ encryptedTargetClientShare,
1737
+ activationReceipt
1738
+ };
1739
+ }
1740
+ function parseEd25519ClientPackage(raw, label, deriver) {
1741
+ const parsed = parseRouterAbEd25519YaoEncryptedPackageV1(raw);
1742
+ if (!parsed.ok) throw new Error(`${label} ${parsed.message}`);
1743
+ if (parsed.value.kind !== "activation_client" || parsed.value.deriver !== deriver) throw new Error(`${label} must be an activation_client for ${deriver}`);
1744
+ return {
1745
+ kind: "activation_client",
1746
+ deriver,
1747
+ session: parsed.value.session,
1748
+ transcript: parsed.value.transcript,
1749
+ encapsulated_key: parsed.value.encapsulated_key,
1750
+ ciphertext: parsed.value.ciphertext
1751
+ };
1752
+ }
1753
+ function parseActivation(raw, label) {
1754
+ const parsed = parseMpcMaterialActivationRef(raw);
1755
+ if (!parsed.ok) throw new Error(`${label} ${parsed.error.message}`);
1756
+ return parsed.value;
1757
+ }
1758
+ function parseKeyFamilies(raw) {
1759
+ if (!Array.isArray(raw)) throw new Error("CommittedSignerPackageSetV1.keyFamilies must be an array");
1760
+ if (raw.length === 1 && raw[0] === "ed25519") return ["ed25519"];
1761
+ if (raw.length === 1 && raw[0] === "ecdsa_secp256k1") return ["ecdsa_secp256k1"];
1762
+ if (raw.length === 2 && raw[0] === "ed25519" && raw[1] === "ecdsa_secp256k1") return ["ed25519", "ecdsa_secp256k1"];
1763
+ throw new Error("CommittedSignerPackageSetV1.keyFamilies must use canonical family order");
1764
+ }
1765
+ function parseCommittedAuthorityPackagesWireV1(raw) {
1766
+ const record = inspectRawObject(raw);
1767
+ if (record === null) throw new Error("CommittedAuthorityPackagesV1 must be an object");
1768
+ requireExactWireFields(record, [
1769
+ "kind",
1770
+ "authority",
1771
+ "authMethod",
1772
+ "signerPackages",
1773
+ "ed25519ExportRootPackage",
1774
+ "packageSetDigestB64u"
1775
+ ], "CommittedAuthorityPackagesV1");
1776
+ return {
1777
+ kind: Reflect.get(record, "kind"),
1778
+ authority: Reflect.get(record, "authority"),
1779
+ authMethod: Reflect.get(record, "authMethod"),
1780
+ signerPackages: Reflect.get(record, "signerPackages"),
1781
+ ed25519ExportRootPackage: Reflect.get(record, "ed25519ExportRootPackage"),
1782
+ packageSetDigestB64u: Reflect.get(record, "packageSetDigestB64u")
1783
+ };
1784
+ }
1785
+ function parseCommittedSignerPackageSetWireV1(raw) {
1786
+ const record = inspectRawObject(raw);
1787
+ if (record === null) throw new Error("CommittedSignerPackageSetV1 must be an object");
1788
+ const actual = Object.keys(record);
1789
+ const hasEd25519 = actual.includes("ed25519");
1790
+ const hasEcdsa = actual.includes("ecdsa");
1791
+ if (hasEd25519 && hasEcdsa) {
1792
+ requireExactWireFields(record, [
1793
+ "kind",
1794
+ "keyFamilies",
1795
+ "ed25519",
1796
+ "ecdsa"
1797
+ ], "CommittedSignerPackageSetV1");
1798
+ return {
1799
+ kind: Reflect.get(record, "kind"),
1800
+ keyFamilies: Reflect.get(record, "keyFamilies"),
1801
+ ed25519: Reflect.get(record, "ed25519"),
1802
+ ecdsa: Reflect.get(record, "ecdsa")
1803
+ };
1804
+ }
1805
+ if (hasEd25519) {
1806
+ requireExactWireFields(record, [
1807
+ "kind",
1808
+ "keyFamilies",
1809
+ "ed25519"
1810
+ ], "CommittedSignerPackageSetV1");
1811
+ return {
1812
+ kind: Reflect.get(record, "kind"),
1813
+ keyFamilies: Reflect.get(record, "keyFamilies"),
1814
+ ed25519: Reflect.get(record, "ed25519")
1815
+ };
1816
+ }
1817
+ if (hasEcdsa) {
1818
+ requireExactWireFields(record, [
1819
+ "kind",
1820
+ "keyFamilies",
1821
+ "ecdsa"
1822
+ ], "CommittedSignerPackageSetV1");
1823
+ return {
1824
+ kind: Reflect.get(record, "kind"),
1825
+ keyFamilies: Reflect.get(record, "keyFamilies"),
1826
+ ecdsa: Reflect.get(record, "ecdsa")
1827
+ };
1828
+ }
1829
+ requireExactWireFields(record, ["kind", "keyFamilies"], "CommittedSignerPackageSetV1");
1830
+ return {
1831
+ kind: Reflect.get(record, "kind"),
1832
+ keyFamilies: Reflect.get(record, "keyFamilies")
1833
+ };
1834
+ }
1835
+ function parseCommittedEd25519SignerPackageWireV1(raw) {
1836
+ const record = inspectRawObject(raw);
1837
+ if (record === null) throw new Error("CommittedEd25519SignerPackageV1 must be an object");
1838
+ requireExactWireFields(record, [
1839
+ "kind",
1840
+ "materialActivation",
1841
+ "targetBinding",
1842
+ "applicationBinding",
1843
+ "participantIds",
1844
+ "activationReceipt",
1845
+ "deriver_a_client_package",
1846
+ "deriver_b_client_package"
1847
+ ], "CommittedEd25519SignerPackageV1");
1848
+ return {
1849
+ kind: Reflect.get(record, "kind"),
1850
+ materialActivation: Reflect.get(record, "materialActivation"),
1851
+ targetBinding: Reflect.get(record, "targetBinding"),
1852
+ applicationBinding: Reflect.get(record, "applicationBinding"),
1853
+ participantIds: Reflect.get(record, "participantIds"),
1854
+ activationReceipt: Reflect.get(record, "activationReceipt"),
1855
+ deriver_a_client_package: Reflect.get(record, "deriver_a_client_package"),
1856
+ deriver_b_client_package: Reflect.get(record, "deriver_b_client_package")
1857
+ };
1858
+ }
1859
+ function parseCommittedEcdsaSignerPackageWireV1(raw) {
1860
+ const record = inspectRawObject(raw);
1861
+ if (record === null) throw new Error("CommittedEcdsaSignerPackageV1 must be an object");
1862
+ requireExactWireFields(record, [
1863
+ "kind",
1864
+ "materialActivation",
1865
+ "encryptedTargetClientShare",
1866
+ "activationReceipt"
1867
+ ], "CommittedEcdsaSignerPackageV1");
1868
+ return {
1869
+ kind: Reflect.get(record, "kind"),
1870
+ materialActivation: Reflect.get(record, "materialActivation"),
1871
+ encryptedTargetClientShare: Reflect.get(record, "encryptedTargetClientShare"),
1872
+ activationReceipt: Reflect.get(record, "activationReceipt")
1873
+ };
1874
+ }
1875
+ function inspectRawObject(raw) {
1876
+ return raw !== null && typeof raw === "object" && !Array.isArray(raw) ? raw : null;
1877
+ }
1878
+ function sameBytes(left, right) {
1879
+ return left.length === right.length && left.every((value, index) => value === right[index]);
1880
+ }
1881
+ function requireExactWireFields(record, keys, label) {
1882
+ const expected = new Set(keys);
1883
+ const actual = Object.keys(record);
1884
+ if (actual.length !== keys.length) throw new Error(`${label} contains unexpected fields`);
1885
+ for (const key of actual) if (!expected.has(key)) throw new Error(`${label} contains unexpected fields`);
1886
+ for (const key of keys) if (!Object.prototype.hasOwnProperty.call(record, key)) throw new Error(`${label}.${key} is required`);
1887
+ }
1888
+ //#endregion
1889
+ //#region ../shared-ts/src/device-linking/parsers.ts
1890
+ const QR_FIELDS = [
1891
+ "version",
1892
+ "purpose",
1893
+ "linkSessionId",
1894
+ "linkPublicKeyB64u",
1895
+ "devicePublicKeyB64u",
1896
+ "requestedPermission",
1897
+ "targetFactor",
1898
+ "issuedAtMs",
1899
+ "expiresAtMs"
1900
+ ];
1901
+ function supportedLiteral(...values) {
1902
+ return (raw, label) => {
1903
+ if (!values.includes(raw)) throw new Error(`${label} is unsupported`);
1904
+ return raw;
1905
+ };
1906
+ }
1907
+ function parseEmailHashHex(raw, label) {
1908
+ if (typeof raw !== "string" || !/^[0-9a-f]{64}$/.test(raw)) throw new Error(`${label} must be 32 canonical lowercase hex bytes`);
1909
+ return raw;
1910
+ }
1911
+ function parsePublicKey(raw, label) {
1912
+ if (typeof raw !== "string" || raw.length === 0 || !/^[A-Za-z0-9_-]+$/.test(raw)) throw new Error(`${label} must be canonical unpadded base64url`);
1913
+ try {
1914
+ const decoded = base64UrlDecode(raw);
1915
+ if (decoded.length !== 32 || base64UrlEncode(decoded) !== raw) throw new Error("non-canonical");
1916
+ } catch {
1917
+ throw new Error(`${label} must be a canonical 32-byte unpadded base64url key`);
1918
+ }
1919
+ return raw;
1920
+ }
1921
+ function parseCanonicalBase64UrlBytes(raw, label) {
1922
+ if (typeof raw !== "string" || raw.length === 0 || !/^[A-Za-z0-9_-]+$/.test(raw)) throw new Error(`${label} must be canonical unpadded base64url`);
1923
+ try {
1924
+ const decoded = base64UrlDecode(raw);
1925
+ if (decoded.length === 0 || base64UrlEncode(decoded) !== raw) throw new Error("non-canonical");
1926
+ } catch {
1927
+ throw new Error(`${label} must be canonical unpadded base64url`);
1928
+ }
1929
+ return raw;
1930
+ }
1931
+ function parseCanonicalFixedBase64UrlBytes(raw, length, label) {
1932
+ const value = parseCanonicalBase64UrlBytes(raw, label);
1933
+ const decoded = base64UrlDecode(value);
1934
+ try {
1935
+ if (decoded.length !== length) throw new Error(`${label} must encode ${length} bytes`);
1936
+ return value;
1937
+ } finally {
1938
+ decoded.fill(0);
1939
+ }
1940
+ }
1941
+ const P256_FIELD_PRIME = BigInt("0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff");
1942
+ const P256_CURVE_A = P256_FIELD_PRIME - 3n;
1943
+ const P256_CURVE_B = BigInt("0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b");
1944
+ function bigEndianBytesToBigInt(bytes) {
1945
+ let value = 0n;
1946
+ for (const byte of bytes) value = value << 8n | BigInt(byte);
1947
+ return value;
1948
+ }
1949
+ function isP256Point(decoded) {
1950
+ const x = bigEndianBytesToBigInt(decoded.subarray(1, 33));
1951
+ const y = bigEndianBytesToBigInt(decoded.subarray(33, 65));
1952
+ if (x >= P256_FIELD_PRIME || y >= P256_FIELD_PRIME) return false;
1953
+ return y * y % P256_FIELD_PRIME === (x * x * x % P256_FIELD_PRIME + P256_CURVE_A * x % P256_FIELD_PRIME + P256_CURVE_B) % P256_FIELD_PRIME;
1954
+ }
1955
+ function parseUncompressedP256PointB64u(raw, label) {
1956
+ const value = parseCanonicalFixedBase64UrlBytes(raw, 65, label);
1957
+ const decoded = base64UrlDecode(value);
1958
+ try {
1959
+ if (decoded[0] !== 4) throw new Error(`${label} must be an uncompressed SEC1 P-256 point`);
1960
+ if (!isP256Point(decoded)) throw new Error(`${label} must be an on-curve P-256 point`);
1961
+ return value;
1962
+ } finally {
1963
+ decoded.fill(0);
1964
+ }
1965
+ }
1966
+ function parseLinkDevicePublicKeyB64u(raw) {
1967
+ return parsePublicKey(raw, "LinkDevicePublicKeyB64u");
1968
+ }
1969
+ function parseCredential(raw, label) {
1970
+ return credentialId(parseCanonicalBase64UrlBytes(raw, label), label);
1971
+ }
1972
+ function parseKeyFamily(raw, label) {
1973
+ if (raw !== "ed25519" && raw !== "ecdsa_secp256k1") throw new Error(`${label} must identify a supported key family`);
1974
+ return raw;
1975
+ }
1976
+ function assertExpiryAfterIssued(issuedAtMs, expiresAtMs, label) {
1977
+ if (expiresAtMs <= issuedAtMs) throw new Error(`${label}.expiresAtMs must be after issuedAtMs`);
1978
+ }
1979
+ function delegatedWalletAuthorityWireValue(value) {
1980
+ return {
1981
+ kind: value.kind,
1982
+ permissions: [...delegatedWalletPermissionNamesV1(value)]
1983
+ };
1984
+ }
1985
+ function qrPayloadWireValue(payload) {
1986
+ const base = {
1987
+ version: payload.version,
1988
+ purpose: payload.purpose,
1989
+ linkSessionId: payload.linkSessionId,
1990
+ linkPublicKeyB64u: payload.linkPublicKeyB64u,
1991
+ devicePublicKeyB64u: payload.devicePublicKeyB64u,
1992
+ requestedPermission: delegatedWalletAuthorityWireValue(payload.requestedPermission),
1993
+ targetFactor: payload.targetFactor,
1994
+ issuedAtMs: payload.issuedAtMs,
1995
+ expiresAtMs: payload.expiresAtMs
1996
+ };
1997
+ return payload.targetFactor.kind === "email_otp" ? {
1998
+ ...base,
1999
+ targetEmail: payload.targetEmail
2000
+ } : base;
2001
+ }
2002
+ function parseTargetFactor(raw, label) {
2003
+ switch (exactRecord$3(raw, ["kind"], label).kind) {
2004
+ case "passkey_prf": return { kind: "passkey_prf" };
2005
+ case "email_otp": return { kind: "email_otp" };
2006
+ default: throw new Error(`${label}.kind is unsupported`);
2007
+ }
2008
+ }
2009
+ function passkeyTargetFactorV1() {
2010
+ return wireObject({ kind: wireLiteral("passkey_prf") });
2011
+ }
2012
+ function emailOtpTargetFactorV1() {
2013
+ return wireObject({ kind: wireLiteral("email_otp") });
2014
+ }
2015
+ function existingEnrollmentV1() {
2016
+ return wireObject({ kind: wireLiteral("existing_enrollment") });
2017
+ }
2018
+ function newEnrollmentV1() {
2019
+ return wireObject({ kind: wireLiteral("new_enrollment") });
2020
+ }
2021
+ function emailOtpEnrollmentSelectionV1() {
2022
+ return wireUnion("kind", [existingEnrollmentV1(), newEnrollmentV1()]);
2023
+ }
2024
+ function parseEmailOtpEnrollmentSelection(raw, label) {
2025
+ return emailOtpEnrollmentSelectionV1()(raw, label);
2026
+ }
2027
+ function emailOtpEnrollmentMaterialV1() {
2028
+ return wireObject({
2029
+ enrollmentSealKeyVersion: parseNonEmptyToken,
2030
+ clientUnlockPublicKeyB64u: parseNonEmptyToken,
2031
+ unlockKeyVersion: parseNonEmptyToken,
2032
+ serverSealedFactorCiphertextB64u: parseNonEmptyToken
2033
+ });
2034
+ }
2035
+ function parseApprovedTargetFactor(raw, label) {
2036
+ const record = requireRecord(raw, label);
2037
+ if (record.kind === "passkey_prf") {
2038
+ exactRecord$3(record, ["kind"], label);
2039
+ return { kind: "passkey_prf" };
2040
+ }
2041
+ if (record.kind === "email_otp") {
2042
+ const enrollment = parseEmailOtpEnrollmentSelection(record.enrollment, `${label}.enrollment`);
2043
+ const targetEmail = parseTargetEmail(record.targetEmail, `${label}.targetEmail`);
2044
+ if (enrollment.kind === "existing_enrollment") return {
2045
+ kind: "email_otp",
2046
+ targetEmail,
2047
+ enrollment,
2048
+ baseWalletAuthMethodId: walletAuthMethodId(exactRecord$3(record, [
2049
+ "kind",
2050
+ "targetEmail",
2051
+ "enrollment",
2052
+ "baseWalletAuthMethodId"
2053
+ ], label).baseWalletAuthMethodId, `${label}.baseWalletAuthMethodId`)
2054
+ };
2055
+ exactRecord$3(record, [
2056
+ "kind",
2057
+ "targetEmail",
2058
+ "enrollment"
2059
+ ], label);
2060
+ return {
2061
+ kind: "email_otp",
2062
+ targetEmail,
2063
+ enrollment
2064
+ };
2065
+ }
2066
+ throw new Error(`${label}.kind is unsupported`);
2067
+ }
2068
+ function parseQrPayloadRecord(record) {
2069
+ if (record.version !== "v5") throw new Error("QrLinkedDeviceSessionPayloadV5.version is invalid");
2070
+ if (record.purpose !== "linked_device_lane_creation") throw new Error("QrLinkedDeviceSessionPayloadV5.purpose is invalid");
2071
+ const issuedAtMs = parseUnixTime(record.issuedAtMs, "QrLinkedDeviceSessionPayloadV5.issuedAtMs");
2072
+ const expiresAtMs = parseUnixTime(record.expiresAtMs, "QrLinkedDeviceSessionPayloadV5.expiresAtMs");
2073
+ assertExpiryAfterIssued(issuedAtMs, expiresAtMs, "QrLinkedDeviceSessionPayloadV5");
2074
+ const base = {
2075
+ version: "v5",
2076
+ purpose: "linked_device_lane_creation",
2077
+ linkSessionId: sessionId(record.linkSessionId, "QrLinkedDeviceSessionPayloadV5.linkSessionId"),
2078
+ linkPublicKeyB64u: parsePublicKey(record.linkPublicKeyB64u, "QrLinkedDeviceSessionPayloadV5.linkPublicKeyB64u"),
2079
+ devicePublicKeyB64u: parsePublicKey(record.devicePublicKeyB64u, "QrLinkedDeviceSessionPayloadV5.devicePublicKeyB64u"),
2080
+ requestedPermission: parseDelegatedWalletAuthority(record.requestedPermission, "QrLinkedDeviceSessionPayloadV5.requestedPermission"),
2081
+ targetFactor: parseTargetFactor(record.targetFactor, "QrLinkedDeviceSessionPayloadV5.targetFactor"),
2082
+ issuedAtMs,
2083
+ expiresAtMs
2084
+ };
2085
+ if (base.targetFactor.kind === "email_otp") return {
2086
+ ...base,
2087
+ targetFactor: { kind: "email_otp" },
2088
+ targetEmail: parseTargetEmail(record.targetEmail, "QrLinkedDeviceSessionPayloadV5.targetEmail")
2089
+ };
2090
+ return {
2091
+ ...base,
2092
+ targetFactor: { kind: "passkey_prf" }
2093
+ };
2094
+ }
2095
+ function parseQrLinkedDeviceSessionPayloadV5(raw) {
2096
+ const candidate = requireRecord(raw, "QrLinkedDeviceSessionPayloadV5");
2097
+ return parseQrPayloadRecord(exactRecord$3(candidate, parseTargetFactor(candidate.targetFactor, "QrLinkedDeviceSessionPayloadV5.targetFactor").kind === "email_otp" ? [...QR_FIELDS, "targetEmail"] : QR_FIELDS, "QrLinkedDeviceSessionPayloadV5"));
2098
+ }
2099
+ function serializeQrLinkedDeviceSessionPayloadV5(payload) {
2100
+ const parsed = parseQrPayloadRecord(qrPayloadWireValue(payload));
2101
+ const compact = {
2102
+ v: 5,
2103
+ s: parsed.linkSessionId,
2104
+ l: parsed.linkPublicKeyB64u,
2105
+ d: parsed.devicePublicKeyB64u,
2106
+ a: delegatedWalletAuthorityWireValue(parsed.requestedPermission),
2107
+ f: parsed.targetFactor.kind === "passkey_prf" ? "p" : "e",
2108
+ i: parsed.issuedAtMs,
2109
+ e: parsed.expiresAtMs
2110
+ };
2111
+ return parsed.targetFactor.kind === "email_otp" ? JSON.stringify({
2112
+ ...compact,
2113
+ t: parsed.targetEmail
2114
+ }) : JSON.stringify(compact);
2115
+ }
2116
+ function linkedDeviceOwnerAuthorizationRequestV1() {
2117
+ return wireObject({
2118
+ payload: parseQrLinkedDeviceSessionPayloadV5,
2119
+ requestedAtMs: parseUnixTime
2120
+ });
2121
+ }
2122
+ function parseLinkedDeviceOwnerAuthorizationRequestV1(raw) {
2123
+ return linkedDeviceOwnerAuthorizationRequestV1()(raw, "LinkedDeviceOwnerAuthorizationRequestV1");
2124
+ }
2125
+ function linkSessionStatesV1() {
2126
+ const withDevice = (state) => wireObject({
2127
+ state: wireLiteral(state),
2128
+ deviceId: authorizationDeviceId
2129
+ });
2130
+ return [
2131
+ wireObject({ state: wireLiteral("displaying_qr") }),
2132
+ withDevice("claimed"),
2133
+ withDevice("awaiting_target_factor"),
2134
+ withDevice("awaiting_source_contribution"),
2135
+ withDevice("provisioning"),
2136
+ wireObject({
2137
+ state: wireLiteral("authority_pending_local_install"),
2138
+ deviceId: authorizationDeviceId,
2139
+ authorityId: walletAuthorityId,
2140
+ packageSetDigestB64u: digest
2141
+ }),
2142
+ wireObject({
2143
+ state: wireLiteral("active"),
2144
+ deviceId: authorizationDeviceId,
2145
+ authorityId: walletAuthorityId,
2146
+ activatedAtMs: parseUnixTime
2147
+ }),
2148
+ wireObject({
2149
+ state: wireLiteral("failed_before_commit"),
2150
+ error: parseLinkPrecommitFailureV1
2151
+ }),
2152
+ wireObject({
2153
+ state: wireLiteral("cancelled"),
2154
+ cancelledAtMs: parseUnixTime
2155
+ }),
2156
+ wireObject({
2157
+ state: wireLiteral("expired"),
2158
+ expiredAtMs: parseUnixTime
2159
+ })
2160
+ ];
2161
+ }
2162
+ function parseLinkSessionStateV1(raw) {
2163
+ const state = requireRecord(raw, "LinkSessionStateV1").state;
2164
+ if (typeof state !== "string") throw new Error("LinkSessionStateV1.state is invalid");
2165
+ const schema = linkSessionStatesV1().find((variant) => variant.shape.state.literals.includes(state));
2166
+ if (!schema) throw new Error(`LinkSessionStateV1.state ${state} is unsupported`);
2167
+ return schema(raw, `LinkSessionStateV1.${state}`);
2168
+ }
2169
+ function parseLinkPrecommitFailureV1(raw) {
2170
+ const record = exactRecord$3(raw, ["kind", "reason"], "LinkPrecommitFailureV1");
2171
+ if (record.kind !== "invalid_input" && record.kind !== "unauthorized_source" && record.kind !== "revoked_source" && record.kind !== "permission_attenuation_failed" && record.kind !== "target_factor_failed" && record.kind !== "expired_session" && record.kind !== "cancelled_session" && record.kind !== "claim_conflict" && record.kind !== "package_preparation_failed") throw new Error("LinkPrecommitFailureV1.kind is invalid");
2172
+ return {
2173
+ kind: record.kind,
2174
+ reason: parseNonEmptyToken(record.reason, "LinkPrecommitFailureV1.reason")
2175
+ };
2176
+ }
2177
+ function linkSessionProjectionV1() {
2178
+ return wireObject({
2179
+ kind: wireLiteral("linked_device_session_projection_v1"),
2180
+ linkSessionId: sessionId,
2181
+ qrPayload: parseQrLinkedDeviceSessionPayloadV5,
2182
+ revision: parseNonNegativeSafeInteger,
2183
+ createdAtMs: parseUnixTime,
2184
+ updatedAtMs: parseUnixTime,
2185
+ state: parseLinkSessionStateV1
2186
+ });
2187
+ }
2188
+ function parseLinkSessionProjectionV1(raw) {
2189
+ return linkSessionProjectionV1()(raw, "LinkSessionProjectionV1");
2190
+ }
2191
+ function linkSessionTransportEventV1() {
2192
+ return wireObject({
2193
+ kind: wireLiteral("linked_device_session_event_v1"),
2194
+ linkSessionId: sessionId,
2195
+ state: parseLinkSessionStateV1,
2196
+ emittedAtMs: parseUnixTime
2197
+ });
2198
+ }
2199
+ function parseLinkSessionTransportEventV1(raw) {
2200
+ return linkSessionTransportEventV1()(raw, "LinkSessionTransportEventV1");
2201
+ }
2202
+ function linkedDeviceApprovalResultV1() {
2203
+ return wireUnion("outcome", [wireObject({
2204
+ outcome: wireLiteral("pending"),
2205
+ state: parsePendingApprovalState
2206
+ }), wireObject({
2207
+ outcome: wireLiteral("replayed"),
2208
+ replay: wireObject({
2209
+ state: () => "pending",
2210
+ session: parsePendingApprovalState
2211
+ })
2212
+ })]);
2213
+ }
2214
+ function parseLinkedDeviceApprovalResultV1(raw) {
2215
+ return linkedDeviceApprovalResultV1()(raw, "LinkedDeviceApprovalResultV1");
2216
+ }
2217
+ function parsePendingApprovalState(raw) {
2218
+ const state = parseLinkSessionStateV1(raw);
2219
+ switch (state.state) {
2220
+ case "awaiting_target_factor":
2221
+ case "awaiting_source_contribution":
2222
+ case "provisioning":
2223
+ case "authority_pending_local_install": return state;
2224
+ default: throw new Error("LinkedDeviceApprovalResultV1 state is not pending");
2225
+ }
2226
+ }
2227
+ function linkedDeviceSessionClaimV1() {
2228
+ return wireObject({
2229
+ kind: wireLiteral("linked_device_session_claim_v1"),
2230
+ linkSessionId: sessionId,
2231
+ walletId,
2232
+ enrollmentId,
2233
+ deviceId: linkedDeviceId,
2234
+ devicePublicKeyB64u: parsePublicKey,
2235
+ targetFactor: parseTargetFactor,
2236
+ sessionRevision: parseUnixTime,
2237
+ claimedAtMs: parseUnixTime,
2238
+ claimExpiresAtMs: parseUnixTime
2239
+ }, (claim, label) => assertExpiryAfterIssued(claim.claimedAtMs, claim.claimExpiresAtMs, label));
2240
+ }
2241
+ function parseLinkedDeviceSessionClaimV1(raw) {
2242
+ return linkedDeviceSessionClaimV1()(raw, "LinkedDeviceSessionClaimV1");
2243
+ }
2244
+ function walletSessionOwnerAuthorizationV1() {
2245
+ return wireObject({
2246
+ kind: wireLiteral("wallet_session"),
2247
+ walletSessionId,
2248
+ authorizationId: walletSessionAuthorizationId
2249
+ });
2250
+ }
2251
+ function parseLinkedDeviceOwnerAuthorizationSourceV1(raw, label = "ownerAuthorization") {
2252
+ if (requireRecord(raw, label).kind !== "wallet_session") throw new Error(`${label}.kind is unsupported`);
2253
+ return walletSessionOwnerAuthorizationV1()(raw, label);
2254
+ }
2255
+ function linkedDeviceApprovalFields() {
2256
+ return {
2257
+ kind: wireLiteral("linked_device_approval_v1"),
2258
+ linkSessionId: sessionId,
2259
+ walletId,
2260
+ enrollmentId,
2261
+ deviceId: linkedDeviceId,
2262
+ linkPublicKeyB64u: parsePublicKey,
2263
+ devicePublicKeyB64u: parsePublicKey,
2264
+ permission: parseDelegatedWalletAuthority,
2265
+ targetFactor: parseApprovedTargetFactor,
2266
+ ownerAuthorization: parseLinkedDeviceOwnerAuthorizationSourceV1,
2267
+ approvedAtMs: parseUnixTime,
2268
+ expiresAtMs: parseUnixTime
2269
+ };
2270
+ }
2271
+ function approvedBeforeExpiry(approval, label) {
2272
+ assertExpiryAfterIssued(approval.approvedAtMs, approval.expiresAtMs, label);
2273
+ }
2274
+ function linkedDeviceApprovalV1() {
2275
+ return wireObject(linkedDeviceApprovalFields(), approvedBeforeExpiry);
2276
+ }
2277
+ function linkedDeviceSourceContributionApprovalV1() {
2278
+ return wireObject({
2279
+ ...linkedDeviceApprovalFields(),
2280
+ sourceContribution: parseLinkedDeviceOrdinaryMaterialSourceContributionTupleV1
2281
+ }, approvedBeforeExpiry);
2282
+ }
2283
+ function parseLinkedDeviceApprovalV1(raw) {
2284
+ const record = requireRecord(raw, "LinkedDeviceApprovalV1");
2285
+ return (record.sourceContribution === void 0 ? linkedDeviceApprovalV1() : linkedDeviceSourceContributionApprovalV1())(record, "LinkedDeviceApprovalV1");
2286
+ }
2287
+ function linkedDeviceApprovalDeliveryV1() {
2288
+ return wireObject({
2289
+ kind: wireLiteral("linked_device_approval_delivery_v1"),
2290
+ approval: parseLinkedDeviceApprovalV1
2291
+ });
2292
+ }
2293
+ function parseLinkedDeviceApprovalDeliveryV1(raw) {
2294
+ return linkedDeviceApprovalDeliveryV1()(raw, "LinkedDeviceApprovalDeliveryV1");
2295
+ }
2296
+ function linkedDeviceTargetPreparationFields() {
2297
+ return {
2298
+ kind: wireLiteral("linked_device_target_preparation_v1"),
2299
+ linkSessionId: sessionId,
2300
+ walletId,
2301
+ enrollmentId,
2302
+ deviceId: linkedDeviceId,
2303
+ deliveryRecipientPublicKey65B64u: parseUncompressedP256PointB64u,
2304
+ walletAuthMethodId,
2305
+ ed25519ExportRoot: wireNullable(ed25519ExportRootPreparationV1()),
2306
+ ordinarySignerMaterialRecipientRequirements: parseRecipientRequirements,
2307
+ issuedAtMs: parseUnixTime,
2308
+ expiresAtMs: parseUnixTime
2309
+ };
2310
+ }
2311
+ function preparationExpiresAfterIssue(preparation, label) {
2312
+ if (preparation.expiresAtMs <= preparation.issuedAtMs) throw new Error(`${label}.expiresAtMs must follow issuedAtMs`);
2313
+ }
2314
+ function passkeyTargetPreparationV1() {
2315
+ return wireObject({
2316
+ ...linkedDeviceTargetPreparationFields(),
2317
+ targetFactor: passkeyTargetFactorV1(),
2318
+ passkeyCreationOptions: parseLinkedDevicePasskeyCreationOptionsV1,
2319
+ passkeyConfigurationDigestB64u: digest
2320
+ }, (preparation, label) => {
2321
+ preparationExpiresAfterIssue(preparation, label);
2322
+ if (preparation.passkeyCreationOptions.walletAuthMethodId !== preparation.walletAuthMethodId) throw new Error(`${label}.passkeyCreationOptions.walletAuthMethodId must match the preparation`);
2323
+ });
2324
+ }
2325
+ function emailOtpTargetPreparationV1() {
2326
+ return wireObject({
2327
+ ...linkedDeviceTargetPreparationFields(),
2328
+ targetFactor: emailOtpTargetFactorV1(),
2329
+ targetEmail: parseTargetEmail,
2330
+ enrollment: existingEnrollmentV1(),
2331
+ baseWalletAuthMethodId: walletAuthMethodId
2332
+ }, preparationExpiresAfterIssue);
2333
+ }
2334
+ function newEmailOtpTargetPreparationV1() {
2335
+ return wireObject({
2336
+ ...linkedDeviceTargetPreparationFields(),
2337
+ targetFactor: emailOtpTargetFactorV1(),
2338
+ targetEmail: parseTargetEmail,
2339
+ enrollment: newEnrollmentV1()
2340
+ }, preparationExpiresAfterIssue);
2341
+ }
2342
+ function parseLinkedDeviceTargetPreparationV1(raw) {
2343
+ const label = "LinkedDeviceTargetPreparationV1";
2344
+ const record = requireRecord(raw, label);
2345
+ if (parseTargetFactor(record.targetFactor, `${label}.targetFactor`).kind === "passkey_prf") return passkeyTargetPreparationV1()(record, label);
2346
+ return (parseEmailOtpEnrollmentSelection(record.enrollment, `${label}.enrollment`).kind === "new_enrollment" ? newEmailOtpTargetPreparationV1() : emailOtpTargetPreparationV1())(record, label);
2347
+ }
2348
+ function linkedDeviceTargetPreparationRequestV1() {
2349
+ return wireObject({
2350
+ kind: wireLiteral("linked_device_target_preparation_request_v1"),
2351
+ linkSessionId: sessionId,
2352
+ deliveryRecipientPublicKey65B64u: parseUncompressedP256PointB64u
2353
+ });
2354
+ }
2355
+ function parseLinkedDeviceTargetPreparationRequestV1(raw) {
2356
+ return linkedDeviceTargetPreparationRequestV1()(raw, "LinkedDeviceTargetPreparationRequestV1");
2357
+ }
2358
+ function emailOtpBaseFactorChoiceV1() {
2359
+ return wireObject({
2360
+ baseWalletAuthMethodId: walletAuthMethodId,
2361
+ maskedEmailHint: (raw, label) => {
2362
+ if (typeof raw !== "string" || raw.length === 0) throw new Error(`${label} is invalid`);
2363
+ return raw;
2364
+ }
2365
+ });
2366
+ }
2367
+ function emailOtpBaseFactorResolutionsV1() {
2368
+ const choice = emailOtpBaseFactorChoiceV1();
2369
+ const parseChoice = (raw) => choice(raw, "LinkedDeviceEmailOtpBaseFactorChoiceV1");
2370
+ return {
2371
+ selected: wireObject({
2372
+ kind: wireLiteral("selected"),
2373
+ choice: parseChoice
2374
+ }),
2375
+ selection_required: wireObject({
2376
+ kind: wireLiteral("selection_required"),
2377
+ choices: (raw, label) => {
2378
+ if (!Array.isArray(raw) || raw.length === 0) throw new Error(`${label} must not be empty`);
2379
+ const choices = raw.map(parseChoice);
2380
+ return [choices[0], ...choices.slice(1)];
2381
+ }
2382
+ }),
2383
+ unavailable: wireObject({
2384
+ kind: wireLiteral("unavailable"),
2385
+ reason: supportedLiteral("no_active_email_otp_base_factor")
2386
+ })
2387
+ };
2388
+ }
2389
+ function parseLinkedDeviceEmailOtpBaseFactorResolutionV1(raw) {
2390
+ const label = "LinkedDeviceEmailOtpBaseFactorResolutionV1";
2391
+ const record = requireRecord(raw, label);
2392
+ const resolutions = emailOtpBaseFactorResolutionsV1();
2393
+ switch (record.kind) {
2394
+ case "selected":
2395
+ case "selection_required":
2396
+ case "unavailable": return resolutions[record.kind](record, label);
2397
+ default: throw new Error(`${label}.kind is unsupported`);
2398
+ }
2399
+ }
2400
+ function emailOtpBaseFactorResolutionResultV1() {
2401
+ return wireObject({
2402
+ revision: parseUnixTime,
2403
+ resolution: parseLinkedDeviceEmailOtpBaseFactorResolutionV1
2404
+ });
2405
+ }
2406
+ function parseLinkedDeviceEmailOtpBaseFactorResolutionResultV1(raw) {
2407
+ return emailOtpBaseFactorResolutionResultV1()(raw, "LinkedDeviceEmailOtpBaseFactorResolutionResultV1");
2408
+ }
2409
+ function parseLinkedDevicePasskeyCreationOptionsV1(raw, label) {
2410
+ const record = exactRecord$3(raw, [
2411
+ "kind",
2412
+ "walletAuthMethodId",
2413
+ "challengeId",
2414
+ "challengeB64u",
2415
+ "rpId",
2416
+ "user",
2417
+ "pubKeyCredParams",
2418
+ "authenticatorSelection",
2419
+ "timeoutMs",
2420
+ "attestation",
2421
+ "extensions",
2422
+ "excludeCredentials"
2423
+ ], label);
2424
+ const methodId = walletAuthMethodId(record.walletAuthMethodId, `${label}.walletAuthMethodId`);
2425
+ exactRecord$3(record.user, [
2426
+ "idB64u",
2427
+ "name",
2428
+ "displayName"
2429
+ ], `${label}.user`);
2430
+ exactRecord$3(record.authenticatorSelection, ["residentKey", "userVerification"], `${label}.authenticatorSelection`);
2431
+ exactRecord$3(exactRecord$3(exactRecord$3(record.extensions, ["prf"], `${label}.extensions`).prf, ["eval"], `${label}.extensions.prf`).eval, ["firstB64u", "secondB64u"], `${label}.extensions.prf.eval`);
2432
+ if (!Array.isArray(record.pubKeyCredParams)) throw new Error(`${label}.pubKeyCredParams must be an array`);
2433
+ record.pubKeyCredParams.forEach((entry, index) => {
2434
+ exactRecord$3(entry, ["type", "alg"], `${label}.pubKeyCredParams[${index}]`);
2435
+ });
2436
+ if (!Array.isArray(record.excludeCredentials)) throw new Error(`${label}.excludeCredentials must be an array`);
2437
+ record.excludeCredentials.forEach((entry, index) => {
2438
+ exactRecord$3(entry, ["type", "id"], `${label}.excludeCredentials[${index}]`);
2439
+ });
2440
+ const options = parseWalletAddAuthMethodRegistrationOptions(record);
2441
+ return {
2442
+ kind: options.kind,
2443
+ walletAuthMethodId: methodId,
2444
+ challengeId: options.challengeId,
2445
+ challengeB64u: options.challengeB64u,
2446
+ rpId: options.rpId,
2447
+ user: options.user,
2448
+ pubKeyCredParams: options.pubKeyCredParams,
2449
+ authenticatorSelection: options.authenticatorSelection,
2450
+ timeoutMs: options.timeoutMs,
2451
+ attestation: options.attestation,
2452
+ extensions: options.extensions,
2453
+ excludeCredentials: options.excludeCredentials
2454
+ };
2455
+ }
2456
+ function ed25519ExportRootPreparationV1() {
2457
+ return wireObject({
2458
+ kind: wireLiteral("linked_device_ed25519_export_root_preparation_v1"),
2459
+ walletKeyId,
2460
+ applicationBindingDigestB64u: digest,
2461
+ registeredPublicKeyB64u: parseEd25519PublicKeyB64u,
2462
+ revocationEpoch: parseNonNegativeSafeInteger
2463
+ });
2464
+ }
2465
+ function parseKeyFamilyEntries(raw, item, label) {
2466
+ if (!Array.isArray(raw) || raw.length === 0 || raw.length > 2) throw new Error(`${label} must contain one or two entries`);
2467
+ const entries = raw.map((entry, index) => item(entry, `${label}[${index}]`));
2468
+ if (new Set(entries.map((entry) => entry.keyFamily)).size !== entries.length) throw new Error(`${label} repeats a key family`);
2469
+ if (new Set(entries.map((entry) => String(entry.walletKeyId))).size !== entries.length) throw new Error(`${label} repeats a wallet key`);
2470
+ if (entries.length === 2 && (entries[0]?.keyFamily !== "ed25519" || entries[1]?.keyFamily !== "ecdsa_secp256k1")) throw new Error(`${label} must be ordered Ed25519 then ECDSA`);
2471
+ return entries;
2472
+ }
2473
+ function recipientRequirementV1() {
2474
+ return wireObject({
2475
+ kind: wireLiteral("ordinary_signer_material_recipient_requirement_v1"),
2476
+ keyFamily: parseKeyFamily,
2477
+ walletKeyId
2478
+ });
2479
+ }
2480
+ function parseRecipientRequirements(raw) {
2481
+ const requirements = parseKeyFamilyEntries(raw, recipientRequirementV1(), "LinkedDeviceTargetPreparationV1.ordinarySignerMaterialRecipientRequirements");
2482
+ const first = requirements[0];
2483
+ if (!first) throw new Error("ordinary signer material recipient requirements are empty");
2484
+ return [first, ...requirements.slice(1)];
2485
+ }
2486
+ const webAuthnTransport = /* @__PURE__ */ wireLiteral("ble", "cable", "hybrid", "internal", "nfc", "smart-card", "usb");
2487
+ function parseWebAuthnTransports(raw, label) {
2488
+ const transports = requireArray(raw, label).map((entry, index) => webAuthnTransport(entry, `${label}[${index}]`));
2489
+ if (new Set(transports).size !== transports.length) throw new Error(`${label} contains duplicates`);
2490
+ return transports;
2491
+ }
2492
+ function linkedDeviceWebAuthnRegistrationV1() {
2493
+ return wireObject({
2494
+ kind: wireLiteral("linked_device_webauthn_registration_v1"),
2495
+ credentialIdB64u: parseCredential,
2496
+ authenticatorAttachment: wireNullable(wireLiteral("platform", "cross-platform")),
2497
+ clientDataJsonB64u: parseCanonicalBase64UrlBytes,
2498
+ attestationObjectB64u: parseCanonicalBase64UrlBytes,
2499
+ transports: parseWebAuthnTransports
2500
+ });
2501
+ }
2502
+ function recipientRequestV1() {
2503
+ const keyFamily = (family) => (raw, label) => {
2504
+ if (raw !== family) throw new Error(`${label} does not match its kind`);
2505
+ return family;
2506
+ };
2507
+ return wireUnion("kind", [wireObject({
2508
+ kind: wireLiteral("ordinary_ed25519_signer_material_recipient_request_v1"),
2509
+ keyFamily: keyFamily("ed25519"),
2510
+ walletKeyId,
2511
+ recipientPublicKeyB64u: (raw, label) => parseCanonicalFixedBase64UrlBytes(raw, 32, label)
2512
+ }), wireObject({
2513
+ kind: wireLiteral("ordinary_ecdsa_signer_material_recipient_request_v1"),
2514
+ keyFamily: keyFamily("ecdsa_secp256k1"),
2515
+ walletKeyId,
2516
+ clientEphemeralPublicKey: requireRouterAbX25519PublicKey
2517
+ })]);
2518
+ }
2519
+ function parseRecipientRequests(raw) {
2520
+ const requests = parseKeyFamilyEntries(raw, recipientRequestV1(), "LinkedDeviceTargetCredentialRegistrationV1.ordinarySignerMaterialRecipientRequests");
2521
+ const first = requests[0];
2522
+ if (!first) throw new Error("ordinary signer material recipient requests are empty");
2523
+ return [first, ...requests.slice(1)];
2524
+ }
2525
+ function targetCredentialRegistrationIdentity() {
2526
+ return {
2527
+ kind: wireLiteral("linked_device_target_credential_registration_v1"),
2528
+ linkSessionId: sessionId,
2529
+ walletId,
2530
+ enrollmentId,
2531
+ deviceId: linkedDeviceId,
2532
+ walletAuthMethodId
2533
+ };
2534
+ }
2535
+ function passkeyTargetCredentialRegistrationV1() {
2536
+ return wireObject({
2537
+ ...targetCredentialRegistrationIdentity(),
2538
+ targetFactor: passkeyTargetFactorV1(),
2539
+ targetPreparationDigestB64u: digest,
2540
+ ordinarySignerMaterialRecipientRequests: parseRecipientRequests,
2541
+ webauthnRegistration: linkedDeviceWebAuthnRegistrationV1(),
2542
+ registeredAtMs: parseUnixTime
2543
+ });
2544
+ }
2545
+ function emailOtpTargetCredentialRegistrationV1() {
2546
+ return wireObject({
2547
+ ...targetCredentialRegistrationIdentity(),
2548
+ targetFactor: emailOtpTargetFactorV1(),
2549
+ targetEmail: parseTargetEmail,
2550
+ targetPreparationDigestB64u: digest,
2551
+ ordinarySignerMaterialRecipientRequests: parseRecipientRequests,
2552
+ emailOtpVerificationGrant: parseLinkedDeviceEmailOtpVerificationGrantV1,
2553
+ registeredAtMs: parseUnixTime
2554
+ });
2555
+ }
2556
+ function newEmailOtpTargetCredentialRegistrationV1() {
2557
+ return wireObject({
2558
+ ...targetCredentialRegistrationIdentity(),
2559
+ targetFactor: emailOtpTargetFactorV1(),
2560
+ targetEmail: parseTargetEmail,
2561
+ targetPreparationDigestB64u: digest,
2562
+ ordinarySignerMaterialRecipientRequests: parseRecipientRequests,
2563
+ emailOtpVerificationGrant: parseLinkedDeviceEmailOtpVerificationGrantV1,
2564
+ emailOtpEnrollment: emailOtpEnrollmentMaterialV1(),
2565
+ registeredAtMs: parseUnixTime
2566
+ });
2567
+ }
2568
+ function parseLinkedDeviceTargetCredentialRegistrationV1(raw) {
2569
+ const label = "LinkedDeviceTargetCredentialRegistrationV1";
2570
+ const record = requireRecord(raw, label);
2571
+ if (parseTargetFactor(record.targetFactor, `${label}.targetFactor`).kind === "passkey_prf") return passkeyTargetCredentialRegistrationV1()(record, label);
2572
+ return (parseLinkedDeviceEmailOtpVerificationGrantV1(record.emailOtpVerificationGrant).enrollment.kind === "new_enrollment" ? newEmailOtpTargetCredentialRegistrationV1() : emailOtpTargetCredentialRegistrationV1())(record, label);
2573
+ }
2574
+ function targetCredentialRegistrationResultV1() {
2575
+ return wireObject({
2576
+ kind: wireLiteral("linked_device_target_credential_registration_result_v1"),
2577
+ outcome: wireLiteral("applied", "replayed"),
2578
+ linkSessionId: sessionId,
2579
+ walletId,
2580
+ enrollmentId,
2581
+ deviceId: linkedDeviceId,
2582
+ walletAuthMethodId,
2583
+ targetPreparationDigestB64u: digest,
2584
+ targetFactor: parseVerifiedTargetFactorV1,
2585
+ ordinarySignerMaterialPreparations: parseLinkedDeviceOrdinaryMaterialSourceContributionPreparationTupleV1,
2586
+ ordinarySignerMaterialRecipientRequests: parseRecipientRequests,
2587
+ keyManifestDigestB64u: digest
2588
+ }, (result, label) => {
2589
+ const { authMethod } = result.targetFactor;
2590
+ if (authMethod.walletAuthMethodId !== result.walletAuthMethodId || authMethod.walletId !== result.walletId) throw new Error(`${label} target identity differs`);
2591
+ });
2592
+ }
2593
+ function parseLinkedDeviceTargetCredentialRegistrationResultV1(raw) {
2594
+ return targetCredentialRegistrationResultV1()(raw, "LinkedDeviceTargetCredentialRegistrationResultV1");
2595
+ }
2596
+ function verifiedAfterCreation(target, label) {
2597
+ if (target.verifiedAtMs < target.authMethod.createdAtMs) throw new Error(`${label}.verifiedAtMs precedes authMethod.createdAtMs`);
2598
+ }
2599
+ function verifiedPasskeyTargetV1() {
2600
+ return wireObject({
2601
+ kind: wireLiteral("verified_passkey_target_v1"),
2602
+ authMethod: parsePasskeyWalletAuthMethodDraftV1,
2603
+ verificationDigestB64u: digest,
2604
+ verifiedAtMs: parseUnixTime
2605
+ }, verifiedAfterCreation);
2606
+ }
2607
+ function verifiedEmailOtpTargetV1() {
2608
+ return wireObject({
2609
+ kind: wireLiteral("verified_email_otp_target_v1"),
2610
+ authMethod: parseEmailOtpWalletAuthMethodDraftV1,
2611
+ targetEmail: parseTargetEmail,
2612
+ enrollment: existingEnrollmentV1(),
2613
+ baseWalletAuthMethodId: walletAuthMethodId,
2614
+ providerUserId: parseNonEmptyToken,
2615
+ verificationDigestB64u: digest,
2616
+ verifiedAtMs: parseUnixTime
2617
+ }, verifiedAfterCreation);
2618
+ }
2619
+ function verifiedNewEmailOtpTargetV1() {
2620
+ return wireObject({
2621
+ kind: wireLiteral("verified_email_otp_target_v1"),
2622
+ authMethod: parseEmailOtpWalletAuthMethodDraftV1,
2623
+ targetEmail: parseTargetEmail,
2624
+ enrollment: newEnrollmentV1(),
2625
+ providerUserId: parseNonEmptyToken,
2626
+ verificationDigestB64u: digest,
2627
+ verifiedAtMs: parseUnixTime
2628
+ }, verifiedAfterCreation);
2629
+ }
2630
+ function parseVerifiedTargetFactorV1(raw, label) {
2631
+ const record = requireRecord(raw, label);
2632
+ if (record.kind === "verified_passkey_target_v1") return verifiedPasskeyTargetV1()(record, label);
2633
+ if (record.kind !== "verified_email_otp_target_v1") throw new Error(`${label}.kind is invalid`);
2634
+ return (parseEmailOtpEnrollmentSelection(record.enrollment, `${label}.enrollment`).kind === "existing_enrollment" ? verifiedEmailOtpTargetV1() : verifiedNewEmailOtpTargetV1())(record, label);
2635
+ }
2636
+ function passkeyWalletAuthMethodDraftV1() {
2637
+ return wireObject({
2638
+ walletAuthMethodId,
2639
+ walletId,
2640
+ createdAtMs: parseUnixTime,
2641
+ kind: wireLiteral("passkey"),
2642
+ rpId: rpId$1,
2643
+ credentialIdB64u: credentialId,
2644
+ credentialPublicKeyB64u: parseCanonicalBase64UrlBytes,
2645
+ counter: parseNonNegativeSafeInteger
2646
+ });
2647
+ }
2648
+ function parsePasskeyWalletAuthMethodDraftV1(raw, label) {
2649
+ return passkeyWalletAuthMethodDraftV1()(raw, label);
2650
+ }
2651
+ function emailOtpWalletAuthMethodDraftV1() {
2652
+ return wireObject({
2653
+ walletAuthMethodId,
2654
+ walletId,
2655
+ createdAtMs: parseUnixTime,
2656
+ kind: wireLiteral("email_otp"),
2657
+ emailHashHex: parseEmailHashHex,
2658
+ registrationAuthorityId: parseNonEmptyToken
2659
+ });
2660
+ }
2661
+ function parseEmailOtpWalletAuthMethodDraftV1(raw, label) {
2662
+ return emailOtpWalletAuthMethodDraftV1()(raw, label);
2663
+ }
2664
+ function emailOtpVerificationGrantFields(enrollment) {
2665
+ return {
2666
+ kind: wireLiteral("linked_device_email_otp_verification_grant_v1"),
2667
+ grantId: parseNonEmptyToken,
2668
+ grantToken: parseNonEmptyToken,
2669
+ challengeId: parseNonEmptyToken,
2670
+ linkSessionId: sessionId,
2671
+ walletId,
2672
+ enrollmentId,
2673
+ deviceId: linkedDeviceId,
2674
+ targetPreparationDigestB64u: digest,
2675
+ targetEmail: parseTargetEmail,
2676
+ enrollment,
2677
+ emailHashHex: parseEmailHashHex,
2678
+ registrationAuthorityId: parseNonEmptyToken,
2679
+ providerUserId: parseNonEmptyToken,
2680
+ authorityDigestB64u: digest,
2681
+ issuedAtMs: parseUnixTime,
2682
+ expiresAtMs: parseUnixTime
2683
+ };
2684
+ }
2685
+ function grantIssuedBeforeExpiry(grant, label) {
2686
+ assertExpiryAfterIssued(grant.issuedAtMs, grant.expiresAtMs, label);
2687
+ }
2688
+ function emailOtpVerificationGrantV1() {
2689
+ return wireObject({
2690
+ ...emailOtpVerificationGrantFields(existingEnrollmentV1()),
2691
+ baseWalletAuthMethodId: walletAuthMethodId
2692
+ }, grantIssuedBeforeExpiry);
2693
+ }
2694
+ function newEnrollmentEmailOtpVerificationGrantV1() {
2695
+ return wireObject(emailOtpVerificationGrantFields(newEnrollmentV1()), grantIssuedBeforeExpiry);
2696
+ }
2697
+ function parseLinkedDeviceEmailOtpVerificationGrantV1(raw) {
2698
+ const label = "LinkedDeviceEmailOtpVerificationGrantV1";
2699
+ const record = requireRecord(raw, label);
2700
+ return (parseEmailOtpEnrollmentSelection(record.enrollment, `${label}.enrollment`).kind === "new_enrollment" ? newEnrollmentEmailOtpVerificationGrantV1() : emailOtpVerificationGrantV1())(record, label);
2701
+ }
2702
+ function emailOtpFactorReleaseEnvelopeV1() {
2703
+ return wireObject({
2704
+ kind: wireLiteral("email_otp_factor_release_v1"),
2705
+ challengeId: parseNonEmptyToken,
2706
+ enrollmentId: parseNonEmptyToken,
2707
+ enrollmentSealKeyVersion: parseNonEmptyToken,
2708
+ serverEphemeralPublicKey65B64u: parseUncompressedP256PointB64u,
2709
+ nonce12B64u: (raw, label) => parseCanonicalFixedBase64UrlBytes(raw, 12, label),
2710
+ ciphertextB64u: parseCanonicalBase64UrlBytes
2711
+ });
2712
+ }
2713
+ function parseLinkedDeviceEmailOtpFactorReleaseEnvelopeV1(raw) {
2714
+ return emailOtpFactorReleaseEnvelopeV1()(raw, "LinkedDeviceEmailOtpFactorReleaseEnvelopeV1");
2715
+ }
2716
+ function emailOtpChallengeStartRequestV1() {
2717
+ return wireObject({
2718
+ kind: wireLiteral("linked_device_email_otp_challenge_start_request_v1"),
2719
+ linkSessionId: sessionId,
2720
+ workerEphemeralPublicKey65B64u: parseUncompressedP256PointB64u
2721
+ });
2722
+ }
2723
+ function parseLinkedDeviceEmailOtpChallengeStartRequestV1(raw) {
2724
+ return emailOtpChallengeStartRequestV1()(raw, "LinkedDeviceEmailOtpChallengeStartRequestV1");
2725
+ }
2726
+ function emailOtpChallengeResendRequestV1() {
2727
+ return wireObject({
2728
+ kind: wireLiteral("linked_device_email_otp_challenge_resend_request_v1"),
2729
+ linkSessionId: sessionId,
2730
+ challengeId: parseNonEmptyToken
2731
+ });
2732
+ }
2733
+ function parseLinkedDeviceEmailOtpChallengeResendRequestV1(raw) {
2734
+ return emailOtpChallengeResendRequestV1()(raw, "LinkedDeviceEmailOtpChallengeResendRequestV1");
2735
+ }
2736
+ function emailOtpChallengeVerifyRequestV1() {
2737
+ return wireObject({
2738
+ kind: wireLiteral("linked_device_email_otp_challenge_verify_request_v1"),
2739
+ linkSessionId: sessionId,
2740
+ challengeId: parseNonEmptyToken,
2741
+ otpCode: (raw, label) => {
2742
+ if (typeof raw !== "string" || !/^[0-9]{6,10}$/.test(raw)) throw new Error(`${label} is invalid`);
2743
+ return raw;
2744
+ }
2745
+ });
2746
+ }
2747
+ function parseLinkedDeviceEmailOtpChallengeVerifyRequestV1(raw) {
2748
+ return emailOtpChallengeVerifyRequestV1()(raw, "LinkedDeviceEmailOtpChallengeVerifyRequestV1");
2749
+ }
2750
+ function emailOtpChallengeResultV1() {
2751
+ return wireObject({
2752
+ kind: wireLiteral("linked_device_email_otp_challenge_result_v1"),
2753
+ challengeId: parseNonEmptyToken,
2754
+ maskedEmailHint: parseNonEmptyToken,
2755
+ expiresAtMs: parseUnixTime,
2756
+ resendAvailableAtMs: parseUnixTime
2757
+ });
2758
+ }
2759
+ function parseLinkedDeviceEmailOtpChallengeResultV1(raw) {
2760
+ return emailOtpChallengeResultV1()(raw, "LinkedDeviceEmailOtpChallengeResultV1");
2761
+ }
2762
+ function parseLinkedDeviceEmailOtpVerificationResultV1(raw) {
2763
+ const record = exactRecord$3(raw, [
2764
+ "kind",
2765
+ "verificationGrant",
2766
+ "factorRelease"
2767
+ ], "LinkedDeviceEmailOtpVerificationResultV1");
2768
+ if (record.kind !== "linked_device_email_otp_verification_result_v1") throw new Error("LinkedDeviceEmailOtpVerificationResultV1.kind is invalid");
2769
+ const verificationGrant = parseLinkedDeviceEmailOtpVerificationGrantV1(record.verificationGrant);
2770
+ if (isNewEnrollmentEmailOtpVerificationGrantV1(verificationGrant)) {
2771
+ if (record.factorRelease !== null) throw new Error("new linked-device Email OTP enrollment cannot carry a factor release");
2772
+ return {
2773
+ kind: "linked_device_email_otp_verification_result_v1",
2774
+ verificationGrant,
2775
+ factorRelease: null
2776
+ };
2777
+ }
2778
+ const factorRelease = parseLinkedDeviceEmailOtpFactorReleaseEnvelopeV1(record.factorRelease);
2779
+ if (factorRelease.challengeId !== verificationGrant.challengeId) throw new Error("LinkedDeviceEmailOtpVerificationResultV1 challenge binding changed");
2780
+ return {
2781
+ kind: "linked_device_email_otp_verification_result_v1",
2782
+ verificationGrant,
2783
+ factorRelease
2784
+ };
2785
+ }
2786
+ function isNewEnrollmentEmailOtpVerificationGrantV1(grant) {
2787
+ return grant.enrollment.kind === "new_enrollment";
2788
+ }
2789
+ function buildQrLinkedDeviceSessionPayloadV5(args) {
2790
+ const issuedAtMs = parseUnixTime(args.issuedAtMs, "QrLinkedDeviceSessionPayloadV5.issuedAtMs");
2791
+ const expiresAtMs = parseUnixTime(args.expiresAtMs, "QrLinkedDeviceSessionPayloadV5.expiresAtMs");
2792
+ assertExpiryAfterIssued(issuedAtMs, expiresAtMs, "QrLinkedDeviceSessionPayloadV5");
2793
+ const targetFactor = parseTargetFactor(args.targetFactor, "QrLinkedDeviceSessionPayloadV5.targetFactor");
2794
+ if (targetFactor.kind === "passkey_prf") return {
2795
+ version: "v5",
2796
+ purpose: "linked_device_lane_creation",
2797
+ linkSessionId: args.linkSessionId,
2798
+ linkPublicKeyB64u: args.linkPublicKeyB64u,
2799
+ devicePublicKeyB64u: args.devicePublicKeyB64u,
2800
+ requestedPermission: parseDelegatedWalletAuthority(delegatedWalletAuthorityWireValue(args.requestedPermission), "QrLinkedDeviceSessionPayloadV5.requestedPermission"),
2801
+ targetFactor,
2802
+ issuedAtMs,
2803
+ expiresAtMs
2804
+ };
2805
+ if (args.targetEmail === void 0) throw new Error("QrLinkedDeviceSessionPayloadV5.targetEmail is required for Email OTP");
2806
+ return {
2807
+ version: "v5",
2808
+ purpose: "linked_device_lane_creation",
2809
+ linkSessionId: args.linkSessionId,
2810
+ linkPublicKeyB64u: args.linkPublicKeyB64u,
2811
+ devicePublicKeyB64u: args.devicePublicKeyB64u,
2812
+ requestedPermission: parseDelegatedWalletAuthority(delegatedWalletAuthorityWireValue(args.requestedPermission), "QrLinkedDeviceSessionPayloadV5.requestedPermission"),
2813
+ targetFactor,
2814
+ targetEmail: parseTargetEmail(args.targetEmail, "QrLinkedDeviceSessionPayloadV5.targetEmail"),
2815
+ issuedAtMs,
2816
+ expiresAtMs
2817
+ };
2818
+ }
2819
+ function buildLinkedDeviceSessionClaimRequestV1(payload) {
2820
+ return {
2821
+ kind: "linked_device_session_claim_request_v1",
2822
+ payload
2823
+ };
2824
+ }
2825
+ function validateEnrollmentTimes(approvedAtMs, expiresAtMs, label) {
2826
+ const approved = parseUnixTime(approvedAtMs, `${label}.approvedAtMs`);
2827
+ const expires = parseUnixTime(expiresAtMs, `${label}.expiresAtMs`);
2828
+ assertExpiryAfterIssued(approved, expires, label);
2829
+ return {
2830
+ approvedAtMs: approved,
2831
+ expiresAtMs: expires
2832
+ };
2833
+ }
2834
+ function buildLinkedDeviceApprovalV1(args) {
2835
+ const times = validateEnrollmentTimes(args.approvedAtMs, args.expiresAtMs, "LinkedDeviceApprovalV1");
2836
+ return parseLinkedDeviceApprovalV1({
2837
+ kind: "linked_device_approval_v1",
2838
+ ...args,
2839
+ ...times
2840
+ });
2841
+ }
2842
+ function buildLinkedDeviceTargetCredentialRegistrationV1(args) {
2843
+ return parseLinkedDeviceTargetCredentialRegistrationV1({
2844
+ kind: "linked_device_target_credential_registration_v1",
2845
+ ...args
2846
+ });
2847
+ }
2848
+ function buildLinkedDeviceSessionCancelUnclaimedRequestV1(args) {
2849
+ return {
2850
+ kind: "linked_device_session_cancel_unclaimed_request_v1",
2851
+ linkSessionId: args.linkSessionId,
2852
+ reason: "user_cancelled",
2853
+ requestedAtMs: parseUnixTime(args.requestedAtMs, "LinkedDeviceSessionCancelUnclaimedRequestV1.requestedAtMs")
2854
+ };
2855
+ }
2856
+ function buildLinkedDeviceSessionCancelClaimedRequestV1(args) {
2857
+ return {
2858
+ kind: "linked_device_session_cancel_claimed_request_v1",
2859
+ ...args,
2860
+ requestedAtMs: parseUnixTime(args.requestedAtMs, "LinkedDeviceSessionCancelClaimedRequestV1.requestedAtMs")
2861
+ };
2862
+ }
2863
+ //#endregion
2864
+ //#region ../shared-ts/src/utils/webauthnDeviceInfo.ts
2865
+ const WEBAUTHN_DEVICE_BROWSERS = [
2866
+ "chrome",
2867
+ "safari",
2868
+ "firefox",
2869
+ "edge",
2870
+ "other"
2871
+ ];
2872
+ const WEBAUTHN_DEVICE_OSES = [
2873
+ "macos",
2874
+ "ios",
2875
+ "windows",
2876
+ "android",
2877
+ "linux",
2878
+ "other"
2879
+ ];
2880
+ function isWebAuthnDeviceBrowser(value) {
2881
+ return typeof value === "string" && WEBAUTHN_DEVICE_BROWSERS.some((browser) => browser === value);
2882
+ }
2883
+ function isWebAuthnDeviceOs(value) {
2884
+ return typeof value === "string" && WEBAUTHN_DEVICE_OSES.some((os) => os === value);
2885
+ }
2886
+ /** Strict parse of a stored/transported device-info record; null when the
2887
+ * shape is not a valid WebAuthnAuthenticatorDeviceInfo. */
2888
+ function parseWebAuthnAuthenticatorDeviceInfo(raw) {
2889
+ if (!raw || typeof raw !== "object" || Array.isArray(raw)) return null;
2890
+ const record = raw;
2891
+ const label = typeof record.label === "string" ? record.label.trim() : "";
2892
+ if (!label) return null;
2893
+ if (!isWebAuthnDeviceBrowser(record.browser)) return null;
2894
+ if (!isWebAuthnDeviceOs(record.os)) return null;
2895
+ if (typeof record.synced !== "boolean") return null;
2896
+ if (!Array.isArray(record.transports)) return null;
2897
+ const transports = record.transports.map((t) => typeof t === "string" ? t.trim() : "").filter((t) => t.length > 0);
2898
+ const provider = typeof record.provider === "string" ? record.provider.trim() : "";
2899
+ const providerLabel = typeof record.providerLabel === "string" ? record.providerLabel.trim() : "";
2900
+ return {
2901
+ label,
2902
+ browser: record.browser,
2903
+ os: record.os,
2904
+ synced: record.synced,
2905
+ transports,
2906
+ ...provider ? { provider } : {},
2907
+ ...providerLabel ? { providerLabel } : {}
2908
+ };
2909
+ }
2910
+ //#endregion
2911
+ //#region ../shared-ts/src/device-linking/deviceManagement.ts
2912
+ function listOf(item) {
2913
+ return (raw, label) => {
2914
+ if (!Array.isArray(raw)) throw new Error(`${label} is invalid`);
2915
+ return raw.map((entry, index) => item(entry, `${label}[${index}]`));
2916
+ };
2917
+ }
2918
+ function parseLinkedDeviceRevokeWalletAuthMethodId(raw, label) {
2919
+ const value = walletAuthMethodId(raw, label);
2920
+ if (value.startsWith("wallet-authority:") || value.startsWith("authority:")) throw new Error(`${label} must identify a WalletAuthMethodId`);
2921
+ return value;
2922
+ }
2923
+ function parsePositiveSafeInteger(raw, label) {
2924
+ const value = parseNonNegativeSafeInteger(raw, label);
2925
+ if (value < 1) throw new Error(`${label} must be a positive safe integer`);
2926
+ return value;
2927
+ }
2928
+ function parseWebAuthnDeviceInfo(raw, label) {
2929
+ const device = parseWebAuthnAuthenticatorDeviceInfo(raw);
2930
+ if (!device) throw new Error(`${label} is invalid`);
2931
+ return device;
2932
+ }
2933
+ function linkedOwnerCredentialMetadataV1() {
2934
+ return wireUnion("kind", [wireObject({
2935
+ kind: wireLiteral("passkey"),
2936
+ walletAuthMethodId,
2937
+ credentialIdB64u: credentialId,
2938
+ device: parseWebAuthnDeviceInfo
2939
+ }), wireObject({
2940
+ kind: wireLiteral("email_otp"),
2941
+ walletAuthMethodId,
2942
+ email: parseTargetEmail
2943
+ })]);
2944
+ }
2945
+ function parseLinkedOwnerCredentialMetadata(raw, label) {
2946
+ return linkedOwnerCredentialMetadataV1()(raw, label);
2947
+ }
2948
+ function linkedDeviceSummaryV1() {
2949
+ return wireObject({
2950
+ deviceId: linkedDeviceId,
2951
+ enrollmentId,
2952
+ walletId,
2953
+ credential: parseLinkedOwnerCredentialMetadata,
2954
+ permission: parseDelegatedWalletAuthority,
2955
+ keyManifestDigestB64u: digest,
2956
+ coveredWalletKeys: listOf(walletKeyId),
2957
+ state: wireLiteral("provisioning", "active", "suspended", "expired", "revoked"),
2958
+ createdAtMs: parseUnixTime,
2959
+ lastActivityAtMs: parseUnixTime,
2960
+ revocationEpoch: parseNonNegativeSafeInteger
2961
+ });
2962
+ }
2963
+ function parseLinkedDeviceSummaryV1(raw) {
2964
+ return linkedDeviceSummaryV1()(raw, "LinkedDeviceSummaryV1");
2965
+ }
2966
+ function linkedDeviceListRequestV1() {
2967
+ return wireObject({
2968
+ kind: wireLiteral("linked_device_list_request_v1"),
2969
+ walletId,
2970
+ limit: parsePositiveSafeInteger,
2971
+ cursor: nullableToken
2972
+ });
2973
+ }
2974
+ function parseLinkedDeviceListRequestV1(raw) {
2975
+ return linkedDeviceListRequestV1()(raw, "LinkedDeviceListRequestV1");
2976
+ }
2977
+ function ownerDeviceSummaryV1() {
2978
+ return wireObject({
2979
+ walletId,
2980
+ walletAuthorityId,
2981
+ credential: parseLinkedOwnerCredentialMetadata,
2982
+ createdAtMs: parseUnixTime,
2983
+ lastActivityAtMs: parseUnixTime
2984
+ });
2985
+ }
2986
+ function linkedDeviceListResultV1() {
2987
+ const ownerDevice = ownerDeviceSummaryV1();
2988
+ return wireObject({
2989
+ devices: listOf(parseLinkedDeviceSummaryV1),
2990
+ ownerDevices: listOf((raw) => ownerDevice(raw, "OwnerDeviceSummaryV1")),
2991
+ nextCursor: nullableToken
2992
+ });
2993
+ }
2994
+ function parseLinkedDeviceListResultV1(raw) {
2995
+ return linkedDeviceListResultV1()(raw, "LinkedDeviceListResultV1");
2996
+ }
2997
+ function linkedDeviceRevokeRequestV1() {
2998
+ return wireObject({
2999
+ kind: wireLiteral("linked_device_revoke_request_v1"),
3000
+ walletId,
3001
+ walletAuthMethodId: parseLinkedDeviceRevokeWalletAuthMethodId,
3002
+ requestedAtMs: parseUnixTime
3003
+ });
3004
+ }
3005
+ function parseLinkedDeviceRevokeRequestV1(raw) {
3006
+ return linkedDeviceRevokeRequestV1()(raw, "LinkedDeviceRevokeRequestV1");
3007
+ }
3008
+ function linkedDeviceRevokeFailureV1() {
3009
+ return wireObject({ kind: wireLiteral("not_found", "conflict", "unauthorized") });
3010
+ }
3011
+ function linkedDeviceRevokedV1() {
3012
+ return wireObject({
3013
+ kind: wireLiteral("revoked"),
3014
+ walletAuthMethodId: parseLinkedDeviceRevokeWalletAuthMethodId,
3015
+ authorityId: walletAuthorityId,
3016
+ revocationEpoch: parseNonNegativeSafeInteger
3017
+ });
3018
+ }
3019
+ function parseLinkedDeviceRevokeResultV1(raw) {
3020
+ const record = requireRecord(raw, "LinkedDeviceRevokeResultV1");
3021
+ return (record.kind === "not_found" || record.kind === "conflict" || record.kind === "unauthorized" ? linkedDeviceRevokeFailureV1() : linkedDeviceRevokedV1())(record, "LinkedDeviceRevokeResultV1");
3022
+ }
3023
+ //#endregion
3024
+ //#region ../shared-ts/src/device-linking/walletSessionCredentialDelivery.ts
3025
+ const DELIVERY_AAD_DOMAIN = "seams/linked-device/wallet-session-credential-delivery-aad/v1";
3026
+ const DELIVERY_ENVELOPE_DOMAIN = "seams/linked-device/wallet-session-credential-delivery-envelope/v1";
3027
+ function encodeLinkedDeviceWalletSessionCredentialDeliveryAadV1(aad) {
3028
+ return alphabetizeStringify({
3029
+ domain: DELIVERY_AAD_DOMAIN,
3030
+ aad
3031
+ });
3032
+ }
3033
+ function parseLinkedDeviceWalletSessionCredentialDeliveryBindingV1(raw) {
3034
+ const record = exactRecord(raw, [
3035
+ "kind",
3036
+ "namespace",
3037
+ "orgId",
3038
+ "projectId",
3039
+ "envId",
3040
+ "tenantId",
3041
+ "principalId"
3042
+ ], "LinkedDeviceWalletSessionCredentialDeliveryBindingV1");
3043
+ if (record.kind !== "linked_device_wallet_session_credential_delivery_binding_v1") throw new Error("LinkedDeviceWalletSessionCredentialDeliveryBindingV1.kind is invalid");
3044
+ return {
3045
+ kind: "linked_device_wallet_session_credential_delivery_binding_v1",
3046
+ namespace: nonEmpty(record.namespace, "namespace"),
3047
+ orgId: nonEmpty(record.orgId, "orgId"),
3048
+ projectId: nonEmpty(record.projectId, "projectId"),
3049
+ envId: nonEmpty(record.envId, "envId"),
3050
+ tenantId: parsed(parseTenantId(record.tenantId)),
3051
+ principalId: parsed(parsePrincipalId(record.principalId))
3052
+ };
3053
+ }
3054
+ async function computeLinkedDeviceWalletSessionCredentialDeliveryAadDigestB64u(aad) {
3055
+ return sha256Utf8DigestB64u(encodeLinkedDeviceWalletSessionCredentialDeliveryAadV1(aad));
3056
+ }
3057
+ async function computeLinkedDeviceWalletSessionCredentialEnvelopeDigestB64u(envelope) {
3058
+ return sha256Utf8DigestB64u(alphabetizeStringify({
3059
+ domain: DELIVERY_ENVELOPE_DOMAIN,
3060
+ envelope
3061
+ }));
3062
+ }
3063
+ async function assertLinkedDeviceWalletSessionCredentialDeliveryIntegrityV1(delivery) {
3064
+ if (await computeLinkedDeviceWalletSessionCredentialDeliveryAadDigestB64u(delivery.aad) !== delivery.aadDigestB64u) throw new Error("linked-device Wallet Session credential delivery AAD digest is invalid");
3065
+ if (await computeLinkedDeviceWalletSessionCredentialEnvelopeDigestB64u(delivery.envelope) !== delivery.envelopeDigestB64u) throw new Error("linked-device Wallet Session credential delivery envelope digest is invalid");
3066
+ if (await sha256Utf8DigestB64u(alphabetizeStringify({
3067
+ domain: "seams/linked-device/delivery-recipient/v1",
3068
+ recipientPublicKey65B64u: delivery.aad.recipientPublicKey65B64u
3069
+ })) !== delivery.recipientBindingDigestB64u) throw new Error("linked-device Wallet Session credential delivery recipient binding is invalid");
3070
+ }
3071
+ function parseLinkedDeviceWalletSessionCredentialDeliveryV1(raw) {
3072
+ const record = exactRecord(raw, [
3073
+ "kind",
3074
+ "aad",
3075
+ "aadDigestB64u",
3076
+ "recipientBindingDigestB64u",
3077
+ "envelope",
3078
+ "envelopeDigestB64u",
3079
+ "installationReceiptDigestB64u"
3080
+ ], "LinkedDeviceWalletSessionCredentialDeliveryV1");
3081
+ if (record.kind !== "linked_device_wallet_session_credential_delivery_v1") throw new Error("LinkedDeviceWalletSessionCredentialDeliveryV1.kind is invalid");
3082
+ return {
3083
+ kind: "linked_device_wallet_session_credential_delivery_v1",
3084
+ aad: parseDeliveryAad(record.aad),
3085
+ aadDigestB64u: parseDigestB64u(record.aadDigestB64u),
3086
+ recipientBindingDigestB64u: parseDigestB64u(record.recipientBindingDigestB64u),
3087
+ envelope: parseDeliveryEnvelope(record.envelope),
3088
+ envelopeDigestB64u: parseDigestB64u(record.envelopeDigestB64u),
3089
+ installationReceiptDigestB64u: parseDigestB64u(record.installationReceiptDigestB64u)
3090
+ };
3091
+ }
3092
+ function parseDeliveryAad(raw) {
3093
+ const record = exactRecord(raw, [
3094
+ "kind",
3095
+ "namespace",
3096
+ "orgId",
3097
+ "projectId",
3098
+ "envId",
3099
+ "tenantId",
3100
+ "principalId",
3101
+ "linkSessionId",
3102
+ "walletId",
3103
+ "authorityId",
3104
+ "walletAuthMethodId",
3105
+ "authorizationId",
3106
+ "walletSessionId",
3107
+ "quotaId",
3108
+ "credentialDigestB64u",
3109
+ "recipientPublicKey65B64u",
3110
+ "issuedAtMs",
3111
+ "expiresAtMs"
3112
+ ], "LinkedDeviceWalletSessionCredentialDeliveryAadV1");
3113
+ if (record.kind !== "linked_device_wallet_session_credential_delivery_aad_v1") throw new Error("LinkedDeviceWalletSessionCredentialDeliveryAadV1.kind is invalid");
3114
+ const issuedAtMs = positiveInteger(record.issuedAtMs, "issuedAtMs");
3115
+ const expiresAtMs = positiveInteger(record.expiresAtMs, "expiresAtMs");
3116
+ if (expiresAtMs <= issuedAtMs) throw new Error("expiresAtMs must be after issuedAtMs");
3117
+ return {
3118
+ kind: "linked_device_wallet_session_credential_delivery_aad_v1",
3119
+ namespace: nonEmpty(record.namespace, "namespace"),
3120
+ orgId: nonEmpty(record.orgId, "orgId"),
3121
+ projectId: nonEmpty(record.projectId, "projectId"),
3122
+ envId: nonEmpty(record.envId, "envId"),
3123
+ tenantId: parsed(parseTenantId(record.tenantId)),
3124
+ principalId: parsed(parsePrincipalId(record.principalId)),
3125
+ linkSessionId: parsed(parseLinkDeviceSessionId(record.linkSessionId)),
3126
+ walletId: parsed(parseWalletId(record.walletId)),
3127
+ authorityId: parsed(parseWalletAuthorityId(record.authorityId)),
3128
+ walletAuthMethodId: parsed(parseWalletAuthMethodId(record.walletAuthMethodId)),
3129
+ authorizationId: parsed(parseWalletSessionAuthorizationId(record.authorizationId)),
3130
+ walletSessionId: parsed(parseWalletSessionId(record.walletSessionId)),
3131
+ quotaId: parsed(parseMpcWalletSigningQuotaId(record.quotaId)),
3132
+ credentialDigestB64u: parseDigestB64u(record.credentialDigestB64u),
3133
+ recipientPublicKey65B64u: fixedBase64Url(record.recipientPublicKey65B64u, 65),
3134
+ issuedAtMs,
3135
+ expiresAtMs
3136
+ };
3137
+ }
3138
+ function parseDeliveryEnvelope(raw) {
3139
+ const record = exactRecord(raw, [
3140
+ "kind",
3141
+ "algorithm",
3142
+ "serverEphemeralPublicKey65B64u",
3143
+ "nonce12B64u",
3144
+ "ciphertextB64u"
3145
+ ], "LinkedDeviceWalletSessionCredentialEnvelopeV1");
3146
+ if (record.kind !== "linked_device_wallet_session_credential_envelope_v1" || record.algorithm !== "p256-ecdh-aes256gcm-v1") throw new Error("LinkedDeviceWalletSessionCredentialEnvelopeV1 identity is invalid");
3147
+ return {
3148
+ kind: "linked_device_wallet_session_credential_envelope_v1",
3149
+ algorithm: "p256-ecdh-aes256gcm-v1",
3150
+ serverEphemeralPublicKey65B64u: fixedBase64Url(record.serverEphemeralPublicKey65B64u, 65),
3151
+ nonce12B64u: fixedBase64Url(record.nonce12B64u, 12),
3152
+ ciphertextB64u: canonicalBase64Url(record.ciphertextB64u)
3153
+ };
3154
+ }
3155
+ function exactRecord(raw, fields, label) {
3156
+ if (typeof raw !== "object" || raw === null || Array.isArray(raw)) throw new Error(`${label} must be an object`);
3157
+ const record = raw;
3158
+ const expected = new Set(fields);
3159
+ for (const field of Object.keys(record)) if (!expected.has(field)) throw new Error(`${label}.${field} is not supported`);
3160
+ for (const field of fields) if (!(field in record)) throw new Error(`${label}.${field} is required`);
3161
+ return record;
3162
+ }
3163
+ function nonEmpty(raw, label) {
3164
+ if (typeof raw !== "string" || raw.length === 0 || raw.trim() !== raw) throw new Error(`${label} is required`);
3165
+ return raw;
3166
+ }
3167
+ function positiveInteger(raw, label) {
3168
+ if (!Number.isSafeInteger(raw) || Number(raw) <= 0) throw new Error(`${label} is invalid`);
3169
+ return Number(raw);
3170
+ }
3171
+ function canonicalBase64Url(raw) {
3172
+ const encoded = nonEmpty(raw, "base64url");
3173
+ if (base64UrlEncode(base64UrlDecode(encoded)) !== encoded) throw new Error("base64url is not canonical");
3174
+ return encoded;
3175
+ }
3176
+ function fixedBase64Url(raw, length) {
3177
+ const encoded = canonicalBase64Url(raw);
3178
+ const bytes = base64UrlDecode(encoded);
3179
+ if (bytes.length !== length) throw new Error(`base64url must contain ${length} bytes`);
3180
+ if (length === 65 && bytes[0] !== 4) throw new Error("P-256 public key is invalid");
3181
+ return encoded;
3182
+ }
3183
+ function parsed(result) {
3184
+ if (!result.ok) throw new Error(result.error.message);
3185
+ return result.value;
3186
+ }
3187
+ //#endregion
3188
+ //#region ../shared-ts/src/device-linking/authorityActivation.ts
3189
+ function parseInstalledActivationRefs(raw, label) {
3190
+ const result = parseWalletSignerActivationSetV1(raw);
3191
+ if (!result.ok) throw new Error(`${label} ${result.error}`);
3192
+ return result.value;
3193
+ }
3194
+ function localAuthorityInstallationReceiptV1() {
3195
+ return wireObject({
3196
+ kind: wireLiteral("local_authority_installation_receipt_v1"),
3197
+ authorityId: keyLabeled(walletAuthorityId),
3198
+ walletId: keyLabeled(walletId),
3199
+ authMethodId: keyLabeled(walletAuthMethodId),
3200
+ deviceId: keyLabeled(authorizationDeviceId),
3201
+ packageSetDigestB64u: keyLabeled(digest),
3202
+ installedActivationRefs: parseInstalledActivationRefs,
3203
+ installedRecordSetDigestB64u: keyLabeled(digest),
3204
+ targetFactorVerificationDigestB64u: keyLabeled(digest),
3205
+ installedAtMs: keyLabeled(parseUnixTime)
3206
+ });
3207
+ }
3208
+ function parseLocalAuthorityInstallationReceiptV1(raw) {
3209
+ return localAuthorityInstallationReceiptV1()(raw, "LocalAuthorityInstallationReceiptV1");
3210
+ }
3211
+ function localAuthorityActivationFinalAckV1() {
3212
+ return wireObject({
3213
+ kind: wireLiteral("local_authority_activation_final_ack_v1"),
3214
+ linkSessionId: keyLabeled(sessionId),
3215
+ authorityId: keyLabeled(walletAuthorityId),
3216
+ packageSetDigestB64u: keyLabeled(digest),
3217
+ authorizationId: keyLabeled(walletSessionAuthorizationId),
3218
+ walletSessionId: keyLabeled(walletSessionId),
3219
+ credentialDigestB64u: keyLabeled(digest),
3220
+ installationReceiptDigestB64u: keyLabeled(digest),
3221
+ acknowledgedAtMs: keyLabeled(parseUnixTime)
3222
+ });
3223
+ }
3224
+ function parseLocalAuthorityActivationFinalAckV1(raw) {
3225
+ return localAuthorityActivationFinalAckV1()(raw, "LocalAuthorityActivationFinalAckV1");
3226
+ }
3227
+ function parseActivateInstalledAuthorityResultV1(raw) {
3228
+ const record = requireRecord(raw, "ActivateInstalledAuthorityResultV1");
3229
+ switch (record.kind) {
3230
+ case "active": {
3231
+ rejectUnknownFields$1(record, [
3232
+ "kind",
3233
+ "authority",
3234
+ "authMethod",
3235
+ "walletSession",
3236
+ "deliveryBinding",
3237
+ "sealedDelivery"
3238
+ ], "ActivateInstalledAuthorityResultV1");
3239
+ const authorityResult = parseWalletAuthorityV1(record.authority);
3240
+ if (!authorityResult.ok || authorityResult.value.state !== "active") throw new Error("ActivateInstalledAuthorityResultV1.authority must be active");
3241
+ const authMethod = parseWalletAuthMethodRecordV2(record.authMethod);
3242
+ if (!authMethod || authMethod.status !== "active") throw new Error("ActivateInstalledAuthorityResultV1.authMethod must be active");
3243
+ const walletSession = parseActiveWalletSessionV1(record.walletSession);
3244
+ const deliveryBinding = parseLinkedDeviceWalletSessionCredentialDeliveryBindingV1(record.deliveryBinding);
3245
+ const sealedDelivery = parseLinkedDeviceWalletSessionCredentialDeliveryV1(record.sealedDelivery);
3246
+ if (authorityResult.value.walletId !== authMethod.walletId || authorityResult.value.authorityId !== authMethod.walletAuthorityId || walletSession.walletId !== authorityResult.value.walletId || walletSession.authorityId !== authorityResult.value.authorityId || walletSession.authMethodId !== authMethod.walletAuthMethodId || walletSession.authorityDigestB64u !== authorityResult.value.authorityDigestB64u || walletSession.authorityRevocationEpoch !== authorityResult.value.revocationEpoch || deliveryBinding.namespace !== sealedDelivery.aad.namespace || deliveryBinding.orgId !== sealedDelivery.aad.orgId || deliveryBinding.projectId !== sealedDelivery.aad.projectId || deliveryBinding.envId !== sealedDelivery.aad.envId || deliveryBinding.tenantId !== sealedDelivery.aad.tenantId || deliveryBinding.principalId !== sealedDelivery.aad.principalId || sealedDelivery.aad.walletId !== walletSession.walletId || sealedDelivery.aad.authorityId !== walletSession.authorityId || sealedDelivery.aad.walletAuthMethodId !== walletSession.authMethodId || sealedDelivery.aad.authorizationId !== walletSession.authorizationId || sealedDelivery.aad.quotaId !== walletSession.quotaId || sealedDelivery.aad.issuedAtMs !== walletSession.issuedAtMs || sealedDelivery.aad.expiresAtMs !== walletSession.expiresAtMs) throw new Error("ActivateInstalledAuthorityResultV1 identities do not match");
3247
+ return {
3248
+ kind: "active",
3249
+ authority: authorityResult.value,
3250
+ authMethod,
3251
+ walletSession,
3252
+ deliveryBinding,
3253
+ sealedDelivery
3254
+ };
3255
+ }
3256
+ case "pending_local_install":
3257
+ rejectUnknownFields$1(record, [
3258
+ "kind",
3259
+ "authorityId",
3260
+ "reason"
3261
+ ], "ActivateInstalledAuthorityResultV1");
3262
+ return {
3263
+ kind: "pending_local_install",
3264
+ authorityId: walletAuthorityId(record.authorityId, "authorityId"),
3265
+ reason: activationRetryReasonV1()(record.reason, "ActivationRetryReasonV1")
3266
+ };
3267
+ case "integrity_error":
3268
+ rejectUnknownFields$1(record, ["kind", "reason"], "ActivateInstalledAuthorityResultV1");
3269
+ return {
3270
+ kind: "integrity_error",
3271
+ reason: parseLinkIntegrityFailureV1(record.reason)
3272
+ };
3273
+ default: throw new Error("ActivateInstalledAuthorityResultV1.kind is invalid");
3274
+ }
3275
+ }
3276
+ function activationRetryReasonV1() {
3277
+ return wireUnion("kind", [
3278
+ wireObject({ kind: wireLiteral("installation_receipt_not_found") }),
3279
+ wireObject({ kind: wireLiteral("server_worker_activation_pending") }),
3280
+ wireObject({ kind: wireLiteral("wallet_session_issuance_pending") })
3281
+ ]);
3282
+ }
3283
+ function parseLinkIntegrityFailureV1(raw) {
3284
+ const record = requireRecord(raw, "LinkIntegrityFailureV1");
3285
+ switch (record.kind) {
3286
+ case "authority_id_mismatch":
3287
+ rejectUnknownFields$1(record, [
3288
+ "kind",
3289
+ "expectedAuthorityId",
3290
+ "actualAuthorityId"
3291
+ ], "LinkIntegrityFailureV1");
3292
+ return {
3293
+ kind: "authority_id_mismatch",
3294
+ expectedAuthorityId: walletAuthorityId(record.expectedAuthorityId, "expectedAuthorityId"),
3295
+ actualAuthorityId: walletAuthorityId(record.actualAuthorityId, "actualAuthorityId")
3296
+ };
3297
+ case "package_set_digest_mismatch":
3298
+ rejectUnknownFields$1(record, [
3299
+ "kind",
3300
+ "expectedPackageSetDigestB64u",
3301
+ "actualPackageSetDigestB64u"
3302
+ ], "LinkIntegrityFailureV1");
3303
+ return {
3304
+ kind: "package_set_digest_mismatch",
3305
+ expectedPackageSetDigestB64u: digest(record.expectedPackageSetDigestB64u, "expectedPackageSetDigestB64u"),
3306
+ actualPackageSetDigestB64u: digest(record.actualPackageSetDigestB64u, "actualPackageSetDigestB64u")
3307
+ };
3308
+ case "installation_receipt_mismatch":
3309
+ rejectUnknownFields$1(record, ["kind", "field"], "LinkIntegrityFailureV1");
3310
+ if (record.field !== "walletId" && record.field !== "authMethodId" && record.field !== "deviceId" && record.field !== "targetFactorVerificationDigestB64u" && record.field !== "installedActivationRefs") throw new Error("LinkIntegrityFailureV1.field is invalid");
3311
+ return {
3312
+ kind: "installation_receipt_mismatch",
3313
+ field: record.field
3314
+ };
3315
+ default: throw new Error("LinkIntegrityFailureV1.kind is invalid");
3316
+ }
3317
+ }
3318
+ //#endregion
3319
+ //#region ../shared-ts/src/device-linking/digests.ts
3320
+ const TARGET_PREPARATION_DOMAIN = "seams/linked-device/target-preparation/v1";
3321
+ const LOCAL_AUTHORITY_INSTALLATION_RECEIPT_DOMAIN = "seams/linked-device/local-authority-installation-receipt/v1";
3322
+ new TextEncoder();
3323
+ /**
3324
+ * The server stores this digest alongside the authorization. Hashing the
3325
+ * opaque token directly keeps the browser binding identical to that row.
3326
+ */
3327
+ async function computeWalletSessionOperationCredentialDigestB64u(credential) {
3328
+ return sha256Utf8DigestB64u(credential.token);
3329
+ }
3330
+ function encodeWalletSessionInstallationReceiptV1(receipt) {
3331
+ return alphabetizeStringify({
3332
+ domain: LOCAL_AUTHORITY_INSTALLATION_RECEIPT_DOMAIN,
3333
+ receipt
3334
+ });
3335
+ }
3336
+ async function computeWalletSessionInstallationReceiptDigestB64u(receipt) {
3337
+ return sha256Utf8DigestB64u(encodeWalletSessionInstallationReceiptV1(receipt));
3338
+ }
3339
+ function requirePresentString(value, label) {
3340
+ if (value === void 0) throw new Error(`${label} is required`);
3341
+ return value;
3342
+ }
3343
+ function encodeTargetFactor(value) {
3344
+ return text(value.kind, "targetFactor.kind");
3345
+ }
3346
+ function encodeLinkedDevicePasskeyCreationOptionsV1(value) {
3347
+ const algorithms = value.pubKeyCredParams.map((entry) => concat([text(entry.type, "passkeyCreationOptions.pubKeyCredParams.type"), text(String(entry.alg), "passkeyCreationOptions.pubKeyCredParams.alg")]));
3348
+ const excludeCredentials = value.excludeCredentials.map((entry) => concat([text(entry.type, "passkeyCreationOptions.excludeCredentials.type"), text(entry.id, "passkeyCreationOptions.excludeCredentials.id")]));
3349
+ return concat([
3350
+ text(value.kind, "passkeyCreationOptions.kind"),
3351
+ text(value.walletAuthMethodId, "passkeyCreationOptions.walletAuthMethodId"),
3352
+ text(value.challengeId, "passkeyCreationOptions.challengeId"),
3353
+ text(value.challengeB64u, "passkeyCreationOptions.challengeB64u"),
3354
+ text(value.rpId, "passkeyCreationOptions.rpId"),
3355
+ text(value.user.idB64u, "passkeyCreationOptions.user.idB64u"),
3356
+ text(value.user.name, "passkeyCreationOptions.user.name"),
3357
+ text(value.user.displayName, "passkeyCreationOptions.user.displayName"),
3358
+ u32(algorithms.length, "passkeyCreationOptions.pubKeyCredParams"),
3359
+ ...algorithms.map((entry) => lp32(entry, "passkeyCreationOptions.pubKeyCredParams.item")),
3360
+ text(value.authenticatorSelection.residentKey, "passkeyCreationOptions.authenticatorSelection.residentKey"),
3361
+ text(value.authenticatorSelection.userVerification, "passkeyCreationOptions.authenticatorSelection.userVerification"),
3362
+ u64(value.timeoutMs, "passkeyCreationOptions.timeoutMs"),
3363
+ text(value.attestation, "passkeyCreationOptions.attestation"),
3364
+ text(value.extensions.prf.eval.firstB64u, "passkeyCreationOptions.extensions.prf.eval.firstB64u"),
3365
+ text(value.extensions.prf.eval.secondB64u, "passkeyCreationOptions.extensions.prf.eval.secondB64u"),
3366
+ u32(excludeCredentials.length, "passkeyCreationOptions.excludeCredentials"),
3367
+ ...excludeCredentials.map((entry) => lp32(entry, "passkeyCreationOptions.excludeCredentials.item"))
3368
+ ]);
3369
+ }
3370
+ function encodeRecipientRequirement(value) {
3371
+ return concat([
3372
+ text(value.kind, "recipientRequirement.kind"),
3373
+ text(value.keyFamily, "recipientRequirement.keyFamily"),
3374
+ text(value.walletKeyId, "recipientRequirement.walletKeyId")
3375
+ ]);
3376
+ }
3377
+ function encodeEd25519ExportRootPreparation(value) {
3378
+ if (value === null) return text("none", "ed25519ExportRoot.kind");
3379
+ return concat([
3380
+ text(value.kind, "ed25519ExportRoot.kind"),
3381
+ text(value.walletKeyId, "ed25519ExportRoot.walletKeyId"),
3382
+ rawDigest(value.applicationBindingDigestB64u, "ed25519ExportRoot.applicationBindingDigestB64u"),
3383
+ rawPublicKey(value.registeredPublicKeyB64u, "ed25519ExportRoot.registeredPublicKeyB64u"),
3384
+ u64(value.revocationEpoch, "ed25519ExportRoot.revocationEpoch")
3385
+ ]);
3386
+ }
3387
+ function encodeLinkedDeviceTargetPreparationV1(value) {
3388
+ const requirements = value.ordinarySignerMaterialRecipientRequirements.map(encodeRecipientRequirement);
3389
+ const passkeyPreparation = isPasskeyTargetPreparationV1(value) ? value : void 0;
3390
+ const passkeyCreationOptions = passkeyPreparation?.passkeyCreationOptions;
3391
+ if (value.targetFactor.kind === "passkey_prf" && !passkeyCreationOptions) throw new Error("passkey target preparation is missing creation options");
3392
+ return concat([
3393
+ text(TARGET_PREPARATION_DOMAIN, "domain"),
3394
+ text(value.kind, "kind"),
3395
+ text(value.linkSessionId, "linkSessionId"),
3396
+ text(value.walletId, "walletId"),
3397
+ text(value.enrollmentId, "enrollmentId"),
3398
+ text(value.deviceId, "deviceId"),
3399
+ lp32(rawPublicKey(value.deliveryRecipientPublicKey65B64u, "deliveryRecipientPublicKey65B64u"), "deliveryRecipientPublicKey65B64u"),
3400
+ text(value.walletAuthMethodId, "walletAuthMethodId"),
3401
+ lp32(encodeEd25519ExportRootPreparation(value.ed25519ExportRoot), "ed25519ExportRoot"),
3402
+ lp32(encodeTargetFactor(value.targetFactor), "targetFactor"),
3403
+ ...passkeyCreationOptions ? [lp32(encodeLinkedDevicePasskeyCreationOptionsV1(passkeyCreationOptions), "passkeyCreationOptions"), rawDigest(passkeyPreparation.passkeyConfigurationDigestB64u, "passkeyConfigurationDigestB64u")] : [],
3404
+ ...encodeEmailTargetPreparationFactorBindingV1(value),
3405
+ u32(requirements.length, "ordinarySignerMaterialRecipientRequirements"),
3406
+ ...requirements.map((entry) => lp32(entry, "ordinarySignerMaterialRecipientRequirements.item")),
3407
+ u64(value.issuedAtMs, "issuedAtMs"),
3408
+ u64(value.expiresAtMs, "expiresAtMs")
3409
+ ]);
3410
+ }
3411
+ function encodeEmailTargetPreparationFactorBindingV1(value) {
3412
+ if (isPasskeyTargetPreparationV1(value)) return [];
3413
+ return [
3414
+ text(value.targetEmail, "targetEmail"),
3415
+ text(value.enrollment.kind, "enrollment.kind"),
3416
+ ...value.enrollment.kind === "existing_enrollment" ? [text(requirePresentString(value.baseWalletAuthMethodId, "baseWalletAuthMethodId"), "baseWalletAuthMethodId")] : []
3417
+ ];
3418
+ }
3419
+ function isPasskeyTargetPreparationV1(value) {
3420
+ return value.targetFactor.kind === "passkey_prf";
3421
+ }
3422
+ async function computeLinkedDeviceTargetPreparationDigestV1(value) {
3423
+ return sha256DigestB64u(encodeLinkedDeviceTargetPreparationV1(value));
3424
+ }
3425
+ //#endregion
3426
+ //#region ../shared-ts/src/device-linking/requestProof.ts
3427
+ const LINKED_DEVICE_REQUEST_PROOF_HEADER_V1 = "x-seams-linked-device-proof-v1";
3428
+ const LINKED_DEVICE_REQUEST_PROOF_MAX_TTL_MS_V1 = 6e4;
3429
+ const LINKED_DEVICE_CLOCK_SKEW_TOLERANCE_MS_V1 = 6e4;
3430
+ async function computeLinkedDevicePublicKeyDigestV1(publicKeyB64u) {
3431
+ return sha256DigestB64u(parseFixedB64u(publicKeyB64u, 32, "devicePublicKeyB64u"));
3432
+ }
3433
+ function parseFixedB64u(value, expectedBytes, label) {
3434
+ if (typeof value !== "string" || value.length === 0 || !/^[A-Za-z0-9_-]+$/.test(value)) throw new Error(`${label} is invalid`);
3435
+ let bytes;
3436
+ try {
3437
+ bytes = base64UrlDecode(value);
3438
+ } catch {
3439
+ throw new Error(`${label} is invalid`);
3440
+ }
3441
+ if (bytes.length !== expectedBytes || base64UrlEncode(bytes) !== value) throw new Error(`${label} is invalid`);
3442
+ return bytes;
3443
+ }
3444
+ //#endregion
3445
+ //#region ../shared-ts/src/utils/walletCapabilityBindings.ts
3446
+ function objectRecord(raw) {
3447
+ if (!raw || typeof raw !== "object" || Array.isArray(raw)) return null;
3448
+ return raw;
3449
+ }
3450
+ function trimString(raw) {
3451
+ return typeof raw === "string" ? raw.trim() : "";
3452
+ }
3453
+ function parseStringField(raw, fieldName) {
3454
+ const value = trimString(raw);
3455
+ if (!value) return {
3456
+ ok: false,
3457
+ error: {
3458
+ code: "missing",
3459
+ message: `${fieldName} is required`
3460
+ }
3461
+ };
3462
+ return {
3463
+ ok: true,
3464
+ value
3465
+ };
3466
+ }
3467
+ function parseSignerSlot(raw) {
3468
+ const signerSlot = typeof raw === "number" ? raw : Number(raw);
3469
+ if (!Number.isSafeInteger(signerSlot) || signerSlot < 1) return {
3470
+ ok: false,
3471
+ error: {
3472
+ code: "invalid",
3473
+ message: "signerSlot must be an integer >= 1"
3474
+ }
3475
+ };
3476
+ return {
3477
+ ok: true,
3478
+ value: signerSlot
3479
+ };
3480
+ }
3481
+ function missingObject(typeName) {
3482
+ return {
3483
+ ok: false,
3484
+ error: {
3485
+ code: "invalid",
3486
+ message: `${typeName} must be an object`
3487
+ }
3488
+ };
3489
+ }
3490
+ function parseRpId(raw) {
3491
+ const parsed = parseWebAuthnRpId(raw);
3492
+ if (!parsed.ok) return {
3493
+ ok: false,
3494
+ error: parsed.error
3495
+ };
3496
+ return {
3497
+ ok: true,
3498
+ value: parsed.value
3499
+ };
3500
+ }
3501
+ function walletIdentityFromRaw(raw) {
3502
+ const record = objectRecord(raw);
3503
+ if (!record) return missingObject("WalletIdentity");
3504
+ const parsed = parseWalletId(record.walletId);
3505
+ if (!parsed.ok) return {
3506
+ ok: false,
3507
+ error: parsed.error
3508
+ };
3509
+ return {
3510
+ ok: true,
3511
+ value: { walletId: parsed.value }
3512
+ };
3513
+ }
3514
+ function buildWalletIdentity(args) {
3515
+ return { walletId: args.walletId };
3516
+ }
3517
+ function passkeyAuthScopeFromRaw(raw) {
3518
+ const record = objectRecord(raw);
3519
+ if (!record) return missingObject("PasskeyAuthScope");
3520
+ const wallet = walletIdentityFromRaw(record.wallet);
3521
+ if (!wallet.ok) return wallet;
3522
+ const rpId = parseRpId(record.rpId);
3523
+ if (!rpId.ok) return rpId;
3524
+ return {
3525
+ ok: true,
3526
+ value: {
3527
+ wallet: wallet.value,
3528
+ rpId: rpId.value
3529
+ }
3530
+ };
3531
+ }
3532
+ function buildPasskeyAuthScope(args) {
3533
+ return {
3534
+ wallet: args.wallet,
3535
+ rpId: args.rpId
3536
+ };
3537
+ }
3538
+ function buildPasskeyWalletAuthMethodBinding(args) {
3539
+ const credentialIdB64u = trimString(args.credentialIdB64u);
3540
+ if (!credentialIdB64u) throw new Error("credentialIdB64u is required");
3541
+ return {
3542
+ kind: "passkey",
3543
+ walletAuthMethodId: args.walletAuthMethodId,
3544
+ scope: args.scope,
3545
+ credentialIdB64u
3546
+ };
3547
+ }
3548
+ function buildEmailOtpWalletAuthMethodBinding(args) {
3549
+ const emailHashHex = trimString(args.emailHashHex);
3550
+ const registrationAuthorityId = trimString(args.registrationAuthorityId);
3551
+ if (!emailHashHex) throw new Error("emailHashHex is required");
3552
+ if (!registrationAuthorityId) throw new Error("registrationAuthorityId is required");
3553
+ return {
3554
+ kind: "email_otp",
3555
+ walletAuthMethodId: args.walletAuthMethodId,
3556
+ wallet: args.wallet,
3557
+ emailHashHex,
3558
+ registrationAuthorityId
3559
+ };
3560
+ }
3561
+ function walletAuthMethodBindingFromRaw(raw) {
3562
+ const record = objectRecord(raw);
3563
+ if (!record) return missingObject("WalletAuthMethodBinding");
3564
+ const kind = trimString(record.kind);
3565
+ const walletAuthMethodId = parseWalletAuthMethodId(record.walletAuthMethodId);
3566
+ if (!walletAuthMethodId.ok) return {
3567
+ ok: false,
3568
+ error: walletAuthMethodId.error
3569
+ };
3570
+ if (kind === "passkey") {
3571
+ const scope = passkeyAuthScopeFromRaw(record.scope);
3572
+ if (!scope.ok) return scope;
3573
+ const credentialIdB64u = parseStringField(record.credentialIdB64u, "credentialIdB64u");
3574
+ if (!credentialIdB64u.ok) return credentialIdB64u;
3575
+ return {
3576
+ ok: true,
3577
+ value: buildPasskeyWalletAuthMethodBinding({
3578
+ walletAuthMethodId: walletAuthMethodId.value,
3579
+ scope: scope.value,
3580
+ credentialIdB64u: credentialIdB64u.value
3581
+ })
3582
+ };
3583
+ }
3584
+ if (kind === "email_otp") {
3585
+ if ("rpId" in record && trimString(record.rpId)) return {
3586
+ ok: false,
3587
+ error: {
3588
+ code: "invalid",
3589
+ message: "Email OTP auth-method binding must not include rpId"
3590
+ }
3591
+ };
3592
+ const wallet = walletIdentityFromRaw(record.wallet);
3593
+ if (!wallet.ok) return wallet;
3594
+ const emailHashHex = parseStringField(record.emailHashHex, "emailHashHex");
3595
+ if (!emailHashHex.ok) return emailHashHex;
3596
+ const registrationAuthorityId = parseStringField(record.registrationAuthorityId, "registrationAuthorityId");
3597
+ if (!registrationAuthorityId.ok) return registrationAuthorityId;
3598
+ return {
3599
+ ok: true,
3600
+ value: buildEmailOtpWalletAuthMethodBinding({
3601
+ walletAuthMethodId: walletAuthMethodId.value,
3602
+ wallet: wallet.value,
3603
+ emailHashHex: emailHashHex.value,
3604
+ registrationAuthorityId: registrationAuthorityId.value
3605
+ })
3606
+ };
3607
+ }
3608
+ return {
3609
+ ok: false,
3610
+ error: {
3611
+ code: "invalid",
3612
+ message: "WalletAuthMethodBinding kind is invalid"
3613
+ }
3614
+ };
3615
+ }
3616
+ function buildImplicitNearAccountBinding(args) {
3617
+ return {
3618
+ kind: "implicit_near_account",
3619
+ wallet: args.wallet,
3620
+ nearAccountId: args.nearAccountId
3621
+ };
3622
+ }
3623
+ function buildNamedNearAccountBinding(args) {
3624
+ return {
3625
+ kind: "named_near_account",
3626
+ wallet: args.wallet,
3627
+ nearAccountId: args.nearAccountId
3628
+ };
3629
+ }
3630
+ function nearAccountBindingFromRaw(raw) {
3631
+ const record = objectRecord(raw);
3632
+ if (!record) return missingObject("NearAccountBinding");
3633
+ const wallet = walletIdentityFromRaw(record.wallet);
3634
+ if (!wallet.ok) return wallet;
3635
+ const kind = trimString(record.kind);
3636
+ if (kind === "implicit_near_account") {
3637
+ const nearAccountId = parseImplicitNearAccountId(record.nearAccountId);
3638
+ if (!nearAccountId.ok) return {
3639
+ ok: false,
3640
+ error: {
3641
+ code: nearAccountId.code,
3642
+ message: nearAccountId.message
3643
+ }
3644
+ };
3645
+ return {
3646
+ ok: true,
3647
+ value: buildImplicitNearAccountBinding({
3648
+ wallet: wallet.value,
3649
+ nearAccountId: nearAccountId.value
3650
+ })
3651
+ };
3652
+ }
3653
+ if (kind === "named_near_account") {
3654
+ const nearAccountId = parseNamedNearAccountId(record.nearAccountId);
3655
+ if (!nearAccountId.ok) return {
3656
+ ok: false,
3657
+ error: {
3658
+ code: nearAccountId.code,
3659
+ message: nearAccountId.message
3660
+ }
3661
+ };
3662
+ return {
3663
+ ok: true,
3664
+ value: buildNamedNearAccountBinding({
3665
+ wallet: wallet.value,
3666
+ nearAccountId: nearAccountId.value
3667
+ })
3668
+ };
3669
+ }
3670
+ return {
3671
+ ok: false,
3672
+ error: {
3673
+ code: "invalid",
3674
+ message: "NearAccountBinding kind is invalid"
3675
+ }
3676
+ };
3677
+ }
3678
+ function buildNearEd25519SignerBinding(args) {
3679
+ const signerSlot = parseSignerSlot(args.signerSlot);
3680
+ if (!signerSlot.ok) throw new Error(signerSlot.error.message);
3681
+ return {
3682
+ kind: "near_ed25519_signer",
3683
+ account: args.account,
3684
+ nearEd25519SigningKeyId: args.nearEd25519SigningKeyId,
3685
+ signerSlot: signerSlot.value
3686
+ };
3687
+ }
3688
+ function nearEd25519SignerBindingFromRaw(raw) {
3689
+ const record = objectRecord(raw);
3690
+ if (!record) return missingObject("NearEd25519SignerBinding");
3691
+ const account = nearAccountBindingFromRaw(record.account);
3692
+ if (!account.ok) return account;
3693
+ const keyScopeRaw = parseStringField(record.nearEd25519SigningKeyId, "nearEd25519SigningKeyId");
3694
+ if (!keyScopeRaw.ok) return keyScopeRaw;
3695
+ const signerSlot = parseSignerSlot(record.signerSlot);
3696
+ if (!signerSlot.ok) return signerSlot;
3697
+ return {
3698
+ ok: true,
3699
+ value: buildNearEd25519SignerBinding({
3700
+ account: account.value,
3701
+ nearEd25519SigningKeyId: nearEd25519SigningKeyIdFromString(keyScopeRaw.value),
3702
+ signerSlot: signerSlot.value
3703
+ })
3704
+ };
3705
+ }
3706
+ //#endregion
3707
+ //#region ../shared-ts/src/utils/thresholdEcdsaKeyHandle.ts
3708
+ function parseThresholdEcdsaKeyHandle(value) {
3709
+ const normalized = typeof value === "string" ? value.trim() : "";
3710
+ if (!normalized.startsWith("ederivation-key-")) throw new Error("Threshold ECDSA key handle is invalid");
3711
+ return normalized;
3712
+ }
3713
+ function requiredString$1(value, field) {
3714
+ const normalized = String(value ?? "").trim();
3715
+ if (!normalized) throw new Error(`[threshold-ecdsa-key-handle] ${field} is required`);
3716
+ return normalized;
3717
+ }
3718
+ function normalizedSigningRootVersion(value) {
3719
+ return String(value ?? "").trim() || "default";
3720
+ }
3721
+ async function deriveThresholdEcdsaKeyHandle(input) {
3722
+ return `ederivation-key-${base64UrlEncode(await sha256BytesUtf8(alphabetizeStringify({
3723
+ domain: "seams.threshold_ecdsa.key_handle.v1",
3724
+ ecdsaThresholdKeyId: requiredString$1(input.ecdsaThresholdKeyId, "ecdsaThresholdKeyId"),
3725
+ signingRootId: requiredString$1(input.signingRootId, "signingRootId"),
3726
+ signingRootVersion: normalizedSigningRootVersion(input.signingRootVersion)
3727
+ })))}`;
3728
+ }
3729
+ //#endregion
3730
+ //#region ../shared-ts/src/signing-lanes/participants.ts
3731
+ function missing(field) {
3732
+ return {
3733
+ code: "missing",
3734
+ message: `${field} is required`
3735
+ };
3736
+ }
3737
+ function invalid(field, reason) {
3738
+ return {
3739
+ code: "invalid",
3740
+ message: `${field} ${reason}`
3741
+ };
3742
+ }
3743
+ function parseIdentityId(raw, field) {
3744
+ if (raw === void 0 || raw === null) return {
3745
+ ok: false,
3746
+ error: missing(field)
3747
+ };
3748
+ if (typeof raw !== "string") return {
3749
+ ok: false,
3750
+ error: invalid(field, "must be a string")
3751
+ };
3752
+ const value = raw.trim();
3753
+ if (!value) return {
3754
+ ok: false,
3755
+ error: missing(field)
3756
+ };
3757
+ if (hasWhitespaceOrControlCharacters(value)) return {
3758
+ ok: false,
3759
+ error: invalid(field, "must not contain whitespace or control characters")
3760
+ };
3761
+ return {
3762
+ ok: true,
3763
+ value
3764
+ };
3765
+ }
3766
+ function parseHpkePublicKey(raw, field) {
3767
+ if (raw === void 0 || raw === null) return {
3768
+ ok: false,
3769
+ error: missing(field)
3770
+ };
3771
+ if (typeof raw !== "string" || raw.length === 0) return {
3772
+ ok: false,
3773
+ error: invalid(field, "must be non-empty base64url")
3774
+ };
3775
+ try {
3776
+ const bytes = base64UrlDecode(raw);
3777
+ if (bytes.length === 0 || base64UrlEncode(bytes) !== raw) return {
3778
+ ok: false,
3779
+ error: invalid(field, "must be canonical unpadded base64url")
3780
+ };
3781
+ } catch {
3782
+ return {
3783
+ ok: false,
3784
+ error: invalid(field, "must be canonical unpadded base64url")
3785
+ };
3786
+ }
3787
+ return {
3788
+ ok: true,
3789
+ value: raw
3790
+ };
3791
+ }
3792
+ function parseDigest(raw, field, brand) {
3793
+ if (raw === void 0 || raw === null) return {
3794
+ ok: false,
3795
+ error: missing(field)
3796
+ };
3797
+ try {
3798
+ return {
3799
+ ok: true,
3800
+ value: brand(parseDigestB64u(raw))
3801
+ };
3802
+ } catch {
3803
+ return {
3804
+ ok: false,
3805
+ error: invalid(field, "must be canonical base64url for 32 bytes")
3806
+ };
3807
+ }
3808
+ }
3809
+ function brandLaneCustodyDigest(value) {
3810
+ return value;
3811
+ }
3812
+ function brandRecipientDigest(value) {
3813
+ return value;
3814
+ }
3815
+ function brandParticipantDigest(value) {
3816
+ return value;
3817
+ }
3818
+ function rejectUnknownFields(record, fields, label) {
3819
+ const allowed = new Set(fields);
3820
+ for (const field of Object.keys(record)) if (!allowed.has(field)) throw new Error(`${label}.${field} is not supported`);
3821
+ for (const field of fields) if (!(field in record)) throw new Error(`${label}.${field} is required`);
3822
+ }
3823
+ function parseLaneHolderParticipantId(raw) {
3824
+ return parseIdentityId(raw, "laneHolderParticipantId");
3825
+ }
3826
+ function parseSigningWorkerParticipantId(raw) {
3827
+ return parseIdentityId(raw, "signingWorkerParticipantId");
3828
+ }
3829
+ function parseSigningWorkerRecipientKeyId(raw) {
3830
+ return parseIdentityId(raw, "signingWorkerRecipientKeyId");
3831
+ }
3832
+ function parseLaneHolderCustodyBindingId(raw) {
3833
+ return parseIdentityId(raw, "laneHolderCustodyBindingId");
3834
+ }
3835
+ function parseLaneParticipantBindingDigestB64u(raw) {
3836
+ return parseDigest(raw, "participantBindingDigestB64u", brandParticipantDigest);
3837
+ }
3838
+ function parseLaneCustodyBindingDigestB64u(raw) {
3839
+ return parseDigest(raw, "custodyBindingDigestB64u", brandLaneCustodyDigest);
3840
+ }
3841
+ function parseSigningWorkerRecipientKeyDigestB64u(raw) {
3842
+ return parseDigest(raw, "hpkePublicKeyDigestB64u", brandRecipientDigest);
3843
+ }
3844
+ function buildLaneHolderCustodyIdentityV1(args) {
3845
+ return {
3846
+ kind: "lane_holder_custody_identity_v1",
3847
+ custodyBindingId: args.custodyBindingId,
3848
+ custodyBindingDigestB64u: args.custodyBindingDigestB64u
3849
+ };
3850
+ }
3851
+ function buildSigningWorkerRecipientIdentityV1(args) {
3852
+ return {
3853
+ kind: "signing_worker_recipient_identity_v1",
3854
+ recipientKeyId: args.recipientKeyId,
3855
+ hpkePublicKeyB64u: args.hpkePublicKeyB64u,
3856
+ hpkePublicKeyDigestB64u: args.hpkePublicKeyDigestB64u
3857
+ };
3858
+ }
3859
+ function parseLaneHolderCustodyIdentityV1(raw, label = "laneHolderCustodyIdentity") {
3860
+ const record = requireRecord(raw, label);
3861
+ rejectUnknownFields(record, [
3862
+ "kind",
3863
+ "custodyBindingId",
3864
+ "custodyBindingDigestB64u"
3865
+ ], label);
3866
+ if (record.kind !== "lane_holder_custody_identity_v1") throw new Error(`${label}.kind is invalid`);
3867
+ const custodyBindingId = parseLaneHolderCustodyBindingId(record.custodyBindingId);
3868
+ if (!custodyBindingId.ok) throw new Error(`${label}.${custodyBindingId.error.message}`);
3869
+ const custodyBindingDigestB64u = parseLaneCustodyBindingDigestB64u(record.custodyBindingDigestB64u);
3870
+ if (!custodyBindingDigestB64u.ok) throw new Error(`${label}.${custodyBindingDigestB64u.error.message}`);
3871
+ return buildLaneHolderCustodyIdentityV1({
3872
+ custodyBindingId: custodyBindingId.value,
3873
+ custodyBindingDigestB64u: custodyBindingDigestB64u.value
3874
+ });
3875
+ }
3876
+ function parseSigningWorkerRecipientIdentityV1(raw, label = "signingWorkerRecipientIdentity") {
3877
+ const record = requireRecord(raw, label);
3878
+ rejectUnknownFields(record, [
3879
+ "kind",
3880
+ "recipientKeyId",
3881
+ "hpkePublicKeyB64u",
3882
+ "hpkePublicKeyDigestB64u"
3883
+ ], label);
3884
+ if (record.kind !== "signing_worker_recipient_identity_v1") throw new Error(`${label}.kind is invalid`);
3885
+ const recipientKeyId = parseSigningWorkerRecipientKeyId(record.recipientKeyId);
3886
+ if (!recipientKeyId.ok) throw new Error(`${label}.${recipientKeyId.error.message}`);
3887
+ const hpkePublicKeyB64u = parseHpkePublicKey(record.hpkePublicKeyB64u, `${label}.hpkePublicKeyB64u`);
3888
+ if (!hpkePublicKeyB64u.ok) throw new Error(hpkePublicKeyB64u.error.message);
3889
+ const hpkePublicKeyDigestB64u = parseSigningWorkerRecipientKeyDigestB64u(record.hpkePublicKeyDigestB64u);
3890
+ if (!hpkePublicKeyDigestB64u.ok) throw new Error(`${label}.${hpkePublicKeyDigestB64u.error.message}`);
3891
+ return buildSigningWorkerRecipientIdentityV1({
3892
+ recipientKeyId: recipientKeyId.value,
3893
+ hpkePublicKeyB64u: hpkePublicKeyB64u.value,
3894
+ hpkePublicKeyDigestB64u: hpkePublicKeyDigestB64u.value
3895
+ });
3896
+ }
3897
+ function buildLaneHolderParticipantRecordV1(args) {
3898
+ return {
3899
+ kind: "lane_holder_participant_v1",
3900
+ participantId: args.participantId,
3901
+ custodyBindingId: args.custody.custodyBindingId,
3902
+ custodyBindingDigestB64u: args.custody.custodyBindingDigestB64u,
3903
+ hpkePublicKeyB64u: args.hpkePublicKeyB64u,
3904
+ hpkePublicKeyDigestB64u: args.hpkePublicKeyDigestB64u,
3905
+ participantBindingDigestB64u: args.participantBindingDigestB64u
3906
+ };
3907
+ }
3908
+ function buildSigningWorkerParticipantRecordV1(args) {
3909
+ return {
3910
+ kind: "signing_worker_participant_v1",
3911
+ participantId: args.participantId,
3912
+ recipientKeyId: args.recipient.recipientKeyId,
3913
+ hpkePublicKeyB64u: args.recipient.hpkePublicKeyB64u,
3914
+ hpkePublicKeyDigestB64u: args.recipient.hpkePublicKeyDigestB64u,
3915
+ participantBindingDigestB64u: args.participantBindingDigestB64u
3916
+ };
3917
+ }
3918
+ function parseLaneHolderParticipantRecordV1(raw, label = "laneHolderParticipant") {
3919
+ const record = requireRecord(raw, label);
3920
+ rejectUnknownFields(record, [
3921
+ "kind",
3922
+ "participantId",
3923
+ "custodyBindingId",
3924
+ "custodyBindingDigestB64u",
3925
+ "hpkePublicKeyB64u",
3926
+ "hpkePublicKeyDigestB64u",
3927
+ "participantBindingDigestB64u"
3928
+ ], label);
3929
+ if (record.kind !== "lane_holder_participant_v1") throw new Error(`${label}.kind is invalid`);
3930
+ const participantId = parseLaneHolderParticipantId(record.participantId);
3931
+ if (!participantId.ok) throw new Error(`${label}.${participantId.error.message}`);
3932
+ const custody = parseLaneHolderCustodyIdentityV1({
3933
+ kind: "lane_holder_custody_identity_v1",
3934
+ custodyBindingId: record.custodyBindingId,
3935
+ custodyBindingDigestB64u: record.custodyBindingDigestB64u
3936
+ }, `${label}.custody`);
3937
+ const hpkePublicKeyB64u = parseHpkePublicKey(record.hpkePublicKeyB64u, `${label}.hpkePublicKeyB64u`);
3938
+ if (!hpkePublicKeyB64u.ok) throw new Error(hpkePublicKeyB64u.error.message);
3939
+ const hpkePublicKeyDigestB64u = parseSigningWorkerRecipientKeyDigestB64u(record.hpkePublicKeyDigestB64u);
3940
+ if (!hpkePublicKeyDigestB64u.ok) throw new Error(`${label}.${hpkePublicKeyDigestB64u.error.message}`);
3941
+ const participantBindingDigestB64u = parseLaneParticipantBindingDigestB64u(record.participantBindingDigestB64u);
3942
+ if (!participantBindingDigestB64u.ok) throw new Error(`${label}.${participantBindingDigestB64u.error.message}`);
3943
+ return buildLaneHolderParticipantRecordV1({
3944
+ participantId: participantId.value,
3945
+ custody,
3946
+ hpkePublicKeyB64u: hpkePublicKeyB64u.value,
3947
+ hpkePublicKeyDigestB64u: hpkePublicKeyDigestB64u.value,
3948
+ participantBindingDigestB64u: participantBindingDigestB64u.value
3949
+ });
3950
+ }
3951
+ function parseSigningWorkerParticipantRecordV1(raw, label = "signingWorkerParticipant") {
3952
+ const record = requireRecord(raw, label);
3953
+ rejectUnknownFields(record, [
3954
+ "kind",
3955
+ "participantId",
3956
+ "recipientKeyId",
3957
+ "hpkePublicKeyB64u",
3958
+ "hpkePublicKeyDigestB64u",
3959
+ "participantBindingDigestB64u"
3960
+ ], label);
3961
+ if (record.kind !== "signing_worker_participant_v1") throw new Error(`${label}.kind is invalid`);
3962
+ const participantId = parseSigningWorkerParticipantId(record.participantId);
3963
+ if (!participantId.ok) throw new Error(`${label}.${participantId.error.message}`);
3964
+ const recipient = parseSigningWorkerRecipientIdentityV1({
3965
+ kind: "signing_worker_recipient_identity_v1",
3966
+ recipientKeyId: record.recipientKeyId,
3967
+ hpkePublicKeyB64u: record.hpkePublicKeyB64u,
3968
+ hpkePublicKeyDigestB64u: record.hpkePublicKeyDigestB64u
3969
+ }, `${label}.recipient`);
3970
+ const participantBindingDigestB64u = parseLaneParticipantBindingDigestB64u(record.participantBindingDigestB64u);
3971
+ if (!participantBindingDigestB64u.ok) throw new Error(`${label}.${participantBindingDigestB64u.error.message}`);
3972
+ return buildSigningWorkerParticipantRecordV1({
3973
+ participantId: participantId.value,
3974
+ recipient,
3975
+ participantBindingDigestB64u: participantBindingDigestB64u.value
3976
+ });
3977
+ }
3978
+ //#endregion
3979
+ //#region ../shared-ts/src/signing-lanes/ownerContinuity.ts
3980
+ const OWNER_LANE_PARTICIPANT_CONTINUITY_FIELDS = [
3981
+ "kind",
3982
+ "signerId",
3983
+ "participantIds",
3984
+ "signingWorkerId",
3985
+ "custodyKeyManifestDigestB64u",
3986
+ "sourceIdentityDigestB64u"
3987
+ ];
3988
+ function requireResult(result, label) {
3989
+ if (result.ok) return result.value;
3990
+ throw new Error(`${label} ${result.error.message}`);
3991
+ }
3992
+ /** Parse the owner signer identity without widening it into a generic string. */
3993
+ function parseWalletSignerId(raw, label = "walletSignerId") {
3994
+ if (typeof raw !== "string") throw new Error(`${label} must be a string`);
3995
+ const value = raw.trim();
3996
+ if (!value) throw new Error(`${label} is required`);
3997
+ if (hasWhitespaceOrControlCharacters(value)) throw new Error(`${label} must not contain whitespace or control characters`);
3998
+ return value;
3999
+ }
4000
+ function parseParticipantId(raw, label) {
4001
+ if (typeof raw !== "number" || !Number.isSafeInteger(raw) || raw <= 0) throw new Error(`${label} must be a positive safe integer`);
4002
+ return raw;
4003
+ }
4004
+ function parseParticipantIds(raw, label) {
4005
+ if (!Array.isArray(raw) || raw.length !== 2) throw new Error(`${label} must contain exactly two participant ids`);
4006
+ const first = parseParticipantId(raw[0], `${label}[0]`);
4007
+ const second = parseParticipantId(raw[1], `${label}[1]`);
4008
+ if (first === second) throw new Error(`${label} must contain distinct participant ids`);
4009
+ return [first, second];
4010
+ }
4011
+ function buildOwnerLaneParticipantContinuityV1(args) {
4012
+ const participantIds = parseParticipantIds(args.participantIds, "participantIds");
4013
+ return {
4014
+ kind: "owner_lane_participant_continuity_v1",
4015
+ signerId: parseWalletSignerId(args.signerId),
4016
+ participantIds,
4017
+ signingWorkerId: requireResult(parseMpcSigningWorkerRef(args.signingWorkerId), "signingWorkerId"),
4018
+ custodyKeyManifestDigestB64u: parseDigestField$1(args.custodyKeyManifestDigestB64u, "custodyKeyManifestDigestB64u"),
4019
+ sourceIdentityDigestB64u: parseDigestField$1(args.sourceIdentityDigestB64u, "sourceIdentityDigestB64u")
4020
+ };
4021
+ }
4022
+ function parseOwnerLaneParticipantContinuityV1(raw, label = "ownerParticipantContinuity") {
4023
+ const record = requireRecord(raw, label);
4024
+ rejectUnknownFields$1(record, OWNER_LANE_PARTICIPANT_CONTINUITY_FIELDS, label);
4025
+ if (record.kind !== "owner_lane_participant_continuity_v1") throw new Error(`${label}.kind must be owner_lane_participant_continuity_v1`);
4026
+ return buildOwnerLaneParticipantContinuityV1({
4027
+ signerId: parseWalletSignerId(record.signerId, `${label}.signerId`),
4028
+ participantIds: parseParticipantIds(record.participantIds, `${label}.participantIds`),
4029
+ signingWorkerId: requireResult(parseMpcSigningWorkerRef(record.signingWorkerId), `${label}.signingWorkerId`),
4030
+ custodyKeyManifestDigestB64u: parseDigestField$1(record.custodyKeyManifestDigestB64u, `${label}.custodyKeyManifestDigestB64u`),
4031
+ sourceIdentityDigestB64u: parseDigestField$1(record.sourceIdentityDigestB64u, `${label}.sourceIdentityDigestB64u`)
4032
+ });
4033
+ }
4034
+ new TextEncoder();
4035
+ //#endregion
4036
+ //#region src/core/signingEngine/session/identity/evmFamilyEcdsaIdentity.ts
4037
+ function requiredString(value, field) {
4038
+ const normalized = String(value ?? "").trim();
4039
+ if (!normalized) throw new Error(`[evm-family-ecdsa] ${field} is required`);
4040
+ return normalized;
4041
+ }
4042
+ function normalizeRpId(value) {
4043
+ return requiredString(value, "rpId");
4044
+ }
4045
+ function deriveEvmFamilySigningKeySlotId(input) {
4046
+ return deriveEvmFamilySigningKeySlotId$1({
4047
+ walletId: toWalletId(input.walletId),
4048
+ signingRootId: normalizeSigningRootId(input.signingRootId),
4049
+ signingRootVersion: normalizeSigningRootVersion(input.signingRootVersion)
4050
+ });
4051
+ }
4052
+ function normalizeEcdsaThresholdKeyId(value) {
4053
+ return requiredString(value, "ecdsaThresholdKeyId");
4054
+ }
4055
+ function normalizeSigningRootId(value) {
4056
+ return requiredString(value, "signingRootId");
4057
+ }
4058
+ function normalizeSigningRootVersion(value) {
4059
+ return String(value ?? "").trim() || "default";
4060
+ }
4061
+ function normalizeThresholdOwnerAddress(value) {
4062
+ const normalized = String(value ?? "").trim().toLowerCase();
4063
+ if (!/^0x[0-9a-f]{40}$/.test(normalized)) throw new Error("[evm-family-ecdsa] thresholdOwnerAddress must be an EVM address");
4064
+ return normalized;
4065
+ }
4066
+ function toThresholdOwnerAddress(value) {
4067
+ return normalizeThresholdOwnerAddress(value);
4068
+ }
4069
+ function toRpId(value) {
4070
+ return normalizeRpId(value);
4071
+ }
4072
+ function toEvmFamilyEcdsaKeyHandle(value) {
4073
+ return requiredString(value, "keyHandle");
4074
+ }
4075
+ function resolveThresholdEcdsaKeyIdFromRecord(args) {
4076
+ return normalizeEcdsaThresholdKeyId(String(args.record.ecdsaThresholdKeyId ?? "").trim());
4077
+ }
4078
+ function parseThresholdSigningRootBinding(input) {
4079
+ return {
4080
+ signingRootId: normalizeSigningRootId(input.signingRootId),
4081
+ signingRootVersion: normalizeSigningRootVersion(input.signingRootVersion)
4082
+ };
4083
+ }
4084
+ function resolveThresholdSigningRootBindingFromRecord(args) {
4085
+ return parseThresholdSigningRootBinding({
4086
+ signingRootId: args.record.signingRootId,
4087
+ signingRootVersion: args.record.signingRootVersion
4088
+ });
4089
+ }
4090
+ function resolveThresholdSigningRootBindingFromRuntimePolicyScope(args) {
4091
+ const scopeBinding = signingRootScopeFromRuntimePolicyScope(args.runtimePolicyScope);
4092
+ return parseThresholdSigningRootBinding({
4093
+ signingRootId: scopeBinding.signingRootId,
4094
+ signingRootVersion: scopeBinding.signingRootVersion
4095
+ });
4096
+ }
4097
+ function toThresholdEcdsaPublicKeyB64u(value) {
4098
+ const normalized = requiredString(value, "thresholdEcdsaPublicKeyB64u");
4099
+ let bytes;
4100
+ try {
4101
+ bytes = base64UrlDecode(normalized);
4102
+ } catch {
4103
+ throw new Error("[evm-family-ecdsa] thresholdEcdsaPublicKeyB64u must be base64url");
4104
+ }
4105
+ if (bytes.length !== 33) throw new Error("[evm-family-ecdsa] thresholdEcdsaPublicKeyB64u must decode to 33 bytes");
4106
+ return normalized;
4107
+ }
4108
+ function toParticipantId(value) {
4109
+ const normalized = Math.floor(Number(value));
4110
+ if (!Number.isSafeInteger(normalized) || normalized < 1 || normalized > 65535) throw new Error("[evm-family-ecdsa] participantId must be a positive safe integer");
4111
+ return normalized;
4112
+ }
4113
+ function normalizeParticipantIds(value) {
4114
+ const participantIds = normalizeThresholdEd25519ParticipantIds(value);
4115
+ if (!participantIds?.length) throw new Error("[evm-family-ecdsa] participantIds are required");
4116
+ return participantIds.map(toParticipantId);
4117
+ }
4118
+ function participantIdKey(participantIds) {
4119
+ return participantIds.map((id) => String(Number(id))).join(",");
4120
+ }
4121
+ function fnv1a32Hex(input) {
4122
+ let hash = 2166136261;
4123
+ for (let index = 0; index < input.length; index += 1) {
4124
+ hash ^= input.charCodeAt(index);
4125
+ hash = Math.imul(hash, 16777619) >>> 0;
4126
+ }
4127
+ return hash.toString(16).padStart(8, "0");
4128
+ }
4129
+ function buildNormalizedEvmFamilyEcdsaKeyIdentity(input) {
4130
+ return {
4131
+ walletId: input.walletId,
4132
+ keyScope: "evm-family",
4133
+ ecdsaThresholdKeyId: normalizeEcdsaThresholdKeyId(input.ecdsaThresholdKeyId),
4134
+ signingRootId: normalizeSigningRootId(input.signingRootId),
4135
+ signingRootVersion: normalizeSigningRootVersion(input.signingRootVersion),
4136
+ participantIds: normalizeParticipantIds(input.participantIds),
4137
+ thresholdOwnerAddress: normalizeThresholdOwnerAddress(input.thresholdOwnerAddress)
4138
+ };
4139
+ }
4140
+ function buildBaseEvmFamilyEcdsaKeyIdentity(input) {
4141
+ return buildNormalizedEvmFamilyEcdsaKeyIdentity({
4142
+ walletId: toWalletId(input.walletId),
4143
+ ecdsaThresholdKeyId: input.ecdsaThresholdKeyId,
4144
+ signingRootId: input.signingRootId,
4145
+ signingRootVersion: input.signingRootVersion,
4146
+ participantIds: input.participantIds,
4147
+ thresholdOwnerAddress: input.thresholdOwnerAddress
4148
+ });
4149
+ }
4150
+ function deriveBaseEcdsaSubjectIdFromWalletId(walletId) {
4151
+ return walletIdFromWalletProfile({ walletId: toWalletId(walletId) });
4152
+ }
4153
+ async function deriveEvmFamilyEcdsaKeyHandle(input) {
4154
+ return await deriveThresholdEcdsaKeyHandle(input);
4155
+ }
4156
+ function buildVerifiedEcdsaPublicFacts(input) {
4157
+ return {
4158
+ kind: "verified_ecdsa_public_facts",
4159
+ keyHandle: input.keyHandle,
4160
+ publicKeyB64u: toThresholdEcdsaPublicKeyB64u(input.publicKeyB64u),
4161
+ participantIds: normalizeParticipantIds(input.participantIds),
4162
+ thresholdOwnerAddress: normalizeThresholdOwnerAddress(input.thresholdOwnerAddress)
4163
+ };
4164
+ }
4165
+ function evmFamilyEcdsaWalletKeyToIdentity(walletKey) {
4166
+ return {
4167
+ walletId: walletKey.walletId,
4168
+ keyScope: walletKey.keyFacts.keyScope,
4169
+ ecdsaThresholdKeyId: walletKey.keyFacts.ecdsaThresholdKeyId,
4170
+ signingRootId: walletKey.keyFacts.signingRootId,
4171
+ signingRootVersion: walletKey.keyFacts.signingRootVersion,
4172
+ participantIds: walletKey.keyFacts.participantIds,
4173
+ thresholdOwnerAddress: walletKey.keyFacts.thresholdOwnerAddress
4174
+ };
4175
+ }
4176
+ function buildEvmFamilyEcdsaWalletKey(input) {
4177
+ const keyHandle = toEvmFamilyEcdsaKeyHandle(input.keyHandle);
4178
+ const keyIdentity = buildBaseEvmFamilyEcdsaKeyIdentity(input);
4179
+ const publicFacts = buildVerifiedEcdsaPublicFacts({
4180
+ keyHandle,
4181
+ publicKeyB64u: input.thresholdEcdsaPublicKeyB64u,
4182
+ participantIds: keyIdentity.participantIds,
4183
+ thresholdOwnerAddress: keyIdentity.thresholdOwnerAddress
4184
+ });
4185
+ return {
4186
+ kind: "evm_family_ecdsa_wallet_key",
4187
+ walletId: keyIdentity.walletId,
4188
+ keyHandle,
4189
+ chainTarget: input.chainTarget,
4190
+ keyFacts: {
4191
+ kind: "evm_family_ecdsa_key_facts",
4192
+ keyScope: keyIdentity.keyScope,
4193
+ ecdsaThresholdKeyId: keyIdentity.ecdsaThresholdKeyId,
4194
+ signingRootId: keyIdentity.signingRootId,
4195
+ signingRootVersion: keyIdentity.signingRootVersion,
4196
+ participantIds: publicFacts.participantIds,
4197
+ thresholdOwnerAddress: publicFacts.thresholdOwnerAddress,
4198
+ thresholdEcdsaPublicKeyB64u: publicFacts.publicKeyB64u
4199
+ }
4200
+ };
4201
+ }
4202
+ function assertMatchingVerifiedEcdsaPublicFacts(args) {
4203
+ const mismatches = [];
4204
+ if (String(args.expected.keyHandle) !== String(args.actual.keyHandle)) mismatches.push("keyHandle");
4205
+ if (String(args.expected.publicKeyB64u) !== String(args.actual.publicKeyB64u)) mismatches.push("publicKeyB64u");
4206
+ if (participantIdKey(args.expected.participantIds) !== participantIdKey(args.actual.participantIds)) mismatches.push("participantIds");
4207
+ if (String(args.expected.thresholdOwnerAddress) !== String(args.actual.thresholdOwnerAddress)) mismatches.push("thresholdOwnerAddress");
4208
+ if (mismatches.length) throw new Error(`[evm-family-ecdsa] ${args.context} public facts mismatch: ${mismatches.join(", ")}`);
4209
+ }
4210
+ function buildPasskeyEcdsaAuthBinding(args) {
4211
+ return {
4212
+ kind: "passkey_ecdsa_auth_binding",
4213
+ authMethod: SIGNER_AUTH_METHODS.passkey,
4214
+ rpId: normalizeRpId(args.rpId),
4215
+ credentialIdB64u: requiredString(args.credentialIdB64u, "credentialIdB64u")
4216
+ };
4217
+ }
4218
+ function buildResolvedEvmFamilyEcdsaKey(input) {
4219
+ return {
4220
+ kind: "resolved_evm_family_ecdsa_key",
4221
+ walletId: toWalletId(input.walletId),
4222
+ publicFacts: input.publicFacts,
4223
+ authBinding: input.authBinding
4224
+ };
4225
+ }
4226
+ function buildHydratedEcdsaSignerMaterial(input) {
4227
+ return {
4228
+ kind: "hydrated_ecdsa_signer_material",
4229
+ walletId: input.walletId,
4230
+ materialActivation: input.materialActivation,
4231
+ publicFacts: input.publicFacts,
4232
+ chainTarget: input.chainTarget,
4233
+ transport: input.transport,
4234
+ clientShare: input.clientShare,
4235
+ routerAbEcdsaDerivationNormalSigning: input.routerAbEcdsaDerivationNormalSigning
4236
+ };
4237
+ }
4238
+ function buildEvmFamilyEcdsaSessionLanePolicy(input) {
4239
+ const ttlMs = Math.floor(Number(input.ttlMs));
4240
+ const remainingUses = Math.floor(Number(input.remainingUses));
4241
+ if (!Number.isFinite(ttlMs) || ttlMs <= 0) throw new Error("[evm-family-ecdsa] ttlMs must be a positive finite value");
4242
+ if (!Number.isFinite(remainingUses) || remainingUses <= 0) throw new Error("[evm-family-ecdsa] remainingUses must be a positive finite value");
4243
+ return {
4244
+ chainTarget: input.chainTarget,
4245
+ thresholdSessionId: SigningSessionIds.thresholdEcdsaSession(input.thresholdSessionId),
4246
+ ttlMs,
4247
+ remainingUses,
4248
+ runtimePolicyScope: input.runtimePolicyScope
4249
+ };
4250
+ }
4251
+ function buildEvmFamilyEcdsaRecoveredMaterialLanePolicy(input) {
4252
+ const ttlMs = Math.floor(Number(input.ttlMs));
4253
+ const remainingUses = Math.floor(Number(input.remainingUses));
4254
+ if (!Number.isFinite(ttlMs) || ttlMs <= 0) throw new Error("[evm-family-ecdsa] ttlMs must be a positive finite value");
4255
+ if (!Number.isFinite(remainingUses) || remainingUses <= 0) throw new Error("[evm-family-ecdsa] remainingUses must be a positive finite value");
4256
+ return {
4257
+ chainTarget: input.chainTarget,
4258
+ thresholdSessionId: SigningSessionIds.thresholdEcdsaSession(input.thresholdSessionId),
4259
+ ttlMs,
4260
+ remainingUses,
4261
+ runtimePolicyScope: input.runtimePolicyScope
4262
+ };
4263
+ }
4264
+ function deriveEvmFamilyKeyFingerprint(key) {
4265
+ return `evmfam-ecdsa:${fnv1a32Hex(alphabetizeStringify({
4266
+ version: "evm_family_ecdsa_key_fingerprint_v2",
4267
+ walletId: String(key.walletId),
4268
+ baseEcdsaSubjectId: String(deriveBaseEcdsaSubjectIdFromWalletId(key.walletId)),
4269
+ keyScope: key.keyScope,
4270
+ ecdsaThresholdKeyId: String(key.ecdsaThresholdKeyId),
4271
+ signingRootId: String(key.signingRootId),
4272
+ signingRootVersion: String(key.signingRootVersion),
4273
+ participantIds: key.participantIds.map((id) => Number(id)),
4274
+ thresholdOwnerAddress: String(key.thresholdOwnerAddress)
4275
+ }))}`;
4276
+ }
4277
+ function deriveEvmFamilyKeyFingerprintFromPublicFacts(input) {
4278
+ return `evmfam-ecdsa:${fnv1a32Hex(alphabetizeStringify({
4279
+ version: "evm_family_ecdsa_public_facts_fingerprint_v1",
4280
+ walletId: String(toWalletId(input.walletId)),
4281
+ keyHandle: String(input.publicFacts.keyHandle),
4282
+ publicKeyB64u: String(input.publicFacts.publicKeyB64u),
4283
+ participantIds: input.publicFacts.participantIds.map((id) => Number(id)),
4284
+ thresholdOwnerAddress: String(input.publicFacts.thresholdOwnerAddress)
4285
+ }))}`;
4286
+ }
4287
+ //#endregion
4288
+ export { parseLinkedDeviceListRequestV1 as $, parseRouterAbEd25519YaoRecoveryActivationAdmissionReceiptV1 as $t, buildImplicitNearAccountBinding as A, serializeQrLinkedDeviceSessionPayloadV5 as At, LINKED_DEVICE_CLOCK_SKEW_TOLERANCE_MS_V1 as B, ROUTER_AB_ED25519_YAO_RECOVERY_ADMISSION_PATH_V1 as Bt, toThresholdOwnerAddress as C, parseLinkedDeviceOwnerAuthorizationRequestV1 as Ct, parseSigningWorkerParticipantRecordV1 as D, parseLinkedDeviceTargetPreparationRequestV1 as Dt, parseLaneParticipantBindingDigestB64u as E, parseLinkedDeviceTargetCredentialRegistrationResultV1 as Et, buildWalletIdentity as F, parseLinkedDeviceOrdinaryMaterialSourceContributionPreparationV1 as Ft, computeWalletSessionInstallationReceiptDigestB64u as G, ROUTER_AB_ED25519_YAO_WARM_RECOVERY_BOOTSTRAP_PATH_V1 as Gt, LINKED_DEVICE_REQUEST_PROOF_MAX_TTL_MS_V1 as H, ROUTER_AB_ED25519_YAO_RECOVERY_EXECUTE_PATH_V1 as Ht, nearAccountBindingFromRaw as I, ROUTER_AB_ED25519_YAO_EMAIL_OTP_RECOVERY_BOOTSTRAP_KIND_V1 as It, parseLocalAuthorityActivationFinalAckV1 as J, parseRouterAbEd25519YaoCeremonyBindingV1 as Jt, computeWalletSessionOperationCredentialDigestB64u as K, parseRouterAbEd25519YaoActivationPublicReceiptV1 as Kt, nearEd25519SignerBindingFromRaw as L, ROUTER_AB_ED25519_YAO_EXPORT_ADMISSION_PATH_V1 as Lt, buildNearEd25519SignerBinding as M, parseLinkedDeviceEcdsaSourcePreservingActivationReceiptV1 as Mt, buildPasskeyAuthScope as N, parseLinkedDeviceEd25519SourcePreservingReservationV1 as Nt, parseThresholdEcdsaKeyHandle as O, parseLinkedDeviceTargetPreparationV1 as Ot, buildPasskeyWalletAuthMethodBinding as P, parseLinkedDeviceOrdinaryMaterialSourceContributionPreparationTupleV1 as Pt, parseLinkedDeviceWalletSessionCredentialDeliveryV1 as Q, parseRouterAbEd25519YaoParticipantIdsV1 as Qt, parseRpId as R, ROUTER_AB_ED25519_YAO_EXPORT_EXECUTE_PATH_V1 as Rt, toThresholdEcdsaPublicKeyB64u as S, parseLinkedDeviceEmailOtpVerificationResultV1 as St, parseLaneHolderParticipantRecordV1 as T, parseLinkedDeviceSessionClaimV1 as Tt, computeLinkedDevicePublicKeyDigestV1 as U, ROUTER_AB_ED25519_YAO_REGISTRATION_ADMISSION_PATH_V1 as Ut, LINKED_DEVICE_REQUEST_PROOF_HEADER_V1 as V, ROUTER_AB_ED25519_YAO_RECOVERY_CHALLENGE_ID_HEADER_V1 as Vt, computeLinkedDeviceTargetPreparationDigestV1 as W, ROUTER_AB_ED25519_YAO_REGISTRATION_EXECUTE_PATH_V1 as Wt, assertLinkedDeviceWalletSessionCredentialDeliveryIntegrityV1 as X, parseRouterAbEd25519YaoExportExecuteRequestV1 as Xt, parseLocalAuthorityInstallationReceiptV1 as Y, parseRouterAbEd25519YaoExportAdmissionReceiptV1 as Yt, parseLinkedDeviceWalletSessionCredentialDeliveryBindingV1 as Z, parseRouterAbEd25519YaoExportResultV1 as Zt, resolveThresholdSigningRootBindingFromRecord as _, parseLinkedDeviceEd25519ExportRootRecipientV1 as _n, parseLinkedDeviceEmailOtpChallengeResultV1 as _t, buildEvmFamilyEcdsaWalletKey as a, parseRouterAbEd25519YaoRegistrationActivationExecuteRequestV1 as an, buildLinkedDeviceSessionCancelClaimedRequestV1 as at, toParticipantId as b, parseLinkedDeviceEmailOtpFactorReleaseEnvelopeV1 as bt, buildResolvedEvmFamilyEcdsaKey as c, parseRouterAbEd25519YaoWarmRecoveryBootstrapRequestV1 as cn, buildLinkedDeviceTargetCredentialRegistrationV1 as ct, deriveEvmFamilyKeyFingerprint as d, deriveRouterAbEd25519YaoApplicationBindingDigestV1 as dn, parseLinkSessionProjectionV1 as dt, parseRouterAbEd25519YaoRecoveryActivationExecuteRequestV1 as en, parseLinkedDeviceListResultV1 as et, deriveEvmFamilyKeyFingerprintFromPublicFacts as f, parseWalletAddAuthMethodRegistrationOptions as fn, parseLinkSessionTransportEventV1 as ft, resolveThresholdEcdsaKeyIdFromRecord as g, parseLinkedDeviceEd25519ExportRootRecipientPublicKeyB64u as gn, parseLinkedDeviceEmailOtpChallengeResendRequestV1 as gt, parseThresholdSigningRootBinding as h, parseLinkedDeviceEd25519ExportRootPackageV1 as hn, parseLinkedDeviceEmailOtpBaseFactorResolutionResultV1 as ht, buildEvmFamilyEcdsaSessionLanePolicy as i, parseRouterAbEd25519YaoRegistrationActivationAdmissionReceiptV1 as in, buildLinkedDeviceApprovalV1 as it, buildNamedNearAccountBinding as j, parseCommittedAuthorityPackagesV1 as jt, buildEmailOtpWalletAuthMethodBinding as k, parseQrLinkedDeviceSessionPayloadV5 as kt, buildVerifiedEcdsaPublicFacts as l, sameRouterAbEd25519YaoActivationBindingV1 as ln, buildQrLinkedDeviceSessionPayloadV5 as lt, evmFamilyEcdsaWalletKeyToIdentity as m, buildLinkedDeviceEd25519ExportRootTransferBindingV1 as mn, parseLinkedDeviceApprovalResultV1 as mt, buildBaseEvmFamilyEcdsaKeyIdentity as n, parseRouterAbEd25519YaoRecoveryActivationResultV1 as nn, parseLinkedDeviceRevokeResultV1 as nt, buildHydratedEcdsaSignerMaterial as o, parseRouterAbEd25519YaoRegistrationActivationResultV1 as on, buildLinkedDeviceSessionCancelUnclaimedRequestV1 as ot, deriveEvmFamilySigningKeySlotId as p, LINKED_DEVICE_ED25519_EXPORT_ROOT_TRANSFER_ALG_V1 as pn, parseLinkedDeviceApprovalDeliveryV1 as pt, parseActivateInstalledAuthorityResultV1 as q, parseRouterAbEd25519YaoApplicationBindingFactsV1 as qt, buildEvmFamilyEcdsaRecoveredMaterialLanePolicy as r, parseRouterAbEd25519YaoRecoveryAdmissionRequestV1 as rn, parseWebAuthnAuthenticatorDeviceInfo as rt, buildPasskeyEcdsaAuthBinding as s, parseRouterAbEd25519YaoRegistrationAdmissionRequestV1 as sn, buildLinkedDeviceSessionClaimRequestV1 as st, assertMatchingVerifiedEcdsaPublicFacts as t, parseRouterAbEd25519YaoRecoveryActivationReceiptV1 as tn, parseLinkedDeviceRevokeRequestV1 as tt, deriveEvmFamilyEcdsaKeyHandle as u, sameRouterAbEd25519YaoRegistrationAdmissionRequestV1 as un, parseLinkDevicePublicKeyB64u as ut, resolveThresholdSigningRootBindingFromRuntimePolicyScope as v, serializeLinkedDeviceEd25519ExportRootTransferBindingV1 as vn, parseLinkedDeviceEmailOtpChallengeStartRequestV1 as vt, parseOwnerLaneParticipantContinuityV1 as w, parseLinkedDeviceOwnerAuthorizationSourceV1 as wt, toRpId as x, parseLinkedDeviceEmailOtpVerificationGrantV1 as xt, toEvmFamilyEcdsaKeyHandle as y, assertNeverLinkSessionStateV1 as yn, parseLinkedDeviceEmailOtpChallengeVerifyRequestV1 as yt, walletAuthMethodBindingFromRaw as z, ROUTER_AB_ED25519_YAO_RECOVERY_ACTIVATE_PATH_V1 as zt };