@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,3818 +0,0 @@
1
- import { parseThresholdEd25519SessionId, parseWalletAuthMethodId, parseWebAuthnCredentialIdB64u } from "../../../shared-ts/src/utils/domainIds.js";
2
- import { isObject } from "../../../shared-ts/src/utils/validation.js";
3
- import { base64UrlDecode, base64UrlEncode } from "../../../shared-ts/src/utils/base64.js";
4
- import { alphabetizeStringify, sha256BytesUtf8, sha256HexUtf8 } from "../../../shared-ts/src/utils/digests.js";
5
- import { parseCorrelationId, parseDigestB64u, parseIsoTimestamp } from "../../../shared-ts/src/utils/canonicalPrimitives.js";
6
- import { walletSessionPreservesCapabilities } from "../../../shared-ts/src/device-linking/activeWalletSession.js";
7
- import { WalletSessionStatusReadScope } from "../../../core/rpcClients/relayer/walletSessionAuthorizationStatus.js";
8
- import { base58Encode } from "../../../shared-ts/src/utils/base58.js";
9
- import { deriveImplicitNearAccountIdFromEd25519PublicKey } from "../../../shared-ts/src/utils/near.js";
10
- import { toAccountId } from "../../../core/types/accountIds.js";
11
- import { RegistrationEventPhase, createRegistrationFlowEvent } from "../../../core/types/sdkSentEvents.js";
12
- import { publishNearProvisioningState, runSingleFlightNearProvisioning } from "../../../core/signingEngine/flows/registration/nearProvisioningRegistry.js";
13
- import { parseNearEd25519SigningKeyId, walletIdFromString } from "../../../shared-ts/src/utils/registrationIds.js";
14
- import { thresholdEcdsaChainTargetFromChainFamily, toWalletId } from "../../../core/signingEngine/interfaces/ecdsaChainTarget.js";
15
- import { normalizeRuntimePolicyScope } from "../../../shared-ts/src/threshold/signingRootScope.js";
16
- import { requireEvmFamilySigningKeySlotId } from "../../../shared-ts/src/signing-lanes/evmFamilySigningKeySlotId.js";
17
- import "../../../shared-ts/src/signing-lanes/index.js";
18
- import { toParticipantId, toRpId } from "../../../core/signingEngine/session/identity/evmFamilyEcdsaIdentity.js";
19
- import { nearEd25519SignerBindingFromBoundaryFields } from "../../../core/signingEngine/session/identity/exactSigningLaneIdentity.js";
20
- import { buildEmailOtpEnvelopeFactor, buildPasskeyEnvelopeFactor } from "../../../shared-ts/src/passkey-custody/custodyEnvelope.js";
21
- import { walletCustodyCommitPayloadWithRecoveryBackupAcknowledgement } from "../../../shared-ts/src/passkey-custody/ceremonyCommitPayload.js";
22
- import "../../../shared-ts/src/passkey-custody/index.js";
23
- import { recordWalletCustodyTiming } from "../../../core/signingEngine/walletCustody/ceremonyDriver.js";
24
- import { joinCustodyJsonFromEstablishedCommitPayload, walletCustodyCommitPayloadForWire } from "../../../core/signingEngine/walletCustody/registrationCeremony.js";
25
- import { ROUTER_AB_ED25519_YAO_EMAIL_OTP_RECOVERY_BOOTSTRAP_KIND_V1, sameRouterAbEd25519YaoRegistrationAdmissionRequestV1 } from "../../../shared-ts/src/utils/routerAbEd25519Yao.js";
26
- import { redactCredentialExtensionOutputs } from "../../../core/signingEngine/webauthnAuth/credentials/credentialExtensions.js";
27
- import { createRouterAbTraceContextV1 } from "../../../shared-ts/src/utils/routerAbTraceContext.js";
28
- import { RouterAbEd25519YaoClientV1 } from "../../../core/signingEngine/threshold/ed25519/yaoClient.js";
29
- import { parseSdkEcdsaDerivationSigningRootId, parseSdkEcdsaDerivationSigningRootVersion } from "../../../shared-ts/src/threshold/ecdsaDerivationRoleLocalBootstrap.js";
30
- import { parseEcdsaRelayerKeyId } from "../../../shared-ts/src/threshold/keyMaterialBrands.js";
31
- import { parseEcdsaClientVerifyingPublicKey33B64u, parseEcdsaRoleLocalBindingDigest, parseEcdsaThresholdKeyId } from "../../../core/signingEngine/session/keyMaterialBrands.js";
32
- import { buildEmailOtpWalletAuthAuthority, parseEmailOtpWalletAuthAuthority, walletAuthAuthorityRef } from "../../../shared-ts/src/utils/walletAuthAuthority.js";
33
- import { parseCanonicalEcdsaServerActivationRequest } from "../../../shared-ts/src/utils/ecdsaCapabilityActivation.js";
34
- import { parseRouterAbEcdsaVerifiedClientActivationFactsV1 } from "../../../shared-ts/src/utils/routerAbEcdsaDerivation.js";
35
- import { buildRecoveredCustodyEnvelopeRecord } from "../../../core/signingEngine/walletCustody/recoveryReplacementEnvelope.js";
36
- import { WALLET_CUSTODY_ED25519_MATERIAL_KEY_KIND } from "../../../core/indexedDB/walletCustodyEd25519MaterialRecord.js";
37
- import { getUserFriendlyErrorMessage } from "../../../shared-ts/src/utils/errors.js";
38
- import { findRegistrationSignerPlanEvmFamilyEcdsaBranch, findRegistrationSignerPlanNearEd25519Branch, registrationSignerPlanFromSelection } from "../../../shared-ts/src/utils/registrationSignerPlan.js";
39
- import { planPendingNearRegistration, preparePendingNearRegistration } from "../../../core/indexedDB/pendingWalletRegistrationCommit.js";
40
- import { walletSessionAuthorizations } from "../../../core/indexedDB/seamsWalletDB/walletSessionAuthorizationStore.js";
41
- import { nearEd25519YaoMaterialActivationFromMetadata } from "../../../core/signingEngine/session/material/nearEd25519YaoMaterialActivation.js";
42
- import { activateWalletRegistration, completeWalletRegistrationNearProvisioning, createWalletAddSignerIntent, finalizeWalletAddSigner, isEmailOtpWalletRegistrationFinalizeResponse, parseWalletRegistrationEcdsaDerivationRespond, respondWalletRegistration, setupWalletRegistration, startWalletAddSigner } from "../../../core/rpcClients/relayer/walletRegistration.js";
43
- import { buildEmailOtpAuthContext, emailOtpAuthContextEmailHashHex, emailOtpAuthContextProvider, emailOtpAuthContextProviderUserId } from "../../../core/signingEngine/session/identity/laneIdentity.js";
44
- import { persistPasskeyEd25519YaoSignerMaterialV1 } from "../../../core/signingEngine/session/passkey/ed25519YaoLocalMaterial.js";
45
- import { IndexedDBManager } from "../../../core/indexedDB/index.js";
46
- import { prepareWalletEcdsaRegistrationPublication, prepareWalletEd25519RegistrationPublication, prepareWalletEmailOtpEd25519RegistrationPublication } from "../../../core/signingEngine/flows/registration/accountLifecycle.js";
47
- import { computeAddSignerIntentDigest } from "../../../utils/intentDigest.js";
48
- import { establishUnlockedWalletEd25519ExportRootCapabilityV1, walletCustodyCeremonyTransportFromWorkerContextV1 } from "../../../core/signingEngine/walletCustody/unlockedEd25519ExportRootCapability.js";
49
- import { rememberPasskeyCustodySessionEnvelope } from "../../../core/signingEngine/session/passkey/passkeyCustodySessionCache.js";
50
- import { listConfiguredThresholdEcdsaPublicationTargets } from "../session/thresholdEcdsaProvisioning.js";
51
- import { openWalletCustodyEd25519ActiveClientV1, walletCustodyCacheEnvelopeFromRecordV1 } from "../../../core/signingEngine/walletCustody/openCustodyCache.js";
52
- import { RegistrationTimingRecorder, assertNever, createFailedRegistrationTimingSummary, createSucceededRegistrationTimingSummary, emitNearRegistrationTiming, emitRegistrationTimingSpan, emitRegistrationTimingSummary, recordRegistrationServerTimingBuckets, recordStrictEcdsaServerTimingBuckets, registrationTimingSignerSetFromPlan, roundDurationMs, zeroEmailOtpYaoPrewarmDiagnostics } from "./registrationTiming.js";
53
- import { joinCustodyWireFromEnvelopeRecord } from "../../../core/signingEngine/walletCustody/joinCustodyWire.js";
54
- import { buildStrictRegistrationClientBootstrap, closeStrictEcdsaRegistrationCeremony, finalizeStrictEcdsaFamilyLocalActivation, measureStrictEcdsaCeremonyStep, registrationRouteHeaders, requireIssuedRegistrationEstablishedSession, runStrictEcdsaFamilyCeremony } from "./registrationStrictEcdsa.js";
55
- import { admitDeferredNearRegistration, buildRegistrationEmailOtpEd25519SessionState, buildRegistrationPasskeyEd25519SessionHydration, passkeyWalletAuthAuthorityFromCredential, registrationEd25519MaterialFacts, requireEd25519YaoRegistrationPublicResultMatches, requireEmailOtpEd25519YaoRegistrationPublicResultMatches, requireEmailOtpRegistrationEnrollmentMaterial, requirePasskeyRegistrationIntent } from "./registrationEd25519Yao.js";
56
- import { requirePasskeyPrfFirstB64u } from "../authMethods/passkey/ecdsaBootstrap.js";
57
- import { registrationProjectionFromPending, restorePendingNearRegistrationMaterial } from "./pendingRegistrationRecovery.js";
58
- import { scheduleEcdsaSessionPresignaturePrefill } from "../auth/scheduleEcdsaSessionPresignaturePrefill.js";
59
- import { resolveManagedRuntimeScopeBootstrap } from "../../../core/config/managedRuntimeScope.js";
60
- import { exactPasskeyWalletAuthAuthorityRefForCredential } from "../authMethods/passkey/exactPasskeyAuthority.js";
61
- import { collectPasskeyRegistrationAuthority } from "../authMethods/passkey/registrationAuthority.js";
62
- import { showWalletRecoveryCodeBackupUi } from "../recovery/walletRecoveryCodeBackup.js";
63
- import { pendingWalletRecoveryCodeBackupRepository } from "../../../core/indexedDB/seamsWalletDB/pendingWalletRecoveryCodeBackup.js";
64
- import { registrationFinalizeIdempotencyKeyFromString } from "../../publicApi/types.js";
65
- import { collectEmailOtpRegistrationAuthority } from "../authMethods/emailOtp/registrationAuthority.js";
66
- import { admitVerifiedPasskeyEd25519YaoAddSignerV1 } from "../../../core/signingEngine/flows/registration/services/passkeyEd25519YaoAddSigner.js";
67
- import { buildPendingRegistrationCommit, buildRegistrationPersistenceAuth, buildRegistrationPersistenceEcdsa, buildRegistrationPersistencePlan, commitRegistrationPersistencePlan, finalizeRegistrationEcdsaSessions, finalizeResponseViewFromActivatedEcdsa, requireFinalizedPasskeyCredentialPublicKeyB64u, requireWebAuthnRpId } from "./registrationTerminalCommit.js";
68
- //#region src/SeamsWeb/operations/registration/registration.ts
69
- async function confirmWalletRecoveryCodesBackedUp(context, walletId, backup, recoveryCodes) {
70
- if (recoveryCodes.length !== 10 || new Set(recoveryCodes).size !== 10) throw new Error("Wallet custody must issue exactly ten distinct recovery codes");
71
- switch ((await resolveRegistrationRecoveryCodeBackup({
72
- backup,
73
- context,
74
- request: {
75
- kind: "wallet_recovery_code_backup_request_v1",
76
- walletId,
77
- recoveryCodes,
78
- continuation: "registration_may_defer"
79
- }
80
- }))?.kind) {
81
- case "wallet_recovery_codes_backed_up_v1": return;
82
- case "wallet_recovery_code_backup_deferred_v1":
83
- await pendingWalletRecoveryCodeBackupRepository.write({
84
- walletId,
85
- recoveryCodes
86
- });
87
- return;
88
- default: throw new Error("Wallet recovery-code backup result is invalid");
89
- }
90
- }
91
- async function resolveRegistrationRecoveryCodeBackup(input) {
92
- if (!input.backup) return { kind: "wallet_recovery_code_backup_deferred_v1" };
93
- switch (input.backup.kind) {
94
- case "defer_to_account_menu": return { kind: "wallet_recovery_code_backup_deferred_v1" };
95
- case "show_builtin_dialog": return await showWalletRecoveryCodeBackupUi(input.request, input.context.signingEngine.getWalletIframeSurfaceMeasurementBinding());
96
- case "custom_handler": return await input.backup.handler(input.request);
97
- default: return assertNever(input.backup);
98
- }
99
- }
100
- function zeroizeArrayBuffer(buffer) {
101
- if (buffer.byteLength > 0) new Uint8Array(buffer).fill(0);
102
- }
103
- function walletCustodyRegistrationMaterial(args) {
104
- const metadata = args.established.metadata;
105
- return {
106
- binding: {
107
- kind: WALLET_CUSTODY_ED25519_MATERIAL_KEY_KIND,
108
- applicationBindingDigestB64u: args.established.localMaterial.applicationBindingDigestB64u,
109
- registeredPublicKeyB64u: base64UrlEncode(metadata.registeredPublicKey),
110
- participantIds: metadata.participantIds,
111
- stateEpoch: String(metadata.stateEpoch),
112
- walletId: args.walletId,
113
- nearAccountId: args.nearAccountId,
114
- nearEd25519SigningKeyId: args.nearEd25519SigningKeyId,
115
- signerSlot: args.signerSlot,
116
- signingWorkerId: metadata.scope.signing_worker_id,
117
- signingWorkerVerifyingShareB64u: base64UrlEncode(metadata.signingWorkerVerifyingShare)
118
- },
119
- sealed: {
120
- ciphertextB64u: args.established.localMaterial.b64u,
121
- nonceB64u: args.established.localMaterial.nonceB64u
122
- }
123
- };
124
- }
125
- function pendingRegistrationEd25519MetadataFromJoined(joined) {
126
- const metadata = joined.metadata;
127
- return {
128
- materialActivation: nearEd25519YaoMaterialActivationFromMetadata(metadata),
129
- registeredPublicKeyB64u: base64UrlEncode(metadata.registeredPublicKey),
130
- signingWorkerVerifyingShareB64u: base64UrlEncode(metadata.signingWorkerVerifyingShare),
131
- stateEpoch: String(metadata.stateEpoch),
132
- signingWorkerId: metadata.scope.signing_worker_id,
133
- participantIds: metadata.participantIds,
134
- nearEd25519SigningKeyId: metadata.applicationBinding.near_ed25519_signing_key_id,
135
- signerSlot: metadata.applicationBinding.key_creation_signer_slot
136
- };
137
- }
138
- function walletCustodyCacheEnvelopeFromRegistrationCommit(commit) {
139
- const established = commit.establishedCustody;
140
- if (!established) throw new Error("Mixed registration custody commit is missing its established envelope");
141
- return {
142
- bindingJson: established.envelopeBindingJson,
143
- nonceB64u: established.envelopeNonceB64u,
144
- ciphertextB64u: established.sealedCustodySecretB64u,
145
- aadHashB64u: established.envelopeAadHashB64u,
146
- ciphertextDigestB64u: established.envelopeCiphertextDigestB64u
147
- };
148
- }
149
- function custodyEnvelopeFromRegistrationCommit(args) {
150
- const established = args.commit.establishedCustody;
151
- if (!established) throw new Error("Passkey registration custody commit is missing its established envelope");
152
- return buildRecoveredCustodyEnvelopeRecord({
153
- expectedWalletId: args.walletId,
154
- replacement: established,
155
- activatedAtMs: args.activatedAtMs
156
- });
157
- }
158
- async function establishPasskeyRegistrationEd25519ExportRootCapability(args) {
159
- await args.signingEngine.establishUnlockedWalletEd25519ExportRootCapabilityV1({
160
- existingEnvelope: custodyEnvelopeFromRegistrationCommit({
161
- commit: args.commit,
162
- walletId: args.walletId,
163
- activatedAtMs: Date.now()
164
- }),
165
- passkeyPrfFirstB64u: args.passkeyPrfFirstB64u,
166
- walletId: args.walletId,
167
- walletAuthMethodId: args.walletAuthMethodId,
168
- walletSessionId: args.walletSessionId,
169
- expiresAtMs: args.expiresAtMs
170
- });
171
- }
172
- async function establishEmailOtpRegistrationEd25519ExportRootCapability(args) {
173
- try {
174
- await establishUnlockedWalletEd25519ExportRootCapabilityV1(walletCustodyCeremonyTransportFromWorkerContextV1(args.context.signingEngine.getSignerWorkerContext()), {
175
- existingEnvelope: custodyEnvelopeFromRegistrationCommit({
176
- commit: args.commit,
177
- walletId: args.walletId,
178
- activatedAtMs: Date.now()
179
- }),
180
- existingFactorSecret: args.factorSecret32,
181
- walletId: args.walletId,
182
- walletAuthMethodId: String(args.emailOtpAuthContext.authority.bindingId),
183
- walletSessionId: args.walletSessionId,
184
- expiresAtMs: args.expiresAtMs
185
- });
186
- } catch (error) {
187
- console.warn("[registration][email-otp] unlocked Ed25519 export-root capability was not established:", error instanceof Error ? error.message : String(error || "unknown error"));
188
- }
189
- }
190
- async function rememberPasskeyRegistrationCustodyEnvelope(args) {
191
- const envelope = custodyEnvelopeFromRegistrationCommit(args);
192
- if (envelope.factor.kind !== "passkey") throw new Error("Passkey registration custody commit has a non-passkey factor");
193
- await rememberPasskeyCustodySessionEnvelope({
194
- walletId: args.walletId,
195
- credentialIdB64u: envelope.factor.credentialIdB64u,
196
- envelope
197
- });
198
- }
199
- function buildRegistrationEmailOtpEd25519RecoveryBootstrap(args) {
200
- const metadata = args.joined.metadata;
201
- const thresholdSessionId = parseThresholdEd25519SessionId(metadata.scope.threshold_session_id);
202
- if (!thresholdSessionId.ok) throw new Error("Registration Ed25519 capability has an invalid threshold session");
203
- return {
204
- kind: ROUTER_AB_ED25519_YAO_EMAIL_OTP_RECOVERY_BOOTSTRAP_KIND_V1,
205
- session: {
206
- walletId: args.walletId,
207
- nearAccountId: args.nearAccountId,
208
- nearEd25519SigningKeyId: args.nearEd25519SigningKeyId,
209
- authorityScope: {
210
- kind: "email_otp",
211
- provider: emailOtpAuthContextProvider(args.authContext),
212
- providerUserId: emailOtpAuthContextProviderUserId(args.authContext)
213
- },
214
- thresholdSessionId: thresholdSessionId.value,
215
- authorizationId: args.sessionState.signingWalletSession.authorizationId,
216
- walletSessionId: args.sessionState.walletSessionId,
217
- quotaId: args.sessionState.quotaId,
218
- expiresAtMs: args.sessionState.signingWalletSession.expiresAtMs,
219
- participantIds: metadata.participantIds,
220
- remainingUses: args.sessionState.signingWalletSession.remainingUses,
221
- signingRootId: args.sessionState.signingRootId,
222
- signingRootVersion: args.sessionState.signingRootVersion,
223
- runtimePolicyScope: args.sessionState.runtimePolicyScope,
224
- routerAbNormalSigning: args.sessionState.routerAbNormalSigning
225
- },
226
- capability: {
227
- kind: "router_ab_ed25519_yao_active_capability_v1",
228
- materialActivation: metadata.materialActivation,
229
- activeCapabilityBinding: metadata.activeCapabilityBinding,
230
- registeredPublicKey: [...metadata.registeredPublicKey],
231
- nearAccountId: args.nearAccountId,
232
- applicationBinding: metadata.applicationBinding,
233
- runtimePolicyScope: args.sessionState.runtimePolicyScope,
234
- participantIds: metadata.participantIds,
235
- lifecycle: {
236
- lifecycleId: metadata.scope.lifecycle_id,
237
- rootShareEpoch: metadata.scope.root_share_epoch,
238
- accountId: metadata.scope.account_id,
239
- thresholdSessionId: thresholdSessionId.value,
240
- signerSetId: metadata.scope.signer_set_id,
241
- signingWorkerId: metadata.scope.signing_worker_id
242
- },
243
- stateEpoch: Number(metadata.stateEpoch),
244
- registrationContinuity: {
245
- kind: "registration",
246
- admissionRequest: args.deferredNear.admissionRequest,
247
- admissionReceipt: args.admissionReceipt,
248
- activationTranscript: [...metadata.transcript]
249
- }
250
- }
251
- };
252
- }
253
- const hostedPasskeyRegistrationPreparedBrand = Symbol("hostedPasskeyRegistrationPrepared");
254
- const hostedPasskeyRegistrationStates = /* @__PURE__ */ new WeakMap();
255
- function registrationSignerPlanFromSignerSet(selection) {
256
- const plan = registrationSignerPlanFromSelection(selection);
257
- if (!plan.ok) throw new Error(plan.message);
258
- return plan.value;
259
- }
260
- function registrationWarmupWork(context) {
261
- return context.signingEngine.warmCriticalResources.bind(context.signingEngine, { kind: "none" });
262
- }
263
- function registrationPlanBranchIncludesNearEd25519(branch) {
264
- return branch.kind === "near_ed25519";
265
- }
266
- function registrationSelectionRequiresEmailOtpYaoWarmup(signerSelection) {
267
- return registrationSignerPlanFromSignerSet(signerSelection).branches.some(registrationPlanBranchIncludesNearEd25519);
268
- }
269
- function noEmailOtpYaoPrewarm() {
270
- return Promise.resolve(zeroEmailOtpYaoPrewarmDiagnostics());
271
- }
272
- function registrationSelectionIncludesEcdsa(signerSelection) {
273
- return signerSelection.signers.some((signer) => signer.kind === "evm_family_ecdsa");
274
- }
275
- function registrationEmailOtpYaoPrewarmWork(input) {
276
- if (input.authMethod.kind !== "email_otp" || !registrationSelectionRequiresEmailOtpYaoWarmup(input.signerSelection)) return noEmailOtpYaoPrewarm;
277
- return executeRegistrationEmailOtpYaoPrewarm.bind(void 0, { prewarm: input.context.signingEngine.prewarmEmailOtpYao.bind(input.context.signingEngine) });
278
- }
279
- function recoverEmailOtpYaoPrewarmFailure(_error, startedAt) {
280
- const elapsedMs = roundDurationMs(startedAt);
281
- return {
282
- kind: "failed",
283
- elapsedMs,
284
- workerPrewarmMs: elapsedMs,
285
- yaoWasmInitMs: 0,
286
- failureStage: "worker_ready"
287
- };
288
- }
289
- function executeRegistrationEmailOtpYaoPrewarm(input) {
290
- const startedAt = performance.now();
291
- return input.prewarm().catch((error) => recoverEmailOtpYaoPrewarmFailure(error, startedAt));
292
- }
293
- function completedRegistrationWarmup(results) {
294
- const [diagnostics, emailOtpYao] = results;
295
- return {
296
- kind: "completed",
297
- diagnostics: {
298
- ...diagnostics,
299
- emailOtpWorkerPrewarmMs: emailOtpYao.workerPrewarmMs,
300
- emailOtpYaoWasmInitMs: emailOtpYao.yaoWasmInitMs,
301
- emailOtpYaoPrewarm: emailOtpYao
302
- }
303
- };
304
- }
305
- function failedRegistrationWarmup(error) {
306
- return {
307
- kind: "failed",
308
- error
309
- };
310
- }
311
- function startRegistrationWarmup(input) {
312
- const genericWarmup = input.recorder.measure("registrationWarmupMs", registrationWarmupWork(input.context));
313
- const emailOtpYaoWarmup = input.recorder.measure("registrationWarmupEmailOtpYaoWasmInitMs", registrationEmailOtpYaoPrewarmWork({
314
- context: input.context,
315
- authMethod: input.authMethod,
316
- signerSelection: input.signerSelection
317
- }));
318
- if (registrationSelectionIncludesEcdsa(input.signerSelection)) input.context.signingEngine.prewarmEcdsaRegistrationCrypto?.().catch(() => {});
319
- return Promise.all([genericWarmup, emailOtpYaoWarmup]).then(completedRegistrationWarmup, failedRegistrationWarmup);
320
- }
321
- function observeRegistrationWarmup(input) {
322
- input.warmup.then((outcome) => {
323
- if (outcome.kind === "completed") input.recorder.captureWarmupDiagnostics(outcome.diagnostics);
324
- });
325
- }
326
- function registrationPreparationSignerSlot(signerSelection) {
327
- return findRegistrationSignerPlanNearEd25519Branch(registrationSignerPlanFromSignerSet(signerSelection))?.signerSlot ?? 1;
328
- }
329
- async function resolvePasskeyRegistrationAuthority(args) {
330
- if (args.passkeyExecution?.kind === "use_hosted_preparation") return await args.passkeyExecution.authority;
331
- return await collectPasskeyRegistrationAuthority({
332
- context: args.context,
333
- walletId: args.walletId,
334
- signerSlot: args.signerSlot,
335
- registrationIntentDigestB64u: args.registrationIntentDigestB64u,
336
- options: args.options,
337
- confirmationConfigOverride: args.confirmationConfigOverride
338
- });
339
- }
340
- function hostedPasskeyRegistrationState(prepared) {
341
- if (prepared[hostedPasskeyRegistrationPreparedBrand] !== true) throw new Error("Invalid hosted passkey registration preparation");
342
- const state = hostedPasskeyRegistrationStates.get(prepared);
343
- if (!state) throw new Error("Hosted passkey registration preparation is unknown");
344
- return state;
345
- }
346
- function hostedPasskeyRegistrationBinding(args) {
347
- return alphabetizeStringify({
348
- wallet: args.wallet,
349
- signerSelection: args.signerSelection,
350
- authMethod: args.authMethod,
351
- walletId: args.walletId,
352
- signerSlot: args.signerSlot,
353
- rpId: args.rpId,
354
- challengeB64u: args.challengeB64u
355
- });
356
- }
357
- /**
358
- * Near-provisioning retries must present the SAME operation identity.
359
- *
360
- * The server's Yao consume writes a first-writer consumer binding derived from
361
- * the request fingerprint, which includes this key. A fresh key per attempt
362
- * would permanently poison the activation on any ambiguous first attempt —
363
- * the retry would arrive as a different consumer and hit `activation_consumed`
364
- * forever. Deriving the key from the ceremony and activation reference makes
365
- * every retry the same consumer, so takeover resume works instead.
366
- */
367
- async function deriveNearProvisioningIdempotencyKey(input) {
368
- return registrationFinalizeIdempotencyKeyFromString(`wallet-registration-near-provisioning:${await sha256HexUtf8([
369
- "wallet-registration-near-provisioning",
370
- input.registrationCeremonyId,
371
- input.activationReference.lifecycle_id,
372
- input.activationReference.session_id.map((byte) => byte.toString(16).padStart(2, "0")).join("")
373
- ].join(":"))}`);
374
- }
375
- function createRegistrationOperationIdempotencyKey(label) {
376
- const cryptoApi = globalThis.crypto;
377
- if (cryptoApi && typeof cryptoApi.randomUUID === "function") return registrationFinalizeIdempotencyKeyFromString(`${label}:${cryptoApi.randomUUID()}`);
378
- const bytes = new Uint8Array(16);
379
- if (!cryptoApi || typeof cryptoApi.getRandomValues !== "function") throw new Error("Secure randomness is required for registration finalization");
380
- cryptoApi.getRandomValues(bytes);
381
- return registrationFinalizeIdempotencyKeyFromString(`${label}:${[...bytes].map((byte) => byte.toString(16).padStart(2, "0")).join("")}`);
382
- }
383
- function startEmailOtpRegistrationEnrollmentMaterial(input) {
384
- return input.recorder.measure("emailOtpEnrollmentMaterialMs", () => resolveEmailOtpRegistrationEnrollmentMaterial({
385
- context: input.context,
386
- authMethod: input.authMethod,
387
- relayerUrl: input.relayerUrl,
388
- walletId: input.walletId,
389
- providerSubject: input.providerSubject,
390
- clientSecret32: input.clientSecret32
391
- }));
392
- }
393
- function assertEmailOtpRegistrationHasNoLegacyEcdsaRoot(material) {
394
- if (material.emailOtpSessionHandle.kind !== "not_requested") throw new Error("Strict ECDSA registration received obsolete Email OTP root-share material");
395
- }
396
- async function resolveEmailOtpRegistrationEnrollmentMaterial(input) {
397
- if (input.authMethod.kind !== "email_otp") throw new Error("Email OTP enrollment material requires Email OTP auth");
398
- try {
399
- const material = await input.context.signingEngine.prepareEmailOtpRegistrationEnrollmentMaterialInternal({
400
- relayUrl: input.relayerUrl,
401
- walletId: toWalletId(input.walletId),
402
- userId: input.providerSubject,
403
- clientSecret32: input.clientSecret32
404
- });
405
- assertEmailOtpRegistrationHasNoLegacyEcdsaRoot(material);
406
- return material;
407
- } finally {
408
- input.clientSecret32.fill(0);
409
- }
410
- }
411
- function createRegistrationLifecycleEvent(input) {
412
- const authMethod = input.event.authMethod;
413
- const accountId = registrationEventAccountId(input.accountId);
414
- return createRegistrationFlowEvent({
415
- ...input.event,
416
- flowId: `registration:${authMethod}:${accountId}`,
417
- accountId,
418
- authMethod
419
- });
420
- }
421
- function registrationEventAccountId(value) {
422
- const accountId = String(value || "").trim();
423
- if (!accountId) throw new Error("Registration event account id is required");
424
- return accountId;
425
- }
426
- function registrationErrorCodeFromUnknown(error) {
427
- return isObject(error) && "code" in error ? String(error.code || "").trim() : "";
428
- }
429
- function registrationErrorWithCode(message, errorCode) {
430
- return Object.assign(new Error(message), errorCode ? { code: errorCode } : {});
431
- }
432
- function webAuthnTransportsFromRaw(value) {
433
- if (!Array.isArray(value)) return [];
434
- return value.filter((transport) => {
435
- switch (transport) {
436
- case "ble":
437
- case "hybrid":
438
- case "internal":
439
- case "nfc":
440
- case "smart-card":
441
- case "usb": return true;
442
- default: return false;
443
- }
444
- });
445
- }
446
- function emitRegistrationEvent(onEvent, accountId, event) {
447
- onEvent?.(createRegistrationLifecycleEvent({
448
- accountId,
449
- event
450
- }));
451
- }
452
- async function emailOtpEmailHashHex(email) {
453
- const normalizedEmail = String(email || "").trim().toLowerCase();
454
- if (!normalizedEmail) throw new Error("Email OTP registration auth context requires email");
455
- return sha256HexUtf8(normalizedEmail);
456
- }
457
- function emailOtpProviderFromRegistrationProof(proof) {
458
- switch (proof.proofKind) {
459
- case "otp_challenge": return "email";
460
- case "google_sso_registration": return "google";
461
- default: return assertNever(proof);
462
- }
463
- }
464
- function registrationThreeRouteAuthorityPayload(authority) {
465
- switch (authority.kind) {
466
- case "passkey": return {
467
- kind: "passkey",
468
- webauthnRegistration: authority.webauthnRegistration
469
- };
470
- case "email_otp": return {
471
- kind: "email_otp",
472
- emailOtpRegistrationProof: authority.emailOtpRegistrationProof
473
- };
474
- default: return assertNever(authority);
475
- }
476
- }
477
- async function startNearRegistrationAdmission(args) {
478
- const startedAt = performance.now();
479
- try {
480
- const admissionReceipt = await admitDeferredNearRegistration(args.deferredNear, {
481
- routerOrigin: new URL(args.relayerUrl).origin,
482
- authorization: {
483
- kind: "bearer",
484
- value: `Bearer ${args.signedSetup}`
485
- },
486
- fetch: globalThis.fetch,
487
- ...args.traceContext ? { traceContext: args.traceContext } : {}
488
- });
489
- emitNearRegistrationTiming({
490
- ceremonyId: args.registrationCeremonyId,
491
- stage: "early_admission",
492
- startedAt,
493
- outcome: "success"
494
- });
495
- return {
496
- deferredNear: args.deferredNear,
497
- admissionReceipt
498
- };
499
- } catch (error) {
500
- emitNearRegistrationTiming({
501
- ceremonyId: args.registrationCeremonyId,
502
- stage: "early_admission",
503
- startedAt,
504
- outcome: "failure"
505
- });
506
- throw error;
507
- }
508
- }
509
- function requireNearRegistrationAdmission(admission) {
510
- if (!admission) throw new Error("Mixed registration did not start NEAR admission");
511
- return admission;
512
- }
513
- function registrationEd25519LaneAuthorization(auth, passkeyCredentialIdB64u, session) {
514
- switch (auth.kind) {
515
- case "passkey": return { auth: {
516
- kind: "passkey",
517
- rpId: toRpId(auth.rpId),
518
- credentialIdB64u: passkeyCredentialIdB64u
519
- } };
520
- case "email_otp": return {
521
- auth: {
522
- kind: "email_otp",
523
- providerSubjectId: emailOtpAuthContextProviderUserId(auth.emailOtpAuthContext)
524
- },
525
- remainingUses: session.remainingUses,
526
- expiresAtMs: session.expiresAtMs
527
- };
528
- default: return assertNever(auth);
529
- }
530
- }
531
- async function buildThreeRouteCanonicalActivationCommand(args) {
532
- const canonicalRequest = parseCanonicalEcdsaServerActivationRequest(alphabetizeStringify({
533
- operation: "wallet_registration_activate_v2",
534
- registrationCeremonyId: args.registrationCeremonyId,
535
- activationCorrelationId: args.activationCorrelationId,
536
- idempotencyKey: args.idempotencyKey,
537
- publicFacts: args.publicFacts
538
- }));
539
- return {
540
- canonicalRequest,
541
- requestDigest: parseDigestB64u(base64UrlEncode(await sha256BytesUtf8(String(canonicalRequest))))
542
- };
543
- }
544
- async function persistThreeRouteCanonicalActivation(args) {
545
- const planInput = {
546
- authority: args.materialAuthority,
547
- targetMemberships: args.chainTargets,
548
- evmFamilySigningKeySlotId: requireEvmFamilySigningKeySlotId(args.ecdsaPrepare.prepare.evmFamilySigningKeySlotId, "registration ECDSA signing key slot"),
549
- ecdsaThresholdKeyId: parseEcdsaThresholdKeyId(args.ecdsaPrepare.prepare.ecdsaThresholdKeyId),
550
- signingRootId: parseSdkEcdsaDerivationSigningRootId(args.ecdsaPrepare.prepare.signingRootId),
551
- signingRootVersion: parseSdkEcdsaDerivationSigningRootVersion(args.ecdsaPrepare.prepare.signingRootVersion),
552
- runtimePolicyScope: args.ecdsaPrepare.prepare.runtimePolicyScope,
553
- clientVerifyingPublicKey33B64u: parseEcdsaClientVerifyingPublicKey33B64u(args.clientActivation.derivationClientSharePublicKey33B64u),
554
- participantIds: [toParticipantId(args.ecdsaPrepare.prepare.participantIds[0]), toParticipantId(args.ecdsaPrepare.prepare.participantIds[1])],
555
- relayerKeyId: parseEcdsaRelayerKeyId(args.ecdsaPrepare.prepare.relayerKeyId),
556
- bindingDigest: parseEcdsaRoleLocalBindingDigest(args.clientActivation.contextBinding32B64u),
557
- journalId: args.activationCorrelationId,
558
- requestDigest: args.activationCommand.requestDigest,
559
- canonicalRequest: args.activationCommand.canonicalRequest,
560
- createdAt: parseIsoTimestamp((/* @__PURE__ */ new Date()).toISOString())
561
- };
562
- const persisted = await args.context.signingEngine.persistInitialCanonicalEcdsaActivation({
563
- kind: "persist_initial_canonical_ecdsa_activation_v1",
564
- bootstrapOwner: "wallet_custody",
565
- clientActivation: args.clientActivation,
566
- ceremonyId: args.ceremonyId,
567
- planInput
568
- });
569
- if (!persisted.ok) throw new Error(`Canonical ECDSA activation persistence failed (${persisted.code}): ${persisted.message}`);
570
- return persisted;
571
- }
572
- function ethereumAddressFromAddress20B64u(value) {
573
- const bytes = base64UrlDecode(value);
574
- if (bytes.length !== 20) throw new Error("ECDSA activation address must contain 20 bytes");
575
- return `0x${Array.from(bytes, (byte) => byte.toString(16).padStart(2, "0")).join("")}`;
576
- }
577
- /**
578
- * Calls `/wallets/register/setup`, which replaces the bootstrap grant, the
579
- * registration intent, and registration start.
580
- *
581
- * Runs before the authenticator prompt, because its response carries the
582
- * challenge that prompt must sign — so the Router's ECDSA preparation overlaps
583
- * the user's interaction instead of being serialized after it.
584
- */
585
- async function setupThreeRouteRegistration(args) {
586
- const relayerUrl = String(args.context.configs.network.relayer.url || "").trim();
587
- if (!relayerUrl) throw new Error("registerWallet requires relayer.url");
588
- const registration = args.context.configs.registration;
589
- const publishableKey = String(registration?.publishableKey || "").trim();
590
- const environmentId = String(registration?.projectEnvironmentId || "").trim();
591
- if (!publishableKey || !environmentId) throw new Error("registerWallet requires registration.publishableKey and registration.projectEnvironmentId");
592
- const registrationWarmup = startRegistrationWarmup({
593
- recorder: args.recorder,
594
- context: args.context,
595
- authMethod: args.authMethod,
596
- signerSelection: args.signerSelection
597
- });
598
- const setup = await args.recorder.measure("registrationIntentMs", () => setupWalletRegistration({
599
- relayerUrl,
600
- request: {
601
- ...args.wallet.kind === "provided" ? { wallet: args.wallet } : {},
602
- signerSelection: args.signerSelection,
603
- authMethod: args.authMethod
604
- },
605
- auth: {
606
- publishableKey,
607
- environmentId
608
- }
609
- }));
610
- if (!setup.ok) throw registrationErrorWithCode(setup.message, setup.code);
611
- return {
612
- relayerUrl,
613
- setup,
614
- registrationWarmup
615
- };
616
- }
617
- async function setupRegistrationForPasskeyExecution(args) {
618
- if (args.passkeyExecution.kind === "collect_during_registration") return await setupThreeRouteRegistration({
619
- context: args.context,
620
- authMethod: args.authMethod,
621
- wallet: args.wallet,
622
- signerSelection: args.signerSelection,
623
- recorder: args.recorder
624
- });
625
- if (args.authMethod.kind !== "passkey") throw new Error("Hosted passkey preparation requires passkey registration");
626
- const state = hostedPasskeyRegistrationState(args.passkeyExecution.prepared);
627
- if (state.context !== args.context || state.lifecycle === "cancelled") throw new Error("Hosted passkey registration preparation belongs to a different operation");
628
- const setup = state.setup;
629
- const intent = requirePasskeyRegistrationIntent(setup.setup.intent);
630
- const challengeB64u = String(setup.setup.registrationIntentDigestB64u || "").trim();
631
- const signerSlot = registrationPreparationSignerSlot(args.signerSelection);
632
- if (hostedPasskeyRegistrationBinding({
633
- wallet: args.wallet,
634
- signerSelection: args.signerSelection,
635
- authMethod: args.authMethod,
636
- walletId: walletIdFromString(String(intent.walletId)),
637
- signerSlot,
638
- rpId: requireWebAuthnRpId(String(args.authMethod.rpId)),
639
- challengeB64u
640
- }) !== state.binding || String(intent.walletId) !== String(args.passkeyExecution.prepared.walletId) || challengeB64u !== args.passkeyExecution.prepared.challengeB64u) throw new Error("Hosted passkey registration preparation binding changed");
641
- return setup;
642
- }
643
- function ecdsaRegistrationClientCeremonyForExecution(args) {
644
- if (args.passkeyExecution.kind === "collect_during_registration") return { kind: "create_after_authority" };
645
- const state = hostedPasskeyRegistrationState(args.passkeyExecution.prepared);
646
- if (state.ecdsaClientCeremony.kind !== "started" || state.ecdsaClientCeremony.ceremonyId !== args.ceremonyId) throw new Error("Hosted passkey registration has no matching ECDSA client ceremony");
647
- return {
648
- kind: "use_hosted_preparation",
649
- ceremonyId: state.ecdsaClientCeremony.ceremonyId,
650
- operation: state.ecdsaClientCeremony.operation
651
- };
652
- }
653
- async function awaitHostedPreparedEcdsaClientCeremony(operation) {
654
- return await operation;
655
- }
656
- function ecdsaRegistrationClientCeremonyOperation(args) {
657
- switch (args.clientCeremony.kind) {
658
- case "create_after_authority": return args.context.signingEngine.createRouterAbEcdsaRegistrationCeremony.bind(args.context.signingEngine, {
659
- kind: "create_router_ab_ecdsa_registration_ceremony_v1",
660
- ceremonyId: args.ceremonyId,
661
- registration: args.registration
662
- });
663
- case "use_hosted_preparation":
664
- if (args.clientCeremony.ceremonyId !== args.ceremonyId) throw new Error("Prepared ECDSA client ceremony identity changed");
665
- return awaitHostedPreparedEcdsaClientCeremony.bind(void 0, args.clientCeremony.operation);
666
- default: return assertNever(args.clientCeremony);
667
- }
668
- }
669
- async function runEcdsaEnabledThreeRouteRegistrationCeremony(args) {
670
- const [firstChainTarget, ...remainingChainTargets] = args.ecdsaPrepare.chainTargets;
671
- if (!firstChainTarget) throw new Error("Strict ECDSA ceremony requires at least one EVM-family target");
672
- const ceremonyId = args.registrationCeremonyId;
673
- const activationCorrelationId = parseCorrelationId(ceremonyId);
674
- let deferredNearCustodyWork = null;
675
- try {
676
- const created = await measureStrictEcdsaCeremonyStep({
677
- registrationTiming: args.registrationTiming,
678
- bucket: "ecdsaRegistrationClientCreateMs",
679
- operation: ecdsaRegistrationClientCeremonyOperation({
680
- context: args.context,
681
- ceremonyId,
682
- registration: args.ecdsaPrepare.strictRegistration,
683
- clientCeremony: args.clientCeremony
684
- })
685
- });
686
- const responded = await measureStrictEcdsaCeremonyStep({
687
- registrationTiming: args.registrationTiming,
688
- bucket: "ecdsaRegistrationGatewayRespondMs",
689
- operation: respondWalletRegistration.bind(void 0, {
690
- relayerUrl: args.relayerUrl,
691
- headers: registrationRouteHeaders(args.traceContext),
692
- registrationCeremonyId: ceremonyId,
693
- signerPlanKind: args.signerPlanKind,
694
- signedSetup: args.signedSetup,
695
- ecdsa: {
696
- kind: "router_ab_ecdsa_registration_v1",
697
- strictRegistration: created.registrationRequest,
698
- requestDigestB64u: created.registrationRequestDigestB64u
699
- },
700
- ...registrationThreeRouteAuthorityPayload(args.authority),
701
- onServerTiming: (header) => recordStrictEcdsaServerTimingBuckets(args.registrationTiming, "respond", header)
702
- })
703
- });
704
- if (responded.kind === "near_ed25519") throw new Error("ECDSA registration ceremony received an Ed25519-only respond result");
705
- const deferredNear = responded.kind === "near_ed25519_and_evm_family_ecdsa" ? responded.ed25519 : null;
706
- const nearAdmission = deferredNear ? startNearRegistrationAdmission({
707
- relayerUrl: args.relayerUrl,
708
- registrationCeremonyId: ceremonyId,
709
- signedSetup: args.signedSetup,
710
- deferredNear,
711
- traceContext: args.traceContext
712
- }) : null;
713
- nearAdmission?.catch(ignoreNearCustodyFailure);
714
- const verified = await measureStrictEcdsaCeremonyStep({
715
- registrationTiming: args.registrationTiming,
716
- bucket: "ecdsaRegistrationClientProofVerifyMs",
717
- operation: args.context.signingEngine.verifyRouterAbEcdsaRegistrationClientProofs.bind(args.context.signingEngine, {
718
- kind: "verify_router_ab_ecdsa_registration_client_proofs_v1",
719
- bootstrapOwner: "wallet_custody",
720
- ceremonyId,
721
- clientProofFinalization: {
722
- kind: "finalize_encrypted_client_proof_bundles_v2",
723
- bundles: responded.ecdsa.strictResult.response.bundles
724
- }
725
- })
726
- });
727
- const activateEmailOtp = await args.resolveActivateEmailOtp();
728
- const chainTargets = [firstChainTarget, ...remainingChainTargets];
729
- const walletCustodyFactorJson = args.authority.kind === "passkey" ? args.authority.walletCustodyFactorJson : activateEmailOtp.walletCustodyFactorJson;
730
- if (!walletCustodyFactorJson) throw new Error("ECDSA registration has no wallet custody factor binding");
731
- const walletCustodyFactorSecret = args.authority.walletCustodyFactorSecret;
732
- const activationHolder = {};
733
- const established = await args.context.signingEngine.establishWalletCustodyEvmFamilyKeySet({
734
- walletId: args.ecdsaPrepare.prepare.walletId,
735
- factorJson: walletCustodyFactorJson,
736
- factorSecret: walletCustodyFactorSecret,
737
- evmFamilySigningKeySlotId: args.ecdsaPrepare.prepare.evmFamilySigningKeySlotId,
738
- applicationBindingDigestB64u: verified.applicationBindingDigestB64u,
739
- confirmRecoveryCodesBackedUp: args.confirmRecoveryCodesBackedUp,
740
- runRelayerRound: async (bootstrap) => {
741
- const clientActivation = parseRouterAbEcdsaVerifiedClientActivationFactsV1({
742
- registrationRequestDigestB64u: verified.registrationRequestDigestB64u,
743
- proofTranscriptDigestB64u: verified.proofTranscriptDigestB64u,
744
- contextBinding32B64u: bootstrap.contextBinding32B64u,
745
- derivationClientSharePublicKey33B64u: bootstrap.clientSharePublicKey33B64u,
746
- clientShareRetryCounter: bootstrap.clientShareRetryCounter,
747
- participantId: 1
748
- });
749
- const activationCommand = await buildThreeRouteCanonicalActivationCommand({
750
- registrationCeremonyId: ceremonyId,
751
- activationCorrelationId,
752
- idempotencyKey: args.idempotencyKey,
753
- publicFacts: clientActivation
754
- });
755
- const ecdsaCustodyCommit = walletCustodyCommitPayloadForWire(bootstrap.preActivationCommitPayload);
756
- const ecdsaReplay = {
757
- activationJournalId: activationCorrelationId,
758
- clientActivation,
759
- activationRequestDigestB64u: activationCommand.requestDigest
760
- };
761
- if (args.signerPlanKind === "near_ed25519_and_evm_family_ecdsa") {
762
- if (!deferredNear) throw new Error("Mixed registration has no NEAR continuation");
763
- await args.persistPendingCommit({
764
- signerPlanKind: args.signerPlanKind,
765
- localMaterial: {
766
- keyFamilies: ["ecdsa_secp256k1"],
767
- custodyCommit: ecdsaCustodyCommit,
768
- ecdsa: ecdsaReplay
769
- },
770
- emailOtpEnrollment: activateEmailOtp.enrollment,
771
- deferredNear
772
- });
773
- deferredNearCustodyWork = args.startDeferredNearCustody({
774
- admission: requireNearRegistrationAdmission(nearAdmission),
775
- establishedEvmCustodyCommit: bootstrap.preActivationCommitPayload
776
- });
777
- deferredNearCustodyWork.catch(ignoreNearCustodyFailure);
778
- } else await args.persistPendingCommit({
779
- signerPlanKind: args.signerPlanKind,
780
- localMaterial: {
781
- keyFamilies: ["ecdsa_secp256k1"],
782
- custodyCommit: ecdsaCustodyCommit,
783
- ecdsa: ecdsaReplay
784
- },
785
- emailOtpEnrollment: activateEmailOtp.enrollment
786
- });
787
- const persisted = await persistThreeRouteCanonicalActivation({
788
- context: args.context,
789
- ceremonyId,
790
- materialAuthority: args.materialAuthority,
791
- ecdsaPrepare: args.ecdsaPrepare,
792
- chainTargets,
793
- activationCorrelationId,
794
- activationCommand,
795
- clientActivation
796
- });
797
- if (String(persisted.journalId) !== String(activationCorrelationId)) throw new Error("ECDSA activation journal identity changed before activate");
798
- const response = await measureStrictEcdsaCeremonyStep({
799
- registrationTiming: args.registrationTiming,
800
- bucket: "ecdsaRegistrationGatewayActivateMs",
801
- operation: activateWalletRegistration.bind(void 0, {
802
- relayerUrl: args.relayerUrl,
803
- headers: registrationRouteHeaders(args.traceContext),
804
- registrationCeremonyId: ceremonyId,
805
- signerPlanKind: args.signerPlanKind,
806
- signedSetup: args.signedSetup,
807
- idempotencyKey: args.idempotencyKey,
808
- ecdsa: {
809
- clientActivation,
810
- activationCorrelationId,
811
- activationRequestDigestB64u: activationCommand.requestDigest
812
- },
813
- walletCustodyCommit: bootstrap.preActivationCommitPayload,
814
- ...activateEmailOtp.enrollment ? { emailOtpEnrollment: activateEmailOtp.enrollment } : {},
815
- onServerTiming: (header) => recordStrictEcdsaServerTimingBuckets(args.registrationTiming, "activate", header)
816
- })
817
- });
818
- if (response.kind !== "evm_family_ecdsa" || !response.ecdsa) throw new Error("ECDSA registration ceremony received a non-ECDSA activate result");
819
- activationHolder.value = response;
820
- activationHolder.journalId = persisted.journalId;
821
- const identity = response.ecdsa.activation.ecdsa_activation.public_identity;
822
- return JSON.stringify({
823
- relayerKeyId: args.ecdsaPrepare.prepare.relayerKeyId,
824
- relayerPublicKey33B64u: identity.server_public_key33_b64u,
825
- groupPublicKey33B64u: identity.threshold_public_key33_b64u,
826
- ethereumAddress: ethereumAddressFromAddress20B64u(identity.ethereum_address20_b64u),
827
- relayerShareRetryCounter: identity.server_share_retry_counter
828
- });
829
- }
830
- });
831
- if (!activationHolder.value || !activationHolder.journalId) throw new Error("Wallet custody ECDSA activation did not return its committed receipt");
832
- const activated = activationHolder.value;
833
- if (activated.walletCustody?.status !== "committed") {
834
- const status = activated.walletCustody?.status ?? "not_reported";
835
- throw new Error(`Wallet custody did not commit during ECDSA activation (${status})`);
836
- }
837
- const clientBootstrap = buildStrictRegistrationClientBootstrap({
838
- prepare: args.ecdsaPrepare.prepare,
839
- verified: established.clientBootstrap
840
- });
841
- const registrationBootstrap = parseWalletRegistrationEcdsaDerivationRespond({
842
- clientBootstrap,
843
- serverBootstrap: activated.ecdsa.bootstrap,
844
- activationEpoch: activated.ecdsa.activation.ecdsa_activation.activation_epoch
845
- });
846
- const finalized = await args.context.signingEngine.finalizeRouterAbEcdsaRegistrationActivation({
847
- kind: "finalize_router_ab_ecdsa_registration_activation_v1",
848
- bootstrapOwner: "wallet_custody",
849
- journalId: activationHolder.journalId,
850
- activationReceipt: activated.ecdsa.activation,
851
- routerAbEcdsaDerivationNormalSigning: registrationBootstrap.routerAbEcdsaDerivationNormalSigning,
852
- readyStateBlobB64u: established.localMaterial.readyStateBlobB64u,
853
- walletCustodyPublicFacts: established.localMaterial.publicFacts
854
- });
855
- return {
856
- session: {
857
- chainTargets: [firstChainTarget, ...remainingChainTargets],
858
- clientBootstrap,
859
- bootstrap: registrationBootstrap,
860
- activatedThresholdSessionId: activated.ecdsa.bootstrap.thresholdSessionId,
861
- roleLocalMaterial: finalized.roleLocalMaterial,
862
- authority: await walletAuthAuthorityRef({ authority: activated.authority }),
863
- materialActivation: finalized.materialActivation,
864
- clientPublicFacts: finalized.publicFacts,
865
- publicCapability: finalized.publicCapability,
866
- registrationEstablishedSession: requireIssuedRegistrationEstablishedSession(activated.registrationEstablishedSession)
867
- },
868
- activated,
869
- deferredNear,
870
- activateEmailOtp: { enrollment: activateEmailOtp.enrollment },
871
- walletCustody: established,
872
- deferredNearCustodyWork
873
- };
874
- } catch (error) {
875
- discardDeferredNearCustodyWork(deferredNearCustodyWork);
876
- await closeStrictEcdsaRegistrationCeremony({
877
- context: args.context,
878
- ceremonyId
879
- });
880
- throw error;
881
- }
882
- }
883
- function materializeWalletRegistrationSetupChainTarget(target) {
884
- switch (target.kind) {
885
- case "evm": return thresholdEcdsaChainTargetFromChainFamily({
886
- chain: "evm",
887
- chainId: target.chainId,
888
- networkSlug: target.networkSlug
889
- });
890
- case "tempo": return thresholdEcdsaChainTargetFromChainFamily({
891
- chain: "tempo",
892
- chainId: target.chainId,
893
- networkSlug: target.networkSlug
894
- });
895
- default: return assertNever(target);
896
- }
897
- }
898
- function materializeWalletRegistrationSetupEcdsaPrepare(setup) {
899
- const [firstTarget, ...remainingTargets] = setup.chainTargets;
900
- if (!firstTarget) throw new Error("Registration setup ECDSA chain targets are required");
901
- return {
902
- kind: setup.kind,
903
- chainTargets: [materializeWalletRegistrationSetupChainTarget(firstTarget), ...remainingTargets.map(materializeWalletRegistrationSetupChainTarget)],
904
- prepare: setup.prepare,
905
- strictRegistration: setup.strictRegistration
906
- };
907
- }
908
- function requireEcdsaRegistrationSetup(setup, expectedKind) {
909
- switch (setup.kind) {
910
- case "near_ed25519": throw new Error("Registration setup returned an Ed25519-only signer branch");
911
- case "evm_family_ecdsa":
912
- case "near_ed25519_and_evm_family_ecdsa":
913
- if (setup.kind !== expectedKind) throw new Error("Registration setup returned a different signer branch");
914
- return setup;
915
- default: return assertNever(setup);
916
- }
917
- }
918
- function registrationPasskeySignerSlot(args) {
919
- switch (args.kind) {
920
- case "evm_family_ecdsa": return 1;
921
- case "near_ed25519_and_evm_family_ecdsa": return args.ed25519Selection.signerSlot;
922
- default: return assertNever(args);
923
- }
924
- }
925
- function pendingRegistrationAuthFromRegistrationInputs(args) {
926
- if (args.authMethod.kind === "passkey") {
927
- if (!args.passkeyAuthority) throw new Error("Passkey registration authority was not collected");
928
- return {
929
- kind: "passkey",
930
- rpId: args.authMethod.rpId,
931
- credentialIdB64u: String(args.passkeyAuthority.credential.rawId || args.passkeyAuthority.credential.id || "").trim(),
932
- transports: [...args.passkeyAuthority.webauthnRegistration.response.transports]
933
- };
934
- }
935
- return {
936
- kind: "email_otp",
937
- email: args.email,
938
- registrationAuthorityId: args.registrationAuthorityId,
939
- providerSubject: args.providerSubject,
940
- enrollment: requirePendingEmailOtpEnrollment(args.emailOtpEnrollment)
941
- };
942
- }
943
- function requirePendingEmailOtpEnrollment(enrollment) {
944
- if (!enrollment) throw new Error("Email OTP registration has no enrollment material for pending recovery");
945
- return enrollment;
946
- }
947
- async function persistPendingRegistrationCommit(input) {
948
- const nowMs = Date.now();
949
- const pending = buildPendingRegistrationCommit({
950
- ...input,
951
- createdAtMs: nowMs,
952
- updatedAtMs: nowMs
953
- });
954
- await IndexedDBManager.putPendingWalletRegistrationCommit(pending);
955
- return pending;
956
- }
957
- function requireMixedRegistrationActivatePendingCommit(pending) {
958
- if (!pending || pending.operation !== "registration_activate" || pending.signerPlanKind !== "near_ed25519_and_evm_family_ecdsa") throw new Error("Mixed registration activation commit was not persisted");
959
- return pending;
960
- }
961
- async function prepareRegistrationEcdsaPublication(args) {
962
- const walletKeys = args.walletKeys;
963
- if (args.auth.kind === "passkey") {
964
- const credentialIdB64u = String(args.auth.credential.rawId || args.auth.credential.id || "").trim();
965
- if (!credentialIdB64u) throw new Error("Passkey registration publication has no credential id");
966
- return await prepareWalletEcdsaRegistrationPublication({
967
- kind: "passkey",
968
- walletId: args.walletId,
969
- rpId: requireWebAuthnRpId(args.auth.rpId),
970
- credentialIdB64u,
971
- credentialPublicKeyB64u: args.auth.credentialPublicKeyB64u,
972
- transports: args.auth.credential.response?.transports ?? [],
973
- walletKeys
974
- });
975
- }
976
- return await prepareWalletEcdsaRegistrationPublication({
977
- kind: "email_otp",
978
- walletId: args.walletId,
979
- email: args.auth.email,
980
- registrationAuthorityId: args.auth.registrationAuthorityId,
981
- authority: args.auth.authority,
982
- walletKeys
983
- });
984
- }
985
- async function publishMixedEcdsaRegistrationCommit(args) {
986
- const walletKeys = await finalizeRegistrationEcdsaSessions({
987
- context: args.context,
988
- relayerUrl: args.relayerUrl,
989
- registrationTiming: args.registrationTiming,
990
- plan: args.plan
991
- });
992
- const registration = await prepareRegistrationEcdsaPublication({
993
- auth: args.plan.auth,
994
- walletId: args.plan.walletId,
995
- walletKeys
996
- });
997
- const registrationSession = args.plan.ecdsa.session.registrationEstablishedSession;
998
- await IndexedDBManager.publishPendingWalletRegistrationCommit({
999
- pending: args.pending,
1000
- authority: args.activated.authority,
1001
- foundingAuthority: {
1002
- authority: args.activated.foundingAuthority,
1003
- authMethod: args.activated.foundingAuthMethod
1004
- },
1005
- request: {
1006
- operation: args.pending.operation,
1007
- registrationCeremonyId: args.pending.registrationCeremonyId,
1008
- idempotencyKey: args.pending.idempotencyKey,
1009
- walletId: args.pending.walletId,
1010
- walletAuthMethodId: args.pending.walletAuthMethodId
1011
- },
1012
- walletSessionPublication: {
1013
- kind: "issued",
1014
- walletSession: registrationSession.walletSession,
1015
- operationCredential: registrationSession.operationCredential
1016
- },
1017
- ecdsaContinuity: [],
1018
- registration
1019
- });
1020
- }
1021
- async function discardDeferredNearCustodyWork(work) {
1022
- if (!work) return;
1023
- try {
1024
- zeroizeArrayBuffer((await work).factorSecret32);
1025
- } catch {}
1026
- }
1027
- function buildDeferredRegistrationFinalizeAuthMaterial(args) {
1028
- switch (args.auth.kind) {
1029
- case "passkey": {
1030
- if (!args.passkeyAuthority) throw new Error("Deferred passkey registration requires authority material");
1031
- const credentialIdB64u = String(args.passkeyAuthority.credential.rawId || args.passkeyAuthority.credential.id || "").trim();
1032
- const prfFirstB64u = String(args.passkeyAuthority.prfFirstB64u || "").trim();
1033
- if (!credentialIdB64u || !prfFirstB64u) throw new Error("Deferred passkey registration requires credential PRF material");
1034
- return {
1035
- kind: "passkey",
1036
- rpId: args.auth.rpId,
1037
- credentialIdB64u,
1038
- prfFirstB64u
1039
- };
1040
- }
1041
- case "email_otp":
1042
- if (!args.emailOtpEnrollment) throw new Error("Deferred Email OTP registration requires enrollment material");
1043
- return {
1044
- kind: "email_otp",
1045
- enrollment: args.emailOtpEnrollment,
1046
- emailOtpAuthContext: args.auth.emailOtpAuthContext
1047
- };
1048
- default: return assertNever(args.auth);
1049
- }
1050
- }
1051
- async function persistPreparedNearRegistration(pending, receipt, checkpointJson) {
1052
- const startedAt = performance.now();
1053
- await IndexedDBManager.advancePendingNearRegistration({
1054
- expected: pending,
1055
- next: preparePendingNearRegistration(pending, receipt, checkpointJson)
1056
- });
1057
- recordWalletCustodyTiming(pending.registrationCeremonyId, "journal_prepared", startedAt);
1058
- }
1059
- function ignoreNearCustodyFailure() {}
1060
- async function startDeferredNearWalletCustody(base, input) {
1061
- const factorSecret = base.factorSecretOwner.value;
1062
- if (!factorSecret) throw new Error("Mixed registration has no NEAR custody factor secret");
1063
- base.factorSecretOwner.value = null;
1064
- const startedAt = performance.now();
1065
- let outcome = "failure";
1066
- try {
1067
- const pending = await IndexedDBManager.getPendingWalletRegistrationCommit({
1068
- registrationCeremonyId: base.registrationCeremonyId,
1069
- operation: "near_provisioning"
1070
- });
1071
- if (!pending || pending.operation !== "near_provisioning" || pending.phase !== "planned") throw new Error("NEAR registration has no planned continuation");
1072
- let preAdmittedReceipt;
1073
- try {
1074
- const admitted = await input.admission;
1075
- if (!sameRouterAbEd25519YaoRegistrationAdmissionRequestV1(admitted.deferredNear.admissionRequest, pending.admissionRequest)) throw new Error("NEAR admission changed the authorized request");
1076
- preAdmittedReceipt = admitted.admissionReceipt;
1077
- } catch (error) {
1078
- if (error instanceof Error && error.message === "NEAR admission changed the authorized request") throw error;
1079
- preAdmittedReceipt = void 0;
1080
- }
1081
- const { joined, admissionReceipt } = await continueNearRegistrationCustody({
1082
- pending,
1083
- signingEngine: base.context.signingEngine,
1084
- relayerUrl: base.relayerUrl,
1085
- credential: base.signedSetup,
1086
- traceContext: base.traceContext,
1087
- factorSecret,
1088
- ...preAdmittedReceipt ? { admitted: preAdmittedReceipt } : {}
1089
- });
1090
- outcome = "success";
1091
- return {
1092
- admissionReceipt,
1093
- joined,
1094
- admissionRequest: pending.admissionRequest,
1095
- envelope: custodyEnvelopeFromRegistrationCommit({
1096
- commit: input.establishedEvmCustodyCommit,
1097
- walletId: pending.walletId,
1098
- activatedAtMs: Date.now()
1099
- }),
1100
- factorSecret32: factorSecret
1101
- };
1102
- } catch (error) {
1103
- zeroizeArrayBuffer(factorSecret);
1104
- throw error;
1105
- } finally {
1106
- emitNearRegistrationTiming({
1107
- ceremonyId: base.registrationCeremonyId,
1108
- stage: "custody_join",
1109
- startedAt,
1110
- outcome
1111
- });
1112
- }
1113
- }
1114
- async function resolveNearRegistrationAdmissionReceipt(args) {
1115
- if (args.pending.phase === "execution_prepared") return args.pending.admissionReceipt;
1116
- if (args.admitted) return args.admitted;
1117
- return await admitDeferredNearRegistration({
1118
- status: "deferred",
1119
- admissionRequest: args.pending.admissionRequest
1120
- }, {
1121
- routerOrigin: new URL(args.relayerUrl).origin,
1122
- authorization: {
1123
- kind: "bearer",
1124
- value: `Bearer ${args.credential}`
1125
- },
1126
- fetch: globalThis.fetch,
1127
- traceContext: args.traceContext
1128
- });
1129
- }
1130
- async function continueNearRegistrationCustody(args) {
1131
- const journal = args.pending;
1132
- if (journal.phase === "joined" && journal.completion.kind !== "encrypted_checkpoint") throw new Error("Joined material has no encrypted execution checkpoint");
1133
- const pending = journal.phase === "joined" && journal.completion.kind === "encrypted_checkpoint" ? journal.completion.prepared : journal;
1134
- if (pending.phase === "joined") throw new Error("Invalid NEAR continuation phase");
1135
- const admission = pending.admissionRequest;
1136
- const admissionStartedAt = performance.now();
1137
- const admissionReceipt = await resolveNearRegistrationAdmissionReceipt({
1138
- pending,
1139
- relayerUrl: args.relayerUrl,
1140
- credential: args.credential,
1141
- traceContext: args.traceContext,
1142
- ...args.admitted ? { admitted: args.admitted } : {}
1143
- });
1144
- recordWalletCustodyTiming(pending.registrationCeremonyId, "admission", admissionStartedAt);
1145
- const joined = await args.signingEngine.joinWalletCustodyNearEd25519KeySet({
1146
- ...pending.phase === "planned" ? {
1147
- preparation: { kind: "fresh" },
1148
- beforeRouterRound: persistPreparedNearRegistration.bind(void 0, pending, admissionReceipt)
1149
- } : { preparation: {
1150
- kind: "checkpoint",
1151
- checkpointJson: pending.checkpointJson
1152
- } },
1153
- custodyJson: joinCustodyJsonFromEstablishedCommitPayload(pending.baseCustodyCommit),
1154
- factorSecret: args.factorSecret,
1155
- nearEd25519SigningKeyId: admission.application_binding.near_ed25519_signing_key_id,
1156
- registrationCeremonyId: pending.registrationCeremonyId,
1157
- admissionRequest: admission,
1158
- admissionReceipt,
1159
- participantIds: admission.participant_ids,
1160
- routerOrigin: new URL(args.relayerUrl).origin,
1161
- authorization: `Bearer ${args.credential}`,
1162
- traceContext: args.traceContext
1163
- });
1164
- if (journal.phase === "joined") {
1165
- if (base64UrlEncode(joined.metadata.registeredPublicKey) !== journal.localMaterial.ed25519.metadata.registeredPublicKeyB64u || JSON.stringify(joined.activationReference) !== JSON.stringify(journal.localMaterial.ed25519.activationReference)) throw new Error("Restored NEAR checkpoint changed the joined key");
1166
- return {
1167
- joined,
1168
- admissionReceipt
1169
- };
1170
- }
1171
- const journalStartedAt = performance.now();
1172
- const prepared = await IndexedDBManager.getPendingWalletRegistrationCommit({
1173
- registrationCeremonyId: pending.registrationCeremonyId,
1174
- operation: "near_provisioning"
1175
- });
1176
- if (!prepared || prepared.operation !== "near_provisioning" || prepared.phase !== "execution_prepared") throw new Error("NEAR execution checkpoint was not persisted");
1177
- const joinedPending = buildPendingRegistrationCommit({
1178
- operation: "near_provisioning",
1179
- signerPlanKind: "near_ed25519_and_evm_family_ecdsa",
1180
- completion: {
1181
- kind: "encrypted_checkpoint",
1182
- prepared
1183
- },
1184
- registrationCeremonyId: prepared.registrationCeremonyId,
1185
- idempotencyKey: await deriveNearProvisioningIdempotencyKey({
1186
- registrationCeremonyId: prepared.registrationCeremonyId,
1187
- activationReference: joined.activationReference
1188
- }),
1189
- walletId: prepared.walletId,
1190
- walletAuthMethodId: prepared.walletAuthMethodId,
1191
- signedSetup: prepared.signedSetup,
1192
- auth: prepared.auth,
1193
- createdAtMs: prepared.createdAtMs,
1194
- updatedAtMs: Date.now(),
1195
- localMaterial: {
1196
- keyFamilies: ["ed25519"],
1197
- custodyCommit: joined.commitPayload,
1198
- ed25519: {
1199
- activationReference: joined.activationReference,
1200
- localMaterial: joined.localMaterial,
1201
- metadata: pendingRegistrationEd25519MetadataFromJoined(joined)
1202
- }
1203
- }
1204
- });
1205
- if (joinedPending.operation !== "near_provisioning" || joinedPending.phase !== "joined") throw new Error("Invalid joined NEAR continuation");
1206
- await IndexedDBManager.advancePendingNearRegistration({
1207
- expected: prepared,
1208
- next: joinedPending
1209
- });
1210
- recordWalletCustodyTiming(pending.registrationCeremonyId, "journal_joined", journalStartedAt);
1211
- return {
1212
- joined,
1213
- admissionReceipt
1214
- };
1215
- }
1216
- function nearRegistrationChainTarget(target) {
1217
- return target.chainTarget;
1218
- }
1219
- function resumedNearRegistrationAuth(pending, factor) {
1220
- if (pending.auth.kind === "passkey" && factor.kind === "passkey" && pending.auth.rpId === factor.rpId && pending.auth.credentialIdB64u === factor.credentialIdB64u) return {
1221
- kind: "passkey",
1222
- rpId: factor.rpId,
1223
- credentialIdB64u: factor.credentialIdB64u,
1224
- prfFirstB64u: factor.prfFirstB64u
1225
- };
1226
- if (pending.auth.kind === "email_otp" && factor.kind === "email_otp" && pending.auth.providerSubject === factor.providerSubject) {
1227
- const authority = parseEmailOtpWalletAuthAuthority({
1228
- walletId: pending.walletId,
1229
- bindingId: pending.walletAuthMethodId,
1230
- factor: {
1231
- kind: "email_otp",
1232
- provider: factor.provider,
1233
- providerUserId: factor.providerSubject
1234
- },
1235
- verifier: {
1236
- kind: "email_otp_wallet_auth_method",
1237
- emailHashHex: factor.emailHashHex
1238
- }
1239
- });
1240
- if (!authority) throw new Error("NEAR continuation requires its founding Email OTP method");
1241
- return {
1242
- kind: "email_otp",
1243
- enrollment: pending.auth.enrollment,
1244
- emailOtpAuthContext: buildEmailOtpAuthContext({
1245
- policy: "session",
1246
- retention: "session",
1247
- reason: "login",
1248
- authority
1249
- })
1250
- };
1251
- }
1252
- throw new Error("NEAR continuation requires its founding authentication method");
1253
- }
1254
- async function resumeNearRegistrationCustodyWork(args) {
1255
- await requireCurrentNearRegistrationSession(args.sessionAuthority);
1256
- if (args.pending.phase === "joined" && args.pending.completion.kind === "sealed_material") {
1257
- const restored = await restorePendingNearRegistrationMaterial({
1258
- pending: args.pending,
1259
- relayerUrl: args.relayerUrl,
1260
- operationCredential: args.sessionAuthority.operationCredential
1261
- });
1262
- return {
1263
- joined: restored.joined,
1264
- admissionRequest: restored.admissionRequest,
1265
- admissionReceipt: restored.admissionReceipt,
1266
- envelope: args.envelope,
1267
- factorSecret32: args.factorSecret
1268
- };
1269
- }
1270
- const prepared = args.pending.phase === "joined" ? args.pending.completion.prepared : args.pending;
1271
- if (!prepared) throw new Error("NEAR continuation has no encrypted checkpoint");
1272
- const result = await continueNearRegistrationCustody({
1273
- pending: args.pending,
1274
- signingEngine: args.context.signingEngine,
1275
- relayerUrl: args.relayerUrl,
1276
- credential: args.sessionAuthority.operationCredential.token,
1277
- traceContext: createRouterAbTraceContextV1(),
1278
- factorSecret: args.factorSecret
1279
- });
1280
- return {
1281
- joined: result.joined,
1282
- admissionReceipt: result.admissionReceipt,
1283
- admissionRequest: prepared.admissionRequest,
1284
- envelope: args.envelope,
1285
- factorSecret32: args.factorSecret
1286
- };
1287
- }
1288
- /** Owns the factor copy; ordinary unlock is already complete when this starts. */
1289
- async function resumeNearRegistrationAfterUnlock(args) {
1290
- const startedAt = performance.now();
1291
- try {
1292
- const rows = await IndexedDBManager.listPendingWalletRegistrationCommits();
1293
- for (const pending of rows) {
1294
- if (pending.operation !== "near_provisioning" || pending.walletId !== args.sessionAuthority.record.walletId || pending.walletAuthMethodId !== args.sessionAuthority.record.authMethodId || pending.signerPlanKind !== "near_ed25519_and_evm_family_ecdsa") continue;
1295
- if (await IndexedDBManager.getPendingWalletRegistrationCommit({
1296
- registrationCeremonyId: pending.registrationCeremonyId,
1297
- operation: "registration_activate"
1298
- })) continue;
1299
- const relayerUrl = args.context.configs.network.relayer.url;
1300
- const authMaterial = resumedNearRegistrationAuth(pending, args.factor);
1301
- const work = resumeNearRegistrationCustodyWork.bind(void 0, {
1302
- context: args.context,
1303
- pending,
1304
- envelope: args.custodyEnvelope,
1305
- relayerUrl,
1306
- sessionAuthority: args.sessionAuthority,
1307
- factorSecret: args.ownedFactorSecret
1308
- });
1309
- await runDeferredEd25519Provisioning({
1310
- context: args.context,
1311
- walletId: pending.walletId,
1312
- commit: {
1313
- context: args.context,
1314
- registrationTiming: null,
1315
- registrationStartedAt: startedAt,
1316
- clientPrewarm: Promise.resolve(),
1317
- relayerUrl,
1318
- registrationCeremonyId: pending.registrationCeremonyId,
1319
- signedSetup: pending.signedSetup,
1320
- headers: registrationRouteHeaders(),
1321
- nearCustodyWork: work,
1322
- sessionAuthority: args.sessionAuthority,
1323
- expectedChainTargets: listConfiguredThresholdEcdsaPublicationTargets(args.context.configs.network.chains).map(nearRegistrationChainTarget),
1324
- walletId: pending.walletId,
1325
- authMaterial
1326
- }
1327
- });
1328
- }
1329
- } catch (error) {
1330
- console.warn("[registration] NEAR continuation remains pending", error instanceof Error ? error.message : "continuation failed");
1331
- } finally {
1332
- zeroizeArrayBuffer(args.ownedFactorSecret);
1333
- }
1334
- }
1335
- function requireDeferredNearCustodyWork(work) {
1336
- if (!work) throw new Error("Mixed registration did not start its NEAR custody join");
1337
- return work;
1338
- }
1339
- function mixedRegistrationSessionFromDeferredResult(existing, result, finalAuthority, finalAuthMethod) {
1340
- if (result.kind !== "already_committed" || result.session.tokens.kind !== "near_ed25519_and_evm_family_ecdsa") throw new Error("NEAR completion must extend the current Wallet Session");
1341
- const projection = result.session;
1342
- const current = existing.record;
1343
- const next = projection.walletSession;
1344
- if (projection.walletId !== current.walletId || projection.authorizationId !== current.authorizationId || projection.quotaId !== current.quotaId || projection.walletSessionId !== existing.operationCredential.walletSessionId || next.authorityId !== current.authorityId || next.authMethodId !== current.authMethodId || next.issuedAtMs !== current.issuedAtMs || next.expiresAtMs !== current.expiresAtMs || next.authorityRevocationEpoch !== current.authorityRevocationEpoch || next.expiresAtMs <= Date.now() || !walletSessionPreservesCapabilities(current, next) || finalAuthority.authorityId !== next.authorityId || finalAuthority.walletId !== next.walletId || finalAuthority.authorityDigestB64u !== next.authorityDigestB64u || finalAuthority.revocationEpoch !== next.authorityRevocationEpoch || finalAuthMethod.walletAuthMethodId !== next.authMethodId || finalAuthMethod.walletId !== next.walletId || finalAuthMethod.walletAuthorityId !== next.authorityId) throw new Error("NEAR completion changed the current Wallet Session authority");
1345
- return {
1346
- kind: "registration_established_wallet_session_v2",
1347
- walletId: projection.walletId,
1348
- authorizationId: projection.authorizationId,
1349
- walletSessionId: projection.walletSessionId,
1350
- quotaId: projection.quotaId,
1351
- expiresAtMs: projection.expiresAtMs,
1352
- remainingUses: projection.remainingUses,
1353
- walletSession: next,
1354
- operationCredential: existing.operationCredential,
1355
- tokens: projection.tokens
1356
- };
1357
- }
1358
- async function requireCurrentNearRegistrationSession(expected) {
1359
- const current = await walletSessionAuthorizations.readExactWithOperationCredential({
1360
- walletId: expected.record.walletId,
1361
- authorityId: expected.record.authorityId,
1362
- authMethodId: expected.record.authMethodId
1363
- });
1364
- if (current.kind !== "found" || current.record.expiresAtMs <= Date.now() || current.record.authorizationId !== expected.record.authorizationId || current.record.authorityRevocationEpoch !== expected.record.authorityRevocationEpoch || current.operationCredential.token !== expected.operationCredential.token) throw new Error("NEAR continuation requires the current unlocked Wallet Session");
1365
- }
1366
- async function readJoinedNearRegistrationCommit(args) {
1367
- const pending = await IndexedDBManager.getPendingWalletRegistrationCommit({
1368
- registrationCeremonyId: args.registrationCeremonyId,
1369
- operation: "near_provisioning"
1370
- });
1371
- if (!pending || pending.operation !== "near_provisioning" || pending.phase !== "joined" || pending.walletId !== args.walletId || pending.walletAuthMethodId !== args.walletAuthMethodId) throw new Error("NEAR joined checkpoint was not persisted");
1372
- return pending;
1373
- }
1374
- async function activatePasskeyRegistrationEd25519Material(args) {
1375
- const { metadata, materialFacts } = args;
1376
- const activationFacts = {
1377
- materialActivation: nearEd25519YaoMaterialActivationFromMetadata(metadata),
1378
- lifecycleId: metadata.scope.lifecycle_id,
1379
- signingRootVersion: metadata.scope.root_share_epoch,
1380
- signingRootId: metadata.applicationBinding.signing_root_id,
1381
- signerSetId: metadata.scope.signer_set_id,
1382
- thresholdSessionId: materialFacts.identity.thresholdSessionId,
1383
- activationTranscriptB64u: base64UrlEncode(metadata.transcript),
1384
- activationCapabilityBindingB64u: base64UrlEncode(Uint8Array.from(metadata.activeCapabilityBinding))
1385
- };
1386
- let activeClient = null;
1387
- try {
1388
- activeClient = await openWalletCustodyEd25519ActiveClientV1({
1389
- material: args.material,
1390
- activation: activationFacts,
1391
- envelope: args.envelope,
1392
- ownedFactorSecret: args.ownedFactorSecret
1393
- });
1394
- await persistPasskeyEd25519YaoSignerMaterialV1({
1395
- store: IndexedDBManager,
1396
- activeClient,
1397
- identity: {
1398
- walletId: materialFacts.identity.walletId,
1399
- nearAccountId: materialFacts.identity.nearAccountId,
1400
- nearEd25519SigningKeyId: materialFacts.identity.nearEd25519SigningKeyId,
1401
- thresholdSessionId: materialFacts.identity.thresholdSessionId,
1402
- signerSlot: materialFacts.identity.signerSlot,
1403
- rpId: args.rpId,
1404
- credentialIdB64u: args.credentialIdB64u,
1405
- signingRootId: materialFacts.identity.signingRootId,
1406
- signingRootVersion: materialFacts.identity.signingRootVersion,
1407
- signingWorkerId: materialFacts.stableServerScope.routerAbNormalSigning.signingWorkerId
1408
- },
1409
- stableServerScope: materialFacts.stableServerScope,
1410
- passkeyPrfFirstB64u: args.passkeyPrfFirstB64u
1411
- });
1412
- await requireCurrentNearRegistrationSession(args.sessionAuthority);
1413
- await args.signingEngine.activateVerifiedNearEd25519YaoMaterial({
1414
- activeClient,
1415
- facts: {
1416
- thresholdSessionId: materialFacts.identity.thresholdSessionId,
1417
- signer: nearEd25519SignerBindingFromBoundaryFields({
1418
- walletId: toWalletId(materialFacts.identity.walletId),
1419
- nearAccountId: toAccountId(materialFacts.identity.nearAccountId),
1420
- nearEd25519SigningKeyId: parseNearEd25519SigningKeyId(materialFacts.identity.nearEd25519SigningKeyId),
1421
- signerSlot: materialFacts.identity.signerSlot
1422
- }),
1423
- signingRootId: materialFacts.identity.signingRootId,
1424
- signingRootVersion: materialFacts.identity.signingRootVersion,
1425
- routerAbNormalSigning: materialFacts.stableServerScope.routerAbNormalSigning,
1426
- runtimePolicyScope: materialFacts.stableServerScope.runtimePolicyScope,
1427
- relayerUrl: args.relayerUrl
1428
- }
1429
- });
1430
- await requireCurrentNearRegistrationSession(args.sessionAuthority);
1431
- activeClient = null;
1432
- } catch (error) {
1433
- activeClient?.dispose();
1434
- throw error;
1435
- } finally {
1436
- args.ownedFactorSecret.fill(0);
1437
- }
1438
- }
1439
- async function prewarmDeferredPasskeyEd25519Client(auth) {
1440
- if (auth.kind !== "passkey") return;
1441
- try {
1442
- await RouterAbEd25519YaoClientV1.initializeBundled();
1443
- } catch {}
1444
- }
1445
- async function hydrateDeferredNearRegistrationSession(args) {
1446
- const startedAt = performance.now();
1447
- let outcome = "failure";
1448
- try {
1449
- await args.signingEngine.hydrateSigningSession(args.input);
1450
- outcome = "success";
1451
- return { kind: "completed" };
1452
- } catch (error) {
1453
- return {
1454
- kind: "failed",
1455
- error
1456
- };
1457
- } finally {
1458
- emitNearRegistrationTiming({
1459
- ceremonyId: args.ceremonyId,
1460
- stage: "session_hydration",
1461
- startedAt,
1462
- outcome
1463
- });
1464
- }
1465
- }
1466
- async function prepareDeferredNearSessionHydration(args) {
1467
- const startedAt = performance.now();
1468
- let outcome = "failure";
1469
- try {
1470
- await args.signingEngine.prepareSigningSessionHydration(args.input);
1471
- outcome = "success";
1472
- return { kind: "completed" };
1473
- } catch (error) {
1474
- return {
1475
- kind: "failed",
1476
- error
1477
- };
1478
- } finally {
1479
- emitNearRegistrationTiming({
1480
- ceremonyId: args.ceremonyId,
1481
- stage: "session_seal_preparation",
1482
- startedAt,
1483
- outcome
1484
- });
1485
- }
1486
- }
1487
- function startNearRegistrationSealPreparation(args) {
1488
- const sessionId = parseThresholdEd25519SessionId(args.thresholdSessionId);
1489
- if (!sessionId.ok) throw new Error("Invalid admitted NEAR session identity");
1490
- const preparationId = createRegistrationOperationIdempotencyKey("near-session-client-seal");
1491
- return {
1492
- kind: "preparing",
1493
- thresholdSessionId: String(sessionId.value),
1494
- preparationId,
1495
- result: prepareDeferredNearSessionHydration({
1496
- signingEngine: args.signingEngine,
1497
- ceremonyId: args.ceremonyId,
1498
- input: {
1499
- preparationId,
1500
- thresholdSessionId: String(sessionId.value),
1501
- prfFirstB64u: args.prfFirstB64u
1502
- }
1503
- })
1504
- };
1505
- }
1506
- async function prepareNearSessionSealWhileCustodyRuns(args) {
1507
- try {
1508
- await requireCurrentNearRegistrationSession(args.sessionAuthority);
1509
- const pending = await IndexedDBManager.getPendingWalletRegistrationCommit({
1510
- registrationCeremonyId: args.ceremonyId,
1511
- operation: "near_provisioning"
1512
- });
1513
- if (!pending || pending.operation !== "near_provisioning" || pending.phase === "joined") return { kind: "none" };
1514
- if (pending.walletId !== args.sessionAuthority.record.walletId || pending.walletAuthMethodId !== args.sessionAuthority.record.authMethodId) return { kind: "none" };
1515
- return startNearRegistrationSealPreparation({
1516
- signingEngine: args.signingEngine,
1517
- ceremonyId: args.ceremonyId,
1518
- thresholdSessionId: pending.admissionRequest.scope.threshold_session_id,
1519
- prfFirstB64u: args.prfFirstB64u
1520
- });
1521
- } catch {
1522
- return { kind: "none" };
1523
- }
1524
- }
1525
- function nearRegistrationProfileUnavailable() {
1526
- return null;
1527
- }
1528
- /** NEAR failures retain their repair journal while the committed ECDSA wallet stays usable. */
1529
- async function commitDeferredEd25519Registration(args) {
1530
- const auth = args.authMaterial;
1531
- const startedAt = performance.now();
1532
- let outcome = "failure";
1533
- let retainedFactorSecret32 = null;
1534
- let hydration = Promise.resolve({ kind: "completed" });
1535
- let preparation = { kind: "none" };
1536
- try {
1537
- if (auth.kind === "passkey") preparation = await prepareNearSessionSealWhileCustodyRuns({
1538
- signingEngine: args.context.signingEngine,
1539
- ceremonyId: args.registrationCeremonyId,
1540
- sessionAuthority: args.sessionAuthority,
1541
- prfFirstB64u: auth.prfFirstB64u
1542
- });
1543
- const nearCustody = await args.nearCustodyWork();
1544
- retainedFactorSecret32 = nearCustody.factorSecret32;
1545
- const joined = nearCustody.joined;
1546
- const clientPublicKey = `ed25519:${base58Encode(joined.metadata.registeredPublicKey)}`;
1547
- const activationReference = joined.activationReference;
1548
- const nearProvisioningIdempotencyKey = await deriveNearProvisioningIdempotencyKey({
1549
- registrationCeremonyId: args.registrationCeremonyId,
1550
- activationReference
1551
- });
1552
- const pending = await readJoinedNearRegistrationCommit({
1553
- registrationCeremonyId: args.registrationCeremonyId,
1554
- walletId: args.walletId,
1555
- walletAuthMethodId: String(args.sessionAuthority.record.authMethodId)
1556
- });
1557
- await requireCurrentNearRegistrationSession(args.sessionAuthority);
1558
- if (auth.kind === "passkey" && preparation.kind === "none") preparation = startNearRegistrationSealPreparation({
1559
- signingEngine: args.context.signingEngine,
1560
- ceremonyId: args.registrationCeremonyId,
1561
- thresholdSessionId: joined.metadata.scope.threshold_session_id,
1562
- prfFirstB64u: auth.prfFirstB64u
1563
- });
1564
- let preparedSessionSeal;
1565
- if (preparation.kind === "preparing") {
1566
- const preparationWaitStartedAt = performance.now();
1567
- const prepared = await preparation.result;
1568
- emitNearRegistrationTiming({
1569
- ceremonyId: args.registrationCeremonyId,
1570
- stage: "session_seal_preparation_wait",
1571
- startedAt: preparationWaitStartedAt,
1572
- outcome: prepared.kind === "completed" ? "success" : "failure"
1573
- });
1574
- if (prepared.kind === "failed") throw prepared.error;
1575
- await requireCurrentNearRegistrationSession(args.sessionAuthority);
1576
- const clientSeal = await args.context.signingEngine.readPreparedSigningSessionHydration({
1577
- thresholdSessionId: preparation.thresholdSessionId,
1578
- preparationId: preparation.preparationId
1579
- });
1580
- preparedSessionSeal = {
1581
- preparationId: preparation.preparationId,
1582
- thresholdSessionId: preparation.thresholdSessionId,
1583
- ciphertext: clientSeal.ciphertext
1584
- };
1585
- }
1586
- const finalizationStartedAt = performance.now();
1587
- const nearProvisioningRequest = {
1588
- relayerUrl: args.relayerUrl,
1589
- registrationCeremonyId: args.registrationCeremonyId,
1590
- signedSetup: args.signedSetup,
1591
- headers: {
1592
- ...args.headers,
1593
- Authorization: `Bearer ${args.sessionAuthority.operationCredential.token}`
1594
- },
1595
- idempotencyKey: nearProvisioningIdempotencyKey,
1596
- ed25519: { activationReference },
1597
- walletCustodyCommit: joined.commitPayload,
1598
- onServerTiming: recordRegistrationServerTimingBuckets.bind(void 0, args.registrationTiming)
1599
- };
1600
- let completed;
1601
- if (preparedSessionSeal) {
1602
- if (args.authMaterial.kind !== "passkey") throw new Error("Prepared session sealing requires a passkey authority");
1603
- completed = await completeWalletRegistrationNearProvisioning({
1604
- ...nearProvisioningRequest,
1605
- auth: { kind: "passkey" },
1606
- sessionSeal: {
1607
- thresholdSessionId: preparedSessionSeal.thresholdSessionId,
1608
- ciphertext: preparedSessionSeal.ciphertext
1609
- }
1610
- });
1611
- } else completed = await completeWalletRegistrationNearProvisioning({
1612
- ...nearProvisioningRequest,
1613
- auth: args.authMaterial
1614
- });
1615
- if (!completed.ok) throw new Error("Deferred NEAR provisioning did not complete");
1616
- const finalized = completed;
1617
- if (finalized.kind !== "near_ed25519") throw new Error("Deferred Ed25519 finalize returned a different signer branch");
1618
- if (finalized.walletCustody?.status !== "joined") {
1619
- const status = finalized.walletCustody?.status ?? "not_reported";
1620
- throw new Error(`Deferred NEAR custody join did not commit (${status})`);
1621
- }
1622
- if (preparedSessionSeal && !finalized.sessionSeal) throw new Error("Deferred NEAR finalization did not return the prepared session seal");
1623
- emitNearRegistrationTiming({
1624
- ceremonyId: args.registrationCeremonyId,
1625
- stage: "server_finalize",
1626
- startedAt: finalizationStartedAt,
1627
- outcome: "success"
1628
- });
1629
- const registrationSession = mixedRegistrationSessionFromDeferredResult(args.sessionAuthority, finalized.registrationEstablishedSession, finalized.foundingAuthority, finalized.foundingAuthMethod);
1630
- const nearAccountId = toAccountId(finalized.ed25519.nearAccountId);
1631
- const passkeyCredentialIdB64u = args.authMaterial.kind === "passkey" ? args.authMaterial.credentialIdB64u : "";
1632
- if (auth.kind === "passkey") requireEd25519YaoRegistrationPublicResultMatches({
1633
- clientPublicKey,
1634
- finalized,
1635
- expectedRpId: auth.rpId,
1636
- expectedWalletId: args.walletId
1637
- });
1638
- else requireEmailOtpEd25519YaoRegistrationPublicResultMatches({
1639
- clientPublicKey,
1640
- finalized,
1641
- expectedRegistrationAuthorityId: pending.auth.kind === "email_otp" ? pending.auth.registrationAuthorityId : "",
1642
- expectedWalletId: args.walletId
1643
- });
1644
- const materialFacts = registrationEd25519MaterialFacts({
1645
- deferredNear: {
1646
- status: "deferred",
1647
- admissionRequest: nearCustody.admissionRequest
1648
- },
1649
- finalized: finalized.ed25519,
1650
- walletId: args.walletId,
1651
- expectedRuntimePolicyScope: normalizeRuntimePolicyScope(finalized.ed25519.runtimePolicyScope)
1652
- });
1653
- const metadata = joined.metadata;
1654
- const materialActivation = nearEd25519YaoMaterialActivationFromMetadata(metadata);
1655
- const custodyMaterial = walletCustodyRegistrationMaterial({
1656
- established: joined,
1657
- walletId: String(args.walletId),
1658
- nearAccountId: String(nearAccountId),
1659
- nearEd25519SigningKeyId: finalized.ed25519.nearEd25519SigningKeyId,
1660
- signerSlot: finalized.ed25519.signerSlot
1661
- });
1662
- const publicationStartedAt = performance.now();
1663
- const registration = await registrationProjectionFromPending(pending, finalized);
1664
- await requireCurrentNearRegistrationSession(args.sessionAuthority);
1665
- const storedNearActivation = (await IndexedDBManager.publishPendingWalletRegistrationCommitAndRetain({
1666
- pending,
1667
- ecdsaContinuity: [],
1668
- authority: finalized.authority,
1669
- foundingAuthority: {
1670
- authority: finalized.foundingAuthority,
1671
- authMethod: finalized.foundingAuthMethod
1672
- },
1673
- request: {
1674
- operation: pending.operation,
1675
- registrationCeremonyId: args.registrationCeremonyId,
1676
- idempotencyKey: pending.idempotencyKey,
1677
- walletId: args.walletId,
1678
- walletAuthMethodId: finalized.foundingAuthMethod.walletAuthMethodId
1679
- },
1680
- walletSessionPublication: {
1681
- kind: "credential_free_projection",
1682
- walletSession: registrationSession.walletSession
1683
- },
1684
- registration
1685
- })).signerActivations[0];
1686
- if (!storedNearActivation || storedNearActivation.signerSlot !== finalized.ed25519.signerSlot) throw new Error("Deferred Ed25519 registration persisted a different signer slot");
1687
- const prefillStatusReads = new WalletSessionStatusReadScope();
1688
- for (const chainTarget of args.expectedChainTargets) scheduleEcdsaSessionPresignaturePrefill({
1689
- signingEngine: args.context.signingEngine,
1690
- walletId: args.walletId,
1691
- chainTarget,
1692
- trigger: "registration",
1693
- statusReads: prefillStatusReads
1694
- });
1695
- emitNearRegistrationTiming({
1696
- ceremonyId: args.registrationCeremonyId,
1697
- stage: "local_publication",
1698
- startedAt: publicationStartedAt,
1699
- outcome: "success"
1700
- });
1701
- await requireCurrentNearRegistrationSession(args.sessionAuthority);
1702
- if (args.authMaterial.kind === "passkey" && registrationSession.remainingUses > 0) hydration = hydrateDeferredNearRegistrationSession({
1703
- signingEngine: args.context.signingEngine,
1704
- ceremonyId: args.registrationCeremonyId,
1705
- input: buildRegistrationPasskeyEd25519SessionHydration({
1706
- session: registrationSession,
1707
- ceremonyId: args.registrationCeremonyId,
1708
- walletId: String(args.walletId),
1709
- relayerUrl: args.relayerUrl,
1710
- prfFirstB64u: args.authMaterial.prfFirstB64u,
1711
- preparedServerSeal: preparedSessionSeal && finalized.sessionSeal ? {
1712
- preparationId: preparedSessionSeal.preparationId,
1713
- ...finalized.sessionSeal
1714
- } : null,
1715
- restore: {
1716
- rpId: args.authMaterial.rpId,
1717
- nearAccountId: String(nearAccountId),
1718
- nearEd25519SigningKeyId: finalized.ed25519.nearEd25519SigningKeyId,
1719
- relayerKeyId: finalized.ed25519.relayerKeyId,
1720
- participantIds: finalized.ed25519.participantIds,
1721
- signerSlot: finalized.ed25519.signerSlot,
1722
- credentialIdB64u: args.authMaterial.credentialIdB64u,
1723
- materialActivation
1724
- }
1725
- })
1726
- });
1727
- const sessionStartedAt = performance.now();
1728
- await args.context.signingEngine.activateAuthenticatedWalletState({
1729
- walletId: args.walletId,
1730
- nearAccountId,
1731
- signerSlot: finalized.ed25519.signerSlot,
1732
- nearClient: args.context.nearClient
1733
- });
1734
- await args.context.signingEngine.upsertEd25519YaoPublicCapabilityLaneReference({
1735
- walletId: args.walletId,
1736
- nearAccountId,
1737
- thresholdSessionId: materialFacts.identity.thresholdSessionId,
1738
- runtimePolicyScope: materialFacts.stableServerScope.runtimePolicyScope,
1739
- materialActivation,
1740
- ...registrationEd25519LaneAuthorization(auth, passkeyCredentialIdB64u, registrationSession),
1741
- nearEd25519SigningKeyId: parseNearEd25519SigningKeyId(finalized.ed25519.nearEd25519SigningKeyId),
1742
- signerSlot: finalized.ed25519.signerSlot
1743
- });
1744
- emitNearRegistrationTiming({
1745
- ceremonyId: args.registrationCeremonyId,
1746
- stage: "session_install",
1747
- startedAt: sessionStartedAt,
1748
- outcome: "success"
1749
- });
1750
- const activationStartedAt = performance.now();
1751
- if (auth.kind === "email_otp" && registrationSession.remainingUses > 0) {
1752
- const walletSessionState = await buildRegistrationEmailOtpEd25519SessionState({
1753
- registrationEstablishedSession: registrationSession,
1754
- walletId: args.walletId,
1755
- nearAccountId: String(nearAccountId),
1756
- nearEd25519SigningKeyId: finalized.ed25519.nearEd25519SigningKeyId,
1757
- thresholdSessionId: materialFacts.identity.thresholdSessionId,
1758
- runtimePolicyScope: materialFacts.stableServerScope.runtimePolicyScope,
1759
- signerSlot: finalized.ed25519.signerSlot,
1760
- relayerUrl: args.relayerUrl,
1761
- emailOtpAuthContext: auth.emailOtpAuthContext
1762
- });
1763
- const bootstrap = buildRegistrationEmailOtpEd25519RecoveryBootstrap({
1764
- walletId: args.walletId,
1765
- nearAccountId: String(nearAccountId),
1766
- nearEd25519SigningKeyId: finalized.ed25519.nearEd25519SigningKeyId,
1767
- sessionState: walletSessionState,
1768
- joined,
1769
- deferredNear: {
1770
- status: "deferred",
1771
- admissionRequest: nearCustody.admissionRequest
1772
- },
1773
- admissionReceipt: nearCustody.admissionReceipt,
1774
- authContext: auth.emailOtpAuthContext
1775
- });
1776
- await args.context.signingEngine.activateEmailOtpEd25519RegistrationMaterialInternal({
1777
- walletSession: {
1778
- walletId: args.walletId,
1779
- walletSessionUserId: String(args.walletId)
1780
- },
1781
- providerSubject: emailOtpAuthContextProviderUserId(auth.emailOtpAuthContext),
1782
- emailHashHex: emailOtpAuthContextEmailHashHex(auth.emailOtpAuthContext),
1783
- signerSlot: finalized.ed25519.signerSlot,
1784
- expectedOperationalPublicKey: clientPublicKey,
1785
- expectedThresholdSessionId: materialFacts.identity.thresholdSessionId,
1786
- bootstrap,
1787
- material: custodyMaterial,
1788
- envelope: walletCustodyCacheEnvelopeFromRecordV1(nearCustody.envelope),
1789
- factorSecret32: retainedFactorSecret32
1790
- });
1791
- retainedFactorSecret32 = null;
1792
- } else if (auth.kind === "passkey") {
1793
- if (args.authMaterial.kind !== "passkey") throw new Error("Deferred passkey registration has no Passkey authorization material");
1794
- if (!retainedFactorSecret32) throw new Error("Deferred passkey registration has no custody factor secret");
1795
- await args.clientPrewarm;
1796
- await activatePasskeyRegistrationEd25519Material({
1797
- signingEngine: args.context.signingEngine,
1798
- sessionAuthority: args.sessionAuthority,
1799
- metadata,
1800
- material: custodyMaterial,
1801
- materialFacts,
1802
- envelope: walletCustodyCacheEnvelopeFromRecordV1(nearCustody.envelope),
1803
- ownedFactorSecret: new Uint8Array(retainedFactorSecret32),
1804
- rpId: args.authMaterial.rpId,
1805
- credentialIdB64u: args.authMaterial.credentialIdB64u,
1806
- passkeyPrfFirstB64u: args.authMaterial.prfFirstB64u,
1807
- relayerUrl: args.relayerUrl
1808
- });
1809
- retainedFactorSecret32 = null;
1810
- }
1811
- if (args.authMaterial.kind === "passkey") await rememberPasskeyCustodySessionEnvelope({
1812
- walletId: String(args.walletId),
1813
- credentialIdB64u: args.authMaterial.credentialIdB64u,
1814
- envelope: nearCustody.envelope
1815
- });
1816
- emitNearRegistrationTiming({
1817
- ceremonyId: args.registrationCeremonyId,
1818
- stage: "signer_activation",
1819
- startedAt: activationStartedAt,
1820
- outcome: "success"
1821
- });
1822
- await requireCurrentNearRegistrationSession(args.sessionAuthority);
1823
- const hydrationWaitStartedAt = performance.now();
1824
- const hydrated = await hydration;
1825
- emitNearRegistrationTiming({
1826
- ceremonyId: args.registrationCeremonyId,
1827
- stage: "session_hydration_wait",
1828
- startedAt: hydrationWaitStartedAt,
1829
- outcome: hydrated.kind === "completed" ? "success" : "failure"
1830
- });
1831
- if (hydrated.kind === "failed") throw hydrated.error;
1832
- await requireCurrentNearRegistrationSession(args.sessionAuthority);
1833
- const readyStartedAt = performance.now();
1834
- await IndexedDBManager.completePendingNearRegistration({
1835
- pending,
1836
- walletSession: registrationSession.walletSession,
1837
- operationCredential: registrationSession.operationCredential,
1838
- nearAccountId: String(nearAccountId)
1839
- });
1840
- emitNearRegistrationTiming({
1841
- ceremonyId: args.registrationCeremonyId,
1842
- stage: "durable_ready",
1843
- startedAt: readyStartedAt,
1844
- outcome: "success"
1845
- });
1846
- outcome = "success";
1847
- return {
1848
- status: "near_ready",
1849
- updatedAtMs: Date.now(),
1850
- nearAccountId: String(nearAccountId)
1851
- };
1852
- } catch (error) {
1853
- const profile = await IndexedDBManager.getProfile(String(args.walletId)).catch(nearRegistrationProfileUnavailable);
1854
- if (profile?.nearProvisioning?.status === "near_ready") return profile.nearProvisioning;
1855
- const errorCode = nearProvisioningErrorCode(error);
1856
- try {
1857
- await args.context.signingEngine.setWalletNearProvisioningState({
1858
- walletId: String(args.walletId),
1859
- status: "near_failed_retryable",
1860
- errorCode
1861
- });
1862
- } catch {}
1863
- return {
1864
- status: "near_failed_retryable",
1865
- updatedAtMs: Date.now(),
1866
- error: getUserFriendlyErrorMessage(error, "registration", String(args.walletId)),
1867
- errorCode
1868
- };
1869
- } finally {
1870
- await hydration;
1871
- if (preparation.kind === "preparing") {
1872
- await preparation.result;
1873
- await args.context.signingEngine.discardSigningSessionHydration({
1874
- thresholdSessionId: preparation.thresholdSessionId,
1875
- preparationId: preparation.preparationId
1876
- }).catch(ignoreNearCustodyFailure);
1877
- }
1878
- if (retainedFactorSecret32) zeroizeArrayBuffer(retainedFactorSecret32);
1879
- emitNearRegistrationTiming({
1880
- ceremonyId: args.registrationCeremonyId,
1881
- stage: "provisioning_total",
1882
- startedAt,
1883
- outcome
1884
- });
1885
- emitNearRegistrationTiming({
1886
- ceremonyId: args.registrationCeremonyId,
1887
- stage: "registration_total",
1888
- startedAt: args.registrationStartedAt,
1889
- outcome
1890
- });
1891
- }
1892
- }
1893
- async function runDeferredEd25519Provisioning(args) {
1894
- try {
1895
- await args.context.signingEngine.setWalletNearProvisioningState({
1896
- walletId: String(args.walletId),
1897
- status: "near_provisioning"
1898
- });
1899
- } catch (error) {
1900
- const errorCode = nearProvisioningErrorCode(error);
1901
- const state = {
1902
- status: "near_failed_retryable",
1903
- updatedAtMs: Date.now(),
1904
- error: getUserFriendlyErrorMessage(error, "registration", String(args.walletId)),
1905
- errorCode
1906
- };
1907
- try {
1908
- await args.context.signingEngine.setWalletNearProvisioningState({
1909
- walletId: String(args.walletId),
1910
- status: "near_failed_retryable",
1911
- errorCode
1912
- });
1913
- } catch {}
1914
- publishNearProvisioningState(args.walletId, state);
1915
- return;
1916
- }
1917
- await runSingleFlightNearProvisioning({
1918
- walletId: args.walletId,
1919
- nowMs: Date.now,
1920
- attempt: commitDeferredEd25519Registration.bind(void 0, args.commit)
1921
- });
1922
- }
1923
- /** Maps a deferred-commit throw onto the closed set of provisioning codes. */
1924
- function nearProvisioningErrorCode(error) {
1925
- const message = error instanceof Error ? error.message : String(error);
1926
- if (message.includes("finalize")) return "near_finalize_failed";
1927
- if (message.includes("seal") || message.includes("Yao")) return "near_seal_failed";
1928
- if (message.includes("wallet session")) return "near_capability_persist_failed";
1929
- return "near_provisioning_failed";
1930
- }
1931
- async function markMixedNearProvisioningRetryable(args) {
1932
- const errorCode = nearProvisioningErrorCode(args.error);
1933
- const errorMessage = getUserFriendlyErrorMessage(args.error, "registration", String(args.walletId));
1934
- try {
1935
- await args.context.signingEngine.setWalletNearProvisioningState({
1936
- walletId: String(args.walletId),
1937
- status: "near_failed_retryable",
1938
- errorCode
1939
- });
1940
- } catch {}
1941
- publishNearProvisioningState(args.walletId, {
1942
- status: "near_failed_retryable",
1943
- updatedAtMs: Date.now(),
1944
- error: errorMessage,
1945
- errorCode
1946
- });
1947
- return {
1948
- status: "retryable",
1949
- error: errorMessage,
1950
- errorCode
1951
- };
1952
- }
1953
- async function markMixedNearProvisioningPending(args) {
1954
- try {
1955
- await args.context.signingEngine.setWalletNearProvisioningState({
1956
- walletId: String(args.walletId),
1957
- status: "near_pending"
1958
- });
1959
- publishNearProvisioningState(args.walletId, {
1960
- status: "near_pending",
1961
- updatedAtMs: Date.now()
1962
- });
1963
- return { status: "pending" };
1964
- } catch (error) {
1965
- return await markMixedNearProvisioningRetryable({
1966
- context: args.context,
1967
- walletId: args.walletId,
1968
- error
1969
- });
1970
- }
1971
- }
1972
- async function registerEcdsaOrMixedWallet(args) {
1973
- const { context, wallet, signerSelection } = args;
1974
- const options = args.options || {};
1975
- const { onEvent, onError, afterCall } = options;
1976
- const startedAt = performance.now();
1977
- const registrationTiming = new RegistrationTimingRecorder(startedAt);
1978
- const clientPrewarm = args.kind === "near_ed25519_and_evm_family_ecdsa" ? prewarmDeferredPasskeyEd25519Client(args.authMethod) : Promise.resolve();
1979
- const traceContext = createRouterAbTraceContextV1();
1980
- let postTouchIdCompletedAt = null;
1981
- let emailOtpCustodyCapabilityFactorSecret32 = null;
1982
- const initialEventAccountId = registrationEventAccountId(wallet.kind === "provided" ? String(wallet.walletId) : "wallet-registration");
1983
- emitRegistrationEvent(onEvent, initialEventAccountId, {
1984
- authMethod: args.authMethod.kind,
1985
- phase: RegistrationEventPhase.STEP_01_STARTED,
1986
- status: "started"
1987
- });
1988
- try {
1989
- const finalizeIdempotencyKey = createRegistrationOperationIdempotencyKey("wallet-registration-finalize");
1990
- const prepared = await setupRegistrationForPasskeyExecution({
1991
- context,
1992
- authMethod: args.authMethod,
1993
- wallet,
1994
- signerSelection,
1995
- recorder: registrationTiming,
1996
- passkeyExecution: args.passkeyExecution
1997
- });
1998
- if (args.authMethod.kind === "email_otp") observeRegistrationWarmup({
1999
- recorder: registrationTiming,
2000
- warmup: prepared.registrationWarmup
2001
- });
2002
- const { relayerUrl, setup } = prepared;
2003
- const ecdsaPrepare = materializeWalletRegistrationSetupEcdsaPrepare(requireEcdsaRegistrationSetup(setup, args.kind).ecdsa);
2004
- const ecdsaClientCeremony = ecdsaRegistrationClientCeremonyForExecution({
2005
- passkeyExecution: args.passkeyExecution,
2006
- ceremonyId: setup.registrationCeremonyId
2007
- });
2008
- const intentResponse = {
2009
- intent: setup.intent,
2010
- registrationIntentDigestB64u: setup.registrationIntentDigestB64u
2011
- };
2012
- const walletId = intentResponse.intent.walletId;
2013
- const eventAccountId = registrationEventAccountId(String(walletId));
2014
- let emailOtpEnrollmentMaterial = null;
2015
- let emailOtpRegistrationAuthorityId = "";
2016
- let emailOtpEmail = "";
2017
- let emailOtpProviderSubject = "";
2018
- let emailOtpProvider = null;
2019
- let emailOtpWalletCustodyFactorSecret = null;
2020
- let passkeyAuthority = null;
2021
- let startAuthority;
2022
- if (args.authMethod.kind === "passkey") {
2023
- emitRegistrationEvent(onEvent, eventAccountId, {
2024
- authMethod: args.authMethod.kind,
2025
- phase: RegistrationEventPhase.STEP_04_PASSKEY_CREATE_STARTED,
2026
- status: "waiting_for_user",
2027
- interaction: {
2028
- kind: "passkey_create",
2029
- overlay: "show"
2030
- }
2031
- });
2032
- const confirmationConfig = {
2033
- uiMode: "modal",
2034
- behavior: "requireClick",
2035
- ...args.confirmationConfigOverride ?? options?.confirmationConfig ?? {}
2036
- };
2037
- passkeyAuthority = await registrationTiming.measure("authProofMs", () => resolvePasskeyRegistrationAuthority({
2038
- context,
2039
- walletId,
2040
- signerSlot: registrationPasskeySignerSlot(args),
2041
- registrationIntentDigestB64u: intentResponse.registrationIntentDigestB64u,
2042
- options,
2043
- confirmationConfigOverride: confirmationConfig,
2044
- passkeyExecution: args.passkeyExecution
2045
- }));
2046
- registrationTiming.capturePasskeyAuthDiagnostics(passkeyAuthority.diagnostics);
2047
- postTouchIdCompletedAt = performance.now();
2048
- const custodyCredentialId = parseWebAuthnCredentialIdB64u(String(passkeyAuthority.credential.rawId || passkeyAuthority.credential.id || "").trim());
2049
- if (!custodyCredentialId.ok) throw new Error(`passkey credential id ${custodyCredentialId.error.message}`);
2050
- startAuthority = {
2051
- kind: "passkey",
2052
- webauthnRegistration: passkeyAuthority.webauthnRegistration,
2053
- walletCustodyFactorJson: JSON.stringify({
2054
- envelopeId: `wallet-custody-envelope:${crypto.randomUUID()}`,
2055
- factor: buildPasskeyEnvelopeFactor({
2056
- rpId: requireWebAuthnRpId(args.authMethod.rpId),
2057
- credentialIdB64u: custodyCredentialId.value
2058
- }),
2059
- walletAuthMethodId: intentResponse.intent.foundingWalletAuthMethodId
2060
- }),
2061
- walletCustodyFactorSecret: base64UrlDecode(passkeyAuthority.prfFirstB64u).buffer
2062
- };
2063
- emitRegistrationEvent(onEvent, eventAccountId, {
2064
- authMethod: args.authMethod.kind,
2065
- phase: RegistrationEventPhase.STEP_04_PASSKEY_CREATE_SUCCEEDED,
2066
- status: "succeeded",
2067
- interaction: {
2068
- kind: "passkey_create",
2069
- overlay: "hide"
2070
- }
2071
- });
2072
- } else {
2073
- const emailOtpAuthMethod = args.authMethod;
2074
- const emailOtpEnrollmentSecret = crypto.getRandomValues(new Uint8Array(32));
2075
- emailOtpCustodyCapabilityFactorSecret32 = emailOtpEnrollmentSecret.slice();
2076
- emailOtpWalletCustodyFactorSecret = emailOtpEnrollmentSecret.slice().buffer;
2077
- const emailAuthority = await registrationTiming.measure("authProofMs", () => collectEmailOtpRegistrationAuthority({
2078
- authMethod: emailOtpAuthMethod,
2079
- relayUrl: relayerUrl,
2080
- walletId: String(walletId),
2081
- registrationIntentDigestB64u: intentResponse.registrationIntentDigestB64u
2082
- }));
2083
- emailOtpEnrollmentMaterial = startEmailOtpRegistrationEnrollmentMaterial({
2084
- recorder: registrationTiming,
2085
- context,
2086
- authMethod: emailOtpAuthMethod,
2087
- relayerUrl,
2088
- walletId: String(walletId),
2089
- providerSubject: emailAuthority.providerSubject,
2090
- clientSecret32: emailOtpEnrollmentSecret
2091
- });
2092
- emailOtpRegistrationAuthorityId = emailAuthority.registrationAuthorityId;
2093
- emailOtpEmail = emailAuthority.email;
2094
- emailOtpProviderSubject = emailAuthority.providerSubject;
2095
- emailOtpProvider = emailOtpProviderFromRegistrationProof(emailAuthority.proof);
2096
- startAuthority = {
2097
- kind: "email_otp",
2098
- emailOtpRegistrationProof: emailAuthority.proof,
2099
- walletCustodyFactorSecret: emailOtpWalletCustodyFactorSecret
2100
- };
2101
- }
2102
- const setupWalletAuthMethodId = parseWalletAuthMethodId(setup.walletAuthMethodId);
2103
- if (!setupWalletAuthMethodId.ok) throw new Error(`Registration setup auth-method identity is invalid: ${setupWalletAuthMethodId.error.message}`);
2104
- let materialAuthority;
2105
- if (args.authMethod.kind === "passkey") {
2106
- if (!passkeyAuthority) throw new Error("ECDSA registration is missing its verified passkey authority");
2107
- materialAuthority = await walletAuthAuthorityRef({ authority: {
2108
- ...passkeyWalletAuthAuthorityFromCredential({
2109
- walletId,
2110
- rpId: args.authMethod.rpId,
2111
- credential: passkeyAuthority.credential
2112
- }),
2113
- bindingId: setupWalletAuthMethodId.value
2114
- } });
2115
- } else {
2116
- if (!emailOtpProvider) throw new Error("Email OTP registration is missing its verified provider");
2117
- materialAuthority = await walletAuthAuthorityRef({ authority: {
2118
- ...buildEmailOtpWalletAuthAuthority({
2119
- walletId,
2120
- provider: emailOtpProvider,
2121
- providerUserId: emailOtpProviderSubject,
2122
- emailHashHex: await emailOtpEmailHashHex(emailOtpEmail)
2123
- }),
2124
- bindingId: setupWalletAuthMethodId.value
2125
- } });
2126
- }
2127
- emitRegistrationEvent(onEvent, eventAccountId, {
2128
- authMethod: args.authMethod.kind,
2129
- phase: RegistrationEventPhase.STEP_05_ED25519_SIGNER_PREPARE_STARTED,
2130
- status: "running"
2131
- });
2132
- const walletCustodyNearJoinFactorSecretOwner = { value: args.kind === "near_ed25519_and_evm_family_ecdsa" ? startAuthority.walletCustodyFactorSecret.slice(0) : null };
2133
- let persistedPendingCommit = null;
2134
- let ceremony;
2135
- try {
2136
- ceremony = await registrationTiming.measure("ecdsaRegistrationTotalMs", () => runEcdsaEnabledThreeRouteRegistrationCeremony({
2137
- context,
2138
- relayerUrl,
2139
- registrationCeremonyId: setup.registrationCeremonyId,
2140
- signerPlanKind: args.kind,
2141
- signedSetup: setup.signedSetup,
2142
- ecdsaPrepare,
2143
- clientCeremony: ecdsaClientCeremony,
2144
- authority: startAuthority,
2145
- materialAuthority,
2146
- idempotencyKey: finalizeIdempotencyKey,
2147
- resolveActivateEmailOtp: async () => {
2148
- let enrollment = null;
2149
- let walletCustodyFactorJson = null;
2150
- if (args.authMethod.kind === "email_otp") {
2151
- const material = await requireEmailOtpRegistrationEnrollmentMaterial({
2152
- material: emailOtpEnrollmentMaterial,
2153
- operation: "activate"
2154
- });
2155
- enrollment = material.emailOtpEnrollment ?? null;
2156
- walletCustodyFactorJson = JSON.stringify({
2157
- envelopeId: `wallet-custody-envelope:${crypto.randomUUID()}`,
2158
- factor: buildEmailOtpEnvelopeFactor({
2159
- enrollmentId: material.enrollmentId,
2160
- enrollmentSealKeyVersion: material.enrollmentSealKeyVersion
2161
- }),
2162
- walletAuthMethodId: intentResponse.intent.foundingWalletAuthMethodId
2163
- });
2164
- }
2165
- return {
2166
- enrollment,
2167
- walletCustodyFactorJson
2168
- };
2169
- },
2170
- traceContext,
2171
- registrationTiming,
2172
- confirmRecoveryCodesBackedUp: confirmWalletRecoveryCodesBackedUp.bind(void 0, context, String(walletId), options.recoveryCodeBackup),
2173
- persistPendingCommit: async (input) => {
2174
- const common = {
2175
- operation: "registration_activate",
2176
- registrationCeremonyId: setup.registrationCeremonyId,
2177
- idempotencyKey: finalizeIdempotencyKey,
2178
- walletId: String(walletId),
2179
- walletAuthMethodId: String(intentResponse.intent.foundingWalletAuthMethodId),
2180
- signedSetup: String(setup.signedSetup),
2181
- auth: pendingRegistrationAuthFromRegistrationInputs({
2182
- authMethod: args.authMethod,
2183
- passkeyAuthority,
2184
- email: emailOtpEmail,
2185
- registrationAuthorityId: emailOtpRegistrationAuthorityId,
2186
- providerSubject: emailOtpProviderSubject,
2187
- emailOtpEnrollment: input.emailOtpEnrollment
2188
- })
2189
- };
2190
- if (input.signerPlanKind === "near_ed25519_and_evm_family_ecdsa") {
2191
- const nowMs = Date.now();
2192
- const activation = requireMixedRegistrationActivatePendingCommit(buildPendingRegistrationCommit({
2193
- ...common,
2194
- signerPlanKind: input.signerPlanKind,
2195
- localMaterial: input.localMaterial,
2196
- createdAtMs: nowMs,
2197
- updatedAtMs: nowMs
2198
- }));
2199
- const continuation = planPendingNearRegistration(activation, input.deferredNear.admissionRequest);
2200
- await IndexedDBManager.putPendingWalletRegistrationCommits([activation, continuation]);
2201
- persistedPendingCommit = activation;
2202
- return;
2203
- }
2204
- persistedPendingCommit = await persistPendingRegistrationCommit({
2205
- ...common,
2206
- signerPlanKind: input.signerPlanKind,
2207
- localMaterial: input.localMaterial
2208
- });
2209
- },
2210
- startDeferredNearCustody: startDeferredNearWalletCustody.bind(void 0, {
2211
- context,
2212
- factorSecretOwner: walletCustodyNearJoinFactorSecretOwner,
2213
- registrationCeremonyId: setup.registrationCeremonyId,
2214
- relayerUrl,
2215
- signedSetup: String(setup.signedSetup),
2216
- traceContext
2217
- })
2218
- }));
2219
- } finally {
2220
- zeroizeArrayBuffer(startAuthority.walletCustodyFactorSecret);
2221
- if (walletCustodyNearJoinFactorSecretOwner.value) {
2222
- zeroizeArrayBuffer(walletCustodyNearJoinFactorSecretOwner.value);
2223
- walletCustodyNearJoinFactorSecretOwner.value = null;
2224
- }
2225
- }
2226
- const ecdsaSession = ceremony.session;
2227
- if (ceremony.activated.kind !== "evm_family_ecdsa") throw new Error("Wallet registration activate returned a different signer branch");
2228
- const finalized = finalizeResponseViewFromActivatedEcdsa(ceremony.activated);
2229
- const emailOtpEnrollment = ceremony.activateEmailOtp.enrollment;
2230
- if (finalized.kind !== "evm_family_ecdsa") throw new Error("Wallet registration finalize returned a different signer branch");
2231
- if (args.authMethod.kind === "email_otp") {
2232
- if (!isEmailOtpWalletRegistrationFinalizeResponse(finalized)) throw new Error("Email OTP registration finalize returned a different auth method");
2233
- }
2234
- registrationTiming.captureRouteDiagnostics(finalized.registrationDiagnostics);
2235
- const walletKeys = finalized.ecdsa.walletKeys;
2236
- if (walletKeys.length === 0) throw new Error("Wallet registration finalize did not return ECDSA wallet keys");
2237
- const persistenceAuth = await buildRegistrationPersistenceAuth({
2238
- authMethod: args.authMethod,
2239
- configs: context.configs,
2240
- walletId: toWalletId(finalized.walletId),
2241
- finalized,
2242
- passkeyAuthority,
2243
- email: emailOtpEmail,
2244
- providerSubject: emailOtpProviderSubject,
2245
- registrationAuthorityId: emailOtpRegistrationAuthorityId
2246
- });
2247
- const persistencePlan = buildRegistrationPersistencePlan({
2248
- walletId: toWalletId(finalized.walletId),
2249
- auth: persistenceAuth,
2250
- foundingAuthority: finalized.foundingAuthority,
2251
- foundingAuthMethod: finalized.foundingAuthMethod,
2252
- ecdsa: buildRegistrationPersistenceEcdsa({
2253
- session: ecdsaSession,
2254
- walletKeys,
2255
- expectedChainTargets: ecdsaSession.chainTargets
2256
- })
2257
- });
2258
- emitRegistrationEvent(onEvent, eventAccountId, {
2259
- authMethod: args.authMethod.kind,
2260
- phase: RegistrationEventPhase.STEP_05_ED25519_SIGNER_PREPARE_SUCCEEDED,
2261
- status: "succeeded"
2262
- });
2263
- emitRegistrationEvent(onEvent, eventAccountId, {
2264
- authMethod: args.authMethod.kind,
2265
- phase: RegistrationEventPhase.STEP_08_STORAGE_PERSIST_STARTED,
2266
- status: "running"
2267
- });
2268
- const deferredWalletId = toWalletId(finalized.walletId);
2269
- let registrationNearProvisioning = { status: "pending" };
2270
- if (args.kind === "near_ed25519_and_evm_family_ecdsa") {
2271
- await publishMixedEcdsaRegistrationCommit({
2272
- context,
2273
- relayerUrl,
2274
- registrationTiming,
2275
- pending: requireMixedRegistrationActivatePendingCommit(persistedPendingCommit),
2276
- plan: persistencePlan,
2277
- activated: ceremony.activated
2278
- });
2279
- registrationNearProvisioning = await markMixedNearProvisioningPending({
2280
- context,
2281
- walletId: deferredWalletId
2282
- });
2283
- } else await commitRegistrationPersistencePlan({
2284
- context,
2285
- relayerUrl,
2286
- registrationTiming,
2287
- plan: persistencePlan
2288
- });
2289
- const prefillStatusReads = new WalletSessionStatusReadScope();
2290
- for (const chainTarget of ecdsaSession.chainTargets) scheduleEcdsaSessionPresignaturePrefill({
2291
- signingEngine: context.signingEngine,
2292
- walletId: deferredWalletId,
2293
- chainTarget,
2294
- trigger: "registration",
2295
- statusReads: prefillStatusReads
2296
- });
2297
- const primaryEcdsaKey = persistencePlan.ecdsa.walletKeys[0];
2298
- if (args.authMethod.kind === "passkey") {
2299
- if (!passkeyAuthority) throw new Error("Passkey registration authority was not collected");
2300
- const registrationSession = persistencePlan.ecdsa.session.registrationEstablishedSession;
2301
- try {
2302
- await establishPasskeyRegistrationEd25519ExportRootCapability({
2303
- signingEngine: context.signingEngine,
2304
- commit: ceremony.walletCustody.commitPayload,
2305
- passkeyPrfFirstB64u: passkeyAuthority.prfFirstB64u,
2306
- walletId: String(walletId),
2307
- walletAuthMethodId: String(persistencePlan.foundingAuthMethod.walletAuthMethodId),
2308
- walletSessionId: String(registrationSession.walletSessionId),
2309
- expiresAtMs: registrationSession.expiresAtMs
2310
- });
2311
- } catch (error) {
2312
- if (args.kind !== "near_ed25519_and_evm_family_ecdsa") throw error;
2313
- registrationNearProvisioning = await markMixedNearProvisioningRetryable({
2314
- context,
2315
- walletId: deferredWalletId,
2316
- error
2317
- });
2318
- }
2319
- } else {
2320
- if (persistenceAuth.kind !== "email_otp" || !emailOtpCustodyCapabilityFactorSecret32) throw new Error("Email OTP registration has no custody capability material");
2321
- const registrationSession = persistencePlan.ecdsa.session.registrationEstablishedSession;
2322
- await establishEmailOtpRegistrationEd25519ExportRootCapability({
2323
- context,
2324
- commit: ceremony.walletCustody.commitPayload,
2325
- factorSecret32: emailOtpCustodyCapabilityFactorSecret32,
2326
- emailOtpAuthContext: persistenceAuth.emailOtpAuthContext,
2327
- walletId: String(walletId),
2328
- walletSessionId: String(registrationSession.walletSessionId),
2329
- expiresAtMs: registrationSession.expiresAtMs
2330
- });
2331
- }
2332
- if (args.kind === "near_ed25519_and_evm_family_ecdsa") {
2333
- const deferredAuthMaterial = buildDeferredRegistrationFinalizeAuthMaterial({
2334
- auth: persistencePlan.auth,
2335
- emailOtpEnrollment,
2336
- passkeyAuthority
2337
- });
2338
- try {
2339
- runDeferredEd25519Provisioning({
2340
- context,
2341
- walletId: deferredWalletId,
2342
- commit: {
2343
- context,
2344
- registrationTiming,
2345
- registrationStartedAt: startedAt,
2346
- clientPrewarm,
2347
- relayerUrl,
2348
- registrationCeremonyId: setup.registrationCeremonyId,
2349
- signedSetup: setup.signedSetup,
2350
- headers: registrationRouteHeaders(traceContext),
2351
- nearCustodyWork: requireDeferredNearCustodyWork.bind(void 0, ceremony.deferredNearCustodyWork),
2352
- sessionAuthority: {
2353
- record: persistencePlan.ecdsa.session.registrationEstablishedSession.walletSession,
2354
- operationCredential: persistencePlan.ecdsa.session.registrationEstablishedSession.operationCredential
2355
- },
2356
- expectedChainTargets: persistencePlan.ecdsa.expectedChainTargets,
2357
- walletId: deferredWalletId,
2358
- authMaterial: deferredAuthMaterial
2359
- }
2360
- });
2361
- } catch (error) {
2362
- const errorCode = nearProvisioningErrorCode(error);
2363
- registrationNearProvisioning = {
2364
- status: "retryable",
2365
- error: getUserFriendlyErrorMessage(error, "registration", String(deferredWalletId)),
2366
- errorCode
2367
- };
2368
- publishNearProvisioningState(deferredWalletId, {
2369
- status: "near_failed_retryable",
2370
- updatedAtMs: Date.now(),
2371
- error: registrationNearProvisioning.error,
2372
- errorCode
2373
- });
2374
- }
2375
- }
2376
- if (args.kind === "evm_family_ecdsa") await IndexedDBManager.deletePendingWalletRegistrationCommit({
2377
- registrationCeremonyId: setup.registrationCeremonyId,
2378
- operation: "registration_activate"
2379
- });
2380
- const result = args.kind === "near_ed25519_and_evm_family_ecdsa" ? {
2381
- success: true,
2382
- kind: "ecdsa_wallet_registered_near_pending",
2383
- walletId: finalized.walletId,
2384
- capabilities: [{
2385
- kind: "evm_family_ecdsa",
2386
- thresholdEcdsaEthereumAddress: primaryEcdsaKey.thresholdOwnerAddress,
2387
- thresholdEcdsaPublicKeyB64u: primaryEcdsaKey.thresholdEcdsaPublicKeyB64u
2388
- }],
2389
- nearProvisioning: registrationNearProvisioning
2390
- } : {
2391
- success: true,
2392
- kind: "wallet_registered",
2393
- walletId: finalized.walletId,
2394
- capabilities: [{
2395
- kind: "evm_family_ecdsa",
2396
- thresholdEcdsaEthereumAddress: primaryEcdsaKey.thresholdOwnerAddress,
2397
- thresholdEcdsaPublicKeyB64u: primaryEcdsaKey.thresholdEcdsaPublicKeyB64u
2398
- }]
2399
- };
2400
- emitRegistrationEvent(onEvent, eventAccountId, {
2401
- authMethod: args.authMethod.kind,
2402
- phase: RegistrationEventPhase.STEP_08_STORAGE_PERSIST_SUCCEEDED,
2403
- status: "succeeded"
2404
- });
2405
- emitRegistrationEvent(onEvent, eventAccountId, {
2406
- authMethod: args.authMethod.kind,
2407
- phase: RegistrationEventPhase.STEP_11_COMPLETED,
2408
- status: "succeeded"
2409
- });
2410
- if (postTouchIdCompletedAt !== null) {
2411
- const walletReadyAt = performance.now();
2412
- emitRegistrationTimingSpan({
2413
- callback: options.onTimingSpan,
2414
- span: "registration.post_touch_id",
2415
- outcome: "success",
2416
- durationMs: walletReadyAt - postTouchIdCompletedAt,
2417
- traceContext
2418
- });
2419
- emitRegistrationTimingSpan({
2420
- callback: options.onTimingSpan,
2421
- span: "frontend.wallet_ready",
2422
- outcome: "success",
2423
- durationMs: 0,
2424
- traceContext
2425
- });
2426
- }
2427
- emitRegistrationTimingSummary(createSucceededRegistrationTimingSummary({
2428
- recorder: registrationTiming,
2429
- authMethod: args.authMethod.kind,
2430
- signerSet: registrationTimingSignerSetFromPlan(args.signerPlan)
2431
- }));
2432
- commitSuccessfulWalletAuthentication(args.context, result, args.authMethod.kind);
2433
- afterCall?.(true, result);
2434
- return result;
2435
- } catch (error) {
2436
- const errorCode = registrationErrorCodeFromUnknown(error);
2437
- const errorMessage = getUserFriendlyErrorMessage(error, "registration", initialEventAccountId);
2438
- if (postTouchIdCompletedAt !== null) emitRegistrationTimingSpan({
2439
- callback: options.onTimingSpan,
2440
- span: "registration.post_touch_id",
2441
- outcome: "failure",
2442
- durationMs: performance.now() - postTouchIdCompletedAt,
2443
- traceContext
2444
- });
2445
- const errorObject = registrationErrorWithCode(errorMessage, errorCode);
2446
- onError?.(errorObject);
2447
- emitRegistrationEvent(onEvent, initialEventAccountId, {
2448
- authMethod: args.authMethod.kind,
2449
- phase: RegistrationEventPhase.FAILED,
2450
- status: "failed",
2451
- message: errorMessage,
2452
- interaction: {
2453
- kind: "passkey_create",
2454
- overlay: "hide"
2455
- },
2456
- error: {
2457
- ...errorCode ? { code: errorCode } : {},
2458
- message: errorMessage
2459
- }
2460
- });
2461
- const result = {
2462
- success: false,
2463
- error: errorMessage,
2464
- ...errorCode ? { errorCode } : {}
2465
- };
2466
- emitRegistrationTimingSummary(createFailedRegistrationTimingSummary({
2467
- recorder: registrationTiming,
2468
- authMethod: args.authMethod.kind,
2469
- signerSet: registrationTimingSignerSetFromPlan(args.signerPlan),
2470
- errorCode: errorCode || null
2471
- }));
2472
- afterCall?.(false);
2473
- return result;
2474
- } finally {
2475
- emailOtpCustodyCapabilityFactorSecret32?.fill(0);
2476
- }
2477
- }
2478
- async function registerEmailOtpEd25519YaoWalletOnly(args) {
2479
- const { context, options } = args;
2480
- const initialEventAccountId = registrationEventAccountId(args.wallet.kind === "provided" ? String(args.wallet.walletId) : "wallet-registration");
2481
- const registrationTiming = new RegistrationTimingRecorder(performance.now());
2482
- let emailOtpCustodyCapabilityFactorSecret32 = null;
2483
- emitRegistrationEvent(options.onEvent, initialEventAccountId, {
2484
- authMethod: "email_otp",
2485
- phase: RegistrationEventPhase.STEP_01_STARTED,
2486
- status: "started"
2487
- });
2488
- try {
2489
- const finalizeIdempotencyKey = createRegistrationOperationIdempotencyKey("wallet-registration-finalize");
2490
- const prepared = await setupThreeRouteRegistration({
2491
- context,
2492
- authMethod: args.authMethod,
2493
- wallet: args.wallet,
2494
- signerSelection: args.signerSelection,
2495
- recorder: registrationTiming
2496
- });
2497
- observeRegistrationWarmup({
2498
- recorder: registrationTiming,
2499
- warmup: prepared.registrationWarmup
2500
- });
2501
- const { relayerUrl, setup } = prepared;
2502
- const walletId = setup.intent.walletId;
2503
- const eventAccountId = registrationEventAccountId(String(walletId));
2504
- const emailAuthority = await registrationTiming.measure("authProofMs", collectEmailOtpRegistrationAuthority.bind(void 0, {
2505
- authMethod: args.authMethod,
2506
- relayUrl: relayerUrl,
2507
- walletId: String(walletId),
2508
- registrationIntentDigestB64u: setup.registrationIntentDigestB64u
2509
- }));
2510
- const emailOtpEnrollmentSecret = crypto.getRandomValues(new Uint8Array(32));
2511
- emailOtpCustodyCapabilityFactorSecret32 = emailOtpEnrollmentSecret.slice();
2512
- const emailOtpWalletCustodyFactorSecret = emailOtpEnrollmentSecret.slice().buffer;
2513
- const enrollmentMaterial = startEmailOtpRegistrationEnrollmentMaterial({
2514
- recorder: registrationTiming,
2515
- context,
2516
- authMethod: args.authMethod,
2517
- relayerUrl,
2518
- walletId: String(walletId),
2519
- providerSubject: emailAuthority.providerSubject,
2520
- clientSecret32: emailOtpEnrollmentSecret
2521
- });
2522
- emitRegistrationEvent(options.onEvent, eventAccountId, {
2523
- authMethod: "email_otp",
2524
- phase: RegistrationEventPhase.STEP_05_ED25519_SIGNER_PREPARE_STARTED,
2525
- status: "running"
2526
- });
2527
- const responded = await registrationTiming.measure("walletRegisterStartMs", respondWalletRegistration.bind(void 0, {
2528
- relayerUrl,
2529
- registrationCeremonyId: setup.registrationCeremonyId,
2530
- signerPlanKind: "near_ed25519",
2531
- signedSetup: setup.signedSetup,
2532
- headers: registrationRouteHeaders(),
2533
- kind: "email_otp",
2534
- emailOtpRegistrationProof: emailAuthority.proof
2535
- }));
2536
- if (responded.kind !== "near_ed25519") throw new Error("Ed25519-only registration respond returned a different signer branch");
2537
- const materialForActivate = await requireEmailOtpRegistrationEnrollmentMaterial({
2538
- material: enrollmentMaterial,
2539
- operation: "activate"
2540
- });
2541
- let established;
2542
- try {
2543
- established = await context.signingEngine.establishWalletCustodyNearEd25519KeySet({
2544
- walletId: String(walletId),
2545
- factorJson: JSON.stringify({
2546
- envelopeId: `wallet-custody-envelope:${crypto.randomUUID()}`,
2547
- factor: buildEmailOtpEnvelopeFactor({
2548
- enrollmentId: materialForActivate.enrollmentId,
2549
- enrollmentSealKeyVersion: materialForActivate.enrollmentSealKeyVersion
2550
- }),
2551
- walletAuthMethodId: setup.intent.foundingWalletAuthMethodId
2552
- }),
2553
- factorSecret: emailOtpWalletCustodyFactorSecret,
2554
- nearEd25519SigningKeyId: responded.ed25519.admissionRequest.application_binding.near_ed25519_signing_key_id,
2555
- registrationCeremonyId: setup.registrationCeremonyId,
2556
- admissionRequest: responded.ed25519.admissionRequest,
2557
- admissionReceipt: await admitDeferredNearRegistration(responded.ed25519, {
2558
- routerOrigin: new URL(relayerUrl).origin,
2559
- authorization: {
2560
- kind: "bearer",
2561
- value: `Bearer ${String(setup.signedSetup)}`
2562
- },
2563
- fetch: globalThis.fetch
2564
- }),
2565
- participantIds: responded.ed25519.admissionRequest.participant_ids,
2566
- routerOrigin: new URL(relayerUrl).origin,
2567
- authorization: `Bearer ${String(setup.signedSetup)}`
2568
- });
2569
- } finally {
2570
- zeroizeArrayBuffer(emailOtpWalletCustodyFactorSecret);
2571
- }
2572
- await confirmWalletRecoveryCodesBackedUp(context, String(walletId), options.recoveryCodeBackup, established.recoveryCodes);
2573
- const walletCustodyCommit = walletCustodyCommitPayloadWithRecoveryBackupAcknowledgement(established.commitPayload);
2574
- if (!established.localMaterial) throw new Error("Email OTP registration produced no sealed local custody material");
2575
- await persistPendingRegistrationCommit({
2576
- operation: "registration_activate",
2577
- signerPlanKind: "near_ed25519",
2578
- registrationCeremonyId: setup.registrationCeremonyId,
2579
- idempotencyKey: finalizeIdempotencyKey,
2580
- walletId: String(walletId),
2581
- walletAuthMethodId: String(setup.intent.foundingWalletAuthMethodId),
2582
- signedSetup: String(setup.signedSetup),
2583
- auth: {
2584
- kind: "email_otp",
2585
- email: emailAuthority.email,
2586
- registrationAuthorityId: emailAuthority.registrationAuthorityId,
2587
- providerSubject: emailAuthority.providerSubject,
2588
- enrollment: materialForActivate.emailOtpEnrollment
2589
- },
2590
- localMaterial: {
2591
- keyFamilies: ["ed25519"],
2592
- custodyCommit: walletCustodyCommit,
2593
- ed25519: {
2594
- activationReference: established.activationReference,
2595
- localMaterial: established.localMaterial,
2596
- metadata: pendingRegistrationEd25519MetadataFromJoined(established)
2597
- }
2598
- }
2599
- });
2600
- const activated = await activateWalletRegistration({
2601
- relayerUrl,
2602
- registrationCeremonyId: setup.registrationCeremonyId,
2603
- signerPlanKind: "near_ed25519",
2604
- signedSetup: setup.signedSetup,
2605
- headers: registrationRouteHeaders(),
2606
- idempotencyKey: finalizeIdempotencyKey,
2607
- emailOtpEnrollment: materialForActivate.emailOtpEnrollment
2608
- });
2609
- if (activated.kind !== "near_ed25519" || activated.nearProvisioning?.status !== "near_pending") throw new Error("Ed25519-only activate did not return a wallet pending NEAR provisioning");
2610
- const nearProvisioningIdempotencyKey = await deriveNearProvisioningIdempotencyKey({
2611
- registrationCeremonyId: setup.registrationCeremonyId,
2612
- activationReference: established.activationReference
2613
- });
2614
- const nearProvisioningPending = await persistPendingRegistrationCommit({
2615
- operation: "near_provisioning",
2616
- completion: { kind: "sealed_material" },
2617
- signerPlanKind: "near_ed25519",
2618
- registrationCeremonyId: setup.registrationCeremonyId,
2619
- idempotencyKey: nearProvisioningIdempotencyKey,
2620
- walletId: String(walletId),
2621
- walletAuthMethodId: String(setup.intent.foundingWalletAuthMethodId),
2622
- signedSetup: String(setup.signedSetup),
2623
- auth: {
2624
- kind: "email_otp",
2625
- email: emailAuthority.email,
2626
- registrationAuthorityId: emailAuthority.registrationAuthorityId,
2627
- providerSubject: emailAuthority.providerSubject,
2628
- enrollment: materialForActivate.emailOtpEnrollment
2629
- },
2630
- localMaterial: {
2631
- keyFamilies: ["ed25519"],
2632
- custodyCommit: walletCustodyCommit,
2633
- ed25519: {
2634
- activationReference: established.activationReference,
2635
- localMaterial: established.localMaterial,
2636
- metadata: pendingRegistrationEd25519MetadataFromJoined(established)
2637
- }
2638
- }
2639
- });
2640
- await IndexedDBManager.deletePendingWalletRegistrationCommit({
2641
- registrationCeremonyId: setup.registrationCeremonyId,
2642
- operation: "registration_activate"
2643
- });
2644
- const clientPublicKey = `ed25519:${base58Encode(established.metadata.registeredPublicKey)}`;
2645
- const finalized = await registrationTiming.measure("walletRegisterFinalizeMs", completeWalletRegistrationNearProvisioning.bind(void 0, {
2646
- relayerUrl,
2647
- registrationCeremonyId: setup.registrationCeremonyId,
2648
- signedSetup: setup.signedSetup,
2649
- headers: registrationRouteHeaders(),
2650
- idempotencyKey: nearProvisioningIdempotencyKey,
2651
- ed25519: { activationReference: established.activationReference },
2652
- auth: {
2653
- kind: "email_otp",
2654
- enrollment: materialForActivate.emailOtpEnrollment
2655
- },
2656
- walletCustodyCommit
2657
- }));
2658
- if (!finalized.ok) throw new Error("Deferred NEAR provisioning did not complete");
2659
- registrationTiming.captureRouteDiagnostics(finalized.registrationDiagnostics);
2660
- if (finalized.kind !== "near_ed25519") throw new Error("Wallet registration finalize returned a different signer branch");
2661
- if (!isEmailOtpWalletRegistrationFinalizeResponse(finalized)) throw new Error("Email OTP registration finalize returned a different auth method");
2662
- if (finalized.walletCustody?.status !== "committed") {
2663
- const status = finalized.walletCustody?.status ?? "not_reported";
2664
- throw new Error(`Wallet custody did not commit (${status})`);
2665
- }
2666
- if (finalized.ed25519.signerSlot !== args.ed25519Selection.signerSlot) throw new Error("Ed25519 Yao finalize returned a different signer slot");
2667
- const registrationSession = requireIssuedRegistrationEstablishedSession(finalized.registrationEstablishedSession);
2668
- requireEmailOtpEd25519YaoRegistrationPublicResultMatches({
2669
- clientPublicKey,
2670
- finalized,
2671
- expectedRegistrationAuthorityId: emailAuthority.registrationAuthorityId,
2672
- expectedWalletId: walletId
2673
- });
2674
- const persistenceAuth = await buildRegistrationPersistenceAuth({
2675
- authMethod: args.authMethod,
2676
- configs: context.configs,
2677
- walletId: toWalletId(finalized.walletId),
2678
- finalized,
2679
- passkeyAuthority: null,
2680
- email: emailAuthority.email,
2681
- providerSubject: emailAuthority.providerSubject,
2682
- registrationAuthorityId: emailAuthority.registrationAuthorityId
2683
- });
2684
- if (persistenceAuth.kind !== "email_otp") throw new Error("Email OTP Ed25519 registration produced a different persistence authority");
2685
- emitRegistrationEvent(options.onEvent, eventAccountId, {
2686
- authMethod: "email_otp",
2687
- phase: RegistrationEventPhase.STEP_05_ED25519_SIGNER_PREPARE_SUCCEEDED,
2688
- status: "succeeded"
2689
- });
2690
- emitRegistrationEvent(options.onEvent, eventAccountId, {
2691
- authMethod: "email_otp",
2692
- phase: RegistrationEventPhase.STEP_08_STORAGE_PERSIST_STARTED,
2693
- status: "running"
2694
- });
2695
- const materialFacts = registrationEd25519MaterialFacts({
2696
- deferredNear: responded.ed25519,
2697
- finalized: finalized.ed25519,
2698
- walletId,
2699
- expectedRuntimePolicyScope: normalizeRuntimePolicyScope(setup.intent.runtimePolicyScope)
2700
- });
2701
- const metadata = established.metadata;
2702
- const nearAccountId = toAccountId(finalized.ed25519.nearAccountId);
2703
- const custodyMaterial = walletCustodyRegistrationMaterial({
2704
- established,
2705
- walletId: String(finalized.walletId),
2706
- nearAccountId: String(nearAccountId),
2707
- nearEd25519SigningKeyId: finalized.ed25519.nearEd25519SigningKeyId,
2708
- signerSlot: finalized.ed25519.signerSlot
2709
- });
2710
- const registration = await prepareWalletEmailOtpEd25519RegistrationPublication({
2711
- walletId: finalized.walletId,
2712
- nearAccountId,
2713
- nearEd25519SigningKeyId: finalized.ed25519.nearEd25519SigningKeyId,
2714
- email: persistenceAuth.email,
2715
- registrationAuthorityId: persistenceAuth.registrationAuthorityId,
2716
- authority: persistenceAuth.authority,
2717
- signerSlot: finalized.ed25519.signerSlot,
2718
- operationalPublicKey: clientPublicKey,
2719
- relayerKeyId: finalized.ed25519.relayerKeyId,
2720
- keyVersion: finalized.ed25519.keyVersion,
2721
- participantIds: [...finalized.ed25519.participantIds],
2722
- custodyMaterial
2723
- });
2724
- const storedNearActivation = (await IndexedDBManager.publishPendingWalletRegistrationCommit({
2725
- pending: nearProvisioningPending,
2726
- ecdsaContinuity: [],
2727
- authority: finalized.authority,
2728
- foundingAuthority: {
2729
- authority: finalized.foundingAuthority,
2730
- authMethod: finalized.foundingAuthMethod
2731
- },
2732
- request: {
2733
- operation: "near_provisioning",
2734
- registrationCeremonyId: setup.registrationCeremonyId,
2735
- idempotencyKey: nearProvisioningIdempotencyKey,
2736
- walletId: finalized.walletId,
2737
- walletAuthMethodId: finalized.foundingAuthMethod.walletAuthMethodId
2738
- },
2739
- walletSessionPublication: {
2740
- kind: "issued",
2741
- walletSession: registrationSession.walletSession,
2742
- operationCredential: registrationSession.operationCredential
2743
- },
2744
- registration
2745
- })).signerActivations[1];
2746
- if (!storedNearActivation || storedNearActivation.signerSlot !== finalized.ed25519.signerSlot) throw new Error("Ed25519 Yao registration persisted a different signer slot");
2747
- await context.signingEngine.activateAuthenticatedWalletState({
2748
- walletId: finalized.walletId,
2749
- nearAccountId,
2750
- signerSlot: finalized.ed25519.signerSlot,
2751
- nearClient: context.nearClient
2752
- });
2753
- await context.signingEngine.upsertEd25519YaoPublicCapabilityLaneReference({
2754
- walletId: finalized.walletId,
2755
- nearAccountId,
2756
- thresholdSessionId: materialFacts.identity.thresholdSessionId,
2757
- runtimePolicyScope: materialFacts.stableServerScope.runtimePolicyScope,
2758
- materialActivation: nearEd25519YaoMaterialActivationFromMetadata(metadata),
2759
- auth: {
2760
- kind: "email_otp",
2761
- providerSubjectId: emailAuthority.providerSubject
2762
- },
2763
- nearEd25519SigningKeyId: parseNearEd25519SigningKeyId(finalized.ed25519.nearEd25519SigningKeyId),
2764
- signerSlot: finalized.ed25519.signerSlot,
2765
- remainingUses: registrationSession.remainingUses,
2766
- expiresAtMs: registrationSession.expiresAtMs
2767
- });
2768
- if (!emailOtpCustodyCapabilityFactorSecret32) throw new Error("Email OTP registration has no custody capability material");
2769
- await establishEmailOtpRegistrationEd25519ExportRootCapability({
2770
- context,
2771
- commit: walletCustodyCommit,
2772
- factorSecret32: emailOtpCustodyCapabilityFactorSecret32,
2773
- emailOtpAuthContext: persistenceAuth.emailOtpAuthContext,
2774
- walletId: String(finalized.walletId),
2775
- walletSessionId: String(registrationSession.walletSessionId),
2776
- expiresAtMs: registrationSession.expiresAtMs
2777
- });
2778
- emitRegistrationEvent(options.onEvent, eventAccountId, {
2779
- authMethod: "email_otp",
2780
- phase: RegistrationEventPhase.STEP_08_STORAGE_PERSIST_SUCCEEDED,
2781
- status: "succeeded"
2782
- });
2783
- emitRegistrationEvent(options.onEvent, eventAccountId, {
2784
- authMethod: "email_otp",
2785
- phase: RegistrationEventPhase.STEP_11_COMPLETED,
2786
- status: "succeeded"
2787
- });
2788
- const result = {
2789
- success: true,
2790
- kind: "wallet_registered",
2791
- walletId: finalized.walletId,
2792
- capabilities: [{
2793
- kind: "near_ed25519",
2794
- accountProvisioning: finalized.accountProvisioning,
2795
- resolvedAccount: finalized.resolvedAccount,
2796
- nearEd25519SigningKeyId: parseNearEd25519SigningKeyId(finalized.ed25519.nearEd25519SigningKeyId),
2797
- operationalPublicKey: clientPublicKey,
2798
- nearAccountId: toAccountId(finalized.ed25519.nearAccountId),
2799
- transactionId: finalized.resolvedAccount.kind === "sponsored_named_account" ? finalized.resolvedAccount.transactionHash : null
2800
- }]
2801
- };
2802
- emitRegistrationTimingSummary(createSucceededRegistrationTimingSummary({
2803
- recorder: registrationTiming,
2804
- authMethod: "email_otp",
2805
- signerSet: registrationTimingSignerSetFromPlan(args.signerPlan)
2806
- }));
2807
- commitSuccessfulWalletAuthentication(context, result, "email_otp");
2808
- options.afterCall?.(true, result);
2809
- return result;
2810
- } catch (error) {
2811
- const errorCode = registrationErrorCodeFromUnknown(error);
2812
- const message = getUserFriendlyErrorMessage(error, "registration", initialEventAccountId);
2813
- options.onError?.(registrationErrorWithCode(message, errorCode));
2814
- emitRegistrationEvent(options.onEvent, initialEventAccountId, {
2815
- authMethod: "email_otp",
2816
- phase: RegistrationEventPhase.FAILED,
2817
- status: "failed",
2818
- message,
2819
- error: {
2820
- ...errorCode ? { code: errorCode } : {},
2821
- message
2822
- }
2823
- });
2824
- const result = {
2825
- success: false,
2826
- error: message,
2827
- ...errorCode ? { errorCode } : {}
2828
- };
2829
- emitRegistrationTimingSummary(createFailedRegistrationTimingSummary({
2830
- recorder: registrationTiming,
2831
- authMethod: "email_otp",
2832
- signerSet: registrationTimingSignerSetFromPlan(args.signerPlan),
2833
- errorCode: errorCode || null
2834
- }));
2835
- options.afterCall?.(false);
2836
- return result;
2837
- } finally {
2838
- emailOtpCustodyCapabilityFactorSecret32?.fill(0);
2839
- }
2840
- }
2841
- async function registerPasskeyEd25519YaoWalletOnly(args) {
2842
- const { context, options } = args;
2843
- const initialEventAccountId = registrationEventAccountId(args.wallet.kind === "provided" ? String(args.wallet.walletId) : "wallet-registration");
2844
- const traceContext = createRouterAbTraceContextV1();
2845
- let postTouchIdCompletedAt = null;
2846
- emitRegistrationEvent(options.onEvent, initialEventAccountId, {
2847
- authMethod: "passkey",
2848
- phase: RegistrationEventPhase.STEP_01_STARTED,
2849
- status: "started"
2850
- });
2851
- try {
2852
- const finalizeIdempotencyKey = createRegistrationOperationIdempotencyKey("wallet-registration-finalize");
2853
- const registrationTiming = new RegistrationTimingRecorder(performance.now());
2854
- const { relayerUrl, setup } = await setupRegistrationForPasskeyExecution({
2855
- context,
2856
- authMethod: args.authMethod,
2857
- wallet: args.wallet,
2858
- signerSelection: args.signerSelection,
2859
- recorder: registrationTiming,
2860
- passkeyExecution: args.passkeyExecution
2861
- });
2862
- registrationTiming.markNearStage(setup.registrationCeremonyId, "near_only.setup");
2863
- const intent = requirePasskeyRegistrationIntent(setup.intent);
2864
- const eventAccountId = registrationEventAccountId(String(intent.walletId));
2865
- emitRegistrationEvent(options.onEvent, eventAccountId, {
2866
- authMethod: "passkey",
2867
- phase: RegistrationEventPhase.STEP_04_PASSKEY_CREATE_STARTED,
2868
- status: "waiting_for_user",
2869
- interaction: {
2870
- kind: "passkey_create",
2871
- overlay: "show"
2872
- }
2873
- });
2874
- const passkeyAuthority = await resolvePasskeyRegistrationAuthority({
2875
- context,
2876
- walletId: intent.walletId,
2877
- signerSlot: args.ed25519Selection.signerSlot,
2878
- registrationIntentDigestB64u: setup.registrationIntentDigestB64u,
2879
- options,
2880
- confirmationConfigOverride: {
2881
- uiMode: "modal",
2882
- behavior: "requireClick",
2883
- ...args.confirmationConfigOverride ?? options.confirmationConfig ?? {}
2884
- },
2885
- passkeyExecution: args.passkeyExecution
2886
- });
2887
- postTouchIdCompletedAt = performance.now();
2888
- registrationTiming.capturePasskeyAuthDiagnostics(passkeyAuthority.diagnostics);
2889
- registrationTiming.markNearStage(setup.registrationCeremonyId, "near_only.authentication");
2890
- emitRegistrationEvent(options.onEvent, eventAccountId, {
2891
- authMethod: "passkey",
2892
- phase: RegistrationEventPhase.STEP_04_PASSKEY_CREATE_SUCCEEDED,
2893
- status: "succeeded",
2894
- interaction: {
2895
- kind: "passkey_create",
2896
- overlay: "hide"
2897
- }
2898
- });
2899
- const responded = await respondWalletRegistration({
2900
- relayerUrl,
2901
- registrationCeremonyId: setup.registrationCeremonyId,
2902
- signerPlanKind: "near_ed25519",
2903
- signedSetup: setup.signedSetup,
2904
- headers: registrationRouteHeaders(traceContext),
2905
- kind: "passkey",
2906
- webauthnRegistration: passkeyAuthority.webauthnRegistration
2907
- });
2908
- registrationTiming.markNearStage(setup.registrationCeremonyId, "near_only.respond");
2909
- if (responded.kind !== "near_ed25519") throw new Error("Ed25519-only registration respond returned a different signer branch");
2910
- const parsedCredentialId = parseWebAuthnCredentialIdB64u(String(passkeyAuthority.credential.rawId || passkeyAuthority.credential.id || "").trim());
2911
- if (!parsedCredentialId.ok) throw new Error(`passkey credential id ${parsedCredentialId.error.message}`);
2912
- const walletCustodyFactorSecret = base64UrlDecode(passkeyAuthority.prfFirstB64u).buffer;
2913
- let established;
2914
- try {
2915
- established = await context.signingEngine.establishWalletCustodyNearEd25519KeySet({
2916
- walletId: String(intent.walletId),
2917
- factorJson: JSON.stringify({
2918
- envelopeId: `wallet-custody-envelope:${crypto.randomUUID()}`,
2919
- factor: buildPasskeyEnvelopeFactor({
2920
- rpId: requireWebAuthnRpId(args.authMethod.rpId),
2921
- credentialIdB64u: parsedCredentialId.value
2922
- }),
2923
- walletAuthMethodId: setup.intent.foundingWalletAuthMethodId
2924
- }),
2925
- factorSecret: walletCustodyFactorSecret,
2926
- nearEd25519SigningKeyId: responded.ed25519.admissionRequest.application_binding.near_ed25519_signing_key_id,
2927
- registrationCeremonyId: setup.registrationCeremonyId,
2928
- admissionRequest: responded.ed25519.admissionRequest,
2929
- admissionReceipt: await admitDeferredNearRegistration(responded.ed25519, {
2930
- routerOrigin: new URL(relayerUrl).origin,
2931
- authorization: {
2932
- kind: "bearer",
2933
- value: `Bearer ${String(setup.signedSetup)}`
2934
- },
2935
- fetch: globalThis.fetch
2936
- }),
2937
- participantIds: responded.ed25519.admissionRequest.participant_ids,
2938
- routerOrigin: new URL(relayerUrl).origin,
2939
- authorization: `Bearer ${String(setup.signedSetup)}`,
2940
- traceContext
2941
- });
2942
- } finally {
2943
- zeroizeArrayBuffer(walletCustodyFactorSecret);
2944
- }
2945
- registrationTiming.markNearStage(setup.registrationCeremonyId, "near_only.custody");
2946
- await confirmWalletRecoveryCodesBackedUp(context, String(intent.walletId), options.recoveryCodeBackup, established.recoveryCodes);
2947
- const walletCustodyCommit = walletCustodyCommitPayloadWithRecoveryBackupAcknowledgement(established.commitPayload);
2948
- if (!established.localMaterial) throw new Error("Passkey registration produced no sealed local custody material");
2949
- await persistPendingRegistrationCommit({
2950
- operation: "registration_activate",
2951
- signerPlanKind: "near_ed25519",
2952
- registrationCeremonyId: setup.registrationCeremonyId,
2953
- idempotencyKey: finalizeIdempotencyKey,
2954
- walletId: String(intent.walletId),
2955
- walletAuthMethodId: String(setup.intent.foundingWalletAuthMethodId),
2956
- signedSetup: String(setup.signedSetup),
2957
- auth: {
2958
- kind: "passkey",
2959
- rpId: args.authMethod.rpId,
2960
- credentialIdB64u: parsedCredentialId.value,
2961
- transports: [...passkeyAuthority.webauthnRegistration.response.transports]
2962
- },
2963
- localMaterial: {
2964
- keyFamilies: ["ed25519"],
2965
- custodyCommit: walletCustodyCommit,
2966
- ed25519: {
2967
- activationReference: established.activationReference,
2968
- localMaterial: established.localMaterial,
2969
- metadata: pendingRegistrationEd25519MetadataFromJoined(established)
2970
- }
2971
- }
2972
- });
2973
- registrationTiming.markNearStage(setup.registrationCeremonyId, "near_only.backup_and_checkpoint");
2974
- const activated = await activateWalletRegistration({
2975
- relayerUrl,
2976
- registrationCeremonyId: setup.registrationCeremonyId,
2977
- signerPlanKind: "near_ed25519",
2978
- signedSetup: setup.signedSetup,
2979
- headers: registrationRouteHeaders(traceContext),
2980
- idempotencyKey: finalizeIdempotencyKey
2981
- });
2982
- registrationTiming.markNearStage(setup.registrationCeremonyId, "near_only.activate");
2983
- if (activated.kind !== "near_ed25519" || activated.nearProvisioning?.status !== "near_pending") throw new Error("Ed25519-only activate did not return a wallet pending NEAR provisioning");
2984
- const nearProvisioningIdempotencyKey = await deriveNearProvisioningIdempotencyKey({
2985
- registrationCeremonyId: setup.registrationCeremonyId,
2986
- activationReference: established.activationReference
2987
- });
2988
- const nearProvisioningPending = await persistPendingRegistrationCommit({
2989
- operation: "near_provisioning",
2990
- completion: { kind: "sealed_material" },
2991
- signerPlanKind: "near_ed25519",
2992
- registrationCeremonyId: setup.registrationCeremonyId,
2993
- idempotencyKey: nearProvisioningIdempotencyKey,
2994
- walletId: String(intent.walletId),
2995
- walletAuthMethodId: String(setup.intent.foundingWalletAuthMethodId),
2996
- signedSetup: String(setup.signedSetup),
2997
- auth: {
2998
- kind: "passkey",
2999
- rpId: args.authMethod.rpId,
3000
- credentialIdB64u: parsedCredentialId.value,
3001
- transports: [...passkeyAuthority.webauthnRegistration.response.transports]
3002
- },
3003
- localMaterial: {
3004
- keyFamilies: ["ed25519"],
3005
- custodyCommit: walletCustodyCommit,
3006
- ed25519: {
3007
- activationReference: established.activationReference,
3008
- localMaterial: established.localMaterial,
3009
- metadata: pendingRegistrationEd25519MetadataFromJoined(established)
3010
- }
3011
- }
3012
- });
3013
- await IndexedDBManager.deletePendingWalletRegistrationCommit({
3014
- registrationCeremonyId: setup.registrationCeremonyId,
3015
- operation: "registration_activate"
3016
- });
3017
- const clientPublicKey = `ed25519:${base58Encode(established.metadata.registeredPublicKey)}`;
3018
- registrationTiming.markNearStage(setup.registrationCeremonyId, "near_only.provision_checkpoint");
3019
- const finalized = await completeWalletRegistrationNearProvisioning({
3020
- relayerUrl,
3021
- registrationCeremonyId: setup.registrationCeremonyId,
3022
- signedSetup: setup.signedSetup,
3023
- headers: registrationRouteHeaders(traceContext),
3024
- idempotencyKey: nearProvisioningIdempotencyKey,
3025
- ed25519: { activationReference: established.activationReference },
3026
- auth: { kind: "passkey" },
3027
- walletCustodyCommit
3028
- });
3029
- registrationTiming.markNearStage(setup.registrationCeremonyId, "near_only.finalize");
3030
- if (!finalized.ok || finalized.kind !== "near_ed25519") throw new Error("Deferred NEAR provisioning returned a different signer branch");
3031
- if (established.commitPayload && finalized.walletCustody?.status !== "committed") {
3032
- const status = finalized.walletCustody?.status ?? "not_reported";
3033
- const reason = finalized.walletCustody?.status === "rejected" ? `: ${finalized.walletCustody.reason}` : "";
3034
- throw new Error(`Wallet custody did not commit (${status})${reason}. The recovery codes shown are not usable.`);
3035
- }
3036
- const registrationSession = requireIssuedRegistrationEstablishedSession(finalized.registrationEstablishedSession);
3037
- const finalizedPasskey = requireEd25519YaoRegistrationPublicResultMatches({
3038
- clientPublicKey,
3039
- finalized,
3040
- expectedRpId: args.authMethod.rpId,
3041
- expectedWalletId: intent.walletId
3042
- });
3043
- const nearAccountId = toAccountId(finalized.ed25519.nearAccountId);
3044
- const credentialPublicKeyB64u = requireFinalizedPasskeyCredentialPublicKeyB64u({
3045
- finalized,
3046
- credential: passkeyAuthority.credential
3047
- });
3048
- const materialFacts = registrationEd25519MaterialFacts({
3049
- deferredNear: responded.ed25519,
3050
- finalized: finalized.ed25519,
3051
- walletId: intent.walletId,
3052
- expectedRuntimePolicyScope: normalizeRuntimePolicyScope(intent.runtimePolicyScope)
3053
- });
3054
- const metadata = established.metadata;
3055
- const custodyMaterial = walletCustodyRegistrationMaterial({
3056
- established,
3057
- walletId: String(finalized.walletId),
3058
- nearAccountId: String(nearAccountId),
3059
- nearEd25519SigningKeyId: finalized.ed25519.nearEd25519SigningKeyId,
3060
- signerSlot: finalized.ed25519.signerSlot
3061
- });
3062
- await rememberPasskeyRegistrationCustodyEnvelope({
3063
- commit: established.commitPayload,
3064
- walletId: String(finalized.walletId),
3065
- activatedAtMs: Date.now()
3066
- });
3067
- await context.signingEngine.upsertEd25519YaoPublicCapabilityLaneReference({
3068
- walletId: finalized.walletId,
3069
- nearAccountId: toAccountId(finalized.ed25519.nearAccountId),
3070
- thresholdSessionId: materialFacts.identity.thresholdSessionId,
3071
- runtimePolicyScope: materialFacts.stableServerScope.runtimePolicyScope,
3072
- materialActivation: nearEd25519YaoMaterialActivationFromMetadata(metadata),
3073
- auth: {
3074
- kind: "passkey",
3075
- rpId: toRpId(finalizedPasskey.rpId),
3076
- credentialIdB64u: finalizedPasskey.credentialIdB64u
3077
- },
3078
- nearEd25519SigningKeyId: parseNearEd25519SigningKeyId(finalized.ed25519.nearEd25519SigningKeyId),
3079
- signerSlot: finalized.ed25519.signerSlot
3080
- });
3081
- const registration = prepareWalletEd25519RegistrationPublication({
3082
- walletId: finalized.walletId,
3083
- nearAccountId,
3084
- nearEd25519SigningKeyId: finalized.ed25519.nearEd25519SigningKeyId,
3085
- rpId: requireWebAuthnRpId(finalizedPasskey.rpId),
3086
- credential: passkeyAuthority.credential,
3087
- credentialPublicKeyB64u,
3088
- signerSlot: finalized.ed25519.signerSlot,
3089
- operationalPublicKey: clientPublicKey,
3090
- relayerKeyId: finalized.ed25519.relayerKeyId,
3091
- keyVersion: finalized.ed25519.keyVersion,
3092
- participantIds: [...finalized.ed25519.participantIds],
3093
- custodyMaterial
3094
- });
3095
- const storedNearActivation = (await IndexedDBManager.publishPendingWalletRegistrationCommit({
3096
- pending: nearProvisioningPending,
3097
- ecdsaContinuity: [],
3098
- authority: finalized.authority,
3099
- foundingAuthority: {
3100
- authority: finalized.foundingAuthority,
3101
- authMethod: finalized.foundingAuthMethod
3102
- },
3103
- request: {
3104
- operation: "near_provisioning",
3105
- registrationCeremonyId: setup.registrationCeremonyId,
3106
- idempotencyKey: nearProvisioningIdempotencyKey,
3107
- walletId: finalized.walletId,
3108
- walletAuthMethodId: finalized.foundingAuthMethod.walletAuthMethodId
3109
- },
3110
- walletSessionPublication: {
3111
- kind: "issued",
3112
- walletSession: registrationSession.walletSession,
3113
- operationCredential: registrationSession.operationCredential
3114
- },
3115
- registration
3116
- })).signerActivations[1];
3117
- if (!storedNearActivation || storedNearActivation.signerSlot !== finalized.ed25519.signerSlot) throw new Error("Ed25519 Yao registration persisted a different signer slot");
3118
- registrationTiming.markNearStage(setup.registrationCeremonyId, "near_only.publication");
3119
- const hydration = await hydrateDeferredNearRegistrationSession({
3120
- signingEngine: context.signingEngine,
3121
- ceremonyId: setup.registrationCeremonyId,
3122
- input: buildRegistrationPasskeyEd25519SessionHydration({
3123
- session: registrationSession,
3124
- ceremonyId: setup.registrationCeremonyId,
3125
- walletId: String(finalized.walletId),
3126
- relayerUrl,
3127
- prfFirstB64u: passkeyAuthority.prfFirstB64u,
3128
- preparedServerSeal: null,
3129
- restore: {
3130
- rpId: finalizedPasskey.rpId,
3131
- nearAccountId: String(nearAccountId),
3132
- nearEd25519SigningKeyId: finalized.ed25519.nearEd25519SigningKeyId,
3133
- relayerKeyId: finalized.ed25519.relayerKeyId,
3134
- participantIds: finalized.ed25519.participantIds,
3135
- signerSlot: finalized.ed25519.signerSlot,
3136
- credentialIdB64u: finalizedPasskey.credentialIdB64u,
3137
- materialActivation: nearEd25519YaoMaterialActivationFromMetadata(metadata)
3138
- }
3139
- })
3140
- });
3141
- if (hydration.kind === "failed") throw hydration.error;
3142
- registrationTiming.markNearStage(setup.registrationCeremonyId, "near_only.session_hydration");
3143
- await activatePasskeyRegistrationEd25519Material({
3144
- signingEngine: context.signingEngine,
3145
- sessionAuthority: {
3146
- record: registrationSession.walletSession,
3147
- operationCredential: registrationSession.operationCredential
3148
- },
3149
- metadata,
3150
- material: custodyMaterial,
3151
- materialFacts,
3152
- envelope: walletCustodyCacheEnvelopeFromRegistrationCommit(established.commitPayload),
3153
- ownedFactorSecret: base64UrlDecode(passkeyAuthority.prfFirstB64u),
3154
- rpId: finalizedPasskey.rpId,
3155
- credentialIdB64u: finalizedPasskey.credentialIdB64u,
3156
- passkeyPrfFirstB64u: passkeyAuthority.prfFirstB64u,
3157
- relayerUrl
3158
- });
3159
- registrationTiming.markNearStage(setup.registrationCeremonyId, "near_only.material_activation");
3160
- await establishPasskeyRegistrationEd25519ExportRootCapability({
3161
- signingEngine: context.signingEngine,
3162
- commit: established.commitPayload,
3163
- passkeyPrfFirstB64u: passkeyAuthority.prfFirstB64u,
3164
- walletId: String(finalized.walletId),
3165
- walletAuthMethodId: String(finalized.foundingAuthMethod.walletAuthMethodId),
3166
- walletSessionId: String(registrationSession.walletSessionId),
3167
- expiresAtMs: registrationSession.expiresAtMs
3168
- });
3169
- registrationTiming.markNearStage(setup.registrationCeremonyId, "near_only.export_capability");
3170
- await context.signingEngine.activateAuthenticatedWalletState({
3171
- walletId: finalized.walletId,
3172
- nearAccountId,
3173
- signerSlot: finalized.ed25519.signerSlot,
3174
- nearClient: context.nearClient
3175
- });
3176
- emitRegistrationEvent(options.onEvent, eventAccountId, {
3177
- authMethod: "passkey",
3178
- phase: RegistrationEventPhase.STEP_11_COMPLETED,
3179
- status: "succeeded"
3180
- });
3181
- if (postTouchIdCompletedAt !== null) {
3182
- const walletReadyAt = performance.now();
3183
- emitRegistrationTimingSpan({
3184
- callback: options.onTimingSpan,
3185
- span: "registration.post_touch_id",
3186
- outcome: "success",
3187
- durationMs: walletReadyAt - postTouchIdCompletedAt,
3188
- traceContext
3189
- });
3190
- emitRegistrationTimingSpan({
3191
- callback: options.onTimingSpan,
3192
- span: "frontend.wallet_ready",
3193
- outcome: "success",
3194
- durationMs: 0,
3195
- traceContext
3196
- });
3197
- }
3198
- registrationTiming.markNearStage(setup.registrationCeremonyId, "near_only.wallet_ready");
3199
- emitRegistrationTimingSummary(createSucceededRegistrationTimingSummary({
3200
- recorder: registrationTiming,
3201
- authMethod: "passkey",
3202
- signerSet: registrationTimingSignerSetFromPlan(args.signerPlan)
3203
- }));
3204
- const result = {
3205
- success: true,
3206
- kind: "wallet_registered",
3207
- walletId: finalized.walletId,
3208
- capabilities: [{
3209
- kind: "near_ed25519",
3210
- accountProvisioning: finalized.accountProvisioning,
3211
- resolvedAccount: finalized.resolvedAccount,
3212
- nearEd25519SigningKeyId: parseNearEd25519SigningKeyId(finalized.ed25519.nearEd25519SigningKeyId),
3213
- operationalPublicKey: clientPublicKey,
3214
- nearAccountId: toAccountId(finalized.ed25519.nearAccountId),
3215
- transactionId: finalized.resolvedAccount.kind === "sponsored_named_account" ? finalized.resolvedAccount.transactionHash : null
3216
- }]
3217
- };
3218
- commitSuccessfulWalletAuthentication(context, result, "passkey");
3219
- options.afterCall?.(true, result);
3220
- return result;
3221
- } catch (error) {
3222
- const errorCode = registrationErrorCodeFromUnknown(error);
3223
- const message = getUserFriendlyErrorMessage(error, "registration", initialEventAccountId);
3224
- if (postTouchIdCompletedAt !== null) emitRegistrationTimingSpan({
3225
- callback: options.onTimingSpan,
3226
- span: "registration.post_touch_id",
3227
- outcome: "failure",
3228
- durationMs: performance.now() - postTouchIdCompletedAt,
3229
- traceContext
3230
- });
3231
- options.onError?.(registrationErrorWithCode(message, errorCode));
3232
- emitRegistrationEvent(options.onEvent, initialEventAccountId, {
3233
- authMethod: "passkey",
3234
- phase: RegistrationEventPhase.FAILED,
3235
- status: "failed",
3236
- message,
3237
- interaction: {
3238
- kind: "passkey_create",
3239
- overlay: "hide"
3240
- },
3241
- error: {
3242
- ...errorCode ? { code: errorCode } : {},
3243
- message
3244
- }
3245
- });
3246
- const result = {
3247
- success: false,
3248
- error: message,
3249
- ...errorCode ? { errorCode } : {}
3250
- };
3251
- options.afterCall?.(false);
3252
- return result;
3253
- }
3254
- }
3255
- async function registerWalletInternal(args) {
3256
- const signerPlan = registrationSignerPlanFromSignerSet(args.signerSelection);
3257
- const ed25519Branch = findRegistrationSignerPlanNearEd25519Branch(signerPlan);
3258
- if (ed25519Branch) {
3259
- const ecdsaBranch = findRegistrationSignerPlanEvmFamilyEcdsaBranch(signerPlan);
3260
- if (ecdsaBranch) return await registerEcdsaOrMixedWallet({
3261
- kind: "near_ed25519_and_evm_family_ecdsa",
3262
- context: args.context,
3263
- authMethod: args.authMethod,
3264
- wallet: args.wallet,
3265
- signerSelection: args.signerSelection,
3266
- signerPlan,
3267
- ed25519Selection: ed25519Branch,
3268
- ecdsaSelection: ecdsaBranch,
3269
- options: args.options,
3270
- passkeyExecution: args.passkeyExecution,
3271
- ...args.confirmationConfigOverride ? { confirmationConfigOverride: args.confirmationConfigOverride } : {}
3272
- });
3273
- if (args.authMethod.kind === "email_otp") {
3274
- if (args.passkeyExecution.kind !== "collect_during_registration") throw new Error("Prepared registration authority requires passkey authentication");
3275
- return await registerEmailOtpEd25519YaoWalletOnly({
3276
- context: args.context,
3277
- authMethod: args.authMethod,
3278
- wallet: args.wallet,
3279
- signerSelection: args.signerSelection,
3280
- signerPlan,
3281
- ed25519Selection: ed25519Branch,
3282
- options: args.options,
3283
- passkeyExecution: args.passkeyExecution
3284
- });
3285
- }
3286
- return await registerPasskeyEd25519YaoWalletOnly({
3287
- context: args.context,
3288
- authMethod: args.authMethod,
3289
- wallet: args.wallet,
3290
- signerSelection: args.signerSelection,
3291
- signerPlan,
3292
- ed25519Selection: ed25519Branch,
3293
- options: args.options,
3294
- passkeyExecution: args.passkeyExecution,
3295
- ...args.confirmationConfigOverride ? { confirmationConfigOverride: args.confirmationConfigOverride } : {}
3296
- });
3297
- }
3298
- const ecdsaBranch = findRegistrationSignerPlanEvmFamilyEcdsaBranch(signerPlan);
3299
- if (!ecdsaBranch) throw new Error("Wallet registration requires an ECDSA signer branch");
3300
- return await registerEcdsaOrMixedWallet({
3301
- kind: "evm_family_ecdsa",
3302
- context: args.context,
3303
- authMethod: args.authMethod,
3304
- wallet: args.wallet,
3305
- signerSelection: args.signerSelection,
3306
- signerPlan,
3307
- ecdsaSelection: ecdsaBranch,
3308
- options: args.options,
3309
- passkeyExecution: args.passkeyExecution,
3310
- ...args.confirmationConfigOverride ? { confirmationConfigOverride: args.confirmationConfigOverride } : {}
3311
- });
3312
- }
3313
- function commitSuccessfulWalletAuthentication(context, result, authMethod) {
3314
- context.signingEngine.setWalletAuthenticated({
3315
- kind: "authenticated",
3316
- walletId: result.walletId,
3317
- authMethod
3318
- });
3319
- }
3320
- async function registerWallet(args) {
3321
- try {
3322
- return await registerWalletInternal({
3323
- context: args.context,
3324
- authMethod: args.authMethod,
3325
- wallet: args.wallet,
3326
- signerSelection: args.signerSelection,
3327
- options: args.options,
3328
- authenticatorOptions: args.authenticatorOptions,
3329
- ...args.confirmationConfigOverride ? { confirmationConfigOverride: args.confirmationConfigOverride } : {},
3330
- passkeyExecution: { kind: "collect_during_registration" }
3331
- });
3332
- } finally {
3333
- args.context.signingEngine.closeRegistrationPreparationModal();
3334
- }
3335
- }
3336
- function emitAddSignerEventSafely(onEvent, accountId, event) {
3337
- try {
3338
- emitRegistrationEvent(onEvent, accountId, event);
3339
- } catch {}
3340
- }
3341
- function notifyAddSignerErrorSafely(onError, error) {
3342
- try {
3343
- onError?.(error);
3344
- } catch {}
3345
- }
3346
- function notifyAddSignerAfterCallSafely(afterCall, success, result) {
3347
- try {
3348
- if (success && result) afterCall?.(true, result);
3349
- else afterCall?.(false);
3350
- } catch {}
3351
- }
3352
- function addSignerAllowCredentials(authenticators) {
3353
- const credentials = [];
3354
- for (const authenticator of authenticators) {
3355
- const credentialId = String(authenticator.credentialId || "").trim();
3356
- if (!credentialId) continue;
3357
- credentials.push({
3358
- id: credentialId,
3359
- type: "public-key",
3360
- transports: webAuthnTransportsFromRaw(authenticator.transports)
3361
- });
3362
- }
3363
- if (credentials.length === 0) throw new Error("Wallet add-signer requires an existing passkey credential");
3364
- return credentials;
3365
- }
3366
- function requireSelectedAddSignerCredentialId(credential, allowCredentials) {
3367
- const id = String(credential.id || "").trim();
3368
- const rawId = String(credential.rawId || "").trim();
3369
- if (!id || !rawId || id !== rawId) throw new Error("Wallet add-signer selected an invalid passkey credential identity");
3370
- for (const allowed of allowCredentials) if (allowed.id === rawId) return rawId;
3371
- throw new Error("Wallet add-signer selected a passkey outside the authorized wallet");
3372
- }
3373
- async function requireMatchingStartedAddSignerIntent(args) {
3374
- if (args.started.intent.walletId !== args.walletId) throw new Error("Wallet add-signer start returned a different wallet");
3375
- if (await computeAddSignerIntentDigest(args.started.intent) !== args.expectedDigestB64u) throw new Error("Wallet add-signer start returned a different intent");
3376
- if (!String(args.started.addSignerCeremonyId || "").trim()) throw new Error("Wallet add-signer start returned an invalid ceremony ID");
3377
- }
3378
- function sameParticipantIds(left, right) {
3379
- return left.length === 2 && right.length === 2 && left[0] === right[0] && left[1] === right[1];
3380
- }
3381
- function requireVerifiedEd25519AddSignerFinalize(args) {
3382
- const selection = args.started.intent.signerSelection;
3383
- if (selection.mode !== "ed25519") throw new Error("Wallet add-signer start intent changed signer branch");
3384
- const requested = selection.ed25519;
3385
- const admission = args.started.ed25519.admissionRequest;
3386
- const finalized = args.finalized;
3387
- const signer = finalized.ed25519;
3388
- const expectedNearAccountId = deriveImplicitNearAccountIdFromEd25519PublicKey(args.clientPublicKey);
3389
- if (finalized.walletId !== args.walletId || finalized.rpId !== args.rpId || finalized.credentialIdB64u !== args.credentialIdB64u || signer.publicKey !== args.clientPublicKey || signer.nearAccountId !== expectedNearAccountId || signer.signerSlot !== requested.signerSlot || signer.keyVersion !== requested.keyVersion || signer.recoveryExportCapable !== true || !sameParticipantIds(signer.participantIds, requested.participantIds) || signer.nearEd25519SigningKeyId !== admission.application_binding.near_ed25519_signing_key_id || signer.relayerKeyId !== admission.scope.signing_worker_id || admission.application_binding.wallet_id !== args.walletId || admission.application_binding.key_creation_signer_slot !== requested.signerSlot) throw new Error("Wallet add-signer finalize returned mismatched Ed25519 Yao identity");
3390
- return finalized;
3391
- }
3392
- function verifiedEd25519AddSignerIntent(started) {
3393
- const selection = started.intent.signerSelection;
3394
- if (selection.mode !== "ed25519") throw new Error("Wallet add-signer start intent changed signer branch");
3395
- return {
3396
- version: started.intent.version,
3397
- walletId: started.intent.walletId,
3398
- signerSelection: selection,
3399
- ...started.intent.runtimePolicyScope ? { runtimePolicyScope: started.intent.runtimePolicyScope } : {},
3400
- nonceB64u: started.intent.nonceB64u
3401
- };
3402
- }
3403
- async function addPasskeyEd25519YaoWalletSigner(input) {
3404
- if (input.started.intent.signerSelection.mode !== "ed25519") throw new Error("Wallet add-signer start returned a different signer branch");
3405
- let persistedSignerRollbackReceipt = null;
3406
- let persistedMaterialTarget = null;
3407
- let factorSecret = null;
3408
- try {
3409
- if (input.started.authorizationKind !== "webauthn_assertion") throw new Error("Wallet custody Ed25519 add-signer requires WebAuthn authorization");
3410
- const admitted = await admitVerifiedPasskeyEd25519YaoAddSignerV1({
3411
- kind: "verified_passkey_ed25519_yao_add_signer_input_v1",
3412
- verifiedIntent: {
3413
- kind: "verified_passkey_ed25519_add_signer_intent_v1",
3414
- intent: verifiedEd25519AddSignerIntent(input.started),
3415
- addSignerIntentDigestB64u: input.intentResponse.addSignerIntentDigestB64u,
3416
- addSignerIntentGrant: input.intentResponse.addSignerIntentGrant,
3417
- addSignerCeremonyId: input.started.addSignerCeremonyId
3418
- },
3419
- verifiedAuthority: {
3420
- kind: "verified_passkey_ed25519_add_signer_authority_v1",
3421
- walletId: input.walletId,
3422
- addSignerIntentDigestB64u: input.intentResponse.addSignerIntentDigestB64u,
3423
- credentialIdB64u: input.credentialIdB64u
3424
- },
3425
- admissionRequest: input.started.ed25519.admissionRequest,
3426
- httpTransport: {
3427
- kind: "passkey_ed25519_yao_http_transport_v1",
3428
- routerOrigin: new URL(input.relayerUrl).origin,
3429
- fetch: globalThis.fetch
3430
- }
3431
- });
3432
- const custodyWire = joinCustodyWireFromEnvelopeRecord(input.started.ed25519.custodyEnvelope);
3433
- if (!custodyWire.ok) throw new Error(custodyWire.reason);
3434
- factorSecret = Uint8Array.from(base64UrlDecode(input.passkeyPrfFirstB64u)).buffer;
3435
- const joined = await input.context.signingEngine.joinWalletCustodyNearEd25519KeySet({
3436
- preparation: { kind: "fresh" },
3437
- custodyJson: custodyWire.custodyJson,
3438
- factorSecret,
3439
- nearEd25519SigningKeyId: admitted.request.application_binding.near_ed25519_signing_key_id,
3440
- registrationCeremonyId: input.started.addSignerCeremonyId,
3441
- admissionRequest: admitted.request,
3442
- admissionReceipt: admitted.receipt,
3443
- participantIds: admitted.request.participant_ids,
3444
- routerOrigin: new URL(input.relayerUrl).origin,
3445
- authorization: `Bearer ${String(input.intentResponse.addSignerIntentGrant)}`
3446
- });
3447
- const clientPublicKey = `ed25519:${base58Encode(joined.metadata.registeredPublicKey)}`;
3448
- const finalizedRaw = await finalizeWalletAddSigner({
3449
- relayerUrl: input.relayerUrl,
3450
- walletId: input.walletId,
3451
- addSignerCeremonyId: input.started.addSignerCeremonyId,
3452
- idempotencyKey: createRegistrationOperationIdempotencyKey("wallet-ed25519-add-signer-finalize"),
3453
- kind: "near_ed25519",
3454
- ed25519: { activationReference: joined.activationReference },
3455
- custodyKeySet: {
3456
- kind: "near_ed25519_v1",
3457
- keyManifestDigestB64u: joined.commitPayload.keyManifestDigestB64u,
3458
- registeredPublicKeyB64u: base64UrlEncode(joined.metadata.registeredPublicKey)
3459
- }
3460
- });
3461
- if (finalizedRaw.kind !== "near_ed25519") throw new Error("Wallet add-signer finalize returned a different signer branch");
3462
- const finalized = requireVerifiedEd25519AddSignerFinalize({
3463
- finalized: finalizedRaw,
3464
- started: input.started,
3465
- walletId: input.walletId,
3466
- rpId: input.rpId,
3467
- credentialIdB64u: input.credentialIdB64u,
3468
- clientPublicKey
3469
- });
3470
- emitAddSignerEventSafely(input.onEvent, input.eventAccountId, {
3471
- authMethod: "passkey",
3472
- phase: RegistrationEventPhase.STEP_08_STORAGE_PERSIST_STARTED,
3473
- status: "running"
3474
- });
3475
- const stored = await input.context.signingEngine.finalizeWalletEd25519SignerRegistration({
3476
- walletId: input.walletId,
3477
- nearAccountId: toAccountId(finalized.ed25519.nearAccountId),
3478
- nearEd25519SigningKeyId: finalized.ed25519.nearEd25519SigningKeyId,
3479
- auth: {
3480
- kind: "passkey",
3481
- credential: input.credential
3482
- },
3483
- signerSlot: finalized.ed25519.signerSlot,
3484
- operationalPublicKey: clientPublicKey,
3485
- relayerKeyId: finalized.ed25519.relayerKeyId,
3486
- keyVersion: finalized.ed25519.keyVersion,
3487
- participantIds: [...finalized.ed25519.participantIds]
3488
- });
3489
- if (stored.signerSlot !== finalized.ed25519.signerSlot) throw new Error("Wallet add-signer persisted a different Ed25519 signer slot");
3490
- persistedSignerRollbackReceipt = stored.rollbackReceipt;
3491
- const admission = input.started.ed25519.admissionRequest;
3492
- const thresholdSessionId = parseThresholdEd25519SessionId(admission.scope.threshold_session_id);
3493
- if (!thresholdSessionId.ok) throw new Error("Wallet add-signer threshold-session identity is invalid");
3494
- const metadata = joined.metadata;
3495
- await input.context.signingEngine.persistWalletCustodyEd25519Material({
3496
- binding: {
3497
- kind: WALLET_CUSTODY_ED25519_MATERIAL_KEY_KIND,
3498
- applicationBindingDigestB64u: joined.localMaterial.applicationBindingDigestB64u,
3499
- registeredPublicKeyB64u: base64UrlEncode(metadata.registeredPublicKey),
3500
- participantIds: metadata.participantIds,
3501
- stateEpoch: String(metadata.stateEpoch),
3502
- walletId: String(finalized.walletId),
3503
- nearAccountId: String(finalized.ed25519.nearAccountId),
3504
- nearEd25519SigningKeyId: finalized.ed25519.nearEd25519SigningKeyId,
3505
- signerSlot: finalized.ed25519.signerSlot,
3506
- signingWorkerId: metadata.scope.signing_worker_id,
3507
- signingWorkerVerifyingShareB64u: base64UrlEncode(metadata.signingWorkerVerifyingShare)
3508
- },
3509
- sealed: {
3510
- ciphertextB64u: joined.localMaterial.b64u,
3511
- nonceB64u: joined.localMaterial.nonceB64u
3512
- }
3513
- });
3514
- persistedMaterialTarget = {
3515
- nearAccountId: finalized.ed25519.nearAccountId,
3516
- signerSlot: finalized.ed25519.signerSlot
3517
- };
3518
- await input.context.signingEngine.upsertEd25519YaoPublicCapabilityLaneReference({
3519
- walletId: finalized.walletId,
3520
- nearAccountId: toAccountId(finalized.ed25519.nearAccountId),
3521
- thresholdSessionId: thresholdSessionId.value,
3522
- runtimePolicyScope: normalizeRuntimePolicyScope(input.started.intent.runtimePolicyScope),
3523
- materialActivation: nearEd25519YaoMaterialActivationFromMetadata(metadata),
3524
- auth: {
3525
- kind: "passkey",
3526
- rpId: toRpId(input.rpId),
3527
- credentialIdB64u: input.credentialIdB64u
3528
- },
3529
- nearEd25519SigningKeyId: parseNearEd25519SigningKeyId(finalized.ed25519.nearEd25519SigningKeyId),
3530
- signerSlot: finalized.ed25519.signerSlot
3531
- });
3532
- persistedSignerRollbackReceipt = null;
3533
- emitAddSignerEventSafely(input.onEvent, input.eventAccountId, {
3534
- authMethod: "passkey",
3535
- phase: RegistrationEventPhase.STEP_08_STORAGE_PERSIST_SUCCEEDED,
3536
- status: "succeeded"
3537
- });
3538
- return {
3539
- success: true,
3540
- kind: "wallet_signer_added",
3541
- walletId: finalized.walletId,
3542
- capabilities: [{
3543
- kind: "near_ed25519",
3544
- nearEd25519SigningKeyId: parseNearEd25519SigningKeyId(finalized.ed25519.nearEd25519SigningKeyId),
3545
- operationalPublicKey: clientPublicKey,
3546
- nearAccountId: toAccountId(finalized.ed25519.nearAccountId)
3547
- }]
3548
- };
3549
- } catch (error) {
3550
- const cleanupErrors = [];
3551
- if (persistedMaterialTarget) try {
3552
- await input.context.signingEngine.deleteWalletCustodyEd25519Material({
3553
- nearAccountId: persistedMaterialTarget.nearAccountId,
3554
- signerSlot: persistedMaterialTarget.signerSlot
3555
- });
3556
- } catch (cleanupError) {
3557
- cleanupErrors.push(cleanupError instanceof Error ? cleanupError.message : String(cleanupError));
3558
- }
3559
- if (persistedSignerRollbackReceipt) try {
3560
- await input.context.signingEngine.rollbackWalletEd25519SignerRegistration(persistedSignerRollbackReceipt);
3561
- } catch (cleanupError) {
3562
- cleanupErrors.push(cleanupError instanceof Error ? cleanupError.message : String(cleanupError));
3563
- }
3564
- if (cleanupErrors.length > 0) {
3565
- const primary = error instanceof Error ? error.message : String(error);
3566
- throw new Error(`${primary}; add-signer cleanup failed: ${cleanupErrors.join("; ")}`);
3567
- }
3568
- throw error;
3569
- } finally {
3570
- if (factorSecret) zeroizeArrayBuffer(factorSecret);
3571
- }
3572
- }
3573
- async function addPasskeyEcdsaWalletSigner(input) {
3574
- if (input.started.authorizationKind !== "webauthn_assertion") throw new Error("Wallet custody ECDSA add-signer requires WebAuthn authorization");
3575
- const authority = await exactPasskeyWalletAuthAuthorityRefForCredential({
3576
- walletId: input.walletId,
3577
- rpId: input.rpId,
3578
- credentialIdB64u: input.credentialIdB64u
3579
- });
3580
- const factorSecret = Uint8Array.from(base64UrlDecode(input.passkeyPrfFirstB64u)).buffer;
3581
- let pendingLocalFinalization;
3582
- try {
3583
- pendingLocalFinalization = await runStrictEcdsaFamilyCeremony({
3584
- context: input.context,
3585
- relayerUrl: input.relayerUrl,
3586
- walletId: input.walletId,
3587
- addSignerCeremonyId: input.started.addSignerCeremonyId,
3588
- started: input.started.ecdsa,
3589
- custodyEnvelope: input.started.ecdsa.custodyEnvelope,
3590
- factorSecret,
3591
- authority,
3592
- registrationTiming: null
3593
- });
3594
- } finally {
3595
- zeroizeArrayBuffer(factorSecret);
3596
- }
3597
- const finalizeRequest = {
3598
- relayerUrl: input.relayerUrl,
3599
- walletId: input.walletId,
3600
- addSignerCeremonyId: input.started.addSignerCeremonyId,
3601
- idempotencyKey: createRegistrationOperationIdempotencyKey("wallet-add-signer-finalize"),
3602
- kind: "evm_family_ecdsa",
3603
- ecdsa: { expectedKeyHandles: [pendingLocalFinalization.bootstrap.keyHandle] },
3604
- custodyKeySet: pendingLocalFinalization.custodyKeySet
3605
- };
3606
- let finalized;
3607
- try {
3608
- finalized = await finalizeWalletAddSigner(finalizeRequest);
3609
- } catch (error) {
3610
- if (!(error instanceof TypeError)) throw error;
3611
- finalized = await finalizeWalletAddSigner(finalizeRequest);
3612
- }
3613
- if (finalized.kind !== "evm_family_ecdsa" || finalized.walletId !== input.walletId || finalized.rpId !== input.rpId) throw new Error("Wallet add-signer finalize returned a different ECDSA identity");
3614
- const walletKeys = finalized.ecdsa.walletKeys;
3615
- const primaryKey = walletKeys[0];
3616
- if (!primaryKey) throw new Error("Wallet add-signer finalize did not return ECDSA wallet keys");
3617
- const session = await finalizeStrictEcdsaFamilyLocalActivation({
3618
- context: input.context,
3619
- pending: pendingLocalFinalization
3620
- });
3621
- emitAddSignerEventSafely(input.onEvent, input.eventAccountId, {
3622
- authMethod: "passkey",
3623
- phase: RegistrationEventPhase.STEP_08_STORAGE_PERSIST_STARTED,
3624
- status: "running"
3625
- });
3626
- const localEcdsaWalletKeys = await input.context.signingEngine.finalizeWalletRegistrationEcdsaSessions({
3627
- walletId: toWalletId(input.walletId),
3628
- session,
3629
- walletKeys: [primaryKey, ...walletKeys.slice(1)]
3630
- });
3631
- await input.context.signingEngine.storeWalletEcdsaSignerRecords({
3632
- walletId: input.walletId,
3633
- walletKeys: localEcdsaWalletKeys
3634
- });
3635
- await IndexedDBManager.adoptAddedEcdsaSignerAuthority({
3636
- authority: finalized.authority,
3637
- materialActivation: session.materialActivation
3638
- });
3639
- emitAddSignerEventSafely(input.onEvent, input.eventAccountId, {
3640
- authMethod: "passkey",
3641
- phase: RegistrationEventPhase.STEP_08_STORAGE_PERSIST_SUCCEEDED,
3642
- status: "succeeded"
3643
- });
3644
- return {
3645
- success: true,
3646
- kind: "wallet_signer_added",
3647
- walletId: input.walletId,
3648
- capabilities: [{
3649
- kind: "evm_family_ecdsa",
3650
- thresholdEcdsaEthereumAddress: primaryKey.thresholdOwnerAddress,
3651
- thresholdEcdsaPublicKeyB64u: primaryKey.thresholdEcdsaPublicKeyB64u
3652
- }]
3653
- };
3654
- }
3655
- async function dispatchPasskeyWalletAddSigner(args) {
3656
- switch (args.signerSelection.mode) {
3657
- case "ed25519":
3658
- if (args.started.kind !== "near_ed25519") throw new Error("Wallet add-signer start returned a different signer branch");
3659
- return await addPasskeyEd25519YaoWalletSigner({
3660
- context: args.input.context,
3661
- walletId: args.input.walletId,
3662
- rpId: args.input.rpId,
3663
- relayerUrl: args.input.relayerUrl,
3664
- intentResponse: args.input.intentResponse,
3665
- credential: args.input.credential,
3666
- credentialIdB64u: args.input.credentialIdB64u,
3667
- passkeyPrfFirstB64u: args.input.passkeyPrfFirstB64u,
3668
- eventAccountId: args.input.eventAccountId,
3669
- onEvent: args.input.onEvent,
3670
- started: args.started
3671
- });
3672
- case "ecdsa":
3673
- if (args.started.kind !== "evm_family_ecdsa") throw new Error("Wallet add-signer start returned a different signer branch");
3674
- return await addPasskeyEcdsaWalletSigner({
3675
- context: args.input.context,
3676
- walletId: args.input.walletId,
3677
- rpId: args.input.rpId,
3678
- relayerUrl: args.input.relayerUrl,
3679
- intentResponse: args.input.intentResponse,
3680
- credential: args.input.credential,
3681
- credentialIdB64u: args.input.credentialIdB64u,
3682
- passkeyPrfFirstB64u: args.input.passkeyPrfFirstB64u,
3683
- eventAccountId: args.input.eventAccountId,
3684
- onEvent: args.input.onEvent,
3685
- started: args.started
3686
- });
3687
- default: return assertNever(args.signerSelection);
3688
- }
3689
- }
3690
- async function addWalletSigner(args) {
3691
- const { context, signerSelection } = args;
3692
- const options = args.options || {};
3693
- const walletId = walletIdFromString(String(args.walletId || "").trim());
3694
- const eventAccountId = registrationEventAccountId(String(walletId));
3695
- const rpId = requireWebAuthnRpId(String(args.rpId || "").trim());
3696
- emitAddSignerEventSafely(options.onEvent, eventAccountId, {
3697
- authMethod: "passkey",
3698
- phase: RegistrationEventPhase.STEP_01_STARTED,
3699
- status: "started"
3700
- });
3701
- try {
3702
- const relayerUrl = String(context.configs.network.relayer.url || "").trim();
3703
- if (!relayerUrl) throw new Error("addWalletSigner requires relayer.url");
3704
- const managedRuntimeScope = resolveManagedRuntimeScopeBootstrap(context.configs);
3705
- if (!managedRuntimeScope) throw new Error("addWalletSigner requires registration.publishableKey and registration.projectEnvironmentId");
3706
- const intentResponse = await createWalletAddSignerIntent({
3707
- relayerUrl,
3708
- walletId,
3709
- request: {
3710
- walletId,
3711
- rpId,
3712
- signerSelection
3713
- },
3714
- auth: {
3715
- publishableKey: managedRuntimeScope.publishableKey,
3716
- environmentId: managedRuntimeScope.projectEnvironmentId
3717
- }
3718
- });
3719
- if (await computeAddSignerIntentDigest(intentResponse.intent) !== intentResponse.addSignerIntentDigestB64u) throw new Error("Add-signer intent digest mismatch");
3720
- emitAddSignerEventSafely(options.onEvent, eventAccountId, {
3721
- authMethod: "passkey",
3722
- phase: RegistrationEventPhase.STEP_04_PASSKEY_CREATE_STARTED,
3723
- status: "waiting_for_user",
3724
- interaction: {
3725
- kind: "passkey_assert",
3726
- overlay: "show"
3727
- }
3728
- });
3729
- const allowCredentials = addSignerAllowCredentials(await IndexedDBManager.listProfileAuthenticators(String(walletId)));
3730
- const credential = await context.signingEngine.getAuthenticationCredentialsSerialized({
3731
- subjectId: String(walletId),
3732
- challengeB64u: intentResponse.addSignerIntentDigestB64u,
3733
- allowCredentials,
3734
- includeSecondPrfOutput: false
3735
- });
3736
- const credentialIdB64u = requireSelectedAddSignerCredentialId(credential, allowCredentials);
3737
- const passkeyPrfFirstB64u = requirePasskeyPrfFirstB64u(credential, "Wallet add-signer authorization");
3738
- emitAddSignerEventSafely(options.onEvent, eventAccountId, {
3739
- authMethod: "passkey",
3740
- phase: RegistrationEventPhase.STEP_04_PASSKEY_CREATE_SUCCEEDED,
3741
- status: "succeeded",
3742
- interaction: {
3743
- kind: "passkey_assert",
3744
- overlay: "hide"
3745
- }
3746
- });
3747
- const started = await startWalletAddSigner({
3748
- relayerUrl,
3749
- walletId,
3750
- addSignerIntentGrant: intentResponse.addSignerIntentGrant,
3751
- addSignerIntentDigestB64u: intentResponse.addSignerIntentDigestB64u,
3752
- intent: intentResponse.intent,
3753
- auth: {
3754
- kind: "webauthn_assertion",
3755
- rpId,
3756
- credential: redactCredentialExtensionOutputs(credential),
3757
- expectedChallengeDigestB64u: intentResponse.addSignerIntentDigestB64u
3758
- }
3759
- });
3760
- await requireMatchingStartedAddSignerIntent({
3761
- started,
3762
- walletId,
3763
- expectedDigestB64u: intentResponse.addSignerIntentDigestB64u
3764
- });
3765
- const result = await dispatchPasskeyWalletAddSigner({
3766
- input: {
3767
- context,
3768
- walletId,
3769
- rpId,
3770
- relayerUrl,
3771
- intentResponse,
3772
- credential,
3773
- credentialIdB64u,
3774
- passkeyPrfFirstB64u,
3775
- eventAccountId,
3776
- onEvent: options.onEvent
3777
- },
3778
- signerSelection,
3779
- started
3780
- });
3781
- emitAddSignerEventSafely(options.onEvent, eventAccountId, {
3782
- authMethod: "passkey",
3783
- phase: RegistrationEventPhase.STEP_11_COMPLETED,
3784
- status: "succeeded"
3785
- });
3786
- notifyAddSignerAfterCallSafely(options.afterCall, true, result);
3787
- return result;
3788
- } catch (error) {
3789
- const errorCode = registrationErrorCodeFromUnknown(error);
3790
- const errorMessage = getUserFriendlyErrorMessage(error, "registration", eventAccountId);
3791
- notifyAddSignerErrorSafely(options.onError, registrationErrorWithCode(errorMessage, errorCode));
3792
- emitAddSignerEventSafely(options.onEvent, eventAccountId, {
3793
- authMethod: "passkey",
3794
- phase: RegistrationEventPhase.FAILED,
3795
- status: "failed",
3796
- message: errorMessage,
3797
- interaction: {
3798
- kind: "passkey_assert",
3799
- overlay: "hide"
3800
- },
3801
- error: {
3802
- ...errorCode ? { code: errorCode } : {},
3803
- message: errorMessage
3804
- }
3805
- });
3806
- const result = {
3807
- success: false,
3808
- error: errorMessage,
3809
- ...errorCode ? { errorCode } : {}
3810
- };
3811
- notifyAddSignerAfterCallSafely(options.afterCall, false);
3812
- return result;
3813
- }
3814
- }
3815
- //#endregion
3816
- export { addWalletSigner, registerWallet, resumeNearRegistrationAfterUnlock };
3817
-
3818
- //# sourceMappingURL=registration.js.map