@seams/wallet 0.8.0 → 0.9.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 (1243) hide show
  1. package/README.md +140 -254
  2. package/THIRD_PARTY_NOTICES.md +7 -1
  3. package/dist/.build-inputs.sha256 +1 -1
  4. package/dist/esm/SeamsWeb/SeamsWeb.js +98 -1825
  5. package/dist/esm/SeamsWeb/assembly/createWalletIframeRouter.js +4 -15
  6. package/dist/esm/SeamsWeb/index.js +2 -2
  7. package/dist/esm/SeamsWeb/operations/devices/scanDevice.js +3 -361
  8. package/dist/esm/SeamsWeb/operations/near/delegateAction.js +18 -106
  9. package/dist/esm/SeamsWeb/operations/recovery/walletRecovery.js +3 -3
  10. package/dist/esm/SeamsWeb/operations/recovery/walletRecoveryCommit.js +8 -209
  11. package/dist/esm/SeamsWeb/operations/recovery/walletRecoveryDurablePayload.js +5 -5
  12. package/dist/esm/SeamsWeb/operations/recovery/walletRecoveryJournal.js +2 -64
  13. package/dist/esm/SeamsWeb/operations/tempo/executeEvmFamilyTransaction.js +1 -1
  14. package/dist/esm/SeamsWeb/operations/tempo/index.js +1 -13
  15. package/dist/esm/SeamsWeb/publicApi/auth.js +3 -19
  16. package/dist/esm/SeamsWeb/publicApi/createPublicApi.js +59 -94
  17. package/dist/esm/SeamsWeb/publicApi/currentWallet.js +1 -1
  18. package/dist/esm/SeamsWeb/publicApi/devices.js +33 -64
  19. package/dist/esm/SeamsWeb/publicApi/evm.js +28 -93
  20. package/dist/esm/SeamsWeb/publicApi/keyExport.js +26 -52
  21. package/dist/esm/SeamsWeb/publicApi/near.js +140 -435
  22. package/dist/esm/SeamsWeb/publicApi/placement.js +206 -0
  23. package/dist/esm/SeamsWeb/publicApi/session.js +13 -0
  24. package/dist/esm/SeamsWeb/publicApi/tempo.js +64 -221
  25. package/dist/esm/SeamsWeb/publicApi/{awaitNearReady.js → waitForNearAccount.js} +12 -12
  26. package/dist/esm/SeamsWeb/walletIframe/client/deviceCommands.js +50 -0
  27. package/dist/esm/SeamsWeb/walletIframe/client/emailOtpCommands.js +25 -0
  28. package/dist/esm/SeamsWeb/walletIframe/client/evmFamilyCommands.js +118 -0
  29. package/dist/esm/SeamsWeb/walletIframe/client/inboundMessages.js +223 -0
  30. package/dist/esm/SeamsWeb/walletIframe/client/nearCommands.js +153 -0
  31. package/dist/esm/SeamsWeb/walletIframe/client/overlay/overlay-styles.js +2 -2
  32. package/dist/esm/SeamsWeb/walletIframe/client/placementCommands.js +65 -0
  33. package/dist/esm/SeamsWeb/walletIframe/client/preferenceState.js +93 -0
  34. package/dist/esm/SeamsWeb/walletIframe/client/preferences.js +117 -0
  35. package/dist/esm/SeamsWeb/walletIframe/client/registrationCommands.js +92 -0
  36. package/dist/esm/SeamsWeb/walletIframe/client/router.js +241 -583
  37. package/dist/esm/SeamsWeb/walletIframe/client/sessionCommands.js +61 -0
  38. package/dist/esm/SeamsWeb/walletIframe/coordinator.js +175 -134
  39. package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/AuthMenuSurface.js +13 -1
  40. package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/mountAuthMenuSurface.js +1 -1
  41. package/dist/esm/SeamsWeb/walletIframe/shared/configuration.js +37 -0
  42. package/dist/esm/SeamsWeb/walletIframe/shared/exactSessionState.js +31 -11
  43. package/dist/esm/SeamsWeb/walletIframe/shared/facadeBoundary.js +96 -0
  44. package/dist/esm/SeamsWeb/walletIframe/shared/messages.js +6 -32
  45. package/dist/esm/advanced.js +3 -3
  46. package/dist/esm/build-paths.js +0 -4
  47. package/dist/esm/core/accountData/near/accountProjection.js +3 -3
  48. package/dist/esm/core/accountData/near/keyMaterial.js +2 -2
  49. package/dist/esm/core/config/chains.js +1 -28
  50. package/dist/esm/core/config/configBuilder.js +3 -14
  51. package/dist/esm/core/config/defaultConfigs.js +4 -6
  52. package/dist/esm/core/{signingEngine/workerManager/ecdsaPresignLifecycle.js → config/presignatures.js} +2 -2
  53. package/dist/esm/core/diagnostics/registration.js +8 -0
  54. package/dist/esm/core/indexedDB/accountKeyMaterial.js +1 -1
  55. package/dist/esm/core/indexedDB/linkedAuthoritySignerMaterial.js +4 -125
  56. package/dist/esm/core/indexedDB/normalization.js +7 -1
  57. package/dist/esm/core/indexedDB/pendingWalletRecoveryCommit.js +1 -1
  58. package/dist/esm/core/indexedDB/pendingWalletRegistrationCommit.js +3 -41
  59. package/dist/esm/core/indexedDB/seamsWalletDB/accountSignerRows.js +261 -0
  60. package/dist/esm/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestLookups.js +2 -201
  61. package/dist/esm/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestRecords.js +5 -736
  62. package/dist/esm/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestStore.js +6 -1084
  63. package/dist/esm/core/indexedDB/seamsWalletDB/ecdsaClientPresignatures.js +20 -138
  64. package/dist/esm/core/indexedDB/seamsWalletDB/manager.js +100 -4
  65. package/dist/esm/core/indexedDB/seamsWalletDB/nonceLeaseRows.js +156 -0
  66. package/dist/esm/core/indexedDB/seamsWalletDB/registrationSetup.js +4 -11
  67. package/dist/esm/core/indexedDB/seamsWalletDB/repositories.js +91 -547
  68. package/dist/esm/core/indexedDB/seamsWalletDB/signerOutboxRows.js +90 -0
  69. package/dist/esm/core/indexedDB/seamsWalletDB/walletCustodyEcdsaContinuity.js +7 -92
  70. package/dist/esm/core/indexedDB/seamsWalletDB/walletOwnershipGeneration.js +43 -0
  71. package/dist/esm/core/indexedDB/seamsWalletDB/walletSessionAuthorizationStore.js +103 -157
  72. package/dist/esm/core/indexedDB/unifiedIndexedDBManager.js +2 -1
  73. package/dist/esm/core/indexedDB/walletCustodyEd25519MaterialRecord.js +1 -1
  74. package/dist/esm/core/rpcClients/evm/nonceBackend.js +1 -176
  75. package/dist/esm/core/rpcClients/near/accountExists.js +34 -0
  76. package/dist/esm/core/rpcClients/relayer/ecdsaPrepareSession.js +42 -0
  77. package/dist/esm/core/rpcClients/relayer/relayerHttp.js +31 -1
  78. package/dist/esm/core/rpcClients/relayer/routerAbNormalSigning.js +47 -11
  79. package/dist/esm/core/rpcClients/relayer/walletRecoveryFinalize.js +2 -48
  80. package/dist/esm/core/rpcClients/relayer/walletRecoveryPrepare.js +9 -9
  81. package/dist/esm/core/rpcClients/relayer/walletRecoveryRotate.js +1 -223
  82. package/dist/esm/core/rpcClients/relayer/walletRegistration.js +36 -2197
  83. package/dist/esm/core/rpcClients/relayer/walletSessionAuthorizationStatus.js +145 -14
  84. package/dist/esm/core/signingEngine/chains/evm/evmAdapter.js +1 -1
  85. package/dist/esm/core/signingEngine/chains/near/display.js +1 -27
  86. package/dist/esm/core/signingEngine/chains/near/nearSignerWasm.js +2 -2
  87. package/dist/esm/core/signingEngine/flows/registration/accountLifecycle.js +6 -39
  88. package/dist/esm/core/signingEngine/flows/shared/signingConfirmation.js +2 -2
  89. package/dist/esm/core/signingEngine/flows/shared/signingStateMachine.js +1 -11
  90. package/dist/esm/core/signingEngine/flows/signEvmFamily/authPlanning.js +2 -2
  91. package/dist/esm/core/signingEngine/flows/signEvmFamily/ecdsaSelection.js +3 -3
  92. package/dist/esm/core/signingEngine/flows/signEvmFamily/emailOtpSigningSession.js +3 -136
  93. package/dist/esm/core/signingEngine/flows/signEvmFamily/freshWalletSessionRetry.js +1 -1
  94. package/dist/esm/core/signingEngine/flows/signEvmFamily/operationIds.js +1 -1
  95. package/dist/esm/core/signingEngine/flows/signEvmFamily/preparedSigning.js +2 -3
  96. package/dist/esm/core/signingEngine/flows/signEvmFamily/readySecp256k1Material.js +40 -5
  97. package/dist/esm/core/signingEngine/flows/signEvmFamily/signEvmFamily.js +4 -4
  98. package/dist/esm/core/signingEngine/flows/signEvmFamily/signers/ecdsaDerivationClientSigningMaterialSource.js +1 -1
  99. package/dist/esm/core/signingEngine/flows/signEvmFamily/signers/secp256k1.js +27 -53
  100. package/dist/esm/core/signingEngine/flows/signEvmFamily/signingFlow.js +5 -5
  101. package/dist/esm/core/signingEngine/flows/signEvmFamily/signingFlowRuntime.js +40 -33
  102. package/dist/esm/core/signingEngine/flows/signEvmFamily/thresholdAdmission.js +8 -2
  103. package/dist/esm/core/signingEngine/flows/signNear/implicitAccountFunding.js +1 -1
  104. package/dist/esm/core/signingEngine/flows/signNear/shared/ed25519YaoNormalSigning.js +177 -68
  105. package/dist/esm/core/signingEngine/flows/signNear/shared/implicitAccountFundingPort.js +1 -8
  106. package/dist/esm/core/signingEngine/flows/signNear/shared/operationStepUpPreparation.js +1 -38
  107. package/dist/esm/core/signingEngine/flows/signNear/shared/signatureOnlySigning.js +53 -8
  108. package/dist/esm/core/signingEngine/flows/signNear/signDelegate.js +5 -5
  109. package/dist/esm/core/signingEngine/flows/signNear/signNear.js +30 -44
  110. package/dist/esm/core/signingEngine/flows/signNear/signNep413.js +21 -12
  111. package/dist/esm/core/signingEngine/flows/signNear/signTransactions.js +59 -11
  112. package/dist/esm/core/signingEngine/interfaces/ecdsaChainTarget.js +1 -1
  113. package/dist/esm/core/signingEngine/nonce/nonceLaneKeys.js +1 -35
  114. package/dist/esm/core/signingEngine/nonce/nonceTypes.js +2 -26
  115. package/dist/esm/core/signingEngine/routerAb/ecdsaDerivation/httpRequest.js +4 -3
  116. package/dist/esm/core/signingEngine/routerAb/ecdsaDerivation/poolFillRoutes.js +5 -1
  117. package/dist/esm/core/signingEngine/routerAb/ecdsaDerivation/presignaturePool.js +112 -162
  118. package/dist/esm/core/signingEngine/routerAb/ecdsaDerivation/presignaturePoolPolicy.js +31 -0
  119. package/dist/esm/core/signingEngine/routerAb/ecdsaDerivation/signingMaterialRef.js +1 -1
  120. package/dist/esm/core/signingEngine/session/availability/availableSigningLanes.js +3 -913
  121. package/dist/esm/core/signingEngine/session/emailOtp/challengeDelivery.js +1 -45
  122. package/dist/esm/core/signingEngine/session/emailOtp/ecdsaSigningSessionAuthority.js +1 -81
  123. package/dist/esm/core/signingEngine/session/identity/clientSessionPersistenceState.js +1 -43
  124. package/dist/esm/core/signingEngine/session/identity/emailOtpEcdsaDerivationIdentity.js +1 -9
  125. package/dist/esm/core/signingEngine/session/identity/evmFamilyEcdsaIdentity.js +3 -125
  126. package/dist/esm/core/signingEngine/session/identity/exactSigningLaneIdentity.js +3 -19
  127. package/dist/esm/core/signingEngine/session/identity/laneIdentity.js +2 -106
  128. package/dist/esm/core/signingEngine/session/keyMaterialBrands.js +1 -1
  129. package/dist/esm/core/signingEngine/session/lifecycle/walletSessionFailure.js +1 -1
  130. package/dist/esm/core/signingEngine/session/material/activeEcdsaCapabilityRuntime.js +1 -114
  131. package/dist/esm/core/signingEngine/session/material/activeWalletAuthorityEcdsaRuntime.js +2 -2
  132. package/dist/esm/core/signingEngine/session/material/ecdsaCapabilityManifest.js +2 -187
  133. package/dist/esm/core/signingEngine/session/material/ecdsaRoleLocalMaterialResolver.js +2 -18
  134. package/dist/esm/core/signingEngine/session/material/ecdsaSigningCapability.js +2 -130
  135. package/dist/esm/core/signingEngine/session/material/linkedEcdsaHolderRuntime.js +1 -25
  136. package/dist/esm/core/signingEngine/session/material/nearEd25519YaoMaterialActivation.js +1 -73
  137. package/dist/esm/core/signingEngine/session/material/walletSigningStateFailure.js +1 -69
  138. package/dist/esm/core/signingEngine/session/operationState/preparedOperation.js +1 -5
  139. package/dist/esm/core/signingEngine/session/operationState/transactionState.js +0 -1
  140. package/dist/esm/core/signingEngine/session/passkey/prfCache.js +1 -5
  141. package/dist/esm/core/signingEngine/session/persistence/durableSealedSessionCommands.js +1 -9
  142. package/dist/esm/core/signingEngine/session/persistence/ecdsaRoleLocalRecords.js +3 -202
  143. package/dist/esm/core/signingEngine/session/persistence/sealedSessionRecords.js +4 -83
  144. package/dist/esm/core/signingEngine/session/persistence/sealedSessionStore.js +2 -2
  145. package/dist/esm/core/signingEngine/session/planning/planner.js +2 -13
  146. package/dist/esm/core/signingEngine/session/sealedRecovery/materialActivationKey.js +1 -8
  147. package/dist/esm/core/signingEngine/session/warmCapabilities/routerAbWalletSessionCredential.js +2 -1
  148. package/dist/esm/core/signingEngine/session/warmCapabilities/sealedRefreshParity.js +2 -41
  149. package/dist/esm/core/signingEngine/stepUpConfirmation/intentDigestPreparation.js +1 -14
  150. package/dist/esm/core/signingEngine/stepUpConfirmation/types.js +1 -7
  151. package/dist/esm/core/signingEngine/threshold/commitQueueShared.js +1 -127
  152. package/dist/esm/core/signingEngine/threshold/crypto/ecdsaDerivationClientWasm.js +3 -297
  153. package/dist/esm/core/signingEngine/threshold/ecdsa/operationStepUp.js +10 -24
  154. package/dist/esm/core/signingEngine/threshold/ed25519/walletSession.js +7 -209
  155. package/dist/esm/core/signingEngine/threshold/ed25519/yaoPublicCapabilityReferences.js +5 -208
  156. package/dist/esm/core/signingEngine/threshold/sessionPolicy.js +3 -9
  157. package/dist/esm/core/signingEngine/uiConfirm/nearFundingNotice.js +1 -17
  158. package/dist/esm/core/signingEngine/uiConfirm/ui/confirm-surface-resize.js +2 -173
  159. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/ConfirmationContent.js +3 -3
  160. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/ReviewDisclosure.js +2 -2
  161. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/TransactionReceipt.js +1 -1
  162. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/TransactionReview.js +5 -4
  163. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/mountConfirmationSurface.js +2 -2
  164. package/dist/esm/core/signingEngine/uiConfirm/ui/surface-resize-events.js +1 -6
  165. package/dist/esm/core/signingEngine/uiConfirm/ui/transaction-display/abi/abiDecode.js +1 -1
  166. package/dist/esm/core/signingEngine/webauthnAuth/credentials/credentialExtensions.js +1 -19
  167. package/dist/esm/core/signingEngine/webauthnAuth/credentials/helpers.js +2 -170
  168. package/dist/esm/core/signingEngine/workerManager/ecdsaPresignPoolIdentity.js +27 -5
  169. package/dist/esm/core/signingEngine/workerManager/validation.js +1 -104
  170. package/dist/esm/core/signingEngine/workerManager/workerTypes.js +1 -33
  171. package/dist/esm/core/types/rpc.js +1 -4
  172. package/dist/esm/core/types/sdkSentEvents.js +1 -24
  173. package/dist/esm/core/walletRuntimePaths/base.js +1 -28
  174. package/dist/esm/externalEvm/controller.js +7 -7
  175. package/dist/esm/index.js +8 -7
  176. package/dist/esm/react/components/AccountMenuButton/AuthenticationMethodsModal.js +9 -9
  177. package/dist/esm/react/components/AccountMenuButton/LinkedDevicesModal.css +1 -2
  178. package/dist/esm/react/components/AccountMenuButton/LinkedDevicesModal.js +9 -185
  179. package/dist/esm/react/components/AccountMenuButton/WalletRegionSection.js +303 -0
  180. package/dist/esm/react/components/AccountMenuButton/WalletSettingsLayout.js +31 -5
  181. package/dist/esm/react/components/AccountMenuButton/index.js +21 -13
  182. package/dist/esm/react/components/AccountMenuButton/types.js +2 -1
  183. package/dist/esm/react/components/HostedSeamsAuthMenu/shell.js +5 -17
  184. package/dist/esm/react/components/QRCodeScanner.js +5 -5
  185. package/dist/esm/react/components/ShowQRCode.js +13 -13
  186. package/dist/esm/react/context/SeamsWebProvider.js +1 -2
  187. package/dist/esm/react/context/index.js +8 -10
  188. package/dist/esm/react/context/seamsManagerSingleton.js +1 -1
  189. package/dist/esm/react/context/useLoginStateRefresher.js +10 -13
  190. package/dist/esm/react/context/useNearProvisioningStateRefresh.js +3 -3
  191. package/dist/esm/react/context/useSeamsContextValue.js +33 -81
  192. package/dist/esm/react/context/useSeamsWithSdkFlow.js +22 -51
  193. package/dist/esm/react/context/useWalletIframeLifecycle.js +20 -110
  194. package/dist/esm/react/hooks/useAccountInput.js +10 -13
  195. package/dist/esm/react/hooks/useDeviceLinking.js +1 -1
  196. package/dist/esm/react/hooks/useNearClient.js +1 -1
  197. package/dist/esm/react/hooks/useQRCamera.js +2 -8
  198. package/dist/esm/react/hooks/useWallet.js +5 -6
  199. package/dist/esm/react/hooks/useWalletAuth.js +3 -4
  200. package/dist/esm/react/hooks/useWalletDevices.js +2 -2
  201. package/dist/esm/react/index.js +4 -4
  202. package/dist/esm/react/transactionReview/TransactionReviewHost.js +1 -1
  203. package/dist/esm/react/transactionReview/boundCalls.js +5 -39
  204. package/dist/esm/react/transactionReview/controller.js +3 -4
  205. package/dist/esm/react/transactionReview/snapshot.js +1 -1
  206. package/dist/esm/react/utils/walletIframe.js +11 -52
  207. package/dist/esm/sdk/{ConfirmationDrawer-DrsREojk.js → ConfirmationDrawer-DY0_yeUV.js} +1 -1
  208. package/dist/esm/sdk/NonceCoordinator-CFFq8-Q9.js +1 -0
  209. package/dist/esm/sdk/accountLifecycle-CAMVowDl.js +1 -0
  210. package/dist/esm/sdk/activeWalletSession-DiZcKjB_.js +1 -0
  211. package/dist/esm/sdk/adapters-DdDOQzl4.js +2 -0
  212. package/dist/esm/sdk/appearance-ZGVLwA4N.js +1 -0
  213. package/dist/esm/sdk/authenticatorOptions-DMLnDWT2.js +1 -0
  214. package/dist/esm/sdk/authorizationAdmission-Ckx6q6tp.js +1 -0
  215. package/dist/esm/sdk/bytes-BBYkulRB.js +1 -0
  216. package/dist/esm/sdk/canonicalPrimitives-CKPGgpxg.js +1 -0
  217. package/dist/esm/sdk/canonicalSignerErrorCode-DEHsPxNm.js +1 -0
  218. package/dist/esm/sdk/{capabilityKinds-XaXXiD2B.js → capabilityKinds-CKQ4Uqnv.js} +1 -1
  219. package/dist/esm/sdk/chains-CiYQT1K4.js +1 -0
  220. package/dist/esm/sdk/challengeDelivery-DxXAkOfS.js +1 -0
  221. package/dist/esm/sdk/clientSessionPersistenceState-CImFWDj6.js +1 -0
  222. package/dist/esm/sdk/commitQueue-iBNUt9Bz.js +1 -0
  223. package/dist/esm/sdk/configBuilder-ZiZwFKt4.js +1 -0
  224. package/dist/esm/sdk/configHelpers-D8Ivi6p8.js +1 -0
  225. package/dist/esm/sdk/digestEncoding-Dzc1rzWV.js +1 -0
  226. package/dist/esm/sdk/display-ClqZq-Xt.js +1 -0
  227. package/dist/esm/sdk/ecdsaCapabilityManifest-BlzJAQF8.js +1 -0
  228. package/dist/{public/sdk/ecdsaChainTarget-CRcRR78w.js → esm/sdk/ecdsaChainTarget-C8ZtMZ8l.js} +1 -1
  229. package/dist/esm/sdk/ecdsaDerivationClientWasm-CVeNEou2.js +1 -0
  230. package/dist/esm/sdk/ecdsaDerivationExport-BZFHSMCv.js +1 -0
  231. package/dist/esm/sdk/{ecdsaWalletRecords-Cm1DdexN.js → ecdsaWalletRecords-D4WeYc7H.js} +1 -1
  232. package/dist/esm/sdk/emailOtpEcdsaDerivationIdentity-B8HzTh4T.js +1 -0
  233. package/dist/esm/sdk/enrichDisplayModelWithAbi-69bNckvi.js +1 -0
  234. package/dist/esm/sdk/{evmCryptoWasm-CwEXiLrC.js → evmCryptoWasm-BXsIyRon.js} +1 -1
  235. package/dist/esm/sdk/export-viewer-host-CsFeiIhd.js +1 -0
  236. package/dist/esm/sdk/exportKeypairOperation-DGQIYML3.js +1 -0
  237. package/dist/esm/sdk/helpers-Ddy72ULN.js +1 -0
  238. package/dist/esm/sdk/host-c1__wJwz.js +1 -0
  239. package/dist/esm/sdk/intentDigest-CE-tLw87.js +1 -0
  240. package/dist/esm/sdk/jsxRuntime.module-BcZNe_OA.js +2 -0
  241. package/dist/esm/sdk/lanes-DnBwWv4l.js +1 -0
  242. package/dist/esm/sdk/localOnly-ClCo6602.js +1 -0
  243. package/dist/esm/sdk/messages-vxz27Way.js +1 -0
  244. package/dist/esm/sdk/mountExportPrivateKeySurface-CBZ0wRYj.js +1 -0
  245. package/dist/{public/sdk/mountRecoveryCodeBackupSurface-BBCTaQsu.js → esm/sdk/mountRecoveryCodeBackupSurface-B1qhFF6G.js} +2 -2
  246. package/dist/esm/sdk/nearEd25519YaoMaterialActivation-fWQI3rYj.js +1 -0
  247. package/dist/esm/sdk/nearEd25519YaoSigningPreparation-B0d1AG3u.js +1 -0
  248. package/dist/{public/sdk/nonceLaneKeys-BBYi4g51.js → esm/sdk/nonceLaneKeys-Fkvk2UPy.js} +1 -1
  249. package/dist/esm/sdk/normalization-CpLZcL2f.js +1 -0
  250. package/dist/esm/sdk/normalization-DCvuCvh0.js +1 -0
  251. package/dist/esm/sdk/normalize-kUDm5zfS.js +1 -0
  252. package/dist/esm/sdk/{operationFingerprint-DtQb0pdp.js → operationFingerprint-CTR9G1NT.js} +1 -1
  253. package/dist/esm/sdk/passkey-custody-BQj44jEM.js +1 -0
  254. package/dist/esm/sdk/pendingWalletRecoveryCodeBackup-yJN8VAHn.js +1 -0
  255. package/dist/esm/sdk/presignaturePool-DwlTReFO.js +1 -0
  256. package/dist/esm/sdk/presignatures-DB2IPD-A.js +1 -0
  257. package/dist/esm/sdk/{prfCache-Mbo7_USg.js → prfCache-BMpqZZ-v.js} +1 -1
  258. package/dist/esm/sdk/primitives-CAcl7ON7.js +1 -0
  259. package/dist/esm/sdk/promptText-D2f5Rg0h.js +1 -0
  260. package/dist/esm/sdk/recovery-entrypoint-Bl5GgbW9.js +1 -0
  261. package/dist/esm/sdk/registration-C4sALQZO.js +1 -0
  262. package/dist/esm/sdk/registration-CEqVAgNJ.js +1 -0
  263. package/dist/esm/sdk/{registrationAccounts-DIeEVy6W.js → registrationAccounts-D4RVetMz.js} +1 -1
  264. package/dist/esm/sdk/registrationAuthMethodInput-6ccY2Vuh.js +1 -0
  265. package/dist/esm/sdk/registrationIds-CdPqm-Ya.js +1 -0
  266. package/dist/esm/sdk/registrationIntent-DOkZcKSP.js +1 -0
  267. package/dist/esm/sdk/registrationSignerPlan-B9GCvpTV.js +1 -0
  268. package/dist/esm/sdk/requireStepUpAuth-DCVqmeee.js +1 -0
  269. package/dist/esm/sdk/routerAbNormalSigning-BG75eyI2.js +1 -0
  270. package/dist/esm/sdk/router_ab_ed25519_yao_client_bg.wasm +0 -0
  271. package/dist/esm/sdk/runtime-auth-BKFyLISf.js +1 -0
  272. package/dist/esm/sdk/runtime-device-link-ENxdEXQW.js +1 -0
  273. package/dist/esm/sdk/runtime-ecdsa-tempo-DhGEb9U7.js +1 -0
  274. package/dist/esm/sdk/runtime-email-otp-dgsP7XZi.js +1 -0
  275. package/dist/esm/sdk/runtime-export-D2RCm5Gk.js +1 -0
  276. package/dist/esm/sdk/runtime-near-Bf-9MFBQ.js +1 -0
  277. package/dist/esm/sdk/runtime-preferences-LQ8SPE7o.js +1 -0
  278. package/dist/esm/sdk/runtime-recovery-BuEzJzuZ.js +1 -0
  279. package/dist/esm/sdk/runtime-recovery-codes-BZMiAR_5.js +1 -0
  280. package/dist/esm/sdk/sdkSentEvents-D3q1h-Uo.js +1 -0
  281. package/dist/esm/sdk/secp256k1-DSLttQND.js +1 -0
  282. package/dist/esm/sdk/{secureRandomId-CTdlJ5Mx.js → secureRandomId-BIekT8bE.js} +1 -1
  283. package/dist/esm/sdk/sessionPolicy-J-RrlPZQ.js +1 -0
  284. package/dist/esm/sdk/shared-8ffIBYw2.js +6 -0
  285. package/dist/esm/sdk/signEvmFamily-KUNWKVeh.js +1 -0
  286. package/dist/esm/sdk/{signEvmFamilyWithUiConfirmForTempo-DgTbh6jX.js → signEvmFamilyWithUiConfirmForTempo-Dc57bJ3V.js} +1 -1
  287. package/dist/esm/sdk/{signEvmWithUiConfirm-ChreN7aZ.js → signEvmWithUiConfirm-CqxL7UbT.js} +1 -1
  288. package/dist/esm/sdk/signNear-BhTkDm2-.js +1 -0
  289. package/dist/esm/sdk/{signatureUses-CQkkUcwT.js → signatureUses-CjJ233KX.js} +1 -1
  290. package/dist/esm/sdk/signerDomain-vQmlnsbF.js +1 -0
  291. package/dist/esm/sdk/signingFlow-vrXxrhlG.js +2 -0
  292. package/dist/esm/sdk/signingQueue-BrGJXBqe.js +1 -0
  293. package/dist/esm/sdk/{signingSessionSeal-Mr2Xp44o.js → signingSessionSeal-CDLUmAFY.js} +1 -1
  294. package/dist/esm/sdk/singletons-8UH3gOnZ.js +1 -0
  295. package/dist/esm/sdk/theme-_AUTWLS_.js +1 -0
  296. package/dist/esm/sdk/thresholdEcdsa-CO7xo1So.js +1 -0
  297. package/dist/esm/sdk/trace-BvbCxdXF.js +1 -0
  298. package/dist/esm/sdk/transaction-activity-D40ih2j-.js +1 -0
  299. package/dist/esm/sdk/transactionReviewAdmission-C-a3ctCJ.js +1 -0
  300. package/dist/esm/sdk/transactionState-DVinJk4K.js +1 -0
  301. package/dist/esm/sdk/tx-confirm-ui.js +7 -11
  302. package/dist/esm/sdk/{promptText-s8TQ6ckX.js → types-BNUuaUtl.js} +1 -1
  303. package/dist/esm/sdk/{types-M7vxrYtJ.js → types-D3GM-uHR.js} +1 -1
  304. package/dist/esm/sdk/wallet-iframe-host-ecdsa.js +1 -1
  305. package/dist/esm/sdk/wallet-iframe-host-full.js +1 -1
  306. package/dist/esm/sdk/wallet-iframe-host-near.js +1 -1
  307. package/dist/esm/sdk/wallet-iframe-host-runtime.js +1 -1
  308. package/dist/esm/sdk/wallet-recovery-C1kesLCF.js +1 -0
  309. package/dist/esm/sdk/wallet-ui.css +1 -1
  310. package/dist/esm/sdk/walletAuthMethodRecord-CXedSgpV.js +1 -0
  311. package/dist/esm/sdk/walletAuthority-B5hXHWpK.js +1 -0
  312. package/dist/esm/sdk/walletCustodyEcdsaContinuity-abNZ_dvX.js +1 -0
  313. package/dist/esm/sdk/{walletIframeIdentity-C0b0XMQF.js → walletIframeIdentity-DJ0KOBHg.js} +1 -1
  314. package/dist/esm/sdk/walletOwnershipGeneration-DoXVMDWe.js +1 -0
  315. package/dist/esm/sdk/walletRecoveryCommit-Cc9AqHr0.js +1 -0
  316. package/dist/esm/sdk/walletRecoveryRotate-DWTAFYiv.js +1 -0
  317. package/dist/esm/sdk/walletSessionAuthorizationProjection-DWBksIJR.js +1 -0
  318. package/dist/esm/sdk/walletSessionAuthorizationStatus-o1VgsLhA.js +1 -0
  319. package/dist/esm/sdk/walletSessionAuthorizationStore-gEYPmu-G.js +1 -0
  320. package/dist/esm/sdk/walletSessionFailure-Bu4VPKTz.js +1 -0
  321. package/dist/esm/sdk/warmSessionHydration-DgjuUacN.js +1 -0
  322. package/dist/esm/sdk/{webauthnP256-qu06GNFm.js → webauthnP256-BEz4DEAs.js} +1 -1
  323. package/dist/esm/sdk/{webauthnPromptCoordinator-DO-qfECu.js → webauthnPromptCoordinator-BEudHQBr.js} +1 -1
  324. package/dist/esm/shared-ts/src/authorization/capabilityKinds.js +1 -7
  325. package/dist/esm/shared-ts/src/authorization/delegatedAuthority.js +2 -20
  326. package/dist/esm/shared-ts/src/authorization/index.js +1 -2
  327. package/dist/esm/shared-ts/src/authorization/operationFingerprint.js +1 -20
  328. package/dist/esm/shared-ts/src/authorization/walletAuthority.js +4 -51
  329. package/dist/esm/shared-ts/src/authorization/walletSessionIssuance.js +1 -112
  330. package/dist/esm/shared-ts/src/device-linking/activeWalletSession.js +13 -3
  331. package/dist/esm/shared-ts/src/device-linking/authorityActivation.js +6 -116
  332. package/dist/esm/shared-ts/src/device-linking/committedSignerPackages.js +3 -270
  333. package/dist/esm/shared-ts/src/device-linking/delegatedActivationPlan.js +2 -2
  334. package/dist/esm/shared-ts/src/device-linking/deviceManagement.js +1 -12
  335. package/dist/esm/shared-ts/src/device-linking/digests.js +1 -109
  336. package/dist/esm/shared-ts/src/device-linking/index.js +0 -2
  337. package/dist/esm/shared-ts/src/device-linking/parsers.js +7 -921
  338. package/dist/esm/shared-ts/src/device-linking/requestProof.js +1 -19
  339. package/dist/esm/shared-ts/src/device-linking/sourceContribution.js +5 -358
  340. package/dist/esm/shared-ts/src/device-linking/walletSessionCredentialDelivery.js +1 -172
  341. package/dist/esm/shared-ts/src/device-linking/wireFields.js +4 -5
  342. package/dist/esm/shared-ts/src/near/actions.js +1 -13
  343. package/dist/esm/shared-ts/src/near/nearClient.js +1 -1
  344. package/dist/esm/shared-ts/src/passkey-custody/custodyEnvelope.js +3 -59
  345. package/dist/esm/shared-ts/src/passkey-custody/custodySecretBinding.js +4 -8
  346. package/dist/esm/shared-ts/src/passkey-custody/index.js +0 -1
  347. package/dist/esm/shared-ts/src/signing-lanes/index.js +0 -1
  348. package/dist/esm/shared-ts/src/signing-lanes/ownerContinuity.js +0 -59
  349. package/dist/esm/shared-ts/src/threshold/ed25519OperationFingerprint.js +1 -1
  350. package/dist/esm/shared-ts/src/threshold/keyMaterialBrands.js +1 -4
  351. package/dist/esm/shared-ts/src/threshold/participants.js +1 -2
  352. package/dist/esm/shared-ts/src/threshold/signingRootScope.js +1 -4
  353. package/dist/esm/shared-ts/src/utils/authenticatorOptions.js +1 -12
  354. package/dist/esm/shared-ts/src/utils/canonicalPrimitives.js +2 -5
  355. package/dist/esm/shared-ts/src/utils/domainIds.js +1 -7
  356. package/dist/esm/shared-ts/src/utils/ecdsaCapabilityActivation.js +1 -16
  357. package/dist/esm/shared-ts/src/utils/ecdsaServerTiming.js +6 -1
  358. package/dist/esm/shared-ts/src/utils/emailOtpDomain.js +1 -23
  359. package/dist/esm/shared-ts/src/utils/emailOtpRecoveryKey.js +1 -42
  360. package/dist/esm/shared-ts/src/utils/errors.js +1 -43
  361. package/dist/esm/shared-ts/src/utils/index.js +18 -22
  362. package/dist/esm/shared-ts/src/utils/near.js +2 -74
  363. package/dist/esm/shared-ts/src/utils/normalize.js +1 -22
  364. package/dist/esm/shared-ts/src/utils/registrationAuthMethodInput.js +1 -74
  365. package/dist/esm/shared-ts/src/utils/registrationEstablishedSession.js +6 -275
  366. package/dist/esm/shared-ts/src/utils/registrationIds.js +1 -203
  367. package/dist/esm/shared-ts/src/utils/registrationIntent.js +1 -389
  368. package/dist/esm/shared-ts/src/utils/registrationSignerPlan.js +2 -434
  369. package/dist/esm/shared-ts/src/utils/routerAbEcdsaDerivation.js +6 -414
  370. package/dist/esm/shared-ts/src/utils/routerAbEd25519Yao.js +1 -334
  371. package/dist/esm/shared-ts/src/utils/routerAbEd25519YaoDigests.js +2 -40
  372. package/dist/esm/shared-ts/src/utils/routerAbNormalSigningIdentity.js +1 -1
  373. package/dist/esm/shared-ts/src/utils/signingSessionSeal.js +1 -6
  374. package/dist/esm/shared-ts/src/utils/thresholdEcdsaKeyHandle.js +1 -6
  375. package/dist/esm/shared-ts/src/utils/validation.js +2 -17
  376. package/dist/esm/shared-ts/src/utils/walletAuthAuthority.js +1 -28
  377. package/dist/esm/shared-ts/src/utils/walletAuthMethodRecord.js +1 -11
  378. package/dist/esm/shared-ts/src/utils/walletCapabilityBindings.js +1 -7
  379. package/dist/esm/shared-ts/src/wallet-recovery/index.js +3 -5
  380. package/dist/esm/shared-ts/src/wallet-recovery/recoveryCodeIssuance.js +1 -35
  381. package/dist/esm/shared-ts/src/wallet-recovery/recoveryCodeLocator.js +0 -32
  382. package/dist/esm/shared-ts/src/wallet-recovery/recoveryCodeReservation.js +1 -15
  383. package/dist/esm/shared-ts/src/wallet-recovery/recoveryKeyId.js +0 -11
  384. package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryCommittedProjection.js +1 -1
  385. package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryEcdsaPossession.js +2 -42
  386. package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryEnvelopeSet.js +3 -53
  387. package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryRotation.js +2 -63
  388. package/dist/esm/threshold.js +1 -1
  389. package/dist/esm/utils/intentDigest.js +1 -4
  390. package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker_bg.wasm +0 -0
  391. package/dist/esm/wasm/router_ab_ecdsa_client/pkg/router_ab_ecdsa_client_bg.wasm +0 -0
  392. package/dist/esm/wasm/router_ab_ed25519_yao_client/pkg/router_ab_ed25519_yao_client_bg.wasm +0 -0
  393. package/dist/public/headers.manifest.json +1 -1
  394. package/dist/public/sdk/{ConfirmationDrawer-DrsREojk.js → ConfirmationDrawer-DY0_yeUV.js} +1 -1
  395. package/dist/public/sdk/NonceCoordinator-CFFq8-Q9.js +1 -0
  396. package/dist/public/sdk/accountLifecycle-CAMVowDl.js +1 -0
  397. package/dist/public/sdk/activeWalletSession-DiZcKjB_.js +1 -0
  398. package/dist/public/sdk/adapters-DdDOQzl4.js +2 -0
  399. package/dist/public/sdk/appearance-ZGVLwA4N.js +1 -0
  400. package/dist/public/sdk/authenticatorOptions-DMLnDWT2.js +1 -0
  401. package/dist/public/sdk/authorizationAdmission-Ckx6q6tp.js +1 -0
  402. package/dist/public/sdk/bytes-BBYkulRB.js +1 -0
  403. package/dist/public/sdk/canonicalPrimitives-CKPGgpxg.js +1 -0
  404. package/dist/public/sdk/canonicalSignerErrorCode-DEHsPxNm.js +1 -0
  405. package/dist/public/sdk/{capabilityKinds-XaXXiD2B.js → capabilityKinds-CKQ4Uqnv.js} +1 -1
  406. package/dist/public/sdk/chains-CiYQT1K4.js +1 -0
  407. package/dist/public/sdk/challengeDelivery-DxXAkOfS.js +1 -0
  408. package/dist/public/sdk/clientSessionPersistenceState-CImFWDj6.js +1 -0
  409. package/dist/public/sdk/commitQueue-iBNUt9Bz.js +1 -0
  410. package/dist/public/sdk/configBuilder-ZiZwFKt4.js +1 -0
  411. package/dist/public/sdk/configHelpers-D8Ivi6p8.js +1 -0
  412. package/dist/public/sdk/digestEncoding-Dzc1rzWV.js +1 -0
  413. package/dist/public/sdk/display-ClqZq-Xt.js +1 -0
  414. package/dist/public/sdk/ecdsaCapabilityManifest-BlzJAQF8.js +1 -0
  415. package/dist/{esm/sdk/ecdsaChainTarget-CRcRR78w.js → public/sdk/ecdsaChainTarget-C8ZtMZ8l.js} +1 -1
  416. package/dist/public/sdk/ecdsaDerivationClientWasm-CVeNEou2.js +1 -0
  417. package/dist/public/sdk/ecdsaDerivationExport-BZFHSMCv.js +1 -0
  418. package/dist/public/sdk/{ecdsaWalletRecords-Cm1DdexN.js → ecdsaWalletRecords-D4WeYc7H.js} +1 -1
  419. package/dist/public/sdk/emailOtpEcdsaDerivationIdentity-B8HzTh4T.js +1 -0
  420. package/dist/public/sdk/enrichDisplayModelWithAbi-69bNckvi.js +1 -0
  421. package/dist/public/sdk/{evmCryptoWasm-CwEXiLrC.js → evmCryptoWasm-BXsIyRon.js} +1 -1
  422. package/dist/public/sdk/export-viewer-host-CsFeiIhd.js +1 -0
  423. package/dist/public/sdk/exportKeypairOperation-DGQIYML3.js +1 -0
  424. package/dist/public/sdk/helpers-Ddy72ULN.js +1 -0
  425. package/dist/public/sdk/host-c1__wJwz.js +1 -0
  426. package/dist/public/sdk/intentDigest-CE-tLw87.js +1 -0
  427. package/dist/public/sdk/jsxRuntime.module-BcZNe_OA.js +2 -0
  428. package/dist/public/sdk/lanes-DnBwWv4l.js +1 -0
  429. package/dist/public/sdk/localOnly-ClCo6602.js +1 -0
  430. package/dist/public/sdk/messages-vxz27Way.js +1 -0
  431. package/dist/public/sdk/mountExportPrivateKeySurface-CBZ0wRYj.js +1 -0
  432. package/dist/{esm/sdk/mountRecoveryCodeBackupSurface-BBCTaQsu.js → public/sdk/mountRecoveryCodeBackupSurface-B1qhFF6G.js} +2 -2
  433. package/dist/public/sdk/nearEd25519YaoMaterialActivation-fWQI3rYj.js +1 -0
  434. package/dist/public/sdk/nearEd25519YaoSigningPreparation-B0d1AG3u.js +1 -0
  435. package/dist/{esm/sdk/nonceLaneKeys-BBYi4g51.js → public/sdk/nonceLaneKeys-Fkvk2UPy.js} +1 -1
  436. package/dist/public/sdk/normalization-CpLZcL2f.js +1 -0
  437. package/dist/public/sdk/normalization-DCvuCvh0.js +1 -0
  438. package/dist/public/sdk/normalize-kUDm5zfS.js +1 -0
  439. package/dist/public/sdk/{operationFingerprint-DtQb0pdp.js → operationFingerprint-CTR9G1NT.js} +1 -1
  440. package/dist/public/sdk/passkey-custody-BQj44jEM.js +1 -0
  441. package/dist/public/sdk/pendingWalletRecoveryCodeBackup-yJN8VAHn.js +1 -0
  442. package/dist/public/sdk/presignaturePool-DwlTReFO.js +1 -0
  443. package/dist/public/sdk/presignatures-DB2IPD-A.js +1 -0
  444. package/dist/public/sdk/{prfCache-Mbo7_USg.js → prfCache-BMpqZZ-v.js} +1 -1
  445. package/dist/public/sdk/primitives-CAcl7ON7.js +1 -0
  446. package/dist/public/sdk/promptText-D2f5Rg0h.js +1 -0
  447. package/dist/public/sdk/recovery-entrypoint-Bl5GgbW9.js +1 -0
  448. package/dist/public/sdk/registration-C4sALQZO.js +1 -0
  449. package/dist/public/sdk/registration-CEqVAgNJ.js +1 -0
  450. package/dist/public/sdk/{registrationAccounts-DIeEVy6W.js → registrationAccounts-D4RVetMz.js} +1 -1
  451. package/dist/public/sdk/registrationAuthMethodInput-6ccY2Vuh.js +1 -0
  452. package/dist/public/sdk/registrationIds-CdPqm-Ya.js +1 -0
  453. package/dist/public/sdk/registrationIntent-DOkZcKSP.js +1 -0
  454. package/dist/public/sdk/registrationSignerPlan-B9GCvpTV.js +1 -0
  455. package/dist/public/sdk/requireStepUpAuth-DCVqmeee.js +1 -0
  456. package/dist/public/sdk/routerAbNormalSigning-BG75eyI2.js +1 -0
  457. package/dist/public/sdk/router_ab_ed25519_yao_client_bg.wasm +0 -0
  458. package/dist/public/sdk/runtime-auth-BKFyLISf.js +1 -0
  459. package/dist/public/sdk/runtime-device-link-ENxdEXQW.js +1 -0
  460. package/dist/public/sdk/runtime-ecdsa-tempo-DhGEb9U7.js +1 -0
  461. package/dist/public/sdk/runtime-email-otp-dgsP7XZi.js +1 -0
  462. package/dist/public/sdk/runtime-export-D2RCm5Gk.js +1 -0
  463. package/dist/public/sdk/runtime-near-Bf-9MFBQ.js +1 -0
  464. package/dist/public/sdk/runtime-preferences-LQ8SPE7o.js +1 -0
  465. package/dist/public/sdk/runtime-recovery-BuEzJzuZ.js +1 -0
  466. package/dist/public/sdk/runtime-recovery-codes-BZMiAR_5.js +1 -0
  467. package/dist/public/sdk/sdkSentEvents-D3q1h-Uo.js +1 -0
  468. package/dist/public/sdk/secp256k1-DSLttQND.js +1 -0
  469. package/dist/public/sdk/{secureRandomId-CTdlJ5Mx.js → secureRandomId-BIekT8bE.js} +1 -1
  470. package/dist/public/sdk/sessionPolicy-J-RrlPZQ.js +1 -0
  471. package/dist/public/sdk/shared-8ffIBYw2.js +6 -0
  472. package/dist/public/sdk/signEvmFamily-KUNWKVeh.js +1 -0
  473. package/dist/public/sdk/{signEvmFamilyWithUiConfirmForTempo-DgTbh6jX.js → signEvmFamilyWithUiConfirmForTempo-Dc57bJ3V.js} +1 -1
  474. package/dist/public/sdk/{signEvmWithUiConfirm-ChreN7aZ.js → signEvmWithUiConfirm-CqxL7UbT.js} +1 -1
  475. package/dist/public/sdk/signNear-BhTkDm2-.js +1 -0
  476. package/dist/public/sdk/{signatureUses-CQkkUcwT.js → signatureUses-CjJ233KX.js} +1 -1
  477. package/dist/public/sdk/signerDomain-vQmlnsbF.js +1 -0
  478. package/dist/public/sdk/signingFlow-vrXxrhlG.js +2 -0
  479. package/dist/public/sdk/signingQueue-BrGJXBqe.js +1 -0
  480. package/dist/public/sdk/{signingSessionSeal-Mr2Xp44o.js → signingSessionSeal-CDLUmAFY.js} +1 -1
  481. package/dist/public/sdk/singletons-8UH3gOnZ.js +1 -0
  482. package/dist/public/sdk/theme-_AUTWLS_.js +1 -0
  483. package/dist/public/sdk/thresholdEcdsa-CO7xo1So.js +1 -0
  484. package/dist/public/sdk/trace-BvbCxdXF.js +1 -0
  485. package/dist/public/sdk/transaction-activity-D40ih2j-.js +1 -0
  486. package/dist/public/sdk/transactionReviewAdmission-C-a3ctCJ.js +1 -0
  487. package/dist/public/sdk/transactionState-DVinJk4K.js +1 -0
  488. package/dist/public/sdk/tx-confirm-ui.js +7 -11
  489. package/dist/public/sdk/{promptText-s8TQ6ckX.js → types-BNUuaUtl.js} +1 -1
  490. package/dist/public/sdk/{types-M7vxrYtJ.js → types-D3GM-uHR.js} +1 -1
  491. package/dist/public/sdk/wallet-iframe-host-ecdsa.js +1 -1
  492. package/dist/public/sdk/wallet-iframe-host-full.js +1 -1
  493. package/dist/public/sdk/wallet-iframe-host-near.js +1 -1
  494. package/dist/public/sdk/wallet-iframe-host-runtime.js +1 -1
  495. package/dist/public/sdk/wallet-recovery-C1kesLCF.js +1 -0
  496. package/dist/public/sdk/wallet-ui.css +1 -1
  497. package/dist/public/sdk/walletAuthMethodRecord-CXedSgpV.js +1 -0
  498. package/dist/public/sdk/walletAuthority-B5hXHWpK.js +1 -0
  499. package/dist/public/sdk/walletCustodyEcdsaContinuity-abNZ_dvX.js +1 -0
  500. package/dist/public/sdk/{walletIframeIdentity-C0b0XMQF.js → walletIframeIdentity-DJ0KOBHg.js} +1 -1
  501. package/dist/public/sdk/walletOwnershipGeneration-DoXVMDWe.js +1 -0
  502. package/dist/public/sdk/walletRecoveryCommit-Cc9AqHr0.js +1 -0
  503. package/dist/public/sdk/walletRecoveryRotate-DWTAFYiv.js +1 -0
  504. package/dist/public/sdk/walletSessionAuthorizationProjection-DWBksIJR.js +1 -0
  505. package/dist/public/sdk/walletSessionAuthorizationStatus-o1VgsLhA.js +1 -0
  506. package/dist/public/sdk/walletSessionAuthorizationStore-gEYPmu-G.js +1 -0
  507. package/dist/public/sdk/walletSessionFailure-Bu4VPKTz.js +1 -0
  508. package/dist/public/sdk/warmSessionHydration-DgjuUacN.js +1 -0
  509. package/dist/public/sdk/{webauthnP256-qu06GNFm.js → webauthnP256-BEz4DEAs.js} +1 -1
  510. package/dist/public/sdk/{webauthnPromptCoordinator-DO-qfECu.js → webauthnPromptCoordinator-BEudHQBr.js} +1 -1
  511. package/dist/public/sdk/workers/device-linking-key.worker.js +18 -0
  512. package/dist/public/sdk/workers/ecdsa-derivation-client.worker.js +1490 -1268
  513. package/dist/public/sdk/workers/ecdsa-online-client.worker.js +96 -0
  514. package/dist/public/sdk/workers/ecdsa-presign-client.worker.js +101 -1
  515. package/dist/public/sdk/workers/email-otp.worker.js +267 -237
  516. package/dist/public/sdk/workers/evm-crypto.worker.js +12 -8
  517. package/dist/public/sdk/workers/passkey-mpc-export.worker.js +30 -1
  518. package/dist/public/sdk/workers/router_ab_ecdsa_client_bg.wasm +0 -0
  519. package/dist/public/sdk/workers/router_ab_ed25519_yao_client_bg.wasm +0 -0
  520. package/dist/public/sdk/workers/shamir3pass.worker.js +10 -8
  521. package/dist/public/sdk/workers/tempo-signer.worker.js +12 -8
  522. package/dist/public/sdk/workers/wallet-custody-ceremony.worker.js +3 -1
  523. package/dist/public/sdk/workers/wallet_custody_ceremony_bg.wasm +0 -0
  524. package/dist/public/sdk/workers/wasm_signer_worker_bg.wasm +0 -0
  525. package/dist/public/wallet-assets.manifest.json +391 -295
  526. package/dist/public/wallet-service/index.html +4 -4
  527. package/dist/types/shared-ts/src/device-linking/activeWalletSession.d.ts +2 -1
  528. package/dist/types/shared-ts/src/device-linking/contracts.d.ts +10 -0
  529. package/dist/types/shared-ts/src/threshold/ed25519OperationFingerprint.d.ts +2 -1
  530. package/dist/types/shared-ts/src/utils/emailOtpDomain.d.ts +3 -1
  531. package/dist/types/shared-ts/src/utils/routerAbPublicKeyset.d.ts +0 -9
  532. package/dist/types/shared-ts/src/utils/walletManagementProtocol.d.ts +1 -1
  533. package/dist/types/wallet/build-paths.d.ts +0 -4
  534. package/dist/types/wallet/src/SeamsWeb/SeamsWeb.d.ts +26 -146
  535. package/dist/types/wallet/src/SeamsWeb/assembly/browserSigningSurfaceAssembly.d.ts +7 -6
  536. package/dist/types/wallet/src/SeamsWeb/assembly/browserSigningSurfacePorts.d.ts +2 -4
  537. package/dist/types/wallet/src/SeamsWeb/assembly/createWalletIframeRouter.d.ts +2 -2
  538. package/dist/types/wallet/src/SeamsWeb/assembly/initializeBrowserSigningRuntime.d.ts +0 -2
  539. package/dist/types/wallet/src/SeamsWeb/index.d.ts +1 -1
  540. package/dist/types/wallet/src/SeamsWeb/operations/auth/login.d.ts +2 -8
  541. package/dist/types/wallet/src/SeamsWeb/operations/auth/unlockCompletion.d.ts +26 -0
  542. package/dist/types/wallet/src/SeamsWeb/operations/auth/unlockPendingRegistration.d.ts +14 -0
  543. package/dist/types/wallet/src/SeamsWeb/operations/auth/unlockSessionPolicy.d.ts +16 -0
  544. package/dist/types/wallet/src/SeamsWeb/operations/authMethods/emailOtp/challenge.d.ts +2 -2
  545. package/dist/types/wallet/src/SeamsWeb/operations/authMethods/emailOtp/googleEmailOtpWalletAuthFlow.d.ts +3 -2
  546. package/dist/types/wallet/src/SeamsWeb/operations/authMethods/revokeAuthMethod.d.ts +17 -1
  547. package/dist/types/wallet/src/SeamsWeb/operations/devices/linkDevice.d.ts +0 -7
  548. package/dist/types/wallet/src/SeamsWeb/operations/devices/walletHostComposition.d.ts +2 -0
  549. package/dist/types/wallet/src/SeamsWeb/operations/near/actions.d.ts +4 -21
  550. package/dist/types/wallet/src/SeamsWeb/operations/near/delegateAction.d.ts +4 -14
  551. package/dist/types/wallet/src/SeamsWeb/operations/near/signDelegateAction.d.ts +14 -0
  552. package/dist/types/wallet/src/SeamsWeb/operations/near/signNEP413.d.ts +2 -2
  553. package/dist/types/wallet/src/SeamsWeb/operations/registration/pendingEcdsaRegistrationRecovery.d.ts +11 -11
  554. package/dist/types/wallet/src/SeamsWeb/operations/registration/pendingEcdsaRegistrationRecoveryValidation.d.ts +18 -4
  555. package/dist/types/wallet/src/SeamsWeb/operations/registration/pendingRegistrationRecovery.d.ts +4 -20
  556. package/dist/types/wallet/src/SeamsWeb/operations/registration/registration.d.ts +10 -4
  557. package/dist/types/wallet/src/SeamsWeb/operations/registration/registrationEd25519Yao.d.ts +1 -1
  558. package/dist/types/wallet/src/SeamsWeb/operations/registration/registrationSignerSet.d.ts +1 -0
  559. package/dist/types/wallet/src/SeamsWeb/operations/registration/registrationTerminalCommit.d.ts +0 -4
  560. package/dist/types/wallet/src/SeamsWeb/operations/registration/registrationTiming.d.ts +2 -3
  561. package/dist/types/wallet/src/SeamsWeb/operations/tempo/index.d.ts +0 -3
  562. package/dist/types/wallet/src/SeamsWeb/publicApi/auth.d.ts +4 -13
  563. package/dist/types/wallet/src/SeamsWeb/publicApi/createPublicApi.d.ts +22 -43
  564. package/dist/types/wallet/src/SeamsWeb/publicApi/devices.d.ts +3 -21
  565. package/dist/types/wallet/src/SeamsWeb/publicApi/evm.d.ts +10 -16
  566. package/dist/types/wallet/src/SeamsWeb/publicApi/evmFamilyCommands.d.ts +6 -0
  567. package/dist/types/wallet/src/SeamsWeb/publicApi/index.d.ts +2 -2
  568. package/dist/types/wallet/src/SeamsWeb/publicApi/keyExport.d.ts +8 -16
  569. package/dist/types/wallet/src/SeamsWeb/publicApi/near.d.ts +10 -10
  570. package/dist/types/wallet/src/SeamsWeb/publicApi/nearCommands.d.ts +17 -0
  571. package/dist/types/wallet/src/SeamsWeb/publicApi/placement.d.ts +90 -0
  572. package/dist/types/wallet/src/SeamsWeb/publicApi/placement.typecheck.d.ts +2 -0
  573. package/dist/types/wallet/src/SeamsWeb/publicApi/session.d.ts +3 -0
  574. package/dist/types/wallet/src/SeamsWeb/publicApi/tempo.d.ts +11 -11
  575. package/dist/types/wallet/src/SeamsWeb/publicApi/types.d.ts +106 -243
  576. package/dist/types/wallet/src/SeamsWeb/publicApi/{awaitNearReady.d.ts → waitForNearAccount.d.ts} +7 -7
  577. package/dist/types/wallet/src/SeamsWeb/signingSurface/BrowserSigningSurface.d.ts +33 -78
  578. package/dist/types/wallet/src/SeamsWeb/signingSurface/ports.d.ts +8 -31
  579. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/deviceCommands.d.ts +4 -0
  580. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/emailOtpCommands.d.ts +4 -0
  581. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/evmFamilyCommands.d.ts +6 -0
  582. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/inboundMessages.d.ts +62 -0
  583. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/nearCommands.d.ts +6 -0
  584. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/placementCommands.d.ts +31 -0
  585. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/preferenceState.d.ts +35 -0
  586. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/preferences.d.ts +10 -0
  587. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/registrationCommands.d.ts +6 -0
  588. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/router.d.ts +36 -121
  589. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/sessionCommands.d.ts +6 -0
  590. package/dist/types/wallet/src/SeamsWeb/walletIframe/coordinator.d.ts +29 -35
  591. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/WalletHostRuntime.d.ts +98 -0
  592. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/auth-menu/controller.d.ts +2 -2
  593. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/context.d.ts +11 -9
  594. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/createDeviceDomain.d.ts +20 -0
  595. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/createEmailOtpCommands.d.ts +11 -0
  596. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/createEvmFamilyCommands.d.ts +8 -0
  597. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/createNearCommands.d.ts +4 -0
  598. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/createPlacementCommands.d.ts +11 -0
  599. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/createRegistrationCommands.d.ts +4 -0
  600. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/createSessionCommands.d.ts +16 -0
  601. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/handlers/placement.d.ts +3 -0
  602. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/handlers/walletIframeHandler.types.d.ts +7 -3
  603. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/hostedWalletSeamsSession.d.ts +2 -0
  604. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/reconcileWalletPlacement.d.ts +10 -0
  605. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/requestRouter.d.ts +4 -4
  606. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/requestWalletMove.d.ts +11 -0
  607. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/runtimeContext.d.ts +5 -3
  608. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/runtimeLoader.d.ts +0 -1
  609. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/sessionObserver.d.ts +39 -0
  610. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/walletMoveLocator.d.ts +5 -0
  611. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/walletMutationGuard.d.ts +3 -0
  612. package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/configuration.d.ts +30 -0
  613. package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/emailOtpLifecycle.d.ts +43 -0
  614. package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/exactSessionState.d.ts +15 -0
  615. package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/facadeBoundary.d.ts +14 -0
  616. package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/messages.d.ts +35 -100
  617. package/dist/types/wallet/src/core/config/chains.d.ts +1 -3
  618. package/dist/types/wallet/src/core/config/configBuilder.d.ts +16 -6
  619. package/dist/types/wallet/src/core/config/defaultConfigs.d.ts +3 -4
  620. package/dist/types/wallet/src/core/config/defineConfig.d.ts +3 -6
  621. package/dist/types/wallet/src/core/config/presignatures.d.ts +3 -0
  622. package/dist/types/wallet/src/core/diagnostics/registration.d.ts +2 -0
  623. package/dist/types/wallet/src/core/indexedDB/normalization.d.ts +5 -0
  624. package/dist/types/wallet/src/core/indexedDB/passkeyClientDB.types.d.ts +2 -2
  625. package/dist/types/wallet/src/core/indexedDB/pendingWalletRegistrationCommit.d.ts +0 -10
  626. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/accountSignerRows.d.ts +44 -0
  627. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestStore.d.ts +0 -2
  628. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/ecdsaClientPresignatures.d.ts +0 -5
  629. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/manager.d.ts +11 -0
  630. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/nonceLeaseRows.d.ts +23 -0
  631. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/repositories.d.ts +1 -0
  632. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/signerOutboxRows.d.ts +15 -0
  633. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/walletOwnershipGeneration.d.ts +6 -0
  634. package/dist/types/wallet/src/core/indexedDB/unifiedIndexedDBManager.d.ts +1 -1
  635. package/dist/types/wallet/src/core/rpcClients/near/accountExists.d.ts +3 -0
  636. package/dist/types/wallet/src/core/rpcClients/near/rpcCalls.d.ts +1 -14
  637. package/dist/types/wallet/src/core/rpcClients/relayer/ecdsaPrepareSession.d.ts +13 -0
  638. package/dist/types/wallet/src/core/rpcClients/relayer/ownerWalletExecutionLanePreflight.d.ts +3 -3
  639. package/dist/types/wallet/src/core/rpcClients/relayer/relayerHttp.d.ts +17 -0
  640. package/dist/types/wallet/src/core/rpcClients/relayer/routerAbNormalSigning.d.ts +19 -3
  641. package/dist/types/wallet/src/core/rpcClients/relayer/walletRegistration.d.ts +29 -40
  642. package/dist/types/wallet/src/core/rpcClients/relayer/walletSessionAuthorizationStatus.d.ts +34 -0
  643. package/dist/types/wallet/src/core/signingEngine/assembly/ports/shared.d.ts +1 -1
  644. package/dist/types/wallet/src/core/signingEngine/assembly/ports/warmSigning.d.ts +2 -1
  645. package/dist/types/wallet/src/core/signingEngine/assembly/warmup.d.ts +2 -14
  646. package/dist/types/wallet/src/core/signingEngine/chains/near/nearSignerWasm.d.ts +2 -6
  647. package/dist/types/wallet/src/core/signingEngine/flows/recovery/public.d.ts +1 -1
  648. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/emailOtpPublic.d.ts +1 -32
  649. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/emailOtpSigningSession.d.ts +3 -82
  650. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/readySecp256k1Material.d.ts +62 -1
  651. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/requireEvmFamilyStepUpAuth.d.ts +1 -1
  652. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/signers/secp256k1.d.ts +4 -55
  653. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/signingFlow.d.ts +1 -1
  654. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/thresholdAdmission.d.ts +3 -2
  655. package/dist/types/wallet/src/core/signingEngine/flows/signNear/shared/ed25519YaoNormalSigning.d.ts +45 -1
  656. package/dist/types/wallet/src/core/signingEngine/flows/signNear/shared/signatureOnlySigning.d.ts +16 -2
  657. package/dist/types/wallet/src/core/signingEngine/flows/signNear/signNear.d.ts +1 -2
  658. package/dist/types/wallet/src/core/signingEngine/flows/signNear/signNep413.d.ts +1 -1
  659. package/dist/types/wallet/src/core/signingEngine/interfaces/ecdsaChainTarget.d.ts +1 -1
  660. package/dist/types/wallet/src/core/signingEngine/interfaces/near.d.ts +3 -0
  661. package/dist/types/wallet/src/core/signingEngine/nonce/nearTransactionReadiness.d.ts +3 -0
  662. package/dist/types/wallet/src/core/signingEngine/routerAb/ecdsaDerivation/presignaturePool.d.ts +9 -5
  663. package/dist/types/wallet/src/core/signingEngine/routerAb/ecdsaDerivation/presignaturePoolPolicy.d.ts +5 -0
  664. package/dist/types/wallet/src/core/signingEngine/session/SigningSessionCoordinator.d.ts +1 -7
  665. package/dist/types/wallet/src/core/signingEngine/session/availability/persistedAvailableSigningLanes.d.ts +1 -1
  666. package/dist/types/wallet/src/core/signingEngine/session/availability/readiness.d.ts +0 -17
  667. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/EmailOtpWalletSessionCoordinator.d.ts +2 -2
  668. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/ecdsaSigningSessionAuthority.d.ts +2 -33
  669. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/exportRecovery.d.ts +2 -2
  670. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/exportRecoveryRuntime.d.ts +14 -3
  671. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/publicTypes.d.ts +1 -2
  672. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/workerEnrollment.d.ts +0 -12
  673. package/dist/types/wallet/src/core/signingEngine/session/lanes/walletExecutionLaneHydration.d.ts +11 -25
  674. package/dist/types/wallet/src/core/signingEngine/session/lifecycle/walletSessionStatus.d.ts +0 -8
  675. package/dist/types/wallet/src/core/signingEngine/session/material/ecdsaSigningCapability.d.ts +2 -2
  676. package/dist/types/wallet/src/core/signingEngine/session/operationState/preparedOperation.d.ts +0 -8
  677. package/dist/types/wallet/src/core/signingEngine/session/operationState/trace.d.ts +1 -1
  678. package/dist/types/wallet/src/core/signingEngine/session/operationState/transactionState.d.ts +0 -1
  679. package/dist/types/wallet/src/core/signingEngine/session/passkey/ed25519YaoRecoveryCapability.d.ts +2 -0
  680. package/dist/types/wallet/src/core/signingEngine/session/public.d.ts +1 -1
  681. package/dist/types/wallet/src/core/signingEngine/session/routerAbSigningWalletSession.d.ts +2 -0
  682. package/dist/types/wallet/src/core/signingEngine/session/userPreferences.d.ts +8 -11
  683. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/capabilityReader.d.ts +2 -1
  684. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/capabilityReaderCore.d.ts +2 -1
  685. package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/confirmOperation.d.ts +3 -1
  686. package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/otpPrompt/authLane.d.ts +6 -12
  687. package/dist/types/wallet/src/core/signingEngine/threshold/ecdsa/operationStepUp.d.ts +6 -5
  688. package/dist/types/wallet/src/core/signingEngine/threshold/ed25519/yaoClient.d.ts +6 -17
  689. package/dist/types/wallet/src/core/signingEngine/uiConfirm/handlers/flows/signing.d.ts +2 -0
  690. package/dist/types/wallet/src/core/signingEngine/uiConfirm/handlers/handlePromptFromWorker.d.ts +2 -0
  691. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/ReviewDisclosure.d.ts +1 -0
  692. package/dist/types/wallet/src/core/signingEngine/uiConfirm/uiConfirm.types.d.ts +3 -0
  693. package/dist/types/wallet/src/core/signingEngine/walletCustody/ceremonyDriver.d.ts +0 -1
  694. package/dist/types/wallet/src/core/signingEngine/walletCustody/walletRegistrationEd25519.d.ts +17 -0
  695. package/dist/types/wallet/src/core/signingEngine/workerManager/SignerWorkerManager.d.ts +0 -1
  696. package/dist/types/wallet/src/core/signingEngine/workerManager/ecdsaPresignLifecycle.d.ts +0 -2
  697. package/dist/types/wallet/src/core/signingEngine/workerManager/ecdsaPresignPoolIdentity.d.ts +9 -0
  698. package/dist/types/wallet/src/core/signingEngine/workerManager/workerTransport.d.ts +0 -5
  699. package/dist/types/wallet/src/core/signingEngine/workerManager/workerTypes.d.ts +15 -27
  700. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/enrollment.d.ts +1 -17
  701. package/dist/types/wallet/src/core/types/rpc.d.ts +0 -1
  702. package/dist/types/wallet/src/core/types/sdkPublicResults.d.ts +1 -0
  703. package/dist/types/wallet/src/core/types/sdkSentEvents.d.ts +2 -0
  704. package/dist/types/wallet/src/core/types/seams.d.ts +12 -9
  705. package/dist/types/wallet/src/core/types/signer-worker.d.ts +2 -1
  706. package/dist/types/wallet/src/externalEvm/controller.d.ts +5 -1
  707. package/dist/types/wallet/src/index.d.ts +5 -2
  708. package/dist/types/wallet/src/react/components/AccountMenuButton/WalletRegionSection.d.ts +54 -0
  709. package/dist/types/wallet/src/react/components/AccountMenuButton/WalletSettingsLayout.d.ts +7 -2
  710. package/dist/types/wallet/src/react/components/AccountMenuButton/index.d.ts +1 -1
  711. package/dist/types/wallet/src/react/components/AccountMenuButton/types.d.ts +1 -0
  712. package/dist/types/wallet/src/react/components/HostedSeamsAuthMenu/public.d.ts +1 -1
  713. package/dist/types/wallet/src/react/components/HostedSeamsAuthMenu/types.d.ts +2 -5
  714. package/dist/types/wallet/src/react/context/SeamsWebProvider.d.ts +0 -5
  715. package/dist/types/wallet/src/react/context/useLoginStateRefresher.d.ts +1 -1
  716. package/dist/types/wallet/src/react/context/useNearProvisioningStateRefresh.d.ts +1 -1
  717. package/dist/types/wallet/src/react/context/useSeamsContextValue.d.ts +2 -2
  718. package/dist/types/wallet/src/react/context/useWalletIframeLifecycle.d.ts +4 -2
  719. package/dist/types/wallet/src/react/hooks/useQRCamera.d.ts +1 -7
  720. package/dist/types/wallet/src/react/hooks/useWallet.d.ts +5 -6
  721. package/dist/types/wallet/src/react/hooks/useWalletAuth.d.ts +1 -1
  722. package/dist/types/wallet/src/react/hooks/useWalletDevices.d.ts +1 -1
  723. package/dist/types/wallet/src/react/index.d.ts +2 -2
  724. package/dist/types/wallet/src/react/transactionReview/boundCalls.d.ts +0 -26
  725. package/dist/types/wallet/src/react/types.d.ts +12 -20
  726. package/dist/types/wallet/src/react/utils/walletIframe.d.ts +2 -6
  727. package/dist/workers/device-linking-key.worker.js +18 -0
  728. package/dist/workers/ecdsa-derivation-client.worker.js +1490 -1268
  729. package/dist/workers/ecdsa-online-client.worker.js +96 -0
  730. package/dist/workers/ecdsa-presign-client.worker.js +101 -1
  731. package/dist/workers/email-otp.worker.js +267 -237
  732. package/dist/workers/evm-crypto.worker.js +12 -8
  733. package/dist/workers/passkey-mpc-export.worker.js +30 -1
  734. package/dist/workers/router_ab_ecdsa_client_bg.wasm +0 -0
  735. package/dist/workers/router_ab_ed25519_yao_client_bg.wasm +0 -0
  736. package/dist/workers/shamir3pass.worker.js +10 -8
  737. package/dist/workers/tempo-signer.worker.js +12 -8
  738. package/dist/workers/wallet-custody-ceremony.worker.js +3 -1
  739. package/dist/workers/wallet_custody_ceremony_bg.wasm +0 -0
  740. package/dist/workers/wasm_signer_worker_bg.wasm +0 -0
  741. package/package.json +1 -1
  742. package/dist/esm/SeamsWeb/assembly/browserSigningSurfaceAssembly.js +0 -817
  743. package/dist/esm/SeamsWeb/assembly/browserWorkerWarmupPolicy.js +0 -31
  744. package/dist/esm/SeamsWeb/assembly/configureBrowserIndexedDB.js +0 -10
  745. package/dist/esm/SeamsWeb/assembly/createBrowserRecoveryPublicDeps.js +0 -95
  746. package/dist/esm/SeamsWeb/assembly/createBrowserSigningRuntime.js +0 -34
  747. package/dist/esm/SeamsWeb/assembly/createBrowserSigningStores.js +0 -39
  748. package/dist/esm/SeamsWeb/assembly/createBrowserStepUpRuntime.js +0 -34
  749. package/dist/esm/SeamsWeb/assembly/createBrowserWarmSessionPublicDeps.js +0 -29
  750. package/dist/esm/SeamsWeb/assembly/initializeBrowserSigningRuntime.js +0 -19
  751. package/dist/esm/SeamsWeb/assembly/runtimeConfig.js +0 -12
  752. package/dist/esm/SeamsWeb/operations/auth/login.js +0 -4383
  753. package/dist/esm/SeamsWeb/operations/auth/scheduleEcdsaSessionPresignaturePrefill.js +0 -41
  754. package/dist/esm/SeamsWeb/operations/auth/scheduleLinkedDevicePresignaturePrefill.js +0 -64
  755. package/dist/esm/SeamsWeb/operations/auth/walletAuth.js +0 -142
  756. package/dist/esm/SeamsWeb/operations/auth/walletUnlockEcdsaSubject.js +0 -33
  757. package/dist/esm/SeamsWeb/operations/auth/walletUnlockSubject.js +0 -288
  758. package/dist/esm/SeamsWeb/operations/authMethods/addAuthMethodSourceClaim.js +0 -72
  759. package/dist/esm/SeamsWeb/operations/authMethods/emailOtp/addEmailOtp.js +0 -191
  760. package/dist/esm/SeamsWeb/operations/authMethods/emailOtp/challenge.js +0 -247
  761. package/dist/esm/SeamsWeb/operations/authMethods/emailOtp/googleEmailOtpWalletAuthFlow.js +0 -568
  762. package/dist/esm/SeamsWeb/operations/authMethods/emailOtp/localEmailOtpProjection.js +0 -69
  763. package/dist/esm/SeamsWeb/operations/authMethods/emailOtp/registrationAuthority.js +0 -62
  764. package/dist/esm/SeamsWeb/operations/authMethods/emailOtp/registrationOffer.js +0 -69
  765. package/dist/esm/SeamsWeb/operations/authMethods/emailOtp/walletActivation.js +0 -95
  766. package/dist/esm/SeamsWeb/operations/authMethods/passkey/addPasskey.js +0 -260
  767. package/dist/esm/SeamsWeb/operations/authMethods/passkey/ecdsaBootstrap.js +0 -17
  768. package/dist/esm/SeamsWeb/operations/authMethods/passkey/exactPasskeyAuthority.js +0 -34
  769. package/dist/esm/SeamsWeb/operations/authMethods/passkey/localUnlock.js +0 -16
  770. package/dist/esm/SeamsWeb/operations/authMethods/passkey/loginAssertion.js +0 -25
  771. package/dist/esm/SeamsWeb/operations/authMethods/passkey/registrationAuthority.js +0 -84
  772. package/dist/esm/SeamsWeb/operations/authMethods/revokeAuthMethod.js +0 -205
  773. package/dist/esm/SeamsWeb/operations/authMethods/sourcePasskeyProof.js +0 -12
  774. package/dist/esm/SeamsWeb/operations/devices/deviceLinkingAuthorityInstallation.js +0 -444
  775. package/dist/esm/SeamsWeb/operations/devices/deviceLinkingComposition.js +0 -106
  776. package/dist/esm/SeamsWeb/operations/devices/deviceLinkingEd25519ExportRoot.js +0 -194
  777. package/dist/esm/SeamsWeb/operations/devices/deviceLinkingHttpTransport.js +0 -524
  778. package/dist/esm/SeamsWeb/operations/devices/deviceLinkingOwnerTransport.js +0 -135
  779. package/dist/esm/SeamsWeb/operations/devices/deviceLinkingResume.js +0 -212
  780. package/dist/esm/SeamsWeb/operations/devices/deviceLinkingTargetCredential.js +0 -63
  781. package/dist/esm/SeamsWeb/operations/devices/deviceLinkingTargetEd25519ExportRoot.js +0 -61
  782. package/dist/esm/SeamsWeb/operations/devices/deviceLinkingWorkerChannels.js +0 -337
  783. package/dist/esm/SeamsWeb/operations/devices/linkDevice.js +0 -75
  784. package/dist/esm/SeamsWeb/operations/devices/linkDeviceFlow.js +0 -1383
  785. package/dist/esm/SeamsWeb/operations/devices/linkDeviceFlowSupport.js +0 -143
  786. package/dist/esm/SeamsWeb/operations/devices/linkDeviceTargetActivation.js +0 -119
  787. package/dist/esm/SeamsWeb/operations/devices/walletHostComposition.js +0 -130
  788. package/dist/esm/SeamsWeb/operations/devices/walletHostOwnerAuthority.js +0 -191
  789. package/dist/esm/SeamsWeb/operations/evm/index.js +0 -35
  790. package/dist/esm/SeamsWeb/operations/near/actions.js +0 -484
  791. package/dist/esm/SeamsWeb/operations/near/commandSubject.js +0 -14
  792. package/dist/esm/SeamsWeb/operations/near/index.js +0 -37
  793. package/dist/esm/SeamsWeb/operations/near/signNEP413.js +0 -116
  794. package/dist/esm/SeamsWeb/operations/recovery/accountSync.js +0 -21
  795. package/dist/esm/SeamsWeb/operations/recovery/recoveryWalletBinding.js +0 -43
  796. package/dist/esm/SeamsWeb/operations/recovery/syncAccount.js +0 -912
  797. package/dist/esm/SeamsWeb/operations/recovery/walletRecoveryCodeBackup.js +0 -100
  798. package/dist/esm/SeamsWeb/operations/recovery/walletRecoveryRotation.js +0 -213
  799. package/dist/esm/SeamsWeb/operations/registration/pendingEcdsaRegistrationRecovery.js +0 -184
  800. package/dist/esm/SeamsWeb/operations/registration/pendingEcdsaRegistrationRecoveryUnlock.js +0 -247
  801. package/dist/esm/SeamsWeb/operations/registration/pendingEcdsaRegistrationRecoveryValidation.js +0 -134
  802. package/dist/esm/SeamsWeb/operations/registration/pendingRegistrationRecovery.js +0 -354
  803. package/dist/esm/SeamsWeb/operations/registration/registration.js +0 -3818
  804. package/dist/esm/SeamsWeb/operations/registration/registrationEd25519Yao.js +0 -166
  805. package/dist/esm/SeamsWeb/operations/registration/registrationSignerSet.js +0 -60
  806. package/dist/esm/SeamsWeb/operations/registration/registrationStrictEcdsa.js +0 -343
  807. package/dist/esm/SeamsWeb/operations/registration/registrationTerminalCommit.js +0 -296
  808. package/dist/esm/SeamsWeb/operations/registration/registrationTiming.js +0 -682
  809. package/dist/esm/SeamsWeb/operations/session/thresholdEcdsaProvisioning.js +0 -36
  810. package/dist/esm/SeamsWeb/operations/session/thresholdWarmSessionBootstrap.js +0 -20
  811. package/dist/esm/SeamsWeb/publicApi/preferences.js +0 -61
  812. package/dist/esm/SeamsWeb/publicApi/recovery.js +0 -19
  813. package/dist/esm/SeamsWeb/publicApi/types.js +0 -10
  814. package/dist/esm/SeamsWeb/signingSurface/BrowserSigningSurface.js +0 -3917
  815. package/dist/esm/SeamsWeb/walletIframe/host/restoredSessionPresignaturePrefill.js +0 -29
  816. package/dist/esm/core/browser/walletIframe/events.js +0 -6
  817. package/dist/esm/core/browser/walletIframe/host-mode.js +0 -9
  818. package/dist/esm/core/config/managedRuntimeScope.js +0 -16
  819. package/dist/esm/core/indexedDB/seamsWalletDB/pendingWalletRecoveryCodeBackup.js +0 -144
  820. package/dist/esm/core/platform/browser/createBrowserPlatformRuntime.js +0 -535
  821. package/dist/esm/core/platform/secretSources.js +0 -111
  822. package/dist/esm/core/platform/signerCoreCommandAdapters.js +0 -122
  823. package/dist/esm/core/rpcClients/near/rpcCalls.js +0 -376
  824. package/dist/esm/core/rpcClients/relayer/ownerWalletExecutionLanePreflight.js +0 -67
  825. package/dist/esm/core/rpcClients/relayer/passkeyCustodyEnvelope.js +0 -218
  826. package/dist/esm/core/rpcClients/relayer/sealedRefreshCapabilities.js +0 -148
  827. package/dist/esm/core/rpcClients/relayer/thresholdEcdsa.js +0 -235
  828. package/dist/esm/core/rpcClients/relayer/walletRecoveryGoogleEmailOtp.js +0 -161
  829. package/dist/esm/core/rpcClients/relayer/walletRegistrationTerminalResponse.js +0 -718
  830. package/dist/esm/core/signingEngine/assembly/createManagers.js +0 -80
  831. package/dist/esm/core/signingEngine/assembly/createPorts.js +0 -54
  832. package/dist/esm/core/signingEngine/assembly/ports/emailOtp.js +0 -30
  833. package/dist/esm/core/signingEngine/assembly/ports/evmFamily.js +0 -73
  834. package/dist/esm/core/signingEngine/assembly/ports/near.js +0 -21
  835. package/dist/esm/core/signingEngine/assembly/ports/recovery.js +0 -75
  836. package/dist/esm/core/signingEngine/assembly/ports/registration.js +0 -22
  837. package/dist/esm/core/signingEngine/assembly/ports/session.js +0 -25
  838. package/dist/esm/core/signingEngine/assembly/ports/shared.js +0 -39
  839. package/dist/esm/core/signingEngine/assembly/ports/stepUpRuntime.js +0 -67
  840. package/dist/esm/core/signingEngine/assembly/ports/warmSigning.js +0 -92
  841. package/dist/esm/core/signingEngine/assembly/warmup.js +0 -64
  842. package/dist/esm/core/signingEngine/flows/recovery/ecdsaDerivationExport.js +0 -427
  843. package/dist/esm/core/signingEngine/flows/recovery/ecdsaExportFlow.js +0 -660
  844. package/dist/esm/core/signingEngine/flows/recovery/ecdsaExportMaterial.js +0 -249
  845. package/dist/esm/core/signingEngine/flows/recovery/ed25519YaoExportFlow.js +0 -353
  846. package/dist/esm/core/signingEngine/flows/recovery/exportKeypairOperation.js +0 -213
  847. package/dist/esm/core/signingEngine/flows/recovery/exportLaneSelection.js +0 -283
  848. package/dist/esm/core/signingEngine/flows/recovery/keyExportConfirmation.js +0 -325
  849. package/dist/esm/core/signingEngine/flows/recovery/keyExportFlow.js +0 -81
  850. package/dist/esm/core/signingEngine/flows/recovery/passkeyEd25519YaoRecovery.js +0 -192
  851. package/dist/esm/core/signingEngine/flows/recovery/public.js +0 -26
  852. package/dist/esm/core/signingEngine/flows/recovery/stepUpAuthorization.js +0 -139
  853. package/dist/esm/core/signingEngine/flows/registration/nearProvisioningRegistry.js +0 -79
  854. package/dist/esm/core/signingEngine/flows/registration/public.js +0 -85
  855. package/dist/esm/core/signingEngine/flows/registration/services/ecdsaRegistrationSessions.js +0 -77
  856. package/dist/esm/core/signingEngine/flows/registration/services/passkeyEd25519YaoAddSigner.js +0 -82
  857. package/dist/esm/core/signingEngine/flows/registration/session.js +0 -24
  858. package/dist/esm/core/signingEngine/flows/signEvmFamily/emailOtpPublic.js +0 -123
  859. package/dist/esm/core/signingEngine/nonce/NonceCoordinator.js +0 -1026
  860. package/dist/esm/core/signingEngine/nonce/evmNonceLane.js +0 -182
  861. package/dist/esm/core/signingEngine/nonce/nearNonceLane.js +0 -669
  862. package/dist/esm/core/signingEngine/nonce/nonceDiagnostics.js +0 -232
  863. package/dist/esm/core/signingEngine/nonce/nonceLeaseState.js +0 -128
  864. package/dist/esm/core/signingEngine/nonce/nonceUtils.js +0 -33
  865. package/dist/esm/core/signingEngine/session/SigningSessionCoordinator.js +0 -344
  866. package/dist/esm/core/signingEngine/session/authority/authorityOperationResolver.js +0 -114
  867. package/dist/esm/core/signingEngine/session/availability/canonicalLaneInventory.js +0 -127
  868. package/dist/esm/core/signingEngine/session/availability/clientSessionExpiryInvalidator.js +0 -72
  869. package/dist/esm/core/signingEngine/session/availability/persistedAvailableSigningLanes.js +0 -214
  870. package/dist/esm/core/signingEngine/session/availability/readiness.js +0 -464
  871. package/dist/esm/core/signingEngine/session/emailOtp/EmailOtpWalletSessionCoordinator.js +0 -130
  872. package/dist/esm/core/signingEngine/session/emailOtp/ecdsaBootstrapCommit.js +0 -106
  873. package/dist/esm/core/signingEngine/session/emailOtp/ecdsaLifecycleRuntime.js +0 -47
  874. package/dist/esm/core/signingEngine/session/emailOtp/ecdsaLogin.js +0 -930
  875. package/dist/esm/core/signingEngine/session/emailOtp/ecdsaPublication.js +0 -414
  876. package/dist/esm/core/signingEngine/session/emailOtp/ecdsaRecovery.js +0 -264
  877. package/dist/esm/core/signingEngine/session/emailOtp/ed25519ExportContext.js +0 -373
  878. package/dist/esm/core/signingEngine/session/emailOtp/exportRecovery.js +0 -284
  879. package/dist/esm/core/signingEngine/session/emailOtp/exportRecoveryRuntime.js +0 -50
  880. package/dist/esm/core/signingEngine/session/emailOtp/persistedSnapshot.js +0 -22
  881. package/dist/esm/core/signingEngine/session/emailOtp/publicTypes.js +0 -38
  882. package/dist/esm/core/signingEngine/session/emailOtp/routePlan.js +0 -60
  883. package/dist/esm/core/signingEngine/session/emailOtp/runtimeConfig.js +0 -24
  884. package/dist/esm/core/signingEngine/session/emailOtp/sealedRefreshPolicy.js +0 -49
  885. package/dist/esm/core/signingEngine/session/emailOtp/sealedRestoreOrchestrator.js +0 -234
  886. package/dist/esm/core/signingEngine/session/emailOtp/sealedRuntimePurpose.js +0 -16
  887. package/dist/esm/core/signingEngine/session/emailOtp/sealedSessionRegistry.js +0 -40
  888. package/dist/esm/core/signingEngine/session/emailOtp/status.js +0 -72
  889. package/dist/esm/core/signingEngine/session/emailOtp/walletUnlock.js +0 -168
  890. package/dist/esm/core/signingEngine/session/emailOtp/warmSessionRuntime.js +0 -70
  891. package/dist/esm/core/signingEngine/session/emailOtp/workerEnrollment.js +0 -159
  892. package/dist/esm/core/signingEngine/session/emailOtp/workerRequests.js +0 -84
  893. package/dist/esm/core/signingEngine/session/emailOtp/zeroize.js +0 -9
  894. package/dist/esm/core/signingEngine/session/identity/exactWalletSessionCredential.js +0 -104
  895. package/dist/esm/core/signingEngine/session/identity/exactWalletSessionReader.js +0 -54
  896. package/dist/esm/core/signingEngine/session/identity/ownerLaneScope.js +0 -185
  897. package/dist/esm/core/signingEngine/session/lanes/walletExecutionLaneHydration.js +0 -194
  898. package/dist/esm/core/signingEngine/session/lifecycle/canonicalWalletSessionStatus.js +0 -32
  899. package/dist/esm/core/signingEngine/session/lifecycle/walletSessionStatus.js +0 -123
  900. package/dist/esm/core/signingEngine/session/material/ecdsaCapabilityHydration.js +0 -75
  901. package/dist/esm/core/signingEngine/session/material/ecdsaSealedRuntime.js +0 -197
  902. package/dist/esm/core/signingEngine/session/material/mpcCapabilityHydration.js +0 -79
  903. package/dist/esm/core/signingEngine/session/material/nearEd25519YaoSigningPreparation.js +0 -122
  904. package/dist/esm/core/signingEngine/session/material/restorableMpcMaterialRef.internal.js +0 -21
  905. package/dist/esm/core/signingEngine/session/passkey/ecdsaBootstrap.js +0 -184
  906. package/dist/esm/core/signingEngine/session/passkey/ecdsaKeyFactsInventory.js +0 -205
  907. package/dist/esm/core/signingEngine/session/passkey/ecdsaRecovery.js +0 -84
  908. package/dist/esm/core/signingEngine/session/passkey/ecdsaSessionProvision.js +0 -224
  909. package/dist/esm/core/signingEngine/session/passkey/ecdsaWarmCapabilityBootstrap.js +0 -147
  910. package/dist/esm/core/signingEngine/session/passkey/ed25519Provisioner.js +0 -55
  911. package/dist/esm/core/signingEngine/session/passkey/ed25519SessionProvision.js +0 -228
  912. package/dist/esm/core/signingEngine/session/passkey/ed25519YaoLocalMaterial.js +0 -536
  913. package/dist/esm/core/signingEngine/session/passkey/ed25519YaoRecoveryCapability.js +0 -94
  914. package/dist/esm/core/signingEngine/session/passkey/ed25519YaoSealedSession.js +0 -57
  915. package/dist/esm/core/signingEngine/session/passkey/ed25519YaoWarmRecovery.js +0 -281
  916. package/dist/esm/core/signingEngine/session/passkey/passkeyCustodySessionCache.js +0 -90
  917. package/dist/esm/core/signingEngine/session/passkey/public.js +0 -15
  918. package/dist/esm/core/signingEngine/session/passkey/unlockEcdsaWarmupPlanner.js +0 -247
  919. package/dist/esm/core/signingEngine/session/persistence/clientSessionPersistence.js +0 -135
  920. package/dist/esm/core/signingEngine/session/persistence/walletSessionAuthorizationProjection.js +0 -51
  921. package/dist/esm/core/signingEngine/session/planning/operationIdBinding.js +0 -36
  922. package/dist/esm/core/signingEngine/session/postconditions/runtimePostconditions.js +0 -163
  923. package/dist/esm/core/signingEngine/session/public.js +0 -44
  924. package/dist/esm/core/signingEngine/session/routerAbSigningWalletSession.js +0 -119
  925. package/dist/esm/core/signingEngine/session/sealedRecovery/exactRecordLookup.js +0 -148
  926. package/dist/esm/core/signingEngine/session/sealedRecovery/recoveryRecord.js +0 -248
  927. package/dist/esm/core/signingEngine/session/sealedRecovery/restoreCoordinator.js +0 -229
  928. package/dist/esm/core/signingEngine/session/userPreferences.js +0 -212
  929. package/dist/esm/core/signingEngine/session/warmCapabilities/capabilityReader.js +0 -62
  930. package/dist/esm/core/signingEngine/session/warmCapabilities/capabilityReaderCore.js +0 -293
  931. package/dist/esm/core/signingEngine/session/warmCapabilities/clearVolatileWarmSigningMaterial.js +0 -44
  932. package/dist/esm/core/signingEngine/session/warmCapabilities/ecdsaBootstrapPersistence.js +0 -107
  933. package/dist/esm/core/signingEngine/session/warmCapabilities/ecdsaBootstrapQueue.js +0 -22
  934. package/dist/esm/core/signingEngine/session/warmCapabilities/ecdsaLoginPrefill.js +0 -93
  935. package/dist/esm/core/signingEngine/session/warmCapabilities/ecdsaLoginPrefillSigningMaterialSource.js +0 -50
  936. package/dist/esm/core/signingEngine/session/warmCapabilities/ecdsaProvisionPlan.js +0 -9
  937. package/dist/esm/core/signingEngine/session/warmCapabilities/ed25519SealedSessionRuntime.js +0 -251
  938. package/dist/esm/core/signingEngine/session/warmCapabilities/nearEd25519CapabilityRehydration.js +0 -98
  939. package/dist/esm/core/signingEngine/session/warmCapabilities/public.js +0 -31
  940. package/dist/esm/core/signingEngine/session/warmCapabilities/readModel.js +0 -155
  941. package/dist/esm/core/signingEngine/session/warmCapabilities/routerAbEd25519WalletSessionState.js +0 -256
  942. package/dist/esm/core/signingEngine/session/warmCapabilities/statusReader.js +0 -100
  943. package/dist/esm/core/signingEngine/session/warmCapabilities/transitions.js +0 -47
  944. package/dist/esm/core/signingEngine/session/warmCapabilities/types.js +0 -122
  945. package/dist/esm/core/signingEngine/session/warmCapabilities/volatileWarmMaterialCommands.js +0 -45
  946. package/dist/esm/core/signingEngine/stepUpConfirmation/channel/confirmCommon.js +0 -89
  947. package/dist/esm/core/signingEngine/stepUpConfirmation/channel/confirmTypes.js +0 -12
  948. package/dist/esm/core/signingEngine/stepUpConfirmation/otpPrompt/authLane.js +0 -31
  949. package/dist/esm/core/signingEngine/stepUpConfirmation/otpPrompt/exportAuthorization.js +0 -108
  950. package/dist/esm/core/signingEngine/stepUpConfirmation/passkeyPrompt/touchIdPrompt.js +0 -271
  951. package/dist/esm/core/signingEngine/stepUpConfirmation/passkeyPrompt/webauthnPromptCoordinator.js +0 -167
  952. package/dist/esm/core/signingEngine/stepUpConfirmation/userConfirmationType.js +0 -15
  953. package/dist/esm/core/signingEngine/threshold/crypto/ed25519YaoLaneWasm.js +0 -67
  954. package/dist/esm/core/signingEngine/threshold/ecdsa/activation.js +0 -267
  955. package/dist/esm/core/signingEngine/threshold/ecdsa/bootstrapSession.js +0 -115
  956. package/dist/esm/core/signingEngine/threshold/ecdsa/postRegistrationSessionActivation.js +0 -132
  957. package/dist/esm/core/signingEngine/threshold/ecdsa/signingQueue.js +0 -16
  958. package/dist/esm/core/signingEngine/threshold/ed25519/commitQueue.js +0 -16
  959. package/dist/esm/core/signingEngine/threshold/ed25519/connectSession.js +0 -137
  960. package/dist/esm/core/signingEngine/threshold/ed25519/yaoActiveClientRegistry.js +0 -146
  961. package/dist/esm/core/signingEngine/threshold/ed25519/yaoClient.js +0 -563
  962. package/dist/esm/core/signingEngine/threshold/ed25519/yaoPageLifecycleOwner.js +0 -23
  963. package/dist/esm/core/signingEngine/uiConfirm/PasskeyMpcExportManager.js +0 -233
  964. package/dist/esm/core/signingEngine/uiConfirm/PasskeyMpcSessionDurableState.js +0 -493
  965. package/dist/esm/core/signingEngine/uiConfirm/PasskeyMpcSessionManager.js +0 -746
  966. package/dist/esm/core/signingEngine/uiConfirm/UiConfirmManager.js +0 -599
  967. package/dist/esm/core/signingEngine/uiConfirm/confirmationReadinessRegistry.js +0 -41
  968. package/dist/esm/core/signingEngine/uiConfirm/exportConfirmRequest.js +0 -149
  969. package/dist/esm/core/signingEngine/uiConfirm/handlers/determineConfirmationConfig.js +0 -82
  970. package/dist/esm/core/signingEngine/uiConfirm/handlers/flowOrchestrator.js +0 -363
  971. package/dist/esm/core/signingEngine/uiConfirm/handlers/flows/adapters/adapters.js +0 -337
  972. package/dist/esm/core/signingEngine/uiConfirm/handlers/flows/adapters/request.js +0 -120
  973. package/dist/esm/core/signingEngine/uiConfirm/handlers/flows/localOnly.js +0 -149
  974. package/dist/esm/core/signingEngine/uiConfirm/handlers/flows/registration.js +0 -235
  975. package/dist/esm/core/signingEngine/uiConfirm/handlers/flows/requestRegistrationCredentialConfirmation.js +0 -178
  976. package/dist/esm/core/signingEngine/uiConfirm/handlers/flows/signing.js +0 -684
  977. package/dist/esm/core/signingEngine/uiConfirm/handlers/handlePromptFromWorker.js +0 -90
  978. package/dist/esm/core/signingEngine/uiConfirm/ui/appearance.js +0 -27
  979. package/dist/esm/core/signingEngine/uiConfirm/ui/confirm-ui.js +0 -516
  980. package/dist/esm/core/signingEngine/uiConfirm/ui/export-private-key-reveal.js +0 -155
  981. package/dist/esm/core/signingEngine/uiConfirm/ui/export-viewer-host.js +0 -207
  982. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/ExportPrivateKeySurface.js +0 -318
  983. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/RecoveryCodeBackupSurface.js +0 -518
  984. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/confirmation-controller.js +0 -80
  985. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/mountExportPrivateKeySurface.js +0 -86
  986. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/mountRecoveryCodeBackupSurface.js +0 -82
  987. package/dist/esm/core/signingEngine/uiConfirm/ui/surface-measurement-binding.js +0 -12
  988. package/dist/esm/core/signingEngine/uiConfirm/ui/transaction-activity.js +0 -46
  989. package/dist/esm/core/signingEngine/uiConfirm/ui/transaction-display/confirmation-tree.js +0 -27
  990. package/dist/esm/core/signingEngine/uiConfirm/warmSessionUiConfirm.js +0 -65
  991. package/dist/esm/core/signingEngine/walletCustody/activateEd25519Capability.js +0 -122
  992. package/dist/esm/core/signingEngine/walletCustody/ceremonyActiveClientMetadata.js +0 -94
  993. package/dist/esm/core/signingEngine/walletCustody/ceremonyDriver.js +0 -171
  994. package/dist/esm/core/signingEngine/walletCustody/ceremonyStepRunner.js +0 -20
  995. package/dist/esm/core/signingEngine/walletCustody/ed25519ActiveClient.js +0 -100
  996. package/dist/esm/core/signingEngine/walletCustody/ed25519Projection.js +0 -32
  997. package/dist/esm/core/signingEngine/walletCustody/ed25519SeedMaterial.js +0 -92
  998. package/dist/esm/core/signingEngine/walletCustody/emailOtpLink.js +0 -132
  999. package/dist/esm/core/signingEngine/walletCustody/joinCustodyWire.js +0 -64
  1000. package/dist/esm/core/signingEngine/walletCustody/openCustodyCache.js +0 -126
  1001. package/dist/esm/core/signingEngine/walletCustody/passkeyLink.js +0 -180
  1002. package/dist/esm/core/signingEngine/walletCustody/recoveryReplacementEnvelope.js +0 -60
  1003. package/dist/esm/core/signingEngine/walletCustody/registrationCeremony.js +0 -460
  1004. package/dist/esm/core/signingEngine/walletCustody/unlockedEd25519ExportRootCapability.js +0 -258
  1005. package/dist/esm/core/signingEngine/walletCustody/walletRecoveryCredential.js +0 -23
  1006. package/dist/esm/core/signingEngine/walletCustody/walletRecoveryEcdsa.js +0 -75
  1007. package/dist/esm/core/signingEngine/walletCustody/walletRecoveryEd25519.js +0 -129
  1008. package/dist/esm/core/signingEngine/walletCustody/walletRecoveryManifest.js +0 -178
  1009. package/dist/esm/core/signingEngine/walletCustody/walletRecoveryRotation.js +0 -102
  1010. package/dist/esm/core/signingEngine/webauthnAuth/credentials/collectAuthenticationCredentialForChallengeB64u.js +0 -154
  1011. package/dist/esm/core/signingEngine/webauthnAuth/device/signerSlot.js +0 -25
  1012. package/dist/esm/core/signingEngine/webauthnAuth/walletOriginWebAuthn.js +0 -109
  1013. package/dist/esm/core/signingEngine/workerManager/SignerWorkerManager.js +0 -68
  1014. package/dist/esm/core/signingEngine/workerManager/deviceLinkingPorts.js +0 -342
  1015. package/dist/esm/core/signingEngine/workerManager/deviceLinkingSourceContribution.js +0 -158
  1016. package/dist/esm/core/signingEngine/workerManager/ecdsaClientWorkerChannels.js +0 -13
  1017. package/dist/esm/core/signingEngine/workerManager/workerTransport.js +0 -734
  1018. package/dist/esm/core/types/confirmationConfig.js +0 -39
  1019. package/dist/esm/core/types/secure-confirm-worker.js +0 -22
  1020. package/dist/esm/core/walletRuntimePaths/emailOtpWorker.js +0 -12
  1021. package/dist/esm/core/walletRuntimePaths/multichainWorkers.js +0 -25
  1022. package/dist/esm/core/walletRuntimePaths/walletCustodyCeremonyWorker.js +0 -18
  1023. package/dist/esm/core/walletRuntimePaths/workers.js +0 -93
  1024. package/dist/esm/react/context/useEagerPrewarm.js +0 -38
  1025. package/dist/esm/sdk/EvmClient-DoxytQaJ.js +0 -1
  1026. package/dist/esm/sdk/NearClient-vJ65Wjrq.js +0 -1
  1027. package/dist/esm/sdk/NonceCoordinator-BBeadCSq.js +0 -1
  1028. package/dist/esm/sdk/accountLifecycle-EyfYPnuT.js +0 -1
  1029. package/dist/esm/sdk/actions-DZLxCcrU.js +0 -1
  1030. package/dist/esm/sdk/adapters-DtAyuoiA.js +0 -2
  1031. package/dist/esm/sdk/base-Xtd32asf.js +0 -1
  1032. package/dist/esm/sdk/bytes-t5S5mkat.js +0 -1
  1033. package/dist/esm/sdk/canonicalPrimitives-MPGET2cl.js +0 -1
  1034. package/dist/esm/sdk/canonicalSignerErrorCode-C0hh_SVi.js +0 -1
  1035. package/dist/esm/sdk/chains-yAls2d9X.js +0 -1
  1036. package/dist/esm/sdk/challengeDelivery-cAsaUC6U.js +0 -1
  1037. package/dist/esm/sdk/configHelpers-CseiVoZD.js +0 -1
  1038. package/dist/esm/sdk/csp-stylesheet-B1fAhrGB.js +0 -2
  1039. package/dist/esm/sdk/defaultConfigs-CWpApkMq.js +0 -1
  1040. package/dist/esm/sdk/display-jK7_hYho.js +0 -1
  1041. package/dist/esm/sdk/domainIds-GDzjOs6i.js +0 -1
  1042. package/dist/esm/sdk/ecdsaCapabilityManifest-CHFu-QrV.js +0 -1
  1043. package/dist/esm/sdk/ecdsaPresignLifecycle-CQnCxSlq.js +0 -1
  1044. package/dist/esm/sdk/ecdsaPresignPoolIdentity-Ci-ovDlv.js +0 -1
  1045. package/dist/esm/sdk/enrichDisplayModelWithAbi-CR-4ebuU.js +0 -1
  1046. package/dist/esm/sdk/evmFamilyEcdsaIdentity-Br3iFdQx.js +0 -1
  1047. package/dist/esm/sdk/exactSessionState-CjD8gekO.js +0 -210
  1048. package/dist/esm/sdk/exactSigningLaneIdentity-olheZx_n.js +0 -1
  1049. package/dist/esm/sdk/export-viewer-host-jo7h_0wl.js +0 -1
  1050. package/dist/esm/sdk/helpers-D4QckQhq.js +0 -1
  1051. package/dist/esm/sdk/host-BAqOYnju.js +0 -1
  1052. package/dist/esm/sdk/intentDigest-CB6zy3lN.js +0 -1
  1053. package/dist/esm/sdk/jsxRuntime.module-CoHsKD_3.js +0 -1
  1054. package/dist/esm/sdk/keyMaterialBrands-uVZHfAh3.js +0 -1
  1055. package/dist/esm/sdk/localOnly-DBQRG6Qh.js +0 -1
  1056. package/dist/esm/sdk/messages-Cv2j4SKI.js +0 -1
  1057. package/dist/esm/sdk/mountExportPrivateKeySurface-G7Z_9JMQ.js +0 -1
  1058. package/dist/esm/sdk/nearEd25519YaoMaterialActivation-DQIw8ho3.js +0 -1
  1059. package/dist/esm/sdk/nearEd25519YaoSigningPreparation-Bp_CvWRz.js +0 -1
  1060. package/dist/esm/sdk/nearRpcResults--cBcfmp4.js +0 -1
  1061. package/dist/esm/sdk/normalization-BGPR6osg.js +0 -1
  1062. package/dist/esm/sdk/operationFingerprint-5-wH2Ht8.js +0 -1
  1063. package/dist/esm/sdk/passkey-custody-LP4UTFbn.js +0 -1
  1064. package/dist/esm/sdk/pendingWalletRecoveryCodeBackup-BNk4ebsY.js +0 -1
  1065. package/dist/esm/sdk/recovery-entrypoint-DkT8sFO5.js +0 -1
  1066. package/dist/esm/sdk/registration-Btozh7uh.js +0 -1
  1067. package/dist/esm/sdk/registration-CSAG_h4Y.js +0 -1
  1068. package/dist/esm/sdk/registrationIds-BIel5S0i.js +0 -1
  1069. package/dist/esm/sdk/registrationIntent-DV1GYZ3K.js +0 -1
  1070. package/dist/esm/sdk/registrationPreparationPreload-vOCqNuG4.js +0 -1
  1071. package/dist/esm/sdk/registrationSignerPlan-FzD3TwxB.js +0 -1
  1072. package/dist/esm/sdk/relayerHttp-DaPeS929.js +0 -1
  1073. package/dist/esm/sdk/routePlan-B_KJaPtm.js +0 -1
  1074. package/dist/esm/sdk/router-Dd3fFHk3.js +0 -1
  1075. package/dist/esm/sdk/routerAbNormalSigning-D_fHjq5l.js +0 -1
  1076. package/dist/esm/sdk/runtime-auth-B2M91rSx.js +0 -1
  1077. package/dist/esm/sdk/runtime-device-link-ojjPSRaG.js +0 -1
  1078. package/dist/esm/sdk/runtime-ecdsa-tempo-CE4JLgmn.js +0 -1
  1079. package/dist/esm/sdk/runtime-email-otp-DDwtKVAe.js +0 -1
  1080. package/dist/esm/sdk/runtime-export-JXYk8sQ-.js +0 -1
  1081. package/dist/esm/sdk/runtime-near-BB8AG6dV.js +0 -1
  1082. package/dist/esm/sdk/runtime-preferences-DKFZYccW.js +0 -1
  1083. package/dist/esm/sdk/runtime-recovery-C_XjsDBg.js +0 -1
  1084. package/dist/esm/sdk/runtime-recovery-codes-CWp839mH.js +0 -1
  1085. package/dist/esm/sdk/runtimeContext-BpObgzbj.js +0 -6
  1086. package/dist/esm/sdk/runtimeLoader-DjgBf_yF.js +0 -1
  1087. package/dist/esm/sdk/sdkSentEvents-_RGAEeld.js +0 -1
  1088. package/dist/esm/sdk/secp256k1-B_6W9QDJ.js +0 -1
  1089. package/dist/esm/sdk/sessionPolicy-CNVK7nJ6.js +0 -1
  1090. package/dist/esm/sdk/shared-j_KsFbCT.js +0 -1
  1091. package/dist/esm/sdk/signEvmFamily-CcLVBm0f.js +0 -1
  1092. package/dist/esm/sdk/signNear-mWbTE2Dl.js +0 -1
  1093. package/dist/esm/sdk/signerDomain-BhUTzDmF.js +0 -1
  1094. package/dist/esm/sdk/signerLoader-By0IY24G.js +0 -1
  1095. package/dist/esm/sdk/signingFlow-LUWrZi2d.js +0 -2
  1096. package/dist/esm/sdk/trace-M34pNGuF.js +0 -1
  1097. package/dist/esm/sdk/transaction-activity-BbDod7ji.js +0 -1
  1098. package/dist/esm/sdk/transactionReview-CBE5oH4c.js +0 -1
  1099. package/dist/esm/sdk/transactionReviewAdmission-0ZgWs6q3.js +0 -1
  1100. package/dist/esm/sdk/transactionState-9d7f3xVj.js +0 -1
  1101. package/dist/esm/sdk/validation-dC1-_uyG.js +0 -1
  1102. package/dist/esm/sdk/wallet-recovery-CcDZ1hMH.js +0 -1
  1103. package/dist/esm/sdk/walletAuthority-CoWSeqvQ.js +0 -1
  1104. package/dist/esm/sdk/walletCustodyEcdsaContinuity-B7xi7nwh.js +0 -1
  1105. package/dist/esm/sdk/walletRecoveryCommit-ljxVeo-d.js +0 -1
  1106. package/dist/esm/sdk/walletRecoveryRotate-HztDcDaY.js +0 -1
  1107. package/dist/esm/sdk/warmSessionHydration-BPGM0YRU.js +0 -1
  1108. package/dist/esm/shared-ts/src/authorization/walletCustodyOperation.js +0 -16
  1109. package/dist/esm/shared-ts/src/device-linking/contracts.js +0 -8
  1110. package/dist/esm/shared-ts/src/device-linking/ed25519ExportRoot.js +0 -167
  1111. package/dist/esm/shared-ts/src/passkey-custody/ceremonyCommitPayload.js +0 -43
  1112. package/dist/esm/shared-ts/src/signing-lanes/participants.js +0 -256
  1113. package/dist/esm/shared-ts/src/signing-lanes/recordParsers.js +0 -479
  1114. package/dist/esm/shared-ts/src/threshold/secp256k1.js +0 -6
  1115. package/dist/esm/shared-ts/src/utils/addAuthMethodRegistration.js +0 -103
  1116. package/dist/esm/shared-ts/src/utils/ecdsaKeyFactsInventory.js +0 -43
  1117. package/dist/esm/shared-ts/src/utils/exactKeys.js +0 -17
  1118. package/dist/esm/shared-ts/src/utils/routerAbTraceContext.js +0 -36
  1119. package/dist/esm/shared-ts/src/utils/walletAddSignerActivation.js +0 -32
  1120. package/dist/public/sdk/EvmClient-DoxytQaJ.js +0 -1
  1121. package/dist/public/sdk/NearClient-vJ65Wjrq.js +0 -1
  1122. package/dist/public/sdk/NonceCoordinator-BBeadCSq.js +0 -1
  1123. package/dist/public/sdk/accountLifecycle-EyfYPnuT.js +0 -1
  1124. package/dist/public/sdk/actions-DZLxCcrU.js +0 -1
  1125. package/dist/public/sdk/adapters-DtAyuoiA.js +0 -2
  1126. package/dist/public/sdk/base-Xtd32asf.js +0 -1
  1127. package/dist/public/sdk/bytes-t5S5mkat.js +0 -1
  1128. package/dist/public/sdk/canonicalPrimitives-MPGET2cl.js +0 -1
  1129. package/dist/public/sdk/canonicalSignerErrorCode-C0hh_SVi.js +0 -1
  1130. package/dist/public/sdk/chains-yAls2d9X.js +0 -1
  1131. package/dist/public/sdk/challengeDelivery-cAsaUC6U.js +0 -1
  1132. package/dist/public/sdk/configHelpers-CseiVoZD.js +0 -1
  1133. package/dist/public/sdk/csp-stylesheet-B1fAhrGB.js +0 -2
  1134. package/dist/public/sdk/defaultConfigs-CWpApkMq.js +0 -1
  1135. package/dist/public/sdk/display-jK7_hYho.js +0 -1
  1136. package/dist/public/sdk/domainIds-GDzjOs6i.js +0 -1
  1137. package/dist/public/sdk/ecdsaCapabilityManifest-CHFu-QrV.js +0 -1
  1138. package/dist/public/sdk/ecdsaPresignLifecycle-CQnCxSlq.js +0 -1
  1139. package/dist/public/sdk/ecdsaPresignPoolIdentity-Ci-ovDlv.js +0 -1
  1140. package/dist/public/sdk/enrichDisplayModelWithAbi-CR-4ebuU.js +0 -1
  1141. package/dist/public/sdk/evmFamilyEcdsaIdentity-Br3iFdQx.js +0 -1
  1142. package/dist/public/sdk/exactSessionState-CjD8gekO.js +0 -210
  1143. package/dist/public/sdk/exactSigningLaneIdentity-olheZx_n.js +0 -1
  1144. package/dist/public/sdk/export-viewer-host-jo7h_0wl.js +0 -1
  1145. package/dist/public/sdk/helpers-D4QckQhq.js +0 -1
  1146. package/dist/public/sdk/host-BAqOYnju.js +0 -1
  1147. package/dist/public/sdk/intentDigest-CB6zy3lN.js +0 -1
  1148. package/dist/public/sdk/jsxRuntime.module-CoHsKD_3.js +0 -1
  1149. package/dist/public/sdk/keyMaterialBrands-uVZHfAh3.js +0 -1
  1150. package/dist/public/sdk/localOnly-DBQRG6Qh.js +0 -1
  1151. package/dist/public/sdk/messages-Cv2j4SKI.js +0 -1
  1152. package/dist/public/sdk/mountExportPrivateKeySurface-G7Z_9JMQ.js +0 -1
  1153. package/dist/public/sdk/nearEd25519YaoMaterialActivation-DQIw8ho3.js +0 -1
  1154. package/dist/public/sdk/nearEd25519YaoSigningPreparation-Bp_CvWRz.js +0 -1
  1155. package/dist/public/sdk/nearRpcResults--cBcfmp4.js +0 -1
  1156. package/dist/public/sdk/normalization-BGPR6osg.js +0 -1
  1157. package/dist/public/sdk/operationFingerprint-5-wH2Ht8.js +0 -1
  1158. package/dist/public/sdk/passkey-custody-LP4UTFbn.js +0 -1
  1159. package/dist/public/sdk/pendingWalletRecoveryCodeBackup-BNk4ebsY.js +0 -1
  1160. package/dist/public/sdk/recovery-entrypoint-DkT8sFO5.js +0 -1
  1161. package/dist/public/sdk/registration-Btozh7uh.js +0 -1
  1162. package/dist/public/sdk/registration-CSAG_h4Y.js +0 -1
  1163. package/dist/public/sdk/registrationIds-BIel5S0i.js +0 -1
  1164. package/dist/public/sdk/registrationIntent-DV1GYZ3K.js +0 -1
  1165. package/dist/public/sdk/registrationPreparationPreload-vOCqNuG4.js +0 -1
  1166. package/dist/public/sdk/registrationSignerPlan-FzD3TwxB.js +0 -1
  1167. package/dist/public/sdk/relayerHttp-DaPeS929.js +0 -1
  1168. package/dist/public/sdk/routePlan-B_KJaPtm.js +0 -1
  1169. package/dist/public/sdk/router-Dd3fFHk3.js +0 -1
  1170. package/dist/public/sdk/routerAbNormalSigning-D_fHjq5l.js +0 -1
  1171. package/dist/public/sdk/runtime-auth-B2M91rSx.js +0 -1
  1172. package/dist/public/sdk/runtime-device-link-ojjPSRaG.js +0 -1
  1173. package/dist/public/sdk/runtime-ecdsa-tempo-CE4JLgmn.js +0 -1
  1174. package/dist/public/sdk/runtime-email-otp-DDwtKVAe.js +0 -1
  1175. package/dist/public/sdk/runtime-export-JXYk8sQ-.js +0 -1
  1176. package/dist/public/sdk/runtime-near-BB8AG6dV.js +0 -1
  1177. package/dist/public/sdk/runtime-preferences-DKFZYccW.js +0 -1
  1178. package/dist/public/sdk/runtime-recovery-C_XjsDBg.js +0 -1
  1179. package/dist/public/sdk/runtime-recovery-codes-CWp839mH.js +0 -1
  1180. package/dist/public/sdk/runtimeContext-BpObgzbj.js +0 -6
  1181. package/dist/public/sdk/runtimeLoader-DjgBf_yF.js +0 -1
  1182. package/dist/public/sdk/sdkSentEvents-_RGAEeld.js +0 -1
  1183. package/dist/public/sdk/secp256k1-B_6W9QDJ.js +0 -1
  1184. package/dist/public/sdk/sessionPolicy-CNVK7nJ6.js +0 -1
  1185. package/dist/public/sdk/shared-j_KsFbCT.js +0 -1
  1186. package/dist/public/sdk/signEvmFamily-CcLVBm0f.js +0 -1
  1187. package/dist/public/sdk/signNear-mWbTE2Dl.js +0 -1
  1188. package/dist/public/sdk/signerDomain-BhUTzDmF.js +0 -1
  1189. package/dist/public/sdk/signerLoader-By0IY24G.js +0 -1
  1190. package/dist/public/sdk/signingFlow-LUWrZi2d.js +0 -2
  1191. package/dist/public/sdk/trace-M34pNGuF.js +0 -1
  1192. package/dist/public/sdk/transaction-activity-BbDod7ji.js +0 -1
  1193. package/dist/public/sdk/transactionReview-CBE5oH4c.js +0 -1
  1194. package/dist/public/sdk/transactionReviewAdmission-0ZgWs6q3.js +0 -1
  1195. package/dist/public/sdk/transactionState-9d7f3xVj.js +0 -1
  1196. package/dist/public/sdk/validation-dC1-_uyG.js +0 -1
  1197. package/dist/public/sdk/wallet-recovery-CcDZ1hMH.js +0 -1
  1198. package/dist/public/sdk/walletAuthority-CoWSeqvQ.js +0 -1
  1199. package/dist/public/sdk/walletCustodyEcdsaContinuity-B7xi7nwh.js +0 -1
  1200. package/dist/public/sdk/walletRecoveryCommit-ljxVeo-d.js +0 -1
  1201. package/dist/public/sdk/walletRecoveryRotate-HztDcDaY.js +0 -1
  1202. package/dist/public/sdk/warmSessionHydration-BPGM0YRU.js +0 -1
  1203. package/dist/public/sdk/workers/evm_crypto.wasm +0 -0
  1204. package/dist/public/sdk/workers/near_signer.wasm +0 -0
  1205. package/dist/public/sdk/workers/tempo_signer.wasm +0 -0
  1206. package/dist/types/wallet/src/SeamsWeb/assembly/browserWorkerWarmupPolicy.d.ts +0 -4
  1207. package/dist/types/wallet/src/SeamsWeb/assembly/configureBrowserIndexedDB.d.ts +0 -3
  1208. package/dist/types/wallet/src/SeamsWeb/operations/auth/walletAuth.d.ts +0 -56
  1209. package/dist/types/wallet/src/SeamsWeb/operations/evm/index.d.ts +0 -9
  1210. package/dist/types/wallet/src/SeamsWeb/operations/near/index.d.ts +0 -11
  1211. package/dist/types/wallet/src/SeamsWeb/operations/recovery/accountSync.d.ts +0 -19
  1212. package/dist/types/wallet/src/SeamsWeb/publicApi/devices.typecheck.d.ts +0 -2
  1213. package/dist/types/wallet/src/SeamsWeb/publicApi/preferences.d.ts +0 -8
  1214. package/dist/types/wallet/src/SeamsWeb/publicApi/recovery.d.ts +0 -14
  1215. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/config-guards.d.ts +0 -15
  1216. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/registrationPreparationPreload.d.ts +0 -2
  1217. package/dist/types/wallet/src/core/signingEngine/flows/registration/public.d.ts +0 -68
  1218. package/dist/types/wallet/src/react/context/useEagerPrewarm.d.ts +0 -3
  1219. package/dist/workers/evm_crypto.wasm +0 -0
  1220. package/dist/workers/near_signer.wasm +0 -0
  1221. package/dist/workers/tempo_signer.wasm +0 -0
  1222. /package/dist/esm/sdk/{accountIds-C3Ihsd2c.js → accountIds-BzZs7YoX.js} +0 -0
  1223. /package/dist/esm/sdk/{base64-ojm5DKcF.js → base64-CsEj-_bC.js} +0 -0
  1224. /package/dist/esm/sdk/{browser-CsOGMbMy.js → browser-D4wUl_77.js} +0 -0
  1225. /package/dist/esm/sdk/{errors-DfbnsXjO.js → errors-BZO3LF6G.js} +0 -0
  1226. /package/dist/esm/sdk/{events-BJyVcnsn.js → events-DsQJQ0Cl.js} +0 -0
  1227. /package/dist/esm/sdk/{executeWorkerOperation-CrFf3FkL.js → executeWorkerOperation-BInr8RYN.js} +0 -0
  1228. /package/dist/esm/sdk/{jsonRpc-C85RYR0A.js → jsonRpc-DrCYQIM9.js} +0 -0
  1229. /package/dist/esm/sdk/{keccak-zexutGfG.js → keccak-B02Fekdh.js} +0 -0
  1230. /package/dist/esm/sdk/{profileAccountProjection-DHCaMtOu.js → profileAccountProjection-DmmfMood.js} +0 -0
  1231. /package/dist/esm/sdk/{signerSlot-BQ1g5JNV.js → signerSlot-Dto7dObP.js} +0 -0
  1232. /package/dist/esm/sdk/{surface-measurement-reporter-OICExWKE.js → surface-measurement-reporter-IlPOI3QK.js} +0 -0
  1233. /package/dist/public/sdk/{accountIds-C3Ihsd2c.js → accountIds-BzZs7YoX.js} +0 -0
  1234. /package/dist/public/sdk/{base64-ojm5DKcF.js → base64-CsEj-_bC.js} +0 -0
  1235. /package/dist/public/sdk/{browser-CsOGMbMy.js → browser-D4wUl_77.js} +0 -0
  1236. /package/dist/public/sdk/{errors-DfbnsXjO.js → errors-BZO3LF6G.js} +0 -0
  1237. /package/dist/public/sdk/{events-BJyVcnsn.js → events-DsQJQ0Cl.js} +0 -0
  1238. /package/dist/public/sdk/{executeWorkerOperation-CrFf3FkL.js → executeWorkerOperation-BInr8RYN.js} +0 -0
  1239. /package/dist/public/sdk/{jsonRpc-C85RYR0A.js → jsonRpc-DrCYQIM9.js} +0 -0
  1240. /package/dist/public/sdk/{keccak-zexutGfG.js → keccak-B02Fekdh.js} +0 -0
  1241. /package/dist/public/sdk/{profileAccountProjection-DHCaMtOu.js → profileAccountProjection-DmmfMood.js} +0 -0
  1242. /package/dist/public/sdk/{signerSlot-BQ1g5JNV.js → signerSlot-Dto7dObP.js} +0 -0
  1243. /package/dist/public/sdk/{surface-measurement-reporter-OICExWKE.js → surface-measurement-reporter-IlPOI3QK.js} +0 -0
@@ -1,3917 +0,0 @@
1
- import { mpcMaterialActivationRefsEqual, parseThresholdEd25519SessionId, parseWalletId } from "../../shared-ts/src/utils/domainIds.js";
2
- import { parseWalletSessionAuthorizationId, parseWalletSessionMintId } from "../../shared-ts/src/authorization/capabilityKinds.js";
3
- import { base64UrlDecode, base64UrlEncode } from "../../shared-ts/src/utils/base64.js";
4
- import { sha256HexUtf8 } from "../../shared-ts/src/utils/digests.js";
5
- import { activeWalletSessionV1RecordsEqual } from "../../shared-ts/src/device-linking/activeWalletSession.js";
6
- import { WalletSessionStatusReadScope, createRelayerExactWalletSessionStatusPort } from "../../core/rpcClients/relayer/walletSessionAuthorizationStatus.js";
7
- import { ROUTER_AB_ED25519_NORMAL_SIGNING_STATE_KIND, SIGNING_SESSION_SEAL_GROUP_ID } from "../../shared-ts/src/utils/signingSessionSeal.js";
8
- import { base58Encode } from "../../shared-ts/src/utils/base58.js";
9
- import { toAccountId } from "../../core/types/accountIds.js";
10
- import { WALLET_EMAIL_OTP_UNLOCK_OPERATION } from "../../shared-ts/src/utils/emailOtpDomain.js";
11
- import { WALLET_AUTH_METHODS } from "../../shared-ts/src/utils/signerDomain.js";
12
- import { createNearProvisioningStateChangedEvent } from "../../core/types/sdkSentEvents.js";
13
- import { subscribeToNearProvisioning } from "../../core/signingEngine/flows/registration/nearProvisioningRegistry.js";
14
- import { nearEd25519SigningKeyIdFromString } from "../../shared-ts/src/utils/registrationIds.js";
15
- import { toWalletId } from "../../core/signingEngine/interfaces/ecdsaChainTarget.js";
16
- import { buildThresholdEd25519Participants2pV1 } from "../../shared-ts/src/threshold/participants.js";
17
- import { signingRootScopeFromRuntimePolicyScope } from "../../shared-ts/src/threshold/signingRootScope.js";
18
- import { SigningSessionIds } from "../../core/signingEngine/session/operationState/types.js";
19
- import { exactEd25519ExportMaterialIdentity } from "../../core/signingEngine/session/identity/exactSigningLaneIdentity.js";
20
- import { secureRandomId } from "../../shared-ts/src/utils/secureRandomId.js";
21
- import { DEFAULT_THRESHOLD_SESSION_POLICY, DEFAULT_UNLOCK_REMAINING_USES } from "../../core/signingEngine/threshold/sessionPolicy.js";
22
- import { parseSignerSlot } from "../../shared-ts/src/utils/signerSlot.js";
23
- import { publishEd25519YaoPublicCapabilityReferenceAndLane, readEmailOtpProviderSubjectForWalletV1 } from "../../core/signingEngine/threshold/ed25519/yaoPublicCapabilityReferences.js";
24
- import { Ed25519YaoPageLifecycleOwner } from "../../core/signingEngine/threshold/ed25519/yaoPageLifecycleOwner.js";
25
- import { isWalletCustodySeedBinding } from "../../shared-ts/src/passkey-custody/custodySecretBinding.js";
26
- import "../../shared-ts/src/passkey-custody/index.js";
27
- import { establishEvmFamilyCustodyV1, establishNearEd25519CustodyV1, joinEvmFamilyCustodyV1, joinNearEd25519CustodyV1, rejoinEvmFamilyCustodyV1, rejoinNearEd25519CustodyV1 } from "../../core/signingEngine/walletCustody/registrationCeremony.js";
28
- import { requestWalletCustodyCeremonyOperation, walletCustodyCeremonyStepRunner } from "../../core/signingEngine/walletCustody/ceremonyStepRunner.js";
29
- import { routerAbMpcMaterialActivationRefFromWire } from "../../shared-ts/src/utils/routerAbNormalSigningIdentity.js";
30
- import { ROUTER_AB_ED25519_YAO_EMAIL_OTP_RECOVERY_BOOTSTRAP_KIND_V1, ROUTER_AB_ED25519_YAO_REGISTRATION_EXECUTE_PATH_V1 } from "../../shared-ts/src/utils/routerAbEd25519Yao.js";
31
- import { RouterAbEd25519YaoHttpActivationTransportV1 } from "../../core/signingEngine/threshold/ed25519/yaoClient.js";
32
- import { walletCustodyEd25519ActiveClientMetadataV1, walletRecoveryEd25519ActiveClientMetadataV1 } from "../../core/signingEngine/walletCustody/ceremonyActiveClientMetadata.js";
33
- import { activateWalletRecoveryEd25519V1, admitWalletRecoveryEd25519V1, buildWalletSessionEd25519RecoveryAdmissionRequestV1, executeWalletRecoveryEd25519RoundV1 } from "../../core/signingEngine/walletCustody/walletRecoveryEd25519.js";
34
- import { parseSigningSessionSealKeyVersion } from "../../shared-ts/src/threshold/keyMaterialBrands.js";
35
- import { isEmailOtpWalletAuthAuthority, parseWalletAuthAuthorityRef, walletAuthAuthorityRef } from "../../shared-ts/src/utils/walletAuthAuthority.js";
36
- import { clearLinkedDeviceEcdsaHolderMaterialsWasm, destroyLinkedDeviceEcdsaHolderMaterialsWasm, openEcdsaRoleLocalSigningMaterialWasm } from "../../core/signingEngine/threshold/crypto/ecdsaDerivationClientWasm.js";
37
- import { recoverWalletCustodyManifestV1 } from "../../core/signingEngine/walletCustody/walletRecoveryManifest.js";
38
- import { deleteWalletCustodyEd25519MaterialV1, loadWalletCustodyEd25519MaterialV1, persistWalletCustodyEd25519MaterialV1 } from "../../core/signingEngine/walletCustody/ed25519SeedMaterial.js";
39
- import { IndexedDbEcdsaCapabilityManifestStore } from "../../core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestStore.js";
40
- import "../../shared-ts/src/device-linking/index.js";
41
- import { NEAR_ED25519_YAO_KEY_VERSION_V1 } from "../../shared-ts/src/utils/registrationSignerPlan.js";
42
- import { WalletSessionAuthorizationUpgradeRequiredError, walletSessionAuthorizations } from "../../core/indexedDB/seamsWalletDB/walletSessionAuthorizationStore.js";
43
- import { importWalletCustodyEcdsaContinuity } from "../../core/indexedDB/seamsWalletDB/walletCustodyEcdsaContinuity.js";
44
- import { clearLinkedEcdsaHolderRuntimesV1, listLinkedEcdsaHolderRuntimesV1, removeLinkedEcdsaHolderRuntimeV1, resolveLinkedEcdsaHolderRuntimeV1 } from "../../core/signingEngine/session/material/linkedEcdsaHolderRuntime.js";
45
- import { SigningAuthPlanKind } from "../../core/signingEngine/stepUpConfirmation/types.js";
46
- import { fullWalletLoginRequired, invalidWalletSigningMaterial, isWalletSigningStateFailure, walletSigningMaterialBlockError } from "../../core/signingEngine/session/material/walletSigningStateFailure.js";
47
- import { redactedPasskeyRegistrationCredential, serializeRegistrationCredentialWithPRF } from "../../core/signingEngine/webauthnAuth/credentials/helpers.js";
48
- import { buildBlockedMpcCapabilityHydrationPlan, buildRehydrateMaterialActivationHydrationPlan, buildUseLiveRuntimeHydrationPlan } from "../../core/signingEngine/session/material/mpcCapabilityHydration.js";
49
- import { nearEd25519YaoMaterialActivationFromMetadata, nearEd25519YaoRuntimeRef, resolveNearEd25519YaoCapabilityHydrationV1 } from "../../core/signingEngine/session/material/nearEd25519YaoMaterialActivation.js";
50
- import { buildThresholdEd25519WebAuthnPrfSecretSource } from "../../core/signingEngine/threshold/ed25519/walletSession.js";
51
- import { clearThresholdCommitQueue, resolveThresholdCommitQueueKey } from "../../core/signingEngine/threshold/commitQueueShared.js";
52
- import { withThresholdEd25519CommitQueue } from "../../core/signingEngine/threshold/ed25519/commitQueue.js";
53
- import { buildAuthorizationRequiredNearEd25519YaoSigningPreparation, buildAuthorizedNearEd25519YaoSigningPreparation, classifyNearEd25519WalletSessionAuthorization, nearEd25519SessionMatchesMaterialActivation } from "../../core/signingEngine/session/material/nearEd25519YaoSigningPreparation.js";
54
- import { ed25519DurableMaterialLocator } from "../../core/signingEngine/session/sealedRecovery/materialActivationKey.js";
55
- import { isConcreteAvailableSigningLane } from "../../core/signingEngine/session/availability/availableSigningLanes.js";
56
- import { signNear } from "../../core/signingEngine/flows/signNear/signNear.js";
57
- import { buildRouterAbEd25519SigningWalletSession } from "../../core/signingEngine/session/routerAbSigningWalletSession.js";
58
- import { listExactSealedSessionsForWallet, readExactEd25519SealedSession } from "../../core/signingEngine/session/persistence/sealedSessionStore.js";
59
- import { ed25519SealedRuntimeAuthorityRef, parseExactEd25519SealedSessionRuntime, resolveExactEd25519SealedSessionRuntimeForLane, resolveExactEd25519SealedSessionRuntimeForWalletSubject } from "../../core/signingEngine/session/warmCapabilities/ed25519SealedSessionRuntime.js";
60
- import { buildEmailOtpRouterAbEd25519WalletSessionState, buildPasskeyRouterAbEd25519WalletSessionState, nearEd25519YaoOperationMaterialFacts, rebindRouterAbEd25519WalletSessionStateFromExactRuntime } from "../../core/signingEngine/session/warmCapabilities/routerAbEd25519WalletSessionState.js";
61
- import { resolvePasskeyEd25519YaoExportContextV1 } from "../../core/signingEngine/session/passkey/ed25519YaoWarmRecovery.js";
62
- import { ed25519YaoLocalMaterialIdentityFromWalletSession, hydratePasskeyEd25519YaoLocalMaterialV1, preparePasskeyEd25519YaoLocalMaterialRehydrationV1, readPasskeyEd25519YaoLocalMaterialLocatorV1 } from "../../core/signingEngine/session/passkey/ed25519YaoLocalMaterial.js";
63
- import { buildPasskeyEd25519RestoreMetadata, persistPasskeyEd25519YaoSessionForRefresh } from "../../core/signingEngine/session/passkey/ed25519YaoSealedSession.js";
64
- import { buildRestorableMpcMaterialRefForHydration } from "../../core/signingEngine/session/material/ecdsaCapabilityHydration.js";
65
- import { readOwnerWalletExecutionLaneProjectionV1 } from "../../core/rpcClients/relayer/ownerWalletExecutionLanePreflight.js";
66
- import { hydrateWalletExecutionLane } from "../../core/signingEngine/session/lanes/walletExecutionLaneHydration.js";
67
- import { IndexedDBManager } from "../../core/indexedDB/index.js";
68
- import { storeNearThresholdKeyMaterial } from "../../core/accountData/near/keyMaterial.js";
69
- import { persistVerifiedEmailOtpAuthorityAfterUnlock, walletAuthAuthorityRefForVerifiedEmailOtpUnlock } from "../operations/authMethods/emailOtp/walletActivation.js";
70
- import { isRetryableSealedRefreshCapabilityFetchError } from "../../core/signingEngine/session/warmCapabilities/sealedRefreshParity.js";
71
- import { buildExactEcdsaPasskeyOwnerLaneScope, buildExactLinkedEmailOtpOwnerLaneScope, buildExactPasskeyOwnerLaneScope, resolveExactOwnerLaneScope, resolveExactWalletAuthAuthority } from "../../core/signingEngine/session/identity/ownerLaneScope.js";
72
- import { buildFreshEmailOtpRoutePlan } from "../../core/signingEngine/session/emailOtp/routePlan.js";
73
- import { withThresholdEcdsaSigningQueue } from "../../core/signingEngine/threshold/ecdsa/signingQueue.js";
74
- import { reconcileTempoNonceLane, reportTempoBroadcastAccepted, reportTempoBroadcastRejected, reportTempoDroppedOrReplaced, reportTempoFinalized, signEvmFamily } from "../../core/signingEngine/flows/signEvmFamily/signEvmFamily.js";
75
- import { UserConfirmationType } from "../../core/signingEngine/stepUpConfirmation/userConfirmationType.js";
76
- import { exportKeypairWithUI, resolveExactKeyExportLane } from "../../core/signingEngine/flows/recovery/public.js";
77
- import { activateAuthenticatedWalletState, finalizeWalletEcdsaRegistration, finalizeWalletEd25519SignerRegistration, getAllUsers, getAuthenticationCredentialsSerialized, getLastUser, getUserBySignerSlot, getWalletNearProvisioningState, hasPasskeyCredential, nearAuthenticatorsByAccount, requestRegistrationCredentialConfirmation, rollbackUserRegistration, rollbackWalletEd25519SignerRegistration, setLastUser, setWalletNearProvisioningState, storeAuthenticator, storeUserData, storeWalletEcdsaRecoverySignerRecords, storeWalletEcdsaSignerRecords, storeWalletEd25519RecoveryRegistrationData, storeWalletEd25519RegistrationData, storeWalletEmailOtpEcdsaRegistrationData, storeWalletEmailOtpEcdsaSignerRecords, storeWalletEmailOtpEd25519RegistrationData, storeWalletEmailOtpMixedRegistrationData, storeWalletMixedRegistrationData } from "../../core/signingEngine/flows/registration/public.js";
78
- import { exactWalletSessionWithOperationCredentialOrThrow } from "../../core/signingEngine/session/identity/exactWalletSessionReader.js";
79
- import { enrollEmailOtpInternal, loginWithEmailOtpEcdsaCapabilityInternal, prepareEmailOtpRegistrationEnrollmentMaterialInternal, refreshEmailOtpSigningSession, requestEmailOtpSigningSessionChallenge } from "../../core/signingEngine/flows/signEvmFamily/emailOtpPublic.js";
80
- import { __isWalletIframeHostMode } from "../../core/browser/walletIframe/host-mode.js";
81
- import { destroyUnlockedWalletEd25519ExportRootCapabilitiesV1, establishUnlockedWalletEd25519ExportRootCapabilityV1, setUnlockedCustodyEnvelopeUpgradeSinkV1 } from "../../core/signingEngine/walletCustody/unlockedEd25519ExportRootCapability.js";
82
- import { createManagerAssembly } from "../../core/signingEngine/assembly/createManagers.js";
83
- import { verifySealedRefreshStartupParity } from "../../core/rpcClients/relayer/sealedRefreshCapabilities.js";
84
- import { unlockEmailOtpEd25519YaoCapability } from "../../core/signingEngine/session/emailOtp/walletUnlock.js";
85
- import { WalletCustodyEd25519ActiveClientV1, disposeWalletCustodyEd25519ActiveClientV1 } from "../../core/signingEngine/walletCustody/ed25519ActiveClient.js";
86
- import { activateWalletCustodyEd25519CapabilityV1 } from "../../core/signingEngine/walletCustody/activateEd25519Capability.js";
87
- import { resolveWalletCustodyEd25519ProjectionV1 } from "../../core/signingEngine/walletCustody/ed25519Projection.js";
88
- import { exactEd25519LaneIdentityFromAvailableLane, nearEd25519CapabilityRehydrationKey, nearEd25519CapabilityRehydrationMaterialIdentity, nearEd25519LaneMatchesCapabilityRehydrationSubject } from "../../core/signingEngine/session/warmCapabilities/nearEd25519CapabilityRehydration.js";
89
- import { generateSessionId } from "../../core/signingEngine/session/passkey/prfCache.js";
90
- import { resolveEmailOtpEd25519OperationRecoveryBootstrapV1, resolveWalletCustodyEd25519ExportContextV1 } from "../../core/signingEngine/session/emailOtp/ed25519ExportContext.js";
91
- import { requestClearEmailOtpWarmSessionMaterial, requestRehydrateEmailOtpEd25519YaoOperationMaterial } from "../../core/signingEngine/session/emailOtp/workerRequests.js";
92
- import { resolveWalletAuthorityOperation } from "../../core/signingEngine/session/authority/authorityOperationResolver.js";
93
- import { discoverPersistedSessionsForWallet, readOwnerScopedSigningLanes, readPersistedAvailableSigningLanes } from "../../core/signingEngine/session/public.js";
94
- import { createWarmSigningPorts } from "../../core/signingEngine/assembly/ports/warmSigning.js";
95
- import { createSessionPublicDeps } from "../../core/signingEngine/assembly/ports/session.js";
96
- import { clearVolatileWarmSigningMaterial, getWarmThresholdEd25519SessionStatus, hydrateSigningSession, scheduleRouterAbEcdsaDerivationLoginPresignaturePrefill } from "../../core/signingEngine/session/warmCapabilities/public.js";
97
- import { bootstrapEcdsaSession, connectEd25519Session } from "../../core/signingEngine/session/passkey/public.js";
98
- import { createBrowserActiveEcdsaWalletSessionAuthorizationResolver, createBrowserCanonicalWalletSessionStatusReader, createBrowserSigningSurfaceEnginePorts, listBrowserActiveEcdsaCapabilityManifestsForWallet, listBrowserEcdsaPreprocessingCapabilitiesForWallet, listBrowserEcdsaSigningCapabilitiesForWallet, readBrowserExactNearEd25519WalletSessionAuthorization, resolveBrowserActiveEcdsaCapabilityRuntime, resolveBrowserActiveEcdsaCapabilityRuntimeForChain, resolveBrowserActiveNearEd25519WalletSessionAuthorization, resolveBrowserNearEd25519PasskeyAuthorityForMaterial } from "../assembly/browserSigningSurfaceAssembly.js";
99
- import { createBrowserRecoveryPublicDeps } from "../assembly/createBrowserRecoveryPublicDeps.js";
100
- import { createBrowserStepUpRuntime } from "../assembly/createBrowserStepUpRuntime.js";
101
- import { createBrowserWarmSessionPublicDeps } from "../assembly/createBrowserWarmSessionPublicDeps.js";
102
- import { configurePasskeyCustodySessionCachePersistence, readPasskeyCustodySessionEnvelope } from "../../core/signingEngine/session/passkey/passkeyCustodySessionCache.js";
103
- import { upgradeWalletCustodyEnvelopeOwnership } from "../../core/rpcClients/relayer/passkeyCustodyEnvelope.js";
104
- import { finalizeWalletRegistrationEcdsaSessions } from "../../core/signingEngine/flows/registration/services/ecdsaRegistrationSessions.js";
105
- import { walletIframeRequestIdFromBoundary } from "../../core/types/walletIframeIdentity.js";
106
- import { walletRecoveryReplacementCredentialFromRegistrationV1 } from "../../core/signingEngine/walletCustody/walletRecoveryCredential.js";
107
- //#region src/SeamsWeb/signingSurface/BrowserSigningSurface.ts
108
- async function resolveActiveEd25519WalletSessionAuthorization(walletId, relayerUrl) {
109
- return await resolveBrowserActiveNearEd25519WalletSessionAuthorization(walletId, relayerUrl);
110
- }
111
- function requireEmailOtpEcdsaRehydrationManifest(manifests, authorityDigest) {
112
- let selected = null;
113
- for (const manifest of manifests) {
114
- if (manifest.signer.authority.authorityDigest !== authorityDigest) continue;
115
- if (selected && selected.durableMaterial.roleLocalBinding.keyHandle !== manifest.durableMaterial.roleLocalBinding.keyHandle) throw new Error("[SigningEngine][near] Email OTP ECDSA session identity is ambiguous");
116
- selected = manifest;
117
- }
118
- if (!selected) throw new Error("[SigningEngine][near] Email OTP ECDSA capability is unavailable");
119
- return selected;
120
- }
121
- function buildEmailOtpEcdsaRehydrationPolicy(args) {
122
- const walletSessionMintId = parseWalletSessionMintId(generateSessionId("wallet-session-mint"));
123
- if (!walletSessionMintId.ok) throw new Error("[SigningEngine][near] failed to generate an ECDSA Wallet Session mint id");
124
- return {
125
- kind: "router_ab_ecdsa_post_registration_session_activation_policy_v1",
126
- key_handle: String(args.manifest.durableMaterial.roleLocalBinding.keyHandle),
127
- session_policy: {
128
- threshold_session_id: SigningSessionIds.thresholdEcdsaSession(generateSessionId("threshold-ecdsa-login")),
129
- wallet_session_mint_id: walletSessionMintId.value,
130
- ttl_ms: DEFAULT_THRESHOLD_SESSION_POLICY.ttlMs,
131
- remaining_uses: args.remainingUses,
132
- runtime_policy_scope: args.manifest.durableMaterial.runtimePolicyScope
133
- }
134
- };
135
- }
136
- function activeWalletSessionMatchesCredentialFreeEcdsaActivation(args) {
137
- const materialActivation = routerAbMpcMaterialActivationRefFromWire(args.activation.public_capability.material_activation);
138
- let matchCount = 0;
139
- for (const subject of args.walletSession.capabilitySubjects) if (subject.kind === "sign" && subject.keyFamily === "ecdsa_secp256k1" && mpcMaterialActivationRefsEqual(subject.materialActivation, materialActivation)) matchCount += 1;
140
- return matchCount === 1;
141
- }
142
- async function persistRehydratedEmailOtpEcdsaWalletSession(args) {
143
- const session = args.response.session;
144
- const walletSession = args.authorization.record;
145
- const operationCredential = args.authorization.operationCredential;
146
- if (String(walletSession.walletId) !== String(args.walletId) || String(args.response.public_capability.client_id) !== String(walletSession.walletId) || walletSession.authorizationId !== session.authorization_id || walletSession.quotaId !== session.quota_id || walletSession.expiresAtMs !== session.expires_at_ms || operationCredential.walletSessionId !== session.wallet_session_id || !activeWalletSessionMatchesCredentialFreeEcdsaActivation({
147
- walletSession,
148
- activation: args.response
149
- })) throw new Error("[SigningEngine][near] refreshed ECDSA exact Wallet Session is inconsistent");
150
- await walletSessionAuthorizations.writeExactWithOperationCredential({
151
- record: walletSession,
152
- operationCredential
153
- });
154
- }
155
- async function readBrowserEmailOtpProviderSubject(walletId) {
156
- return await readEmailOtpProviderSubjectForWalletV1(IndexedDBManager, walletId);
157
- }
158
- async function noBrowserWalletPasskeyAuthenticator() {
159
- return null;
160
- }
161
- const browserSigningSurfaceExactWalletAuthMethodStore = {
162
- getWalletAuthMethodV2: (walletAuthMethodId) => IndexedDBManager.getWalletAuthMethodV2(walletAuthMethodId),
163
- listWalletAuthMethodsForWallet: (walletId) => IndexedDBManager.listWalletAuthMethodsForWallet(walletId),
164
- getWalletPasskeyAuthenticator: noBrowserWalletPasskeyAuthenticator,
165
- readEmailOtpProviderSubjectForWallet: readBrowserEmailOtpProviderSubject
166
- };
167
- async function resolveBrowserExactPasskeyWalletAuthAuthorityRef(args) {
168
- const matches = (await IndexedDBManager.listWalletAuthMethodsV2ForWallet(String(args.walletId))).filter((record) => record.kind === WALLET_AUTH_METHODS.passkey && record.status === "active" && record.walletId === args.walletId && String(record.rpId) === args.rpId && String(record.credentialIdB64u) === args.credentialIdB64u);
169
- const [record] = matches;
170
- if (matches.length !== 1 || !record || record.kind !== WALLET_AUTH_METHODS.passkey) return null;
171
- return await walletAuthAuthorityRef({ authority: {
172
- walletId: record.walletId,
173
- factor: {
174
- kind: WALLET_AUTH_METHODS.passkey,
175
- credentialIdB64u: record.credentialIdB64u
176
- },
177
- verifier: {
178
- kind: "webauthn",
179
- rpId: record.rpId
180
- },
181
- bindingId: record.walletAuthMethodId
182
- } });
183
- }
184
- function exactEmailOtpAuthorityRef(args) {
185
- const authorityRef = parseWalletAuthAuthorityRef({
186
- kind: "wallet_auth_authority_ref",
187
- walletId: args.walletId,
188
- walletAuthMethodId: args.walletAuthMethodId,
189
- authorityDigest: args.authorityDigestB64u
190
- });
191
- if (!authorityRef) throw new Error("[SigningEngine][near] exact Email OTP authority digest is invalid");
192
- return authorityRef;
193
- }
194
- async function resolveExactEmailOtpFactorAuthority(args) {
195
- const factorAuthority = await resolveExactWalletAuthAuthority({
196
- authMethod: args.authMethod,
197
- stores: browserSigningSurfaceExactWalletAuthMethodStore
198
- });
199
- if (!isEmailOtpWalletAuthAuthority(factorAuthority) || factorAuthority.walletId !== args.authMethod.walletId || factorAuthority.bindingId !== args.authMethod.walletAuthMethodId || factorAuthority.verifier.emailHashHex !== args.emailHashHex || factorAuthority.factor.providerUserId !== args.providerSubject) throw new Error("[SigningEngine][near] exact Email OTP factor authority changed");
200
- return factorAuthority;
201
- }
202
- function requireEmailOtpNearEd25519MaterialIdentity(identity) {
203
- const auth = identity.auth;
204
- switch (auth.kind) {
205
- case WALLET_AUTH_METHODS.emailOtp: return {
206
- kind: identity.kind,
207
- signer: identity.signer,
208
- auth,
209
- thresholdSessionId: identity.thresholdSessionId
210
- };
211
- case WALLET_AUTH_METHODS.passkey: throw new Error("[SigningEngine][near] Email OTP material identity is required");
212
- default: throw new Error("[SigningEngine][near] unsupported Ed25519 material authority");
213
- }
214
- }
215
- /** Selects the exact unlocked Email OTP factor for exhausted-session step-up. */
216
- async function resolveBrowserNearEd25519EmailOtpAuthorityForMaterial(args) {
217
- if (String(args.identity.signer.account.wallet.walletId) !== String(args.walletId) || String(args.identity.signer.account.nearAccountId) !== String(args.nearAccountId) || args.identity.signer.signerSlot !== args.signerSlot) return null;
218
- let selected;
219
- try {
220
- selected = await IndexedDBManager.resolveSelectedWalletAuthority(String(args.walletId));
221
- } catch {
222
- return null;
223
- }
224
- if (selected.kind !== "resolved") return null;
225
- const { selection, authMethod, authority } = selected;
226
- const ed25519Activation = authority.signerActivations.ed25519;
227
- if (selection.lockState !== "unlocked" || selection.walletId !== args.walletId || selection.walletAuthMethodId !== authMethod.walletAuthMethodId || authMethod.kind !== WALLET_AUTH_METHODS.emailOtp || authMethod.status !== "active" || authMethod.walletId !== args.walletId || authMethod.walletAuthorityId !== authority.authorityId || authority.state !== "active" || authority.walletId !== args.walletId || !ed25519Activation || ed25519Activation.signer.walletId !== args.walletId || !mpcMaterialActivationRefsEqual(ed25519Activation.materialActivation, args.materialActivation)) return null;
228
- try {
229
- const factorAuthorityRef = await walletAuthAuthorityRef({ authority: await resolveExactEmailOtpFactorAuthority({
230
- authMethod,
231
- emailHashHex: authMethod.emailHashHex,
232
- providerSubject: args.identity.auth.providerSubjectId
233
- }) });
234
- if (factorAuthorityRef.walletId !== args.walletId || factorAuthorityRef.walletAuthMethodId !== authMethod.walletAuthMethodId) return null;
235
- return factorAuthorityRef;
236
- } catch {
237
- return null;
238
- }
239
- }
240
- async function resolveExactEmailOtpEd25519ActivationAuthorization(args) {
241
- const bootstrapSession = args.bootstrap.session;
242
- const stored = args.exactAuthorization?.record ?? await walletSessionAuthorizations.readExact(bootstrapSession.walletSessionId);
243
- if (!stored || stored.kind !== "active_wallet_session_v1" || stored.walletId !== args.walletId || stored.authorizationId !== bootstrapSession.authorizationId || stored.quotaId !== bootstrapSession.quotaId || stored.expiresAtMs <= Date.now()) throw new Error("[SigningEngine][near] exact Email OTP activation session is unavailable");
244
- const [method, authority] = await Promise.all([IndexedDBManager.getWalletAuthMethodV2(String(stored.authMethodId)), IndexedDBManager.getWalletAuthority(String(stored.authorityId))]);
245
- if (!method || method.kind !== "email_otp" || method.status !== "active" || method.walletId !== args.walletId || method.walletAuthorityId !== stored.authorityId || method.emailHashHex !== args.emailHashHex || !authority || authority.state !== "active" || authority.walletId !== args.walletId || authority.authorityId !== stored.authorityId || authority.authorityDigestB64u !== stored.authorityDigestB64u || authority.revocationEpoch !== stored.authorityRevocationEpoch) throw new Error("[SigningEngine][near] exact Email OTP activation authority is unavailable");
246
- const authorityRef = exactEmailOtpAuthorityRef({
247
- walletId: args.walletId,
248
- walletAuthMethodId: method.walletAuthMethodId,
249
- authorityDigestB64u: authority.authorityDigestB64u
250
- });
251
- const factorAuthorityRef = await walletAuthAuthorityRef({ authority: await resolveExactEmailOtpFactorAuthority({
252
- authMethod: method,
253
- emailHashHex: args.emailHashHex,
254
- providerSubject: args.providerSubject
255
- }) });
256
- if (args.verifiedAuthority && (args.verifiedAuthority.walletId !== factorAuthorityRef.walletId || args.verifiedAuthority.walletAuthMethodId !== factorAuthorityRef.walletAuthMethodId)) throw new Error("[SigningEngine][near] verified Email OTP activation authority changed");
257
- const exact = args.exactAuthorization;
258
- if (exact) {
259
- if (!activeWalletSessionV1RecordsEqual(exact.record, stored) || exact.operationCredential.walletSessionId !== bootstrapSession.walletSessionId) throw new Error("[SigningEngine][near] exact Email OTP activation credential is unavailable");
260
- return {
261
- authority: authorityRef,
262
- operationCredential: exact.operationCredential
263
- };
264
- }
265
- const persisted = await walletSessionAuthorizations.readExactActiveForWallet({
266
- walletId: args.walletId,
267
- authorityId: stored.authorityId,
268
- authMethodId: stored.authMethodId
269
- });
270
- if (persisted.kind !== "found" || !activeWalletSessionV1RecordsEqual(persisted.record, stored) || persisted.operationCredential.walletSessionId !== bootstrapSession.walletSessionId) throw new Error("[SigningEngine][near] exact Email OTP activation credential is unavailable");
271
- return {
272
- authority: authorityRef,
273
- operationCredential: persisted.operationCredential
274
- };
275
- }
276
- function unavailableEmailOtpExportAuthorizationFromStatus(status) {
277
- switch (status.status) {
278
- case "missing": return { kind: "missing" };
279
- case "expired": return { kind: "expired" };
280
- case "superseded": return { kind: "superseded" };
281
- case "authority_unavailable": return { kind: "authority_unavailable" };
282
- case "method_unavailable": return { kind: "method_unavailable" };
283
- case "capability_unavailable": return { kind: "capability_unavailable" };
284
- case "invalid": return { kind: "corrupt" };
285
- default: throw new Error("[SigningEngine][ed25519-export] unsupported exact session status");
286
- }
287
- }
288
- async function readExactEmailOtpEd25519ExportAuthorization(args) {
289
- const walletId = args.subject.signer.account.wallet.walletId;
290
- let selected;
291
- try {
292
- selected = await IndexedDBManager.resolveSelectedWalletAuthority(String(walletId));
293
- } catch {
294
- return { kind: "persistence_unavailable" };
295
- }
296
- if (selected.kind !== "resolved") return selected.kind === "integrity_error" ? { kind: "corrupt" } : { kind: "missing" };
297
- const { selection, authority, authMethod } = selected;
298
- if (selection.lockState !== "unlocked" || selection.walletId !== walletId || selection.walletAuthMethodId !== authMethod.walletAuthMethodId || authority.state !== "active" || authority.walletId !== walletId || authMethod.kind !== "email_otp" || authMethod.status !== "active" || authMethod.walletId !== walletId || authMethod.walletAuthorityId !== authority.authorityId) return { kind: "corrupt" };
299
- let factorAuthority;
300
- try {
301
- factorAuthority = await resolveExactEmailOtpFactorAuthority({
302
- authMethod,
303
- emailHashHex: authMethod.emailHashHex,
304
- providerSubject: args.subject.auth.providerSubjectId
305
- });
306
- } catch {
307
- return { kind: "corrupt" };
308
- }
309
- const exact = await walletSessionAuthorizations.readExactActiveForWallet({
310
- walletId,
311
- authorityId: authority.authorityId,
312
- authMethodId: authMethod.walletAuthMethodId
313
- });
314
- switch (exact.kind) {
315
- case "missing":
316
- case "upgrade_required":
317
- case "corrupt":
318
- case "persistence_unavailable": return exact;
319
- case "found": break;
320
- default: throw new Error("[SigningEngine][ed25519-export] unsupported exact local session result");
321
- }
322
- if (exact.record.expiresAtMs <= Date.now()) return { kind: "expired" };
323
- let status;
324
- try {
325
- status = await createRelayerExactWalletSessionStatusPort({
326
- relayerUrl: args.relayerUrl,
327
- operationCredential: exact.operationCredential
328
- }).read({
329
- walletSessionId: exact.operationCredential.walletSessionId,
330
- quotaId: exact.record.quotaId
331
- });
332
- } catch {
333
- return { kind: "persistence_unavailable" };
334
- }
335
- if (status.status !== "active" && status.status !== "exhausted") return unavailableEmailOtpExportAuthorizationFromStatus(status);
336
- return {
337
- kind: "found",
338
- authorization: {
339
- selectedAuthority: authority,
340
- selectedAuthMethod: authMethod,
341
- factorAuthority,
342
- record: exact.record,
343
- operationCredential: exact.operationCredential,
344
- status
345
- }
346
- };
347
- }
348
- function fetchWithGlobalThis(input, init) {
349
- return globalThis.fetch(input, init);
350
- }
351
- function currentNearEd25519CapabilityRehydrationSubject(args) {
352
- const thresholdSessionId = args.walletSessionState.thresholdSessionId;
353
- switch (args.subject.kind) {
354
- case "exact_lane": return {
355
- kind: "exact_lane",
356
- laneIdentity: args.walletSessionState.signingLane.identity
357
- };
358
- case "export_exact_lane": return {
359
- kind: "export_exact_lane",
360
- laneIdentity: exactEd25519ExportMaterialIdentity({
361
- signer: args.walletSessionState.signingLane.identity.signer,
362
- auth: args.walletSessionState.signingLane.identity.auth,
363
- thresholdSessionId
364
- }),
365
- materialActivation: args.subject.materialActivation
366
- };
367
- case "material_identity": return {
368
- kind: "material_identity",
369
- materialIdentity: {
370
- kind: "near_ed25519_material_identity",
371
- signer: args.walletSessionState.signingLane.identity.signer,
372
- auth: args.walletSessionState.signingLane.identity.auth,
373
- thresholdSessionId
374
- }
375
- };
376
- default: return assertNeverNearEd25519CapabilityRehydrationSubject(args.subject);
377
- }
378
- }
379
- function assertNeverNearEd25519CapabilityRehydrationSubject(value) {
380
- throw new Error(`Unknown Ed25519 capability rehydration subject: ${String(value)}`);
381
- }
382
- async function ensurePasskeyEd25519WarmSessionForSigning(args) {
383
- const thresholdSessionId = args.walletSessionState.thresholdSessionId;
384
- let claim = await args.claimWarmSessionMaterial({
385
- thresholdSessionId,
386
- purpose: {
387
- curve: "ed25519",
388
- materialActivation: args.materialActivation
389
- },
390
- consume: false
391
- });
392
- if (claim.ok || claim.code !== "not_found") return claim;
393
- if (args.runtime.factor.kind !== "passkey") throw new Error("[SigningEngine][near] persisted Ed25519 credential is unavailable");
394
- const walletSessionToken = String(args.walletSessionState.walletSessionAuth.walletSessionToken || "").trim();
395
- const groupId = String(args.runtime.sealedRecord.groupId || "").trim();
396
- if (!walletSessionToken || !groupId) return {
397
- ok: false,
398
- code: "invalid_args",
399
- message: "Passkey Ed25519 sealed restore metadata is incomplete"
400
- };
401
- if (!mpcMaterialActivationRefsEqual(args.runtime.sealedRecord.ed25519Restore.materialActivation, args.materialActivation)) throw new Error("[SigningEngine][near] persisted Ed25519 material activation mismatch");
402
- const keyVersion = parseSigningSessionSealKeyVersion(args.runtime.sealedRecord.keyVersion);
403
- const rehydrated = await args.rehydrateWarmSessionMaterial({
404
- thresholdSessionId,
405
- sealedSecretB64u: args.runtime.sealedRecord.sealedSecretB64u,
406
- signingSessionSealKeyVersion: keyVersion,
407
- expiresAtMs: args.runtime.sealedRecord.expiresAtMs,
408
- remainingUses: args.runtime.sealedRecord.remainingUses,
409
- transport: {
410
- curve: "ed25519",
411
- authMethod: "passkey",
412
- walletId: String(args.runtime.walletId),
413
- relayerUrl: args.runtime.relayerUrl,
414
- signingSessionSealKeyVersion: keyVersion,
415
- groupId,
416
- walletSessionToken,
417
- ed25519Restore: buildPasskeyEd25519RestoreMetadata({
418
- rpId: args.runtime.factor.rpId,
419
- nearAccountId: args.runtime.nearAccountId,
420
- nearEd25519SigningKeyId: args.runtime.nearEd25519SigningKeyId,
421
- relayerKeyId: args.runtime.relayerKeyId,
422
- participantIds: args.runtime.participantIds,
423
- runtimePolicyScope: args.runtime.runtimePolicyScope,
424
- signerSlot: args.runtime.signerSlot,
425
- routerAbNormalSigning: args.runtime.routerAbNormalSigning,
426
- credentialIdB64u: args.runtime.factor.credentialIdB64u,
427
- materialActivation: args.materialActivation
428
- })
429
- }
430
- });
431
- if (!rehydrated.ok) return rehydrated;
432
- claim = await args.claimWarmSessionMaterial({
433
- thresholdSessionId,
434
- purpose: {
435
- curve: "ed25519",
436
- materialActivation: args.materialActivation
437
- },
438
- consume: false
439
- });
440
- return claim;
441
- }
442
- async function resolveNearEd25519PublicCapabilityMaterialActivation(args) {
443
- const signer = args.identity.signer;
444
- const matches = (await args.store.listLanes()).filter((reference) => String(reference.walletId) === String(signer.account.wallet.walletId) && String(reference.nearAccountId) === String(signer.account.nearAccountId) && String(reference.nearEd25519SigningKeyId) === String(signer.nearEd25519SigningKeyId) && reference.signerSlot === signer.signerSlot && String(reference.thresholdSessionId) === String(args.identity.thresholdSessionId) && nearEd25519AuthBindingsEqual(reference.auth, args.identity.auth));
445
- if (matches.length > 1) throw new Error("[SigningEngine][near] public Ed25519 capability lane is conflicting");
446
- return matches[0]?.materialActivation ?? null;
447
- }
448
- function emailOtpEd25519YaoLaneReferenceFromRecovery(args) {
449
- const lane = args.walletSessionState.signingLane;
450
- const signer = lane.identity.signer;
451
- if (lane.auth.kind !== "email_otp") throw new Error("[SigningEngine][near] Email OTP recovery returned another auth lane");
452
- return {
453
- walletId: signer.account.wallet.walletId,
454
- nearAccountId: signer.account.nearAccountId,
455
- thresholdSessionId: args.walletSessionState.thresholdSessionId,
456
- runtimePolicyScope: args.walletSessionState.runtimePolicyScope,
457
- materialActivation: args.materialActivation,
458
- auth: {
459
- kind: "email_otp",
460
- providerSubjectId: lane.auth.providerSubjectId
461
- },
462
- nearEd25519SigningKeyId: signer.nearEd25519SigningKeyId,
463
- signerSlot: signer.signerSlot,
464
- remainingUses: args.walletSessionState.signingWalletSession.remainingUses,
465
- expiresAtMs: args.walletSessionState.signingWalletSession.expiresAtMs
466
- };
467
- }
468
- function isLinkedEd25519SignerMaterial(material) {
469
- return material.kind === "wallet_authority_linked_signer_material_v1" && material.keyFamily === "ed25519";
470
- }
471
- function resolveSelectedEmailOtpEd25519ExportRootV1(args) {
472
- const selected = args.selected;
473
- if (selected.kind !== "resolved") {
474
- const detail = selected.kind === "integrity_error" ? `: ${selected.reason}` : "";
475
- throw new Error(`[SigningEngine][ed25519-export] selected Wallet Authority is ${selected.kind}${detail}`);
476
- }
477
- if (selected.authority.provenance.kind === "wallet_registration" || selected.authority.provenance.kind === "wallet_recovery") return null;
478
- const { selection, authMethod, authority, signerMaterials, exportRoot } = selected;
479
- const signer = args.subject.signer;
480
- const ed25519Activation = authority.signerActivations.ed25519;
481
- if (selection.lockState !== "unlocked" || authMethod.kind !== WALLET_AUTH_METHODS.emailOtp || authMethod.status !== "active" || authority.state !== "active" || String(selection.walletId) !== String(signer.account.wallet.walletId) || selection.walletAuthMethodId !== authMethod.walletAuthMethodId || authMethod.walletAuthorityId !== authority.authorityId || String(authMethod.walletId) !== String(signer.account.wallet.walletId) || !authority.permissions.includes("export_keys") || !ed25519Activation || !mpcMaterialActivationRefsEqual(ed25519Activation.materialActivation, args.expectedMaterialActivation) || !exportRoot) throw new Error("[SigningEngine][ed25519-export] selected linked Email OTP authority has no exact export root");
482
- let linkedMaterial = null;
483
- for (const candidate of signerMaterials) {
484
- if (!isLinkedEd25519SignerMaterial(candidate) || candidate.authorityId !== authority.authorityId || candidate.walletAuthMethodId !== authMethod.walletAuthMethodId || !mpcMaterialActivationRefsEqual(candidate.materialActivation, args.expectedMaterialActivation)) continue;
485
- if (linkedMaterial) throw new Error("[SigningEngine][ed25519-export] linked Ed25519 material is ambiguous");
486
- linkedMaterial = candidate;
487
- }
488
- if (!linkedMaterial) throw new Error("[SigningEngine][ed25519-export] linked Ed25519 material is unavailable");
489
- const targetFactor = linkedMaterial.targetFactor;
490
- const application = linkedMaterial.publicFacts.applicationBinding;
491
- const lifecycle = linkedMaterial.publicFacts.targetBinding.lifecycle;
492
- const registeredPublicKeyB64u = ed25519Activation.signer.registeredPublicKeyB64u;
493
- if (targetFactor.kind !== WALLET_AUTH_METHODS.emailOtp || targetFactor.walletAuthMethodId !== authMethod.walletAuthMethodId || targetFactor.emailHashHex !== authMethod.emailHashHex || targetFactor.registrationAuthorityId !== authMethod.registrationAuthorityId || exportRoot.authorityId !== authority.authorityId || exportRoot.walletAuthMethodId !== authMethod.walletAuthMethodId || exportRoot.walletKeyId !== ed25519Activation.signer.walletKeyId || exportRoot.envelope.binding.kind !== "ed25519_yao_client_root_v1" || exportRoot.envelope.binding.registeredPublicKeyB64u !== registeredPublicKeyB64u || exportRoot.envelope.factor.kind !== WALLET_AUTH_METHODS.emailOtp || application.wallet_id !== String(signer.account.wallet.walletId) || application.near_ed25519_signing_key_id !== String(signer.nearEd25519SigningKeyId) || application.key_creation_signer_slot !== signer.signerSlot || lifecycle.account_id !== String(signer.account.wallet.walletId) || lifecycle.session_id !== String(args.subject.thresholdSessionId) || lifecycle.selected_server_id !== args.expectedMaterialActivation.signingWorker || base64UrlEncode(Uint8Array.from(linkedMaterial.publicFacts.activationReceipt.registered_public_key)) !== registeredPublicKeyB64u) throw new Error("[SigningEngine][ed25519-export] linked Email OTP export identity changed");
494
- if (args.activeCapability) {
495
- if (!mpcMaterialActivationRefsEqual(args.activeCapability.materialActivation, args.expectedMaterialActivation) || base64UrlEncode(Uint8Array.from(args.activeCapability.registeredPublicKey)) !== registeredPublicKeyB64u) throw new Error("[SigningEngine][ed25519-export] active Email OTP capability changed");
496
- return exportRoot.envelope;
497
- }
498
- return {
499
- envelope: exportRoot.envelope,
500
- source: {
501
- materialActivation: args.expectedMaterialActivation,
502
- signingWorkerId: lifecycle.selected_server_id,
503
- participantIds: linkedMaterial.publicFacts.participantIds,
504
- registeredPublicKeyB64u
505
- }
506
- };
507
- }
508
- async function resolveLinkedPasskeyOwnerSignerSlot(args) {
509
- let material = null;
510
- for (const candidate of args.signerMaterials) {
511
- if (!isLinkedEd25519SignerMaterial(candidate) || candidate.authorityId !== args.authMethod.walletAuthorityId || candidate.walletAuthMethodId !== args.authMethod.walletAuthMethodId) continue;
512
- if (material) throw new Error("[SigningEngine] linked Passkey Ed25519 signer material is conflicting");
513
- material = candidate;
514
- }
515
- if (!material) throw new Error("[SigningEngine] linked Passkey Ed25519 signer material is unavailable");
516
- const application = material.publicFacts.applicationBinding;
517
- const signerSlot = parseSignerSlot(application.key_creation_signer_slot, { min: 1 });
518
- const target = material.targetFactor;
519
- if (!signerSlot || application.wallet_id !== String(args.walletId) || String(material.materialActivation.materialOwner) !== String(args.walletId) || target.kind !== WALLET_AUTH_METHODS.passkey || target.walletAuthMethodId !== args.authMethod.walletAuthMethodId || String(target.rpId) !== String(args.authMethod.rpId) || String(target.credentialIdB64u) !== String(args.authMethod.credentialIdB64u)) throw new Error("[SigningEngine] linked Passkey Ed25519 signer material identity is invalid");
520
- let laneMatches = 0;
521
- for (const reference of await args.publicLaneStore.listLanes()) {
522
- if (reference.auth.kind !== "passkey") continue;
523
- if (String(reference.walletId) !== String(args.walletId) || String(reference.auth.rpId) !== String(args.authMethod.rpId) || reference.auth.credentialIdB64u !== args.authMethod.credentialIdB64u || String(reference.nearEd25519SigningKeyId) !== String(application.near_ed25519_signing_key_id) || reference.signerSlot !== signerSlot || !mpcMaterialActivationRefsEqual(reference.materialActivation, material.materialActivation)) continue;
524
- laneMatches += 1;
525
- }
526
- if (laneMatches === 0) throw new Error("[SigningEngine] linked Passkey Ed25519 public lane is unavailable");
527
- if (laneMatches !== 1) throw new Error("[SigningEngine] linked Passkey Ed25519 public lane is ambiguous");
528
- return signerSlot;
529
- }
530
- async function resolveExactEmailOtpPublicLaneReference(args) {
531
- const signer = args.laneIdentity.signer;
532
- const matches = (await args.store.listLanes()).filter((reference) => reference.auth.kind === WALLET_AUTH_METHODS.emailOtp && args.laneIdentity.auth.kind === WALLET_AUTH_METHODS.emailOtp && reference.auth.providerSubjectId === args.laneIdentity.auth.providerSubjectId && String(reference.walletId) === String(signer.account.wallet.walletId) && String(reference.nearAccountId) === String(signer.account.nearAccountId) && String(reference.nearEd25519SigningKeyId) === String(signer.nearEd25519SigningKeyId) && reference.signerSlot === signer.signerSlot && String(reference.thresholdSessionId) === String(args.laneIdentity.thresholdSessionId) && mpcMaterialActivationRefsEqual(reference.materialActivation, args.materialActivation));
533
- if (matches.length !== 1) throw new Error(matches.length === 0 ? "[SigningEngine][near] Email OTP public lane is unavailable" : "[SigningEngine][near] Email OTP public lane is ambiguous");
534
- return matches[0];
535
- }
536
- async function resolveExactPasskeyPublicLaneReference(args) {
537
- if (args.laneIdentity.auth.kind !== WALLET_AUTH_METHODS.passkey) throw new Error("[SigningEngine][near] Passkey public lane authority is required");
538
- const auth = args.laneIdentity.auth;
539
- const signer = args.laneIdentity.signer;
540
- const matches = (await args.store.listLanes()).filter((reference) => reference.auth.kind === WALLET_AUTH_METHODS.passkey && reference.auth.rpId === auth.rpId && reference.auth.credentialIdB64u === auth.credentialIdB64u && String(reference.walletId) === String(signer.account.wallet.walletId) && String(reference.nearAccountId) === String(signer.account.nearAccountId) && String(reference.nearEd25519SigningKeyId) === String(signer.nearEd25519SigningKeyId) && reference.signerSlot === signer.signerSlot && String(reference.thresholdSessionId) === String(args.laneIdentity.thresholdSessionId));
541
- if (matches.length !== 1) throw new Error(matches.length === 0 ? "[SigningEngine][near] Passkey public lane is unavailable" : "[SigningEngine][near] Passkey public lane is ambiguous");
542
- return matches[0];
543
- }
544
- async function resolveExactNearEd25519PublicLaneReference(args) {
545
- const signer = args.identity.signer;
546
- const matches = (await args.store.listLanes()).filter((reference) => String(reference.walletId) === String(signer.account.wallet.walletId) && String(reference.nearAccountId) === String(signer.account.nearAccountId) && String(reference.nearEd25519SigningKeyId) === String(signer.nearEd25519SigningKeyId) && reference.signerSlot === signer.signerSlot && String(reference.thresholdSessionId) === String(args.identity.thresholdSessionId) && nearEd25519AuthBindingsEqual(reference.auth, args.identity.auth) && mpcMaterialActivationRefsEqual(reference.materialActivation, args.materialActivation));
547
- if (matches.length !== 1) throw new Error(matches.length === 0 ? "[SigningEngine][near] exact Ed25519 public lane is unavailable" : "[SigningEngine][near] exact Ed25519 public lane is ambiguous");
548
- return matches[0];
549
- }
550
- async function requireExactPasskeyWalletSessionAuthority(args) {
551
- if (args.reference.auth.kind !== WALLET_AUTH_METHODS.passkey) throw new Error("[SigningEngine][near] Passkey public lane authority is required");
552
- if (args.authorization.selectedAuthMethod.kind !== WALLET_AUTH_METHODS.passkey || String(args.authorization.session.walletId) !== String(args.reference.walletId)) throw new Error("[SigningEngine][near] Passkey Wallet Session authority does not match lane");
553
- const method = await IndexedDBManager.getWalletAuthMethodV2(args.authorization.selectedAuthMethod.walletAuthMethodId);
554
- if (!method || method.kind !== WALLET_AUTH_METHODS.passkey || method.status !== "active" || String(method.walletId) !== String(args.reference.walletId) || String(method.rpId) !== String(args.reference.auth.rpId) || String(method.credentialIdB64u) !== String(args.reference.auth.credentialIdB64u)) throw new Error("[SigningEngine][near] Passkey Wallet Session method does not match lane");
555
- const authority = await walletAuthAuthorityRef({ authority: {
556
- walletId: method.walletId,
557
- factor: {
558
- kind: WALLET_AUTH_METHODS.passkey,
559
- credentialIdB64u: method.credentialIdB64u
560
- },
561
- verifier: {
562
- kind: "webauthn",
563
- rpId: method.rpId
564
- },
565
- bindingId: method.walletAuthMethodId
566
- } });
567
- const selectedFactorRef = await walletAuthAuthorityRef({ authority: args.authorization.selectedFactorAuthority });
568
- if (authority.authorityDigest !== selectedFactorRef.authorityDigest || authority.walletAuthMethodId !== selectedFactorRef.walletAuthMethodId) throw new Error("[SigningEngine][near] Passkey Wallet Session authority changed");
569
- return authority;
570
- }
571
- async function passkeyWalletSessionStateFromPublicLane(args) {
572
- if (args.reference.auth.kind !== WALLET_AUTH_METHODS.passkey) throw new Error("[SigningEngine][near] Passkey public lane authority is required");
573
- if (!nearEd25519SessionMatchesMaterialActivation({
574
- session: args.authorization.session,
575
- materialActivation: args.materialActivation
576
- })) throw new Error("[SigningEngine][near] Passkey Wallet Session material changed");
577
- const authority = await requireExactPasskeyWalletSessionAuthority({
578
- reference: args.reference,
579
- authorization: args.authorization
580
- });
581
- const authorizationId = parseWalletSessionAuthorizationId(args.authorization.session.authorizationId);
582
- if (!authorizationId.ok || args.authorization.operationCredential.token.trim().length === 0) throw new Error("[SigningEngine][near] Passkey Ed25519 Wallet Session credential is unavailable");
583
- const facts = args.material.facts;
584
- const signingWalletSession = buildRouterAbEd25519SigningWalletSession({
585
- walletId: String(args.reference.walletId),
586
- nearAccountId: String(args.reference.nearAccountId),
587
- nearEd25519SigningKeyId: String(args.reference.nearEd25519SigningKeyId),
588
- walletSessionId: args.authorization.operationCredential.walletSessionId,
589
- authorizationId: authorizationId.value,
590
- quotaId: args.authorization.session.quotaId,
591
- thresholdSessionId: args.reference.thresholdSessionId,
592
- remainingUses: args.authorization.status.remainingUses,
593
- expiresAtMs: args.authorization.status.expiresAtMs,
594
- runtimePolicyScope: facts.runtimePolicyScope,
595
- signingRootId: facts.signingRootId,
596
- signingRootVersion: facts.signingRootVersion,
597
- routerAbNormalSigning: facts.routerAbNormalSigning,
598
- walletSessionToken: args.authorization.operationCredential.token,
599
- nowMs: Date.now()
600
- });
601
- if (!signingWalletSession.ok) throw new Error(`[SigningEngine][near] Passkey Wallet Session is unusable (${signingWalletSession.reason})`);
602
- return buildPasskeyRouterAbEd25519WalletSessionState({
603
- walletId: args.reference.walletId,
604
- nearAccountId: args.reference.nearAccountId,
605
- nearEd25519SigningKeyId: args.reference.nearEd25519SigningKeyId,
606
- signerSlot: args.reference.signerSlot,
607
- rpId: args.reference.auth.rpId,
608
- credentialIdB64u: args.reference.auth.credentialIdB64u,
609
- relayerUrl: args.relayerUrl,
610
- authority,
611
- signingWalletSession: signingWalletSession.value
612
- });
613
- }
614
- async function requireExactEd25519SealedRuntimeForLane(args) {
615
- const resolution = await resolveExactEd25519SealedSessionRuntimeForLane(args);
616
- if (resolution.kind !== "resolved") throw invalidWalletSigningMaterial(resolution.kind === "conflict" ? "runtime_conflict" : "missing_runtime");
617
- return resolution.runtime;
618
- }
619
- async function requireExactEd25519SealedRuntimeForMaterialActivation(args) {
620
- const record = await readExactEd25519SealedSession(ed25519DurableMaterialLocator({
621
- authMethod: args.laneIdentity.auth.kind,
622
- materialActivation: args.materialActivation
623
- }));
624
- if (!record || record.curve !== "ed25519") throw new Error("[SigningEngine][near] exact persisted Ed25519 runtime is missing");
625
- const runtime = parseExactEd25519SealedSessionRuntime(record);
626
- if (!runtime || String(runtime.walletId) !== String(args.walletId) || String(runtime.nearAccountId) !== String(args.laneIdentity.signer.account.nearAccountId) || String(runtime.nearEd25519SigningKeyId) !== String(args.laneIdentity.signer.nearEd25519SigningKeyId) || runtime.signerSlot !== args.laneIdentity.signer.signerSlot || String(runtime.thresholdSessionId) !== String(args.laneIdentity.thresholdSessionId) || !nearEd25519AuthBindingsEqual(runtime.auth, args.laneIdentity.auth) || !mpcMaterialActivationRefsEqual(runtime.sealedRecord.ed25519Restore.materialActivation, args.materialActivation)) throw new Error("[SigningEngine][near] exact persisted Ed25519 runtime identity mismatch");
627
- return runtime;
628
- }
629
- async function requireExactEd25519SealedRuntimeForMaterialIdentity(args) {
630
- const runtimes = (await listExactSealedSessionsForWallet({
631
- walletId: args.walletId,
632
- filter: {
633
- authMethod: args.identity.auth.kind,
634
- curve: "ed25519"
635
- }
636
- })).filter((record) => record.curve === "ed25519").map(parseExactEd25519SealedSessionRuntime).filter((runtime) => runtime !== null && nearEd25519RuntimeMatchesMaterialIdentity({
637
- runtime,
638
- identity: args.identity
639
- }));
640
- if (runtimes.length === 0) throw invalidWalletSigningMaterial("missing_runtime");
641
- if (runtimes.length !== 1) throw invalidWalletSigningMaterial("runtime_conflict");
642
- return runtimes[0];
643
- }
644
- function operationStepUpProofMatchesSelectedWalletAuthMethod(args) {
645
- const { selection, authMethod, authority } = args.selected;
646
- if (selection.lockState !== "unlocked" || selection.walletId !== args.walletId || selection.walletAuthMethodId !== authMethod.walletAuthMethodId || authMethod.walletId !== args.walletId || authMethod.walletAuthorityId !== authority.authorityId || authority.walletId !== args.walletId) return false;
647
- switch (args.proof.kind) {
648
- case "passkey": return authMethod.kind === WALLET_AUTH_METHODS.passkey && args.proof.authority.walletId === args.walletId && args.proof.authority.bindingId === authMethod.walletAuthMethodId && args.proof.authority.factor.credentialIdB64u === authMethod.credentialIdB64u && args.proof.authority.verifier.rpId === authMethod.rpId;
649
- case "email_otp": return authMethod.kind === WALLET_AUTH_METHODS.emailOtp && args.proof.authorityRef.walletId === args.walletId && args.proof.authorityRef.walletAuthMethodId === authMethod.walletAuthMethodId;
650
- default:
651
- args.proof;
652
- throw new Error("[SigningEngine][near] unsupported operation step-up proof");
653
- }
654
- }
655
- async function resolveExactNearEd25519WalletSessionOperationCredentialForStepUp(args) {
656
- const selected = await IndexedDBManager.resolveSelectedWalletAuthority(String(args.walletId));
657
- if (selected.kind !== "resolved") {
658
- const detail = selected.kind === "integrity_error" ? `: ${selected.reason}` : "";
659
- throw new Error(`[SigningEngine][near] selected Wallet Authority is ${selected.kind}${detail}`);
660
- }
661
- if (!operationStepUpProofMatchesSelectedWalletAuthMethod({
662
- walletId: args.walletId,
663
- proof: args.proof,
664
- selected
665
- })) throw new Error("[SigningEngine][near] operation step-up authority does not match selection");
666
- const operation = await resolveWalletAuthorityOperation({
667
- selected: {
668
- authMethod: selected.authMethod,
669
- authority: selected.authority
670
- },
671
- operation: {
672
- kind: "near_sign",
673
- operation: "sign",
674
- keyFamily: "ed25519"
675
- }
676
- });
677
- if (operation.kind !== "resolved") throw new Error(`[SigningEngine][near] selected Wallet Authority rejected signing (${operation.reason.kind})`);
678
- const exactSession = exactWalletSessionWithOperationCredentialOrThrow(await walletSessionAuthorizations.readExactWithOperationCredential({
679
- walletId: args.walletId,
680
- authorityId: selected.authority.authorityId,
681
- authMethodId: selected.authMethod.walletAuthMethodId
682
- }), "[SigningEngine][near] exact Wallet Session requires a newer client");
683
- const hasSigningSubject = exactSession?.record.capabilitySubjects.filter((subject) => subject.kind === "sign" && subject.keyFamily === "ed25519" && mpcMaterialActivationRefsEqual(subject.materialActivation, operation.value.materialActivation)).length === 1;
684
- if (!exactSession || exactSession.record.walletId !== args.walletId || exactSession.record.authorityId !== selected.authority.authorityId || exactSession.record.authMethodId !== selected.authMethod.walletAuthMethodId || exactSession.record.authorityDigestB64u !== selected.authority.authorityDigestB64u || exactSession.record.authorityRevocationEpoch !== selected.authority.revocationEpoch || exactSession.record.expiresAtMs <= Date.now() || !hasSigningSubject) throw new Error("[SigningEngine][near] exact Wallet Session is unavailable for operation step-up");
685
- return exactSession.operationCredential;
686
- }
687
- async function walletSessionStateFromExactEd25519Runtime(args) {
688
- const authorization = await resolveBrowserActiveNearEd25519WalletSessionAuthorization(args.runtime.walletId, args.relayerUrl);
689
- if (!authorization) throw new Error("[SigningEngine][near] active Wallet Session authorization is unavailable");
690
- return await rebindRouterAbEd25519WalletSessionStateFromExactRuntime({
691
- runtime: args.runtime,
692
- authorization,
693
- nowMs: Date.now()
694
- });
695
- }
696
- async function preparePasskeyEd25519OperationMaterial(args) {
697
- const { identity } = args;
698
- if (identity.auth.kind !== WALLET_AUTH_METHODS.passkey) throw invalidWalletSigningMaterial("binding_mismatch");
699
- const selected = await IndexedDBManager.resolveSelectedWalletAuthority(String(args.walletId));
700
- if (selected.kind !== "resolved" || selected.selection.lockState !== "unlocked" || selected.selection.walletId !== args.walletId || selected.authMethod.kind !== WALLET_AUTH_METHODS.passkey || String(selected.authMethod.rpId) !== String(identity.auth.rpId) || selected.authMethod.credentialIdB64u !== identity.auth.credentialIdB64u) throw invalidWalletSigningMaterial("binding_mismatch");
701
- const operation = await resolveWalletAuthorityOperation({
702
- selected: {
703
- authMethod: selected.authMethod,
704
- authority: selected.authority
705
- },
706
- operation: {
707
- kind: "near_sign",
708
- operation: "sign",
709
- keyFamily: "ed25519"
710
- }
711
- });
712
- if (operation.kind !== "resolved") throw invalidWalletSigningMaterial("missing_capability");
713
- const authority = await resolveBrowserExactPasskeyWalletAuthAuthorityRef({
714
- walletId: args.walletId,
715
- rpId: identity.auth.rpId,
716
- credentialIdB64u: identity.auth.credentialIdB64u
717
- });
718
- if (!authority || authority.walletAuthMethodId !== selected.authMethod.walletAuthMethodId) throw invalidWalletSigningMaterial("binding_mismatch");
719
- const local = await readPasskeyEd25519YaoLocalMaterialLocatorV1({
720
- store: IndexedDBManager,
721
- walletId: String(args.walletId),
722
- nearAccountId: String(identity.signer.account.nearAccountId),
723
- nearEd25519SigningKeyId: String(identity.signer.nearEd25519SigningKeyId),
724
- signerSlot: identity.signer.signerSlot,
725
- rpId: identity.auth.rpId,
726
- credentialIdB64u: identity.auth.credentialIdB64u,
727
- authority
728
- });
729
- if (local.kind !== "available") throw invalidWalletSigningMaterial("missing_runtime");
730
- if (!mpcMaterialActivationRefsEqual(local.locator.materialActivation, operation.value.materialActivation)) throw invalidWalletSigningMaterial("binding_mismatch");
731
- const scope = local.locator.stableServerScope;
732
- const root = signingRootScopeFromRuntimePolicyScope(scope.runtimePolicyScope);
733
- if (!root.signingRootVersion) throw invalidWalletSigningMaterial("binding_mismatch");
734
- const localIdentity = {
735
- walletId: String(args.walletId),
736
- nearAccountId: String(identity.signer.account.nearAccountId),
737
- nearEd25519SigningKeyId: String(identity.signer.nearEd25519SigningKeyId),
738
- thresholdSessionId: String(identity.thresholdSessionId),
739
- signerSlot: identity.signer.signerSlot,
740
- rpId: identity.auth.rpId,
741
- credentialIdB64u: identity.auth.credentialIdB64u,
742
- signingRootId: root.signingRootId,
743
- signingRootVersion: root.signingRootVersion,
744
- signingWorkerId: scope.routerAbNormalSigning.signingWorkerId
745
- };
746
- const publicLocator = {
747
- kind: "available",
748
- walletId: localIdentity.walletId,
749
- nearAccountId: localIdentity.nearAccountId,
750
- signerSlot: localIdentity.signerSlot,
751
- materialActivation: local.locator.materialActivation
752
- };
753
- const prepared = await prepareExactPasskeyEd25519YaoLocalMaterialRehydration({
754
- store: IndexedDBManager,
755
- identity: localIdentity,
756
- authority,
757
- publicLocator
758
- });
759
- if (prepared.kind === "blocked") throw walletSigningMaterialBlockError(prepared.plan.reason);
760
- return {
761
- prepared,
762
- localIdentity,
763
- authority,
764
- publicLocator,
765
- facts: {
766
- thresholdSessionId: identity.thresholdSessionId,
767
- signer: identity.signer,
768
- signingRootId: root.signingRootId,
769
- signingRootVersion: root.signingRootVersion,
770
- routerAbNormalSigning: scope.routerAbNormalSigning,
771
- runtimePolicyScope: scope.runtimePolicyScope,
772
- relayerUrl: args.relayerUrl
773
- },
774
- participantIds: scope.participantIds
775
- };
776
- }
777
- function passkeyEd25519LocalMaterialIdentityFromExactRuntime(runtime) {
778
- if (runtime.factor.kind !== WALLET_AUTH_METHODS.passkey) throw invalidWalletSigningMaterial("binding_mismatch");
779
- return {
780
- walletId: String(runtime.walletId),
781
- nearAccountId: String(runtime.nearAccountId),
782
- nearEd25519SigningKeyId: String(runtime.nearEd25519SigningKeyId),
783
- thresholdSessionId: String(runtime.thresholdSessionId),
784
- signerSlot: runtime.signerSlot,
785
- rpId: String(runtime.factor.rpId),
786
- credentialIdB64u: runtime.factor.credentialIdB64u,
787
- signingRootId: runtime.signingRootId,
788
- signingRootVersion: runtime.signingRootVersion,
789
- signingWorkerId: runtime.routerAbNormalSigning.signingWorkerId
790
- };
791
- }
792
- async function prepareExactPasskeyEd25519YaoLocalMaterialRehydration(input) {
793
- try {
794
- return await preparePasskeyEd25519YaoLocalMaterialRehydrationV1(input);
795
- } catch {
796
- throw invalidWalletSigningMaterial("binding_mismatch");
797
- }
798
- }
799
- async function hydrateExactPasskeyEd25519YaoLocalMaterial(input) {
800
- try {
801
- return await hydratePasskeyEd25519YaoLocalMaterialV1(input);
802
- } catch {
803
- throw invalidWalletSigningMaterial("corrupt");
804
- }
805
- }
806
- function nearEd25519YaoRuntimeObservation(material) {
807
- if (!material || material.activeClient.status().kind !== "active") return { kind: "absent" };
808
- const materialActivation = nearEd25519YaoMaterialActivationFromMetadata(material.activeClient.metadata());
809
- return {
810
- kind: "live",
811
- runtime: nearEd25519YaoRuntimeRef(materialActivation),
812
- materialActivation
813
- };
814
- }
815
- function nearEd25519MaterialIdentityFromBoundaryInput(input) {
816
- if (input.laneIdentity !== void 0) return {
817
- kind: "near_ed25519_material_identity",
818
- signer: input.laneIdentity.signer,
819
- auth: input.laneIdentity.auth,
820
- thresholdSessionId: input.laneIdentity.thresholdSessionId
821
- };
822
- return input.materialIdentity;
823
- }
824
- function nearEd25519AuthFromBoundaryInput(input) {
825
- return nearEd25519MaterialIdentityFromBoundaryInput(input).auth;
826
- }
827
- function nearEd25519PresentedAuthFromBoundaryInput(input) {
828
- if (input.auth !== void 0) return input.auth;
829
- return input.materialIdentity.auth;
830
- }
831
- function nearEd25519SignerFromBoundaryInput(input) {
832
- return nearEd25519MaterialIdentityFromBoundaryInput(input).signer;
833
- }
834
- function nearEd25519ThresholdSessionIdFromBoundaryInput(input) {
835
- return String(nearEd25519MaterialIdentityFromBoundaryInput(input).thresholdSessionId);
836
- }
837
- function requireAuthorizedNearEd25519BoundaryInput(input) {
838
- if (input.laneIdentity === void 0 || input.auth === void 0) throw new Error("[SigningEngine][near] authorized lane identity is required");
839
- return {
840
- walletId: input.walletId,
841
- nearAccountId: input.nearAccountId,
842
- laneIdentity: input.laneIdentity,
843
- auth: input.auth
844
- };
845
- }
846
- function authNeutralNearEd25519BoundaryInput(input) {
847
- return {
848
- walletId: input.walletId,
849
- nearAccountId: input.nearAccountId,
850
- materialIdentity: nearEd25519MaterialIdentityFromBoundaryInput(input)
851
- };
852
- }
853
- async function emailOtpWalletSessionStateFromPublicLane(args) {
854
- if (args.reference.auth.kind !== WALLET_AUTH_METHODS.emailOtp) throw new Error("[SigningEngine][near] Email OTP public lane authority is required");
855
- if (!nearEd25519SessionMatchesMaterialActivation({
856
- session: args.authorization.session,
857
- materialActivation: args.materialActivation
858
- })) throw new Error("[SigningEngine][near] Email OTP Wallet Session material changed");
859
- const authorizationId = parseWalletSessionAuthorizationId(args.authorization.session.authorizationId);
860
- if (!authorizationId.ok || args.authorization.operationCredential.token.trim().length === 0) throw new Error("[SigningEngine][near] Email OTP Ed25519 Wallet Session credential is unavailable");
861
- const authority = await walletAuthAuthorityRef({ authority: args.authorization.selectedFactorAuthority });
862
- const facts = args.material.facts;
863
- const signingWalletSession = buildRouterAbEd25519SigningWalletSession({
864
- walletId: String(args.reference.walletId),
865
- nearAccountId: String(args.reference.nearAccountId),
866
- nearEd25519SigningKeyId: String(args.reference.nearEd25519SigningKeyId),
867
- walletSessionId: args.authorization.operationCredential.walletSessionId,
868
- authorizationId: authorizationId.value,
869
- quotaId: args.authorization.session.quotaId,
870
- thresholdSessionId: args.reference.thresholdSessionId,
871
- remainingUses: args.authorization.status.remainingUses,
872
- expiresAtMs: args.authorization.status.expiresAtMs,
873
- runtimePolicyScope: facts.runtimePolicyScope,
874
- signingRootId: facts.signingRootId,
875
- signingRootVersion: facts.signingRootVersion,
876
- routerAbNormalSigning: facts.routerAbNormalSigning,
877
- walletSessionToken: args.authorization.operationCredential.token,
878
- nowMs: Date.now()
879
- });
880
- if (!signingWalletSession.ok) throw new Error(`[SigningEngine][near] Email OTP Wallet Session is unusable (${signingWalletSession.reason})`);
881
- return buildEmailOtpRouterAbEd25519WalletSessionState({
882
- walletId: args.reference.walletId,
883
- nearAccountId: args.reference.nearAccountId,
884
- nearEd25519SigningKeyId: args.reference.nearEd25519SigningKeyId,
885
- providerSubjectId: args.reference.auth.providerSubjectId,
886
- signerSlot: args.reference.signerSlot,
887
- relayerUrl: args.relayerUrl,
888
- authority,
889
- signingWalletSession: signingWalletSession.value
890
- });
891
- }
892
- function nearEd25519AuthBindingsEqual(left, right) {
893
- if (left.kind !== right.kind) return false;
894
- switch (left.kind) {
895
- case WALLET_AUTH_METHODS.passkey: return right.kind === WALLET_AUTH_METHODS.passkey && left.rpId === right.rpId && left.credentialIdB64u === right.credentialIdB64u;
896
- case WALLET_AUTH_METHODS.emailOtp: return right.kind === WALLET_AUTH_METHODS.emailOtp && left.providerSubjectId === right.providerSubjectId;
897
- default: throw new Error("[SigningEngine][near] unsupported Ed25519 material authority");
898
- }
899
- }
900
- function nearEd25519RuntimeMatchesMaterialIdentity(args) {
901
- const signer = args.identity.signer;
902
- return String(args.runtime.walletId) === String(signer.account.wallet.walletId) && String(args.runtime.nearAccountId) === String(signer.account.nearAccountId) && String(args.runtime.nearEd25519SigningKeyId) === String(signer.nearEd25519SigningKeyId) && args.runtime.signerSlot === signer.signerSlot && String(args.runtime.thresholdSessionId) === String(args.identity.thresholdSessionId) && nearEd25519AuthBindingsEqual(args.runtime.auth, args.identity.auth);
903
- }
904
- function emailOtpEd25519OperationMaterialFacts(args) {
905
- const signingRoot = signingRootScopeFromRuntimePolicyScope(args.publicLane.runtimePolicyScope);
906
- if (!signingRoot.signingRootVersion) throw new Error("[SigningEngine][near] Email OTP lane requires a signing-root version");
907
- return {
908
- thresholdSessionId: args.publicLane.thresholdSessionId,
909
- signer: nearEd25519SignerFromBoundaryInput(args.input),
910
- signingRootId: signingRoot.signingRootId,
911
- signingRootVersion: signingRoot.signingRootVersion,
912
- routerAbNormalSigning: {
913
- kind: ROUTER_AB_ED25519_NORMAL_SIGNING_STATE_KIND,
914
- signingWorkerId: String(args.publicLane.materialActivation.signingWorker)
915
- },
916
- runtimePolicyScope: args.publicLane.runtimePolicyScope,
917
- relayerUrl: args.relayerUrl
918
- };
919
- }
920
- function assertNearEd25519YaoMaterialBoundaryAuth(input) {
921
- const expected = nearEd25519AuthFromBoundaryInput(input);
922
- const actual = nearEd25519PresentedAuthFromBoundaryInput(input);
923
- if (expected.kind !== actual.kind) throw new Error("[SigningEngine][near] prepared material factor changed");
924
- switch (actual.kind) {
925
- case WALLET_AUTH_METHODS.passkey:
926
- if (expected.kind !== WALLET_AUTH_METHODS.passkey || expected.rpId !== actual.rpId || expected.credentialIdB64u !== actual.credentialIdB64u) throw new Error("[SigningEngine][near] prepared Passkey material binding changed");
927
- return;
928
- case WALLET_AUTH_METHODS.emailOtp:
929
- if (expected.kind !== WALLET_AUTH_METHODS.emailOtp || expected.providerSubjectId !== actual.providerSubjectId) throw new Error("[SigningEngine][near] prepared Email OTP material binding changed");
930
- return;
931
- default: throw new Error("[SigningEngine][near] unsupported Ed25519 material authority");
932
- }
933
- }
934
- function validateExactNearEd25519YaoOperationMaterial(args) {
935
- const facts = args.material.facts;
936
- const metadata = args.material.activeClient.metadata();
937
- const thresholdSessionId = nearEd25519ThresholdSessionIdFromBoundaryInput(args.input);
938
- const expectedSigner = nearEd25519SignerFromBoundaryInput(args.input);
939
- const actualSigner = facts.signer;
940
- if (String(facts.thresholdSessionId) !== thresholdSessionId) throw new Error("[SigningEngine][near] active Ed25519 Yao capability session mismatch");
941
- if (metadata.scope.threshold_session_id !== String(facts.thresholdSessionId)) throw new Error("[SigningEngine][near] active Ed25519 Yao metadata session mismatch");
942
- if (metadata.scope.account_id !== String(args.input.walletId) || metadata.applicationBinding.wallet_id !== String(args.input.walletId)) throw new Error("[SigningEngine][near] active Ed25519 Yao capability subject mismatch");
943
- if (String(actualSigner.account.wallet.walletId) !== String(expectedSigner.account.wallet.walletId) || String(actualSigner.account.nearAccountId) !== String(expectedSigner.account.nearAccountId) || actualSigner.signerSlot !== expectedSigner.signerSlot || String(actualSigner.nearEd25519SigningKeyId) !== String(expectedSigner.nearEd25519SigningKeyId)) throw new Error("[SigningEngine][near] active Ed25519 Yao capability signer mismatch");
944
- const materialActivation = nearEd25519YaoMaterialActivationFromMetadata(metadata);
945
- if (!mpcMaterialActivationRefsEqual(args.expectedActivation, materialActivation)) throw new Error("[SigningEngine][near] active Ed25519 Yao capability activation mismatch");
946
- return args.material;
947
- }
948
- async function hydrateOwnerNearEd25519ExecutionLane(args) {
949
- const materialActivation = nearEd25519YaoMaterialActivationFromMetadata(args.material.activeClient.metadata());
950
- if (!nearEd25519SessionMatchesMaterialActivation({
951
- session: args.authorization.session,
952
- materialActivation
953
- })) throw new Error("Owner Ed25519 execution-lane material changed");
954
- const walletSessionToken = args.authorization.operationCredential.token;
955
- const exactMaterial = validateExactNearEd25519YaoOperationMaterial({
956
- material: args.material,
957
- input: args.input,
958
- expectedActivation: materialActivation
959
- });
960
- const authority = await ed25519SealedRuntimeAuthorityRef({
961
- runtime: args.sealedRuntime,
962
- walletAuthMethodId: args.authorization.selectedAuthMethod.walletAuthMethodId
963
- });
964
- const selectedFactorAuthority = await walletAuthAuthorityRef({ authority: args.authorization.selectedFactorAuthority });
965
- if (authority.walletId !== selectedFactorAuthority.walletId || authority.walletAuthMethodId !== selectedFactorAuthority.walletAuthMethodId || authority.authorityDigest !== selectedFactorAuthority.authorityDigest) throw new Error("Owner Ed25519 execution-lane authority does not match sealed material");
966
- const runtime = nearEd25519YaoRuntimeObservation(exactMaterial);
967
- if (runtime.kind !== "live") throw new Error("Owner Ed25519 execution-lane preflight requires active Yao material");
968
- const hydration = {
969
- publicLocator: {
970
- kind: "available",
971
- walletId: String(exactMaterial.facts.signer.account.wallet.walletId),
972
- nearAccountId: String(exactMaterial.facts.signer.account.nearAccountId),
973
- signerSlot: exactMaterial.facts.signer.signerSlot,
974
- materialActivation,
975
- authority
976
- },
977
- sealed: { kind: "missing" },
978
- runtime,
979
- unlockSource: { kind: "unavailable" }
980
- };
981
- return assertOwnerNearEd25519ExecutionLaneProjection({
982
- projection: await readOwnerWalletExecutionLaneProjectionV1({
983
- relayerUrl: exactMaterial.facts.relayerUrl,
984
- walletSessionToken,
985
- curve: "ed25519",
986
- expectedMaterialActivation: materialActivation
987
- }),
988
- material: exactMaterial,
989
- hydration
990
- });
991
- }
992
- function assertOwnerNearEd25519ExecutionLaneProjection(args) {
993
- const hydrated = hydrateWalletExecutionLane({
994
- walletKey: args.projection.walletKey,
995
- lane: args.projection.lane,
996
- material: {
997
- keyFamily: "ed25519",
998
- laneShareEpoch: args.projection.lane.laneShareEpoch,
999
- metadata: args.material.activeClient.metadata(),
1000
- hydration: args.hydration
1001
- }
1002
- });
1003
- if (hydrated.kind !== "active_wallet_execution_lane_v1") throw new Error(`Owner Ed25519 execution lane is ${hydrated.reason}`);
1004
- if (!mpcMaterialActivationRefsEqual(hydrated.materialActivation, args.projection.materialActivation) || hydrated.activationReceiptDigestB64u !== String(args.projection.verifiedActivationReceiptDigestB64u)) throw new Error("Owner Ed25519 execution-lane projection activation changed");
1005
- return hydrated;
1006
- }
1007
- function requireNearEd25519YaoPreparationActivation(preparation) {
1008
- const materialActivation = preparation.hydration.materialActivation;
1009
- if (!materialActivation) throw new Error("[SigningEngine][near] prepared material has no activation");
1010
- return materialActivation;
1011
- }
1012
- function requireBoundNearEd25519YaoPreparationActivation(args) {
1013
- const materialActivation = requireNearEd25519YaoPreparationActivation(args.preparation);
1014
- if (!args.context.materialActivation || !mpcMaterialActivationRefsEqual(args.context.materialActivation, materialActivation)) throw new Error("[SigningEngine][near] prepared material boundary changed activation");
1015
- return materialActivation;
1016
- }
1017
- function serializePreparedRegistrationCredential(credential) {
1018
- return serializeRegistrationCredentialWithPRF({
1019
- credential,
1020
- firstPrfOutput: true,
1021
- secondPrfOutput: true
1022
- });
1023
- }
1024
- async function loadEcdsaRoleLocalReadyRecordFromRuntimePorts(runtimePortsRef, input) {
1025
- if (!runtimePortsRef.current) return {
1026
- ok: false,
1027
- code: "unavailable",
1028
- message: "Signing runtime storage is not initialized"
1029
- };
1030
- return await runtimePortsRef.current.storage.loadEcdsaRoleLocalReadyRecord(input);
1031
- }
1032
- function sdkLifecycleEventDeliveryKey(event) {
1033
- const eventName = event.event;
1034
- switch (eventName) {
1035
- case "signing_session.expired": return `${String(event.walletId)}:${String(event.walletSessionId)}`;
1036
- case "registration.near_provisioning_changed": return `${String(event.walletId)}:${event.state.status}:${event.state.updatedAtMs}`;
1037
- default: return assertNeverSdkLifecycleEventName(eventName);
1038
- }
1039
- }
1040
- function assertNeverSdkLifecycleEventName(value) {
1041
- throw new Error(`Unsupported SDK lifecycle event: ${String(value)}`);
1042
- }
1043
- async function readBrowserPasskeyCustodySessionCache(key) {
1044
- if (IndexedDBManager.isDisabled()) return void 0;
1045
- return await IndexedDBManager.getAppState(key);
1046
- }
1047
- async function writeBrowserPasskeyCustodySessionCache(key, value) {
1048
- if (IndexedDBManager.isDisabled()) return;
1049
- await IndexedDBManager.setAppState(key, value);
1050
- }
1051
- const browserPasskeyCustodySessionCachePersistence = {
1052
- readCacheEntry: readBrowserPasskeyCustodySessionCache,
1053
- writeCacheEntry: writeBrowserPasskeyCustodySessionCache
1054
- };
1055
- var BrowserSigningSurface = class {
1056
- readExactNearEd25519WalletSessionAuthorization(walletId) {
1057
- return readBrowserExactNearEd25519WalletSessionAuthorization(String(this.seamsWebConfigs.network.relayer?.url || "").trim(), new WalletSessionStatusReadScope(), walletId);
1058
- }
1059
- resolveActiveNearEd25519WalletSessionAuthorization(walletId) {
1060
- return resolveBrowserActiveNearEd25519WalletSessionAuthorization(walletId, String(this.seamsWebConfigs.network.relayer?.url || "").trim());
1061
- }
1062
- constructor(seamsWebConfigs, nearClient, deps) {
1063
- this.workerBaseOrigin = "";
1064
- this.thresholdEcdsaBootstrapQueueByWallet = /* @__PURE__ */ new Map();
1065
- this.thresholdEcdsaSigningQueueByKey = /* @__PURE__ */ new Map();
1066
- this.thresholdEd25519CommitQueueByKey = /* @__PURE__ */ new Map();
1067
- this.nearEd25519CapabilityRehydrationBySubject = /* @__PURE__ */ new Map();
1068
- this.hostWarmCriticalResourcesTask = null;
1069
- this.sealedRefreshStartupParityError = null;
1070
- this.sdkLifecycleEventListeners = /* @__PURE__ */ new Set();
1071
- this.deliveredSdkLifecycleEventKeys = /* @__PURE__ */ new Set();
1072
- this.walletAuthenticationState = { kind: "signed_out" };
1073
- this.walletAuthenticationRestoreGeneration = 0;
1074
- this.volatileWarmSigningMaterialCleanupInFlight = null;
1075
- this.requestWorkerOperation = (args) => this.signerWorkerManager.getContext().requestWorkerOperation(args);
1076
- configurePasskeyCustodySessionCachePersistence(browserPasskeyCustodySessionCachePersistence);
1077
- this.seamsWebConfigs = seamsWebConfigs;
1078
- this.ed25519YaoPublicCapabilityReferences = deps.ed25519YaoPublicCapabilityReferences;
1079
- this.appearance = seamsWebConfigs.ui.appearance;
1080
- this.nearClient = nearClient;
1081
- this.ecdsaBootstrapStore = deps.signingEngineStores.walletProfileAndSignerRecords.ecdsaBootstrapStore;
1082
- this.sealedRefreshStartupParityPromise = verifySealedRefreshStartupParity({ configs: this.seamsWebConfigs }).catch((error) => {
1083
- this.sealedRefreshStartupParityError = error instanceof Error ? error : new Error(String(error || "sealed refresh parity check failed"));
1084
- });
1085
- const runtimePortsForUiConfirm = { current: null };
1086
- const loadEcdsaRoleLocalReadyRecord = loadEcdsaRoleLocalReadyRecordFromRuntimePorts.bind(null, runtimePortsForUiConfirm);
1087
- const assembly = createManagerAssembly({
1088
- resolveActiveEcdsaCapabilityRuntime: resolveBrowserActiveEcdsaCapabilityRuntime,
1089
- resolveOperationStepUpCredential: this.resolveOperationStepUpCredential.bind(this),
1090
- stores: deps.managerStores,
1091
- seamsWebConfigs: this.seamsWebConfigs,
1092
- nearClient: this.nearClient,
1093
- loadEcdsaRoleLocalReadyRecord,
1094
- getTheme: () => this.appearance.theme.mode,
1095
- getAppearance: () => this.appearance,
1096
- thresholdEcdsaSigningQueueByKey: this.thresholdEcdsaSigningQueueByKey
1097
- });
1098
- this.touchIdPrompt = assembly.touchIdPrompt;
1099
- this.userPreferencesManager = assembly.userPreferencesManager;
1100
- this.nonceCoordinator = assembly.nonceCoordinator;
1101
- this.signerWorkerManager = assembly.signerWorkerManager;
1102
- const signingRuntime = deps.createRuntime({
1103
- config: this.seamsWebConfigs,
1104
- workerCtx: this.signerWorkerManager.getContext(),
1105
- accountLifecycle: {
1106
- accountStore: deps.signingEngineStores.walletProfileAndSignerRecords.accountStore,
1107
- userPreferencesManager: this.userPreferencesManager,
1108
- nonceCoordinator: this.nonceCoordinator
1109
- },
1110
- ecdsaBootstrapStore: this.ecdsaBootstrapStore,
1111
- getWarmSessionMaterialWriter: () => this.passkeyMpcSession,
1112
- getNearSigningDeps: () => this.enginePorts.nearSigningDeps,
1113
- getEvmFamilySigningDeps: () => this.enginePorts.tempoSigningDeps
1114
- });
1115
- runtimePortsForUiConfirm.current = signingRuntime.runtimePorts;
1116
- const ecdsaExportArtifactStore = signingRuntime.state.ecdsaSessions;
1117
- this.runtimePorts = signingRuntime.runtimePorts;
1118
- const stepUpRuntime = createBrowserStepUpRuntime({
1119
- seamsWebConfigs: this.seamsWebConfigs,
1120
- touchIdPrompt: this.touchIdPrompt,
1121
- signerWorkerManager: this.signerWorkerManager,
1122
- stores: deps.signingEngineStores,
1123
- runtimePorts: this.runtimePorts,
1124
- sealedSigningSessionStore: deps.sealedSigningSessionStore,
1125
- baseTouchConfirm: assembly.touchConfirm,
1126
- passkeyMpcSession: assembly.passkeyMpcSession,
1127
- getEnginePorts: () => this.enginePorts,
1128
- thresholdEcdsaBootstrapQueueByWallet: this.thresholdEcdsaBootstrapQueueByWallet,
1129
- thresholdEcdsaSigningQueueByKey: this.thresholdEcdsaSigningQueueByKey,
1130
- loadWalletCustodyEd25519Material: this.loadEmailOtpWalletCustodyEd25519Material.bind(this),
1131
- restoreWalletCustodyEcdsaContinuity: this.restoreWalletCustodyEcdsaContinuity.bind(this),
1132
- getWarmSigning: () => this.warmSigning,
1133
- ensureSealedRefreshStartupParity: () => this.ensureSealedRefreshStartupParity(),
1134
- listActiveEcdsaCapabilityManifestsForWallet: listBrowserActiveEcdsaCapabilityManifestsForWallet
1135
- });
1136
- this.emailOtpSessions = stepUpRuntime.emailOtpSessions;
1137
- this.touchConfirm = stepUpRuntime.touchConfirm;
1138
- this.passkeyMpcSession = stepUpRuntime.passkeyMpcSession;
1139
- this.warmSigning = createWarmSigningPorts({
1140
- resolveActiveEcdsaCapabilityRuntime: resolveBrowserActiveEcdsaCapabilityRuntime,
1141
- resolveActiveEcdsaCapabilityRuntimeForChain: resolveBrowserActiveEcdsaCapabilityRuntimeForChain,
1142
- touchConfirm: this.touchConfirm,
1143
- passkeyMpcSession: this.passkeyMpcSession,
1144
- getEmailOtpWarmSessionStatus: (target) => this.emailOtpSessions.readWarmSessionStatusOnly(target),
1145
- signingSessionSeal: this.seamsWebConfigs.signing.sessionSeal,
1146
- ecdsaExportArtifacts: ecdsaExportArtifactStore,
1147
- resolveActiveEcdsaWalletSessionAuthorization: createBrowserActiveEcdsaWalletSessionAuthorizationResolver({
1148
- seamsWebConfigs: this.seamsWebConfigs,
1149
- touchIdPrompt: this.touchIdPrompt,
1150
- stores: deps.signingEngineStores,
1151
- emailOtpSessions: this.emailOtpSessions,
1152
- sealedSigningSessionStore: deps.sealedSigningSessionStore
1153
- }),
1154
- resolveActiveEd25519WalletSessionAuthorization: this.resolveActiveNearEd25519WalletSessionAuthorization.bind(this)
1155
- });
1156
- this.listPreprocessingCapabilities = listBrowserEcdsaPreprocessingCapabilitiesForWallet.bind(null, {
1157
- seamsWebConfigs: this.seamsWebConfigs,
1158
- touchIdPrompt: this.touchIdPrompt,
1159
- stores: deps.signingEngineStores,
1160
- emailOtpSessions: this.emailOtpSessions,
1161
- sealedSigningSessionStore: deps.sealedSigningSessionStore
1162
- });
1163
- this.sessionPublicDeps = createSessionPublicDeps({
1164
- seamsWebConfigs: this.seamsWebConfigs,
1165
- touchConfirm: this.touchConfirm,
1166
- passkeyMpcSession: this.passkeyMpcSession,
1167
- emailOtpSessions: this.emailOtpSessions,
1168
- ed25519YaoPublicCapabilityLanes: deps.ed25519YaoPublicCapabilityReferences,
1169
- isEd25519YaoPublicCapabilityActive: this.isEd25519YaoPublicCapabilityActive.bind(this),
1170
- readActiveWalletSessionAuthorization: readBrowserExactNearEd25519WalletSessionAuthorization.bind(null, this.seamsWebConfigs.network.relayer.url),
1171
- listEcdsaSigningCapabilitiesForWallet: (input, statusReads) => listBrowserEcdsaSigningCapabilitiesForWallet({
1172
- seamsWebConfigs: this.seamsWebConfigs,
1173
- touchIdPrompt: this.touchIdPrompt,
1174
- stores: deps.signingEngineStores,
1175
- emailOtpSessions: this.emailOtpSessions,
1176
- sealedSigningSessionStore: deps.sealedSigningSessionStore
1177
- }, input, statusReads),
1178
- getWalletSessionStatus: createBrowserCanonicalWalletSessionStatusReader({
1179
- seamsWebConfigs: this.seamsWebConfigs,
1180
- touchIdPrompt: this.touchIdPrompt,
1181
- stores: deps.signingEngineStores,
1182
- emailOtpSessions: this.emailOtpSessions,
1183
- sealedSigningSessionStore: deps.sealedSigningSessionStore
1184
- })
1185
- });
1186
- this.emailOtpPublicDeps = {
1187
- relayerUrl: this.seamsWebConfigs.network.relayer?.url || "",
1188
- groupId: SIGNING_SESSION_SEAL_GROUP_ID,
1189
- signingSessionAuthorityPorts: {
1190
- resolveActiveEcdsaCapabilityRuntime: resolveBrowserActiveEcdsaCapabilityRuntime,
1191
- factorStores: browserSigningSurfaceExactWalletAuthMethodStore,
1192
- resolveSelectedWalletAuthority: IndexedDBManager.resolveSelectedWalletAuthority.bind(IndexedDBManager),
1193
- readExactWalletSessionAuthorization: walletSessionAuthorizations.readExactWithOperationCredential.bind(walletSessionAuthorizations)
1194
- },
1195
- getSignerWorkerContext: () => this.enginePorts.walletSessionActivationDeps.getSignerWorkerContext(),
1196
- withThresholdEcdsaSigningQueue: (queueArgs) => withThresholdEcdsaSigningQueue({
1197
- queueByKey: this.thresholdEcdsaSigningQueueByKey,
1198
- ...queueArgs
1199
- }),
1200
- emailOtpSessions: this.emailOtpSessions
1201
- };
1202
- this.recoveryPublicDeps = createBrowserRecoveryPublicDeps({
1203
- seamsWebConfigs: this.seamsWebConfigs,
1204
- runtimePorts: this.runtimePorts,
1205
- signerWorkerManager: this.signerWorkerManager,
1206
- warmSigning: this.warmSigning,
1207
- touchConfirm: this.touchConfirm,
1208
- passkeyMpcSession: this.passkeyMpcSession,
1209
- passkeyMpcExport: assembly.passkeyMpcExport,
1210
- emailOtpSessions: this.emailOtpSessions,
1211
- thresholdEcdsaBootstrapQueueByWallet: this.thresholdEcdsaBootstrapQueueByWallet,
1212
- thresholdEcdsaSigningQueueByKey: this.thresholdEcdsaSigningQueueByKey,
1213
- thresholdEd25519CommitQueueByKey: this.thresholdEd25519CommitQueueByKey,
1214
- getWalletSessionActivationDeps: () => this.enginePorts.walletSessionActivationDeps,
1215
- resolvePasskeyEd25519YaoExportContext: this.resolveExactPasskeyEd25519YaoExportContext.bind(this),
1216
- resolveEmailOtpEd25519YaoExportContext: this.resolveEmailOtpEd25519YaoExportContext.bind(this),
1217
- getSigningSessionCoordinator: () => this.enginePorts.signingSessionCoordinator,
1218
- getTheme: () => this.appearance.theme.mode,
1219
- ed25519YaoPublicCapabilityLanes: deps.ed25519YaoPublicCapabilityReferences,
1220
- isEd25519YaoPublicCapabilityActive: this.isEd25519YaoPublicCapabilityActive.bind(this),
1221
- readActiveWalletSessionAuthorization: readBrowserExactNearEd25519WalletSessionAuthorization.bind(null, this.seamsWebConfigs.network.relayer.url),
1222
- listEcdsaSigningCapabilitiesForWallet: (input, statusReads) => listBrowserEcdsaSigningCapabilitiesForWallet({
1223
- seamsWebConfigs: this.seamsWebConfigs,
1224
- touchIdPrompt: this.touchIdPrompt,
1225
- stores: deps.signingEngineStores,
1226
- emailOtpSessions: this.emailOtpSessions,
1227
- sealedSigningSessionStore: deps.sealedSigningSessionStore
1228
- }, input, statusReads),
1229
- resolveOwnerLaneScope: (walletId) => this.resolveSelectedOwnerLaneScope(walletId)
1230
- });
1231
- this.enginePorts = createBrowserSigningSurfaceEnginePorts({
1232
- runtimePorts: this.runtimePorts,
1233
- stores: deps.signingEngineStores,
1234
- ed25519YaoPublicCapabilityReferences: deps.ed25519YaoPublicCapabilityReferences,
1235
- seamsWebConfigs: this.seamsWebConfigs,
1236
- nearClient: this.nearClient,
1237
- touchIdPrompt: this.touchIdPrompt,
1238
- userPreferencesManager: this.userPreferencesManager,
1239
- nonceCoordinator: this.nonceCoordinator,
1240
- touchConfirm: this.touchConfirm,
1241
- passkeyMpcSession: this.passkeyMpcSession,
1242
- passkeyMpcExport: assembly.passkeyMpcExport,
1243
- signerWorkerManager: this.signerWorkerManager,
1244
- emailOtpSessions: this.emailOtpSessions,
1245
- warmSigning: this.warmSigning,
1246
- sealedSigningSessionStore: deps.sealedSigningSessionStore,
1247
- ecdsaBootstrapStore: this.ecdsaBootstrapStore,
1248
- thresholdEcdsaBootstrapQueueByWallet: this.thresholdEcdsaBootstrapQueueByWallet,
1249
- thresholdEcdsaSigningQueueByKey: this.thresholdEcdsaSigningQueueByKey,
1250
- thresholdEd25519CommitQueueByKey: this.thresholdEd25519CommitQueueByKey,
1251
- getWorkerBaseOrigin: () => this.workerBaseOrigin,
1252
- workerWarmupPolicy: deps.workerWarmupPolicy,
1253
- getTheme: () => this.appearance.theme.mode,
1254
- ensureSealedRefreshStartupParity: () => this.ensureSealedRefreshStartupParity(),
1255
- resolveOwnerLaneScope: (walletId) => this.resolveSelectedOwnerLaneScope(walletId),
1256
- getEnginePorts: () => this.enginePorts,
1257
- getRegistrationPublicDeps: () => this.registrationPublicDeps,
1258
- prepareNearEd25519YaoMaterialBoundary: this.prepareExactNearEd25519YaoMaterialBoundary.bind(this)
1259
- });
1260
- this.signingSessionLifecycleSubscription = this.enginePorts.signingSessionCoordinator.subscribeLifecycle(this.publishSdkLifecycleEvent.bind(this));
1261
- this.nearProvisioningUnsubscribe = subscribeToNearProvisioning(this.publishNearProvisioningLifecycleEvent.bind(this));
1262
- this.ed25519YaoPageLifecycleOwner = new Ed25519YaoPageLifecycleOwner(typeof window === "undefined" ? null : window, this.enginePorts.ed25519YaoActiveClients);
1263
- const warmSessionPublicDeps = createBrowserWarmSessionPublicDeps({
1264
- seamsWebConfigs: this.seamsWebConfigs,
1265
- stores: deps.signingEngineStores,
1266
- touchIdPrompt: this.touchIdPrompt,
1267
- touchConfirm: this.touchConfirm,
1268
- passkeyMpcSession: this.passkeyMpcSession,
1269
- warmSigning: this.warmSigning,
1270
- runtimePorts: this.runtimePorts,
1271
- thresholdEcdsaBootstrapQueueByWallet: this.thresholdEcdsaBootstrapQueueByWallet,
1272
- ensureSealedRefreshStartupParity: () => this.ensureSealedRefreshStartupParity(),
1273
- enginePorts: this.enginePorts
1274
- });
1275
- this.passkeyPublicDeps = warmSessionPublicDeps.passkeyPublicDeps;
1276
- this.warmCapabilitiesPublicDeps = warmSessionPublicDeps.warmCapabilitiesPublicDeps;
1277
- this.registrationPublicDeps = {
1278
- accountLifecycle: this.enginePorts.registrationAccountLifecycleDeps,
1279
- session: this.enginePorts.registrationSessionDeps
1280
- };
1281
- setUnlockedCustodyEnvelopeUpgradeSinkV1((upgrade) => {
1282
- this.persistUpgradedWalletCustodyEnvelopeV1(upgrade);
1283
- });
1284
- deps.initializeRuntime({
1285
- config: this.seamsWebConfigs,
1286
- userPreferencesManager: this.userPreferencesManager,
1287
- getWorkerBaseOrigin: () => this.workerBaseOrigin,
1288
- setWorkerBaseOrigin: (origin) => {
1289
- this.workerBaseOrigin = origin;
1290
- this.signerWorkerManager.setWorkerBaseOrigin(origin);
1291
- this.touchConfirm.setWorkerBaseOrigin?.(origin);
1292
- assembly.passkeyMpcExport.setWorkerBaseOrigin(origin);
1293
- this.passkeyMpcSession.setWorkerBaseOrigin(origin);
1294
- }
1295
- });
1296
- }
1297
- async resolveOperationStepUpCredential(args) {
1298
- return {
1299
- kind: "wallet_session_opaque",
1300
- walletSessionToken: (await resolveExactNearEd25519WalletSessionOperationCredentialForStepUp({
1301
- walletId: args.walletId,
1302
- proof: args.proof
1303
- })).token
1304
- };
1305
- }
1306
- async ensureSealedRefreshStartupParity() {
1307
- await this.sealedRefreshStartupParityPromise;
1308
- if (this.sealedRefreshStartupParityError) throw this.sealedRefreshStartupParityError;
1309
- }
1310
- /**
1311
- * Runs one wallet custody key set for NEAR, from the registration flow.
1312
- *
1313
- * The flow never touches the ceremony worker itself: a run's seed lives in
1314
- * that worker's wasm state across three steps, so this is the one place the
1315
- * channel is reached and the one place the Router round is wired to it.
1316
- *
1317
- * The Router round is performed through the same HTTP transport the
1318
- * PRF-derived path used, so the execute request goes to the same endpoint
1319
- * with the same trace context — only the root behind it changed.
1320
- */
1321
- async establishWalletCustodyNearEd25519KeySet(args) {
1322
- const transport = new RouterAbEd25519YaoHttpActivationTransportV1({
1323
- routerOrigin: args.routerOrigin,
1324
- authorization: {
1325
- kind: "bearer",
1326
- value: args.authorization
1327
- },
1328
- fetch: globalThis.fetch,
1329
- ...args.traceContext ? { traceContext: args.traceContext } : {}
1330
- });
1331
- let activationResultJson = null;
1332
- const established = await establishNearEd25519CustodyV1({
1333
- runStep: walletCustodyCeremonyStepRunner(this.walletCustodyCeremonyTransportV1()),
1334
- walletId: args.walletId,
1335
- factorJson: args.factorJson,
1336
- factorSecret: args.factorSecret,
1337
- nearEd25519SigningKeyId: args.nearEd25519SigningKeyId,
1338
- registrationCeremonyId: args.registrationCeremonyId,
1339
- yaoAdmission: args.admissionReceipt,
1340
- yaoApplication: args.admissionRequest.application_binding,
1341
- participantIds: args.participantIds,
1342
- runRouterRound: async (yaoExecuteRequestJson) => {
1343
- const response = await transport.send({
1344
- kind: "execute",
1345
- path: ROUTER_AB_ED25519_YAO_REGISTRATION_EXECUTE_PATH_V1,
1346
- body: JSON.parse(yaoExecuteRequestJson)
1347
- });
1348
- if (!response.ok) throw new Error(`Router Ed25519 Yao execute failed: ${response.message}`);
1349
- activationResultJson = JSON.stringify(response.value);
1350
- return activationResultJson;
1351
- }
1352
- });
1353
- if (!activationResultJson) throw new Error("the wallet custody NEAR run completed without a Router activation result");
1354
- if (!established.localMaterial) throw new Error("the wallet custody NEAR run sealed no local material");
1355
- return {
1356
- recoveryCodes: established.recoveryCodes,
1357
- commitPayload: established.commitPayload,
1358
- activationReference: established.activationReference,
1359
- localMaterial: established.localMaterial,
1360
- metadata: walletCustodyEd25519ActiveClientMetadataV1({
1361
- admissionRequest: args.admissionRequest,
1362
- activationResultJson
1363
- })
1364
- };
1365
- }
1366
- async recoverWalletCustodyManifest(args) {
1367
- return await recoverWalletCustodyManifestV1({
1368
- ...args,
1369
- runStep: walletCustodyCeremonyStepRunner(this.walletCustodyCeremonyTransportV1()),
1370
- workerCtx: this.signerWorkerManager.getContext()
1371
- });
1372
- }
1373
- async createWalletRecoveryReplacementCredential(args) {
1374
- const requestId = walletIframeRequestIdFromBoundary(`wallet-recovery:${args.registration.challengeId}`);
1375
- const replacement = walletRecoveryReplacementCredentialFromRegistrationV1(serializePreparedRegistrationCredential(await this.touchIdPrompt.generateRegistrationCredentialsInternal({
1376
- kind: "wallet_recovery",
1377
- walletId: args.walletId,
1378
- intendedUserName: args.walletId,
1379
- recoveryRegistration: args.registration,
1380
- prompt: {
1381
- kind: "immediate",
1382
- requestId,
1383
- cancellation: args.cancellation
1384
- }
1385
- })));
1386
- return {
1387
- registration: redactedPasskeyRegistrationCredential(replacement.registration),
1388
- credentialIdB64u: replacement.credentialIdB64u,
1389
- factorSecret: replacement.factorSecret
1390
- };
1391
- }
1392
- async joinWalletCustodyNearEd25519KeySet(args) {
1393
- const transport = new RouterAbEd25519YaoHttpActivationTransportV1({
1394
- routerOrigin: args.routerOrigin,
1395
- authorization: {
1396
- kind: "bearer",
1397
- value: args.authorization
1398
- },
1399
- fetch: globalThis.fetch,
1400
- ...args.traceContext ? { traceContext: args.traceContext } : {}
1401
- });
1402
- let activationResultJson = null;
1403
- const joined = await joinNearEd25519CustodyV1({
1404
- runStep: walletCustodyCeremonyStepRunner(this.walletCustodyCeremonyTransportV1()),
1405
- preparation: args.preparation,
1406
- beforeRouterRound: args.beforeRouterRound,
1407
- custodyJson: args.custodyJson,
1408
- factorSecret: args.factorSecret,
1409
- nearEd25519SigningKeyId: args.nearEd25519SigningKeyId,
1410
- registrationCeremonyId: args.registrationCeremonyId,
1411
- yaoAdmission: args.admissionReceipt,
1412
- yaoApplication: args.admissionRequest.application_binding,
1413
- participantIds: args.participantIds,
1414
- runRouterRound: async (yaoExecuteRequestJson) => {
1415
- const response = await transport.send({
1416
- kind: "execute",
1417
- path: ROUTER_AB_ED25519_YAO_REGISTRATION_EXECUTE_PATH_V1,
1418
- body: JSON.parse(yaoExecuteRequestJson)
1419
- });
1420
- if (!response.ok) throw new Error(`Router Ed25519 Yao execute failed: ${response.message}`);
1421
- activationResultJson = JSON.stringify(response.value);
1422
- return activationResultJson;
1423
- }
1424
- });
1425
- if (!activationResultJson || !joined.localMaterial) throw new Error("the wallet custody NEAR join produced no local signing material");
1426
- return {
1427
- commitPayload: joined.commitPayload,
1428
- activationReference: joined.activationReference,
1429
- localMaterial: joined.localMaterial,
1430
- metadata: walletCustodyEd25519ActiveClientMetadataV1({
1431
- admissionRequest: args.admissionRequest,
1432
- activationResultJson
1433
- })
1434
- };
1435
- }
1436
- async rejoinWalletCustodyNearEd25519KeySet(args) {
1437
- const transport = new RouterAbEd25519YaoHttpActivationTransportV1({
1438
- routerOrigin: args.routerOrigin,
1439
- authorization: {
1440
- kind: "bearer",
1441
- value: `Bearer ${args.walletSessionToken}`
1442
- },
1443
- fetch: globalThis.fetch
1444
- });
1445
- const recoveryRequest = await buildWalletSessionEd25519RecoveryAdmissionRequestV1({ basis: args.recoveryBasis });
1446
- const admitted = await admitWalletRecoveryEd25519V1({
1447
- request: recoveryRequest,
1448
- transport
1449
- });
1450
- const rejoined = await rejoinNearEd25519CustodyV1({
1451
- runStep: walletCustodyCeremonyStepRunner(this.walletCustodyCeremonyTransportV1()),
1452
- walletId: args.walletId,
1453
- custodyJson: args.custodyJson,
1454
- factorSecret: args.factorSecret,
1455
- nearEd25519SigningKeyId: args.nearEd25519SigningKeyId,
1456
- recoveryLifecycleId: recoveryRequest.scope.lifecycle_id,
1457
- yaoAdmission: admitted.receipt,
1458
- yaoApplication: admitted.request.application_binding,
1459
- participantIds: args.recoveryBasis.participantIds,
1460
- registeredPublicKeyB64u: base64UrlEncode(Uint8Array.from(args.recoveryBasis.registeredPublicKey)),
1461
- runRouterRound: (executeRequestJson) => executeWalletRecoveryEd25519RoundV1({
1462
- executeRequestJson,
1463
- transport
1464
- }),
1465
- activateRouterRecovery: (protocolResultJson) => activateWalletRecoveryEd25519V1({
1466
- request: recoveryRequest,
1467
- protocolResultJson,
1468
- transport
1469
- })
1470
- });
1471
- if (!rejoined.localMaterial) throw new Error("the wallet custody NEAR cold rejoin produced no local signing material");
1472
- return {
1473
- commitPayload: rejoined.commitPayload,
1474
- activationReference: rejoined.activationReference,
1475
- localMaterial: rejoined.localMaterial,
1476
- metadata: walletRecoveryEd25519ActiveClientMetadataV1({
1477
- admissionRequest: recoveryRequest,
1478
- activationResultJson: rejoined.activationResultJson,
1479
- activationReceipt: rejoined.activationReceipt
1480
- })
1481
- };
1482
- }
1483
- async establishWalletCustodyEvmFamilyKeySet(args) {
1484
- return await establishEvmFamilyCustodyV1({
1485
- ...args,
1486
- runStep: walletCustodyCeremonyStepRunner(this.walletCustodyCeremonyTransportV1())
1487
- });
1488
- }
1489
- async joinWalletCustodyEvmFamilyKeySet(args) {
1490
- return await joinEvmFamilyCustodyV1({
1491
- ...args,
1492
- runStep: walletCustodyCeremonyStepRunner(this.walletCustodyCeremonyTransportV1())
1493
- });
1494
- }
1495
- async rejoinWalletCustodyEvmFamilyKeySet(args) {
1496
- return await rejoinEvmFamilyCustodyV1({
1497
- ...args,
1498
- runStep: walletCustodyCeremonyStepRunner(this.walletCustodyCeremonyTransportV1())
1499
- });
1500
- }
1501
- async restoreWalletCustodyEcdsaContinuity(args) {
1502
- const imported = await importWalletCustodyEcdsaContinuity({
1503
- ...args,
1504
- store: new IndexedDbEcdsaCapabilityManifestStore()
1505
- });
1506
- if (imported.kind !== "committed") throw new Error(`wallet custody ECDSA import returned ${imported.kind}`);
1507
- const materialActivation = routerAbMpcMaterialActivationRefFromWire(args.publicCapability.material_activation);
1508
- const opened = await openEcdsaRoleLocalSigningMaterialWasm({
1509
- workerCtx: this.signerWorkerManager.getContext(),
1510
- authority: args.authority,
1511
- materialActivation
1512
- });
1513
- if (!opened.ok) throw new Error(`wallet custody ECDSA material open returned ${opened.reason}`);
1514
- return {
1515
- materialActivation,
1516
- materialRef: opened.materialRef
1517
- };
1518
- }
1519
- async persistWalletCustodyEd25519Material(args) {
1520
- await persistWalletCustodyEd25519MaterialV1({
1521
- store: this.signerWorkerManager.getContext().nearKeyMaterialStore,
1522
- binding: args.binding,
1523
- sealed: args.sealed
1524
- });
1525
- }
1526
- async loadWalletCustodyEd25519Material(args) {
1527
- return await loadWalletCustodyEd25519MaterialV1({
1528
- store: this.signerWorkerManager.getContext().nearKeyMaterialStore,
1529
- nearAccountId: args.nearAccountId,
1530
- signerSlot: args.signerSlot,
1531
- expectedRegisteredPublicKeyB64u: args.expectedRegisteredPublicKeyB64u
1532
- });
1533
- }
1534
- async loadEmailOtpWalletCustodyEd25519Material(args) {
1535
- const loaded = await this.loadWalletCustodyEd25519Material({
1536
- nearAccountId: args.nearAccountId,
1537
- signerSlot: args.signerSlot,
1538
- expectedRegisteredPublicKeyB64u: ""
1539
- });
1540
- return loaded.kind === "found" ? loaded : { kind: "absent" };
1541
- }
1542
- async deleteWalletCustodyEd25519Material(args) {
1543
- await deleteWalletCustodyEd25519MaterialV1({
1544
- store: this.signerWorkerManager.getContext().nearKeyMaterialStore,
1545
- nearAccountId: args.nearAccountId,
1546
- signerSlot: args.signerSlot
1547
- });
1548
- }
1549
- async assertSealedRefreshStartupParity() {
1550
- await this.ensureSealedRefreshStartupParity();
1551
- }
1552
- async discoverPersistedSessionsForWallet(args) {
1553
- return await discoverPersistedSessionsForWallet(this.sessionPublicDeps, args);
1554
- }
1555
- isEd25519YaoPublicCapabilityActive(reference) {
1556
- switch (reference.auth.kind) {
1557
- case WALLET_AUTH_METHODS.emailOtp: return true;
1558
- case WALLET_AUTH_METHODS.passkey: return this.enginePorts.ed25519YaoActiveClients.resolve({
1559
- walletId: reference.walletId,
1560
- nearAccountId: reference.nearAccountId,
1561
- materialActivation: reference.materialActivation
1562
- }) !== null;
1563
- default:
1564
- reference.auth;
1565
- throw new Error("Unsupported Ed25519 public capability auth method");
1566
- }
1567
- }
1568
- async readPersistedAvailableSigningLanes(args) {
1569
- return await readPersistedAvailableSigningLanes(this.sessionPublicDeps, args);
1570
- }
1571
- async readOwnerScopedSigningLanes(args, statusReads) {
1572
- return await readOwnerScopedSigningLanes(this.sessionPublicDeps, args, statusReads);
1573
- }
1574
- /**
1575
- * Resolves the selected active Wallet Authority and auth method to one exact
1576
- * owner scope. Session availability is resolved by the lane inventory so an
1577
- * expired session can enter operation step-up.
1578
- */
1579
- async resolveSelectedOwnerLaneScope(walletId) {
1580
- const parsedWalletId = parseWalletId(walletId);
1581
- if (!parsedWalletId.ok) throw new Error(parsedWalletId.error.message);
1582
- const stores = {
1583
- getWalletAuthMethodV2: (id) => IndexedDBManager.getWalletAuthMethodV2(id),
1584
- listWalletAuthMethodsForWallet: (id) => IndexedDBManager.listWalletAuthMethodsForWallet(id),
1585
- getWalletPasskeyAuthenticator: (input) => IndexedDBManager.getWalletPasskeyAuthenticator(input),
1586
- readEmailOtpProviderSubjectForWallet: (id) => readEmailOtpProviderSubjectForWalletV1(IndexedDBManager, id)
1587
- };
1588
- const selected = await IndexedDBManager.resolveSelectedWalletAuthority(String(parsedWalletId.value));
1589
- if (selected.kind === "resolved") {
1590
- const { selection, authMethod, authority } = selected;
1591
- if (selection.walletId !== parsedWalletId.value || selection.walletAuthMethodId !== authMethod.walletAuthMethodId || authMethod.walletId !== parsedWalletId.value || authMethod.walletAuthorityId !== authority.authorityId || authority.walletId !== parsedWalletId.value) throw new Error("[SigningEngine] selected Wallet Authority identity mismatch");
1592
- if (selection.lockState !== "unlocked") throw fullWalletLoginRequired("wallet_locked");
1593
- if (authMethod.status !== "active") throw fullWalletLoginRequired("method_unavailable");
1594
- if (authority.state !== "active") throw fullWalletLoginRequired("authority_unavailable");
1595
- if (authority.provenance.kind === "device_link" && authMethod.kind === "passkey" && authority.signerActivations.ed25519) return buildExactPasskeyOwnerLaneScope({
1596
- authMethod,
1597
- signerSlot: await resolveLinkedPasskeyOwnerSignerSlot({
1598
- walletId: parsedWalletId.value,
1599
- authMethod,
1600
- signerMaterials: selected.signerMaterials,
1601
- publicLaneStore: this.ed25519YaoPublicCapabilityReferences
1602
- })
1603
- });
1604
- if (authority.provenance.kind === "device_link" && authMethod.kind === "passkey" && authority.signerActivations.ecdsa) return buildExactEcdsaPasskeyOwnerLaneScope({ authMethod });
1605
- if (authority.provenance.kind === "device_link" && authMethod.kind === "email_otp" && authority.signerActivations.ecdsa) {
1606
- const holderRuntime = resolveLinkedEcdsaHolderRuntimeV1({
1607
- walletId: parsedWalletId.value,
1608
- materialActivation: authority.signerActivations.ecdsa.materialActivation
1609
- });
1610
- if (!holderRuntime || holderRuntime.authorityId !== authority.authorityId || !isEmailOtpWalletAuthAuthority(holderRuntime.factorAuthority)) throw new Error("[SigningEngine] selected linked Email OTP authority has no exact ECDSA holder runtime");
1611
- const authorityRef = await walletAuthAuthorityRef({ authority: holderRuntime.factorAuthority });
1612
- if (authorityRef.walletId !== parsedWalletId.value || authorityRef.walletAuthMethodId !== authMethod.walletAuthMethodId) throw new Error("[SigningEngine] selected linked Email OTP authority has no exact ECDSA holder runtime");
1613
- return buildExactLinkedEmailOtpOwnerLaneScope({
1614
- authMethod,
1615
- factorAuthority: holderRuntime.factorAuthority,
1616
- authorityRef
1617
- });
1618
- }
1619
- return await resolveExactOwnerLaneScope({
1620
- authMethod,
1621
- stores
1622
- });
1623
- }
1624
- const reason = selected.kind === "integrity_error" ? `: ${selected.reason}` : "";
1625
- throw new Error(`[SigningEngine] selected Wallet Authority is ${selected.kind}${reason}`);
1626
- }
1627
- readWalletAuthenticationState() {
1628
- return this.walletAuthenticationState;
1629
- }
1630
- async retireActiveWalletSessionAuthorizationForLock(walletId) {
1631
- const retiredAtMs = Date.now();
1632
- if ((await walletSessionAuthorizations.retireExactActiveForWallet({
1633
- walletId,
1634
- reason: "wallet_locked",
1635
- retiredAtMs
1636
- })).length > 0) this.destroyUnlockedWalletEd25519ExportRootCapabilitiesV1({
1637
- kind: "wallet",
1638
- walletId: String(walletId)
1639
- });
1640
- }
1641
- async advanceWalletLockGeneration(walletId) {
1642
- return IndexedDBManager.advanceWalletLockGeneration({
1643
- walletId,
1644
- lockedAtMs: Date.now()
1645
- });
1646
- }
1647
- async markWalletSelectionUnlocked(input) {
1648
- await IndexedDBManager.markWalletSelectionUnlocked({
1649
- walletId: input.walletId,
1650
- walletAuthMethodId: input.walletAuthMethodId,
1651
- unlockedAtMs: Date.now()
1652
- });
1653
- }
1654
- async markSelectedEmailOtpWalletAuthorityUnlocked(input) {
1655
- await this.markWalletSelectionUnlocked(input);
1656
- }
1657
- /**
1658
- * Every route that lands a wallet in the authenticated state goes through
1659
- * here — passkey unlock, email OTP login, the hosted auth menu, and session
1660
- * restore. Binding the preferences manager at this choke point is what makes
1661
- * per-wallet preferences real: without it the manager stays on "no last
1662
- * user", so reads answer the built-in defaults while the wallet's persisted
1663
- * choices sit unread, and writes stay memory-only and evaporate on reload —
1664
- * the Confirmer UI toggle looked applied but silently reverted every page
1665
- * load. setCurrentWallet also notifies, which pushes PREFERENCES_CHANGED to
1666
- * the app origin so its mirrored uiMode follows the wallet too.
1667
- */
1668
- applyAuthenticatedWalletState(state) {
1669
- this.walletAuthenticationState = state;
1670
- this.userPreferencesManager.setCurrentWallet(state.walletId);
1671
- }
1672
- setWalletAuthenticated(state) {
1673
- const previous = this.walletAuthenticationState;
1674
- if (previous.kind === "authenticated" && String(previous.walletId) !== String(state.walletId)) this.destroyUnlockedWalletEd25519ExportRootCapabilitiesV1({
1675
- kind: "wallet",
1676
- walletId: String(previous.walletId)
1677
- });
1678
- this.walletAuthenticationRestoreGeneration += 1;
1679
- this.applyAuthenticatedWalletState(state);
1680
- }
1681
- clearWalletAuthentication() {
1682
- this.walletAuthenticationRestoreGeneration += 1;
1683
- this.walletAuthenticationState = { kind: "signed_out" };
1684
- this.destroyUnlockedWalletEd25519ExportRootCapabilitiesV1({ kind: "all" });
1685
- }
1686
- clearWalletAuthenticationIfCurrent(expected) {
1687
- if (this.walletAuthenticationState !== expected) return false;
1688
- this.clearWalletAuthentication();
1689
- return true;
1690
- }
1691
- /**
1692
- * The wallet custody ceremony worker as the small structural port the
1693
- * custody modules take, so they can be exercised without a worker.
1694
- */
1695
- walletCustodyCeremonyTransportV1() {
1696
- const workerContext = this.getSignerWorkerContext();
1697
- return { requestOperation: requestWalletCustodyCeremonyOperation.bind(void 0, workerContext) };
1698
- }
1699
- /**
1700
- * Parks the wallet custody seed inside the ceremony worker for the lifetime of
1701
- * the just-activated owner Wallet Session, reusing the factor secret this
1702
- * registration or unlock already collected. Failure is absorbed: the wallet
1703
- * stays usable, and device linking fails closed with `wallet_unlock_required`
1704
- * until the next unlock.
1705
- */
1706
- async establishUnlockedWalletEd25519ExportRootCapabilityV1(input) {
1707
- try {
1708
- const binding = input.existingEnvelope.binding;
1709
- if (!isWalletCustodySeedBinding(binding) && binding.kind !== "ed25519_yao_client_root_v1") return;
1710
- if (input.existingEnvelope.factor.kind !== "passkey") throw new Error("unlocked export-root capability requires a passkey envelope factor");
1711
- const existingFactorSecret = base64UrlDecode(input.passkeyPrfFirstB64u);
1712
- try {
1713
- await establishUnlockedWalletEd25519ExportRootCapabilityV1(this.walletCustodyCeremonyTransportV1(), {
1714
- existingEnvelope: input.existingEnvelope,
1715
- existingFactorSecret,
1716
- walletId: input.walletId,
1717
- walletAuthMethodId: input.walletAuthMethodId,
1718
- walletSessionId: input.walletSessionId,
1719
- expiresAtMs: input.expiresAtMs
1720
- });
1721
- } finally {
1722
- existingFactorSecret.fill(0);
1723
- }
1724
- } catch (error) {
1725
- console.warn("[BrowserSigningSurface] unlocked Ed25519 export-root capability was not established:", error instanceof Error ? error.message : String(error || "unknown error"));
1726
- }
1727
- }
1728
- /**
1729
- * Stores the reseal of an unbound envelope under the method that opened it.
1730
- *
1731
- * Absorbed the same way establishment is, and for the same reason: the V2 row
1732
- * still opens the wallet, so a failure here costs a retry at the next unlock
1733
- * and nothing else. Surfacing it would interrupt a user who has no action to
1734
- * take.
1735
- */
1736
- async persistUpgradedWalletCustodyEnvelopeV1(upgrade) {
1737
- try {
1738
- const relayerUrl = String(this.seamsWebConfigs.network.relayer?.url || "").trim();
1739
- if (!relayerUrl) return;
1740
- const parsedWalletId = parseWalletId(upgrade.walletId);
1741
- if (!parsedWalletId.ok) return;
1742
- const walletSessionToken = (await resolveActiveEd25519WalletSessionAuthorization(parsedWalletId.value, relayerUrl))?.operationCredential.token;
1743
- if (!walletSessionToken) return;
1744
- const outcome = await upgradeWalletCustodyEnvelopeOwnership({
1745
- relayUrl: relayerUrl,
1746
- walletId: upgrade.walletId,
1747
- walletSessionToken: String(walletSessionToken),
1748
- envelope: upgrade.envelope
1749
- });
1750
- if (outcome.kind === "upgraded" || outcome.kind === "already_owned") return;
1751
- console.warn("[BrowserSigningSurface] the upgraded custody envelope was not stored:", outcome.message);
1752
- } catch (error) {
1753
- console.warn("[BrowserSigningSurface] the upgraded custody envelope was not stored:", error instanceof Error ? error.message : String(error || "unknown error"));
1754
- }
1755
- }
1756
- async destroyUnlockedWalletEd25519ExportRootCapabilitiesV1(scope) {
1757
- await destroyUnlockedWalletEd25519ExportRootCapabilitiesV1(this.walletCustodyCeremonyTransportV1(), scope);
1758
- }
1759
- async runWarmCriticalResources(accountContext) {
1760
- try {
1761
- await this.ensureSealedRefreshStartupParity();
1762
- } catch (error) {
1763
- if (!isRetryableSealedRefreshCapabilityFetchError(error)) throw error;
1764
- console.warn("[BrowserSigningSurface] warmCriticalResources skipped retryable sealed-refresh capability fetch failure", error instanceof Error ? error.message : String(error || "unknown error"));
1765
- }
1766
- return await this.enginePorts.getManagerConveniencePorts().warmCriticalResources(accountContext);
1767
- }
1768
- async warmCriticalResources(accountContext) {
1769
- if (__isWalletIframeHostMode() && accountContext === void 0) {
1770
- const existing = this.hostWarmCriticalResourcesTask;
1771
- if (existing) return await existing;
1772
- const task = this.runWarmCriticalResources();
1773
- this.hostWarmCriticalResourcesTask = task;
1774
- task.catch(() => {
1775
- if (this.hostWarmCriticalResourcesTask === task) this.hostWarmCriticalResourcesTask = null;
1776
- });
1777
- return await task;
1778
- }
1779
- return await this.runWarmCriticalResources(accountContext);
1780
- }
1781
- async prewarmEmailOtpYao(request) {
1782
- return await this.signerWorkerManager.prewarmEmailOtpYao(request);
1783
- }
1784
- async prewarmEcdsaRegistrationCrypto() {
1785
- return await this.signerWorkerManager.prewarmEcdsaRegistrationCrypto();
1786
- }
1787
- getRpId() {
1788
- return this.touchIdPrompt.getRpId();
1789
- }
1790
- getSignerWorkerContext() {
1791
- return this.enginePorts.walletSessionActivationDeps.getSignerWorkerContext();
1792
- }
1793
- getNonceCoordinator() {
1794
- return this.nonceCoordinator;
1795
- }
1796
- setAppearance(appearance) {
1797
- this.appearance = appearance;
1798
- }
1799
- setWalletIframeSurfaceMeasurementBinding(binding) {
1800
- this.touchConfirm.getContext().surfaceMeasurementBinding = binding;
1801
- }
1802
- getWalletIframeSurfaceMeasurementBinding() {
1803
- return this.touchConfirm.getContext().surfaceMeasurementBinding;
1804
- }
1805
- getUserPreferences() {
1806
- return this.userPreferencesManager;
1807
- }
1808
- async signNear(request) {
1809
- const walletId = request.args.commandSubject.walletSession.walletId;
1810
- try {
1811
- return await signNear(this.enginePorts.nearSigningDeps, request);
1812
- } catch (error) {
1813
- if (isWalletSigningStateFailure(error)) {
1814
- await this.terminateWalletStateAfterSigningFailure(walletId);
1815
- throw error;
1816
- }
1817
- throw error;
1818
- }
1819
- }
1820
- async terminateWalletStateAfterSigningFailure(walletId) {
1821
- const authentication = this.readWalletAuthenticationState();
1822
- let authenticationCleared = false;
1823
- try {
1824
- await this.advanceWalletLockGeneration(walletId);
1825
- } catch {}
1826
- try {
1827
- await this.retireActiveWalletSessionAuthorizationForLock(walletId);
1828
- } catch {}
1829
- try {
1830
- authenticationCleared = this.clearWalletAuthenticationIfCurrent(authentication);
1831
- } catch {}
1832
- if (authenticationCleared) {
1833
- try {
1834
- this.nonceCoordinator.clearAll();
1835
- } catch {}
1836
- try {
1837
- this.clearThresholdEcdsaSigningQueue();
1838
- } catch {}
1839
- }
1840
- try {
1841
- await this.clearVolatileWarmSigningMaterial(walletId);
1842
- } catch {}
1843
- }
1844
- async ensureNearEd25519YaoCapabilityForSigning(subject) {
1845
- const rehydrationKey = nearEd25519CapabilityRehydrationKey(subject);
1846
- const existingRehydration = this.nearEd25519CapabilityRehydrationBySubject.get(rehydrationKey);
1847
- if (existingRehydration) {
1848
- const rebound = await existingRehydration;
1849
- const rehydrated = await this.resolveActiveNearEd25519YaoSigningLane(rebound.subject);
1850
- if (rehydrated) return rehydrated;
1851
- throw new Error("[SigningEngine][near] joined rehydration did not publish an active lane");
1852
- }
1853
- const rehydration = this.rehydrateNearEd25519YaoCapabilityForSigning(subject);
1854
- this.nearEd25519CapabilityRehydrationBySubject.set(rehydrationKey, rehydration);
1855
- try {
1856
- return (await rehydration).material;
1857
- } finally {
1858
- if (this.nearEd25519CapabilityRehydrationBySubject.get(rehydrationKey) === rehydration) this.nearEd25519CapabilityRehydrationBySubject.delete(rehydrationKey);
1859
- }
1860
- }
1861
- async rehydrateExactPasskeyEd25519YaoCapabilityForSigning(args) {
1862
- const identity = nearEd25519MaterialIdentityFromBoundaryInput(args);
1863
- return await this.ensureNearEd25519YaoCapabilityForSigning(args.laneIdentity !== void 0 ? {
1864
- kind: "exact_lane",
1865
- laneIdentity: args.laneIdentity
1866
- } : {
1867
- kind: "material_identity",
1868
- materialIdentity: identity
1869
- });
1870
- }
1871
- async prepareMaterialIdentityNearEd25519YaoSigning(args) {
1872
- const identity = args.materialIdentity;
1873
- const activeForAccount = this.enginePorts.ed25519YaoActiveClients.resolveForWalletAccount({
1874
- walletId: identity.signer.account.wallet.walletId,
1875
- nearAccountId: identity.signer.account.nearAccountId
1876
- });
1877
- const publicCapabilityMaterialActivation = await resolveNearEd25519PublicCapabilityMaterialActivation({
1878
- store: this.ed25519YaoPublicCapabilityReferences,
1879
- identity
1880
- });
1881
- const passkeyAuthorizationRead = identity.auth.kind === WALLET_AUTH_METHODS.passkey ? await this.readExactNearEd25519WalletSessionAuthorization(args.walletId) : null;
1882
- const passkeyAuthorization = passkeyAuthorizationRead ? classifyNearEd25519WalletSessionAuthorization(passkeyAuthorizationRead) : null;
1883
- if (identity.auth.kind === WALLET_AUTH_METHODS.passkey && publicCapabilityMaterialActivation) {
1884
- const activeMaterial = this.enginePorts.ed25519YaoActiveClients.resolve({
1885
- walletId: identity.signer.account.wallet.walletId,
1886
- nearAccountId: identity.signer.account.nearAccountId,
1887
- materialActivation: publicCapabilityMaterialActivation
1888
- });
1889
- const liveRuntime = nearEd25519YaoRuntimeObservation(activeMaterial);
1890
- if (activeMaterial && liveRuntime.kind === "live") {
1891
- if (passkeyAuthorization?.kind === "authorized") {
1892
- const authorization = passkeyAuthorization.authorization;
1893
- if (authorization.selectedAuthMethod.kind !== WALLET_AUTH_METHODS.passkey) throw new Error("[SigningEngine][near] active Wallet Session method is unavailable");
1894
- return await buildAuthorizedNearEd25519YaoSigningPreparation({
1895
- hydration: buildUseLiveRuntimeHydrationPlan({
1896
- authority: await walletAuthAuthorityRef({ authority: authorization.selectedFactorAuthority }),
1897
- runtime: liveRuntime.runtime,
1898
- materialActivation: publicCapabilityMaterialActivation
1899
- }),
1900
- requirement: identity.auth,
1901
- authorization
1902
- });
1903
- }
1904
- if (passkeyAuthorization?.kind !== "operation_step_up") {
1905
- if (passkeyAuthorization?.kind === "full_login_required") throw fullWalletLoginRequired(passkeyAuthorization.reason);
1906
- throw new Error("[SigningEngine][near] Wallet Session status is temporarily unavailable");
1907
- }
1908
- }
1909
- }
1910
- if (passkeyAuthorization?.kind === "full_login_required") throw fullWalletLoginRequired(passkeyAuthorization.reason);
1911
- if (passkeyAuthorization?.kind === "temporarily_unavailable") throw new Error("[SigningEngine][near] Wallet Session persistence is temporarily unavailable");
1912
- if (identity.auth.kind === WALLET_AUTH_METHODS.passkey && passkeyAuthorization?.kind === "operation_step_up") return buildAuthorizationRequiredNearEd25519YaoSigningPreparation({
1913
- hydration: (await preparePasskeyEd25519OperationMaterial({
1914
- walletId: args.walletId,
1915
- identity,
1916
- relayerUrl: this.seamsWebConfigs.network.relayer.url
1917
- })).prepared.plan,
1918
- requirement: identity.auth
1919
- });
1920
- const sealedRuntime = identity.auth.kind === WALLET_AUTH_METHODS.passkey ? await requireExactEd25519SealedRuntimeForMaterialIdentity({
1921
- walletId: args.walletId,
1922
- identity
1923
- }) : null;
1924
- const materialActivation = sealedRuntime?.sealedRecord.ed25519Restore.materialActivation ?? (activeForAccount ? nearEd25519YaoMaterialActivationFromMetadata(activeForAccount.activeClient.metadata()) : publicCapabilityMaterialActivation);
1925
- if (!materialActivation) throw invalidWalletSigningMaterial("missing_capability");
1926
- const runtimeObservation = nearEd25519YaoRuntimeObservation(this.enginePorts.ed25519YaoActiveClients.resolve({
1927
- walletId: identity.signer.account.wallet.walletId,
1928
- nearAccountId: identity.signer.account.nearAccountId,
1929
- materialActivation
1930
- }));
1931
- let hydration;
1932
- switch (identity.auth.kind) {
1933
- case WALLET_AUTH_METHODS.passkey: {
1934
- if (!sealedRuntime) throw invalidWalletSigningMaterial("missing_runtime");
1935
- if (passkeyAuthorization?.kind !== "authorized") throw new Error("[SigningEngine][near] exact Passkey authorization is unavailable");
1936
- const authorizationRead = {
1937
- kind: "found",
1938
- authorization: passkeyAuthorization.authorization
1939
- };
1940
- const walletSessionState = await rebindRouterAbEd25519WalletSessionStateFromExactRuntime({
1941
- runtime: sealedRuntime,
1942
- authorization: passkeyAuthorization.authorization,
1943
- nowMs: Date.now()
1944
- });
1945
- const warmSessionClaim = await this.ensurePasskeyEd25519WarmSessionForSigning({
1946
- runtime: sealedRuntime,
1947
- walletSessionState,
1948
- materialActivation
1949
- });
1950
- let authority;
1951
- try {
1952
- authority = await resolveBrowserNearEd25519PasskeyAuthorityForMaterial({
1953
- walletId: args.walletId,
1954
- runtime: sealedRuntime,
1955
- authorizationRead
1956
- });
1957
- } catch {
1958
- throw invalidWalletSigningMaterial("binding_mismatch");
1959
- }
1960
- const localMaterialIdentity = passkeyEd25519LocalMaterialIdentityFromExactRuntime(sealedRuntime);
1961
- const localMaterial = await readPasskeyEd25519YaoLocalMaterialLocatorV1({
1962
- store: IndexedDBManager,
1963
- walletId: String(identity.signer.account.wallet.walletId),
1964
- nearAccountId: String(identity.signer.account.nearAccountId),
1965
- nearEd25519SigningKeyId: String(identity.signer.nearEd25519SigningKeyId),
1966
- signerSlot: identity.signer.signerSlot,
1967
- rpId: identity.auth.rpId,
1968
- credentialIdB64u: identity.auth.credentialIdB64u,
1969
- authority
1970
- });
1971
- const publicLocator = {
1972
- kind: "available",
1973
- walletId: String(identity.signer.account.wallet.walletId),
1974
- nearAccountId: String(identity.signer.account.nearAccountId),
1975
- signerSlot: identity.signer.signerSlot,
1976
- materialActivation,
1977
- authority
1978
- };
1979
- hydration = resolveNearEd25519YaoCapabilityHydrationV1({
1980
- publicLocator,
1981
- sealed: localMaterial.kind === "available" ? {
1982
- kind: "available",
1983
- authority: localMaterial.locator.authority,
1984
- materialActivation: localMaterial.locator.materialActivation,
1985
- sealedMaterial: localMaterial.locator.sealedMaterial
1986
- } : { kind: "missing" },
1987
- runtime: runtimeObservation,
1988
- unlockSource: warmSessionClaim.ok ? {
1989
- kind: "available",
1990
- authority
1991
- } : { kind: "unavailable" }
1992
- });
1993
- if (hydration.kind === "blocked" && hydration.reason === "missing_material") hydration = (await prepareExactPasskeyEd25519YaoLocalMaterialRehydration({
1994
- store: IndexedDBManager,
1995
- identity: localMaterialIdentity,
1996
- authority,
1997
- publicLocator
1998
- })).plan;
1999
- break;
2000
- }
2001
- case WALLET_AUTH_METHODS.emailOtp:
2002
- hydration = await this.resolveWalletCustodyEmailOtpHydration({
2003
- walletId: args.walletId,
2004
- nearAccountId: args.nearAccountId,
2005
- identity: requireEmailOtpNearEd25519MaterialIdentity(identity),
2006
- signerSlot: identity.signer.signerSlot,
2007
- materialActivation
2008
- });
2009
- break;
2010
- default:
2011
- identity.auth;
2012
- throw new Error("[SigningEngine][near] unsupported Ed25519 material authority");
2013
- }
2014
- if (hydration.kind === "blocked") {
2015
- if (hydration.reason === "persistence_unavailable") throw new Error("[SigningEngine][near] signing material persistence is unavailable");
2016
- throw walletSigningMaterialBlockError(hydration.reason);
2017
- }
2018
- return buildAuthorizationRequiredNearEd25519YaoSigningPreparation({
2019
- hydration,
2020
- requirement: identity.auth
2021
- });
2022
- }
2023
- async resolveWalletCustodyEmailOtpHydration(args) {
2024
- const activeMaterial = this.enginePorts.ed25519YaoActiveClients.resolve({
2025
- walletId: args.walletId,
2026
- nearAccountId: args.nearAccountId,
2027
- materialActivation: args.materialActivation
2028
- });
2029
- const authorizationRead = await this.readExactNearEd25519WalletSessionAuthorization(args.walletId);
2030
- let authority;
2031
- if (authorizationRead.kind === "found") {
2032
- if (authorizationRead.authorization.selectedAuthMethod.kind !== WALLET_AUTH_METHODS.emailOtp) return buildBlockedMpcCapabilityHydrationPlan({
2033
- capability: args.materialActivation.capability,
2034
- reason: "missing_material"
2035
- });
2036
- authority = await walletAuthAuthorityRef({ authority: authorizationRead.authorization.selectedFactorAuthority });
2037
- if (activeMaterial) return buildUseLiveRuntimeHydrationPlan({
2038
- authority,
2039
- runtime: nearEd25519YaoRuntimeRef(args.materialActivation),
2040
- materialActivation: args.materialActivation
2041
- });
2042
- } else if (authorizationRead.kind === "exhausted") {
2043
- const exhaustedAuthority = await resolveBrowserNearEd25519EmailOtpAuthorityForMaterial({
2044
- walletId: args.walletId,
2045
- nearAccountId: args.nearAccountId,
2046
- identity: args.identity,
2047
- signerSlot: args.signerSlot,
2048
- materialActivation: args.materialActivation,
2049
- authorizationRead: { kind: "exhausted" }
2050
- });
2051
- if (!exhaustedAuthority) return buildBlockedMpcCapabilityHydrationPlan({
2052
- capability: args.materialActivation.capability,
2053
- reason: "missing_material"
2054
- });
2055
- authority = exhaustedAuthority;
2056
- if (activeMaterial) try {
2057
- validateExactNearEd25519YaoOperationMaterial({
2058
- material: activeMaterial,
2059
- input: {
2060
- walletId: args.walletId,
2061
- nearAccountId: args.nearAccountId,
2062
- materialIdentity: args.identity
2063
- },
2064
- expectedActivation: args.materialActivation
2065
- });
2066
- } catch {
2067
- return buildBlockedMpcCapabilityHydrationPlan({
2068
- capability: args.materialActivation.capability,
2069
- reason: "binding_mismatch"
2070
- });
2071
- }
2072
- } else return buildBlockedMpcCapabilityHydrationPlan({
2073
- capability: args.materialActivation.capability,
2074
- reason: "missing_material"
2075
- });
2076
- if (activeMaterial) return buildUseLiveRuntimeHydrationPlan({
2077
- authority,
2078
- runtime: nearEd25519YaoRuntimeRef(args.materialActivation),
2079
- materialActivation: args.materialActivation
2080
- });
2081
- const loaded = await this.loadEmailOtpWalletCustodyEd25519Material({
2082
- nearAccountId: String(args.nearAccountId),
2083
- signerSlot: args.signerSlot
2084
- });
2085
- if (loaded.kind === "found" && loaded.material.binding.walletId === String(args.walletId) && loaded.material.binding.nearAccountId === String(args.nearAccountId) && loaded.material.binding.signerSlot === args.signerSlot && String(args.materialActivation.materialOwner) === String(args.walletId) && (authorizationRead.kind === "found" || loaded.material.binding.nearEd25519SigningKeyId === String(args.identity.signer.nearEd25519SigningKeyId) && loaded.material.binding.signingWorkerId === String(args.materialActivation.signingWorker))) return buildRehydrateMaterialActivationHydrationPlan({
2086
- authority,
2087
- materialActivation: args.materialActivation,
2088
- sealedMaterial: buildRestorableMpcMaterialRefForHydration(JSON.stringify([
2089
- loaded.material.binding.walletId,
2090
- loaded.material.binding.nearAccountId,
2091
- loaded.material.binding.signerSlot,
2092
- args.materialActivation.activationId
2093
- ]))
2094
- });
2095
- return buildBlockedMpcCapabilityHydrationPlan({
2096
- capability: args.materialActivation.capability,
2097
- reason: "missing_material"
2098
- });
2099
- }
2100
- async rehydrateActiveEmailOtpEd25519YaoSessionMaterial(args) {
2101
- const input = requireAuthorizedNearEd25519BoundaryInput(args.input);
2102
- if (input.auth.kind !== WALLET_AUTH_METHODS.emailOtp) throw new Error("[SigningEngine][near] Email OTP session restore requires Email OTP material");
2103
- const publicLane = await resolveExactEmailOtpPublicLaneReference({
2104
- store: this.ed25519YaoPublicCapabilityReferences,
2105
- laneIdentity: input.laneIdentity,
2106
- materialActivation: args.materialActivation
2107
- });
2108
- const user = await this.getUserBySignerSlot(input.nearAccountId, input.laneIdentity.signer.signerSlot);
2109
- if (!user || String(user.walletId) !== String(input.walletId) || String(user.nearAccountId) !== String(input.nearAccountId) || user.signerSlot !== input.laneIdentity.signer.signerSlot || user.authMethod !== WALLET_AUTH_METHODS.emailOtp) throw new Error("[SigningEngine][near] Email OTP signer record is unavailable");
2110
- const sealed = await this.loadEmailOtpWalletCustodyEd25519Material({
2111
- nearAccountId: String(input.nearAccountId),
2112
- signerSlot: user.signerSlot
2113
- });
2114
- const operationCredential = args.authorization.operationCredential;
2115
- if (sealed.kind !== "found") throw new Error("[SigningEngine][near] Email OTP session material is unavailable");
2116
- const ecdsaManifest = requireEmailOtpEcdsaRehydrationManifest(await listBrowserActiveEcdsaCapabilityManifestsForWallet(String(input.walletId)), String((await walletAuthAuthorityRef({ authority: args.authorization.selectedFactorAuthority })).authorityDigest));
2117
- const ecdsaSessionPolicy = buildEmailOtpEcdsaRehydrationPolicy({
2118
- manifest: ecdsaManifest,
2119
- remainingUses: args.remainingUses
2120
- });
2121
- const activated = await this.signerWorkerManager.requestWorkerOperation({
2122
- kind: "emailOtp",
2123
- request: {
2124
- type: "rehydrateActiveEmailOtpEd25519YaoSessionMaterial",
2125
- payload: {
2126
- relayUrl: String(this.seamsWebConfigs.network.relayer?.url || "").trim(),
2127
- walletId: String(input.walletId),
2128
- walletAuthMethodId: String(args.authorization.selectedAuthMethod.walletAuthMethodId),
2129
- orgId: publicLane.runtimePolicyScope.orgId,
2130
- providerSubjectId: input.auth.providerSubjectId,
2131
- nearAccountId: String(input.nearAccountId),
2132
- signerSlot: user.signerSlot,
2133
- remainingUses: args.remainingUses,
2134
- expectedOperationalPublicKey: user.operationalPublicKey,
2135
- expectedThresholdSessionId: publicLane.thresholdSessionId,
2136
- operationCredential,
2137
- ecdsa: {
2138
- sessionHandleBinding: {
2139
- operation: "wallet_unlock",
2140
- keyHandle: String(ecdsaManifest.durableMaterial.roleLocalBinding.keyHandle),
2141
- authSubjectId: input.auth.providerSubjectId,
2142
- chainTarget: ecdsaManifest.signer.scope.targetMemberships[0]
2143
- },
2144
- runtimePolicyScope: ecdsaManifest.durableMaterial.runtimePolicyScope,
2145
- sessionPolicy: ecdsaSessionPolicy
2146
- },
2147
- walletCustodyEd25519Material: sealed
2148
- }
2149
- }
2150
- });
2151
- await persistRehydratedEmailOtpEcdsaWalletSession({
2152
- walletId: input.walletId,
2153
- authorization: activated.walletSessionAuthorization,
2154
- response: activated.ecdsaSession
2155
- });
2156
- await this.activateEmailOtpEd25519CustodyCapabilityInternal({
2157
- commitQueue: "acquire",
2158
- walletSession: {
2159
- walletId: input.walletId,
2160
- walletSessionUserId: String(input.walletId)
2161
- },
2162
- providerSubject: input.auth.providerSubjectId,
2163
- emailHashHex: await sha256HexUtf8(user.loginDisplayName.trim().toLowerCase()),
2164
- signerSlot: user.signerSlot,
2165
- expectedOperationalPublicKey: user.operationalPublicKey,
2166
- expectedThresholdSessionId: String(publicLane.thresholdSessionId),
2167
- bootstrap: activated.bootstrap,
2168
- activeClientHandle: activated.activeClientHandle,
2169
- metadata: activated.metadata,
2170
- exactAuthorization: activated.walletSessionAuthorization
2171
- });
2172
- return buildUseLiveRuntimeHydrationPlan({
2173
- authority: await walletAuthAuthorityRef({ authority: args.authorization.selectedFactorAuthority }),
2174
- runtime: nearEd25519YaoRuntimeRef(args.materialActivation),
2175
- materialActivation: args.materialActivation
2176
- });
2177
- }
2178
- async prepareExactNearEd25519YaoSigning(args) {
2179
- if (args.laneIdentity !== void 0 && args.auth?.kind === WALLET_AUTH_METHODS.emailOtp) {
2180
- let preparation = await this.prepareMaterialIdentityNearEd25519YaoSigning(authNeutralNearEd25519BoundaryInput(args));
2181
- const authorizationRead = await this.readExactNearEd25519WalletSessionAuthorization(args.walletId);
2182
- if (authorizationRead.kind !== "found" || authorizationRead.authorization.selectedAuthMethod.kind !== WALLET_AUTH_METHODS.emailOtp) return preparation;
2183
- const authorization = authorizationRead.authorization;
2184
- switch (preparation.hydration.kind) {
2185
- case "use_live_runtime": break;
2186
- case "rehydrate_material_activation":
2187
- preparation = buildAuthorizationRequiredNearEd25519YaoSigningPreparation({
2188
- hydration: await this.rehydrateActiveEmailOtpEd25519YaoSessionMaterial({
2189
- input: args,
2190
- materialActivation: preparation.hydration.materialActivation,
2191
- authorization,
2192
- remainingUses: authorization.status.remainingUses
2193
- }),
2194
- requirement: args.auth
2195
- });
2196
- break;
2197
- case "reauthorize_public_anchor":
2198
- case "blocked": return preparation;
2199
- default:
2200
- preparation.hydration;
2201
- throw new Error("[SigningEngine][near] unsupported Email OTP hydration state");
2202
- }
2203
- const currentAuthorizationRead = await this.readExactNearEd25519WalletSessionAuthorization(args.walletId);
2204
- if (currentAuthorizationRead.kind !== "found" || currentAuthorizationRead.authorization.selectedAuthMethod.kind !== WALLET_AUTH_METHODS.emailOtp) return preparation;
2205
- return await buildAuthorizedNearEd25519YaoSigningPreparation({
2206
- hydration: preparation.hydration,
2207
- requirement: args.auth,
2208
- authorization: currentAuthorizationRead.authorization
2209
- });
2210
- }
2211
- if (args.laneIdentity === void 0) return await this.prepareMaterialIdentityNearEd25519YaoSigning(args);
2212
- const authorizationRead = await this.readExactNearEd25519WalletSessionAuthorization(args.walletId);
2213
- switch (authorizationRead.kind) {
2214
- case "found": {
2215
- const authorization = authorizationRead.authorization;
2216
- if (authorization.selectedAuthMethod.kind !== args.auth.kind) return await this.prepareMaterialIdentityNearEd25519YaoSigning(authNeutralNearEd25519BoundaryInput(args));
2217
- const sealedRuntimeResolution = await resolveExactEd25519SealedSessionRuntimeForLane({
2218
- walletId: args.walletId,
2219
- laneIdentity: args.laneIdentity
2220
- });
2221
- if (sealedRuntimeResolution.kind === "missing" && args.auth.kind === WALLET_AUTH_METHODS.passkey) {
2222
- const publicLane = await resolveExactPasskeyPublicLaneReference({
2223
- store: this.ed25519YaoPublicCapabilityReferences,
2224
- laneIdentity: args.laneIdentity
2225
- });
2226
- const materialActivation = publicLane.materialActivation;
2227
- const activeMaterial = this.enginePorts.ed25519YaoActiveClients.resolve({
2228
- walletId: args.walletId,
2229
- nearAccountId: args.nearAccountId,
2230
- materialActivation
2231
- });
2232
- if (!activeMaterial) throw new Error("[SigningEngine][near] active Passkey Ed25519 material is unavailable");
2233
- const material = validateExactNearEd25519YaoOperationMaterial({
2234
- material: activeMaterial,
2235
- input: args,
2236
- expectedActivation: materialActivation
2237
- });
2238
- const walletSessionState = await passkeyWalletSessionStateFromPublicLane({
2239
- reference: publicLane,
2240
- material,
2241
- authorization,
2242
- materialActivation,
2243
- relayerUrl: String(this.seamsWebConfigs.network.relayer?.url || "").trim()
2244
- });
2245
- const runtime = nearEd25519YaoRuntimeObservation(material);
2246
- if (runtime.kind !== "live") throw new Error("[SigningEngine][near] active Passkey Ed25519 material is unavailable");
2247
- return await buildAuthorizedNearEd25519YaoSigningPreparation({
2248
- hydration: buildUseLiveRuntimeHydrationPlan({
2249
- authority: walletSessionState.authority,
2250
- runtime: runtime.runtime,
2251
- materialActivation
2252
- }),
2253
- requirement: args.auth,
2254
- authorization
2255
- });
2256
- }
2257
- if (sealedRuntimeResolution.kind !== "resolved") throw new Error(`[SigningEngine][near] exact persisted Ed25519 runtime is ${sealedRuntimeResolution.kind}`);
2258
- const sealedRuntime = sealedRuntimeResolution.runtime;
2259
- const materialActivation = sealedRuntime.sealedRecord.ed25519Restore.materialActivation;
2260
- const walletSessionState = await walletSessionStateFromExactEd25519Runtime({
2261
- runtime: sealedRuntime,
2262
- relayerUrl: String(this.seamsWebConfigs.network.relayer?.url || "").trim()
2263
- });
2264
- const signer = walletSessionState.signingLane.identity.signer;
2265
- const publicLocator = {
2266
- kind: "available",
2267
- walletId: String(signer.account.wallet.walletId),
2268
- nearAccountId: String(signer.account.nearAccountId),
2269
- signerSlot: signer.signerSlot,
2270
- materialActivation
2271
- };
2272
- const activeMaterial = this.enginePorts.ed25519YaoActiveClients.resolve({
2273
- walletId: signer.account.wallet.walletId,
2274
- nearAccountId: signer.account.nearAccountId,
2275
- materialActivation
2276
- });
2277
- const warmSessionClaim = args.auth.kind === WALLET_AUTH_METHODS.passkey ? await this.passkeyMpcSession.claimWarmSessionMaterial({
2278
- thresholdSessionId: sealedRuntime.thresholdSessionId,
2279
- purpose: {
2280
- curve: "ed25519",
2281
- materialActivation
2282
- },
2283
- consume: false
2284
- }) : null;
2285
- let unlockSource = { kind: "unavailable" };
2286
- if (warmSessionClaim?.ok === true) unlockSource = {
2287
- kind: "available",
2288
- passkeyPrfFirstB64u: warmSessionClaim.prfFirstB64u
2289
- };
2290
- const hydration = await this.resolveExactNearEd25519YaoSigningHydration({
2291
- args,
2292
- walletSessionState,
2293
- publicLocator,
2294
- runtime: nearEd25519YaoRuntimeObservation(activeMaterial),
2295
- unlockSource
2296
- });
2297
- if (hydration.kind === "use_live_runtime") {
2298
- if (!activeMaterial) throw new Error("[SigningEngine][near] live Ed25519 material is unavailable");
2299
- await hydrateOwnerNearEd25519ExecutionLane({
2300
- input: args,
2301
- authorization,
2302
- sealedRuntime,
2303
- material: activeMaterial
2304
- });
2305
- }
2306
- return await buildAuthorizedNearEd25519YaoSigningPreparation({
2307
- hydration,
2308
- requirement: args.auth,
2309
- authorization
2310
- });
2311
- }
2312
- case "missing":
2313
- case "expired":
2314
- case "exhausted":
2315
- case "superseded":
2316
- case "authority_unavailable":
2317
- case "method_unavailable":
2318
- case "capability_unavailable":
2319
- case "unavailable": return await this.prepareMaterialIdentityNearEd25519YaoSigning(authNeutralNearEd25519BoundaryInput(args));
2320
- case "upgrade_required": throw new WalletSessionAuthorizationUpgradeRequiredError("[SigningEngine][near] Wallet Session authorization requires a newer client");
2321
- case "corrupt":
2322
- case "persistence_unavailable": throw new Error(`[SigningEngine][near] Wallet Session authorization is ${authorizationRead.kind}`);
2323
- default: throw new Error("[SigningEngine][near] unsupported Wallet Session authorization state");
2324
- }
2325
- }
2326
- async prepareExactNearEd25519YaoMaterialBoundary(args) {
2327
- assertNearEd25519YaoMaterialBoundaryAuth(args);
2328
- const preparation = await this.prepareExactNearEd25519YaoSigning(args);
2329
- const context = {
2330
- input: args,
2331
- materialActivation: preparation.hydration.materialActivation || null
2332
- };
2333
- return {
2334
- preparation,
2335
- executor: {
2336
- resolveSigningKeyMaterial: this.resolveExactNearEd25519SigningKeyMaterial.bind(this, context),
2337
- resolve: this.resolveExactNearEd25519YaoPreparedMaterial.bind(this, context),
2338
- resolveWalletSessionState: this.resolveExactNearEd25519YaoWalletSessionState.bind(this, context),
2339
- resolveFundingSession: this.resolveExactNearEd25519FundingSession.bind(this, context),
2340
- preparePasskeyOperationStepUp: this.prepareExactNearEd25519YaoOperationStepUpAtBoundary.bind(this, context),
2341
- prepareEmailOtpOperationStepUp: this.prepareExactNearEmailOtpEd25519YaoOperationStepUpAtBoundary.bind(this, context)
2342
- }
2343
- };
2344
- }
2345
- async resolveExactNearEd25519SigningKeyMaterial(context) {
2346
- const identity = nearEd25519MaterialIdentityFromBoundaryInput(context.input);
2347
- const signer = identity.signer;
2348
- const auth = identity.auth;
2349
- const materialActivation = context.materialActivation;
2350
- if (!materialActivation) throw new Error("[SigningEngine][near] prepared material has no activation");
2351
- if (String(signer.account.wallet.walletId) !== String(context.input.walletId) || String(signer.account.nearAccountId) !== String(context.input.nearAccountId)) throw new Error("[SigningEngine][near] selected Ed25519 lane identity changed");
2352
- const selected = await IndexedDBManager.resolveSelectedWalletAuthority(String(context.input.walletId));
2353
- if (selected.kind !== "resolved") {
2354
- const detail = selected.kind === "integrity_error" ? `: ${selected.reason}` : "";
2355
- throw new Error(`[SigningEngine][near] selected Wallet Authority is ${selected.kind}${detail}`);
2356
- }
2357
- const { selection, authMethod, authority, signerMaterials } = selected;
2358
- let authMethodMatches;
2359
- switch (auth.kind) {
2360
- case WALLET_AUTH_METHODS.passkey:
2361
- authMethodMatches = authMethod.kind === WALLET_AUTH_METHODS.passkey && String(authMethod.rpId) === String(auth.rpId) && authMethod.credentialIdB64u === auth.credentialIdB64u;
2362
- break;
2363
- case WALLET_AUTH_METHODS.emailOtp:
2364
- authMethodMatches = authMethod.kind === WALLET_AUTH_METHODS.emailOtp;
2365
- break;
2366
- default: throw new Error("[SigningEngine][near] unsupported Ed25519 material authority");
2367
- }
2368
- if (selection.lockState !== "unlocked" || authority.state !== "active" || authMethod.status !== "active" || String(selection.walletId) !== String(context.input.walletId) || selection.walletAuthMethodId !== authMethod.walletAuthMethodId || authMethod.walletAuthorityId !== authority.authorityId || String(authMethod.walletId) !== String(context.input.walletId) || !authMethodMatches) throw new Error("[SigningEngine][near] selected Wallet Authority does not match the lane");
2369
- const operation = await resolveWalletAuthorityOperation({
2370
- selected: {
2371
- authMethod,
2372
- authority
2373
- },
2374
- operation: {
2375
- kind: "near_sign",
2376
- operation: "sign",
2377
- keyFamily: "ed25519"
2378
- }
2379
- });
2380
- if (operation.kind !== "resolved") throw new Error(`[SigningEngine][near] selected Wallet Authority rejected signing (${operation.reason.kind})`);
2381
- const resolved = operation.value;
2382
- if (resolved.keyFamily !== "ed25519" || String(resolved.walletId) !== String(context.input.walletId) || resolved.authMethodId !== authMethod.walletAuthMethodId || !mpcMaterialActivationRefsEqual(resolved.materialActivation, materialActivation)) throw new Error("[SigningEngine][near] selected Wallet Authority activation changed");
2383
- if (authority.signerActivations.keyFamilies[0] !== "ed25519" || authority.signerActivations.ed25519 === void 0 || !mpcMaterialActivationRefsEqual(authority.signerActivations.ed25519.materialActivation, materialActivation) || authority.signerActivations.ed25519.signer.registeredPublicKeyB64u !== resolved.registeredPublicKeyB64u) throw new Error("[SigningEngine][near] selected Ed25519 authority activation changed");
2384
- const registeredPublicKey = base64UrlDecode(resolved.registeredPublicKeyB64u);
2385
- if (registeredPublicKey.byteLength !== 32) throw new Error("[SigningEngine][near] selected Ed25519 public key is invalid");
2386
- const signingWorkerId = materialActivation.signingWorker;
2387
- let participantIds = [1, 2];
2388
- let linkedMaterial = null;
2389
- if (authority.provenance.kind === "device_link") {
2390
- await resolveExactNearEd25519PublicLaneReference({
2391
- store: this.ed25519YaoPublicCapabilityReferences,
2392
- identity,
2393
- materialActivation
2394
- });
2395
- for (const candidate of signerMaterials) {
2396
- if (!isLinkedEd25519SignerMaterial(candidate) || candidate.authorityId !== authority.authorityId || candidate.walletAuthMethodId !== authMethod.walletAuthMethodId || !mpcMaterialActivationRefsEqual(candidate.materialActivation, materialActivation)) continue;
2397
- if (linkedMaterial) throw new Error("[SigningEngine][near] linked Ed25519 signer material is ambiguous");
2398
- linkedMaterial = candidate;
2399
- }
2400
- if (!linkedMaterial) throw new Error("[SigningEngine][near] linked Ed25519 signer material is unavailable");
2401
- const application = linkedMaterial.publicFacts.applicationBinding;
2402
- const targetBinding = linkedMaterial.publicFacts.targetBinding;
2403
- const targetLifecycle = targetBinding.lifecycle;
2404
- const targetFactor = linkedMaterial.targetFactor;
2405
- let targetFactorMatches;
2406
- switch (auth.kind) {
2407
- case WALLET_AUTH_METHODS.passkey:
2408
- targetFactorMatches = targetFactor.kind === WALLET_AUTH_METHODS.passkey && targetFactor.walletAuthMethodId === authMethod.walletAuthMethodId && String(targetFactor.rpId) === String(auth.rpId) && targetFactor.credentialIdB64u === auth.credentialIdB64u;
2409
- break;
2410
- case WALLET_AUTH_METHODS.emailOtp:
2411
- targetFactorMatches = targetFactor.kind === WALLET_AUTH_METHODS.emailOtp && authMethod.kind === WALLET_AUTH_METHODS.emailOtp && targetFactor.walletAuthMethodId === authMethod.walletAuthMethodId && targetFactor.emailHashHex === authMethod.emailHashHex;
2412
- break;
2413
- default: throw new Error("[SigningEngine][near] unsupported Ed25519 material authority");
2414
- }
2415
- if (application.wallet_id !== String(context.input.walletId) || application.near_ed25519_signing_key_id !== String(signer.nearEd25519SigningKeyId) || application.key_creation_signer_slot !== signer.signerSlot || targetLifecycle.account_id !== String(context.input.walletId) || targetLifecycle.session_id !== String(identity.thresholdSessionId) || targetLifecycle.selected_server_id !== String(signingWorkerId) || !mpcMaterialActivationRefsEqual(routerAbMpcMaterialActivationRefFromWire(targetBinding.material_activation), materialActivation) || !mpcMaterialActivationRefsEqual(routerAbMpcMaterialActivationRefFromWire(linkedMaterial.publicFacts.activationReceipt.material_activation), materialActivation) || base64UrlEncode(Uint8Array.from(linkedMaterial.publicFacts.activationReceipt.registered_public_key)) !== resolved.registeredPublicKeyB64u || !targetFactorMatches) throw new Error("[SigningEngine][near] linked Ed25519 signer identity changed");
2416
- participantIds = linkedMaterial.publicFacts.participantIds;
2417
- }
2418
- const activeMaterial = this.enginePorts.ed25519YaoActiveClients.resolve({
2419
- walletId: context.input.walletId,
2420
- nearAccountId: context.input.nearAccountId,
2421
- materialActivation
2422
- });
2423
- if (activeMaterial) {
2424
- const exactMaterial = validateExactNearEd25519YaoOperationMaterial({
2425
- material: activeMaterial,
2426
- input: context.input,
2427
- expectedActivation: materialActivation
2428
- });
2429
- const metadata = exactMaterial.activeClient.metadata();
2430
- const facts = exactMaterial.facts;
2431
- if (base64UrlEncode(metadata.registeredPublicKey) !== resolved.registeredPublicKeyB64u || metadata.participantIds[0] !== participantIds[0] || metadata.participantIds[1] !== participantIds[1] || metadata.applicationBinding.wallet_id !== String(context.input.walletId) || metadata.applicationBinding.near_ed25519_signing_key_id !== String(signer.nearEd25519SigningKeyId) || metadata.applicationBinding.key_creation_signer_slot !== signer.signerSlot || metadata.scope.account_id !== String(context.input.walletId) || metadata.scope.threshold_session_id !== String(identity.thresholdSessionId) || metadata.scope.signing_worker_id !== String(signingWorkerId) || facts.routerAbNormalSigning.signingWorkerId !== String(signingWorkerId) || facts.signingRootId !== metadata.applicationBinding.signing_root_id || facts.signingRootVersion !== metadata.scope.root_share_epoch) throw new Error("[SigningEngine][near] active Ed25519 public material changed");
2432
- if (linkedMaterial) {
2433
- const application = linkedMaterial.publicFacts.applicationBinding;
2434
- const targetLifecycle = linkedMaterial.publicFacts.targetBinding.lifecycle;
2435
- if (metadata.applicationBinding.wallet_id !== application.wallet_id || metadata.applicationBinding.near_ed25519_signing_key_id !== application.near_ed25519_signing_key_id || metadata.applicationBinding.signing_root_id !== application.signing_root_id || metadata.applicationBinding.key_creation_signer_slot !== application.key_creation_signer_slot || metadata.scope.lifecycle_id !== targetLifecycle.lifecycle_id || metadata.scope.root_share_epoch !== targetLifecycle.root_share_epoch || metadata.scope.account_id !== targetLifecycle.account_id || metadata.scope.threshold_session_id !== targetLifecycle.session_id || metadata.scope.signing_worker_id !== targetLifecycle.selected_server_id) throw new Error("[SigningEngine][near] linked Ed25519 runtime identity changed");
2436
- }
2437
- }
2438
- const publicKey = `ed25519:${base58Encode(registeredPublicKey)}`;
2439
- return {
2440
- nearAccountId: context.input.nearAccountId,
2441
- signerSlot: signer.signerSlot,
2442
- kind: "threshold_ed25519_v1",
2443
- publicKey,
2444
- relayerKeyId: signingWorkerId,
2445
- keyVersion: NEAR_ED25519_YAO_KEY_VERSION_V1,
2446
- participants: buildThresholdEd25519Participants2pV1({
2447
- clientParticipantId: participantIds[0],
2448
- relayerParticipantId: participantIds[1],
2449
- relayerKeyId: signingWorkerId,
2450
- clientShareDerivation: "prf_first_v1"
2451
- }),
2452
- timestamp: authority.activatedAtMs
2453
- };
2454
- }
2455
- async resolveExactNearEd25519YaoPreparedMaterial(context, preparation) {
2456
- const expectedActivation = requireBoundNearEd25519YaoPreparationActivation({
2457
- context,
2458
- preparation
2459
- });
2460
- switch (preparation.hydration.kind) {
2461
- case "use_live_runtime": {
2462
- const capability = this.enginePorts.ed25519YaoActiveClients.resolve({
2463
- walletId: context.input.walletId,
2464
- nearAccountId: context.input.nearAccountId,
2465
- materialActivation: expectedActivation
2466
- });
2467
- if (!capability) throw new Error("[SigningEngine][near] active Ed25519 Yao capability is unavailable");
2468
- return validateExactNearEd25519YaoOperationMaterial({
2469
- material: capability,
2470
- input: context.input,
2471
- expectedActivation
2472
- });
2473
- }
2474
- case "rehydrate_material_activation": {
2475
- const args = requireAuthorizedNearEd25519BoundaryInput(context.input);
2476
- switch (args.auth.kind) {
2477
- case WALLET_AUTH_METHODS.passkey: {
2478
- const material = await this.rehydrateExactPasskeyEd25519YaoCapabilityForSigning(args);
2479
- try {
2480
- const authorizationRead = await this.readExactNearEd25519WalletSessionAuthorization(args.walletId);
2481
- if (authorizationRead.kind !== "found" || authorizationRead.authorization.selectedAuthMethod.kind !== WALLET_AUTH_METHODS.passkey) throw new Error(`[SigningEngine][near] Wallet Session authorization is ${authorizationRead.kind}`);
2482
- const sealedRuntime = await requireExactEd25519SealedRuntimeForLane({
2483
- walletId: args.walletId,
2484
- laneIdentity: args.laneIdentity
2485
- });
2486
- await hydrateOwnerNearEd25519ExecutionLane({
2487
- input: args,
2488
- authorization: authorizationRead.authorization,
2489
- sealedRuntime,
2490
- material
2491
- });
2492
- return validateExactNearEd25519YaoOperationMaterial({
2493
- material,
2494
- input: args,
2495
- expectedActivation
2496
- });
2497
- } catch (error) {
2498
- material.activeClient.dispose();
2499
- throw error;
2500
- }
2501
- }
2502
- case WALLET_AUTH_METHODS.emailOtp: throw new Error("[SigningEngine][near] Email OTP custody cache is unavailable; link the device before signing");
2503
- default:
2504
- args.auth;
2505
- throw new Error("[SigningEngine][near] unsupported Ed25519 material authority");
2506
- }
2507
- }
2508
- case "reauthorize_public_anchor": throw new Error("[SigningEngine][near] retired material requires reauthorization");
2509
- case "blocked": throw new Error(`[SigningEngine][near] prepared material is blocked: ${preparation.hydration.reason}`);
2510
- default:
2511
- preparation.hydration;
2512
- throw new Error("[SigningEngine][near] unsupported prepared material hydration");
2513
- }
2514
- }
2515
- async resolveExactNearEd25519YaoWalletSessionState(context) {
2516
- const args = requireAuthorizedNearEd25519BoundaryInput(context.input);
2517
- if (args.auth.kind === WALLET_AUTH_METHODS.emailOtp) {
2518
- if (!context.materialActivation) throw new Error("[SigningEngine][near] prepared material has no activation");
2519
- const publicLane = await resolveExactEmailOtpPublicLaneReference({
2520
- store: this.ed25519YaoPublicCapabilityReferences,
2521
- laneIdentity: args.laneIdentity,
2522
- materialActivation: context.materialActivation
2523
- });
2524
- const material = this.enginePorts.ed25519YaoActiveClients.resolve({
2525
- walletId: args.walletId,
2526
- nearAccountId: args.nearAccountId,
2527
- materialActivation: context.materialActivation
2528
- });
2529
- if (!material) throw new Error("[SigningEngine][near] active Email OTP Ed25519 material is unavailable");
2530
- const authorizationRead = await this.readExactNearEd25519WalletSessionAuthorization(args.walletId);
2531
- if (authorizationRead.kind !== "found" || authorizationRead.authorization.selectedAuthMethod.kind !== WALLET_AUTH_METHODS.emailOtp) throw new Error(`[SigningEngine][near] Wallet Session authorization is ${authorizationRead.kind}`);
2532
- return await emailOtpWalletSessionStateFromPublicLane({
2533
- reference: publicLane,
2534
- material: validateExactNearEd25519YaoOperationMaterial({
2535
- material,
2536
- input: args,
2537
- expectedActivation: context.materialActivation
2538
- }),
2539
- authorization: authorizationRead.authorization,
2540
- materialActivation: context.materialActivation,
2541
- relayerUrl: String(this.seamsWebConfigs.network.relayer?.url || "").trim()
2542
- });
2543
- }
2544
- const runtimeResolution = await resolveExactEd25519SealedSessionRuntimeForLane({
2545
- walletId: args.walletId,
2546
- laneIdentity: args.laneIdentity
2547
- });
2548
- if (runtimeResolution.kind === "missing" && args.auth.kind === WALLET_AUTH_METHODS.passkey) {
2549
- if (!context.materialActivation) throw new Error("[SigningEngine][near] prepared material has no activation");
2550
- const publicLane = await resolveExactPasskeyPublicLaneReference({
2551
- store: this.ed25519YaoPublicCapabilityReferences,
2552
- laneIdentity: args.laneIdentity
2553
- });
2554
- if (!mpcMaterialActivationRefsEqual(publicLane.materialActivation, context.materialActivation)) throw new Error("[SigningEngine][near] Passkey public lane activation changed");
2555
- const material = this.enginePorts.ed25519YaoActiveClients.resolve({
2556
- walletId: args.walletId,
2557
- nearAccountId: args.nearAccountId,
2558
- materialActivation: context.materialActivation
2559
- });
2560
- if (!material) throw new Error("[SigningEngine][near] active Passkey Ed25519 material is unavailable");
2561
- const exactMaterial = validateExactNearEd25519YaoOperationMaterial({
2562
- material,
2563
- input: args,
2564
- expectedActivation: context.materialActivation
2565
- });
2566
- const authorizationRead = await this.readExactNearEd25519WalletSessionAuthorization(args.walletId);
2567
- if (authorizationRead.kind !== "found" || authorizationRead.authorization.selectedAuthMethod.kind !== WALLET_AUTH_METHODS.passkey) throw new Error(`[SigningEngine][near] Wallet Session authorization is ${authorizationRead.kind}`);
2568
- return await passkeyWalletSessionStateFromPublicLane({
2569
- reference: publicLane,
2570
- material: exactMaterial,
2571
- authorization: authorizationRead.authorization,
2572
- materialActivation: context.materialActivation,
2573
- relayerUrl: String(this.seamsWebConfigs.network.relayer?.url || "").trim()
2574
- });
2575
- }
2576
- if (runtimeResolution.kind !== "resolved") throw new Error(`[SigningEngine][near] exact persisted Ed25519 runtime is ${runtimeResolution.kind}`);
2577
- const runtime = runtimeResolution.runtime;
2578
- return await walletSessionStateFromExactEd25519Runtime({
2579
- runtime,
2580
- relayerUrl: String(this.seamsWebConfigs.network.relayer?.url || "").trim()
2581
- });
2582
- }
2583
- async resolveExactNearEd25519FundingSession(context) {
2584
- const identity = nearEd25519MaterialIdentityFromBoundaryInput(context.input);
2585
- const authorizationRead = await this.readExactNearEd25519WalletSessionAuthorization(identity.signer.account.wallet.walletId);
2586
- if (authorizationRead.kind !== "found" || authorizationRead.authorization.selectedAuthMethod.kind !== identity.auth.kind) throw new Error("[SigningEngine][near] authenticated funding session is unavailable");
2587
- if (!context.materialActivation) throw new Error("[SigningEngine][near] funding session material activation is unavailable");
2588
- if (!nearEd25519SessionMatchesMaterialActivation({
2589
- session: authorizationRead.authorization.session,
2590
- materialActivation: context.materialActivation
2591
- })) throw new Error("[SigningEngine][near] authenticated funding session material changed");
2592
- const walletSessionToken = authorizationRead.authorization.operationCredential.token;
2593
- if (authorizationRead.authorization.session.walletId !== identity.signer.account.wallet.walletId || authorizationRead.authorization.selectedAuthMethod.kind !== identity.auth.kind || !authorizationRead.authorization.operationCredential.walletSessionId || !authorizationRead.authorization.session.quotaId) throw new Error("[SigningEngine][near] funding session identity does not match");
2594
- return {
2595
- kind: "near_ed25519_funding_session",
2596
- signer: identity.signer,
2597
- thresholdSessionId: identity.thresholdSessionId,
2598
- walletSessionToken
2599
- };
2600
- }
2601
- async prepareExactNearEd25519YaoOperationStepUpAtBoundary(context, preparation) {
2602
- if (nearEd25519PresentedAuthFromBoundaryInput(context.input).kind !== WALLET_AUTH_METHODS.passkey) throw new Error("[SigningEngine][near] Email OTP material cannot use Passkey rehydration");
2603
- const expectedActivation = requireBoundNearEd25519YaoPreparationActivation({
2604
- context,
2605
- preparation
2606
- });
2607
- const prepared = await this.prepareExactPasskeyEd25519YaoOperationStepUpForSigning(context.input);
2608
- if (!mpcMaterialActivationRefsEqual(expectedActivation, prepared.materialActivation)) throw new Error("[SigningEngine][near] operation step-up changed material activation");
2609
- return prepared;
2610
- }
2611
- async prepareExactNearEmailOtpEd25519YaoOperationStepUpAtBoundary(context, preparation) {
2612
- const identity = nearEd25519MaterialIdentityFromBoundaryInput(context.input);
2613
- if (identity.auth.kind !== WALLET_AUTH_METHODS.emailOtp) throw new Error("[SigningEngine][near] Passkey material cannot use Email OTP rehydration");
2614
- const expectedActivation = requireBoundNearEd25519YaoPreparationActivation({
2615
- context,
2616
- preparation
2617
- });
2618
- switch (preparation.hydration.kind) {
2619
- case "use_live_runtime": return {
2620
- kind: "live",
2621
- materialActivation: expectedActivation,
2622
- material: await this.resolveExactNearEd25519YaoPreparedMaterial(context, preparation)
2623
- };
2624
- case "rehydrate_material_activation": {
2625
- const publicLane = await resolveExactEmailOtpPublicLaneReference({
2626
- store: this.ed25519YaoPublicCapabilityReferences,
2627
- laneIdentity: identity,
2628
- materialActivation: expectedActivation
2629
- });
2630
- const user = await this.getUserBySignerSlot(context.input.nearAccountId, identity.signer.signerSlot);
2631
- if (!user || String(user.walletId) !== String(context.input.walletId) || String(user.nearAccountId) !== String(context.input.nearAccountId) || user.signerSlot !== identity.signer.signerSlot || user.authMethod !== WALLET_AUTH_METHODS.emailOtp) throw new Error("[SigningEngine][near] Email OTP signer record is unavailable");
2632
- const sealed = await this.loadEmailOtpWalletCustodyEd25519Material({
2633
- nearAccountId: String(context.input.nearAccountId),
2634
- signerSlot: user.signerSlot
2635
- });
2636
- if (sealed.kind !== "found") throw new Error("[SigningEngine][near] Email OTP custody material is unavailable");
2637
- if (`ed25519:${base58Encode(base64UrlDecode(sealed.material.binding.registeredPublicKeyB64u))}` !== user.operationalPublicKey || sealed.material.binding.walletId !== String(context.input.walletId) || sealed.material.binding.nearAccountId !== String(context.input.nearAccountId) || sealed.material.binding.signerSlot !== user.signerSlot || sealed.material.binding.signingWorkerId !== String(expectedActivation.signingWorker)) throw new Error("[SigningEngine][near] Email OTP custody material binding changed");
2638
- const relayerUrl = this.seamsWebConfigs.network.relayer?.url || "";
2639
- if (!relayerUrl) throw new Error("[SigningEngine][near] Email OTP recovery requires a relay URL");
2640
- const recoveryContext = {
2641
- input: context.input,
2642
- materialActivation: expectedActivation,
2643
- facts: emailOtpEd25519OperationMaterialFacts({
2644
- input: context.input,
2645
- publicLane,
2646
- relayerUrl
2647
- }),
2648
- publicLane,
2649
- sealedMaterial: sealed.material,
2650
- operationalPublicKey: user.operationalPublicKey,
2651
- emailHashHex: await sha256HexUtf8(user.loginDisplayName.trim().toLowerCase())
2652
- };
2653
- return {
2654
- kind: "sealed",
2655
- materialActivation: expectedActivation,
2656
- facts: recoveryContext.facts,
2657
- authorizeAndRehydrate: this.authorizeAndRehydrateEmailOtpEd25519OperationMaterial.bind(this, recoveryContext)
2658
- };
2659
- }
2660
- case "reauthorize_public_anchor": throw new Error("[SigningEngine][near] retired Email OTP material cannot sign");
2661
- case "blocked": throw new Error(`[SigningEngine][near] Email OTP operation material is blocked: ${preparation.hydration.reason}`);
2662
- default:
2663
- preparation.hydration;
2664
- throw new Error("[SigningEngine][near] unsupported Email OTP operation material");
2665
- }
2666
- }
2667
- async authorizeAndRehydrateEmailOtpEd25519OperationMaterial(context, request) {
2668
- const identity = nearEd25519MaterialIdentityFromBoundaryInput(context.input);
2669
- if (identity.auth.kind !== WALLET_AUTH_METHODS.emailOtp || request.proof.providerSubjectId !== identity.auth.providerSubjectId) throw new Error("[SigningEngine][near] Email OTP operation authority changed");
2670
- const operationCredential = await resolveExactNearEd25519WalletSessionOperationCredentialForStepUp({
2671
- walletId: context.input.walletId,
2672
- proof: request.proof
2673
- });
2674
- const operationSubject = {
2675
- kind: "exact_ed25519_export_material",
2676
- signer: identity.signer,
2677
- auth: identity.auth,
2678
- thresholdSessionId: identity.thresholdSessionId
2679
- };
2680
- const bootstrap = await resolveEmailOtpEd25519OperationRecoveryBootstrapV1({
2681
- subject: operationSubject,
2682
- expectedMaterialActivation: context.materialActivation,
2683
- authorization: await this.readExactEmailOtpEd25519ExportAuthorization({
2684
- subject: operationSubject,
2685
- expectedMaterialActivation: context.materialActivation
2686
- }),
2687
- source: {
2688
- signingWorkerId: context.sealedMaterial.binding.signingWorkerId,
2689
- participantIds: context.sealedMaterial.binding.participantIds,
2690
- registeredPublicKeyB64u: context.sealedMaterial.binding.registeredPublicKeyB64u
2691
- },
2692
- relayerUrl: context.facts.relayerUrl,
2693
- fetch: globalThis.fetch.bind(globalThis)
2694
- });
2695
- const recovered = await requestRehydrateEmailOtpEd25519YaoOperationMaterial({
2696
- workerCtx: this.signerWorkerManager.getContext(),
2697
- payload: {
2698
- relayUrl: context.facts.relayerUrl,
2699
- walletId: String(context.input.walletId),
2700
- orgId: context.publicLane.runtimePolicyScope.orgId,
2701
- providerSubjectId: identity.auth.providerSubjectId,
2702
- nearAccountId: String(context.input.nearAccountId),
2703
- signerSlot: context.publicLane.signerSlot,
2704
- expectedOperationalPublicKey: context.operationalPublicKey,
2705
- expectedThresholdSessionId: context.publicLane.thresholdSessionId,
2706
- expectedMaterialActivation: context.materialActivation,
2707
- ed25519YaoRecovery: {
2708
- kind: ROUTER_AB_ED25519_YAO_EMAIL_OTP_RECOVERY_BOOTSTRAP_KIND_V1,
2709
- signerSlot: context.publicLane.signerSlot,
2710
- remainingUses: DEFAULT_UNLOCK_REMAINING_USES,
2711
- orgId: context.publicLane.runtimePolicyScope.orgId
2712
- },
2713
- walletCustodyEd25519Material: {
2714
- kind: "found",
2715
- material: context.sealedMaterial
2716
- },
2717
- bootstrap,
2718
- normalSigningRequest: request.normalSigningRequest,
2719
- displayDigest: request.displayDigest,
2720
- proof: request.proof,
2721
- operationCredential
2722
- }
2723
- });
2724
- if (recovered.walletCustodyEd25519Material) try {
2725
- await this.persistWalletCustodyEd25519Material(recovered.walletCustodyEd25519Material);
2726
- } catch (error) {
2727
- await disposeWalletCustodyEd25519ActiveClientV1({
2728
- workerContext: this.signerWorkerManager.getContext(),
2729
- activeClientHandle: recovered.activeClientHandle
2730
- }).catch(() => void 0);
2731
- throw error;
2732
- }
2733
- const activeClient = new WalletCustodyEd25519ActiveClientV1(this.signerWorkerManager.getContext(), recovered.activeClientHandle, recovered.metadata);
2734
- let material;
2735
- try {
2736
- material = validateExactNearEd25519YaoOperationMaterial({
2737
- material: {
2738
- activeClient,
2739
- facts: context.facts
2740
- },
2741
- input: context.input,
2742
- expectedActivation: context.materialActivation
2743
- });
2744
- } catch (error) {
2745
- activeClient.dispose();
2746
- throw error;
2747
- }
2748
- return {
2749
- material,
2750
- issuedAuthorization: {
2751
- kind: recovered.issuedAuthorization.kind,
2752
- authorization: recovered.issuedAuthorization.authorization,
2753
- expiresAtMs: recovered.issuedAuthorization.expiresAtMs
2754
- }
2755
- };
2756
- }
2757
- async resolveExactNearEd25519YaoSigningHydration(input) {
2758
- const args = requireAuthorizedNearEd25519BoundaryInput(input.args);
2759
- switch (args.auth.kind) {
2760
- case WALLET_AUTH_METHODS.passkey: {
2761
- const resolved = await this.resolvePasskeyEd25519YaoHydration({
2762
- walletSessionState: input.walletSessionState,
2763
- credentialIdB64u: args.auth.credentialIdB64u,
2764
- publicLocator: input.publicLocator,
2765
- unlockSource: input.unlockSource
2766
- });
2767
- let hydration;
2768
- switch (resolved.kind) {
2769
- case "live":
2770
- case "blocked":
2771
- hydration = resolved.plan;
2772
- break;
2773
- case "rehydrated":
2774
- resolved.activeClient.dispose();
2775
- hydration = resolved.plan;
2776
- break;
2777
- default: throw new Error("[SigningEngine][near] unsupported Passkey hydration result");
2778
- }
2779
- if (hydration.kind === "blocked" && hydration.reason === "missing_material") return (await preparePasskeyEd25519YaoLocalMaterialRehydrationV1({
2780
- store: IndexedDBManager,
2781
- identity: ed25519YaoLocalMaterialIdentityFromWalletSession(input.walletSessionState, args.auth.rpId, args.auth.credentialIdB64u),
2782
- authority: input.walletSessionState.authority,
2783
- publicLocator: input.publicLocator
2784
- })).plan;
2785
- return hydration;
2786
- }
2787
- case WALLET_AUTH_METHODS.emailOtp:
2788
- if (input.publicLocator.kind !== "available") throw new Error("[SigningEngine][near] Email OTP custody locator is unavailable");
2789
- return await this.resolveWalletCustodyEmailOtpHydration({
2790
- walletId: args.walletId,
2791
- nearAccountId: args.nearAccountId,
2792
- identity: requireEmailOtpNearEd25519MaterialIdentity(nearEd25519MaterialIdentityFromBoundaryInput(args)),
2793
- signerSlot: args.laneIdentity.signer.signerSlot,
2794
- materialActivation: input.publicLocator.materialActivation
2795
- });
2796
- default:
2797
- args.auth;
2798
- throw new Error("[SigningEngine][near] unsupported Ed25519 material authority");
2799
- }
2800
- }
2801
- async prepareExactPasskeyEd25519YaoOperationStepUpForSigning(args) {
2802
- const identity = nearEd25519MaterialIdentityFromBoundaryInput(args);
2803
- if (identity.auth.kind !== WALLET_AUTH_METHODS.passkey) throw new Error("[SigningEngine][near] Passkey operation step-up requires Passkey material");
2804
- if (!await this.resolveNearEd25519YaoSigningLane({ ...args.laneIdentity !== void 0 ? {
2805
- kind: "exact_lane",
2806
- laneIdentity: args.laneIdentity
2807
- } : {
2808
- kind: "material_identity",
2809
- materialIdentity: identity
2810
- } })) throw new Error("[SigningEngine][near] sealed Ed25519 operation lane is unavailable");
2811
- const material = await preparePasskeyEd25519OperationMaterial({
2812
- walletId: args.walletId,
2813
- identity,
2814
- relayerUrl: this.seamsWebConfigs.network.relayer.url
2815
- });
2816
- return {
2817
- materialActivation: material.prepared.plan.materialActivation,
2818
- facts: material.facts,
2819
- participantIds: [...material.participantIds],
2820
- rehydrate: this.rehydratePreparedPasskeyEd25519YaoOperationStepUp.bind(this, {
2821
- input: args,
2822
- identity: material.localIdentity,
2823
- facts: material.facts,
2824
- authority: material.authority,
2825
- rpId: identity.auth.rpId,
2826
- credentialIdB64u: identity.auth.credentialIdB64u,
2827
- publicLocator: material.publicLocator,
2828
- materialActivation: material.prepared.plan.materialActivation
2829
- })
2830
- };
2831
- }
2832
- async rehydratePreparedPasskeyEd25519YaoOperationStepUp(prepared, credential) {
2833
- if (String(credential.rawId || credential.id || "").trim() !== prepared.credentialIdB64u) throw invalidWalletSigningMaterial("binding_mismatch");
2834
- const secretSource = buildThresholdEd25519WebAuthnPrfSecretSource({
2835
- credential,
2836
- rpId: prepared.rpId
2837
- });
2838
- const hydrated = await hydrateExactPasskeyEd25519YaoLocalMaterial({
2839
- store: IndexedDBManager,
2840
- identity: prepared.identity,
2841
- authority: prepared.authority,
2842
- publicLocator: prepared.publicLocator,
2843
- unlockSource: {
2844
- kind: "available",
2845
- passkeyPrfFirstB64u: secretSource.secretSource.prfFirstB64u
2846
- },
2847
- liveMaterial: null
2848
- });
2849
- if (hydrated.kind === "blocked") throw walletSigningMaterialBlockError(hydrated.plan.reason);
2850
- if (hydrated.kind !== "rehydrated") throw invalidWalletSigningMaterial("corrupt");
2851
- if (!mpcMaterialActivationRefsEqual(prepared.materialActivation, hydrated.plan.materialActivation)) {
2852
- hydrated.activeClient.dispose();
2853
- throw invalidWalletSigningMaterial("binding_mismatch");
2854
- }
2855
- const material = {
2856
- activeClient: hydrated.activeClient,
2857
- facts: prepared.facts
2858
- };
2859
- try {
2860
- return validateExactNearEd25519YaoOperationMaterial({
2861
- material,
2862
- input: prepared.input,
2863
- expectedActivation: prepared.materialActivation
2864
- });
2865
- } catch {
2866
- material.activeClient.dispose();
2867
- throw invalidWalletSigningMaterial("binding_mismatch");
2868
- }
2869
- }
2870
- async resolveExactPasskeyEd25519YaoExportContext(args) {
2871
- const relayerUrl = String(this.seamsWebConfigs.network.relayer?.url || "").trim();
2872
- if (!relayerUrl) throw new Error("[SigningEngine][ed25519-export] passkey export requires relayerUrl");
2873
- const walletId = toWalletId(String(args.laneIdentity.signer.account.wallet.walletId));
2874
- if (!await readExactEd25519SealedSession(ed25519DurableMaterialLocator({
2875
- authMethod: args.laneIdentity.auth.kind,
2876
- materialActivation: args.materialActivation
2877
- }))) return await this.resolveLinkedPasskeyEd25519YaoExportContext({
2878
- ...args,
2879
- walletId,
2880
- relayerUrl
2881
- });
2882
- const runtime = await requireExactEd25519SealedRuntimeForMaterialActivation({
2883
- walletId,
2884
- laneIdentity: args.laneIdentity,
2885
- materialActivation: args.materialActivation
2886
- });
2887
- let thresholdSessionId = args.laneIdentity.thresholdSessionId;
2888
- if (await resolveActiveEd25519WalletSessionAuthorization(runtime.walletId, relayerUrl)) {
2889
- const walletSessionState = await walletSessionStateFromExactEd25519Runtime({
2890
- runtime,
2891
- relayerUrl: String(this.seamsWebConfigs.network.relayer?.url || "").trim()
2892
- });
2893
- if ((await this.ensurePasskeyEd25519WarmSessionForSigning({
2894
- runtime,
2895
- walletSessionState,
2896
- materialActivation: args.materialActivation
2897
- })).ok) thresholdSessionId = walletSessionState.thresholdSessionId;
2898
- }
2899
- return await resolvePasskeyEd25519YaoExportContextV1({
2900
- subject: {
2901
- kind: "owner_sealed_runtime",
2902
- walletId: toWalletId(String(args.laneIdentity.signer.account.wallet.walletId)),
2903
- nearAccountId: String(args.laneIdentity.signer.account.nearAccountId),
2904
- nearEd25519SigningKeyId: String(args.laneIdentity.signer.nearEd25519SigningKeyId),
2905
- signerSlot: args.laneIdentity.signer.signerSlot,
2906
- thresholdSessionId,
2907
- materialActivation: args.materialActivation
2908
- },
2909
- relayerUrl,
2910
- fetch: fetchWithGlobalThis
2911
- }, {
2912
- readExactEd25519SealedSession,
2913
- readPasskeyCustodySessionEnvelope,
2914
- resolveSelectedWalletAuthority: IndexedDBManager.resolveSelectedWalletAuthority.bind(IndexedDBManager),
2915
- readExactWalletSessionAuthorization: walletSessionAuthorizations.readExactActiveForWallet.bind(walletSessionAuthorizations),
2916
- resolveExactPasskeyWalletAuthAuthorityRef: resolveBrowserExactPasskeyWalletAuthAuthorityRef,
2917
- nowMs: this.runtimePorts.clock.nowMs
2918
- });
2919
- }
2920
- async resolveLinkedPasskeyEd25519YaoExportContext(args) {
2921
- if (args.laneIdentity.auth.kind !== WALLET_AUTH_METHODS.passkey) throw new Error("[SigningEngine][ed25519-export] linked export requires a Passkey lane");
2922
- const selected = await IndexedDBManager.resolveSelectedWalletAuthority(String(args.walletId));
2923
- if (selected.kind !== "resolved") {
2924
- const detail = selected.kind === "integrity_error" ? `: ${selected.reason}` : "";
2925
- throw new Error(`[SigningEngine][ed25519-export] selected Wallet Authority is ${selected.kind}${detail}`);
2926
- }
2927
- const { selection, authMethod, authority, signerMaterials, exportRoot } = selected;
2928
- if (selection.lockState !== "unlocked" || authMethod.kind !== WALLET_AUTH_METHODS.passkey || authMethod.status !== "active" || authority.state !== "active" || authority.provenance.kind !== "device_link" || String(authMethod.walletId) !== String(args.walletId) || authMethod.walletAuthorityId !== authority.authorityId || authMethod.walletAuthMethodId !== selection.walletAuthMethodId || String(authMethod.rpId) !== String(args.laneIdentity.auth.rpId) || authMethod.credentialIdB64u !== args.laneIdentity.auth.credentialIdB64u) throw new Error("[SigningEngine][ed25519-export] selected linked Passkey authority is unavailable");
2929
- const authorityActivation = authority.signerActivations.ed25519;
2930
- if (!authority.permissions.includes("export_keys") || !authorityActivation || !mpcMaterialActivationRefsEqual(authorityActivation.materialActivation, args.materialActivation) || !exportRoot) throw new Error("[SigningEngine][ed25519-export] selected authority has no exact Ed25519 export capability");
2931
- let linkedMaterial = null;
2932
- for (const candidate of signerMaterials) {
2933
- if (!isLinkedEd25519SignerMaterial(candidate) || candidate.authorityId !== authority.authorityId || candidate.walletAuthMethodId !== authMethod.walletAuthMethodId || !mpcMaterialActivationRefsEqual(candidate.materialActivation, args.materialActivation)) continue;
2934
- if (linkedMaterial) throw new Error("[SigningEngine][ed25519-export] linked Ed25519 material is ambiguous");
2935
- linkedMaterial = candidate;
2936
- }
2937
- if (!linkedMaterial) throw new Error("[SigningEngine][ed25519-export] linked Ed25519 material is unavailable");
2938
- const targetFactor = linkedMaterial.targetFactor;
2939
- if (targetFactor.kind !== WALLET_AUTH_METHODS.passkey || targetFactor.walletAuthMethodId !== authMethod.walletAuthMethodId || targetFactor.rpId !== authMethod.rpId || targetFactor.credentialIdB64u !== authMethod.credentialIdB64u) throw new Error("[SigningEngine][ed25519-export] linked Ed25519 factor binding changed");
2940
- const exactSession = exactWalletSessionWithOperationCredentialOrThrow(await walletSessionAuthorizations.readExactWithOperationCredential({
2941
- walletId: args.walletId,
2942
- authorityId: authority.authorityId,
2943
- authMethodId: authMethod.walletAuthMethodId
2944
- }), "[SigningEngine][ed25519-export] exact linked Wallet Session requires a newer client");
2945
- let exactExportSubject = false;
2946
- if (exactSession) {
2947
- for (const subject of exactSession.record.capabilitySubjects) if (subject.kind === "export_keys" && subject.keyFamily === "ed25519" && mpcMaterialActivationRefsEqual(subject.materialActivation, args.materialActivation)) {
2948
- exactExportSubject = true;
2949
- break;
2950
- }
2951
- }
2952
- if (!exactSession || !exactExportSubject || exactSession.record.authorityDigestB64u !== authority.authorityDigestB64u || exactSession.record.authorityRevocationEpoch !== authority.revocationEpoch || exactSession.record.expiresAtMs <= Date.now()) throw new Error("[SigningEngine][ed25519-export] exact linked Wallet Session is unavailable");
2953
- const publicLane = await resolveExactPasskeyPublicLaneReference({
2954
- store: this.ed25519YaoPublicCapabilityReferences,
2955
- laneIdentity: args.laneIdentity
2956
- });
2957
- if (!mpcMaterialActivationRefsEqual(publicLane.materialActivation, args.materialActivation)) throw new Error("[SigningEngine][ed25519-export] linked public lane activation changed");
2958
- const factorAuthority = await walletAuthAuthorityRef({ authority: {
2959
- walletId: authMethod.walletId,
2960
- factor: {
2961
- kind: WALLET_AUTH_METHODS.passkey,
2962
- credentialIdB64u: authMethod.credentialIdB64u
2963
- },
2964
- verifier: {
2965
- kind: "webauthn",
2966
- rpId: authMethod.rpId
2967
- },
2968
- bindingId: authMethod.walletAuthMethodId
2969
- } });
2970
- if (factorAuthority.walletAuthMethodId !== authMethod.walletAuthMethodId) throw new Error("[SigningEngine][ed25519-export] Passkey Wallet Session authority changed");
2971
- const activeMaterial = this.enginePorts.ed25519YaoActiveClients.resolve({
2972
- walletId: args.walletId,
2973
- nearAccountId: args.laneIdentity.signer.account.nearAccountId,
2974
- materialActivation: args.materialActivation
2975
- });
2976
- if (!activeMaterial || activeMaterial.activeClient.status().kind !== "active") throw new Error("[SigningEngine][ed25519-export] linked Ed25519 runtime is unavailable");
2977
- const metadata = activeMaterial.activeClient.metadata();
2978
- const metadataActivation = nearEd25519YaoMaterialActivationFromMetadata(metadata);
2979
- const facts = activeMaterial.facts;
2980
- const signer = args.laneIdentity.signer;
2981
- const application = linkedMaterial.publicFacts.applicationBinding;
2982
- const registeredPublicKeyB64u = base64UrlEncode(metadata.registeredPublicKey);
2983
- const stateEpoch = Number(metadata.stateEpoch);
2984
- const parsedThresholdSessionId = parseThresholdEd25519SessionId(metadata.scope.threshold_session_id);
2985
- const runtimeScope = facts.runtimePolicyScope;
2986
- const laneScope = publicLane.runtimePolicyScope;
2987
- if (!parsedThresholdSessionId.ok || !Number.isSafeInteger(stateEpoch) || stateEpoch < 1 || !mpcMaterialActivationRefsEqual(metadataActivation, args.materialActivation) || String(facts.thresholdSessionId) !== String(args.laneIdentity.thresholdSessionId) || String(facts.signer.account.wallet.walletId) !== String(args.walletId) || String(facts.signer.account.nearAccountId) !== String(signer.account.nearAccountId) || String(facts.signer.nearEd25519SigningKeyId) !== String(signer.nearEd25519SigningKeyId) || facts.signer.signerSlot !== signer.signerSlot || application.wallet_id !== String(args.walletId) || application.near_ed25519_signing_key_id !== String(signer.nearEd25519SigningKeyId) || application.key_creation_signer_slot !== signer.signerSlot || metadata.applicationBinding.wallet_id !== application.wallet_id || metadata.applicationBinding.near_ed25519_signing_key_id !== application.near_ed25519_signing_key_id || metadata.applicationBinding.signing_root_id !== application.signing_root_id || metadata.applicationBinding.key_creation_signer_slot !== application.key_creation_signer_slot || metadata.scope.lifecycle_id !== linkedMaterial.publicFacts.targetBinding.lifecycle.lifecycle_id || metadata.scope.root_share_epoch !== linkedMaterial.publicFacts.targetBinding.lifecycle.root_share_epoch || metadata.scope.account_id !== String(args.walletId) || metadata.scope.threshold_session_id !== String(args.laneIdentity.thresholdSessionId) || metadata.scope.signing_worker_id !== facts.routerAbNormalSigning.signingWorkerId || facts.signingRootId !== application.signing_root_id || facts.signingRootVersion !== metadata.scope.root_share_epoch || runtimeScope.orgId !== laneScope.orgId || runtimeScope.projectId !== laneScope.projectId || runtimeScope.envId !== laneScope.envId || runtimeScope.signingRootVersion !== laneScope.signingRootVersion || linkedMaterial.publicFacts.participantIds[0] !== metadata.participantIds[0] || linkedMaterial.publicFacts.participantIds[1] !== metadata.participantIds[1] || base64UrlEncode(Uint8Array.from(linkedMaterial.publicFacts.activationReceipt.registered_public_key)) !== registeredPublicKeyB64u || authorityActivation.signer.registeredPublicKeyB64u !== registeredPublicKeyB64u) throw new Error("[SigningEngine][ed25519-export] linked Ed25519 runtime identity changed");
2988
- const material = {
2989
- authority: factorAuthority,
2990
- walletId: signer.account.wallet.walletId,
2991
- nearAccountId: signer.account.nearAccountId,
2992
- nearEd25519SigningKeyId: String(signer.nearEd25519SigningKeyId),
2993
- signerSlot: signer.signerSlot,
2994
- operationalPublicKey: `ed25519:${base58Encode(metadata.registeredPublicKey)}`,
2995
- relayerKeyId: metadata.scope.signing_worker_id,
2996
- credentialIdB64u: authMethod.credentialIdB64u,
2997
- capability: {
2998
- materialActivation: metadataActivation,
2999
- activeCapabilityBinding: [...metadata.activeCapabilityBinding],
3000
- registeredPublicKey: [...metadata.registeredPublicKey],
3001
- nearAccountId: signer.account.nearAccountId,
3002
- applicationBinding: metadata.applicationBinding,
3003
- participantIds: metadata.participantIds,
3004
- runtimePolicyScope: facts.runtimePolicyScope,
3005
- lifecycle: {
3006
- lifecycleId: metadata.scope.lifecycle_id,
3007
- rootShareEpoch: metadata.scope.root_share_epoch,
3008
- accountId: metadata.scope.account_id,
3009
- thresholdSessionId: parsedThresholdSessionId.value,
3010
- signerSetId: metadata.scope.signer_set_id,
3011
- signingWorkerId: metadata.scope.signing_worker_id
3012
- },
3013
- stateEpoch
3014
- }
3015
- };
3016
- return {
3017
- kind: "ready",
3018
- context: {
3019
- kind: "passkey_ed25519_yao_export_context_v1",
3020
- selectedLaneMaterialActivation: args.materialActivation,
3021
- material,
3022
- authorization: exactSession,
3023
- relayerUrl: args.relayerUrl,
3024
- rpId: authMethod.rpId,
3025
- walletCustodyEnvelope: exportRoot.envelope
3026
- }
3027
- };
3028
- }
3029
- readExactEmailOtpEd25519ExportAuthorization(args) {
3030
- return readExactEmailOtpEd25519ExportAuthorization({
3031
- subject: args.subject,
3032
- relayerUrl: String(this.seamsWebConfigs.network.relayer?.url || "").trim()
3033
- });
3034
- }
3035
- async activateRecoveredEmailOtpEd25519ExportCapability(lane, request) {
3036
- const activation = request.activation;
3037
- await this.activateEmailOtpEd25519CustodyCapabilityWithExactCredential({
3038
- commitQueue: "acquire",
3039
- walletSession: {
3040
- walletId: lane.signer.account.wallet.walletId,
3041
- walletSessionUserId: String(lane.signer.account.wallet.walletId)
3042
- },
3043
- providerSubject: lane.auth.providerSubjectId,
3044
- emailHashHex: activation.emailHashHex,
3045
- signerSlot: lane.signer.signerSlot,
3046
- expectedOperationalPublicKey: `ed25519:${base58Encode(activation.metadata.registeredPublicKey)}`,
3047
- expectedThresholdSessionId: String(lane.thresholdSessionId),
3048
- bootstrap: activation.bootstrap,
3049
- activeClientHandle: activation.activeClientHandle,
3050
- metadata: activation.metadata,
3051
- credentialExpectation: {
3052
- kind: "expect_exact_operation_credential",
3053
- operationCredential: request.operationCredential
3054
- }
3055
- });
3056
- }
3057
- async resolveEmailOtpEd25519YaoExportContext(args) {
3058
- return await resolveWalletCustodyEd25519ExportContextV1({
3059
- subject: args.laneIdentity,
3060
- expectedMaterialActivation: args.materialActivation,
3061
- readExactWalletSessionAuthorization: this.readExactEmailOtpEd25519ExportAuthorization.bind(this),
3062
- resolveActiveCapability: (walletId, nearAccountId, materialActivation) => this.enginePorts.ed25519YaoActiveClients.resolve({
3063
- walletId,
3064
- nearAccountId: toAccountId(nearAccountId),
3065
- materialActivation
3066
- }),
3067
- resolveEd25519YaoClientRootEnvelope: async ({ subject, capability, selectedMaterialActivation }) => resolveSelectedEmailOtpEd25519ExportRootV1({
3068
- selected: await IndexedDBManager.resolveSelectedWalletAuthority(String(subject.signer.account.wallet.walletId)),
3069
- subject,
3070
- expectedMaterialActivation: selectedMaterialActivation,
3071
- activeCapability: capability
3072
- }),
3073
- loadWalletCustodyMaterial: () => this.loadEmailOtpWalletCustodyEd25519Material({
3074
- nearAccountId: String(args.laneIdentity.signer.account.nearAccountId),
3075
- signerSlot: args.laneIdentity.signer.signerSlot
3076
- }),
3077
- relayerUrl: this.seamsWebConfigs.network.relayer?.url || "",
3078
- fetch: fetchWithGlobalThis,
3079
- activateRecoveredCapability: this.activateRecoveredEmailOtpEd25519ExportCapability.bind(this, args.laneIdentity)
3080
- });
3081
- }
3082
- async resolveActiveNearEd25519YaoSigningLane(subject) {
3083
- if (!await this.resolveNearEd25519YaoSigningLane(subject)) return null;
3084
- const identity = nearEd25519CapabilityRehydrationMaterialIdentity(subject);
3085
- const capability = subject.kind === "export_exact_lane" ? this.enginePorts.ed25519YaoActiveClients.resolve({
3086
- walletId: identity.signer.account.wallet.walletId,
3087
- nearAccountId: identity.signer.account.nearAccountId,
3088
- materialActivation: subject.materialActivation
3089
- }) : this.enginePorts.ed25519YaoActiveClients.resolveForWalletAccount({
3090
- walletId: identity.signer.account.wallet.walletId,
3091
- nearAccountId: identity.signer.account.nearAccountId
3092
- });
3093
- return capability?.activeClient.status().kind === "active" ? capability : null;
3094
- }
3095
- async resolveNearEd25519YaoSigningLane(subject) {
3096
- const walletId = nearEd25519CapabilityRehydrationMaterialIdentity(subject).signer.account.wallet.walletId;
3097
- const availableLanes = await this.readPersistedAvailableSigningLanes({
3098
- walletId,
3099
- ownerScope: await this.resolveSelectedOwnerLaneScope(walletId)
3100
- });
3101
- const matches = [];
3102
- for (const lane of availableLanes.candidates.ed25519.near) {
3103
- if (!nearEd25519LaneMatchesCapabilityRehydrationSubject(lane, subject)) continue;
3104
- if (!isConcreteAvailableSigningLane(lane) || lane.curve !== "ed25519") continue;
3105
- matches.push(lane);
3106
- }
3107
- if (matches.length > 1) throw new Error("[SigningEngine][near] local Ed25519 material lane is ambiguous");
3108
- return matches[0] || null;
3109
- }
3110
- async ensurePasskeyEd25519WarmSessionForSigning(args) {
3111
- const claim = await ensurePasskeyEd25519WarmSessionForSigning({
3112
- ...args,
3113
- claimWarmSessionMaterial: this.passkeyMpcSession.claimWarmSessionMaterial.bind(this.passkeyMpcSession),
3114
- rehydrateWarmSessionMaterial: this.passkeyMpcSession.rehydrateWarmSessionMaterial.bind(this.passkeyMpcSession)
3115
- });
3116
- if (claim.ok && args.runtime.factor.kind === "passkey" && String(args.runtime.thresholdSessionId) !== String(args.walletSessionState.thresholdSessionId)) await persistPasskeyEd25519YaoSessionForRefresh({
3117
- persistence: this,
3118
- session: args.walletSessionState,
3119
- prfFirstB64u: claim.prfFirstB64u,
3120
- ed25519Restore: buildPasskeyEd25519RestoreMetadata({
3121
- rpId: args.runtime.factor.rpId,
3122
- nearAccountId: args.runtime.nearAccountId,
3123
- nearEd25519SigningKeyId: args.runtime.nearEd25519SigningKeyId,
3124
- relayerKeyId: args.runtime.relayerKeyId,
3125
- participantIds: args.runtime.participantIds,
3126
- runtimePolicyScope: args.runtime.runtimePolicyScope,
3127
- signerSlot: args.runtime.signerSlot,
3128
- routerAbNormalSigning: args.runtime.routerAbNormalSigning,
3129
- credentialIdB64u: args.runtime.factor.credentialIdB64u,
3130
- materialActivation: args.materialActivation
3131
- }),
3132
- materialActivation: args.materialActivation
3133
- });
3134
- return claim;
3135
- }
3136
- async rehydrateNearEd25519YaoCapabilityForSigning(subject) {
3137
- const identity = nearEd25519CapabilityRehydrationMaterialIdentity(subject);
3138
- const lane = await this.resolveNearEd25519YaoSigningLane(subject);
3139
- if (!lane) throw new Error("[SigningEngine][near] local Ed25519 material lane is unavailable");
3140
- let runtime;
3141
- if (subject.kind === "export_exact_lane") runtime = await requireExactEd25519SealedRuntimeForMaterialActivation({
3142
- walletId: identity.signer.account.wallet.walletId,
3143
- laneIdentity: subject.laneIdentity,
3144
- materialActivation: subject.materialActivation
3145
- });
3146
- else {
3147
- const laneIdentity = subject.kind === "exact_lane" ? subject.laneIdentity : exactEd25519LaneIdentityFromAvailableLane(lane);
3148
- runtime = await requireExactEd25519SealedRuntimeForLane({
3149
- walletId: identity.signer.account.wallet.walletId,
3150
- laneIdentity
3151
- });
3152
- }
3153
- const walletSessionState = await walletSessionStateFromExactEd25519Runtime({
3154
- runtime,
3155
- relayerUrl: String(this.seamsWebConfigs.network.relayer?.url || "").trim()
3156
- });
3157
- if (runtime.factor.kind !== "passkey") throw new Error("[SigningEngine][near] persisted Ed25519 credential is unavailable");
3158
- const credentialIdB64u = runtime.factor.credentialIdB64u;
3159
- const materialActivation = runtime.sealedRecord.ed25519Restore.materialActivation;
3160
- if (!mpcMaterialActivationRefsEqual(materialActivation, lane.materialActivation)) throw new Error("[SigningEngine][near] persisted Ed25519 material activation mismatch");
3161
- const warmSessionClaim = await this.ensurePasskeyEd25519WarmSessionForSigning({
3162
- runtime,
3163
- walletSessionState,
3164
- materialActivation
3165
- });
3166
- const publicLocator = {
3167
- kind: "available",
3168
- walletId: String(walletSessionState.signingLane.identity.signer.account.wallet.walletId),
3169
- nearAccountId: String(walletSessionState.signingLane.identity.signer.account.nearAccountId),
3170
- signerSlot: walletSessionState.signingLane.identity.signer.signerSlot,
3171
- materialActivation
3172
- };
3173
- const liveHydration = await this.resolvePasskeyEd25519YaoHydration({
3174
- walletSessionState,
3175
- credentialIdB64u,
3176
- publicLocator,
3177
- unlockSource: warmSessionClaim.ok ? {
3178
- kind: "available",
3179
- passkeyPrfFirstB64u: warmSessionClaim.prfFirstB64u
3180
- } : { kind: "unavailable" }
3181
- });
3182
- if (liveHydration.kind === "live") {
3183
- const material = await this.resolveActiveNearEd25519YaoSigningLane(subject);
3184
- if (!material) throw new Error("[SigningEngine][near] local material rehydration did not publish a lane");
3185
- return {
3186
- subject,
3187
- material
3188
- };
3189
- }
3190
- if (liveHydration.kind === "rehydrated") {
3191
- if (!warmSessionClaim.ok) {
3192
- liveHydration.activeClient.dispose();
3193
- throw new Error("[SigningEngine][near] local material rehydration lost the PRF secret");
3194
- }
3195
- try {
3196
- await persistPasskeyEd25519YaoSessionForRefresh({
3197
- persistence: this,
3198
- session: walletSessionState,
3199
- prfFirstB64u: warmSessionClaim.prfFirstB64u,
3200
- ed25519Restore: buildPasskeyEd25519RestoreMetadata({
3201
- rpId: runtime.factor.rpId,
3202
- nearAccountId: runtime.nearAccountId,
3203
- nearEd25519SigningKeyId: runtime.nearEd25519SigningKeyId,
3204
- relayerKeyId: runtime.relayerKeyId,
3205
- participantIds: runtime.participantIds,
3206
- runtimePolicyScope: runtime.runtimePolicyScope,
3207
- signerSlot: runtime.signerSlot,
3208
- routerAbNormalSigning: runtime.routerAbNormalSigning,
3209
- credentialIdB64u,
3210
- materialActivation
3211
- }),
3212
- materialActivation
3213
- });
3214
- await this.enginePorts.ed25519YaoActiveClients.activate({
3215
- activeClient: liveHydration.activeClient,
3216
- facts: nearEd25519YaoOperationMaterialFacts(walletSessionState)
3217
- });
3218
- const reboundSubject = currentNearEd25519CapabilityRehydrationSubject({
3219
- subject,
3220
- walletSessionState
3221
- });
3222
- const published = await this.resolveActiveNearEd25519YaoSigningLane(reboundSubject);
3223
- if (!published) throw new Error("[SigningEngine][near] local material rehydration did not publish an active lane");
3224
- return {
3225
- subject: reboundSubject,
3226
- material: published
3227
- };
3228
- } catch (error) {
3229
- liveHydration.activeClient.dispose();
3230
- throw error;
3231
- }
3232
- }
3233
- if (liveHydration.plan.reason !== "missing_material") throw new Error(`[SigningEngine][near] local threshold Ed25519 hydration blocked: ${liveHydration.plan.reason}`);
3234
- throw new Error("[SigningEngine][near] local threshold Ed25519 material requires Passkey reauthorization");
3235
- }
3236
- async resolvePasskeyEd25519YaoHydration(args) {
3237
- const signer = args.walletSessionState.signingLane.identity.signer;
3238
- return hydratePasskeyEd25519YaoLocalMaterialV1({
3239
- store: IndexedDBManager,
3240
- identity: ed25519YaoLocalMaterialIdentityFromWalletSession(args.walletSessionState, this.getRpId(), args.credentialIdB64u),
3241
- authority: args.walletSessionState.authority,
3242
- publicLocator: args.publicLocator,
3243
- unlockSource: args.unlockSource,
3244
- liveMaterial: args.publicLocator.kind === "available" ? this.enginePorts.ed25519YaoActiveClients.resolve({
3245
- walletId: signer.account.wallet.walletId,
3246
- nearAccountId: signer.account.nearAccountId,
3247
- materialActivation: args.publicLocator.materialActivation
3248
- }) : null
3249
- });
3250
- }
3251
- async signEvmFamily(args) {
3252
- return await signEvmFamily(this.enginePorts.tempoSigningDeps, args);
3253
- }
3254
- async reportTempoBroadcastAccepted(args) {
3255
- await reportTempoBroadcastAccepted(this.enginePorts.tempoSigningDeps, args);
3256
- }
3257
- async reportTempoBroadcastRejected(args) {
3258
- await reportTempoBroadcastRejected(this.enginePorts.tempoSigningDeps, args);
3259
- }
3260
- async reportTempoFinalized(args) {
3261
- await reportTempoFinalized(this.enginePorts.tempoSigningDeps, args);
3262
- }
3263
- async reportTempoDroppedOrReplaced(args) {
3264
- await reportTempoDroppedOrReplaced(this.enginePorts.tempoSigningDeps, args);
3265
- }
3266
- async reconcileTempoNonceLane(args) {
3267
- return await reconcileTempoNonceLane(this.enginePorts.tempoSigningDeps, args);
3268
- }
3269
- storeUserData(userData) {
3270
- return storeUserData(this.registrationPublicDeps, userData);
3271
- }
3272
- async storeNearThresholdKeyMaterial(input) {
3273
- await storeNearThresholdKeyMaterial({
3274
- clientDB: IndexedDBManager,
3275
- keyMaterialStore: IndexedDBManager
3276
- }, input);
3277
- }
3278
- getAllUsers() {
3279
- return getAllUsers(this.registrationPublicDeps);
3280
- }
3281
- getUserBySignerSlot(nearAccountId, signerSlot) {
3282
- return getUserBySignerSlot(this.registrationPublicDeps, nearAccountId, signerSlot);
3283
- }
3284
- getLastUser() {
3285
- return getLastUser(this.registrationPublicDeps);
3286
- }
3287
- nearAuthenticatorsByAccount(nearAccountId) {
3288
- return nearAuthenticatorsByAccount(this.registrationPublicDeps, nearAccountId);
3289
- }
3290
- setLastUser(walletId, signerSlot) {
3291
- return setLastUser(this.registrationPublicDeps, walletId, signerSlot);
3292
- }
3293
- activateAuthenticatedWalletState(args) {
3294
- return activateAuthenticatedWalletState(this.registrationPublicDeps, args);
3295
- }
3296
- async upsertEd25519YaoPublicCapabilityReference(identity) {
3297
- await this.ed25519YaoPublicCapabilityReferences.upsert(identity);
3298
- }
3299
- async upsertEd25519YaoPublicCapabilityLaneReference(reference) {
3300
- await publishEd25519YaoPublicCapabilityReferenceAndLane(this.ed25519YaoPublicCapabilityReferences, reference);
3301
- }
3302
- setWalletNearProvisioningState(write) {
3303
- return setWalletNearProvisioningState(this.registrationPublicDeps, write);
3304
- }
3305
- getWalletNearProvisioningState(walletId) {
3306
- return getWalletNearProvisioningState(this.registrationPublicDeps, walletId);
3307
- }
3308
- storeAuthenticator(authenticatorData) {
3309
- return storeAuthenticator(this.registrationPublicDeps, authenticatorData);
3310
- }
3311
- rollbackUserRegistration(nearAccountId) {
3312
- return rollbackUserRegistration(this.registrationPublicDeps, nearAccountId);
3313
- }
3314
- hasPasskeyCredential(nearAccountId) {
3315
- return hasPasskeyCredential(this.registrationPublicDeps, nearAccountId);
3316
- }
3317
- storeWalletEd25519RegistrationData(input) {
3318
- return storeWalletEd25519RegistrationData(this.registrationPublicDeps, input);
3319
- }
3320
- storeWalletMixedRegistrationData(input) {
3321
- return storeWalletMixedRegistrationData(this.registrationPublicDeps, input);
3322
- }
3323
- storeWalletEd25519RecoveryRegistrationData(input) {
3324
- return storeWalletEd25519RecoveryRegistrationData(this.registrationPublicDeps, input);
3325
- }
3326
- storeWalletEmailOtpEd25519RegistrationData(input) {
3327
- return storeWalletEmailOtpEd25519RegistrationData(this.registrationPublicDeps, input);
3328
- }
3329
- storeWalletEmailOtpMixedRegistrationData(input) {
3330
- return storeWalletEmailOtpMixedRegistrationData(this.registrationPublicDeps, input);
3331
- }
3332
- finalizeWalletEd25519SignerRegistration(input) {
3333
- return finalizeWalletEd25519SignerRegistration(this.registrationPublicDeps, input);
3334
- }
3335
- rollbackWalletEd25519SignerRegistration(receipt) {
3336
- return rollbackWalletEd25519SignerRegistration(this.registrationPublicDeps, receipt);
3337
- }
3338
- createRouterAbEcdsaRegistrationCeremony(input) {
3339
- return this.runtimePorts.signerCrypto.createRouterAbEcdsaRegistrationCeremony(input);
3340
- }
3341
- verifyRouterAbEcdsaRegistrationClientProofs(input) {
3342
- return this.runtimePorts.signerCrypto.verifyRouterAbEcdsaRegistrationClientProofs(input);
3343
- }
3344
- persistInitialCanonicalEcdsaActivation(input) {
3345
- return this.runtimePorts.signerCrypto.persistInitialCanonicalEcdsaActivation(input);
3346
- }
3347
- finalizeRouterAbEcdsaRegistrationActivation(input) {
3348
- return this.runtimePorts.signerCrypto.finalizeRouterAbEcdsaRegistrationActivation(input);
3349
- }
3350
- closeRouterAbEcdsaRegistrationCeremony(input) {
3351
- return this.runtimePorts.signerCrypto.closeRouterAbEcdsaRegistrationCeremony(input);
3352
- }
3353
- finalizeWalletRegistrationEcdsaSessions(input) {
3354
- return finalizeWalletRegistrationEcdsaSessions(input);
3355
- }
3356
- storeWalletEcdsaSignerRecords(input) {
3357
- return storeWalletEcdsaSignerRecords(this.registrationPublicDeps, input);
3358
- }
3359
- storeWalletEcdsaRecoverySignerRecords(input) {
3360
- return storeWalletEcdsaRecoverySignerRecords(this.registrationPublicDeps, input);
3361
- }
3362
- storeWalletEmailOtpEcdsaSignerRecords(input) {
3363
- return storeWalletEmailOtpEcdsaSignerRecords(this.registrationPublicDeps, input);
3364
- }
3365
- finalizeWalletEcdsaRegistration(input) {
3366
- return finalizeWalletEcdsaRegistration(this.registrationPublicDeps, input);
3367
- }
3368
- async activateVerifiedNearEd25519YaoMaterial(material) {
3369
- return await this.enginePorts.ed25519YaoActiveClients.activate(material);
3370
- }
3371
- async withExactEd25519MaterialOwner(args) {
3372
- return await withThresholdEd25519CommitQueue({
3373
- queueByKey: this.thresholdEd25519CommitQueueByKey,
3374
- queueKey: resolveThresholdCommitQueueKey({ materialActivation: args.materialActivation }),
3375
- nearAccountId: args.nearAccountId,
3376
- enabled: true,
3377
- task: args.task
3378
- });
3379
- }
3380
- storeWalletEmailOtpEcdsaRegistrationData(input) {
3381
- return storeWalletEmailOtpEcdsaRegistrationData(this.registrationPublicDeps, input);
3382
- }
3383
- prepareSigningSessionHydration(input) {
3384
- return this.passkeyMpcSession.prepareSigningSessionHydration(input);
3385
- }
3386
- readPreparedSigningSessionHydration(input) {
3387
- return this.passkeyMpcSession.readPreparedSigningSessionHydration(input);
3388
- }
3389
- discardSigningSessionHydration(input) {
3390
- return this.passkeyMpcSession.discardSigningSessionHydration(input);
3391
- }
3392
- hydrateSigningSession(input) {
3393
- return hydrateSigningSession(this.warmCapabilitiesPublicDeps, input);
3394
- }
3395
- persistSigningSessionSealForThresholdSession(input) {
3396
- return this.passkeyMpcSession.persistSigningSessionSealForThresholdSession(input);
3397
- }
3398
- /**
3399
- * Collects the one-time email code inside the wallet.
3400
- *
3401
- * Built on the same confirmation channel key export uses, so the code is
3402
- * typed into the wallet's own surface and never passes through the host
3403
- * application — the reason `addEmailOtp` takes an address and not a code.
3404
- */
3405
- async requestEmailOtpEnrollmentConfirmation(params) {
3406
- let currentChallengeId = params.challengeId;
3407
- const emailOtpPrompt = {
3408
- challengeId: params.challengeId,
3409
- ...params.emailHint ? { emailHint: params.emailHint } : {},
3410
- title: params.confirmerText?.title || "Enter email code to add sign-in",
3411
- body: params.confirmerText?.body || `This one-time code confirms ${params.emailAddress} can unlock this wallet.`,
3412
- helperText: "Enter the 6-digit code sent to your email",
3413
- onResend: async () => {
3414
- const resent = await params.onResend();
3415
- currentChallengeId = resent.challengeId;
3416
- return {
3417
- challengeId: resent.challengeId,
3418
- ...resent.emailHint ? { emailHint: resent.emailHint } : {},
3419
- delivery: { mode: "email_provider" }
3420
- };
3421
- }
3422
- };
3423
- const decision = await this.touchConfirm.requestUserConfirmation({
3424
- requestId: secureRandomId("add-auth-method-email-otp", 32, "Email OTP enrollment UI ids"),
3425
- type: UserConfirmationType.SIGN_INTENT_DIGEST,
3426
- summary: {
3427
- type: "add_auth_method",
3428
- operation: "Add email code sign-in",
3429
- title: emailOtpPrompt.title,
3430
- body: emailOtpPrompt.body,
3431
- warning: "Security note: Adding email code lowers this wallet’s security because your inbox becomes another way to unlock it."
3432
- },
3433
- payload: {
3434
- signingSubject: {
3435
- kind: "evm_wallet",
3436
- walletId: params.walletId
3437
- },
3438
- challengeB64u: params.challengeId,
3439
- signingAuthPlan: {
3440
- kind: SigningAuthPlanKind.EmailOtpReauth,
3441
- method: "email_otp",
3442
- emailOtpPrompt
3443
- },
3444
- emailOtpPrompt
3445
- },
3446
- intentDigest: `add-auth-method:${params.walletId}:email-otp`,
3447
- ...params.confirmationConfigOverride ? { confirmationConfigOverride: params.confirmationConfigOverride } : {}
3448
- });
3449
- if (!decision.confirmed) throw new Error(decision.error || "Adding an email code was cancelled");
3450
- const otpCode = String(decision.otpCode || "").replace(/\D/g, "").slice(0, 6);
3451
- if (otpCode.length !== 6) throw new Error("Adding an email code requires a 6-digit code");
3452
- return {
3453
- challengeId: String(decision.emailOtpChallengeId || currentChallengeId).trim(),
3454
- otpCode
3455
- };
3456
- }
3457
- requestRegistrationCredentialConfirmation(params) {
3458
- return requestRegistrationCredentialConfirmation(this.registrationPublicDeps, params);
3459
- }
3460
- openRegistrationPreparationModal(params) {
3461
- return this.touchConfirm.openRegistrationPreparationModal(params);
3462
- }
3463
- closeRegistrationPreparationModal() {
3464
- this.touchConfirm.closeRegistrationPreparationModal();
3465
- }
3466
- startPreparedPasskeyRegistrationCredential(args) {
3467
- if (this.touchIdPrompt.getRpId() !== args.expectedRpId) throw new Error("Prepared registration rpId does not match the wallet runtime");
3468
- return this.touchIdPrompt.generateRegistrationCredentialsInternal({
3469
- kind: "wallet_registration",
3470
- walletId: args.walletId,
3471
- challengeB64u: args.challengeB64u,
3472
- signerSlot: args.signerSlot,
3473
- intendedUserName: args.walletId,
3474
- prompt: {
3475
- kind: "reserved",
3476
- reservation: args.reservation,
3477
- owner: args.owner,
3478
- cancellation: args.cancellation
3479
- }
3480
- }).then(serializePreparedRegistrationCredential);
3481
- }
3482
- getAuthenticationCredentialsSerialized(args) {
3483
- if (args.cancellation) return this.touchIdPrompt.getAuthenticationCredentialsSerializedForChallengeB64u(args);
3484
- return getAuthenticationCredentialsSerialized(this.registrationPublicDeps, args);
3485
- }
3486
- async exportKeypairWithUI(input) {
3487
- return await exportKeypairWithUI(this.recoveryPublicDeps, input);
3488
- }
3489
- async resolveExactKeyExportLane(input) {
3490
- return await resolveExactKeyExportLane(this.recoveryPublicDeps, input);
3491
- }
3492
- async connectEd25519Session(args) {
3493
- return await connectEd25519Session(this.passkeyPublicDeps, args);
3494
- }
3495
- async bootstrapEcdsaSession(args) {
3496
- return await bootstrapEcdsaSession(this.passkeyPublicDeps, args);
3497
- }
3498
- async loginWithEmailOtpEcdsaCapabilityInternal(args) {
3499
- return await loginWithEmailOtpEcdsaCapabilityInternal(this.emailOtpPublicDeps, args);
3500
- }
3501
- async resolveEmailOtpEd25519CustodyProjectionInternal(args) {
3502
- const walletId = String(args.walletSession.walletId);
3503
- let activation;
3504
- switch (args.selector.kind) {
3505
- case "material_activation":
3506
- activation = args.selector.materialActivation;
3507
- break;
3508
- case "wallet_auth_method": {
3509
- const selected = await IndexedDBManager.resolveWalletAuthorityForMethod(walletId, args.selector.walletAuthMethodId);
3510
- activation = selected.kind === "resolved" && selected.authority.state === "active" ? selected.authority.signerActivations.ed25519?.materialActivation : void 0;
3511
- break;
3512
- }
3513
- case "selected_wallet_authority": {
3514
- const selected = await IndexedDBManager.resolveSelectedWalletAuthority(walletId);
3515
- activation = selected.kind === "resolved" && selected.authority.state === "active" ? selected.authority.signerActivations.ed25519?.materialActivation : void 0;
3516
- break;
3517
- }
3518
- default: args.selector;
3519
- }
3520
- if (!activation) return null;
3521
- return await resolveWalletCustodyEd25519ProjectionV1({
3522
- listPublicCapabilityReferences: this.ed25519YaoPublicCapabilityReferences.list.bind(this.ed25519YaoPublicCapabilityReferences),
3523
- listUsers: this.getAllUsers.bind(this)
3524
- }, args.walletSession, args.providerSubjectId, activation);
3525
- }
3526
- /**
3527
- * What an owner authority needs to have its Ed25519 runtime built inside the
3528
- * unlock that verifies its factor.
3529
- *
3530
- * Assembled here rather than by the caller because every field is read off
3531
- * the exact authority projection - the identity, its runtime policy scope,
3532
- * and the custody material cached against that signer. A caller assembling
3533
- * them independently could pair one authority's identity with another's
3534
- * material.
3535
- */
3536
- async resolveOwnerAuthorityEd25519UnlockRequestInternal(args) {
3537
- const projection = await this.resolveEmailOtpEd25519CustodyProjectionInternal({
3538
- walletSession: args.walletSession,
3539
- providerSubjectId: args.providerSubjectId,
3540
- selector: {
3541
- kind: "wallet_auth_method",
3542
- walletAuthMethodId: args.walletAuthMethodId
3543
- }
3544
- });
3545
- if (!projection) return null;
3546
- const signerSlot = projection.user.signerSlot;
3547
- return {
3548
- kind: "owner_authority",
3549
- signerSlot,
3550
- remainingUses: args.remainingUses,
3551
- recovery: {
3552
- ed25519YaoRecovery: {
3553
- kind: ROUTER_AB_ED25519_YAO_EMAIL_OTP_RECOVERY_BOOTSTRAP_KIND_V1,
3554
- signerSlot,
3555
- remainingUses: args.remainingUses,
3556
- orgId: projection.identity.runtimePolicyScope.orgId
3557
- },
3558
- providerSubject: projection.providerSubject,
3559
- nearAccountId: String(projection.identity.nearAccountId),
3560
- expectedOperationalPublicKey: projection.user.operationalPublicKey,
3561
- expectedThresholdSessionId: String(projection.identity.thresholdSessionId),
3562
- walletCustodyEd25519Material: await this.loadEmailOtpWalletCustodyEd25519Material({
3563
- nearAccountId: String(projection.identity.nearAccountId),
3564
- signerSlot
3565
- })
3566
- }
3567
- };
3568
- }
3569
- /**
3570
- * Activate the runtime an owner authority's unlock built.
3571
- *
3572
- * The identity it is checked against comes from the same authority projection
3573
- * that produced the unlock request, not from the bootstrap being checked -
3574
- * comparing a value against itself proves nothing, and the projection is what
3575
- * says which signer this authority owns.
3576
- */
3577
- async activateOwnerAuthorityEd25519RuntimeInternal(args) {
3578
- const projection = await this.resolveEmailOtpEd25519CustodyProjectionInternal({
3579
- walletSession: args.walletSession,
3580
- providerSubjectId: args.providerSubjectId,
3581
- selector: {
3582
- kind: "wallet_auth_method",
3583
- walletAuthMethodId: args.walletAuthMethodId
3584
- }
3585
- });
3586
- if (!projection) throw new Error("Owner Email OTP Ed25519 activation has no signer projection");
3587
- await this.activateEmailOtpEd25519CustodyCapabilityInternal({
3588
- walletSession: args.walletSession,
3589
- providerSubject: projection.providerSubject,
3590
- emailHashHex: args.emailHashHex,
3591
- signerSlot: projection.user.signerSlot,
3592
- expectedOperationalPublicKey: projection.user.operationalPublicKey,
3593
- expectedThresholdSessionId: String(projection.identity.thresholdSessionId),
3594
- bootstrap: args.bootstrap,
3595
- activeClientHandle: args.activeClientHandle,
3596
- metadata: args.metadata,
3597
- authority: args.authority,
3598
- commitQueue: "acquire"
3599
- });
3600
- }
3601
- async activateEmailOtpEd25519RegistrationMaterialInternal(args) {
3602
- const activated = await this.signerWorkerManager.requestWorkerOperation({
3603
- kind: "emailOtp",
3604
- request: {
3605
- type: "activateEmailOtpEd25519YaoRegistrationMaterial",
3606
- payload: {
3607
- material: args.material,
3608
- bootstrap: args.bootstrap,
3609
- envelope: args.envelope,
3610
- factorSecret32: args.factorSecret32
3611
- },
3612
- transfer: [args.factorSecret32]
3613
- }
3614
- });
3615
- try {
3616
- const signer = await this.activateEmailOtpEd25519CustodyCapabilityInternal({
3617
- commitQueue: "acquire",
3618
- walletSession: args.walletSession,
3619
- providerSubject: args.providerSubject,
3620
- emailHashHex: args.emailHashHex,
3621
- signerSlot: args.signerSlot,
3622
- expectedOperationalPublicKey: args.expectedOperationalPublicKey,
3623
- expectedThresholdSessionId: args.expectedThresholdSessionId,
3624
- bootstrap: args.bootstrap,
3625
- activeClientHandle: activated.activeClientHandle,
3626
- metadata: activated.metadata
3627
- });
3628
- await resolveExactEmailOtpEd25519ActivationAuthorization({
3629
- walletId: args.walletSession.walletId,
3630
- emailHashHex: args.emailHashHex,
3631
- providerSubject: args.providerSubject,
3632
- bootstrap: args.bootstrap
3633
- });
3634
- return signer;
3635
- } catch (error) {
3636
- try {
3637
- await requestClearEmailOtpWarmSessionMaterial({
3638
- worker: this.signerWorkerManager.getContext(),
3639
- target: {
3640
- kind: "ed25519_yao",
3641
- thresholdSessionId: args.bootstrap.session.thresholdSessionId,
3642
- materialActivation: activated.metadata.materialActivation
3643
- }
3644
- });
3645
- } catch {}
3646
- try {
3647
- await disposeWalletCustodyEd25519ActiveClientV1({
3648
- workerContext: this.signerWorkerManager.getContext(),
3649
- activeClientHandle: activated.activeClientHandle
3650
- });
3651
- } catch {}
3652
- throw error;
3653
- }
3654
- }
3655
- async activateEmailOtpEd25519CustodyCapabilityInternal(args) {
3656
- return await this.activateEmailOtpEd25519CustodyCapabilityWithExactCredential({
3657
- ...args,
3658
- credentialExpectation: { kind: "resolve_exact_operation_credential" }
3659
- });
3660
- }
3661
- async activateEmailOtpEd25519CustodyCapabilityWithExactCredential(args) {
3662
- const exactAuthorization = await resolveExactEmailOtpEd25519ActivationAuthorization({
3663
- walletId: args.walletSession.walletId,
3664
- emailHashHex: args.emailHashHex,
3665
- providerSubject: args.providerSubject,
3666
- bootstrap: args.bootstrap,
3667
- ...args.authority ? { verifiedAuthority: args.authority } : {},
3668
- ...args.exactAuthorization ? { exactAuthorization: args.exactAuthorization } : {}
3669
- });
3670
- if (args.credentialExpectation.kind === "expect_exact_operation_credential" && (args.credentialExpectation.operationCredential.walletSessionId !== exactAuthorization.operationCredential.walletSessionId || args.credentialExpectation.operationCredential.token !== exactAuthorization.operationCredential.token)) throw new Error("[SigningEngine][near] expected Email OTP operation credential changed");
3671
- return await withThresholdEd25519CommitQueue({
3672
- queueByKey: this.thresholdEd25519CommitQueueByKey,
3673
- queueKey: resolveThresholdCommitQueueKey({ materialActivation: args.metadata.materialActivation }),
3674
- nearAccountId: toAccountId(args.bootstrap.session.nearAccountId),
3675
- enabled: args.commitQueue === "acquire",
3676
- task: async () => {
3677
- const activated = await activateWalletCustodyEd25519CapabilityV1({
3678
- walletSession: args.walletSession,
3679
- nearAccountId: args.bootstrap.session.nearAccountId,
3680
- providerSubject: args.providerSubject,
3681
- relayerUrl: this.seamsWebConfigs.network.relayer?.url || "",
3682
- authority: exactAuthorization.authority,
3683
- signerSlot: args.signerSlot,
3684
- expectedOperationalPublicKey: args.expectedOperationalPublicKey,
3685
- expectedThresholdSessionId: args.expectedThresholdSessionId,
3686
- bootstrap: args.bootstrap,
3687
- operationCredential: exactAuthorization.operationCredential,
3688
- activeClientHandle: args.activeClientHandle,
3689
- metadata: args.metadata,
3690
- workerContext: this.signerWorkerManager.getContext(),
3691
- activateCapability: this.enginePorts.ed25519YaoActiveClients.activate.bind(this.enginePorts.ed25519YaoActiveClients)
3692
- });
3693
- const state = activated.walletSessionState;
3694
- await this.upsertEd25519YaoPublicCapabilityLaneReference(emailOtpEd25519YaoLaneReferenceFromRecovery({
3695
- walletSessionState: state,
3696
- materialActivation: activated.material.activeClient.metadata().materialActivation
3697
- }));
3698
- if (!this.enginePorts.ed25519YaoActiveClients.resolve({
3699
- walletId: state.signingLane.identity.signer.account.wallet.walletId,
3700
- nearAccountId: state.signingLane.identity.signer.account.nearAccountId,
3701
- materialActivation: activated.material.activeClient.metadata().materialActivation
3702
- })) throw new Error("[SigningEngine][near] wallet custody activation was superseded");
3703
- return state.signingLane.identity.signer;
3704
- }
3705
- });
3706
- }
3707
- async loginWithEmailOtpWalletCustodyEd25519Internal(args) {
3708
- if (args.authoritySelector.kind !== "wallet_auth_method") throw new Error("Email OTP Ed25519 unlock requires an exact wallet auth method");
3709
- const walletAuthMethodId = args.authoritySelector.walletAuthMethodId;
3710
- const selection = args.ed25519Selection;
3711
- const unlock = await unlockEmailOtpEd25519YaoCapability({
3712
- walletSession: args.walletSession,
3713
- authoritySelector: args.authoritySelector,
3714
- relayUrl: this.seamsWebConfigs.network.relayer?.url || "",
3715
- groupId: SIGNING_SESSION_SEAL_GROUP_ID,
3716
- verification: {
3717
- kind: "otp",
3718
- challengeId: args.challengeId,
3719
- otpCode: args.otpCode
3720
- },
3721
- routePlan: buildFreshEmailOtpRoutePlan({
3722
- freshRouteFamily: "login",
3723
- operation: WALLET_EMAIL_OTP_UNLOCK_OPERATION
3724
- }),
3725
- workerCtx: this.signerWorkerManager.getContext(),
3726
- providerSubject: args.providerSubjectId,
3727
- signerSlot: selection.signerSlot,
3728
- remainingUses: args.remainingUses,
3729
- orgId: selection.runtimePolicyScope.orgId,
3730
- nearAccountId: selection.nearAccountId,
3731
- expectedOperationalPublicKey: selection.operationalPublicKey,
3732
- expectedThresholdSessionId: selection.thresholdSessionId,
3733
- walletCustodyEd25519Material: await this.loadEmailOtpWalletCustodyEd25519Material({
3734
- nearAccountId: selection.nearAccountId,
3735
- signerSlot: selection.signerSlot
3736
- })
3737
- });
3738
- if (unlock.kind === "wallet_custody_cache_absent") throw new Error("Email OTP wallet custody material is unavailable; recover with a recovery code");
3739
- try {
3740
- await persistVerifiedEmailOtpAuthorityAfterUnlock({
3741
- walletId: String(args.walletSession.walletId),
3742
- walletAuthMethodId,
3743
- projection: unlock.recovery.verifiedAuthorityProjection
3744
- });
3745
- const authority = await walletAuthAuthorityRefForVerifiedEmailOtpUnlock({
3746
- walletId: String(args.walletSession.walletId),
3747
- walletAuthMethodId,
3748
- providerSubject: args.providerSubjectId,
3749
- emailHashHex: args.emailHashHex,
3750
- projection: unlock.recovery.verifiedAuthorityProjection
3751
- });
3752
- if (unlock.walletCustodyEd25519Material) await this.persistWalletCustodyEd25519Material(unlock.walletCustodyEd25519Material);
3753
- await walletSessionAuthorizations.replaceExactActive({
3754
- active: unlock.walletSessionAuthorization.record,
3755
- operationCredential: unlock.walletSessionAuthorization.operationCredential
3756
- });
3757
- const signer = await this.activateEmailOtpEd25519CustodyCapabilityInternal({
3758
- commitQueue: "acquire",
3759
- walletSession: args.walletSession,
3760
- providerSubject: args.providerSubjectId,
3761
- emailHashHex: args.emailHashHex,
3762
- signerSlot: selection.signerSlot,
3763
- expectedOperationalPublicKey: selection.operationalPublicKey,
3764
- expectedThresholdSessionId: selection.thresholdSessionId,
3765
- bootstrap: unlock.ed25519YaoCapability,
3766
- activeClientHandle: unlock.activeClientHandle,
3767
- metadata: unlock.metadata,
3768
- authority,
3769
- exactAuthorization: unlock.walletSessionAuthorization
3770
- });
3771
- await establishUnlockedWalletEd25519ExportRootCapabilityV1(this.walletCustodyCeremonyTransportV1(), {
3772
- existingEnvelope: unlock.ed25519ExportRootCustody.existingEnvelope,
3773
- existingFactorSecret: unlock.ed25519ExportRootCustody.factorSecret32,
3774
- walletId: String(args.walletSession.walletId),
3775
- walletAuthMethodId: String(unlock.walletSessionAuthorization.record.authMethodId),
3776
- walletSessionId: String(unlock.walletSessionAuthorization.operationCredential.walletSessionId),
3777
- expiresAtMs: unlock.walletSessionAuthorization.record.expiresAtMs
3778
- });
3779
- return signer;
3780
- } catch (error) {
3781
- await disposeWalletCustodyEd25519ActiveClientV1({
3782
- workerContext: this.signerWorkerManager.getContext(),
3783
- activeClientHandle: unlock.activeClientHandle
3784
- }).catch(() => void 0);
3785
- throw error;
3786
- } finally {
3787
- unlock.ed25519ExportRootCustody.factorSecret32.fill(0);
3788
- }
3789
- }
3790
- async requestEmailOtpSigningSessionChallenge(args) {
3791
- return await requestEmailOtpSigningSessionChallenge(this.emailOtpPublicDeps, args);
3792
- }
3793
- async refreshEmailOtpSigningSession(args) {
3794
- return await refreshEmailOtpSigningSession(this.emailOtpPublicDeps, args);
3795
- }
3796
- async enrollEmailOtpInternal(args) {
3797
- return await enrollEmailOtpInternal(this.emailOtpPublicDeps, args);
3798
- }
3799
- async prepareEmailOtpRegistrationEnrollmentMaterialInternal(args) {
3800
- return await prepareEmailOtpRegistrationEnrollmentMaterialInternal(this.emailOtpPublicDeps, args);
3801
- }
3802
- async getWarmThresholdEd25519SessionStatus(args) {
3803
- const walletId = toWalletId(args.walletId);
3804
- const resolution = await resolveExactEd25519SealedSessionRuntimeForWalletSubject({
3805
- walletId,
3806
- nearAccountId: toAccountId(args.nearAccountId),
3807
- nearEd25519SigningKeyId: nearEd25519SigningKeyIdFromString(args.nearEd25519SigningKeyId)
3808
- });
3809
- if (resolution.kind === "missing") return null;
3810
- if (resolution.kind !== "resolved") throw new Error(`[WarmSessionStore] Ed25519 sealed runtime is ${resolution.kind}`);
3811
- const authorization = await this.resolveActiveNearEd25519WalletSessionAuthorization(walletId);
3812
- return await getWarmThresholdEd25519SessionStatus(this.warmCapabilitiesPublicDeps, {
3813
- runtime: resolution.runtime,
3814
- authorization,
3815
- nowMs: Date.now()
3816
- });
3817
- }
3818
- async scheduleRouterAbEcdsaDerivationLoginPresignaturePrefill(args, statusReads) {
3819
- const capabilities = await this.listPreprocessingCapabilities({
3820
- walletId: args.walletId,
3821
- chainTargets: [args.chainTarget]
3822
- }, statusReads);
3823
- const authorized = capabilities.length === 1 ? capabilities[0] : null;
3824
- if (!authorized) return {
3825
- status: "skipped",
3826
- reason: "exact_wallet_session_unavailable",
3827
- walletSessionId: null
3828
- };
3829
- return await scheduleRouterAbEcdsaDerivationLoginPresignaturePrefill(this.warmCapabilitiesPublicDeps, {
3830
- capability: authorized,
3831
- waitForPoolReady: args.waitForPoolReady
3832
- });
3833
- }
3834
- async clearVolatileWarmSigningMaterial(walletId) {
3835
- const cleanup = this.clearVolatileWarmSigningMaterialInternal(walletId);
3836
- this.volatileWarmSigningMaterialCleanupInFlight = cleanup;
3837
- try {
3838
- await cleanup;
3839
- } finally {
3840
- if (this.volatileWarmSigningMaterialCleanupInFlight === cleanup) this.volatileWarmSigningMaterialCleanupInFlight = null;
3841
- }
3842
- }
3843
- async deleteDurableEcdsaPresignatures(target) {
3844
- return await new IndexedDbEcdsaCapabilityManifestStore().deleteClientPresignatures(target);
3845
- }
3846
- async clearVolatileWarmSigningMaterialInternal(walletId) {
3847
- try {
3848
- if (walletId) this.enginePorts.ed25519YaoActiveClients.disposeWallet(walletId);
3849
- else this.enginePorts.ed25519YaoActiveClients.dispose();
3850
- } finally {
3851
- try {
3852
- await clearVolatileWarmSigningMaterial(this.warmCapabilitiesPublicDeps, walletId);
3853
- } finally {
3854
- try {
3855
- if (walletId === void 0) await this.clearLinkedEcdsaHolderMaterials();
3856
- else await this.clearLinkedEcdsaHolderMaterialsForWallet(walletId);
3857
- } finally {
3858
- await this.signerWorkerManager.clearEcdsaClientWorkerState(walletId === void 0 ? { kind: "all" } : {
3859
- kind: "wallet",
3860
- walletId
3861
- });
3862
- }
3863
- }
3864
- }
3865
- }
3866
- onSdkLifecycleEvent(listener) {
3867
- this.sdkLifecycleEventListeners.add(listener);
3868
- return this.removeSdkLifecycleEventListener.bind(this, listener);
3869
- }
3870
- publishSdkLifecycleEvent(event) {
3871
- const deliveryKey = sdkLifecycleEventDeliveryKey(event);
3872
- if (this.deliveredSdkLifecycleEventKeys.has(deliveryKey)) return;
3873
- this.deliveredSdkLifecycleEventKeys.add(deliveryKey);
3874
- for (const listener of Array.from(this.sdkLifecycleEventListeners)) listener(event);
3875
- }
3876
- publishNearProvisioningLifecycleEvent(walletId, state) {
3877
- this.publishSdkLifecycleEvent(createNearProvisioningStateChangedEvent({
3878
- walletId,
3879
- state
3880
- }));
3881
- }
3882
- removeSdkLifecycleEventListener(listener) {
3883
- this.sdkLifecycleEventListeners.delete(listener);
3884
- }
3885
- dispose() {
3886
- this.signingSessionLifecycleSubscription.unsubscribe();
3887
- this.nearProvisioningUnsubscribe();
3888
- this.sdkLifecycleEventListeners.clear();
3889
- this.deliveredSdkLifecycleEventKeys.clear();
3890
- this.ed25519YaoPageLifecycleOwner.dispose();
3891
- }
3892
- clearThresholdEcdsaSigningQueue() {
3893
- clearThresholdCommitQueue(this.thresholdEcdsaSigningQueueByKey);
3894
- }
3895
- async clearLinkedEcdsaHolderMaterials() {
3896
- await clearLinkedDeviceEcdsaHolderMaterialsWasm({ workerCtx: this.signerWorkerManager.getContext() });
3897
- clearLinkedEcdsaHolderRuntimesV1();
3898
- }
3899
- async clearLinkedEcdsaHolderMaterialsForWallet(walletId) {
3900
- const runtimes = listLinkedEcdsaHolderRuntimesV1(walletId);
3901
- let firstError;
3902
- for (const runtime of runtimes) try {
3903
- await destroyLinkedDeviceEcdsaHolderMaterialsWasm({
3904
- holderHandleIds: [runtime.holderHandleId],
3905
- workerCtx: this.signerWorkerManager.getContext()
3906
- });
3907
- removeLinkedEcdsaHolderRuntimeV1(runtime);
3908
- } catch (error) {
3909
- firstError ??= error;
3910
- }
3911
- if (firstError !== void 0) throw firstError;
3912
- }
3913
- };
3914
- //#endregion
3915
- export { BrowserSigningSurface };
3916
-
3917
- //# sourceMappingURL=BrowserSigningSurface.js.map