@seams/wallet 0.8.0 → 0.9.0

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 (1287) 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/waitForNearAccount.js +72 -0
  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/config/presignatures.js +6 -0
  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/bytes.js +1 -15
  85. package/dist/esm/core/signingEngine/chains/evm/evmAdapter.js +1 -1
  86. package/dist/esm/core/signingEngine/chains/near/display.js +1 -27
  87. package/dist/esm/core/signingEngine/chains/near/nearSignerWasm.js +2 -2
  88. package/dist/esm/core/signingEngine/flows/registration/accountLifecycle.js +6 -39
  89. package/dist/esm/core/signingEngine/flows/shared/signingConfirmation.js +2 -2
  90. package/dist/esm/core/signingEngine/flows/shared/signingStateMachine.js +1 -11
  91. package/dist/esm/core/signingEngine/flows/signEvmFamily/authPlanning.js +2 -2
  92. package/dist/esm/core/signingEngine/flows/signEvmFamily/ecdsaSelection.js +3 -3
  93. package/dist/esm/core/signingEngine/flows/signEvmFamily/emailOtpSigningSession.js +3 -136
  94. package/dist/esm/core/signingEngine/flows/signEvmFamily/freshWalletSessionRetry.js +1 -1
  95. package/dist/esm/core/signingEngine/flows/signEvmFamily/operationIds.js +1 -1
  96. package/dist/esm/core/signingEngine/flows/signEvmFamily/preparedSigning.js +2 -3
  97. package/dist/esm/core/signingEngine/flows/signEvmFamily/readySecp256k1Material.js +40 -5
  98. package/dist/esm/core/signingEngine/flows/signEvmFamily/signEvmFamily.js +4 -4
  99. package/dist/esm/core/signingEngine/flows/signEvmFamily/signers/ecdsaDerivationClientSigningMaterialSource.js +1 -1
  100. package/dist/esm/core/signingEngine/flows/signEvmFamily/signers/secp256k1.js +27 -53
  101. package/dist/esm/core/signingEngine/flows/signEvmFamily/signingFlow.js +5 -5
  102. package/dist/esm/core/signingEngine/flows/signEvmFamily/signingFlowRuntime.js +40 -33
  103. package/dist/esm/core/signingEngine/flows/signEvmFamily/thresholdAdmission.js +8 -2
  104. package/dist/esm/core/signingEngine/flows/signNear/implicitAccountFunding.js +1 -1
  105. package/dist/esm/core/signingEngine/flows/signNear/shared/ed25519YaoNormalSigning.js +94 -31
  106. package/dist/esm/core/signingEngine/flows/signNear/shared/implicitAccountFundingPort.js +1 -8
  107. package/dist/esm/core/signingEngine/flows/signNear/shared/operationStepUpPreparation.js +1 -38
  108. package/dist/esm/core/signingEngine/flows/signNear/shared/signatureOnlySigning.js +53 -8
  109. package/dist/esm/core/signingEngine/flows/signNear/signDelegate.js +5 -5
  110. package/dist/esm/core/signingEngine/flows/signNear/signNear.js +30 -44
  111. package/dist/esm/core/signingEngine/flows/signNear/signNep413.js +21 -12
  112. package/dist/esm/core/signingEngine/flows/signNear/signTransactions.js +10 -9
  113. package/dist/esm/core/signingEngine/interfaces/ecdsaChainTarget.js +1 -1
  114. package/dist/esm/core/signingEngine/nonce/nonceLaneKeys.js +1 -35
  115. package/dist/esm/core/signingEngine/nonce/nonceTypes.js +2 -26
  116. package/dist/esm/core/signingEngine/routerAb/ecdsaDerivation/httpRequest.js +4 -3
  117. package/dist/esm/core/signingEngine/routerAb/ecdsaDerivation/poolFillRoutes.js +5 -1
  118. package/dist/esm/core/signingEngine/routerAb/ecdsaDerivation/presignaturePool.js +112 -162
  119. package/dist/esm/core/signingEngine/routerAb/ecdsaDerivation/presignaturePoolPolicy.js +31 -0
  120. package/dist/esm/core/signingEngine/routerAb/ecdsaDerivation/signingMaterialRef.js +1 -1
  121. package/dist/esm/core/signingEngine/session/availability/availableSigningLanes.js +3 -913
  122. package/dist/esm/core/signingEngine/session/emailOtp/challengeDelivery.js +1 -45
  123. package/dist/esm/core/signingEngine/session/emailOtp/ecdsaSigningSessionAuthority.js +1 -81
  124. package/dist/esm/core/signingEngine/session/identity/clientSessionPersistenceState.js +1 -43
  125. package/dist/esm/core/signingEngine/session/identity/emailOtpEcdsaDerivationIdentity.js +1 -9
  126. package/dist/esm/core/signingEngine/session/identity/evmFamilyEcdsaIdentity.js +3 -125
  127. package/dist/esm/core/signingEngine/session/identity/exactSigningLaneIdentity.js +3 -19
  128. package/dist/esm/core/signingEngine/session/identity/laneIdentity.js +2 -106
  129. package/dist/esm/core/signingEngine/session/keyMaterialBrands.js +1 -1
  130. package/dist/esm/core/signingEngine/session/lifecycle/walletSessionFailure.js +1 -1
  131. package/dist/esm/core/signingEngine/session/material/activeEcdsaCapabilityRuntime.js +1 -114
  132. package/dist/esm/core/signingEngine/session/material/activeWalletAuthorityEcdsaRuntime.js +2 -2
  133. package/dist/esm/core/signingEngine/session/material/ecdsaCapabilityManifest.js +2 -187
  134. package/dist/esm/core/signingEngine/session/material/ecdsaRoleLocalMaterialResolver.js +2 -18
  135. package/dist/esm/core/signingEngine/session/material/ecdsaSigningCapability.js +2 -130
  136. package/dist/esm/core/signingEngine/session/material/linkedEcdsaHolderRuntime.js +1 -25
  137. package/dist/esm/core/signingEngine/session/material/nearEd25519YaoMaterialActivation.js +1 -73
  138. package/dist/esm/core/signingEngine/session/material/walletSigningStateFailure.js +1 -69
  139. package/dist/esm/core/signingEngine/session/operationState/preparedOperation.js +1 -5
  140. package/dist/esm/core/signingEngine/session/operationState/transactionState.js +0 -1
  141. package/dist/esm/core/signingEngine/session/passkey/prfCache.js +1 -5
  142. package/dist/esm/core/signingEngine/session/persistence/durableSealedSessionCommands.js +1 -9
  143. package/dist/esm/core/signingEngine/session/persistence/ecdsaRoleLocalRecords.js +3 -202
  144. package/dist/esm/core/signingEngine/session/persistence/sealedSessionRecords.js +4 -83
  145. package/dist/esm/core/signingEngine/session/persistence/sealedSessionStore.js +2 -2
  146. package/dist/esm/core/signingEngine/session/planning/planner.js +2 -13
  147. package/dist/esm/core/signingEngine/session/sealedRecovery/materialActivationKey.js +1 -8
  148. package/dist/esm/core/signingEngine/session/warmCapabilities/routerAbWalletSessionCredential.js +2 -1
  149. package/dist/esm/core/signingEngine/session/warmCapabilities/sealedRefreshParity.js +2 -41
  150. package/dist/esm/core/signingEngine/stepUpConfirmation/intentDigestPreparation.js +1 -14
  151. package/dist/esm/core/signingEngine/stepUpConfirmation/types.js +1 -7
  152. package/dist/esm/core/signingEngine/threshold/commitQueueShared.js +1 -127
  153. package/dist/esm/core/signingEngine/threshold/crypto/ecdsaDerivationClientWasm.js +3 -297
  154. package/dist/esm/core/signingEngine/threshold/ecdsa/operationStepUp.js +10 -24
  155. package/dist/esm/core/signingEngine/threshold/ed25519/walletSession.js +7 -209
  156. package/dist/esm/core/signingEngine/threshold/ed25519/yaoPublicCapabilityReferences.js +5 -208
  157. package/dist/esm/core/signingEngine/threshold/sessionPolicy.js +3 -9
  158. package/dist/esm/core/signingEngine/uiConfirm/nearFundingNotice.js +1 -17
  159. package/dist/esm/core/signingEngine/uiConfirm/ui/confirm-surface-resize.js +2 -173
  160. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/ConfirmationContent.js +3 -3
  161. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/ReviewDisclosure.js +2 -2
  162. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/TransactionReceipt.js +1 -1
  163. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/TransactionReview.js +5 -4
  164. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/mountConfirmationSurface.js +2 -2
  165. package/dist/esm/core/signingEngine/uiConfirm/ui/surface-resize-events.js +1 -6
  166. package/dist/esm/core/signingEngine/uiConfirm/ui/transaction-display/formatters.js +1 -10
  167. package/dist/esm/core/signingEngine/webauthnAuth/credentials/credentialExtensions.js +1 -19
  168. package/dist/esm/core/signingEngine/webauthnAuth/credentials/helpers.js +2 -170
  169. package/dist/esm/core/signingEngine/workerManager/ecdsaPresignPoolIdentity.js +27 -5
  170. package/dist/esm/core/signingEngine/workerManager/validation.js +1 -104
  171. package/dist/esm/core/signingEngine/workerManager/workerTypes.js +1 -33
  172. package/dist/esm/core/types/rpc.js +1 -4
  173. package/dist/esm/core/types/sdkSentEvents.js +1 -24
  174. package/dist/esm/core/walletRuntimePaths/base.js +1 -28
  175. package/dist/esm/externalEvm/controller.js +7 -7
  176. package/dist/esm/index.js +8 -7
  177. package/dist/esm/react/components/AccountMenuButton/AuthenticationMethodsModal.js +9 -9
  178. package/dist/esm/react/components/AccountMenuButton/LinkedDevicesModal.css +1 -2
  179. package/dist/esm/react/components/AccountMenuButton/LinkedDevicesModal.js +9 -185
  180. package/dist/esm/react/components/AccountMenuButton/WalletRegionSection.js +303 -0
  181. package/dist/esm/react/components/AccountMenuButton/WalletSettingsLayout.js +31 -5
  182. package/dist/esm/react/components/AccountMenuButton/index.js +21 -13
  183. package/dist/esm/react/components/AccountMenuButton/types.js +2 -1
  184. package/dist/esm/react/components/HostedSeamsAuthMenu/shell.js +5 -17
  185. package/dist/esm/react/components/QRCodeScanner.js +5 -5
  186. package/dist/esm/react/components/ShowQRCode.js +13 -13
  187. package/dist/esm/react/context/SeamsWebProvider.js +1 -2
  188. package/dist/esm/react/context/index.js +8 -10
  189. package/dist/esm/react/context/seamsManagerSingleton.js +1 -1
  190. package/dist/esm/react/context/useLoginStateRefresher.js +10 -13
  191. package/dist/esm/react/context/useNearProvisioningStateRefresh.js +3 -3
  192. package/dist/esm/react/context/useSeamsContextValue.js +33 -81
  193. package/dist/esm/react/context/useSeamsWithSdkFlow.js +22 -51
  194. package/dist/esm/react/context/useWalletIframeLifecycle.js +20 -110
  195. package/dist/esm/react/hooks/useAccountInput.js +10 -13
  196. package/dist/esm/react/hooks/useDeviceLinking.js +1 -1
  197. package/dist/esm/react/hooks/useNearClient.js +1 -1
  198. package/dist/esm/react/hooks/useQRCamera.js +2 -8
  199. package/dist/esm/react/hooks/useWallet.js +5 -6
  200. package/dist/esm/react/hooks/useWalletAuth.js +3 -4
  201. package/dist/esm/react/hooks/useWalletDevices.js +2 -2
  202. package/dist/esm/react/index.js +4 -4
  203. package/dist/esm/react/transactionReview/TransactionReviewHost.js +1 -1
  204. package/dist/esm/react/transactionReview/boundCalls.js +5 -39
  205. package/dist/esm/react/transactionReview/controller.js +3 -4
  206. package/dist/esm/react/transactionReview/snapshot.js +1 -1
  207. package/dist/esm/react/utils/walletIframe.js +11 -52
  208. package/dist/esm/sdk/ConfirmationDrawer-DY0_yeUV.js +1 -0
  209. package/dist/esm/sdk/NonceCoordinator-CFFq8-Q9.js +1 -0
  210. package/dist/esm/sdk/accountLifecycle-CAMVowDl.js +1 -0
  211. package/dist/esm/sdk/activeWalletSession-DiZcKjB_.js +1 -0
  212. package/dist/esm/sdk/adapters-DdDOQzl4.js +2 -0
  213. package/dist/esm/sdk/appearance-ZGVLwA4N.js +1 -0
  214. package/dist/esm/sdk/authenticatorOptions-DMLnDWT2.js +1 -0
  215. package/dist/esm/sdk/authorizationAdmission-Ckx6q6tp.js +1 -0
  216. package/dist/esm/sdk/bytes-BBYkulRB.js +1 -0
  217. package/dist/esm/sdk/canonicalPrimitives-CKPGgpxg.js +1 -0
  218. package/dist/esm/sdk/canonicalSignerErrorCode-DEHsPxNm.js +1 -0
  219. package/dist/esm/sdk/capabilityKinds-CKQ4Uqnv.js +1 -0
  220. package/dist/esm/sdk/chains-CiYQT1K4.js +1 -0
  221. package/dist/esm/sdk/challengeDelivery-DxXAkOfS.js +1 -0
  222. package/dist/esm/sdk/clientSessionPersistenceState-CImFWDj6.js +1 -0
  223. package/dist/esm/sdk/commitQueue-iBNUt9Bz.js +1 -0
  224. package/dist/esm/sdk/configBuilder-ZiZwFKt4.js +1 -0
  225. package/dist/esm/sdk/configHelpers-D8Ivi6p8.js +1 -0
  226. package/dist/esm/sdk/digestEncoding-Dzc1rzWV.js +1 -0
  227. package/dist/esm/sdk/display-ClqZq-Xt.js +1 -0
  228. package/dist/esm/sdk/ecdsaCapabilityManifest-BlzJAQF8.js +1 -0
  229. package/dist/esm/sdk/ecdsaChainTarget-C8ZtMZ8l.js +1 -0
  230. package/dist/esm/sdk/ecdsaDerivationClientWasm-CVeNEou2.js +1 -0
  231. package/dist/esm/sdk/ecdsaDerivationExport-BZFHSMCv.js +1 -0
  232. package/dist/esm/sdk/ecdsaWalletRecords-D4WeYc7H.js +1 -0
  233. package/dist/esm/sdk/emailOtpEcdsaDerivationIdentity-B8HzTh4T.js +1 -0
  234. package/dist/esm/sdk/enrichDisplayModelWithAbi-69bNckvi.js +1 -0
  235. package/dist/esm/sdk/evmCryptoWasm-BXsIyRon.js +1 -0
  236. package/dist/esm/sdk/export-viewer-host-CsFeiIhd.js +1 -0
  237. package/dist/esm/sdk/exportKeypairOperation-DGQIYML3.js +1 -0
  238. package/dist/esm/sdk/helpers-Ddy72ULN.js +1 -0
  239. package/dist/esm/sdk/host-B1CdRGoI.js +1 -0
  240. package/dist/esm/sdk/intentDigest-CE-tLw87.js +1 -0
  241. package/dist/esm/sdk/jsxRuntime.module-BcZNe_OA.js +2 -0
  242. package/dist/esm/sdk/lanes-DnBwWv4l.js +1 -0
  243. package/dist/esm/sdk/localOnly-ClCo6602.js +1 -0
  244. package/dist/esm/sdk/messages-vxz27Way.js +1 -0
  245. package/dist/esm/sdk/mountExportPrivateKeySurface-CBZ0wRYj.js +1 -0
  246. package/dist/esm/sdk/mountRecoveryCodeBackupSurface-B1qhFF6G.js +2 -0
  247. package/dist/esm/sdk/nearEd25519YaoMaterialActivation-fWQI3rYj.js +1 -0
  248. package/dist/esm/sdk/nearEd25519YaoSigningPreparation-B0d1AG3u.js +1 -0
  249. package/dist/esm/sdk/nonceLaneKeys-Fkvk2UPy.js +1 -0
  250. package/dist/esm/sdk/normalization-CpLZcL2f.js +1 -0
  251. package/dist/esm/sdk/normalization-DCvuCvh0.js +1 -0
  252. package/dist/esm/sdk/normalize-kUDm5zfS.js +1 -0
  253. package/dist/esm/sdk/operationFingerprint-CTR9G1NT.js +1 -0
  254. package/dist/esm/sdk/passkey-custody-BQj44jEM.js +1 -0
  255. package/dist/esm/sdk/pendingWalletRecoveryCodeBackup-yJN8VAHn.js +1 -0
  256. package/dist/esm/sdk/presignaturePool-DwlTReFO.js +1 -0
  257. package/dist/esm/sdk/presignatures-DB2IPD-A.js +1 -0
  258. package/dist/esm/sdk/prfCache-BMpqZZ-v.js +1 -0
  259. package/dist/esm/sdk/primitives-CAcl7ON7.js +1 -0
  260. package/dist/esm/sdk/promptText-D2f5Rg0h.js +1 -0
  261. package/dist/esm/sdk/recovery-entrypoint-Bl5GgbW9.js +1 -0
  262. package/dist/esm/sdk/registration-C4sALQZO.js +1 -0
  263. package/dist/esm/sdk/registration-CEqVAgNJ.js +1 -0
  264. package/dist/esm/sdk/registrationAccounts-D4RVetMz.js +1 -0
  265. package/dist/esm/sdk/registrationAuthMethodInput-6ccY2Vuh.js +1 -0
  266. package/dist/esm/sdk/registrationIds-CdPqm-Ya.js +1 -0
  267. package/dist/esm/sdk/registrationIntent-DOkZcKSP.js +1 -0
  268. package/dist/esm/sdk/registrationSignerPlan-B9GCvpTV.js +1 -0
  269. package/dist/esm/sdk/requireStepUpAuth-DCVqmeee.js +1 -0
  270. package/dist/esm/sdk/routerAbNormalSigning-BG75eyI2.js +1 -0
  271. package/dist/esm/sdk/router_ab_ed25519_yao_client_bg.wasm +0 -0
  272. package/dist/esm/sdk/runtime-auth-tgfe70hU.js +1 -0
  273. package/dist/esm/sdk/runtime-device-link-BUxuQupR.js +1 -0
  274. package/dist/esm/sdk/runtime-ecdsa-tempo-DOBk_EtI.js +1 -0
  275. package/dist/esm/sdk/runtime-email-otp-CsAJKvYC.js +1 -0
  276. package/dist/esm/sdk/runtime-export-7REbcnBl.js +1 -0
  277. package/dist/esm/sdk/runtime-near-BA0DQf6H.js +1 -0
  278. package/dist/esm/sdk/runtime-preferences-cRViPE8a.js +1 -0
  279. package/dist/esm/sdk/runtime-recovery-RRc8Yz1y.js +1 -0
  280. package/dist/esm/sdk/runtime-recovery-codes-BZMiAR_5.js +1 -0
  281. package/dist/esm/sdk/sdkSentEvents-D3q1h-Uo.js +1 -0
  282. package/dist/esm/sdk/secp256k1-DSLttQND.js +1 -0
  283. package/dist/esm/sdk/secureRandomId-BIekT8bE.js +1 -0
  284. package/dist/esm/sdk/sessionPolicy-J-RrlPZQ.js +1 -0
  285. package/dist/esm/sdk/shared-DdfxBUGY.js +6 -0
  286. package/dist/esm/sdk/signEvmFamily-KUNWKVeh.js +1 -0
  287. package/dist/esm/sdk/signEvmFamilyWithUiConfirmForTempo-Dc57bJ3V.js +1 -0
  288. package/dist/esm/sdk/signEvmWithUiConfirm-CqxL7UbT.js +1 -0
  289. package/dist/esm/sdk/signNear-CO5bx24Z.js +1 -0
  290. package/dist/esm/sdk/signatureUses-CjJ233KX.js +1 -0
  291. package/dist/esm/sdk/signerDomain-vQmlnsbF.js +1 -0
  292. package/dist/esm/sdk/signingFlow-vrXxrhlG.js +2 -0
  293. package/dist/esm/sdk/signingQueue-BrGJXBqe.js +1 -0
  294. package/dist/esm/sdk/signingSessionSeal-CDLUmAFY.js +1 -0
  295. package/dist/esm/sdk/singletons-8UH3gOnZ.js +1 -0
  296. package/dist/esm/sdk/theme-_AUTWLS_.js +1 -0
  297. package/dist/esm/sdk/thresholdEcdsa-CO7xo1So.js +1 -0
  298. package/dist/esm/sdk/trace-BvbCxdXF.js +1 -0
  299. package/dist/esm/sdk/transaction-activity-D40ih2j-.js +1 -0
  300. package/dist/esm/sdk/transactionReviewAdmission-C-a3ctCJ.js +1 -0
  301. package/dist/esm/sdk/transactionState-DVinJk4K.js +1 -0
  302. package/dist/esm/sdk/tx-confirm-ui.js +7 -11
  303. package/dist/esm/sdk/types-BNUuaUtl.js +1 -0
  304. package/dist/esm/sdk/types-D3GM-uHR.js +1 -0
  305. package/dist/esm/sdk/wallet-iframe-host-ecdsa.js +1 -1
  306. package/dist/esm/sdk/wallet-iframe-host-full.js +1 -1
  307. package/dist/esm/sdk/wallet-iframe-host-near.js +1 -1
  308. package/dist/esm/sdk/wallet-iframe-host-runtime.js +1 -1
  309. package/dist/esm/sdk/wallet-recovery-C1kesLCF.js +1 -0
  310. package/dist/esm/sdk/wallet-ui.css +1 -1
  311. package/dist/esm/sdk/walletAuthMethodRecord-CXedSgpV.js +1 -0
  312. package/dist/esm/sdk/walletAuthority-B5hXHWpK.js +1 -0
  313. package/dist/esm/sdk/walletCustodyEcdsaContinuity-abNZ_dvX.js +1 -0
  314. package/dist/esm/sdk/walletIframeIdentity-DJ0KOBHg.js +1 -0
  315. package/dist/esm/sdk/walletOwnershipGeneration-DoXVMDWe.js +1 -0
  316. package/dist/esm/sdk/walletRecoveryCommit-Cc9AqHr0.js +1 -0
  317. package/dist/esm/sdk/walletRecoveryRotate-DWTAFYiv.js +1 -0
  318. package/dist/esm/sdk/walletSessionAuthorizationProjection-DWBksIJR.js +1 -0
  319. package/dist/esm/sdk/walletSessionAuthorizationStatus-o1VgsLhA.js +1 -0
  320. package/dist/esm/sdk/walletSessionAuthorizationStore-gEYPmu-G.js +1 -0
  321. package/dist/esm/sdk/walletSessionFailure-Bu4VPKTz.js +1 -0
  322. package/dist/esm/sdk/warmSessionHydration-DgjuUacN.js +1 -0
  323. package/dist/esm/sdk/webauthnP256-BEz4DEAs.js +1 -0
  324. package/dist/esm/sdk/webauthnPromptCoordinator-BEudHQBr.js +1 -0
  325. package/dist/esm/shared-ts/src/authorization/capabilityKinds.js +1 -7
  326. package/dist/esm/shared-ts/src/authorization/delegatedAuthority.js +2 -20
  327. package/dist/esm/shared-ts/src/authorization/index.js +1 -2
  328. package/dist/esm/shared-ts/src/authorization/operationFingerprint.js +1 -20
  329. package/dist/esm/shared-ts/src/authorization/walletAuthority.js +4 -51
  330. package/dist/esm/shared-ts/src/authorization/walletSessionIssuance.js +1 -112
  331. package/dist/esm/shared-ts/src/device-linking/activeWalletSession.js +13 -3
  332. package/dist/esm/shared-ts/src/device-linking/authorityActivation.js +6 -116
  333. package/dist/esm/shared-ts/src/device-linking/committedSignerPackages.js +3 -270
  334. package/dist/esm/shared-ts/src/device-linking/delegatedActivationPlan.js +2 -2
  335. package/dist/esm/shared-ts/src/device-linking/deviceManagement.js +1 -12
  336. package/dist/esm/shared-ts/src/device-linking/digests.js +1 -109
  337. package/dist/esm/shared-ts/src/device-linking/index.js +0 -2
  338. package/dist/esm/shared-ts/src/device-linking/parsers.js +7 -921
  339. package/dist/esm/shared-ts/src/device-linking/requestProof.js +1 -19
  340. package/dist/esm/shared-ts/src/device-linking/sourceContribution.js +5 -358
  341. package/dist/esm/shared-ts/src/device-linking/walletSessionCredentialDelivery.js +1 -172
  342. package/dist/esm/shared-ts/src/device-linking/wireFields.js +4 -5
  343. package/dist/esm/shared-ts/src/near/actions.js +1 -13
  344. package/dist/esm/shared-ts/src/near/nearClient.js +1 -1
  345. package/dist/esm/shared-ts/src/passkey-custody/custodyEnvelope.js +3 -59
  346. package/dist/esm/shared-ts/src/passkey-custody/custodySecretBinding.js +4 -8
  347. package/dist/esm/shared-ts/src/passkey-custody/index.js +0 -1
  348. package/dist/esm/shared-ts/src/signing-lanes/index.js +0 -1
  349. package/dist/esm/shared-ts/src/signing-lanes/ownerContinuity.js +0 -59
  350. package/dist/esm/shared-ts/src/threshold/ed25519OperationFingerprint.js +1 -1
  351. package/dist/esm/shared-ts/src/threshold/keyMaterialBrands.js +1 -4
  352. package/dist/esm/shared-ts/src/threshold/participants.js +1 -2
  353. package/dist/esm/shared-ts/src/threshold/signingRootScope.js +1 -4
  354. package/dist/esm/shared-ts/src/utils/authenticatorOptions.js +1 -12
  355. package/dist/esm/shared-ts/src/utils/canonicalPrimitives.js +2 -5
  356. package/dist/esm/shared-ts/src/utils/domainIds.js +1 -7
  357. package/dist/esm/shared-ts/src/utils/ecdsaCapabilityActivation.js +1 -16
  358. package/dist/esm/shared-ts/src/utils/ecdsaServerTiming.js +6 -1
  359. package/dist/esm/shared-ts/src/utils/emailOtpDomain.js +1 -23
  360. package/dist/esm/shared-ts/src/utils/emailOtpRecoveryKey.js +1 -42
  361. package/dist/esm/shared-ts/src/utils/errors.js +1 -43
  362. package/dist/esm/shared-ts/src/utils/index.js +18 -22
  363. package/dist/esm/shared-ts/src/utils/near.js +2 -74
  364. package/dist/esm/shared-ts/src/utils/normalize.js +1 -22
  365. package/dist/esm/shared-ts/src/utils/registrationAuthMethodInput.js +1 -74
  366. package/dist/esm/shared-ts/src/utils/registrationEstablishedSession.js +6 -275
  367. package/dist/esm/shared-ts/src/utils/registrationIds.js +1 -203
  368. package/dist/esm/shared-ts/src/utils/registrationIntent.js +1 -389
  369. package/dist/esm/shared-ts/src/utils/registrationSignerPlan.js +2 -434
  370. package/dist/esm/shared-ts/src/utils/routerAbEcdsaDerivation.js +6 -414
  371. package/dist/esm/shared-ts/src/utils/routerAbEd25519Yao.js +1 -334
  372. package/dist/esm/shared-ts/src/utils/routerAbEd25519YaoDigests.js +2 -40
  373. package/dist/esm/shared-ts/src/utils/routerAbNormalSigningIdentity.js +1 -1
  374. package/dist/esm/shared-ts/src/utils/signingSessionSeal.js +1 -6
  375. package/dist/esm/shared-ts/src/utils/thresholdEcdsaKeyHandle.js +1 -6
  376. package/dist/esm/shared-ts/src/utils/validation.js +2 -17
  377. package/dist/esm/shared-ts/src/utils/walletAuthAuthority.js +1 -28
  378. package/dist/esm/shared-ts/src/utils/walletAuthMethodRecord.js +1 -11
  379. package/dist/esm/shared-ts/src/utils/walletCapabilityBindings.js +1 -7
  380. package/dist/esm/shared-ts/src/wallet-recovery/index.js +3 -5
  381. package/dist/esm/shared-ts/src/wallet-recovery/recoveryCodeIssuance.js +1 -35
  382. package/dist/esm/shared-ts/src/wallet-recovery/recoveryCodeLocator.js +0 -32
  383. package/dist/esm/shared-ts/src/wallet-recovery/recoveryCodeReservation.js +1 -15
  384. package/dist/esm/shared-ts/src/wallet-recovery/recoveryKeyId.js +0 -11
  385. package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryCommittedProjection.js +1 -1
  386. package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryEcdsaPossession.js +2 -42
  387. package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryEnvelopeSet.js +3 -53
  388. package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryRotation.js +2 -63
  389. package/dist/esm/threshold.js +1 -1
  390. package/dist/esm/utils/intentDigest.js +1 -62
  391. package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker_bg.wasm +0 -0
  392. package/dist/esm/wasm/router_ab_ecdsa_client/pkg/router_ab_ecdsa_client_bg.wasm +0 -0
  393. package/dist/esm/wasm/router_ab_ed25519_yao_client/pkg/router_ab_ed25519_yao_client_bg.wasm +0 -0
  394. package/dist/public/headers.manifest.json +1 -1
  395. package/dist/public/sdk/ConfirmationDrawer-DY0_yeUV.js +1 -0
  396. package/dist/public/sdk/NonceCoordinator-CFFq8-Q9.js +1 -0
  397. package/dist/public/sdk/accountLifecycle-CAMVowDl.js +1 -0
  398. package/dist/public/sdk/activeWalletSession-DiZcKjB_.js +1 -0
  399. package/dist/public/sdk/adapters-DdDOQzl4.js +2 -0
  400. package/dist/public/sdk/appearance-ZGVLwA4N.js +1 -0
  401. package/dist/public/sdk/authenticatorOptions-DMLnDWT2.js +1 -0
  402. package/dist/public/sdk/authorizationAdmission-Ckx6q6tp.js +1 -0
  403. package/dist/public/sdk/bytes-BBYkulRB.js +1 -0
  404. package/dist/public/sdk/canonicalPrimitives-CKPGgpxg.js +1 -0
  405. package/dist/public/sdk/canonicalSignerErrorCode-DEHsPxNm.js +1 -0
  406. package/dist/public/sdk/capabilityKinds-CKQ4Uqnv.js +1 -0
  407. package/dist/public/sdk/chains-CiYQT1K4.js +1 -0
  408. package/dist/public/sdk/challengeDelivery-DxXAkOfS.js +1 -0
  409. package/dist/public/sdk/clientSessionPersistenceState-CImFWDj6.js +1 -0
  410. package/dist/public/sdk/commitQueue-iBNUt9Bz.js +1 -0
  411. package/dist/public/sdk/configBuilder-ZiZwFKt4.js +1 -0
  412. package/dist/public/sdk/configHelpers-D8Ivi6p8.js +1 -0
  413. package/dist/public/sdk/digestEncoding-Dzc1rzWV.js +1 -0
  414. package/dist/public/sdk/display-ClqZq-Xt.js +1 -0
  415. package/dist/public/sdk/ecdsaCapabilityManifest-BlzJAQF8.js +1 -0
  416. package/dist/public/sdk/ecdsaChainTarget-C8ZtMZ8l.js +1 -0
  417. package/dist/public/sdk/ecdsaDerivationClientWasm-CVeNEou2.js +1 -0
  418. package/dist/public/sdk/ecdsaDerivationExport-BZFHSMCv.js +1 -0
  419. package/dist/public/sdk/ecdsaWalletRecords-D4WeYc7H.js +1 -0
  420. package/dist/public/sdk/emailOtpEcdsaDerivationIdentity-B8HzTh4T.js +1 -0
  421. package/dist/public/sdk/enrichDisplayModelWithAbi-69bNckvi.js +1 -0
  422. package/dist/public/sdk/evmCryptoWasm-BXsIyRon.js +1 -0
  423. package/dist/public/sdk/export-viewer-host-CsFeiIhd.js +1 -0
  424. package/dist/public/sdk/exportKeypairOperation-DGQIYML3.js +1 -0
  425. package/dist/public/sdk/helpers-Ddy72ULN.js +1 -0
  426. package/dist/public/sdk/host-B1CdRGoI.js +1 -0
  427. package/dist/public/sdk/intentDigest-CE-tLw87.js +1 -0
  428. package/dist/public/sdk/jsxRuntime.module-BcZNe_OA.js +2 -0
  429. package/dist/public/sdk/lanes-DnBwWv4l.js +1 -0
  430. package/dist/public/sdk/localOnly-ClCo6602.js +1 -0
  431. package/dist/public/sdk/messages-vxz27Way.js +1 -0
  432. package/dist/public/sdk/mountExportPrivateKeySurface-CBZ0wRYj.js +1 -0
  433. package/dist/public/sdk/mountRecoveryCodeBackupSurface-B1qhFF6G.js +2 -0
  434. package/dist/public/sdk/nearEd25519YaoMaterialActivation-fWQI3rYj.js +1 -0
  435. package/dist/public/sdk/nearEd25519YaoSigningPreparation-B0d1AG3u.js +1 -0
  436. package/dist/public/sdk/nonceLaneKeys-Fkvk2UPy.js +1 -0
  437. package/dist/public/sdk/normalization-CpLZcL2f.js +1 -0
  438. package/dist/public/sdk/normalization-DCvuCvh0.js +1 -0
  439. package/dist/public/sdk/normalize-kUDm5zfS.js +1 -0
  440. package/dist/public/sdk/operationFingerprint-CTR9G1NT.js +1 -0
  441. package/dist/public/sdk/passkey-custody-BQj44jEM.js +1 -0
  442. package/dist/public/sdk/pendingWalletRecoveryCodeBackup-yJN8VAHn.js +1 -0
  443. package/dist/public/sdk/presignaturePool-DwlTReFO.js +1 -0
  444. package/dist/public/sdk/presignatures-DB2IPD-A.js +1 -0
  445. package/dist/public/sdk/prfCache-BMpqZZ-v.js +1 -0
  446. package/dist/public/sdk/primitives-CAcl7ON7.js +1 -0
  447. package/dist/public/sdk/promptText-D2f5Rg0h.js +1 -0
  448. package/dist/public/sdk/recovery-entrypoint-Bl5GgbW9.js +1 -0
  449. package/dist/public/sdk/registration-C4sALQZO.js +1 -0
  450. package/dist/public/sdk/registration-CEqVAgNJ.js +1 -0
  451. package/dist/public/sdk/registrationAccounts-D4RVetMz.js +1 -0
  452. package/dist/public/sdk/registrationAuthMethodInput-6ccY2Vuh.js +1 -0
  453. package/dist/public/sdk/registrationIds-CdPqm-Ya.js +1 -0
  454. package/dist/public/sdk/registrationIntent-DOkZcKSP.js +1 -0
  455. package/dist/public/sdk/registrationSignerPlan-B9GCvpTV.js +1 -0
  456. package/dist/public/sdk/requireStepUpAuth-DCVqmeee.js +1 -0
  457. package/dist/public/sdk/routerAbNormalSigning-BG75eyI2.js +1 -0
  458. package/dist/public/sdk/router_ab_ed25519_yao_client_bg.wasm +0 -0
  459. package/dist/public/sdk/runtime-auth-tgfe70hU.js +1 -0
  460. package/dist/public/sdk/runtime-device-link-BUxuQupR.js +1 -0
  461. package/dist/public/sdk/runtime-ecdsa-tempo-DOBk_EtI.js +1 -0
  462. package/dist/public/sdk/runtime-email-otp-CsAJKvYC.js +1 -0
  463. package/dist/public/sdk/runtime-export-7REbcnBl.js +1 -0
  464. package/dist/public/sdk/runtime-near-BA0DQf6H.js +1 -0
  465. package/dist/public/sdk/runtime-preferences-cRViPE8a.js +1 -0
  466. package/dist/public/sdk/runtime-recovery-RRc8Yz1y.js +1 -0
  467. package/dist/public/sdk/runtime-recovery-codes-BZMiAR_5.js +1 -0
  468. package/dist/public/sdk/sdkSentEvents-D3q1h-Uo.js +1 -0
  469. package/dist/public/sdk/secp256k1-DSLttQND.js +1 -0
  470. package/dist/public/sdk/secureRandomId-BIekT8bE.js +1 -0
  471. package/dist/public/sdk/sessionPolicy-J-RrlPZQ.js +1 -0
  472. package/dist/public/sdk/shared-DdfxBUGY.js +6 -0
  473. package/dist/public/sdk/signEvmFamily-KUNWKVeh.js +1 -0
  474. package/dist/public/sdk/signEvmFamilyWithUiConfirmForTempo-Dc57bJ3V.js +1 -0
  475. package/dist/public/sdk/signEvmWithUiConfirm-CqxL7UbT.js +1 -0
  476. package/dist/public/sdk/signNear-CO5bx24Z.js +1 -0
  477. package/dist/public/sdk/signatureUses-CjJ233KX.js +1 -0
  478. package/dist/public/sdk/signerDomain-vQmlnsbF.js +1 -0
  479. package/dist/public/sdk/signingFlow-vrXxrhlG.js +2 -0
  480. package/dist/public/sdk/signingQueue-BrGJXBqe.js +1 -0
  481. package/dist/public/sdk/signingSessionSeal-CDLUmAFY.js +1 -0
  482. package/dist/public/sdk/singletons-8UH3gOnZ.js +1 -0
  483. package/dist/public/sdk/theme-_AUTWLS_.js +1 -0
  484. package/dist/public/sdk/thresholdEcdsa-CO7xo1So.js +1 -0
  485. package/dist/public/sdk/trace-BvbCxdXF.js +1 -0
  486. package/dist/public/sdk/transaction-activity-D40ih2j-.js +1 -0
  487. package/dist/public/sdk/transactionReviewAdmission-C-a3ctCJ.js +1 -0
  488. package/dist/public/sdk/transactionState-DVinJk4K.js +1 -0
  489. package/dist/public/sdk/tx-confirm-ui.js +7 -11
  490. package/dist/public/sdk/types-BNUuaUtl.js +1 -0
  491. package/dist/public/sdk/types-D3GM-uHR.js +1 -0
  492. package/dist/public/sdk/wallet-iframe-host-ecdsa.js +1 -1
  493. package/dist/public/sdk/wallet-iframe-host-full.js +1 -1
  494. package/dist/public/sdk/wallet-iframe-host-near.js +1 -1
  495. package/dist/public/sdk/wallet-iframe-host-runtime.js +1 -1
  496. package/dist/public/sdk/wallet-recovery-C1kesLCF.js +1 -0
  497. package/dist/public/sdk/wallet-ui.css +1 -1
  498. package/dist/public/sdk/walletAuthMethodRecord-CXedSgpV.js +1 -0
  499. package/dist/public/sdk/walletAuthority-B5hXHWpK.js +1 -0
  500. package/dist/public/sdk/walletCustodyEcdsaContinuity-abNZ_dvX.js +1 -0
  501. package/dist/public/sdk/walletIframeIdentity-DJ0KOBHg.js +1 -0
  502. package/dist/public/sdk/walletOwnershipGeneration-DoXVMDWe.js +1 -0
  503. package/dist/public/sdk/walletRecoveryCommit-Cc9AqHr0.js +1 -0
  504. package/dist/public/sdk/walletRecoveryRotate-DWTAFYiv.js +1 -0
  505. package/dist/public/sdk/walletSessionAuthorizationProjection-DWBksIJR.js +1 -0
  506. package/dist/public/sdk/walletSessionAuthorizationStatus-o1VgsLhA.js +1 -0
  507. package/dist/public/sdk/walletSessionAuthorizationStore-gEYPmu-G.js +1 -0
  508. package/dist/public/sdk/walletSessionFailure-Bu4VPKTz.js +1 -0
  509. package/dist/public/sdk/warmSessionHydration-DgjuUacN.js +1 -0
  510. package/dist/public/sdk/webauthnP256-BEz4DEAs.js +1 -0
  511. package/dist/public/sdk/webauthnPromptCoordinator-BEudHQBr.js +1 -0
  512. package/dist/public/sdk/workers/device-linking-key.worker.js +18 -0
  513. package/dist/public/sdk/workers/ecdsa-derivation-client.worker.js +1490 -1268
  514. package/dist/public/sdk/workers/ecdsa-online-client.worker.js +96 -0
  515. package/dist/public/sdk/workers/ecdsa-presign-client.worker.js +101 -1
  516. package/dist/public/sdk/workers/email-otp.worker.js +267 -237
  517. package/dist/public/sdk/workers/evm-crypto.worker.js +12 -8
  518. package/dist/public/sdk/workers/passkey-mpc-export.worker.js +30 -1
  519. package/dist/public/sdk/workers/router_ab_ecdsa_client_bg.wasm +0 -0
  520. package/dist/public/sdk/workers/router_ab_ed25519_yao_client_bg.wasm +0 -0
  521. package/dist/public/sdk/workers/shamir3pass.worker.js +10 -8
  522. package/dist/public/sdk/workers/tempo-signer.worker.js +12 -8
  523. package/dist/public/sdk/workers/wallet-custody-ceremony.worker.js +3 -1
  524. package/dist/public/sdk/workers/wallet_custody_ceremony_bg.wasm +0 -0
  525. package/dist/public/sdk/workers/wasm_signer_worker_bg.wasm +0 -0
  526. package/dist/public/wallet-assets.manifest.json +391 -295
  527. package/dist/public/wallet-service/index.html +4 -4
  528. package/dist/types/shared-ts/src/device-linking/activeWalletSession.d.ts +2 -1
  529. package/dist/types/shared-ts/src/device-linking/contracts.d.ts +10 -0
  530. package/dist/types/shared-ts/src/threshold/ed25519OperationFingerprint.d.ts +2 -1
  531. package/dist/types/shared-ts/src/utils/emailOtpDomain.d.ts +3 -1
  532. package/dist/types/shared-ts/src/utils/routerAbPublicKeyset.d.ts +0 -9
  533. package/dist/types/shared-ts/src/utils/walletManagementProtocol.d.ts +1 -1
  534. package/dist/types/wallet/build-paths.d.ts +0 -4
  535. package/dist/types/wallet/src/SeamsWeb/SeamsWeb.d.ts +26 -146
  536. package/dist/types/wallet/src/SeamsWeb/assembly/browserSigningSurfaceAssembly.d.ts +7 -6
  537. package/dist/types/wallet/src/SeamsWeb/assembly/browserSigningSurfacePorts.d.ts +2 -4
  538. package/dist/types/wallet/src/SeamsWeb/assembly/createWalletIframeRouter.d.ts +2 -2
  539. package/dist/types/wallet/src/SeamsWeb/assembly/initializeBrowserSigningRuntime.d.ts +0 -2
  540. package/dist/types/wallet/src/SeamsWeb/index.d.ts +1 -1
  541. package/dist/types/wallet/src/SeamsWeb/operations/auth/login.d.ts +2 -8
  542. package/dist/types/wallet/src/SeamsWeb/operations/auth/unlockCompletion.d.ts +26 -0
  543. package/dist/types/wallet/src/SeamsWeb/operations/auth/unlockPendingRegistration.d.ts +14 -0
  544. package/dist/types/wallet/src/SeamsWeb/operations/auth/unlockSessionPolicy.d.ts +16 -0
  545. package/dist/types/wallet/src/SeamsWeb/operations/authMethods/emailOtp/challenge.d.ts +2 -2
  546. package/dist/types/wallet/src/SeamsWeb/operations/authMethods/emailOtp/googleEmailOtpWalletAuthFlow.d.ts +3 -2
  547. package/dist/types/wallet/src/SeamsWeb/operations/authMethods/revokeAuthMethod.d.ts +17 -1
  548. package/dist/types/wallet/src/SeamsWeb/operations/devices/linkDevice.d.ts +0 -7
  549. package/dist/types/wallet/src/SeamsWeb/operations/devices/walletHostComposition.d.ts +2 -0
  550. package/dist/types/wallet/src/SeamsWeb/operations/near/actions.d.ts +4 -21
  551. package/dist/types/wallet/src/SeamsWeb/operations/near/delegateAction.d.ts +4 -14
  552. package/dist/types/wallet/src/SeamsWeb/operations/near/signDelegateAction.d.ts +14 -0
  553. package/dist/types/wallet/src/SeamsWeb/operations/near/signNEP413.d.ts +2 -2
  554. package/dist/types/wallet/src/SeamsWeb/operations/registration/pendingEcdsaRegistrationRecovery.d.ts +11 -11
  555. package/dist/types/wallet/src/SeamsWeb/operations/registration/pendingEcdsaRegistrationRecoveryValidation.d.ts +18 -4
  556. package/dist/types/wallet/src/SeamsWeb/operations/registration/pendingRegistrationRecovery.d.ts +4 -20
  557. package/dist/types/wallet/src/SeamsWeb/operations/registration/registration.d.ts +10 -4
  558. package/dist/types/wallet/src/SeamsWeb/operations/registration/registrationEd25519Yao.d.ts +1 -1
  559. package/dist/types/wallet/src/SeamsWeb/operations/registration/registrationSignerSet.d.ts +1 -0
  560. package/dist/types/wallet/src/SeamsWeb/operations/registration/registrationTerminalCommit.d.ts +0 -4
  561. package/dist/types/wallet/src/SeamsWeb/operations/registration/registrationTiming.d.ts +2 -3
  562. package/dist/types/wallet/src/SeamsWeb/operations/tempo/index.d.ts +0 -3
  563. package/dist/types/wallet/src/SeamsWeb/publicApi/auth.d.ts +4 -13
  564. package/dist/types/wallet/src/SeamsWeb/publicApi/createPublicApi.d.ts +22 -43
  565. package/dist/types/wallet/src/SeamsWeb/publicApi/devices.d.ts +3 -21
  566. package/dist/types/wallet/src/SeamsWeb/publicApi/evm.d.ts +10 -16
  567. package/dist/types/wallet/src/SeamsWeb/publicApi/evmFamilyCommands.d.ts +6 -0
  568. package/dist/types/wallet/src/SeamsWeb/publicApi/index.d.ts +2 -2
  569. package/dist/types/wallet/src/SeamsWeb/publicApi/keyExport.d.ts +8 -16
  570. package/dist/types/wallet/src/SeamsWeb/publicApi/near.d.ts +10 -10
  571. package/dist/types/wallet/src/SeamsWeb/publicApi/nearCommands.d.ts +17 -0
  572. package/dist/types/wallet/src/SeamsWeb/publicApi/placement.d.ts +90 -0
  573. package/dist/types/wallet/src/SeamsWeb/publicApi/placement.typecheck.d.ts +2 -0
  574. package/dist/types/wallet/src/SeamsWeb/publicApi/session.d.ts +3 -0
  575. package/dist/types/wallet/src/SeamsWeb/publicApi/tempo.d.ts +11 -11
  576. package/dist/types/wallet/src/SeamsWeb/publicApi/types.d.ts +106 -243
  577. package/dist/types/wallet/src/SeamsWeb/publicApi/waitForNearAccount.d.ts +27 -0
  578. package/dist/types/wallet/src/SeamsWeb/signingSurface/BrowserSigningSurface.d.ts +33 -78
  579. package/dist/types/wallet/src/SeamsWeb/signingSurface/ports.d.ts +8 -31
  580. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/deviceCommands.d.ts +4 -0
  581. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/emailOtpCommands.d.ts +4 -0
  582. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/evmFamilyCommands.d.ts +6 -0
  583. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/inboundMessages.d.ts +62 -0
  584. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/nearCommands.d.ts +6 -0
  585. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/placementCommands.d.ts +31 -0
  586. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/preferenceState.d.ts +35 -0
  587. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/preferences.d.ts +10 -0
  588. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/registrationCommands.d.ts +6 -0
  589. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/router.d.ts +36 -121
  590. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/sessionCommands.d.ts +6 -0
  591. package/dist/types/wallet/src/SeamsWeb/walletIframe/coordinator.d.ts +29 -35
  592. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/WalletHostRuntime.d.ts +98 -0
  593. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/auth-menu/controller.d.ts +2 -2
  594. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/context.d.ts +11 -9
  595. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/createDeviceDomain.d.ts +20 -0
  596. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/createEmailOtpCommands.d.ts +11 -0
  597. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/createEvmFamilyCommands.d.ts +8 -0
  598. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/createNearCommands.d.ts +4 -0
  599. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/createPlacementCommands.d.ts +11 -0
  600. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/createRegistrationCommands.d.ts +4 -0
  601. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/createSessionCommands.d.ts +16 -0
  602. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/handlers/placement.d.ts +3 -0
  603. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/handlers/walletIframeHandler.types.d.ts +7 -3
  604. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/hostedWalletSeamsSession.d.ts +2 -0
  605. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/reconcileWalletPlacement.d.ts +10 -0
  606. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/requestRouter.d.ts +4 -4
  607. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/requestWalletMove.d.ts +11 -0
  608. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/runtimeContext.d.ts +5 -3
  609. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/runtimeLoader.d.ts +0 -1
  610. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/sessionObserver.d.ts +39 -0
  611. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/walletMoveLocator.d.ts +5 -0
  612. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/walletMutationGuard.d.ts +3 -0
  613. package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/configuration.d.ts +30 -0
  614. package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/emailOtpLifecycle.d.ts +43 -0
  615. package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/exactSessionState.d.ts +15 -0
  616. package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/facadeBoundary.d.ts +14 -0
  617. package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/messages.d.ts +35 -100
  618. package/dist/types/wallet/src/core/config/chains.d.ts +1 -3
  619. package/dist/types/wallet/src/core/config/configBuilder.d.ts +16 -6
  620. package/dist/types/wallet/src/core/config/defaultConfigs.d.ts +3 -4
  621. package/dist/types/wallet/src/core/config/defineConfig.d.ts +3 -6
  622. package/dist/types/wallet/src/core/config/presignatures.d.ts +3 -0
  623. package/dist/types/wallet/src/core/diagnostics/registration.d.ts +2 -0
  624. package/dist/types/wallet/src/core/indexedDB/normalization.d.ts +5 -0
  625. package/dist/types/wallet/src/core/indexedDB/passkeyClientDB.types.d.ts +2 -2
  626. package/dist/types/wallet/src/core/indexedDB/pendingWalletRegistrationCommit.d.ts +0 -10
  627. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/accountSignerRows.d.ts +44 -0
  628. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestStore.d.ts +0 -2
  629. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/ecdsaClientPresignatures.d.ts +0 -5
  630. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/manager.d.ts +11 -0
  631. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/nonceLeaseRows.d.ts +23 -0
  632. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/repositories.d.ts +1 -0
  633. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/signerOutboxRows.d.ts +15 -0
  634. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/walletOwnershipGeneration.d.ts +6 -0
  635. package/dist/types/wallet/src/core/indexedDB/unifiedIndexedDBManager.d.ts +1 -1
  636. package/dist/types/wallet/src/core/rpcClients/near/accountExists.d.ts +3 -0
  637. package/dist/types/wallet/src/core/rpcClients/near/rpcCalls.d.ts +1 -14
  638. package/dist/types/wallet/src/core/rpcClients/relayer/ecdsaPrepareSession.d.ts +13 -0
  639. package/dist/types/wallet/src/core/rpcClients/relayer/ownerWalletExecutionLanePreflight.d.ts +3 -3
  640. package/dist/types/wallet/src/core/rpcClients/relayer/relayerHttp.d.ts +17 -0
  641. package/dist/types/wallet/src/core/rpcClients/relayer/routerAbNormalSigning.d.ts +19 -3
  642. package/dist/types/wallet/src/core/rpcClients/relayer/walletRegistration.d.ts +29 -40
  643. package/dist/types/wallet/src/core/rpcClients/relayer/walletSessionAuthorizationStatus.d.ts +34 -0
  644. package/dist/types/wallet/src/core/signingEngine/assembly/ports/shared.d.ts +1 -1
  645. package/dist/types/wallet/src/core/signingEngine/assembly/ports/warmSigning.d.ts +2 -1
  646. package/dist/types/wallet/src/core/signingEngine/assembly/warmup.d.ts +2 -14
  647. package/dist/types/wallet/src/core/signingEngine/chains/near/nearSignerWasm.d.ts +2 -6
  648. package/dist/types/wallet/src/core/signingEngine/flows/recovery/public.d.ts +1 -1
  649. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/emailOtpPublic.d.ts +1 -32
  650. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/emailOtpSigningSession.d.ts +3 -82
  651. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/readySecp256k1Material.d.ts +62 -1
  652. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/requireEvmFamilyStepUpAuth.d.ts +1 -1
  653. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/signers/secp256k1.d.ts +4 -55
  654. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/signingFlow.d.ts +1 -1
  655. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/thresholdAdmission.d.ts +3 -2
  656. package/dist/types/wallet/src/core/signingEngine/flows/signNear/shared/ed25519YaoNormalSigning.d.ts +33 -1
  657. package/dist/types/wallet/src/core/signingEngine/flows/signNear/shared/signatureOnlySigning.d.ts +16 -2
  658. package/dist/types/wallet/src/core/signingEngine/flows/signNear/signNear.d.ts +1 -2
  659. package/dist/types/wallet/src/core/signingEngine/flows/signNear/signNep413.d.ts +1 -1
  660. package/dist/types/wallet/src/core/signingEngine/interfaces/ecdsaChainTarget.d.ts +1 -1
  661. package/dist/types/wallet/src/core/signingEngine/interfaces/near.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/otpPrompt/authLane.d.ts +6 -12
  686. package/dist/types/wallet/src/core/signingEngine/threshold/ecdsa/operationStepUp.d.ts +6 -5
  687. package/dist/types/wallet/src/core/signingEngine/threshold/ed25519/yaoClient.d.ts +6 -17
  688. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/preact/ReviewDisclosure.d.ts +1 -0
  689. package/dist/types/wallet/src/core/signingEngine/walletCustody/ceremonyDriver.d.ts +0 -1
  690. package/dist/types/wallet/src/core/signingEngine/walletCustody/walletRegistrationEd25519.d.ts +17 -0
  691. package/dist/types/wallet/src/core/signingEngine/workerManager/SignerWorkerManager.d.ts +0 -1
  692. package/dist/types/wallet/src/core/signingEngine/workerManager/ecdsaPresignLifecycle.d.ts +0 -2
  693. package/dist/types/wallet/src/core/signingEngine/workerManager/ecdsaPresignPoolIdentity.d.ts +9 -0
  694. package/dist/types/wallet/src/core/signingEngine/workerManager/workerTransport.d.ts +0 -5
  695. package/dist/types/wallet/src/core/signingEngine/workerManager/workerTypes.d.ts +15 -27
  696. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/enrollment.d.ts +1 -17
  697. package/dist/types/wallet/src/core/types/rpc.d.ts +0 -1
  698. package/dist/types/wallet/src/core/types/sdkPublicResults.d.ts +1 -0
  699. package/dist/types/wallet/src/core/types/sdkSentEvents.d.ts +2 -0
  700. package/dist/types/wallet/src/core/types/seams.d.ts +12 -9
  701. package/dist/types/wallet/src/core/types/signer-worker.d.ts +2 -1
  702. package/dist/types/wallet/src/externalEvm/controller.d.ts +5 -1
  703. package/dist/types/wallet/src/index.d.ts +5 -2
  704. package/dist/types/wallet/src/react/components/AccountMenuButton/WalletRegionSection.d.ts +54 -0
  705. package/dist/types/wallet/src/react/components/AccountMenuButton/WalletSettingsLayout.d.ts +7 -2
  706. package/dist/types/wallet/src/react/components/AccountMenuButton/index.d.ts +1 -1
  707. package/dist/types/wallet/src/react/components/AccountMenuButton/types.d.ts +1 -0
  708. package/dist/types/wallet/src/react/components/HostedSeamsAuthMenu/public.d.ts +1 -1
  709. package/dist/types/wallet/src/react/components/HostedSeamsAuthMenu/types.d.ts +2 -5
  710. package/dist/types/wallet/src/react/context/SeamsWebProvider.d.ts +0 -5
  711. package/dist/types/wallet/src/react/context/useLoginStateRefresher.d.ts +1 -1
  712. package/dist/types/wallet/src/react/context/useNearProvisioningStateRefresh.d.ts +1 -1
  713. package/dist/types/wallet/src/react/context/useSeamsContextValue.d.ts +2 -2
  714. package/dist/types/wallet/src/react/context/useWalletIframeLifecycle.d.ts +4 -2
  715. package/dist/types/wallet/src/react/hooks/useQRCamera.d.ts +1 -7
  716. package/dist/types/wallet/src/react/hooks/useWallet.d.ts +5 -6
  717. package/dist/types/wallet/src/react/hooks/useWalletAuth.d.ts +1 -1
  718. package/dist/types/wallet/src/react/hooks/useWalletDevices.d.ts +1 -1
  719. package/dist/types/wallet/src/react/index.d.ts +2 -2
  720. package/dist/types/wallet/src/react/transactionReview/boundCalls.d.ts +0 -26
  721. package/dist/types/wallet/src/react/types.d.ts +12 -20
  722. package/dist/types/wallet/src/react/utils/walletIframe.d.ts +2 -6
  723. package/dist/workers/device-linking-key.worker.js +18 -0
  724. package/dist/workers/ecdsa-derivation-client.worker.js +1490 -1268
  725. package/dist/workers/ecdsa-online-client.worker.js +96 -0
  726. package/dist/workers/ecdsa-presign-client.worker.js +101 -1
  727. package/dist/workers/email-otp.worker.js +267 -237
  728. package/dist/workers/evm-crypto.worker.js +12 -8
  729. package/dist/workers/passkey-mpc-export.worker.js +30 -1
  730. package/dist/workers/router_ab_ecdsa_client_bg.wasm +0 -0
  731. package/dist/workers/router_ab_ed25519_yao_client_bg.wasm +0 -0
  732. package/dist/workers/shamir3pass.worker.js +10 -8
  733. package/dist/workers/tempo-signer.worker.js +12 -8
  734. package/dist/workers/wallet-custody-ceremony.worker.js +3 -1
  735. package/dist/workers/wallet_custody_ceremony_bg.wasm +0 -0
  736. package/dist/workers/wasm_signer_worker_bg.wasm +0 -0
  737. package/package.json +1 -1
  738. package/dist/esm/SeamsWeb/assembly/browserSigningSurfaceAssembly.js +0 -817
  739. package/dist/esm/SeamsWeb/assembly/browserWorkerWarmupPolicy.js +0 -31
  740. package/dist/esm/SeamsWeb/assembly/configureBrowserIndexedDB.js +0 -10
  741. package/dist/esm/SeamsWeb/assembly/createBrowserRecoveryPublicDeps.js +0 -95
  742. package/dist/esm/SeamsWeb/assembly/createBrowserSigningRuntime.js +0 -34
  743. package/dist/esm/SeamsWeb/assembly/createBrowserSigningStores.js +0 -39
  744. package/dist/esm/SeamsWeb/assembly/createBrowserStepUpRuntime.js +0 -34
  745. package/dist/esm/SeamsWeb/assembly/createBrowserWarmSessionPublicDeps.js +0 -29
  746. package/dist/esm/SeamsWeb/assembly/initializeBrowserSigningRuntime.js +0 -19
  747. package/dist/esm/SeamsWeb/assembly/runtimeConfig.js +0 -12
  748. package/dist/esm/SeamsWeb/operations/auth/login.js +0 -4383
  749. package/dist/esm/SeamsWeb/operations/auth/scheduleEcdsaSessionPresignaturePrefill.js +0 -41
  750. package/dist/esm/SeamsWeb/operations/auth/scheduleLinkedDevicePresignaturePrefill.js +0 -64
  751. package/dist/esm/SeamsWeb/operations/auth/walletAuth.js +0 -142
  752. package/dist/esm/SeamsWeb/operations/auth/walletUnlockEcdsaSubject.js +0 -33
  753. package/dist/esm/SeamsWeb/operations/auth/walletUnlockSubject.js +0 -288
  754. package/dist/esm/SeamsWeb/operations/authMethods/addAuthMethodSourceClaim.js +0 -72
  755. package/dist/esm/SeamsWeb/operations/authMethods/emailOtp/addEmailOtp.js +0 -191
  756. package/dist/esm/SeamsWeb/operations/authMethods/emailOtp/challenge.js +0 -247
  757. package/dist/esm/SeamsWeb/operations/authMethods/emailOtp/googleEmailOtpWalletAuthFlow.js +0 -568
  758. package/dist/esm/SeamsWeb/operations/authMethods/emailOtp/localEmailOtpProjection.js +0 -69
  759. package/dist/esm/SeamsWeb/operations/authMethods/emailOtp/registrationAuthority.js +0 -62
  760. package/dist/esm/SeamsWeb/operations/authMethods/emailOtp/registrationOffer.js +0 -69
  761. package/dist/esm/SeamsWeb/operations/authMethods/emailOtp/walletActivation.js +0 -95
  762. package/dist/esm/SeamsWeb/operations/authMethods/passkey/addPasskey.js +0 -260
  763. package/dist/esm/SeamsWeb/operations/authMethods/passkey/ecdsaBootstrap.js +0 -17
  764. package/dist/esm/SeamsWeb/operations/authMethods/passkey/exactPasskeyAuthority.js +0 -34
  765. package/dist/esm/SeamsWeb/operations/authMethods/passkey/localUnlock.js +0 -16
  766. package/dist/esm/SeamsWeb/operations/authMethods/passkey/loginAssertion.js +0 -25
  767. package/dist/esm/SeamsWeb/operations/authMethods/passkey/registrationAuthority.js +0 -84
  768. package/dist/esm/SeamsWeb/operations/authMethods/revokeAuthMethod.js +0 -205
  769. package/dist/esm/SeamsWeb/operations/authMethods/sourcePasskeyProof.js +0 -12
  770. package/dist/esm/SeamsWeb/operations/devices/deviceLinkingAuthorityInstallation.js +0 -444
  771. package/dist/esm/SeamsWeb/operations/devices/deviceLinkingComposition.js +0 -106
  772. package/dist/esm/SeamsWeb/operations/devices/deviceLinkingEd25519ExportRoot.js +0 -194
  773. package/dist/esm/SeamsWeb/operations/devices/deviceLinkingHttpTransport.js +0 -524
  774. package/dist/esm/SeamsWeb/operations/devices/deviceLinkingOwnerTransport.js +0 -135
  775. package/dist/esm/SeamsWeb/operations/devices/deviceLinkingResume.js +0 -212
  776. package/dist/esm/SeamsWeb/operations/devices/deviceLinkingTargetCredential.js +0 -63
  777. package/dist/esm/SeamsWeb/operations/devices/deviceLinkingTargetEd25519ExportRoot.js +0 -61
  778. package/dist/esm/SeamsWeb/operations/devices/deviceLinkingWorkerChannels.js +0 -337
  779. package/dist/esm/SeamsWeb/operations/devices/linkDevice.js +0 -75
  780. package/dist/esm/SeamsWeb/operations/devices/linkDeviceFlow.js +0 -1383
  781. package/dist/esm/SeamsWeb/operations/devices/linkDeviceFlowSupport.js +0 -143
  782. package/dist/esm/SeamsWeb/operations/devices/linkDeviceTargetActivation.js +0 -119
  783. package/dist/esm/SeamsWeb/operations/devices/walletHostComposition.js +0 -130
  784. package/dist/esm/SeamsWeb/operations/devices/walletHostOwnerAuthority.js +0 -191
  785. package/dist/esm/SeamsWeb/operations/evm/index.js +0 -35
  786. package/dist/esm/SeamsWeb/operations/near/actions.js +0 -484
  787. package/dist/esm/SeamsWeb/operations/near/commandSubject.js +0 -14
  788. package/dist/esm/SeamsWeb/operations/near/index.js +0 -37
  789. package/dist/esm/SeamsWeb/operations/near/signNEP413.js +0 -116
  790. package/dist/esm/SeamsWeb/operations/recovery/accountSync.js +0 -21
  791. package/dist/esm/SeamsWeb/operations/recovery/recoveryWalletBinding.js +0 -43
  792. package/dist/esm/SeamsWeb/operations/recovery/syncAccount.js +0 -912
  793. package/dist/esm/SeamsWeb/operations/recovery/walletRecoveryCodeBackup.js +0 -100
  794. package/dist/esm/SeamsWeb/operations/recovery/walletRecoveryRotation.js +0 -213
  795. package/dist/esm/SeamsWeb/operations/registration/pendingEcdsaRegistrationRecovery.js +0 -184
  796. package/dist/esm/SeamsWeb/operations/registration/pendingEcdsaRegistrationRecoveryUnlock.js +0 -247
  797. package/dist/esm/SeamsWeb/operations/registration/pendingEcdsaRegistrationRecoveryValidation.js +0 -134
  798. package/dist/esm/SeamsWeb/operations/registration/pendingRegistrationRecovery.js +0 -354
  799. package/dist/esm/SeamsWeb/operations/registration/registration.js +0 -3818
  800. package/dist/esm/SeamsWeb/operations/registration/registrationEd25519Yao.js +0 -166
  801. package/dist/esm/SeamsWeb/operations/registration/registrationSignerSet.js +0 -60
  802. package/dist/esm/SeamsWeb/operations/registration/registrationStrictEcdsa.js +0 -343
  803. package/dist/esm/SeamsWeb/operations/registration/registrationTerminalCommit.js +0 -296
  804. package/dist/esm/SeamsWeb/operations/registration/registrationTiming.js +0 -682
  805. package/dist/esm/SeamsWeb/operations/session/thresholdEcdsaProvisioning.js +0 -36
  806. package/dist/esm/SeamsWeb/operations/session/thresholdWarmSessionBootstrap.js +0 -20
  807. package/dist/esm/SeamsWeb/publicApi/awaitNearReady.js +0 -72
  808. package/dist/esm/SeamsWeb/publicApi/preferences.js +0 -61
  809. package/dist/esm/SeamsWeb/publicApi/recovery.js +0 -19
  810. package/dist/esm/SeamsWeb/publicApi/types.js +0 -10
  811. package/dist/esm/SeamsWeb/signingSurface/BrowserSigningSurface.js +0 -3917
  812. package/dist/esm/SeamsWeb/walletIframe/host/restoredSessionPresignaturePrefill.js +0 -29
  813. package/dist/esm/core/browser/walletIframe/events.js +0 -6
  814. package/dist/esm/core/browser/walletIframe/host-mode.js +0 -9
  815. package/dist/esm/core/config/managedRuntimeScope.js +0 -16
  816. package/dist/esm/core/indexedDB/seamsWalletDB/pendingWalletRecoveryCodeBackup.js +0 -144
  817. package/dist/esm/core/platform/browser/createBrowserPlatformRuntime.js +0 -535
  818. package/dist/esm/core/platform/secretSources.js +0 -111
  819. package/dist/esm/core/platform/signerCoreCommandAdapters.js +0 -122
  820. package/dist/esm/core/rpcClients/near/rpcCalls.js +0 -376
  821. package/dist/esm/core/rpcClients/relayer/ownerWalletExecutionLanePreflight.js +0 -67
  822. package/dist/esm/core/rpcClients/relayer/passkeyCustodyEnvelope.js +0 -218
  823. package/dist/esm/core/rpcClients/relayer/sealedRefreshCapabilities.js +0 -148
  824. package/dist/esm/core/rpcClients/relayer/thresholdEcdsa.js +0 -235
  825. package/dist/esm/core/rpcClients/relayer/walletRecoveryGoogleEmailOtp.js +0 -161
  826. package/dist/esm/core/rpcClients/relayer/walletRegistrationTerminalResponse.js +0 -718
  827. package/dist/esm/core/signingEngine/assembly/createManagers.js +0 -80
  828. package/dist/esm/core/signingEngine/assembly/createPorts.js +0 -54
  829. package/dist/esm/core/signingEngine/assembly/ports/emailOtp.js +0 -30
  830. package/dist/esm/core/signingEngine/assembly/ports/evmFamily.js +0 -73
  831. package/dist/esm/core/signingEngine/assembly/ports/near.js +0 -21
  832. package/dist/esm/core/signingEngine/assembly/ports/recovery.js +0 -75
  833. package/dist/esm/core/signingEngine/assembly/ports/registration.js +0 -22
  834. package/dist/esm/core/signingEngine/assembly/ports/session.js +0 -25
  835. package/dist/esm/core/signingEngine/assembly/ports/shared.js +0 -39
  836. package/dist/esm/core/signingEngine/assembly/ports/stepUpRuntime.js +0 -67
  837. package/dist/esm/core/signingEngine/assembly/ports/warmSigning.js +0 -92
  838. package/dist/esm/core/signingEngine/assembly/warmup.js +0 -64
  839. package/dist/esm/core/signingEngine/flows/recovery/ecdsaDerivationExport.js +0 -427
  840. package/dist/esm/core/signingEngine/flows/recovery/ecdsaExportFlow.js +0 -660
  841. package/dist/esm/core/signingEngine/flows/recovery/ecdsaExportMaterial.js +0 -249
  842. package/dist/esm/core/signingEngine/flows/recovery/ed25519YaoExportFlow.js +0 -353
  843. package/dist/esm/core/signingEngine/flows/recovery/exportKeypairOperation.js +0 -213
  844. package/dist/esm/core/signingEngine/flows/recovery/exportLaneSelection.js +0 -283
  845. package/dist/esm/core/signingEngine/flows/recovery/keyExportConfirmation.js +0 -325
  846. package/dist/esm/core/signingEngine/flows/recovery/keyExportFlow.js +0 -81
  847. package/dist/esm/core/signingEngine/flows/recovery/passkeyEd25519YaoRecovery.js +0 -192
  848. package/dist/esm/core/signingEngine/flows/recovery/public.js +0 -26
  849. package/dist/esm/core/signingEngine/flows/recovery/stepUpAuthorization.js +0 -139
  850. package/dist/esm/core/signingEngine/flows/registration/nearProvisioningRegistry.js +0 -79
  851. package/dist/esm/core/signingEngine/flows/registration/public.js +0 -85
  852. package/dist/esm/core/signingEngine/flows/registration/services/ecdsaRegistrationSessions.js +0 -77
  853. package/dist/esm/core/signingEngine/flows/registration/services/passkeyEd25519YaoAddSigner.js +0 -82
  854. package/dist/esm/core/signingEngine/flows/registration/session.js +0 -24
  855. package/dist/esm/core/signingEngine/flows/signEvmFamily/emailOtpPublic.js +0 -123
  856. package/dist/esm/core/signingEngine/nonce/NonceCoordinator.js +0 -1026
  857. package/dist/esm/core/signingEngine/nonce/evmNonceLane.js +0 -182
  858. package/dist/esm/core/signingEngine/nonce/nearNonceLane.js +0 -669
  859. package/dist/esm/core/signingEngine/nonce/nonceDiagnostics.js +0 -232
  860. package/dist/esm/core/signingEngine/nonce/nonceLeaseState.js +0 -128
  861. package/dist/esm/core/signingEngine/nonce/nonceUtils.js +0 -33
  862. package/dist/esm/core/signingEngine/session/SigningSessionCoordinator.js +0 -344
  863. package/dist/esm/core/signingEngine/session/authority/authorityOperationResolver.js +0 -114
  864. package/dist/esm/core/signingEngine/session/availability/canonicalLaneInventory.js +0 -127
  865. package/dist/esm/core/signingEngine/session/availability/clientSessionExpiryInvalidator.js +0 -72
  866. package/dist/esm/core/signingEngine/session/availability/persistedAvailableSigningLanes.js +0 -214
  867. package/dist/esm/core/signingEngine/session/availability/readiness.js +0 -464
  868. package/dist/esm/core/signingEngine/session/emailOtp/EmailOtpWalletSessionCoordinator.js +0 -130
  869. package/dist/esm/core/signingEngine/session/emailOtp/ecdsaBootstrapCommit.js +0 -106
  870. package/dist/esm/core/signingEngine/session/emailOtp/ecdsaLifecycleRuntime.js +0 -47
  871. package/dist/esm/core/signingEngine/session/emailOtp/ecdsaLogin.js +0 -930
  872. package/dist/esm/core/signingEngine/session/emailOtp/ecdsaPublication.js +0 -414
  873. package/dist/esm/core/signingEngine/session/emailOtp/ecdsaRecovery.js +0 -264
  874. package/dist/esm/core/signingEngine/session/emailOtp/ed25519ExportContext.js +0 -373
  875. package/dist/esm/core/signingEngine/session/emailOtp/exportRecovery.js +0 -284
  876. package/dist/esm/core/signingEngine/session/emailOtp/exportRecoveryRuntime.js +0 -50
  877. package/dist/esm/core/signingEngine/session/emailOtp/persistedSnapshot.js +0 -22
  878. package/dist/esm/core/signingEngine/session/emailOtp/publicTypes.js +0 -38
  879. package/dist/esm/core/signingEngine/session/emailOtp/routePlan.js +0 -60
  880. package/dist/esm/core/signingEngine/session/emailOtp/runtimeConfig.js +0 -24
  881. package/dist/esm/core/signingEngine/session/emailOtp/sealedRefreshPolicy.js +0 -49
  882. package/dist/esm/core/signingEngine/session/emailOtp/sealedRestoreOrchestrator.js +0 -234
  883. package/dist/esm/core/signingEngine/session/emailOtp/sealedRuntimePurpose.js +0 -16
  884. package/dist/esm/core/signingEngine/session/emailOtp/sealedSessionRegistry.js +0 -40
  885. package/dist/esm/core/signingEngine/session/emailOtp/status.js +0 -72
  886. package/dist/esm/core/signingEngine/session/emailOtp/walletUnlock.js +0 -168
  887. package/dist/esm/core/signingEngine/session/emailOtp/warmSessionRuntime.js +0 -70
  888. package/dist/esm/core/signingEngine/session/emailOtp/workerEnrollment.js +0 -159
  889. package/dist/esm/core/signingEngine/session/emailOtp/workerRequests.js +0 -84
  890. package/dist/esm/core/signingEngine/session/emailOtp/zeroize.js +0 -9
  891. package/dist/esm/core/signingEngine/session/identity/exactWalletSessionCredential.js +0 -104
  892. package/dist/esm/core/signingEngine/session/identity/exactWalletSessionReader.js +0 -54
  893. package/dist/esm/core/signingEngine/session/identity/ownerLaneScope.js +0 -185
  894. package/dist/esm/core/signingEngine/session/lanes/walletExecutionLaneHydration.js +0 -194
  895. package/dist/esm/core/signingEngine/session/lifecycle/canonicalWalletSessionStatus.js +0 -32
  896. package/dist/esm/core/signingEngine/session/lifecycle/walletSessionStatus.js +0 -123
  897. package/dist/esm/core/signingEngine/session/material/ecdsaCapabilityHydration.js +0 -75
  898. package/dist/esm/core/signingEngine/session/material/ecdsaSealedRuntime.js +0 -197
  899. package/dist/esm/core/signingEngine/session/material/mpcCapabilityHydration.js +0 -79
  900. package/dist/esm/core/signingEngine/session/material/nearEd25519YaoSigningPreparation.js +0 -122
  901. package/dist/esm/core/signingEngine/session/material/restorableMpcMaterialRef.internal.js +0 -21
  902. package/dist/esm/core/signingEngine/session/passkey/ecdsaBootstrap.js +0 -184
  903. package/dist/esm/core/signingEngine/session/passkey/ecdsaKeyFactsInventory.js +0 -205
  904. package/dist/esm/core/signingEngine/session/passkey/ecdsaRecovery.js +0 -84
  905. package/dist/esm/core/signingEngine/session/passkey/ecdsaSessionProvision.js +0 -224
  906. package/dist/esm/core/signingEngine/session/passkey/ecdsaWarmCapabilityBootstrap.js +0 -147
  907. package/dist/esm/core/signingEngine/session/passkey/ed25519Provisioner.js +0 -55
  908. package/dist/esm/core/signingEngine/session/passkey/ed25519SessionProvision.js +0 -228
  909. package/dist/esm/core/signingEngine/session/passkey/ed25519YaoLocalMaterial.js +0 -536
  910. package/dist/esm/core/signingEngine/session/passkey/ed25519YaoRecoveryCapability.js +0 -94
  911. package/dist/esm/core/signingEngine/session/passkey/ed25519YaoSealedSession.js +0 -57
  912. package/dist/esm/core/signingEngine/session/passkey/ed25519YaoWarmRecovery.js +0 -281
  913. package/dist/esm/core/signingEngine/session/passkey/passkeyCustodySessionCache.js +0 -90
  914. package/dist/esm/core/signingEngine/session/passkey/public.js +0 -15
  915. package/dist/esm/core/signingEngine/session/passkey/unlockEcdsaWarmupPlanner.js +0 -247
  916. package/dist/esm/core/signingEngine/session/persistence/clientSessionPersistence.js +0 -135
  917. package/dist/esm/core/signingEngine/session/persistence/walletSessionAuthorizationProjection.js +0 -51
  918. package/dist/esm/core/signingEngine/session/planning/operationIdBinding.js +0 -36
  919. package/dist/esm/core/signingEngine/session/postconditions/runtimePostconditions.js +0 -163
  920. package/dist/esm/core/signingEngine/session/public.js +0 -44
  921. package/dist/esm/core/signingEngine/session/routerAbSigningWalletSession.js +0 -119
  922. package/dist/esm/core/signingEngine/session/sealedRecovery/exactRecordLookup.js +0 -148
  923. package/dist/esm/core/signingEngine/session/sealedRecovery/recoveryRecord.js +0 -248
  924. package/dist/esm/core/signingEngine/session/sealedRecovery/restoreCoordinator.js +0 -229
  925. package/dist/esm/core/signingEngine/session/userPreferences.js +0 -212
  926. package/dist/esm/core/signingEngine/session/warmCapabilities/capabilityReader.js +0 -62
  927. package/dist/esm/core/signingEngine/session/warmCapabilities/capabilityReaderCore.js +0 -293
  928. package/dist/esm/core/signingEngine/session/warmCapabilities/clearVolatileWarmSigningMaterial.js +0 -44
  929. package/dist/esm/core/signingEngine/session/warmCapabilities/ecdsaBootstrapPersistence.js +0 -107
  930. package/dist/esm/core/signingEngine/session/warmCapabilities/ecdsaBootstrapQueue.js +0 -22
  931. package/dist/esm/core/signingEngine/session/warmCapabilities/ecdsaLoginPrefill.js +0 -93
  932. package/dist/esm/core/signingEngine/session/warmCapabilities/ecdsaLoginPrefillSigningMaterialSource.js +0 -50
  933. package/dist/esm/core/signingEngine/session/warmCapabilities/ecdsaProvisionPlan.js +0 -9
  934. package/dist/esm/core/signingEngine/session/warmCapabilities/ed25519SealedSessionRuntime.js +0 -251
  935. package/dist/esm/core/signingEngine/session/warmCapabilities/nearEd25519CapabilityRehydration.js +0 -98
  936. package/dist/esm/core/signingEngine/session/warmCapabilities/public.js +0 -31
  937. package/dist/esm/core/signingEngine/session/warmCapabilities/readModel.js +0 -155
  938. package/dist/esm/core/signingEngine/session/warmCapabilities/routerAbEd25519WalletSessionState.js +0 -256
  939. package/dist/esm/core/signingEngine/session/warmCapabilities/statusReader.js +0 -100
  940. package/dist/esm/core/signingEngine/session/warmCapabilities/transitions.js +0 -47
  941. package/dist/esm/core/signingEngine/session/warmCapabilities/types.js +0 -122
  942. package/dist/esm/core/signingEngine/session/warmCapabilities/volatileWarmMaterialCommands.js +0 -45
  943. package/dist/esm/core/signingEngine/stepUpConfirmation/channel/confirmCommon.js +0 -89
  944. package/dist/esm/core/signingEngine/stepUpConfirmation/channel/confirmTypes.js +0 -12
  945. package/dist/esm/core/signingEngine/stepUpConfirmation/otpPrompt/authLane.js +0 -31
  946. package/dist/esm/core/signingEngine/stepUpConfirmation/otpPrompt/exportAuthorization.js +0 -108
  947. package/dist/esm/core/signingEngine/stepUpConfirmation/passkeyPrompt/touchIdPrompt.js +0 -271
  948. package/dist/esm/core/signingEngine/stepUpConfirmation/passkeyPrompt/webauthnPromptCoordinator.js +0 -167
  949. package/dist/esm/core/signingEngine/stepUpConfirmation/userConfirmationType.js +0 -15
  950. package/dist/esm/core/signingEngine/threshold/crypto/ed25519YaoLaneWasm.js +0 -67
  951. package/dist/esm/core/signingEngine/threshold/ecdsa/activation.js +0 -267
  952. package/dist/esm/core/signingEngine/threshold/ecdsa/bootstrapSession.js +0 -115
  953. package/dist/esm/core/signingEngine/threshold/ecdsa/postRegistrationSessionActivation.js +0 -132
  954. package/dist/esm/core/signingEngine/threshold/ecdsa/signingQueue.js +0 -16
  955. package/dist/esm/core/signingEngine/threshold/ed25519/commitQueue.js +0 -16
  956. package/dist/esm/core/signingEngine/threshold/ed25519/connectSession.js +0 -137
  957. package/dist/esm/core/signingEngine/threshold/ed25519/yaoActiveClientRegistry.js +0 -146
  958. package/dist/esm/core/signingEngine/threshold/ed25519/yaoClient.js +0 -563
  959. package/dist/esm/core/signingEngine/threshold/ed25519/yaoPageLifecycleOwner.js +0 -23
  960. package/dist/esm/core/signingEngine/uiConfirm/PasskeyMpcExportManager.js +0 -233
  961. package/dist/esm/core/signingEngine/uiConfirm/PasskeyMpcSessionDurableState.js +0 -493
  962. package/dist/esm/core/signingEngine/uiConfirm/PasskeyMpcSessionManager.js +0 -746
  963. package/dist/esm/core/signingEngine/uiConfirm/UiConfirmManager.js +0 -599
  964. package/dist/esm/core/signingEngine/uiConfirm/confirmationReadinessRegistry.js +0 -41
  965. package/dist/esm/core/signingEngine/uiConfirm/exportConfirmRequest.js +0 -149
  966. package/dist/esm/core/signingEngine/uiConfirm/handlers/determineConfirmationConfig.js +0 -82
  967. package/dist/esm/core/signingEngine/uiConfirm/handlers/flowOrchestrator.js +0 -363
  968. package/dist/esm/core/signingEngine/uiConfirm/handlers/flows/adapters/adapters.js +0 -337
  969. package/dist/esm/core/signingEngine/uiConfirm/handlers/flows/adapters/request.js +0 -120
  970. package/dist/esm/core/signingEngine/uiConfirm/handlers/flows/localOnly.js +0 -149
  971. package/dist/esm/core/signingEngine/uiConfirm/handlers/flows/registration.js +0 -235
  972. package/dist/esm/core/signingEngine/uiConfirm/handlers/flows/requestRegistrationCredentialConfirmation.js +0 -178
  973. package/dist/esm/core/signingEngine/uiConfirm/handlers/flows/signing.js +0 -684
  974. package/dist/esm/core/signingEngine/uiConfirm/handlers/handlePromptFromWorker.js +0 -90
  975. package/dist/esm/core/signingEngine/uiConfirm/ui/appearance.js +0 -27
  976. package/dist/esm/core/signingEngine/uiConfirm/ui/confirm-ui.js +0 -516
  977. package/dist/esm/core/signingEngine/uiConfirm/ui/export-private-key-reveal.js +0 -155
  978. package/dist/esm/core/signingEngine/uiConfirm/ui/export-viewer-host.js +0 -207
  979. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/ExportPrivateKeySurface.js +0 -318
  980. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/RecoveryCodeBackupSurface.js +0 -518
  981. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/confirmation-controller.js +0 -80
  982. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/mountExportPrivateKeySurface.js +0 -86
  983. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/mountRecoveryCodeBackupSurface.js +0 -82
  984. package/dist/esm/core/signingEngine/uiConfirm/ui/surface-measurement-binding.js +0 -12
  985. package/dist/esm/core/signingEngine/uiConfirm/ui/transaction-activity.js +0 -46
  986. package/dist/esm/core/signingEngine/uiConfirm/ui/transaction-display/abi/abiDecode.js +0 -315
  987. package/dist/esm/core/signingEngine/uiConfirm/ui/transaction-display/abi/enrichDisplayModelWithAbi.js +0 -77
  988. package/dist/esm/core/signingEngine/uiConfirm/ui/transaction-display/confirmation-tree.js +0 -27
  989. package/dist/esm/core/signingEngine/uiConfirm/ui/transaction-display/renderers/fallback.js +0 -52
  990. package/dist/esm/core/signingEngine/uiConfirm/ui/transaction-display/renderers/types.js +0 -62
  991. package/dist/esm/core/signingEngine/uiConfirm/ui/transaction-display/tree.js +0 -249
  992. package/dist/esm/core/signingEngine/uiConfirm/warmSessionUiConfirm.js +0 -65
  993. package/dist/esm/core/signingEngine/walletCustody/activateEd25519Capability.js +0 -122
  994. package/dist/esm/core/signingEngine/walletCustody/ceremonyActiveClientMetadata.js +0 -94
  995. package/dist/esm/core/signingEngine/walletCustody/ceremonyDriver.js +0 -171
  996. package/dist/esm/core/signingEngine/walletCustody/ceremonyStepRunner.js +0 -20
  997. package/dist/esm/core/signingEngine/walletCustody/ed25519ActiveClient.js +0 -100
  998. package/dist/esm/core/signingEngine/walletCustody/ed25519Projection.js +0 -32
  999. package/dist/esm/core/signingEngine/walletCustody/ed25519SeedMaterial.js +0 -92
  1000. package/dist/esm/core/signingEngine/walletCustody/emailOtpLink.js +0 -132
  1001. package/dist/esm/core/signingEngine/walletCustody/joinCustodyWire.js +0 -64
  1002. package/dist/esm/core/signingEngine/walletCustody/openCustodyCache.js +0 -126
  1003. package/dist/esm/core/signingEngine/walletCustody/passkeyLink.js +0 -180
  1004. package/dist/esm/core/signingEngine/walletCustody/recoveryReplacementEnvelope.js +0 -60
  1005. package/dist/esm/core/signingEngine/walletCustody/registrationCeremony.js +0 -460
  1006. package/dist/esm/core/signingEngine/walletCustody/unlockedEd25519ExportRootCapability.js +0 -258
  1007. package/dist/esm/core/signingEngine/walletCustody/walletRecoveryCredential.js +0 -23
  1008. package/dist/esm/core/signingEngine/walletCustody/walletRecoveryEcdsa.js +0 -75
  1009. package/dist/esm/core/signingEngine/walletCustody/walletRecoveryEd25519.js +0 -129
  1010. package/dist/esm/core/signingEngine/walletCustody/walletRecoveryManifest.js +0 -178
  1011. package/dist/esm/core/signingEngine/walletCustody/walletRecoveryRotation.js +0 -102
  1012. package/dist/esm/core/signingEngine/webauthnAuth/credentials/collectAuthenticationCredentialForChallengeB64u.js +0 -154
  1013. package/dist/esm/core/signingEngine/webauthnAuth/device/signerSlot.js +0 -25
  1014. package/dist/esm/core/signingEngine/webauthnAuth/walletOriginWebAuthn.js +0 -109
  1015. package/dist/esm/core/signingEngine/workerManager/SignerWorkerManager.js +0 -68
  1016. package/dist/esm/core/signingEngine/workerManager/deviceLinkingPorts.js +0 -342
  1017. package/dist/esm/core/signingEngine/workerManager/deviceLinkingSourceContribution.js +0 -158
  1018. package/dist/esm/core/signingEngine/workerManager/ecdsaClientWorkerChannels.js +0 -13
  1019. package/dist/esm/core/signingEngine/workerManager/ecdsaPresignLifecycle.js +0 -6
  1020. package/dist/esm/core/signingEngine/workerManager/workerTransport.js +0 -734
  1021. package/dist/esm/core/types/confirmationConfig.js +0 -39
  1022. package/dist/esm/core/types/secure-confirm-worker.js +0 -22
  1023. package/dist/esm/core/walletRuntimePaths/emailOtpWorker.js +0 -12
  1024. package/dist/esm/core/walletRuntimePaths/multichainWorkers.js +0 -25
  1025. package/dist/esm/core/walletRuntimePaths/walletCustodyCeremonyWorker.js +0 -18
  1026. package/dist/esm/core/walletRuntimePaths/workers.js +0 -93
  1027. package/dist/esm/react/context/useEagerPrewarm.js +0 -38
  1028. package/dist/esm/sdk/ConfirmationDrawer-DrsREojk.js +0 -1
  1029. package/dist/esm/sdk/EvmClient-DoxytQaJ.js +0 -1
  1030. package/dist/esm/sdk/NearClient-vJ65Wjrq.js +0 -1
  1031. package/dist/esm/sdk/NonceCoordinator-BBeadCSq.js +0 -1
  1032. package/dist/esm/sdk/accountLifecycle-EyfYPnuT.js +0 -1
  1033. package/dist/esm/sdk/actions-DZLxCcrU.js +0 -1
  1034. package/dist/esm/sdk/adapters-DtAyuoiA.js +0 -2
  1035. package/dist/esm/sdk/base-Xtd32asf.js +0 -1
  1036. package/dist/esm/sdk/bytes-t5S5mkat.js +0 -1
  1037. package/dist/esm/sdk/canonicalPrimitives-MPGET2cl.js +0 -1
  1038. package/dist/esm/sdk/canonicalSignerErrorCode-C0hh_SVi.js +0 -1
  1039. package/dist/esm/sdk/capabilityKinds-XaXXiD2B.js +0 -1
  1040. package/dist/esm/sdk/chains-yAls2d9X.js +0 -1
  1041. package/dist/esm/sdk/challengeDelivery-cAsaUC6U.js +0 -1
  1042. package/dist/esm/sdk/configHelpers-CseiVoZD.js +0 -1
  1043. package/dist/esm/sdk/csp-stylesheet-B1fAhrGB.js +0 -2
  1044. package/dist/esm/sdk/defaultConfigs-CWpApkMq.js +0 -1
  1045. package/dist/esm/sdk/display-jK7_hYho.js +0 -1
  1046. package/dist/esm/sdk/domainIds-GDzjOs6i.js +0 -1
  1047. package/dist/esm/sdk/ecdsaCapabilityManifest-CHFu-QrV.js +0 -1
  1048. package/dist/esm/sdk/ecdsaChainTarget-CRcRR78w.js +0 -1
  1049. package/dist/esm/sdk/ecdsaPresignLifecycle-CQnCxSlq.js +0 -1
  1050. package/dist/esm/sdk/ecdsaPresignPoolIdentity-Ci-ovDlv.js +0 -1
  1051. package/dist/esm/sdk/ecdsaWalletRecords-Cm1DdexN.js +0 -1
  1052. package/dist/esm/sdk/enrichDisplayModelWithAbi-CR-4ebuU.js +0 -1
  1053. package/dist/esm/sdk/evmCryptoWasm-CwEXiLrC.js +0 -1
  1054. package/dist/esm/sdk/evmFamilyEcdsaIdentity-Br3iFdQx.js +0 -1
  1055. package/dist/esm/sdk/exactSessionState-CjD8gekO.js +0 -210
  1056. package/dist/esm/sdk/exactSigningLaneIdentity-olheZx_n.js +0 -1
  1057. package/dist/esm/sdk/export-viewer-host-jo7h_0wl.js +0 -1
  1058. package/dist/esm/sdk/helpers-D4QckQhq.js +0 -1
  1059. package/dist/esm/sdk/host-BAqOYnju.js +0 -1
  1060. package/dist/esm/sdk/intentDigest-CB6zy3lN.js +0 -1
  1061. package/dist/esm/sdk/jsxRuntime.module-CoHsKD_3.js +0 -1
  1062. package/dist/esm/sdk/keyMaterialBrands-uVZHfAh3.js +0 -1
  1063. package/dist/esm/sdk/localOnly-DBQRG6Qh.js +0 -1
  1064. package/dist/esm/sdk/messages-Cv2j4SKI.js +0 -1
  1065. package/dist/esm/sdk/mountExportPrivateKeySurface-G7Z_9JMQ.js +0 -1
  1066. package/dist/esm/sdk/mountRecoveryCodeBackupSurface-BBCTaQsu.js +0 -2
  1067. package/dist/esm/sdk/nearEd25519YaoMaterialActivation-DQIw8ho3.js +0 -1
  1068. package/dist/esm/sdk/nearEd25519YaoSigningPreparation-Bp_CvWRz.js +0 -1
  1069. package/dist/esm/sdk/nearRpcResults--cBcfmp4.js +0 -1
  1070. package/dist/esm/sdk/nonceLaneKeys-BBYi4g51.js +0 -1
  1071. package/dist/esm/sdk/normalization-BGPR6osg.js +0 -1
  1072. package/dist/esm/sdk/operationFingerprint-5-wH2Ht8.js +0 -1
  1073. package/dist/esm/sdk/operationFingerprint-DtQb0pdp.js +0 -1
  1074. package/dist/esm/sdk/passkey-custody-LP4UTFbn.js +0 -1
  1075. package/dist/esm/sdk/pendingWalletRecoveryCodeBackup-BNk4ebsY.js +0 -1
  1076. package/dist/esm/sdk/prfCache-Mbo7_USg.js +0 -1
  1077. package/dist/esm/sdk/promptText-s8TQ6ckX.js +0 -1
  1078. package/dist/esm/sdk/recovery-entrypoint-DkT8sFO5.js +0 -1
  1079. package/dist/esm/sdk/registration-Btozh7uh.js +0 -1
  1080. package/dist/esm/sdk/registration-CSAG_h4Y.js +0 -1
  1081. package/dist/esm/sdk/registrationAccounts-DIeEVy6W.js +0 -1
  1082. package/dist/esm/sdk/registrationIds-BIel5S0i.js +0 -1
  1083. package/dist/esm/sdk/registrationIntent-DV1GYZ3K.js +0 -1
  1084. package/dist/esm/sdk/registrationPreparationPreload-vOCqNuG4.js +0 -1
  1085. package/dist/esm/sdk/registrationSignerPlan-FzD3TwxB.js +0 -1
  1086. package/dist/esm/sdk/relayerHttp-DaPeS929.js +0 -1
  1087. package/dist/esm/sdk/routePlan-B_KJaPtm.js +0 -1
  1088. package/dist/esm/sdk/router-Dd3fFHk3.js +0 -1
  1089. package/dist/esm/sdk/routerAbNormalSigning-D_fHjq5l.js +0 -1
  1090. package/dist/esm/sdk/runtime-auth-B2M91rSx.js +0 -1
  1091. package/dist/esm/sdk/runtime-device-link-ojjPSRaG.js +0 -1
  1092. package/dist/esm/sdk/runtime-ecdsa-tempo-CE4JLgmn.js +0 -1
  1093. package/dist/esm/sdk/runtime-email-otp-DDwtKVAe.js +0 -1
  1094. package/dist/esm/sdk/runtime-export-JXYk8sQ-.js +0 -1
  1095. package/dist/esm/sdk/runtime-near-BB8AG6dV.js +0 -1
  1096. package/dist/esm/sdk/runtime-preferences-DKFZYccW.js +0 -1
  1097. package/dist/esm/sdk/runtime-recovery-C_XjsDBg.js +0 -1
  1098. package/dist/esm/sdk/runtime-recovery-codes-CWp839mH.js +0 -1
  1099. package/dist/esm/sdk/runtimeContext-BpObgzbj.js +0 -6
  1100. package/dist/esm/sdk/runtimeLoader-DjgBf_yF.js +0 -1
  1101. package/dist/esm/sdk/sdkSentEvents-_RGAEeld.js +0 -1
  1102. package/dist/esm/sdk/secp256k1-B_6W9QDJ.js +0 -1
  1103. package/dist/esm/sdk/secureRandomId-CTdlJ5Mx.js +0 -1
  1104. package/dist/esm/sdk/sessionPolicy-CNVK7nJ6.js +0 -1
  1105. package/dist/esm/sdk/shared-j_KsFbCT.js +0 -1
  1106. package/dist/esm/sdk/signEvmFamily-CcLVBm0f.js +0 -1
  1107. package/dist/esm/sdk/signEvmFamilyWithUiConfirmForTempo-DgTbh6jX.js +0 -1
  1108. package/dist/esm/sdk/signEvmWithUiConfirm-ChreN7aZ.js +0 -1
  1109. package/dist/esm/sdk/signNear-mWbTE2Dl.js +0 -1
  1110. package/dist/esm/sdk/signatureUses-CQkkUcwT.js +0 -1
  1111. package/dist/esm/sdk/signerDomain-BhUTzDmF.js +0 -1
  1112. package/dist/esm/sdk/signerLoader-By0IY24G.js +0 -1
  1113. package/dist/esm/sdk/signingFlow-LUWrZi2d.js +0 -2
  1114. package/dist/esm/sdk/signingSessionSeal-Mr2Xp44o.js +0 -1
  1115. package/dist/esm/sdk/trace-M34pNGuF.js +0 -1
  1116. package/dist/esm/sdk/transaction-activity-BbDod7ji.js +0 -1
  1117. package/dist/esm/sdk/transactionReview-CBE5oH4c.js +0 -1
  1118. package/dist/esm/sdk/transactionReviewAdmission-0ZgWs6q3.js +0 -1
  1119. package/dist/esm/sdk/transactionState-9d7f3xVj.js +0 -1
  1120. package/dist/esm/sdk/types-M7vxrYtJ.js +0 -1
  1121. package/dist/esm/sdk/validation-dC1-_uyG.js +0 -1
  1122. package/dist/esm/sdk/wallet-recovery-CcDZ1hMH.js +0 -1
  1123. package/dist/esm/sdk/walletAuthority-CoWSeqvQ.js +0 -1
  1124. package/dist/esm/sdk/walletCustodyEcdsaContinuity-B7xi7nwh.js +0 -1
  1125. package/dist/esm/sdk/walletIframeIdentity-C0b0XMQF.js +0 -1
  1126. package/dist/esm/sdk/walletRecoveryCommit-ljxVeo-d.js +0 -1
  1127. package/dist/esm/sdk/walletRecoveryRotate-HztDcDaY.js +0 -1
  1128. package/dist/esm/sdk/warmSessionHydration-BPGM0YRU.js +0 -1
  1129. package/dist/esm/sdk/webauthnP256-qu06GNFm.js +0 -1
  1130. package/dist/esm/sdk/webauthnPromptCoordinator-DO-qfECu.js +0 -1
  1131. package/dist/esm/shared-ts/src/authorization/walletCustodyOperation.js +0 -16
  1132. package/dist/esm/shared-ts/src/device-linking/contracts.js +0 -8
  1133. package/dist/esm/shared-ts/src/device-linking/ed25519ExportRoot.js +0 -167
  1134. package/dist/esm/shared-ts/src/passkey-custody/ceremonyCommitPayload.js +0 -43
  1135. package/dist/esm/shared-ts/src/signing-lanes/participants.js +0 -256
  1136. package/dist/esm/shared-ts/src/signing-lanes/recordParsers.js +0 -479
  1137. package/dist/esm/shared-ts/src/threshold/secp256k1.js +0 -6
  1138. package/dist/esm/shared-ts/src/utils/addAuthMethodRegistration.js +0 -103
  1139. package/dist/esm/shared-ts/src/utils/ecdsaKeyFactsInventory.js +0 -43
  1140. package/dist/esm/shared-ts/src/utils/exactKeys.js +0 -17
  1141. package/dist/esm/shared-ts/src/utils/routerAbTraceContext.js +0 -36
  1142. package/dist/esm/shared-ts/src/utils/walletAddSignerActivation.js +0 -32
  1143. package/dist/public/sdk/ConfirmationDrawer-DrsREojk.js +0 -1
  1144. package/dist/public/sdk/EvmClient-DoxytQaJ.js +0 -1
  1145. package/dist/public/sdk/NearClient-vJ65Wjrq.js +0 -1
  1146. package/dist/public/sdk/NonceCoordinator-BBeadCSq.js +0 -1
  1147. package/dist/public/sdk/accountLifecycle-EyfYPnuT.js +0 -1
  1148. package/dist/public/sdk/actions-DZLxCcrU.js +0 -1
  1149. package/dist/public/sdk/adapters-DtAyuoiA.js +0 -2
  1150. package/dist/public/sdk/base-Xtd32asf.js +0 -1
  1151. package/dist/public/sdk/bytes-t5S5mkat.js +0 -1
  1152. package/dist/public/sdk/canonicalPrimitives-MPGET2cl.js +0 -1
  1153. package/dist/public/sdk/canonicalSignerErrorCode-C0hh_SVi.js +0 -1
  1154. package/dist/public/sdk/capabilityKinds-XaXXiD2B.js +0 -1
  1155. package/dist/public/sdk/chains-yAls2d9X.js +0 -1
  1156. package/dist/public/sdk/challengeDelivery-cAsaUC6U.js +0 -1
  1157. package/dist/public/sdk/configHelpers-CseiVoZD.js +0 -1
  1158. package/dist/public/sdk/csp-stylesheet-B1fAhrGB.js +0 -2
  1159. package/dist/public/sdk/defaultConfigs-CWpApkMq.js +0 -1
  1160. package/dist/public/sdk/display-jK7_hYho.js +0 -1
  1161. package/dist/public/sdk/domainIds-GDzjOs6i.js +0 -1
  1162. package/dist/public/sdk/ecdsaCapabilityManifest-CHFu-QrV.js +0 -1
  1163. package/dist/public/sdk/ecdsaChainTarget-CRcRR78w.js +0 -1
  1164. package/dist/public/sdk/ecdsaPresignLifecycle-CQnCxSlq.js +0 -1
  1165. package/dist/public/sdk/ecdsaPresignPoolIdentity-Ci-ovDlv.js +0 -1
  1166. package/dist/public/sdk/ecdsaWalletRecords-Cm1DdexN.js +0 -1
  1167. package/dist/public/sdk/enrichDisplayModelWithAbi-CR-4ebuU.js +0 -1
  1168. package/dist/public/sdk/evmCryptoWasm-CwEXiLrC.js +0 -1
  1169. package/dist/public/sdk/evmFamilyEcdsaIdentity-Br3iFdQx.js +0 -1
  1170. package/dist/public/sdk/exactSessionState-CjD8gekO.js +0 -210
  1171. package/dist/public/sdk/exactSigningLaneIdentity-olheZx_n.js +0 -1
  1172. package/dist/public/sdk/export-viewer-host-jo7h_0wl.js +0 -1
  1173. package/dist/public/sdk/helpers-D4QckQhq.js +0 -1
  1174. package/dist/public/sdk/host-BAqOYnju.js +0 -1
  1175. package/dist/public/sdk/intentDigest-CB6zy3lN.js +0 -1
  1176. package/dist/public/sdk/jsxRuntime.module-CoHsKD_3.js +0 -1
  1177. package/dist/public/sdk/keyMaterialBrands-uVZHfAh3.js +0 -1
  1178. package/dist/public/sdk/localOnly-DBQRG6Qh.js +0 -1
  1179. package/dist/public/sdk/messages-Cv2j4SKI.js +0 -1
  1180. package/dist/public/sdk/mountExportPrivateKeySurface-G7Z_9JMQ.js +0 -1
  1181. package/dist/public/sdk/mountRecoveryCodeBackupSurface-BBCTaQsu.js +0 -2
  1182. package/dist/public/sdk/nearEd25519YaoMaterialActivation-DQIw8ho3.js +0 -1
  1183. package/dist/public/sdk/nearEd25519YaoSigningPreparation-Bp_CvWRz.js +0 -1
  1184. package/dist/public/sdk/nearRpcResults--cBcfmp4.js +0 -1
  1185. package/dist/public/sdk/nonceLaneKeys-BBYi4g51.js +0 -1
  1186. package/dist/public/sdk/normalization-BGPR6osg.js +0 -1
  1187. package/dist/public/sdk/operationFingerprint-5-wH2Ht8.js +0 -1
  1188. package/dist/public/sdk/operationFingerprint-DtQb0pdp.js +0 -1
  1189. package/dist/public/sdk/passkey-custody-LP4UTFbn.js +0 -1
  1190. package/dist/public/sdk/pendingWalletRecoveryCodeBackup-BNk4ebsY.js +0 -1
  1191. package/dist/public/sdk/prfCache-Mbo7_USg.js +0 -1
  1192. package/dist/public/sdk/promptText-s8TQ6ckX.js +0 -1
  1193. package/dist/public/sdk/recovery-entrypoint-DkT8sFO5.js +0 -1
  1194. package/dist/public/sdk/registration-Btozh7uh.js +0 -1
  1195. package/dist/public/sdk/registration-CSAG_h4Y.js +0 -1
  1196. package/dist/public/sdk/registrationAccounts-DIeEVy6W.js +0 -1
  1197. package/dist/public/sdk/registrationIds-BIel5S0i.js +0 -1
  1198. package/dist/public/sdk/registrationIntent-DV1GYZ3K.js +0 -1
  1199. package/dist/public/sdk/registrationPreparationPreload-vOCqNuG4.js +0 -1
  1200. package/dist/public/sdk/registrationSignerPlan-FzD3TwxB.js +0 -1
  1201. package/dist/public/sdk/relayerHttp-DaPeS929.js +0 -1
  1202. package/dist/public/sdk/routePlan-B_KJaPtm.js +0 -1
  1203. package/dist/public/sdk/router-Dd3fFHk3.js +0 -1
  1204. package/dist/public/sdk/routerAbNormalSigning-D_fHjq5l.js +0 -1
  1205. package/dist/public/sdk/runtime-auth-B2M91rSx.js +0 -1
  1206. package/dist/public/sdk/runtime-device-link-ojjPSRaG.js +0 -1
  1207. package/dist/public/sdk/runtime-ecdsa-tempo-CE4JLgmn.js +0 -1
  1208. package/dist/public/sdk/runtime-email-otp-DDwtKVAe.js +0 -1
  1209. package/dist/public/sdk/runtime-export-JXYk8sQ-.js +0 -1
  1210. package/dist/public/sdk/runtime-near-BB8AG6dV.js +0 -1
  1211. package/dist/public/sdk/runtime-preferences-DKFZYccW.js +0 -1
  1212. package/dist/public/sdk/runtime-recovery-C_XjsDBg.js +0 -1
  1213. package/dist/public/sdk/runtime-recovery-codes-CWp839mH.js +0 -1
  1214. package/dist/public/sdk/runtimeContext-BpObgzbj.js +0 -6
  1215. package/dist/public/sdk/runtimeLoader-DjgBf_yF.js +0 -1
  1216. package/dist/public/sdk/sdkSentEvents-_RGAEeld.js +0 -1
  1217. package/dist/public/sdk/secp256k1-B_6W9QDJ.js +0 -1
  1218. package/dist/public/sdk/secureRandomId-CTdlJ5Mx.js +0 -1
  1219. package/dist/public/sdk/sessionPolicy-CNVK7nJ6.js +0 -1
  1220. package/dist/public/sdk/shared-j_KsFbCT.js +0 -1
  1221. package/dist/public/sdk/signEvmFamily-CcLVBm0f.js +0 -1
  1222. package/dist/public/sdk/signEvmFamilyWithUiConfirmForTempo-DgTbh6jX.js +0 -1
  1223. package/dist/public/sdk/signEvmWithUiConfirm-ChreN7aZ.js +0 -1
  1224. package/dist/public/sdk/signNear-mWbTE2Dl.js +0 -1
  1225. package/dist/public/sdk/signatureUses-CQkkUcwT.js +0 -1
  1226. package/dist/public/sdk/signerDomain-BhUTzDmF.js +0 -1
  1227. package/dist/public/sdk/signerLoader-By0IY24G.js +0 -1
  1228. package/dist/public/sdk/signingFlow-LUWrZi2d.js +0 -2
  1229. package/dist/public/sdk/signingSessionSeal-Mr2Xp44o.js +0 -1
  1230. package/dist/public/sdk/trace-M34pNGuF.js +0 -1
  1231. package/dist/public/sdk/transaction-activity-BbDod7ji.js +0 -1
  1232. package/dist/public/sdk/transactionReview-CBE5oH4c.js +0 -1
  1233. package/dist/public/sdk/transactionReviewAdmission-0ZgWs6q3.js +0 -1
  1234. package/dist/public/sdk/transactionState-9d7f3xVj.js +0 -1
  1235. package/dist/public/sdk/types-M7vxrYtJ.js +0 -1
  1236. package/dist/public/sdk/validation-dC1-_uyG.js +0 -1
  1237. package/dist/public/sdk/wallet-recovery-CcDZ1hMH.js +0 -1
  1238. package/dist/public/sdk/walletAuthority-CoWSeqvQ.js +0 -1
  1239. package/dist/public/sdk/walletCustodyEcdsaContinuity-B7xi7nwh.js +0 -1
  1240. package/dist/public/sdk/walletIframeIdentity-C0b0XMQF.js +0 -1
  1241. package/dist/public/sdk/walletRecoveryCommit-ljxVeo-d.js +0 -1
  1242. package/dist/public/sdk/walletRecoveryRotate-HztDcDaY.js +0 -1
  1243. package/dist/public/sdk/warmSessionHydration-BPGM0YRU.js +0 -1
  1244. package/dist/public/sdk/webauthnP256-qu06GNFm.js +0 -1
  1245. package/dist/public/sdk/webauthnPromptCoordinator-DO-qfECu.js +0 -1
  1246. package/dist/public/sdk/workers/evm_crypto.wasm +0 -0
  1247. package/dist/public/sdk/workers/near_signer.wasm +0 -0
  1248. package/dist/public/sdk/workers/tempo_signer.wasm +0 -0
  1249. package/dist/types/wallet/src/SeamsWeb/assembly/browserWorkerWarmupPolicy.d.ts +0 -4
  1250. package/dist/types/wallet/src/SeamsWeb/assembly/configureBrowserIndexedDB.d.ts +0 -3
  1251. package/dist/types/wallet/src/SeamsWeb/operations/auth/walletAuth.d.ts +0 -56
  1252. package/dist/types/wallet/src/SeamsWeb/operations/evm/index.d.ts +0 -9
  1253. package/dist/types/wallet/src/SeamsWeb/operations/near/index.d.ts +0 -11
  1254. package/dist/types/wallet/src/SeamsWeb/operations/recovery/accountSync.d.ts +0 -19
  1255. package/dist/types/wallet/src/SeamsWeb/publicApi/awaitNearReady.d.ts +0 -27
  1256. package/dist/types/wallet/src/SeamsWeb/publicApi/devices.typecheck.d.ts +0 -2
  1257. package/dist/types/wallet/src/SeamsWeb/publicApi/preferences.d.ts +0 -8
  1258. package/dist/types/wallet/src/SeamsWeb/publicApi/recovery.d.ts +0 -14
  1259. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/config-guards.d.ts +0 -15
  1260. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/registrationPreparationPreload.d.ts +0 -2
  1261. package/dist/types/wallet/src/core/signingEngine/flows/registration/public.d.ts +0 -68
  1262. package/dist/types/wallet/src/react/context/useEagerPrewarm.d.ts +0 -3
  1263. package/dist/workers/evm_crypto.wasm +0 -0
  1264. package/dist/workers/near_signer.wasm +0 -0
  1265. package/dist/workers/tempo_signer.wasm +0 -0
  1266. /package/dist/esm/sdk/{accountIds-C3Ihsd2c.js → accountIds-BzZs7YoX.js} +0 -0
  1267. /package/dist/esm/sdk/{base64-ojm5DKcF.js → base64-CsEj-_bC.js} +0 -0
  1268. /package/dist/esm/sdk/{browser-CsOGMbMy.js → browser-D4wUl_77.js} +0 -0
  1269. /package/dist/esm/sdk/{errors-DfbnsXjO.js → errors-BZO3LF6G.js} +0 -0
  1270. /package/dist/esm/sdk/{events-BJyVcnsn.js → events-DsQJQ0Cl.js} +0 -0
  1271. /package/dist/esm/sdk/{executeWorkerOperation-CrFf3FkL.js → executeWorkerOperation-BInr8RYN.js} +0 -0
  1272. /package/dist/esm/sdk/{jsonRpc-C85RYR0A.js → jsonRpc-DrCYQIM9.js} +0 -0
  1273. /package/dist/esm/sdk/{keccak-zexutGfG.js → keccak-B02Fekdh.js} +0 -0
  1274. /package/dist/esm/sdk/{profileAccountProjection-DHCaMtOu.js → profileAccountProjection-DmmfMood.js} +0 -0
  1275. /package/dist/esm/sdk/{signerSlot-BQ1g5JNV.js → signerSlot-Dto7dObP.js} +0 -0
  1276. /package/dist/esm/sdk/{surface-measurement-reporter-OICExWKE.js → surface-measurement-reporter-IlPOI3QK.js} +0 -0
  1277. /package/dist/public/sdk/{accountIds-C3Ihsd2c.js → accountIds-BzZs7YoX.js} +0 -0
  1278. /package/dist/public/sdk/{base64-ojm5DKcF.js → base64-CsEj-_bC.js} +0 -0
  1279. /package/dist/public/sdk/{browser-CsOGMbMy.js → browser-D4wUl_77.js} +0 -0
  1280. /package/dist/public/sdk/{errors-DfbnsXjO.js → errors-BZO3LF6G.js} +0 -0
  1281. /package/dist/public/sdk/{events-BJyVcnsn.js → events-DsQJQ0Cl.js} +0 -0
  1282. /package/dist/public/sdk/{executeWorkerOperation-CrFf3FkL.js → executeWorkerOperation-BInr8RYN.js} +0 -0
  1283. /package/dist/public/sdk/{jsonRpc-C85RYR0A.js → jsonRpc-DrCYQIM9.js} +0 -0
  1284. /package/dist/public/sdk/{keccak-zexutGfG.js → keccak-B02Fekdh.js} +0 -0
  1285. /package/dist/public/sdk/{profileAccountProjection-DHCaMtOu.js → profileAccountProjection-DmmfMood.js} +0 -0
  1286. /package/dist/public/sdk/{signerSlot-BQ1g5JNV.js → signerSlot-Dto7dObP.js} +0 -0
  1287. /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