@seams/wallet 0.7.3 → 0.8.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 (1693) hide show
  1. package/README.md +4 -5
  2. package/THIRD_PARTY_NOTICES.md +1 -9
  3. package/dist/.build-inputs.sha256 +1 -1
  4. package/dist/esm/SeamsWeb/SeamsWeb.js +2 -2
  5. package/dist/esm/SeamsWeb/assembly/browserSigningSurfaceAssembly.js +2 -2
  6. package/dist/esm/SeamsWeb/assembly/createBrowserRecoveryPublicDeps.js +1 -1
  7. package/dist/esm/SeamsWeb/assembly/createBrowserSigningStores.js +1 -1
  8. package/dist/esm/SeamsWeb/assembly/createBrowserWarmSessionPublicDeps.js +0 -2
  9. package/dist/esm/SeamsWeb/operations/auth/login.js +18 -43
  10. package/dist/esm/SeamsWeb/operations/auth/walletUnlockSubject.js +2 -8
  11. package/dist/esm/SeamsWeb/operations/authMethods/emailOtp/addEmailOtp.js +1 -1
  12. package/dist/esm/SeamsWeb/operations/authMethods/emailOtp/googleEmailOtpWalletAuthFlow.js +5 -9
  13. package/dist/esm/SeamsWeb/operations/authMethods/passkey/addPasskey.js +1 -1
  14. package/dist/esm/SeamsWeb/operations/authMethods/revokeAuthMethod.js +1 -1
  15. package/dist/esm/SeamsWeb/operations/devices/deviceLinkingResume.js +1 -4
  16. package/dist/esm/SeamsWeb/operations/devices/linkDeviceFlow.js +38 -13
  17. package/dist/esm/SeamsWeb/operations/devices/scanDevice.js +1 -1
  18. package/dist/esm/SeamsWeb/operations/near/signNEP413.js +0 -1
  19. package/dist/esm/SeamsWeb/operations/recovery/syncAccount.js +2 -4
  20. package/dist/esm/SeamsWeb/operations/recovery/walletRecovery.js +1 -2
  21. package/dist/esm/SeamsWeb/operations/recovery/walletRecoveryCommit.js +4 -5
  22. package/dist/esm/SeamsWeb/operations/recovery/walletRecoveryDurablePayload.js +1 -2
  23. package/dist/esm/SeamsWeb/operations/recovery/walletRecoveryRotation.js +1 -2
  24. package/dist/esm/SeamsWeb/operations/registration/pendingRegistrationRecovery.js +3 -12
  25. package/dist/esm/SeamsWeb/operations/registration/registration.js +5 -5
  26. package/dist/esm/SeamsWeb/operations/registration/registrationStrictEcdsa.js +1 -1
  27. package/dist/esm/SeamsWeb/operations/registration/registrationTerminalCommit.js +1 -1
  28. package/dist/esm/SeamsWeb/operations/session/thresholdEcdsaProvisioning.js +2 -6
  29. package/dist/esm/SeamsWeb/publicApi/near.js +1 -1
  30. package/dist/esm/SeamsWeb/publicApi/transactionReview.js +4 -1
  31. package/dist/esm/SeamsWeb/signingSurface/BrowserSigningSurface.js +4 -4
  32. package/dist/esm/SeamsWeb/walletIframe/client/router.js +1 -2
  33. package/dist/esm/SeamsWeb/walletIframe/client/surface/domain.js +0 -2
  34. package/dist/esm/SeamsWeb/walletIframe/client/transport/IframeTransport.js +0 -4
  35. package/dist/esm/SeamsWeb/walletIframe/client/transport/iframe-transport-handshake.js +1 -1
  36. package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/AuthMenuFooter.js +64 -0
  37. package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/AuthMenuSurface.js +165 -222
  38. package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/icons.js +136 -0
  39. package/dist/esm/SeamsWeb/walletIframe/shared/messages.js +6 -6
  40. package/dist/esm/SeamsWeb/walletIframe/shared/transactionReview.js +11 -1
  41. package/dist/esm/advanced.js +0 -1
  42. package/dist/esm/base-styles.js +2 -2
  43. package/dist/esm/core/accountData/near/accountProjection.js +0 -1
  44. package/dist/esm/core/accountData/near/keyMaterial.js +0 -1
  45. package/dist/esm/core/browser/walletIframe/events.js +1 -5
  46. package/dist/esm/core/browser/walletIframe/host-mode.js +0 -10
  47. package/dist/esm/core/config/chains.js +1 -2
  48. package/dist/esm/core/config/configBuilder.js +0 -1
  49. package/dist/esm/core/config/configHelpers.js +0 -1
  50. package/dist/esm/core/indexedDB/accountKeyMaterial.js +0 -1
  51. package/dist/esm/core/indexedDB/index.js +3 -4
  52. package/dist/esm/core/indexedDB/pendingWalletRecoveryCommit.js +1 -4
  53. package/dist/esm/core/indexedDB/schemaNames.js +0 -22
  54. package/dist/esm/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestRecords.js +3 -3
  55. package/dist/esm/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestStore.js +3 -3
  56. package/dist/esm/core/indexedDB/seamsWalletDB/ecdsaClientPresignatures.js +1 -1
  57. package/dist/esm/core/indexedDB/seamsWalletDB/pendingWalletRecoveryCodeBackup.js +0 -1
  58. package/dist/esm/core/indexedDB/seamsWalletDB/registrationSetup.js +103 -0
  59. package/dist/esm/core/indexedDB/seamsWalletDB/repositories.js +2 -3
  60. package/dist/esm/core/indexedDB/seamsWalletDB/signingSessionSeals.js +0 -35
  61. package/dist/esm/core/indexedDB/seamsWalletDB/walletCustodyEcdsaContinuity.js +4 -4
  62. package/dist/esm/core/indexedDB/seamsWalletDB/walletSessionAuthorizationStore.js +37 -19
  63. package/dist/esm/core/indexedDB/unifiedIndexedDBManager.js +10 -3
  64. package/dist/esm/core/indexedDB/walletCustodyEd25519MaterialRecord.js +1 -1
  65. package/dist/esm/core/platform/browser/createBrowserPlatformRuntime.js +8 -25
  66. package/dist/esm/core/rpcClients/near/rpcCalls.js +39 -1
  67. package/dist/esm/core/rpcClients/relayer/passkeyCustodyEnvelope.js +3 -13
  68. package/dist/esm/core/rpcClients/relayer/thresholdEcdsa.js +0 -2
  69. package/dist/esm/core/rpcClients/relayer/walletRecoveryPrepare.js +3 -4
  70. package/dist/esm/core/rpcClients/relayer/walletRegistration.js +21 -15
  71. package/dist/esm/core/rpcClients/relayer/walletRegistrationTerminalResponse.js +1 -2
  72. package/dist/esm/core/signingEngine/assembly/createManagers.js +1 -1
  73. package/dist/esm/core/signingEngine/assembly/ports/shared.js +1 -2
  74. package/dist/esm/core/signingEngine/assembly/warmup.js +1 -5
  75. package/dist/esm/core/signingEngine/chains/near/nearSignerWasm.js +2 -33
  76. package/dist/esm/core/signingEngine/flows/recovery/ecdsaDerivationExport.js +0 -1
  77. package/dist/esm/core/signingEngine/flows/recovery/ecdsaExportMaterial.js +0 -1
  78. package/dist/esm/core/signingEngine/flows/recovery/passkeyEd25519YaoRecovery.js +1 -1
  79. package/dist/esm/core/signingEngine/flows/recovery/stepUpAuthorization.js +1 -1
  80. package/dist/esm/core/signingEngine/flows/registration/accountLifecycle.js +3 -8
  81. package/dist/esm/core/signingEngine/flows/registration/services/passkeyEd25519YaoAddSigner.js +1 -2
  82. package/dist/esm/core/signingEngine/flows/shared/signingStateMachine.js +2 -5
  83. package/dist/esm/core/signingEngine/flows/signEvmFamily/readySecp256k1Material.js +0 -2
  84. package/dist/esm/core/signingEngine/flows/signEvmFamily/signingFlow.js +1 -1
  85. package/dist/esm/core/signingEngine/flows/signEvmFamily/transactionExecutor.js +1 -2
  86. package/dist/esm/core/signingEngine/flows/signNear/implicitAccountFunding.js +1 -1
  87. package/dist/esm/core/signingEngine/flows/signNear/shared/ed25519YaoNormalSigning.js +33 -42
  88. package/dist/esm/core/signingEngine/flows/signNear/shared/signatureOnlySigning.js +0 -2
  89. package/dist/esm/core/signingEngine/flows/signNear/shared/signingMaterials.js +1 -7
  90. package/dist/esm/core/signingEngine/flows/signNear/shared/signingSessionAuthMode.js +4 -14
  91. package/dist/esm/core/signingEngine/flows/signNear/signDelegate.js +2 -6
  92. package/dist/esm/core/signingEngine/flows/signNear/signNep413.js +2 -6
  93. package/dist/esm/core/signingEngine/nonce/NonceCoordinator.js +1 -1
  94. package/dist/esm/core/signingEngine/nonce/nearNonceLane.js +1 -1
  95. package/dist/esm/core/signingEngine/nonce/nonceDiagnostics.js +1 -1
  96. package/dist/esm/core/signingEngine/routerAb/ecdsaDerivation/poolFillRoutes.js +0 -1
  97. package/dist/esm/core/signingEngine/routerAb/ecdsaDerivation/presignaturePool.js +0 -1
  98. package/dist/esm/core/signingEngine/routerAb/ecdsaDerivation/signingMaterialRef.js +0 -3
  99. package/dist/esm/core/signingEngine/session/SigningSessionCoordinator.js +1 -4
  100. package/dist/esm/core/signingEngine/session/authority/authorityOperationResolver.js +17 -68
  101. package/dist/esm/core/signingEngine/session/emailOtp/EmailOtpWalletSessionCoordinator.js +0 -1
  102. package/dist/esm/core/signingEngine/session/emailOtp/ecdsaBootstrapCommit.js +1 -1
  103. package/dist/esm/core/signingEngine/session/emailOtp/ecdsaLifecycleRuntime.js +0 -3
  104. package/dist/esm/core/signingEngine/session/emailOtp/ecdsaLogin.js +1 -7
  105. package/dist/esm/core/signingEngine/session/emailOtp/ecdsaRecovery.js +10 -14
  106. package/dist/esm/core/signingEngine/session/emailOtp/ed25519ExportContext.js +0 -3
  107. package/dist/esm/core/signingEngine/session/emailOtp/exportRecovery.js +0 -2
  108. package/dist/esm/core/signingEngine/session/identity/clientSessionPersistenceState.js +5 -16
  109. package/dist/esm/core/signingEngine/session/identity/evmFamilyEcdsaIdentity.js +0 -1
  110. package/dist/esm/core/signingEngine/session/identity/exactSigningLaneIdentity.js +1 -1
  111. package/dist/esm/core/signingEngine/session/identity/exactWalletSessionCredential.js +0 -2
  112. package/dist/esm/core/signingEngine/session/material/activeWalletAuthorityEcdsaRuntime.js +1 -2
  113. package/dist/esm/core/signingEngine/session/material/ecdsaCapabilityManifest.js +1 -1
  114. package/dist/esm/core/signingEngine/session/material/ecdsaRoleLocalMaterialResolver.js +1 -14
  115. package/dist/esm/core/signingEngine/session/operationState/preparedOperation.js +1 -5
  116. package/dist/esm/core/signingEngine/session/passkey/ecdsaBootstrap.js +3 -6
  117. package/dist/esm/core/signingEngine/session/passkey/ecdsaKeyFactsInventory.js +0 -1
  118. package/dist/esm/core/signingEngine/session/passkey/ecdsaRecovery.js +1 -4
  119. package/dist/esm/core/signingEngine/session/passkey/ed25519SessionProvision.js +0 -1
  120. package/dist/esm/core/signingEngine/session/passkey/ed25519YaoLocalMaterial.js +2 -3
  121. package/dist/esm/core/signingEngine/session/passkey/ed25519YaoWarmRecovery.js +12 -45
  122. package/dist/esm/core/signingEngine/session/persistence/clientSessionPersistence.js +8 -16
  123. package/dist/esm/core/signingEngine/session/persistence/sealedSessionRecords.js +0 -2
  124. package/dist/esm/core/signingEngine/session/postconditions/runtimePostconditions.js +0 -2
  125. package/dist/esm/core/signingEngine/session/routerAbSigningWalletSession.js +2 -8
  126. package/dist/esm/core/signingEngine/session/warmCapabilities/readModel.js +2 -8
  127. package/dist/esm/core/signingEngine/session/warmCapabilities/routerAbWalletSessionCredential.js +1 -12
  128. package/dist/esm/core/signingEngine/session/warmCapabilities/transitions.js +7 -11
  129. package/dist/esm/core/signingEngine/stepUpConfirmation/otpPrompt/authLane.js +0 -1
  130. package/dist/esm/core/signingEngine/stepUpConfirmation/passkeyPrompt/touchIdPrompt.js +6 -30
  131. package/dist/esm/core/signingEngine/stepUpConfirmation/passkeyPrompt/webauthnPromptCoordinator.js +0 -3
  132. package/dist/esm/core/signingEngine/stepUpConfirmation/requireStepUpAuth.js +1 -5
  133. package/dist/esm/core/signingEngine/threshold/crypto/ed25519YaoLaneWasm.js +0 -3
  134. package/dist/esm/core/signingEngine/threshold/ecdsa/bootstrapSession.js +1 -5
  135. package/dist/esm/core/signingEngine/threshold/ed25519/walletSession.js +1 -1
  136. package/dist/esm/core/signingEngine/threshold/ed25519/yaoClient.js +1 -35
  137. package/dist/esm/core/signingEngine/threshold/sessionPolicy.js +0 -1
  138. package/dist/esm/core/signingEngine/uiConfirm/PasskeyMpcSessionDurableState.js +1 -4
  139. package/dist/esm/core/signingEngine/uiConfirm/PasskeyMpcSessionManager.js +1 -1
  140. package/dist/esm/core/signingEngine/uiConfirm/UiConfirmManager.js +0 -1
  141. package/dist/esm/core/signingEngine/uiConfirm/handlers/flows/adapters/adapters.js +1 -1
  142. package/dist/esm/core/signingEngine/uiConfirm/handlers/flows/localOnly.js +0 -1
  143. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/TransactionReceipt.js +7 -0
  144. package/dist/esm/core/signingEngine/uiConfirm/ui/transaction-display/abi/abiDecode.js +3 -13
  145. package/dist/esm/core/signingEngine/walletCustody/activateEd25519Capability.js +0 -1
  146. package/dist/esm/core/signingEngine/walletCustody/emailOtpLink.js +10 -13
  147. package/dist/esm/core/signingEngine/walletCustody/openCustodyCache.js +2 -6
  148. package/dist/esm/core/signingEngine/walletCustody/passkeyLink.js +7 -10
  149. package/dist/esm/core/signingEngine/walletCustody/registrationCeremony.js +0 -1
  150. package/dist/esm/core/signingEngine/walletCustody/walletRecoveryCredential.js +0 -1
  151. package/dist/esm/core/signingEngine/walletCustody/walletRecoveryEcdsa.js +0 -1
  152. package/dist/esm/core/signingEngine/walletCustody/walletRecoveryEd25519.js +1 -1
  153. package/dist/esm/core/signingEngine/walletCustody/walletRecoveryManifest.js +0 -2
  154. package/dist/esm/core/signingEngine/walletCustody/walletRecoveryRotation.js +0 -1
  155. package/dist/esm/core/signingEngine/webauthnAuth/walletOriginWebAuthn.js +109 -0
  156. package/dist/esm/core/signingEngine/workerManager/SignerWorkerManager.js +0 -2
  157. package/dist/esm/core/signingEngine/workerManager/ecdsaClientWorkerChannels.js +0 -4
  158. package/dist/esm/core/signingEngine/workerManager/validation.js +1 -1
  159. package/dist/esm/core/signingEngine/workerManager/workerTransport.js +3 -42
  160. package/dist/esm/core/signingEngine/workerManager/workerTypes.js +0 -2
  161. package/dist/esm/core/types/accountIds.js +0 -1
  162. package/dist/esm/core/types/sdkSentEvents.js +1 -2
  163. package/dist/esm/core/types/signer-worker.js +1 -36
  164. package/dist/esm/core/walletRuntimePaths/base.js +11 -1
  165. package/dist/esm/plugins/headers.js +0 -1
  166. package/dist/esm/plugins/next.js +0 -1
  167. package/dist/esm/plugins/plugin-utils.js +0 -1
  168. package/dist/esm/plugins/shared-ts/src/utils/normalize.js +1 -1
  169. package/dist/esm/react/components/AccountMenuButton/AccountsSection.js +1 -1
  170. package/dist/esm/react/components/AccountMenuButton/AuthenticationMethodsModal.js +1 -1
  171. package/dist/esm/react/components/AccountMenuButton/ExportKeysSection.js +1 -1
  172. package/dist/esm/react/components/AccountMenuButton/LinkedDevicesModal.js +4 -4
  173. package/dist/esm/react/components/AccountMenuButton/LockMenuItem.js +1 -1
  174. package/dist/esm/react/components/AccountMenuButton/ProfileDropdown.js +1 -1
  175. package/dist/esm/react/components/AccountMenuButton/WalletSettingsLayout.css +8 -0
  176. package/dist/esm/react/components/AccountMenuButton/WalletSettingsLayout.js +14 -6
  177. package/dist/esm/react/components/AccountMenuButton/icons/TouchIcon.js +1 -1
  178. package/dist/esm/react/components/AccountMenuButton/index.js +5 -5
  179. package/dist/esm/react/components/HostedSeamsAuthMenu/SeamsAuthMenuMock.js +1 -1
  180. package/dist/esm/react/components/HostedSeamsAuthMenu/shell.js +1 -1
  181. package/dist/esm/react/components/QRCodeScanner.js +2 -2
  182. package/dist/esm/react/components/ShowQRCode.js +4 -4
  183. package/dist/esm/react/components/theme/design-tokens.js +1 -2
  184. package/dist/esm/react/context/index.js +1 -1
  185. package/dist/esm/react/context/reactLoginStateBuilders.js +1 -1
  186. package/dist/esm/react/context/seamsManagerSingleton.js +2 -2
  187. package/dist/esm/react/context/useLoginStateRefresher.js +2 -5
  188. package/dist/esm/react/context/useSeamsContextValue.js +1 -1
  189. package/dist/esm/react/context/useSeamsWithSdkFlow.js +1 -1
  190. package/dist/esm/react/context/useWalletIframeLifecycle.js +1 -1
  191. package/dist/esm/react/hooks/useAccountInput.js +4 -4
  192. package/dist/esm/react/hooks/useNearClient.js +3 -3
  193. package/dist/esm/react/hooks/usePreconnectWalletAssets.js +1 -1
  194. package/dist/esm/react/hooks/useQRCamera.js +2 -2
  195. package/dist/esm/react/hooks/useWallet.js +1 -1
  196. package/dist/esm/react/index.js +10 -10
  197. package/dist/esm/react/styles/styles.css +8 -0
  198. package/dist/esm/react/transactionReview/TransactionReviewHost.js +1 -1
  199. package/dist/esm/react/transactionReview/boundCalls.js +2 -2
  200. package/dist/esm/react/transactionReview/contract.js +1 -1
  201. package/dist/esm/react/transactionReview/controller.js +2 -2
  202. package/dist/esm/react/transactionReview/snapshot.js +2 -2
  203. package/dist/esm/sdk/ConfirmationDrawer-DrsREojk.js +1 -0
  204. package/dist/esm/sdk/EvmClient-DoxytQaJ.js +1 -0
  205. package/dist/esm/sdk/NearClient-vJ65Wjrq.js +1 -0
  206. package/dist/esm/sdk/NonceCoordinator-BBeadCSq.js +1 -0
  207. package/dist/esm/sdk/accountIds-C3Ihsd2c.js +1 -0
  208. package/dist/esm/sdk/accountLifecycle-EyfYPnuT.js +1 -0
  209. package/dist/esm/sdk/actions-DZLxCcrU.js +1 -0
  210. package/dist/esm/sdk/adapters-DtAyuoiA.js +2 -0
  211. package/dist/esm/sdk/base-Xtd32asf.js +1 -0
  212. package/dist/esm/sdk/base64-ojm5DKcF.js +1 -0
  213. package/dist/esm/sdk/browser-CsOGMbMy.js +8 -0
  214. package/dist/esm/sdk/bytes-t5S5mkat.js +1 -0
  215. package/dist/esm/sdk/canonicalPrimitives-MPGET2cl.js +1 -0
  216. package/dist/esm/sdk/canonicalSignerErrorCode-C0hh_SVi.js +1 -0
  217. package/dist/esm/sdk/capabilityKinds-XaXXiD2B.js +1 -0
  218. package/dist/esm/sdk/chains-yAls2d9X.js +1 -0
  219. package/dist/esm/sdk/challengeDelivery-cAsaUC6U.js +1 -0
  220. package/dist/esm/sdk/chunk-dVx5-UGu.js +1 -0
  221. package/dist/esm/sdk/configHelpers-CseiVoZD.js +1 -0
  222. package/dist/esm/sdk/csp-stylesheet-B1fAhrGB.js +2 -0
  223. package/dist/esm/sdk/defaultConfigs-CWpApkMq.js +1 -0
  224. package/dist/esm/sdk/display-jK7_hYho.js +1 -0
  225. package/dist/esm/sdk/domainIds-GDzjOs6i.js +1 -0
  226. package/dist/esm/sdk/ecdsaCapabilityManifest-CHFu-QrV.js +1 -0
  227. package/dist/esm/sdk/ecdsaChainTarget-CRcRR78w.js +1 -0
  228. package/dist/esm/sdk/ecdsaPresignLifecycle-CQnCxSlq.js +1 -0
  229. package/dist/esm/sdk/ecdsaPresignPoolIdentity-Ci-ovDlv.js +1 -0
  230. package/dist/esm/sdk/ecdsaWalletRecords-Cm1DdexN.js +1 -0
  231. package/dist/esm/sdk/enrichDisplayModelWithAbi-CR-4ebuU.js +1 -0
  232. package/dist/esm/sdk/enrichDisplayModelWithAbi-CwHKFqF4.js +569 -0
  233. package/dist/esm/sdk/errors-DfbnsXjO.js +1 -0
  234. package/dist/esm/sdk/events-BJyVcnsn.js +1 -0
  235. package/dist/esm/sdk/evmCryptoWasm-CwEXiLrC.js +1 -0
  236. package/dist/esm/sdk/evmFamilyEcdsaIdentity-Br3iFdQx.js +1 -0
  237. package/dist/esm/sdk/exactSessionState-CjD8gekO.js +210 -0
  238. package/dist/esm/sdk/exactSigningLaneIdentity-olheZx_n.js +1 -0
  239. package/dist/esm/sdk/executeWorkerOperation-CrFf3FkL.js +1 -0
  240. package/dist/esm/sdk/export-viewer-host-jo7h_0wl.js +1 -0
  241. package/dist/esm/sdk/helpers-D4QckQhq.js +1 -0
  242. package/dist/esm/sdk/host-BAqOYnju.js +1 -0
  243. package/dist/esm/sdk/intentDigest-CB6zy3lN.js +1 -0
  244. package/dist/esm/sdk/jsonRpc-C85RYR0A.js +1 -0
  245. package/dist/esm/sdk/jsxRuntime.module-CoHsKD_3.js +1 -0
  246. package/dist/esm/sdk/keccak-zexutGfG.js +1 -0
  247. package/dist/esm/sdk/keyMaterialBrands-uVZHfAh3.js +1 -0
  248. package/dist/esm/sdk/localOnly-DBQRG6Qh.js +1 -0
  249. package/dist/esm/sdk/messages-Cv2j4SKI.js +1 -0
  250. package/dist/esm/sdk/mountExportPrivateKeySurface-G7Z_9JMQ.js +1 -0
  251. package/dist/esm/sdk/mountRecoveryCodeBackupSurface-BBCTaQsu.js +2 -0
  252. package/dist/esm/sdk/nearEd25519YaoMaterialActivation-DQIw8ho3.js +1 -0
  253. package/dist/esm/sdk/nearEd25519YaoSigningPreparation-Bp_CvWRz.js +1 -0
  254. package/dist/esm/sdk/nearRpcResults--cBcfmp4.js +1 -0
  255. package/dist/esm/sdk/nonceLaneKeys-BBYi4g51.js +1 -0
  256. package/dist/esm/sdk/normalization-BGPR6osg.js +1 -0
  257. package/dist/esm/sdk/operationFingerprint-5-wH2Ht8.js +1 -0
  258. package/dist/esm/sdk/operationFingerprint-DtQb0pdp.js +1 -0
  259. package/dist/esm/sdk/passkey-custody-LP4UTFbn.js +1 -0
  260. package/dist/esm/sdk/pendingWalletRecoveryCodeBackup-BNk4ebsY.js +1 -0
  261. package/dist/esm/sdk/prfCache-Mbo7_USg.js +1 -0
  262. package/dist/esm/sdk/profileAccountProjection-DHCaMtOu.js +1 -0
  263. package/dist/esm/sdk/promptText-s8TQ6ckX.js +1 -0
  264. package/dist/esm/sdk/recovery-entrypoint-DkT8sFO5.js +1 -0
  265. package/dist/esm/sdk/registration-Btozh7uh.js +1 -0
  266. package/dist/esm/sdk/registration-CSAG_h4Y.js +1 -0
  267. package/dist/esm/sdk/registrationAccounts-DIeEVy6W.js +1 -0
  268. package/dist/esm/sdk/registrationIds-BIel5S0i.js +1 -0
  269. package/dist/esm/sdk/registrationIntent-DV1GYZ3K.js +1 -0
  270. package/dist/esm/sdk/registrationPreparationPreload-vOCqNuG4.js +1 -0
  271. package/dist/esm/sdk/registrationSignerPlan-FzD3TwxB.js +1 -0
  272. package/dist/esm/sdk/relayerHttp-DaPeS929.js +1 -0
  273. package/dist/esm/sdk/routePlan-B_KJaPtm.js +1 -0
  274. package/dist/esm/sdk/router-Dd3fFHk3.js +1 -0
  275. package/dist/esm/sdk/routerAbNormalSigning-D_fHjq5l.js +1 -0
  276. package/dist/esm/sdk/router_ab_ed25519_yao_client_bg.wasm +0 -0
  277. package/dist/esm/sdk/runtime-auth-B2M91rSx.js +1 -0
  278. package/dist/esm/sdk/runtime-device-link-ojjPSRaG.js +1 -0
  279. package/dist/esm/sdk/runtime-ecdsa-tempo-CE4JLgmn.js +1 -0
  280. package/dist/esm/sdk/runtime-email-otp-DDwtKVAe.js +1 -0
  281. package/dist/esm/sdk/runtime-export-JXYk8sQ-.js +1 -0
  282. package/dist/esm/sdk/runtime-near-BB8AG6dV.js +1 -0
  283. package/dist/esm/sdk/runtime-preferences-DKFZYccW.js +1 -0
  284. package/dist/esm/sdk/runtime-recovery-C_XjsDBg.js +1 -0
  285. package/dist/esm/sdk/runtime-recovery-codes-CWp839mH.js +1 -0
  286. package/dist/esm/sdk/runtimeContext-BpObgzbj.js +6 -0
  287. package/dist/esm/sdk/runtimeLoader-DjgBf_yF.js +1 -0
  288. package/dist/esm/sdk/sdkSentEvents-_RGAEeld.js +1 -0
  289. package/dist/esm/sdk/secp256k1-B_6W9QDJ.js +1 -0
  290. package/dist/esm/sdk/secureRandomId-CTdlJ5Mx.js +1 -0
  291. package/dist/esm/sdk/sessionPolicy-CNVK7nJ6.js +1 -0
  292. package/dist/esm/sdk/shared-j_KsFbCT.js +1 -0
  293. package/dist/esm/sdk/signEvmFamily-CcLVBm0f.js +1 -0
  294. package/dist/esm/sdk/signEvmFamilyWithUiConfirmForTempo-DgTbh6jX.js +1 -0
  295. package/dist/esm/sdk/signEvmWithUiConfirm-ChreN7aZ.js +1 -0
  296. package/dist/esm/sdk/signNear-mWbTE2Dl.js +1 -0
  297. package/dist/esm/sdk/signatureUses-CQkkUcwT.js +1 -0
  298. package/dist/esm/sdk/signerDomain-BhUTzDmF.js +1 -0
  299. package/dist/esm/sdk/signerLoader-By0IY24G.js +1 -0
  300. package/dist/esm/sdk/signerSlot-BQ1g5JNV.js +1 -0
  301. package/dist/esm/sdk/signingFlow-LUWrZi2d.js +2 -0
  302. package/dist/esm/sdk/signingSessionSeal-Mr2Xp44o.js +1 -0
  303. package/dist/esm/sdk/surface-measurement-reporter-OICExWKE.js +1 -0
  304. package/dist/esm/sdk/trace-M34pNGuF.js +1 -0
  305. package/dist/esm/sdk/transaction-activity-BbDod7ji.js +1 -0
  306. package/dist/esm/sdk/transactionReview-CBE5oH4c.js +1 -0
  307. package/dist/esm/sdk/transactionReviewAdmission-0ZgWs6q3.js +1 -0
  308. package/dist/esm/sdk/transactionState-9d7f3xVj.js +1 -0
  309. package/dist/esm/sdk/tx-confirm-ui.js +12 -158
  310. package/dist/esm/sdk/types-M7vxrYtJ.js +1 -0
  311. package/dist/esm/sdk/validation-dC1-_uyG.js +1 -0
  312. package/dist/esm/sdk/wallet-iframe-host-ecdsa.js +1 -13
  313. package/dist/esm/sdk/wallet-iframe-host-full.js +1 -6
  314. package/dist/esm/sdk/wallet-iframe-host-near.js +1 -13
  315. package/dist/esm/sdk/wallet-iframe-host-runtime.js +1 -4
  316. package/dist/esm/sdk/wallet-recovery-CcDZ1hMH.js +1 -0
  317. package/dist/esm/sdk/wallet-ui.css +1 -5874
  318. package/dist/esm/sdk/walletAuthority-CoWSeqvQ.js +1 -0
  319. package/dist/esm/sdk/walletCustodyEcdsaContinuity-B7xi7nwh.js +1 -0
  320. package/dist/esm/sdk/walletIframeIdentity-C0b0XMQF.js +1 -0
  321. package/dist/esm/sdk/walletRecoveryCommit-ljxVeo-d.js +1 -0
  322. package/dist/esm/sdk/walletRecoveryRotate-HztDcDaY.js +1 -0
  323. package/dist/esm/sdk/warmSessionHydration-BPGM0YRU.js +1 -0
  324. package/dist/esm/sdk/webauthnP256-qu06GNFm.js +1 -0
  325. package/dist/esm/sdk/webauthnPromptCoordinator-DO-qfECu.js +1 -0
  326. package/dist/esm/shared-ts/src/device-linking/parsers.js +41 -1
  327. package/dist/esm/shared-ts/src/device-linking/sourceContribution.js +1 -1
  328. package/dist/esm/shared-ts/src/near/actions.js +10 -1
  329. package/dist/esm/shared-ts/src/near/nearClient.js +0 -2
  330. package/dist/esm/shared-ts/src/signing-lanes/evmFamilySigningKeySlotId.js +1 -1
  331. package/dist/esm/shared-ts/src/signing-lanes/index.js +1 -4
  332. package/dist/esm/shared-ts/src/signing-lanes/ownerContinuity.js +0 -1
  333. package/dist/esm/shared-ts/src/signing-lanes/participantDigest.js +0 -1
  334. package/dist/esm/shared-ts/src/signing-lanes/participants.js +1 -1
  335. package/dist/esm/shared-ts/src/signing-lanes/recordParsers.js +1 -1
  336. package/dist/esm/shared-ts/src/threshold/ecdsaDerivationRoleLocalBootstrap.js +0 -1
  337. package/dist/esm/shared-ts/src/threshold/participants.js +0 -1
  338. package/dist/esm/shared-ts/src/threshold/signingRootScope.js +0 -1
  339. package/dist/esm/shared-ts/src/utils/domainIds.js +1 -7
  340. package/dist/esm/shared-ts/src/utils/ecdsaKeyFactsInventory.js +0 -1
  341. package/dist/esm/shared-ts/src/utils/encoders.js +1 -1
  342. package/dist/esm/shared-ts/src/utils/errors.js +0 -1
  343. package/dist/esm/shared-ts/src/utils/index.js +4 -5
  344. package/dist/esm/shared-ts/src/utils/registrationEstablishedSession.js +1 -1
  345. package/dist/esm/shared-ts/src/utils/registrationIds.js +1 -5
  346. package/dist/esm/shared-ts/src/utils/registrationIntent.js +0 -1
  347. package/dist/esm/shared-ts/src/utils/registrationSetupOperation.js +12 -0
  348. package/dist/esm/shared-ts/src/utils/registrationSignerPlan.js +1 -1
  349. package/dist/esm/shared-ts/src/utils/routerAbEcdsaDerivation.js +1 -2
  350. package/dist/esm/shared-ts/src/utils/validation.js +0 -1
  351. package/dist/esm/shared-ts/src/utils/walletAuthAuthority.js +0 -1
  352. package/dist/esm/shared-ts/src/utils/walletCapabilityBindings.js +10 -1
  353. package/dist/esm/shared-ts/src/utils/walletManagementProtocol.js +6 -0
  354. package/dist/esm/shared-ts/src/wallet-recovery/index.js +1 -1
  355. package/dist/esm/shared-ts/src/wallet-recovery/recoveryCodeLocator.js +0 -1
  356. package/dist/esm/shared-ts/src/wallet-recovery/recoveryKeyId.js +0 -2
  357. package/dist/esm/theme/base-styles.js +11 -11
  358. package/dist/esm/utils/deviceDetection.js +16 -1
  359. package/dist/esm/utils/qrScanner.js +288 -0
  360. package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker.d.ts +12 -753
  361. package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker.js +126 -3701
  362. package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker_bg.wasm +0 -0
  363. package/dist/esm/wasm/router_ab_ecdsa_client/pkg/router_ab_ecdsa_client.d.ts +0 -42
  364. package/dist/esm/wasm/router_ab_ecdsa_client/pkg/router_ab_ecdsa_client.js +2 -106
  365. package/dist/esm/wasm/router_ab_ecdsa_client/pkg/router_ab_ecdsa_client_bg.wasm +0 -0
  366. package/dist/esm/wasm/router_ab_ed25519_yao_client/pkg/router_ab_ed25519_yao_client.d.ts +3 -158
  367. package/dist/esm/wasm/router_ab_ed25519_yao_client/pkg/router_ab_ed25519_yao_client.js +2 -452
  368. package/dist/esm/wasm/router_ab_ed25519_yao_client/pkg/router_ab_ed25519_yao_client_bg.wasm +0 -0
  369. package/dist/public/headers.manifest.json +1 -1
  370. package/dist/public/sdk/ConfirmationDrawer-DrsREojk.js +1 -0
  371. package/dist/public/sdk/EvmClient-DoxytQaJ.js +1 -0
  372. package/dist/public/sdk/NearClient-vJ65Wjrq.js +1 -0
  373. package/dist/public/sdk/NonceCoordinator-BBeadCSq.js +1 -0
  374. package/dist/public/sdk/accountIds-C3Ihsd2c.js +1 -0
  375. package/dist/public/sdk/accountLifecycle-EyfYPnuT.js +1 -0
  376. package/dist/public/sdk/actions-DZLxCcrU.js +1 -0
  377. package/dist/public/sdk/adapters-DtAyuoiA.js +2 -0
  378. package/dist/public/sdk/base-Xtd32asf.js +1 -0
  379. package/dist/public/sdk/base64-ojm5DKcF.js +1 -0
  380. package/dist/public/sdk/browser-CsOGMbMy.js +8 -0
  381. package/dist/public/sdk/bytes-t5S5mkat.js +1 -0
  382. package/dist/public/sdk/canonicalPrimitives-MPGET2cl.js +1 -0
  383. package/dist/public/sdk/canonicalSignerErrorCode-C0hh_SVi.js +1 -0
  384. package/dist/public/sdk/capabilityKinds-XaXXiD2B.js +1 -0
  385. package/dist/public/sdk/chains-yAls2d9X.js +1 -0
  386. package/dist/public/sdk/challengeDelivery-cAsaUC6U.js +1 -0
  387. package/dist/public/sdk/chunk-dVx5-UGu.js +1 -0
  388. package/dist/public/sdk/configHelpers-CseiVoZD.js +1 -0
  389. package/dist/public/sdk/csp-stylesheet-B1fAhrGB.js +2 -0
  390. package/dist/public/sdk/defaultConfigs-CWpApkMq.js +1 -0
  391. package/dist/public/sdk/display-jK7_hYho.js +1 -0
  392. package/dist/public/sdk/domainIds-GDzjOs6i.js +1 -0
  393. package/dist/public/sdk/ecdsaCapabilityManifest-CHFu-QrV.js +1 -0
  394. package/dist/public/sdk/ecdsaChainTarget-CRcRR78w.js +1 -0
  395. package/dist/public/sdk/ecdsaPresignLifecycle-CQnCxSlq.js +1 -0
  396. package/dist/public/sdk/ecdsaPresignPoolIdentity-Ci-ovDlv.js +1 -0
  397. package/dist/public/sdk/ecdsaWalletRecords-Cm1DdexN.js +1 -0
  398. package/dist/public/sdk/enrichDisplayModelWithAbi-CR-4ebuU.js +1 -0
  399. package/dist/public/sdk/enrichDisplayModelWithAbi-CwHKFqF4.js +569 -0
  400. package/dist/public/sdk/errors-DfbnsXjO.js +1 -0
  401. package/dist/public/sdk/events-BJyVcnsn.js +1 -0
  402. package/dist/public/sdk/evmCryptoWasm-CwEXiLrC.js +1 -0
  403. package/dist/public/sdk/evmFamilyEcdsaIdentity-Br3iFdQx.js +1 -0
  404. package/dist/public/sdk/exactSessionState-CjD8gekO.js +210 -0
  405. package/dist/public/sdk/exactSigningLaneIdentity-olheZx_n.js +1 -0
  406. package/dist/public/sdk/executeWorkerOperation-CrFf3FkL.js +1 -0
  407. package/dist/public/sdk/export-viewer-host-jo7h_0wl.js +1 -0
  408. package/dist/public/sdk/helpers-D4QckQhq.js +1 -0
  409. package/dist/public/sdk/host-BAqOYnju.js +1 -0
  410. package/dist/public/sdk/intentDigest-CB6zy3lN.js +1 -0
  411. package/dist/public/sdk/jsonRpc-C85RYR0A.js +1 -0
  412. package/dist/public/sdk/jsxRuntime.module-CoHsKD_3.js +1 -0
  413. package/dist/public/sdk/keccak-zexutGfG.js +1 -0
  414. package/dist/public/sdk/keyMaterialBrands-uVZHfAh3.js +1 -0
  415. package/dist/public/sdk/localOnly-DBQRG6Qh.js +1 -0
  416. package/dist/public/sdk/messages-Cv2j4SKI.js +1 -0
  417. package/dist/public/sdk/mountExportPrivateKeySurface-G7Z_9JMQ.js +1 -0
  418. package/dist/public/sdk/mountRecoveryCodeBackupSurface-BBCTaQsu.js +2 -0
  419. package/dist/public/sdk/nearEd25519YaoMaterialActivation-DQIw8ho3.js +1 -0
  420. package/dist/public/sdk/nearEd25519YaoSigningPreparation-Bp_CvWRz.js +1 -0
  421. package/dist/public/sdk/nearRpcResults--cBcfmp4.js +1 -0
  422. package/dist/public/sdk/nonceLaneKeys-BBYi4g51.js +1 -0
  423. package/dist/public/sdk/normalization-BGPR6osg.js +1 -0
  424. package/dist/public/sdk/operationFingerprint-5-wH2Ht8.js +1 -0
  425. package/dist/public/sdk/operationFingerprint-DtQb0pdp.js +1 -0
  426. package/dist/public/sdk/passkey-custody-LP4UTFbn.js +1 -0
  427. package/dist/public/sdk/pendingWalletRecoveryCodeBackup-BNk4ebsY.js +1 -0
  428. package/dist/public/sdk/prfCache-Mbo7_USg.js +1 -0
  429. package/dist/public/sdk/profileAccountProjection-DHCaMtOu.js +1 -0
  430. package/dist/public/sdk/promptText-s8TQ6ckX.js +1 -0
  431. package/dist/public/sdk/recovery-entrypoint-DkT8sFO5.js +1 -0
  432. package/dist/public/sdk/registration-Btozh7uh.js +1 -0
  433. package/dist/public/sdk/registration-CSAG_h4Y.js +1 -0
  434. package/dist/public/sdk/registrationAccounts-DIeEVy6W.js +1 -0
  435. package/dist/public/sdk/registrationIds-BIel5S0i.js +1 -0
  436. package/dist/public/sdk/registrationIntent-DV1GYZ3K.js +1 -0
  437. package/dist/public/sdk/registrationPreparationPreload-vOCqNuG4.js +1 -0
  438. package/dist/public/sdk/registrationSignerPlan-FzD3TwxB.js +1 -0
  439. package/dist/public/sdk/relayerHttp-DaPeS929.js +1 -0
  440. package/dist/public/sdk/routePlan-B_KJaPtm.js +1 -0
  441. package/dist/public/sdk/router-Dd3fFHk3.js +1 -0
  442. package/dist/public/sdk/routerAbNormalSigning-D_fHjq5l.js +1 -0
  443. package/dist/public/sdk/router_ab_ed25519_yao_client_bg.wasm +0 -0
  444. package/dist/public/sdk/runtime-auth-B2M91rSx.js +1 -0
  445. package/dist/public/sdk/runtime-device-link-ojjPSRaG.js +1 -0
  446. package/dist/public/sdk/runtime-ecdsa-tempo-CE4JLgmn.js +1 -0
  447. package/dist/public/sdk/runtime-email-otp-DDwtKVAe.js +1 -0
  448. package/dist/public/sdk/runtime-export-JXYk8sQ-.js +1 -0
  449. package/dist/public/sdk/runtime-near-BB8AG6dV.js +1 -0
  450. package/dist/public/sdk/runtime-preferences-DKFZYccW.js +1 -0
  451. package/dist/public/sdk/runtime-recovery-C_XjsDBg.js +1 -0
  452. package/dist/public/sdk/runtime-recovery-codes-CWp839mH.js +1 -0
  453. package/dist/public/sdk/runtimeContext-BpObgzbj.js +6 -0
  454. package/dist/public/sdk/runtimeLoader-DjgBf_yF.js +1 -0
  455. package/dist/public/sdk/sdkSentEvents-_RGAEeld.js +1 -0
  456. package/dist/public/sdk/secp256k1-B_6W9QDJ.js +1 -0
  457. package/dist/public/sdk/secureRandomId-CTdlJ5Mx.js +1 -0
  458. package/dist/public/sdk/sessionPolicy-CNVK7nJ6.js +1 -0
  459. package/dist/public/sdk/shared-j_KsFbCT.js +1 -0
  460. package/dist/public/sdk/signEvmFamily-CcLVBm0f.js +1 -0
  461. package/dist/public/sdk/signEvmFamilyWithUiConfirmForTempo-DgTbh6jX.js +1 -0
  462. package/dist/public/sdk/signEvmWithUiConfirm-ChreN7aZ.js +1 -0
  463. package/dist/public/sdk/signNear-mWbTE2Dl.js +1 -0
  464. package/dist/public/sdk/signatureUses-CQkkUcwT.js +1 -0
  465. package/dist/public/sdk/signerDomain-BhUTzDmF.js +1 -0
  466. package/dist/public/sdk/signerLoader-By0IY24G.js +1 -0
  467. package/dist/public/sdk/signerSlot-BQ1g5JNV.js +1 -0
  468. package/dist/public/sdk/signingFlow-LUWrZi2d.js +2 -0
  469. package/dist/public/sdk/signingSessionSeal-Mr2Xp44o.js +1 -0
  470. package/dist/public/sdk/surface-measurement-reporter-OICExWKE.js +1 -0
  471. package/dist/public/sdk/trace-M34pNGuF.js +1 -0
  472. package/dist/public/sdk/transaction-activity-BbDod7ji.js +1 -0
  473. package/dist/public/sdk/transactionReview-CBE5oH4c.js +1 -0
  474. package/dist/public/sdk/transactionReviewAdmission-0ZgWs6q3.js +1 -0
  475. package/dist/public/sdk/transactionState-9d7f3xVj.js +1 -0
  476. package/dist/public/sdk/tx-confirm-ui.js +12 -158
  477. package/dist/public/sdk/types-M7vxrYtJ.js +1 -0
  478. package/dist/public/sdk/validation-dC1-_uyG.js +1 -0
  479. package/dist/public/sdk/wallet-iframe-host-ecdsa.js +1 -13
  480. package/dist/public/sdk/wallet-iframe-host-full.js +1 -6
  481. package/dist/public/sdk/wallet-iframe-host-near.js +1 -13
  482. package/dist/public/sdk/wallet-iframe-host-runtime.js +1 -4
  483. package/dist/public/sdk/wallet-recovery-CcDZ1hMH.js +1 -0
  484. package/dist/public/sdk/wallet-ui.css +1 -5874
  485. package/dist/public/sdk/walletAuthority-CoWSeqvQ.js +1 -0
  486. package/dist/public/sdk/walletCustodyEcdsaContinuity-B7xi7nwh.js +1 -0
  487. package/dist/public/sdk/walletIframeIdentity-C0b0XMQF.js +1 -0
  488. package/dist/public/sdk/walletRecoveryCommit-ljxVeo-d.js +1 -0
  489. package/dist/public/sdk/walletRecoveryRotate-HztDcDaY.js +1 -0
  490. package/dist/public/sdk/warmSessionHydration-BPGM0YRU.js +1 -0
  491. package/dist/public/sdk/webauthnP256-qu06GNFm.js +1 -0
  492. package/dist/public/sdk/webauthnPromptCoordinator-DO-qfECu.js +1 -0
  493. package/dist/public/sdk/workers/device-linking-key.worker.js +387 -1952
  494. package/dist/public/sdk/workers/ecdsa-derivation-client.worker.js +1523 -2668
  495. package/dist/public/sdk/workers/ecdsa-online-client.worker.js +1 -273
  496. package/dist/public/sdk/workers/ecdsa-presign-client.worker.js +1 -273
  497. package/dist/public/sdk/workers/email-otp.worker.js +228 -2103
  498. package/dist/public/sdk/workers/email_otp_runtime_bg.wasm +0 -0
  499. package/dist/public/sdk/workers/evm-crypto.worker.js +0 -188
  500. package/dist/public/sdk/workers/evm_crypto.wasm +0 -0
  501. package/dist/public/sdk/workers/evm_crypto_bg.wasm +0 -0
  502. package/dist/public/sdk/workers/near-signer.worker.js +16 -718
  503. package/dist/public/sdk/workers/near_signer.wasm +0 -0
  504. package/dist/public/sdk/workers/passkey-confirm.worker.js +0 -134
  505. package/dist/public/sdk/workers/passkey-mpc-export.worker.js +149 -506
  506. package/dist/public/sdk/workers/passkey-mpc-session.worker.js +0 -134
  507. package/dist/public/sdk/workers/router_ab_ecdsa_client_bg.wasm +0 -0
  508. package/dist/public/sdk/workers/router_ab_ed25519_yao_client_bg.wasm +0 -0
  509. package/dist/public/sdk/workers/shamir3pass.worker.js +0 -134
  510. package/dist/public/sdk/workers/shamir3pass_runtime_bg.wasm +0 -0
  511. package/dist/public/sdk/workers/tempo-signer.worker.js +0 -134
  512. package/dist/public/sdk/workers/tempo_signer.wasm +0 -0
  513. package/dist/public/sdk/workers/tempo_signer_bg.wasm +0 -0
  514. package/dist/public/sdk/workers/wallet-custody-ceremony.worker.js +135 -1635
  515. package/dist/public/sdk/workers/wallet_custody_ceremony.js +0 -14
  516. package/dist/public/sdk/workers/wallet_custody_ceremony_bg.wasm +0 -0
  517. package/dist/public/sdk/workers/wasm_signer_worker_bg.wasm +0 -0
  518. package/dist/public/wallet-assets.manifest.json +234 -258
  519. package/dist/public/wallet-service/index.html +4 -4
  520. package/dist/types/shared-ts/src/authorization/capabilityKinds.d.ts +0 -4
  521. package/dist/types/shared-ts/src/device-linking/contracts.d.ts +1 -0
  522. package/dist/types/shared-ts/src/signing-lanes/evmFamilySigningKeySlotId.d.ts +0 -2
  523. package/dist/types/shared-ts/src/signing-lanes/execution.d.ts +0 -11
  524. package/dist/types/shared-ts/src/signing-lanes/ids.d.ts +2 -7
  525. package/dist/types/shared-ts/src/signing-lanes/index.d.ts +0 -4
  526. package/dist/types/shared-ts/src/signing-lanes/ownerContinuity.d.ts +0 -1
  527. package/dist/types/shared-ts/src/signing-lanes/participantDigest.d.ts +0 -18
  528. package/dist/types/shared-ts/src/signing-lanes/participants.d.ts +6 -35
  529. package/dist/types/shared-ts/src/signing-lanes/rotation.d.ts +6 -843
  530. package/dist/types/shared-ts/src/threshold/keyMaterialBrands.d.ts +0 -10
  531. package/dist/types/shared-ts/src/threshold/participants.d.ts +1 -1
  532. package/dist/types/shared-ts/src/utils/addWalletAuthMethod.d.ts +1 -133
  533. package/dist/types/shared-ts/src/utils/addWalletAuthMethod.typecheck.d.ts +4 -18
  534. package/dist/types/shared-ts/src/utils/domainIds.d.ts +0 -12
  535. package/dist/types/shared-ts/src/utils/errors.d.ts +0 -4
  536. package/dist/types/shared-ts/src/utils/near.d.ts +0 -20
  537. package/dist/types/shared-ts/src/utils/normalize.d.ts +0 -2
  538. package/dist/types/shared-ts/src/utils/registrationSetupOperation.d.ts +3 -0
  539. package/dist/types/shared-ts/src/utils/validation.d.ts +1 -3
  540. package/dist/types/shared-ts/src/utils/walletCapabilityBindings.d.ts +0 -1
  541. package/dist/types/shared-ts/src/utils/walletManagementProtocol.d.ts +3 -0
  542. package/dist/types/shared-ts/src/utils/wireSchema.d.ts +0 -2
  543. package/dist/types/shared-ts/src/wallet-recovery/backupAcknowledgement.d.ts +0 -1
  544. package/dist/types/shared-ts/src/wallet-recovery/recoveryCodeReservation.d.ts +1 -10
  545. package/dist/types/shared-ts/src/wallet-recovery/recoveryCodes.d.ts +1 -3
  546. package/dist/types/shared-ts/src/wallet-recovery/recoveryKeyId.d.ts +5 -21
  547. package/dist/types/wallet/src/SeamsWeb/operations/auth/walletUnlockEcdsaSubject.d.ts +1 -1
  548. package/dist/types/wallet/src/SeamsWeb/operations/auth/walletUnlockSubject.d.ts +0 -3
  549. package/dist/types/wallet/src/SeamsWeb/operations/authMethods/emailOtp/challenge.d.ts +0 -4
  550. package/dist/types/wallet/src/SeamsWeb/operations/devices/deviceLinkingResume.d.ts +0 -1
  551. package/dist/types/wallet/src/SeamsWeb/operations/devices/linkDeviceFlow.d.ts +2 -0
  552. package/dist/types/wallet/src/SeamsWeb/operations/registration/pendingRegistrationRecovery.d.ts +0 -10
  553. package/dist/types/wallet/src/SeamsWeb/operations/session/thresholdEcdsaProvisioning.d.ts +1 -2
  554. package/dist/types/wallet/src/SeamsWeb/signingSurface/ports.d.ts +0 -2
  555. package/dist/types/wallet/src/SeamsWeb/signingSurface/types.d.ts +1 -1
  556. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/surface/domain.d.ts +0 -8
  557. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/transport/iframe-transport-handshake.d.ts +1 -2
  558. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/auth-menu/domain.d.ts +9 -0
  559. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/hostedWalletSeamsSession.d.ts +0 -1
  560. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/ui/auth-menu/AuthMenuFooter.d.ts +17 -0
  561. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/ui/auth-menu/AuthMenuSurface.d.ts +11 -3
  562. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/ui/auth-menu/icons.d.ts +15 -0
  563. package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/exactSessionReconciliation.d.ts +3 -3
  564. package/dist/types/wallet/src/advanced.d.ts +1 -1
  565. package/dist/types/wallet/src/core/browser/walletIframe/events.d.ts +0 -2
  566. package/dist/types/wallet/src/core/indexedDB/index.d.ts +3 -5
  567. package/dist/types/wallet/src/core/indexedDB/passkeyClientDB.types.d.ts +0 -30
  568. package/dist/types/wallet/src/core/indexedDB/pendingWalletRecoveryCommit.d.ts +1 -4
  569. package/dist/types/wallet/src/core/indexedDB/schemaNames.d.ts +0 -22
  570. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestRecords.d.ts +1 -1
  571. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestStore.d.ts +1 -1
  572. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/pendingWalletRecoveryCodeBackup.d.ts +0 -1
  573. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/registrationSetup.d.ts +42 -0
  574. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/signingSessionSeals.d.ts +1 -5
  575. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/walletSessionAuthorizationStore.d.ts +5 -1
  576. package/dist/types/wallet/src/core/indexedDB/unifiedIndexedDBManager.d.ts +1 -0
  577. package/dist/types/wallet/src/core/platform/browser/createBrowserPlatformRuntime.d.ts +1 -6
  578. package/dist/types/wallet/src/core/platform/ecdsaRoleLocalRecords.d.ts +0 -15
  579. package/dist/types/wallet/src/core/platform/index.d.ts +4 -4
  580. package/dist/types/wallet/src/core/platform/ports.d.ts +1 -51
  581. package/dist/types/wallet/src/core/platform/runtime.d.ts +0 -2
  582. package/dist/types/wallet/src/core/platform/secretSources.d.ts +0 -29
  583. package/dist/types/wallet/src/core/rpcClients/near/NearClient.d.ts +1 -1
  584. package/dist/types/wallet/src/core/rpcClients/relayer/passkeyCustodyEnvelope.d.ts +0 -6
  585. package/dist/types/wallet/src/core/rpcClients/relayer/thresholdEcdsa.d.ts +0 -1
  586. package/dist/types/wallet/src/core/rpcClients/relayer/walletRegistration.d.ts +2 -19
  587. package/dist/types/wallet/src/core/signingEngine/assembly/ports/shared.d.ts +0 -1
  588. package/dist/types/wallet/src/core/signingEngine/assembly/ports/warmSigning.d.ts +0 -2
  589. package/dist/types/wallet/src/core/signingEngine/assembly/warmup.d.ts +0 -1
  590. package/dist/types/wallet/src/core/signingEngine/chains/near/nearSignerWasm.d.ts +0 -10
  591. package/dist/types/wallet/src/core/signingEngine/flows/recovery/keyExportConfirmation.d.ts +0 -15
  592. package/dist/types/wallet/src/core/signingEngine/flows/registration/accountLifecycle.d.ts +1 -11
  593. package/dist/types/wallet/src/core/signingEngine/flows/registration/public.d.ts +1 -9
  594. package/dist/types/wallet/src/core/signingEngine/flows/registration/services/passkeyEd25519YaoAddSigner.d.ts +0 -2
  595. package/dist/types/wallet/src/core/signingEngine/flows/shared/signingStateMachine.d.ts +0 -6
  596. package/dist/types/wallet/src/core/signingEngine/flows/signEvmFamily/readySecp256k1Material.d.ts +2 -10
  597. package/dist/types/wallet/src/core/signingEngine/flows/signNear/shared/ed25519YaoCapabilityResolution.d.ts +1 -4
  598. package/dist/types/wallet/src/core/signingEngine/flows/signNear/shared/ed25519YaoNormalSigning.d.ts +0 -5
  599. package/dist/types/wallet/src/core/signingEngine/flows/signNear/shared/signingMaterials.d.ts +0 -4
  600. package/dist/types/wallet/src/core/signingEngine/flows/signNear/shared/signingSessionAuthMode.d.ts +0 -9
  601. package/dist/types/wallet/src/core/signingEngine/interfaces/index.d.ts +0 -1
  602. package/dist/types/wallet/src/core/signingEngine/nonce/NonceCoordinator.d.ts +1 -1
  603. package/dist/types/wallet/src/core/signingEngine/nonce/nonceTypes.d.ts +0 -9
  604. package/dist/types/wallet/src/core/signingEngine/routerAb/ecdsaDerivation/signingMaterialRef.d.ts +0 -3
  605. package/dist/types/wallet/src/core/signingEngine/session/authority/authorityOperationResolver.d.ts +1 -24
  606. package/dist/types/wallet/src/core/signingEngine/session/availability/readiness.d.ts +0 -2
  607. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/ecdsaLogin.d.ts +0 -3
  608. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/ecdsaRecovery.d.ts +0 -5
  609. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/ed25519ExportContext.d.ts +0 -1
  610. package/dist/types/wallet/src/core/signingEngine/session/emailOtp/secretEscrow.d.ts +0 -1
  611. package/dist/types/wallet/src/core/signingEngine/session/identity/clientSessionPersistenceState.d.ts +0 -6
  612. package/dist/types/wallet/src/core/signingEngine/session/identity/emailOtpEcdsaDerivationIdentity.d.ts +0 -3
  613. package/dist/types/wallet/src/core/signingEngine/session/identity/evmFamilyEcdsaIdentity.d.ts +0 -3
  614. package/dist/types/wallet/src/core/signingEngine/session/identity/exactSigningLaneIdentity.d.ts +0 -3
  615. package/dist/types/wallet/src/core/signingEngine/session/identity/exactWalletSessionCredential.d.ts +0 -3
  616. package/dist/types/wallet/src/core/signingEngine/session/identity/laneIdentity.d.ts +0 -6
  617. package/dist/types/wallet/src/core/signingEngine/session/identity/walletUnlockSubject.d.ts +0 -8
  618. package/dist/types/wallet/src/core/signingEngine/session/keyMaterialBrands.d.ts +1 -4
  619. package/dist/types/wallet/src/core/signingEngine/session/material/activeWalletAuthorityEcdsaRuntime.d.ts +1 -1
  620. package/dist/types/wallet/src/core/signingEngine/session/material/ecdsaRoleLocalMaterialResolver.d.ts +0 -3
  621. package/dist/types/wallet/src/core/signingEngine/session/operationState/authorizationAdmission.d.ts +1 -1
  622. package/dist/types/wallet/src/core/signingEngine/session/operationState/preparedOperation.d.ts +0 -2
  623. package/dist/types/wallet/src/core/signingEngine/session/passkey/ed25519YaoLocalMaterial.d.ts +0 -1
  624. package/dist/types/wallet/src/core/signingEngine/session/passkey/ed25519YaoWarmRecovery.d.ts +0 -2
  625. package/dist/types/wallet/src/core/signingEngine/session/persistence/ecdsaRoleLocalRecords.d.ts +1 -10
  626. package/dist/types/wallet/src/core/signingEngine/session/persistence/sealedSessionRecords.d.ts +2 -2
  627. package/dist/types/wallet/src/core/signingEngine/session/persistence/sealedSessionTransportAuth.d.ts +0 -5
  628. package/dist/types/wallet/src/core/signingEngine/session/postconditions/runtimePostconditions.d.ts +0 -2
  629. package/dist/types/wallet/src/core/signingEngine/session/routerAbSigningWalletSession.d.ts +1 -1
  630. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/ecdsaProvisionPlan.d.ts +0 -105
  631. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/public.d.ts +0 -1
  632. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/routerAbWalletSessionCredential.d.ts +0 -12
  633. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/transitions.d.ts +0 -2
  634. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/types.typecheck.d.ts +1 -10
  635. package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/methodRunners.d.ts +1 -5
  636. package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/passkeyPrompt/touchIdPrompt.d.ts +1 -2
  637. package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/passkeyPrompt/webauthnPromptCoordinator.d.ts +0 -1
  638. package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/requireStepUpAuth.d.ts +1 -19
  639. package/dist/types/wallet/src/core/signingEngine/stepUpConfirmation/types.d.ts +0 -10
  640. package/dist/types/wallet/src/core/signingEngine/threshold/crypto/ed25519YaoLaneWasm.d.ts +1 -15
  641. package/dist/types/wallet/src/core/signingEngine/threshold/ecdsa/activation.d.ts +0 -4
  642. package/dist/types/wallet/src/core/signingEngine/threshold/ecdsa/bootstrapSession.d.ts +0 -4
  643. package/dist/types/wallet/src/core/signingEngine/threshold/ed25519/connectSession.d.ts +0 -1
  644. package/dist/types/wallet/src/core/signingEngine/threshold/ed25519/yaoClient.d.ts +1 -8
  645. package/dist/types/wallet/src/core/signingEngine/uiConfirm/handlers/flows/requestRegistrationCredentialConfirmation.d.ts +1 -4
  646. package/dist/types/wallet/src/core/signingEngine/uiConfirm/ui/transaction-display/abi/abiDecode.d.ts +0 -1
  647. package/dist/types/wallet/src/core/signingEngine/walletCustody/emailOtpLink.d.ts +0 -1
  648. package/dist/types/wallet/src/core/signingEngine/walletCustody/openCustodyCache.d.ts +0 -3
  649. package/dist/types/wallet/src/core/signingEngine/walletCustody/passkeyLink.d.ts +0 -3
  650. package/dist/types/wallet/src/core/signingEngine/walletCustody/registrationCeremony.d.ts +0 -1
  651. package/dist/types/wallet/src/core/signingEngine/webauthnAuth/walletOriginWebAuthn.d.ts +8 -0
  652. package/dist/types/wallet/src/core/signingEngine/workerManager/SignerWorkerManager.d.ts +0 -2
  653. package/dist/types/wallet/src/core/signingEngine/workerManager/ecdsaClientWorkerChannels.d.ts +0 -8
  654. package/dist/types/wallet/src/core/signingEngine/workerManager/validation.d.ts +1 -1
  655. package/dist/types/wallet/src/core/signingEngine/workerManager/workerTypes.d.ts +6 -109
  656. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/device-linking-key/requests.d.ts +0 -5
  657. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/crypto.d.ts +0 -1
  658. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/custodyRestore.d.ts +0 -8
  659. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/otpVerification.d.ts +0 -1
  660. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/payloadParsing.d.ts +0 -2
  661. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/unlock.d.ts +0 -1
  662. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/near-signer.worker.d.ts +3 -31
  663. package/dist/types/wallet/src/core/types/accountIds.d.ts +1 -1
  664. package/dist/types/wallet/src/core/types/index.d.ts +0 -18
  665. package/dist/types/wallet/src/core/types/sdkSentEvents.d.ts +1 -2
  666. package/dist/types/wallet/src/core/types/secure-confirm-worker.d.ts +0 -5
  667. package/dist/types/wallet/src/core/types/signer-worker.d.ts +75 -134
  668. package/dist/types/wallet/src/react/components/AccountMenuButton/Toggle.d.ts +0 -15
  669. package/dist/types/wallet/src/react/components/theme/design-tokens.d.ts +0 -19
  670. package/dist/types/wallet/src/utils/qrScanner.d.ts +1 -21
  671. package/dist/workers/device-linking-key.worker.js +387 -1952
  672. package/dist/workers/ecdsa-derivation-client.worker.js +1523 -2668
  673. package/dist/workers/ecdsa-online-client.worker.js +1 -273
  674. package/dist/workers/ecdsa-presign-client.worker.js +1 -273
  675. package/dist/workers/email-otp.worker.js +228 -2103
  676. package/dist/workers/email_otp_runtime_bg.wasm +0 -0
  677. package/dist/workers/evm-crypto.worker.js +0 -188
  678. package/dist/workers/evm_crypto.wasm +0 -0
  679. package/dist/workers/evm_crypto_bg.wasm +0 -0
  680. package/dist/workers/near-signer.worker.js +16 -718
  681. package/dist/workers/near_signer.wasm +0 -0
  682. package/dist/workers/passkey-confirm.worker.js +0 -134
  683. package/dist/workers/passkey-mpc-export.worker.js +149 -506
  684. package/dist/workers/passkey-mpc-session.worker.js +0 -134
  685. package/dist/workers/router_ab_ecdsa_client_bg.wasm +0 -0
  686. package/dist/workers/router_ab_ed25519_yao_client_bg.wasm +0 -0
  687. package/dist/workers/shamir3pass.worker.js +0 -134
  688. package/dist/workers/shamir3pass_runtime_bg.wasm +0 -0
  689. package/dist/workers/tempo-signer.worker.js +0 -134
  690. package/dist/workers/tempo_signer.wasm +0 -0
  691. package/dist/workers/tempo_signer_bg.wasm +0 -0
  692. package/dist/workers/wallet-custody-ceremony.worker.js +135 -1635
  693. package/dist/workers/wallet_custody_ceremony.js +0 -14
  694. package/dist/workers/wallet_custody_ceremony_bg.wasm +0 -0
  695. package/dist/workers/wasm_signer_worker_bg.wasm +0 -0
  696. package/package.json +1 -14
  697. package/dist/esm/SeamsWeb/walletIframe/client/transport/webauthn-bridge.js +0 -99
  698. package/dist/esm/components/AccountMenuButton/AccountsSection.css +0 -81
  699. package/dist/esm/components/AccountMenuButton/ExportKeysSection.css +0 -96
  700. package/dist/esm/components/AccountMenuButton/LinkedDevicesModal.css +0 -612
  701. package/dist/esm/components/AccountMenuButton/MenuItem.css +0 -198
  702. package/dist/esm/components/AccountMenuButton/ProfileDropdown.css +0 -80
  703. package/dist/esm/components/AccountMenuButton/TransactionSettingsSection.css +0 -107
  704. package/dist/esm/components/AccountMenuButton/UserAccountButton.css +0 -177
  705. package/dist/esm/components/AccountMenuButton/WalletSettingsLayout.css +0 -456
  706. package/dist/esm/components/AccountMenuButton/Web3AuthProfileButton.css +0 -23
  707. package/dist/esm/components/AccountMenuButton/icons/TouchIcon.css +0 -46
  708. package/dist/esm/components/QRCodeScanner.css +0 -487
  709. package/dist/esm/components/ShowQRCode.css +0 -331
  710. package/dist/esm/core/indexedDB/seamsWalletDB/laneHolderMaterialStore.js +0 -236
  711. package/dist/esm/core/signingEngine/webauthnAuth/fallbacks/safari-fallbacks.js +0 -171
  712. package/dist/esm/core/signingEngine/workerManager/nearKeyOps/createNearKeyOps.js +0 -32
  713. package/dist/esm/plugins/shared-ts/src/utils/base58.js +0 -1
  714. package/dist/esm/plugins/shared-ts/src/utils/near.js +0 -1
  715. package/dist/esm/plugins/shared-ts/src/utils/validation.js +0 -2
  716. package/dist/esm/react/SeamsWeb/SeamsWeb.js +0 -1918
  717. package/dist/esm/react/SeamsWeb/assembly/browserSigningSurfaceAssembly.js +0 -817
  718. package/dist/esm/react/SeamsWeb/assembly/browserWorkerWarmupPolicy.js +0 -31
  719. package/dist/esm/react/SeamsWeb/assembly/configureBrowserIndexedDB.js +0 -10
  720. package/dist/esm/react/SeamsWeb/assembly/createBrowserRecoveryPublicDeps.js +0 -95
  721. package/dist/esm/react/SeamsWeb/assembly/createBrowserSigningRuntime.js +0 -34
  722. package/dist/esm/react/SeamsWeb/assembly/createBrowserSigningStores.js +0 -39
  723. package/dist/esm/react/SeamsWeb/assembly/createBrowserStepUpRuntime.js +0 -34
  724. package/dist/esm/react/SeamsWeb/assembly/createBrowserWarmSessionPublicDeps.js +0 -31
  725. package/dist/esm/react/SeamsWeb/assembly/createWalletIframeOverlayState.js +0 -9
  726. package/dist/esm/react/SeamsWeb/assembly/createWalletIframeRouter.js +0 -44
  727. package/dist/esm/react/SeamsWeb/assembly/initializeBrowserSigningRuntime.js +0 -19
  728. package/dist/esm/react/SeamsWeb/assembly/runtimeConfig.js +0 -12
  729. package/dist/esm/react/SeamsWeb/operations/auth/login.js +0 -4408
  730. package/dist/esm/react/SeamsWeb/operations/auth/scheduleEcdsaSessionPresignaturePrefill.js +0 -41
  731. package/dist/esm/react/SeamsWeb/operations/auth/scheduleLinkedDevicePresignaturePrefill.js +0 -64
  732. package/dist/esm/react/SeamsWeb/operations/auth/walletAuth.js +0 -142
  733. package/dist/esm/react/SeamsWeb/operations/auth/walletUnlockEcdsaSubject.js +0 -33
  734. package/dist/esm/react/SeamsWeb/operations/auth/walletUnlockSubject.js +0 -294
  735. package/dist/esm/react/SeamsWeb/operations/authMethods/addAuthMethodSourceClaim.js +0 -72
  736. package/dist/esm/react/SeamsWeb/operations/authMethods/emailOtp/addEmailOtp.js +0 -191
  737. package/dist/esm/react/SeamsWeb/operations/authMethods/emailOtp/challenge.js +0 -247
  738. package/dist/esm/react/SeamsWeb/operations/authMethods/emailOtp/googleEmailOtpWalletAuthFlow.js +0 -572
  739. package/dist/esm/react/SeamsWeb/operations/authMethods/emailOtp/localEmailOtpProjection.js +0 -69
  740. package/dist/esm/react/SeamsWeb/operations/authMethods/emailOtp/registrationAuthority.js +0 -62
  741. package/dist/esm/react/SeamsWeb/operations/authMethods/emailOtp/registrationOffer.js +0 -69
  742. package/dist/esm/react/SeamsWeb/operations/authMethods/emailOtp/walletActivation.js +0 -95
  743. package/dist/esm/react/SeamsWeb/operations/authMethods/passkey/addPasskey.js +0 -260
  744. package/dist/esm/react/SeamsWeb/operations/authMethods/passkey/ecdsaBootstrap.js +0 -17
  745. package/dist/esm/react/SeamsWeb/operations/authMethods/passkey/exactPasskeyAuthority.js +0 -34
  746. package/dist/esm/react/SeamsWeb/operations/authMethods/passkey/localPasskeyProjection.js +0 -117
  747. package/dist/esm/react/SeamsWeb/operations/authMethods/passkey/localUnlock.js +0 -16
  748. package/dist/esm/react/SeamsWeb/operations/authMethods/passkey/loginAssertion.js +0 -25
  749. package/dist/esm/react/SeamsWeb/operations/authMethods/passkey/registrationAuthority.js +0 -84
  750. package/dist/esm/react/SeamsWeb/operations/authMethods/revokeAuthMethod.js +0 -205
  751. package/dist/esm/react/SeamsWeb/operations/authMethods/sourcePasskeyProof.js +0 -12
  752. package/dist/esm/react/SeamsWeb/operations/devices/deviceLinkingAuthorityInstallation.js +0 -444
  753. package/dist/esm/react/SeamsWeb/operations/devices/deviceLinkingComposition.js +0 -106
  754. package/dist/esm/react/SeamsWeb/operations/devices/deviceLinkingEd25519ExportRoot.js +0 -194
  755. package/dist/esm/react/SeamsWeb/operations/devices/deviceLinkingHttpTransport.js +0 -524
  756. package/dist/esm/react/SeamsWeb/operations/devices/deviceLinkingOwnerTransport.js +0 -135
  757. package/dist/esm/react/SeamsWeb/operations/devices/deviceLinkingResume.js +0 -215
  758. package/dist/esm/react/SeamsWeb/operations/devices/deviceLinkingTargetCredential.js +0 -63
  759. package/dist/esm/react/SeamsWeb/operations/devices/deviceLinkingTargetEd25519ExportRoot.js +0 -61
  760. package/dist/esm/react/SeamsWeb/operations/devices/deviceLinkingWorkerChannels.js +0 -337
  761. package/dist/esm/react/SeamsWeb/operations/devices/linkDevice.js +0 -75
  762. package/dist/esm/react/SeamsWeb/operations/devices/linkDeviceFlow.js +0 -1358
  763. package/dist/esm/react/SeamsWeb/operations/devices/linkDeviceFlowSupport.js +0 -143
  764. package/dist/esm/react/SeamsWeb/operations/devices/linkDeviceTargetActivation.js +0 -119
  765. package/dist/esm/react/SeamsWeb/operations/devices/scanDevice.js +0 -384
  766. package/dist/esm/react/SeamsWeb/operations/devices/walletHostComposition.js +0 -130
  767. package/dist/esm/react/SeamsWeb/operations/devices/walletHostOwnerAuthority.js +0 -191
  768. package/dist/esm/react/SeamsWeb/operations/evm/index.js +0 -35
  769. package/dist/esm/react/SeamsWeb/operations/near/actions.js +0 -484
  770. package/dist/esm/react/SeamsWeb/operations/near/commandSubject.js +0 -14
  771. package/dist/esm/react/SeamsWeb/operations/near/delegateAction.js +0 -247
  772. package/dist/esm/react/SeamsWeb/operations/near/index.js +0 -37
  773. package/dist/esm/react/SeamsWeb/operations/near/signNEP413.js +0 -117
  774. package/dist/esm/react/SeamsWeb/operations/near/signingEventHelpers.js +0 -15
  775. package/dist/esm/react/SeamsWeb/operations/recovery/accountSync.js +0 -21
  776. package/dist/esm/react/SeamsWeb/operations/recovery/recoveryWalletBinding.js +0 -43
  777. package/dist/esm/react/SeamsWeb/operations/recovery/syncAccount.js +0 -914
  778. package/dist/esm/react/SeamsWeb/operations/recovery/walletRecoveryCodeBackup.js +0 -100
  779. package/dist/esm/react/SeamsWeb/operations/recovery/walletRecoveryCommit.js +0 -477
  780. package/dist/esm/react/SeamsWeb/operations/recovery/walletRecoveryDurablePayload.js +0 -383
  781. package/dist/esm/react/SeamsWeb/operations/recovery/walletRecoveryJournal.js +0 -118
  782. package/dist/esm/react/SeamsWeb/operations/recovery/walletRecoveryRotation.js +0 -214
  783. package/dist/esm/react/SeamsWeb/operations/registration/pendingEcdsaRegistrationRecovery.js +0 -184
  784. package/dist/esm/react/SeamsWeb/operations/registration/pendingEcdsaRegistrationRecoveryUnlock.js +0 -247
  785. package/dist/esm/react/SeamsWeb/operations/registration/pendingEcdsaRegistrationRecoveryValidation.js +0 -134
  786. package/dist/esm/react/SeamsWeb/operations/registration/pendingRegistrationRecovery.js +0 -363
  787. package/dist/esm/react/SeamsWeb/operations/registration/registration.js +0 -3818
  788. package/dist/esm/react/SeamsWeb/operations/registration/registrationEd25519Yao.js +0 -166
  789. package/dist/esm/react/SeamsWeb/operations/registration/registrationSignerSet.js +0 -60
  790. package/dist/esm/react/SeamsWeb/operations/registration/registrationStrictEcdsa.js +0 -343
  791. package/dist/esm/react/SeamsWeb/operations/registration/registrationTerminalCommit.js +0 -296
  792. package/dist/esm/react/SeamsWeb/operations/registration/registrationTiming.js +0 -682
  793. package/dist/esm/react/SeamsWeb/operations/session/thresholdEcdsaProvisioning.js +0 -40
  794. package/dist/esm/react/SeamsWeb/operations/session/thresholdWarmSessionBootstrap.js +0 -20
  795. package/dist/esm/react/SeamsWeb/operations/tempo/executeEvmFamilyTransaction.js +0 -568
  796. package/dist/esm/react/SeamsWeb/operations/tempo/feeTokenPreference.js +0 -67
  797. package/dist/esm/react/SeamsWeb/operations/tempo/index.js +0 -39
  798. package/dist/esm/react/SeamsWeb/publicApi/auth.js +0 -24
  799. package/dist/esm/react/SeamsWeb/publicApi/awaitNearReady.js +0 -72
  800. package/dist/esm/react/SeamsWeb/publicApi/capabilitySelection.js +0 -63
  801. package/dist/esm/react/SeamsWeb/publicApi/chainTargets.js +0 -48
  802. package/dist/esm/react/SeamsWeb/publicApi/createPublicApi.js +0 -133
  803. package/dist/esm/react/SeamsWeb/publicApi/currentWallet.js +0 -46
  804. package/dist/esm/react/SeamsWeb/publicApi/devices.js +0 -83
  805. package/dist/esm/react/SeamsWeb/publicApi/evm.js +0 -103
  806. package/dist/esm/react/SeamsWeb/publicApi/keyExport.js +0 -90
  807. package/dist/esm/react/SeamsWeb/publicApi/near.js +0 -449
  808. package/dist/esm/react/SeamsWeb/publicApi/preferences.js +0 -61
  809. package/dist/esm/react/SeamsWeb/publicApi/recovery.js +0 -19
  810. package/dist/esm/react/SeamsWeb/publicApi/tempo.js +0 -244
  811. package/dist/esm/react/SeamsWeb/publicApi/transactionReview.js +0 -12
  812. package/dist/esm/react/SeamsWeb/publicApi/types.js +0 -10
  813. package/dist/esm/react/SeamsWeb/signingSurface/BrowserSigningSurface.js +0 -3917
  814. package/dist/esm/react/SeamsWeb/walletIframe/client/overlay/overlay-controller.js +0 -530
  815. package/dist/esm/react/SeamsWeb/walletIframe/client/overlay/overlay-styles.js +0 -417
  816. package/dist/esm/react/SeamsWeb/walletIframe/client/progress/on-events-progress-bus.js +0 -134
  817. package/dist/esm/react/SeamsWeb/walletIframe/client/router.js +0 -3368
  818. package/dist/esm/react/SeamsWeb/walletIframe/client/surface/domain.js +0 -288
  819. package/dist/esm/react/SeamsWeb/walletIframe/client/surface/geometry.js +0 -128
  820. package/dist/esm/react/SeamsWeb/walletIframe/client/surface/renderer.js +0 -119
  821. package/dist/esm/react/SeamsWeb/walletIframe/client/surface/transactionSurfaceQueue.js +0 -125
  822. package/dist/esm/react/SeamsWeb/walletIframe/client/transactionReviewReservation.js +0 -96
  823. package/dist/esm/react/SeamsWeb/walletIframe/client/transport/IframeTransport.js +0 -252
  824. package/dist/esm/react/SeamsWeb/walletIframe/client/transport/iframe-transport-dom.js +0 -71
  825. package/dist/esm/react/SeamsWeb/walletIframe/client/transport/iframe-transport-handshake.js +0 -211
  826. package/dist/esm/react/SeamsWeb/walletIframe/client/transport/webauthn-bridge.js +0 -99
  827. package/dist/esm/react/SeamsWeb/walletIframe/coordinator.js +0 -235
  828. package/dist/esm/react/SeamsWeb/walletIframe/host/restoredSessionPresignaturePrefill.js +0 -29
  829. package/dist/esm/react/SeamsWeb/walletIframe/host/surface-measurement-reporter.js +0 -158
  830. package/dist/esm/react/SeamsWeb/walletIframe/shared/exactSessionState.js +0 -605
  831. package/dist/esm/react/SeamsWeb/walletIframe/shared/is-dev-host.js +0 -11
  832. package/dist/esm/react/SeamsWeb/walletIframe/shared/messages.js +0 -588
  833. package/dist/esm/react/SeamsWeb/walletIframe/shared/transactionReview.js +0 -83
  834. package/dist/esm/react/SeamsWeb/walletIframe/shared/unlockOptions.js +0 -54
  835. package/dist/esm/react/base-styles.js +0 -13
  836. package/dist/esm/react/build-paths.js +0 -109
  837. package/dist/esm/react/config.js +0 -37
  838. package/dist/esm/react/core/accountData/near/accountProjection.js +0 -119
  839. package/dist/esm/react/core/accountData/near/accountRefs.js +0 -21
  840. package/dist/esm/react/core/accountData/near/keyMaterial.js +0 -171
  841. package/dist/esm/react/core/accountData/near/profileId.js +0 -24
  842. package/dist/esm/react/core/browser/walletIframe/csp-stylesheet.js +0 -189
  843. package/dist/esm/react/core/browser/walletIframe/events.js +0 -10
  844. package/dist/esm/react/core/browser/walletIframe/host-mode.js +0 -19
  845. package/dist/esm/react/core/browser/walletIframe/hostVariant.js +0 -16
  846. package/dist/esm/react/core/config/chains.js +0 -90
  847. package/dist/esm/react/core/config/configBuilder.js +0 -231
  848. package/dist/esm/react/core/config/configHelpers.js +0 -183
  849. package/dist/esm/react/core/config/defaultConfigs.js +0 -120
  850. package/dist/esm/react/core/config/defineConfig.js +0 -48
  851. package/dist/esm/react/core/config/managedRuntimeScope.js +0 -16
  852. package/dist/esm/react/core/indexedDB/accountKeyMaterial.js +0 -68
  853. package/dist/esm/react/core/indexedDB/accountSignerLifecycle.js +0 -143
  854. package/dist/esm/react/core/indexedDB/index.js +0 -60
  855. package/dist/esm/react/core/indexedDB/keyMaterialEnvelope.js +0 -69
  856. package/dist/esm/react/core/indexedDB/lastProfileState.js +0 -22
  857. package/dist/esm/react/core/indexedDB/linkedAuthoritySignerMaterial.js +0 -291
  858. package/dist/esm/react/core/indexedDB/nonceLaneCoordinationStore.js +0 -115
  859. package/dist/esm/react/core/indexedDB/normalization.js +0 -24
  860. package/dist/esm/react/core/indexedDB/pendingWalletRecoveryCommit.js +0 -477
  861. package/dist/esm/react/core/indexedDB/pendingWalletRegistrationCommit.js +0 -745
  862. package/dist/esm/react/core/indexedDB/profileAccountProjection.js +0 -70
  863. package/dist/esm/react/core/indexedDB/schemaNames.js +0 -845
  864. package/dist/esm/react/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestLookups.js +0 -209
  865. package/dist/esm/react/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestRecords.js +0 -848
  866. package/dist/esm/react/core/indexedDB/seamsWalletDB/ecdsaCapabilityManifestStore.js +0 -1215
  867. package/dist/esm/react/core/indexedDB/seamsWalletDB/ecdsaClientPresignatures.js +0 -235
  868. package/dist/esm/react/core/indexedDB/seamsWalletDB/manager.js +0 -140
  869. package/dist/esm/react/core/indexedDB/seamsWalletDB/pendingWalletRecoveryCodeBackup.js +0 -145
  870. package/dist/esm/react/core/indexedDB/seamsWalletDB/repositories.js +0 -4747
  871. package/dist/esm/react/core/indexedDB/seamsWalletDB/schema.js +0 -23
  872. package/dist/esm/react/core/indexedDB/seamsWalletDB/signingSessionSeals.js +0 -205
  873. package/dist/esm/react/core/indexedDB/seamsWalletDB/walletCustodyEcdsaContinuity.js +0 -198
  874. package/dist/esm/react/core/indexedDB/seamsWalletDB/walletSessionAuthorizationStore.js +0 -569
  875. package/dist/esm/react/core/indexedDB/singletons.js +0 -7
  876. package/dist/esm/react/core/indexedDB/unifiedIndexedDBManager.js +0 -578
  877. package/dist/esm/react/core/indexedDB/walletCustodyEd25519MaterialRecord.js +0 -60
  878. package/dist/esm/react/core/platform/browser/createBrowserPlatformRuntime.js +0 -552
  879. package/dist/esm/react/core/platform/secretSources.js +0 -111
  880. package/dist/esm/react/core/platform/signerCoreCommandAdapters.js +0 -122
  881. package/dist/esm/react/core/rpcClients/evm/EvmClient.js +0 -549
  882. package/dist/esm/react/core/rpcClients/evm/nonceBackend.js +0 -279
  883. package/dist/esm/react/core/rpcClients/near/NearClient.js +0 -56
  884. package/dist/esm/react/core/rpcClients/near/NearRpcError.js +0 -105
  885. package/dist/esm/react/core/rpcClients/near/rpcCalls.js +0 -376
  886. package/dist/esm/react/core/rpcClients/relayer/ownerWalletExecutionLanePreflight.js +0 -67
  887. package/dist/esm/react/core/rpcClients/relayer/passkeyCustodyEnvelope.js +0 -228
  888. package/dist/esm/react/core/rpcClients/relayer/registrationSignerSetRequest.js +0 -8
  889. package/dist/esm/react/core/rpcClients/relayer/relayerHttp.js +0 -26
  890. package/dist/esm/react/core/rpcClients/relayer/routerAbNormalSigning.js +0 -812
  891. package/dist/esm/react/core/rpcClients/relayer/routerAbNormalSigningValidation.js +0 -23
  892. package/dist/esm/react/core/rpcClients/relayer/sealedRefreshCapabilities.js +0 -148
  893. package/dist/esm/react/core/rpcClients/relayer/thresholdEcdsa.js +0 -237
  894. package/dist/esm/react/core/rpcClients/relayer/walletRecoveryFinalize.js +0 -174
  895. package/dist/esm/react/core/rpcClients/relayer/walletRecoveryGoogleEmailOtp.js +0 -161
  896. package/dist/esm/react/core/rpcClients/relayer/walletRecoveryPrepare.js +0 -295
  897. package/dist/esm/react/core/rpcClients/relayer/walletRecoveryRotate.js +0 -311
  898. package/dist/esm/react/core/rpcClients/relayer/walletRegistration.js +0 -2349
  899. package/dist/esm/react/core/rpcClients/relayer/walletRegistrationTerminalResponse.js +0 -719
  900. package/dist/esm/react/core/rpcClients/relayer/walletSessionAuthorizationStatus.js +0 -214
  901. package/dist/esm/react/core/runtime/createSigningRuntime.js +0 -100
  902. package/dist/esm/react/core/signingEngine/assembly/createManagers.js +0 -80
  903. package/dist/esm/react/core/signingEngine/assembly/createPorts.js +0 -54
  904. package/dist/esm/react/core/signingEngine/assembly/ports/emailOtp.js +0 -30
  905. package/dist/esm/react/core/signingEngine/assembly/ports/evmFamily.js +0 -73
  906. package/dist/esm/react/core/signingEngine/assembly/ports/near.js +0 -21
  907. package/dist/esm/react/core/signingEngine/assembly/ports/recovery.js +0 -75
  908. package/dist/esm/react/core/signingEngine/assembly/ports/registration.js +0 -22
  909. package/dist/esm/react/core/signingEngine/assembly/ports/session.js +0 -25
  910. package/dist/esm/react/core/signingEngine/assembly/ports/shared.js +0 -40
  911. package/dist/esm/react/core/signingEngine/assembly/ports/stepUpRuntime.js +0 -67
  912. package/dist/esm/react/core/signingEngine/assembly/ports/warmSigning.js +0 -92
  913. package/dist/esm/react/core/signingEngine/assembly/warmup.js +0 -68
  914. package/dist/esm/react/core/signingEngine/chains/evm/bytes.js +0 -22
  915. package/dist/esm/react/core/signingEngine/chains/evm/display/calldata.js +0 -25
  916. package/dist/esm/react/core/signingEngine/chains/evm/display/evmTx.js +0 -119
  917. package/dist/esm/react/core/signingEngine/chains/evm/display/functionSelectors.js +0 -72
  918. package/dist/esm/react/core/signingEngine/chains/evm/display/gas.js +0 -19
  919. package/dist/esm/react/core/signingEngine/chains/evm/display/normalization.js +0 -23
  920. package/dist/esm/react/core/signingEngine/chains/evm/evmAdapter.js +0 -44
  921. package/dist/esm/react/core/signingEngine/chains/evm/evmCryptoWasm.js +0 -198
  922. package/dist/esm/react/core/signingEngine/chains/near/display.js +0 -248
  923. package/dist/esm/react/core/signingEngine/chains/near/nearSignerWasm.js +0 -170
  924. package/dist/esm/react/core/signingEngine/chains/near/payloads.js +0 -58
  925. package/dist/esm/react/core/signingEngine/chains/tempo/display.js +0 -130
  926. package/dist/esm/react/core/signingEngine/chains/tempo/feeToken.js +0 -187
  927. package/dist/esm/react/core/signingEngine/chains/tempo/tempoAdapter.js +0 -49
  928. package/dist/esm/react/core/signingEngine/chains/tempo/tempoSignerWasm.js +0 -90
  929. package/dist/esm/react/core/signingEngine/flows/recovery/ecdsaDerivationExport.js +0 -428
  930. package/dist/esm/react/core/signingEngine/flows/recovery/ecdsaExportFlow.js +0 -660
  931. package/dist/esm/react/core/signingEngine/flows/recovery/ecdsaExportMaterial.js +0 -250
  932. package/dist/esm/react/core/signingEngine/flows/recovery/ed25519YaoExportFlow.js +0 -353
  933. package/dist/esm/react/core/signingEngine/flows/recovery/exportKeypairOperation.js +0 -213
  934. package/dist/esm/react/core/signingEngine/flows/recovery/exportLaneSelection.js +0 -283
  935. package/dist/esm/react/core/signingEngine/flows/recovery/keyExportConfirmation.js +0 -325
  936. package/dist/esm/react/core/signingEngine/flows/recovery/keyExportFlow.js +0 -81
  937. package/dist/esm/react/core/signingEngine/flows/recovery/passkeyEd25519YaoRecovery.js +0 -192
  938. package/dist/esm/react/core/signingEngine/flows/recovery/public.js +0 -26
  939. package/dist/esm/react/core/signingEngine/flows/recovery/stepUpAuthorization.js +0 -139
  940. package/dist/esm/react/core/signingEngine/flows/registration/accountLifecycle.js +0 -1098
  941. package/dist/esm/react/core/signingEngine/flows/registration/nearProvisioningRegistry.js +0 -79
  942. package/dist/esm/react/core/signingEngine/flows/registration/public.js +0 -85
  943. package/dist/esm/react/core/signingEngine/flows/registration/services/ecdsaRegistrationSessions.js +0 -77
  944. package/dist/esm/react/core/signingEngine/flows/registration/services/ecdsaWalletRecords.js +0 -15
  945. package/dist/esm/react/core/signingEngine/flows/registration/services/passkeyEd25519YaoAddSigner.js +0 -83
  946. package/dist/esm/react/core/signingEngine/flows/registration/services/registrationAccounts.js +0 -30
  947. package/dist/esm/react/core/signingEngine/flows/registration/session.js +0 -24
  948. package/dist/esm/react/core/signingEngine/flows/shared/signingConfirmation.js +0 -194
  949. package/dist/esm/react/core/signingEngine/flows/shared/signingStateMachine.js +0 -485
  950. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/accountAuth.js +0 -12
  951. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/addresses.js +0 -10
  952. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/authPlanning.js +0 -139
  953. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/ecdsaLanes.js +0 -102
  954. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/ecdsaSelection.js +0 -233
  955. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/emailOtpPublic.js +0 -123
  956. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/emailOtpSigningSession.js +0 -227
  957. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/errors.js +0 -127
  958. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/events.js +0 -39
  959. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/evmNonceLifecycle.js +0 -49
  960. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/executorThresholdState.js +0 -22
  961. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/freshAuthRetryPolicy.js +0 -98
  962. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/freshWalletSessionRetry.js +0 -76
  963. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/nonceLifecycleAdapter.js +0 -245
  964. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/nonceResolution.js +0 -91
  965. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/operationIds.js +0 -33
  966. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/preparedSigning.js +0 -376
  967. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/readySecp256k1Material.js +0 -191
  968. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/requireEvmFamilyStepUpAuth.js +0 -128
  969. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signEvmFamily.js +0 -510
  970. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signEvmFamilyWithUiConfirmForTempo.js +0 -65
  971. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signEvmWithUiConfirm.js +0 -26
  972. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signatureUses.js +0 -12
  973. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signerLoader.js +0 -25
  974. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signers/ecdsaDerivationClientSigningMaterialSource.js +0 -82
  975. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signers/secp256k1.js +0 -182
  976. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signers/webauthnP256.js +0 -84
  977. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signingFlow.js +0 -633
  978. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/signingFlowRuntime.js +0 -392
  979. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/stepUpAuthorization.js +0 -56
  980. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/tempoNonceLifecycle.js +0 -47
  981. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/thresholdAdmission.js +0 -87
  982. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/transactionExecutor.js +0 -140
  983. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/types.js +0 -20
  984. package/dist/esm/react/core/signingEngine/flows/signEvmFamily/webauthnP256KeyRef.js +0 -33
  985. package/dist/esm/react/core/signingEngine/flows/signNear/implicitAccountFunding.js +0 -202
  986. package/dist/esm/react/core/signingEngine/flows/signNear/nearSigningFlow.js +0 -56
  987. package/dist/esm/react/core/signingEngine/flows/signNear/requireNearStepUpAuth.js +0 -102
  988. package/dist/esm/react/core/signingEngine/flows/signNear/shared/confirmationProgress.js +0 -28
  989. package/dist/esm/react/core/signingEngine/flows/signNear/shared/ed25519YaoCapabilityResolution.js +0 -101
  990. package/dist/esm/react/core/signingEngine/flows/signNear/shared/ed25519YaoNormalSigning.js +0 -822
  991. package/dist/esm/react/core/signingEngine/flows/signNear/shared/implicitAccountFundingPort.js +0 -24
  992. package/dist/esm/react/core/signingEngine/flows/signNear/shared/operationStepUpPreparation.js +0 -68
  993. package/dist/esm/react/core/signingEngine/flows/signNear/shared/signatureOnlySigning.js +0 -343
  994. package/dist/esm/react/core/signingEngine/flows/signNear/shared/signingMaterials.js +0 -25
  995. package/dist/esm/react/core/signingEngine/flows/signNear/shared/signingSessionAuthMode.js +0 -138
  996. package/dist/esm/react/core/signingEngine/flows/signNear/signDelegate.js +0 -290
  997. package/dist/esm/react/core/signingEngine/flows/signNear/signNear.js +0 -1238
  998. package/dist/esm/react/core/signingEngine/flows/signNear/signNep413.js +0 -144
  999. package/dist/esm/react/core/signingEngine/flows/signNear/signTransactions.js +0 -897
  1000. package/dist/esm/react/core/signingEngine/flows/signNear/signatureUses.js +0 -12
  1001. package/dist/esm/react/core/signingEngine/flows/signNear/stepUpAuthorization.js +0 -42
  1002. package/dist/esm/react/core/signingEngine/interfaces/accountAuthMetadata.js +0 -14
  1003. package/dist/esm/react/core/signingEngine/interfaces/ecdsaChainTarget.js +0 -142
  1004. package/dist/esm/react/core/signingEngine/interfaces/operationStepUpPreparation.js +0 -18
  1005. package/dist/esm/react/core/signingEngine/nonce/NonceCoordinator.js +0 -1026
  1006. package/dist/esm/react/core/signingEngine/nonce/evmNonceLane.js +0 -182
  1007. package/dist/esm/react/core/signingEngine/nonce/nearNonceLane.js +0 -669
  1008. package/dist/esm/react/core/signingEngine/nonce/nearNonceLaneIdentity.js +0 -24
  1009. package/dist/esm/react/core/signingEngine/nonce/nonceCoordinationRecordBoundary.js +0 -216
  1010. package/dist/esm/react/core/signingEngine/nonce/nonceDiagnostics.js +0 -232
  1011. package/dist/esm/react/core/signingEngine/nonce/nonceLaneKeys.js +0 -110
  1012. package/dist/esm/react/core/signingEngine/nonce/nonceLeaseState.js +0 -128
  1013. package/dist/esm/react/core/signingEngine/nonce/nonceTypes.js +0 -59
  1014. package/dist/esm/react/core/signingEngine/nonce/nonceUtils.js +0 -33
  1015. package/dist/esm/react/core/signingEngine/routerAb/ecdsaDerivation/httpRequest.js +0 -74
  1016. package/dist/esm/react/core/signingEngine/routerAb/ecdsaDerivation/poolFillRoutes.js +0 -217
  1017. package/dist/esm/react/core/signingEngine/routerAb/ecdsaDerivation/presignaturePool.js +0 -1218
  1018. package/dist/esm/react/core/signingEngine/routerAb/ecdsaDerivation/presignatureRefillProgress.js +0 -53
  1019. package/dist/esm/react/core/signingEngine/routerAb/ecdsaDerivation/signingMaterialRef.js +0 -22
  1020. package/dist/esm/react/core/signingEngine/session/SigningSessionCoordinator.js +0 -347
  1021. package/dist/esm/react/core/signingEngine/session/authority/authorityOperationResolver.js +0 -165
  1022. package/dist/esm/react/core/signingEngine/session/availability/availableSigningLanes.js +0 -1064
  1023. package/dist/esm/react/core/signingEngine/session/availability/canonicalLaneInventory.js +0 -127
  1024. package/dist/esm/react/core/signingEngine/session/availability/clientSessionExpiryInvalidator.js +0 -72
  1025. package/dist/esm/react/core/signingEngine/session/availability/persistedAvailableSigningLanes.js +0 -214
  1026. package/dist/esm/react/core/signingEngine/session/availability/readiness.js +0 -464
  1027. package/dist/esm/react/core/signingEngine/session/emailOtp/EmailOtpWalletSessionCoordinator.js +0 -131
  1028. package/dist/esm/react/core/signingEngine/session/emailOtp/challengeDelivery.js +0 -56
  1029. package/dist/esm/react/core/signingEngine/session/emailOtp/ecdsaBootstrapCommit.js +0 -106
  1030. package/dist/esm/react/core/signingEngine/session/emailOtp/ecdsaLifecycleRuntime.js +0 -50
  1031. package/dist/esm/react/core/signingEngine/session/emailOtp/ecdsaLogin.js +0 -936
  1032. package/dist/esm/react/core/signingEngine/session/emailOtp/ecdsaPublication.js +0 -414
  1033. package/dist/esm/react/core/signingEngine/session/emailOtp/ecdsaRecovery.js +0 -268
  1034. package/dist/esm/react/core/signingEngine/session/emailOtp/ecdsaSigningSessionAuthority.js +0 -95
  1035. package/dist/esm/react/core/signingEngine/session/emailOtp/ed25519ExportContext.js +0 -376
  1036. package/dist/esm/react/core/signingEngine/session/emailOtp/exportRecovery.js +0 -286
  1037. package/dist/esm/react/core/signingEngine/session/emailOtp/exportRecoveryRuntime.js +0 -50
  1038. package/dist/esm/react/core/signingEngine/session/emailOtp/persistedSnapshot.js +0 -22
  1039. package/dist/esm/react/core/signingEngine/session/emailOtp/publicTypes.js +0 -38
  1040. package/dist/esm/react/core/signingEngine/session/emailOtp/routePlan.js +0 -60
  1041. package/dist/esm/react/core/signingEngine/session/emailOtp/runtimeConfig.js +0 -24
  1042. package/dist/esm/react/core/signingEngine/session/emailOtp/sealedRefreshPolicy.js +0 -49
  1043. package/dist/esm/react/core/signingEngine/session/emailOtp/sealedRestoreOrchestrator.js +0 -234
  1044. package/dist/esm/react/core/signingEngine/session/emailOtp/sealedRuntimePurpose.js +0 -16
  1045. package/dist/esm/react/core/signingEngine/session/emailOtp/sealedSessionRegistry.js +0 -40
  1046. package/dist/esm/react/core/signingEngine/session/emailOtp/status.js +0 -72
  1047. package/dist/esm/react/core/signingEngine/session/emailOtp/walletUnlock.js +0 -168
  1048. package/dist/esm/react/core/signingEngine/session/emailOtp/warmSessionRuntime.js +0 -70
  1049. package/dist/esm/react/core/signingEngine/session/emailOtp/workerEnrollment.js +0 -159
  1050. package/dist/esm/react/core/signingEngine/session/emailOtp/workerRequests.js +0 -84
  1051. package/dist/esm/react/core/signingEngine/session/emailOtp/zeroize.js +0 -9
  1052. package/dist/esm/react/core/signingEngine/session/identity/clientSessionPersistenceState.js +0 -95
  1053. package/dist/esm/react/core/signingEngine/session/identity/emailOtpEcdsaDerivationIdentity.js +0 -23
  1054. package/dist/esm/react/core/signingEngine/session/identity/evmFamilyEcdsaIdentity.js +0 -265
  1055. package/dist/esm/react/core/signingEngine/session/identity/exactSigningLaneIdentity.js +0 -338
  1056. package/dist/esm/react/core/signingEngine/session/identity/exactWalletSessionCredential.js +0 -106
  1057. package/dist/esm/react/core/signingEngine/session/identity/exactWalletSessionReader.js +0 -54
  1058. package/dist/esm/react/core/signingEngine/session/identity/laneIdentity.js +0 -168
  1059. package/dist/esm/react/core/signingEngine/session/identity/ownerLaneScope.js +0 -185
  1060. package/dist/esm/react/core/signingEngine/session/identity/selectLane.js +0 -335
  1061. package/dist/esm/react/core/signingEngine/session/identity/signingLaneAuthBinding.js +0 -29
  1062. package/dist/esm/react/core/signingEngine/session/keyMaterialBrands.js +0 -75
  1063. package/dist/esm/react/core/signingEngine/session/lanes/walletExecutionLaneHydration.js +0 -194
  1064. package/dist/esm/react/core/signingEngine/session/lifecycle/canonicalWalletSessionStatus.js +0 -32
  1065. package/dist/esm/react/core/signingEngine/session/lifecycle/walletSessionFailure.js +0 -69
  1066. package/dist/esm/react/core/signingEngine/session/lifecycle/walletSessionStatus.js +0 -123
  1067. package/dist/esm/react/core/signingEngine/session/material/activeEcdsaCapabilityRuntime.js +0 -171
  1068. package/dist/esm/react/core/signingEngine/session/material/activeWalletAuthorityEcdsaRuntime.js +0 -318
  1069. package/dist/esm/react/core/signingEngine/session/material/ecdsaCapabilityHydration.js +0 -75
  1070. package/dist/esm/react/core/signingEngine/session/material/ecdsaCapabilityManifest.js +0 -498
  1071. package/dist/esm/react/core/signingEngine/session/material/ecdsaRoleLocalMaterialResolver.js +0 -122
  1072. package/dist/esm/react/core/signingEngine/session/material/ecdsaSealedRuntime.js +0 -197
  1073. package/dist/esm/react/core/signingEngine/session/material/ecdsaSigningCapability.js +0 -231
  1074. package/dist/esm/react/core/signingEngine/session/material/linkedEcdsaHolderRuntime.js +0 -36
  1075. package/dist/esm/react/core/signingEngine/session/material/mpcCapabilityHydration.js +0 -79
  1076. package/dist/esm/react/core/signingEngine/session/material/nearEd25519YaoMaterialActivation.js +0 -80
  1077. package/dist/esm/react/core/signingEngine/session/material/nearEd25519YaoSigningPreparation.js +0 -122
  1078. package/dist/esm/react/core/signingEngine/session/material/restorableMpcMaterialRef.internal.js +0 -21
  1079. package/dist/esm/react/core/signingEngine/session/material/walletSigningStateFailure.js +0 -84
  1080. package/dist/esm/react/core/signingEngine/session/operationState/authorizationAdmission.js +0 -98
  1081. package/dist/esm/react/core/signingEngine/session/operationState/lanes.js +0 -127
  1082. package/dist/esm/react/core/signingEngine/session/operationState/preparedOperation.js +0 -38
  1083. package/dist/esm/react/core/signingEngine/session/operationState/trace.js +0 -94
  1084. package/dist/esm/react/core/signingEngine/session/operationState/transactionState.js +0 -106
  1085. package/dist/esm/react/core/signingEngine/session/operationState/types.js +0 -88
  1086. package/dist/esm/react/core/signingEngine/session/passkey/ecdsaBootstrap.js +0 -187
  1087. package/dist/esm/react/core/signingEngine/session/passkey/ecdsaKeyFactsInventory.js +0 -206
  1088. package/dist/esm/react/core/signingEngine/session/passkey/ecdsaRecovery.js +0 -87
  1089. package/dist/esm/react/core/signingEngine/session/passkey/ecdsaSessionProvision.js +0 -224
  1090. package/dist/esm/react/core/signingEngine/session/passkey/ecdsaWarmCapabilityBootstrap.js +0 -147
  1091. package/dist/esm/react/core/signingEngine/session/passkey/ed25519Provisioner.js +0 -55
  1092. package/dist/esm/react/core/signingEngine/session/passkey/ed25519SessionProvision.js +0 -229
  1093. package/dist/esm/react/core/signingEngine/session/passkey/ed25519YaoLocalMaterial.js +0 -537
  1094. package/dist/esm/react/core/signingEngine/session/passkey/ed25519YaoRecoveryCapability.js +0 -94
  1095. package/dist/esm/react/core/signingEngine/session/passkey/ed25519YaoSealedSession.js +0 -57
  1096. package/dist/esm/react/core/signingEngine/session/passkey/ed25519YaoWarmRecovery.js +0 -314
  1097. package/dist/esm/react/core/signingEngine/session/passkey/passkeyCustodySessionCache.js +0 -90
  1098. package/dist/esm/react/core/signingEngine/session/passkey/prfCache.js +0 -60
  1099. package/dist/esm/react/core/signingEngine/session/passkey/public.js +0 -15
  1100. package/dist/esm/react/core/signingEngine/session/passkey/unlockEcdsaWarmupPlanner.js +0 -247
  1101. package/dist/esm/react/core/signingEngine/session/passkey/warmSessionHydration.js +0 -9
  1102. package/dist/esm/react/core/signingEngine/session/persistence/clientSessionPersistence.js +0 -143
  1103. package/dist/esm/react/core/signingEngine/session/persistence/durableSealedSessionCommands.js +0 -30
  1104. package/dist/esm/react/core/signingEngine/session/persistence/ecdsaRoleLocalRecords.js +0 -316
  1105. package/dist/esm/react/core/signingEngine/session/persistence/ecdsaSealedRecordKey.js +0 -20
  1106. package/dist/esm/react/core/signingEngine/session/persistence/sealedSessionRecords.js +0 -761
  1107. package/dist/esm/react/core/signingEngine/session/persistence/sealedSessionStore.js +0 -518
  1108. package/dist/esm/react/core/signingEngine/session/persistence/walletSessionAuthorizationProjection.js +0 -51
  1109. package/dist/esm/react/core/signingEngine/session/planning/operationFingerprint.js +0 -30
  1110. package/dist/esm/react/core/signingEngine/session/planning/operationIdBinding.js +0 -36
  1111. package/dist/esm/react/core/signingEngine/session/planning/planner.js +0 -98
  1112. package/dist/esm/react/core/signingEngine/session/postconditions/runtimePostconditions.js +0 -165
  1113. package/dist/esm/react/core/signingEngine/session/public.js +0 -44
  1114. package/dist/esm/react/core/signingEngine/session/routerAbSigningWalletSession.js +0 -125
  1115. package/dist/esm/react/core/signingEngine/session/sealedRecovery/exactRecordLookup.js +0 -148
  1116. package/dist/esm/react/core/signingEngine/session/sealedRecovery/materialActivationKey.js +0 -22
  1117. package/dist/esm/react/core/signingEngine/session/sealedRecovery/recoveryRecord.js +0 -248
  1118. package/dist/esm/react/core/signingEngine/session/sealedRecovery/restoreCoordinator.js +0 -229
  1119. package/dist/esm/react/core/signingEngine/session/userPreferences.js +0 -212
  1120. package/dist/esm/react/core/signingEngine/session/warmCapabilities/capabilityReader.js +0 -62
  1121. package/dist/esm/react/core/signingEngine/session/warmCapabilities/capabilityReaderCore.js +0 -293
  1122. package/dist/esm/react/core/signingEngine/session/warmCapabilities/clearVolatileWarmSigningMaterial.js +0 -44
  1123. package/dist/esm/react/core/signingEngine/session/warmCapabilities/ecdsaBootstrapPersistence.js +0 -107
  1124. package/dist/esm/react/core/signingEngine/session/warmCapabilities/ecdsaBootstrapQueue.js +0 -22
  1125. package/dist/esm/react/core/signingEngine/session/warmCapabilities/ecdsaLoginPrefill.js +0 -93
  1126. package/dist/esm/react/core/signingEngine/session/warmCapabilities/ecdsaLoginPrefillSigningMaterialSource.js +0 -50
  1127. package/dist/esm/react/core/signingEngine/session/warmCapabilities/ecdsaProvisionPlan.js +0 -9
  1128. package/dist/esm/react/core/signingEngine/session/warmCapabilities/ed25519SealedSessionRuntime.js +0 -251
  1129. package/dist/esm/react/core/signingEngine/session/warmCapabilities/nearEd25519CapabilityRehydration.js +0 -98
  1130. package/dist/esm/react/core/signingEngine/session/warmCapabilities/public.js +0 -31
  1131. package/dist/esm/react/core/signingEngine/session/warmCapabilities/readModel.js +0 -161
  1132. package/dist/esm/react/core/signingEngine/session/warmCapabilities/routerAbEd25519WalletSessionState.js +0 -256
  1133. package/dist/esm/react/core/signingEngine/session/warmCapabilities/routerAbWalletSessionCredential.js +0 -73
  1134. package/dist/esm/react/core/signingEngine/session/warmCapabilities/sealedRefreshParity.js +0 -67
  1135. package/dist/esm/react/core/signingEngine/session/warmCapabilities/statusReader.js +0 -100
  1136. package/dist/esm/react/core/signingEngine/session/warmCapabilities/transitions.js +0 -51
  1137. package/dist/esm/react/core/signingEngine/session/warmCapabilities/types.js +0 -122
  1138. package/dist/esm/react/core/signingEngine/session/warmCapabilities/volatileWarmMaterialCommands.js +0 -45
  1139. package/dist/esm/react/core/signingEngine/stepUpConfirmation/channel/confirmCommon.js +0 -89
  1140. package/dist/esm/react/core/signingEngine/stepUpConfirmation/channel/confirmTypes.js +0 -12
  1141. package/dist/esm/react/core/signingEngine/stepUpConfirmation/confirmOperation.js +0 -51
  1142. package/dist/esm/react/core/signingEngine/stepUpConfirmation/intentDigestPreparation.js +0 -29
  1143. package/dist/esm/react/core/signingEngine/stepUpConfirmation/methodSelection.js +0 -41
  1144. package/dist/esm/react/core/signingEngine/stepUpConfirmation/otpPrompt/authLane.js +0 -32
  1145. package/dist/esm/react/core/signingEngine/stepUpConfirmation/otpPrompt/exportAuthorization.js +0 -108
  1146. package/dist/esm/react/core/signingEngine/stepUpConfirmation/otpPrompt/promptText.js +0 -8
  1147. package/dist/esm/react/core/signingEngine/stepUpConfirmation/otpPrompt/signingPrompt.js +0 -15
  1148. package/dist/esm/react/core/signingEngine/stepUpConfirmation/passkeyPrompt/touchIdPrompt.js +0 -295
  1149. package/dist/esm/react/core/signingEngine/stepUpConfirmation/passkeyPrompt/webauthnPromptCoordinator.js +0 -170
  1150. package/dist/esm/react/core/signingEngine/stepUpConfirmation/requireStepUpAuth.js +0 -63
  1151. package/dist/esm/react/core/signingEngine/stepUpConfirmation/types.js +0 -29
  1152. package/dist/esm/react/core/signingEngine/stepUpConfirmation/userConfirmationType.js +0 -15
  1153. package/dist/esm/react/core/signingEngine/threshold/commitQueueShared.js +0 -139
  1154. package/dist/esm/react/core/signingEngine/threshold/crypto/ecdsaDerivationClientWasm.js +0 -619
  1155. package/dist/esm/react/core/signingEngine/threshold/crypto/ed25519YaoLaneWasm.js +0 -70
  1156. package/dist/esm/react/core/signingEngine/threshold/ecdsa/activation.js +0 -267
  1157. package/dist/esm/react/core/signingEngine/threshold/ecdsa/bootstrapSession.js +0 -119
  1158. package/dist/esm/react/core/signingEngine/threshold/ecdsa/operationStepUp.js +0 -110
  1159. package/dist/esm/react/core/signingEngine/threshold/ecdsa/postRegistrationSessionActivation.js +0 -132
  1160. package/dist/esm/react/core/signingEngine/threshold/ecdsa/signingQueue.js +0 -16
  1161. package/dist/esm/react/core/signingEngine/threshold/ed25519/commitQueue.js +0 -16
  1162. package/dist/esm/react/core/signingEngine/threshold/ed25519/connectSession.js +0 -137
  1163. package/dist/esm/react/core/signingEngine/threshold/ed25519/walletSession.js +0 -363
  1164. package/dist/esm/react/core/signingEngine/threshold/ed25519/yaoActiveClientRegistry.js +0 -146
  1165. package/dist/esm/react/core/signingEngine/threshold/ed25519/yaoClient.js +0 -597
  1166. package/dist/esm/react/core/signingEngine/threshold/ed25519/yaoPageLifecycleOwner.js +0 -23
  1167. package/dist/esm/react/core/signingEngine/threshold/ed25519/yaoPublicCapabilityReferences.js +0 -295
  1168. package/dist/esm/react/core/signingEngine/threshold/sessionPolicy.js +0 -94
  1169. package/dist/esm/react/core/signingEngine/uiConfirm/PasskeyMpcExportManager.js +0 -233
  1170. package/dist/esm/react/core/signingEngine/uiConfirm/PasskeyMpcSessionDurableState.js +0 -496
  1171. package/dist/esm/react/core/signingEngine/uiConfirm/PasskeyMpcSessionManager.js +0 -746
  1172. package/dist/esm/react/core/signingEngine/uiConfirm/UiConfirmManager.js +0 -600
  1173. package/dist/esm/react/core/signingEngine/uiConfirm/confirmationReadinessRegistry.js +0 -41
  1174. package/dist/esm/react/core/signingEngine/uiConfirm/exportConfirmRequest.js +0 -149
  1175. package/dist/esm/react/core/signingEngine/uiConfirm/handlers/determineConfirmationConfig.js +0 -82
  1176. package/dist/esm/react/core/signingEngine/uiConfirm/handlers/flowOrchestrator.js +0 -363
  1177. package/dist/esm/react/core/signingEngine/uiConfirm/handlers/flows/adapters/adapters.js +0 -337
  1178. package/dist/esm/react/core/signingEngine/uiConfirm/handlers/flows/adapters/request.js +0 -120
  1179. package/dist/esm/react/core/signingEngine/uiConfirm/handlers/flows/localOnly.js +0 -150
  1180. package/dist/esm/react/core/signingEngine/uiConfirm/handlers/flows/registration.js +0 -235
  1181. package/dist/esm/react/core/signingEngine/uiConfirm/handlers/flows/requestRegistrationCredentialConfirmation.js +0 -178
  1182. package/dist/esm/react/core/signingEngine/uiConfirm/handlers/flows/signing.js +0 -684
  1183. package/dist/esm/react/core/signingEngine/uiConfirm/handlers/handlePromptFromWorker.js +0 -90
  1184. package/dist/esm/react/core/signingEngine/uiConfirm/nearFundingNotice.js +0 -50
  1185. package/dist/esm/react/core/signingEngine/uiConfirm/transactionReviewAdmission.js +0 -8
  1186. package/dist/esm/react/core/signingEngine/uiConfirm/ui/appearance-token-vars.js +0 -31
  1187. package/dist/esm/react/core/signingEngine/uiConfirm/ui/appearance.js +0 -27
  1188. package/dist/esm/react/core/signingEngine/uiConfirm/ui/confirm-surface-resize.js +0 -346
  1189. package/dist/esm/react/core/signingEngine/uiConfirm/ui/confirm-ui.js +0 -516
  1190. package/dist/esm/react/core/signingEngine/uiConfirm/ui/confirmation-body-model.js +0 -24
  1191. package/dist/esm/react/core/signingEngine/uiConfirm/ui/confirmation-model.js +0 -161
  1192. package/dist/esm/react/core/signingEngine/uiConfirm/ui/drawer-gesture.js +0 -16
  1193. package/dist/esm/react/core/signingEngine/uiConfirm/ui/export-private-key-reveal.js +0 -155
  1194. package/dist/esm/react/core/signingEngine/uiConfirm/ui/export-viewer-host.js +0 -207
  1195. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/ConfirmContent.js +0 -131
  1196. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/ConfirmHeader.js +0 -29
  1197. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/ConfirmationBody.js +0 -49
  1198. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/ConfirmationContent.js +0 -137
  1199. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/ConfirmationDrawer.js +0 -294
  1200. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/ConfirmationModal.js +0 -67
  1201. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/CopyStatusIcon.js +0 -41
  1202. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/EmailOtpContent.js +0 -141
  1203. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/EmailOtpInput.js +0 -92
  1204. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/ExportPrivateKeySurface.js +0 -318
  1205. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/HaloBorder.js +0 -91
  1206. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/PadlockIcon.js +0 -32
  1207. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/PasskeyHaloLoading.js +0 -63
  1208. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/PasskeyRegistrationContent.js +0 -75
  1209. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/PasskeyRegistrationDetails.js +0 -33
  1210. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/RecoveryCodeBackupSurface.js +0 -518
  1211. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/ReviewDisclosure.js +0 -128
  1212. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/SeamsWordmark.js +0 -22
  1213. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/TransactionLabel.js +0 -158
  1214. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/TransactionReceipt.js +0 -289
  1215. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/TransactionReview.js +0 -311
  1216. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/TransactionTree.js +0 -284
  1217. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/clipboard.js +0 -26
  1218. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/confirmation-controller.js +0 -80
  1219. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/confirmation-styles.js +0 -20
  1220. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/email-otp-session.js +0 -178
  1221. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/mountConfirmationSurface.js +0 -297
  1222. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/mountExportPrivateKeySurface.js +0 -86
  1223. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/mountRecoveryCodeBackupSurface.js +0 -82
  1224. package/dist/esm/react/core/signingEngine/uiConfirm/ui/seamsWordmarkPaths.js +0 -6
  1225. package/dist/esm/react/core/signingEngine/uiConfirm/ui/surface-measurement-binding.js +0 -12
  1226. package/dist/esm/react/core/signingEngine/uiConfirm/ui/surface-resize-events.js +0 -18
  1227. package/dist/esm/react/core/signingEngine/uiConfirm/ui/transaction-activity.js +0 -46
  1228. package/dist/esm/react/core/signingEngine/uiConfirm/ui/transaction-display/abi/abiDecode.js +0 -325
  1229. package/dist/esm/react/core/signingEngine/uiConfirm/ui/transaction-display/abi/enrichDisplayModelWithAbi.js +0 -77
  1230. package/dist/esm/react/core/signingEngine/uiConfirm/ui/transaction-display/confirmation-tree.js +0 -27
  1231. package/dist/esm/react/core/signingEngine/uiConfirm/ui/transaction-display/formatters.js +0 -57
  1232. package/dist/esm/react/core/signingEngine/uiConfirm/ui/transaction-display/renderers/fallback.js +0 -52
  1233. package/dist/esm/react/core/signingEngine/uiConfirm/ui/transaction-display/renderers/types.js +0 -62
  1234. package/dist/esm/react/core/signingEngine/uiConfirm/ui/transaction-display/tree.js +0 -249
  1235. package/dist/esm/react/core/signingEngine/uiConfirm/ui/transaction-receipt.js +0 -50
  1236. package/dist/esm/react/core/signingEngine/uiConfirm/warmSessionUiConfirm.js +0 -65
  1237. package/dist/esm/react/core/signingEngine/walletCustody/activateEd25519Capability.js +0 -123
  1238. package/dist/esm/react/core/signingEngine/walletCustody/ceremonyActiveClientMetadata.js +0 -94
  1239. package/dist/esm/react/core/signingEngine/walletCustody/ceremonyDriver.js +0 -171
  1240. package/dist/esm/react/core/signingEngine/walletCustody/ceremonyStepRunner.js +0 -20
  1241. package/dist/esm/react/core/signingEngine/walletCustody/ed25519ActiveClient.js +0 -100
  1242. package/dist/esm/react/core/signingEngine/walletCustody/ed25519Projection.js +0 -32
  1243. package/dist/esm/react/core/signingEngine/walletCustody/ed25519SeedMaterial.js +0 -92
  1244. package/dist/esm/react/core/signingEngine/walletCustody/emailOtpLink.js +0 -135
  1245. package/dist/esm/react/core/signingEngine/walletCustody/joinCustodyWire.js +0 -64
  1246. package/dist/esm/react/core/signingEngine/walletCustody/openCustodyCache.js +0 -130
  1247. package/dist/esm/react/core/signingEngine/walletCustody/passkeyLink.js +0 -183
  1248. package/dist/esm/react/core/signingEngine/walletCustody/recoveryReplacementEnvelope.js +0 -60
  1249. package/dist/esm/react/core/signingEngine/walletCustody/registrationCeremony.js +0 -461
  1250. package/dist/esm/react/core/signingEngine/walletCustody/unlockedEd25519ExportRootCapability.js +0 -258
  1251. package/dist/esm/react/core/signingEngine/walletCustody/walletRecoveryCredential.js +0 -24
  1252. package/dist/esm/react/core/signingEngine/walletCustody/walletRecoveryEcdsa.js +0 -76
  1253. package/dist/esm/react/core/signingEngine/walletCustody/walletRecoveryEd25519.js +0 -129
  1254. package/dist/esm/react/core/signingEngine/walletCustody/walletRecoveryManifest.js +0 -180
  1255. package/dist/esm/react/core/signingEngine/walletCustody/walletRecoveryRotation.js +0 -103
  1256. package/dist/esm/react/core/signingEngine/webauthnAuth/credentials/collectAuthenticationCredentialForChallengeB64u.js +0 -154
  1257. package/dist/esm/react/core/signingEngine/webauthnAuth/credentials/credentialExtensions.js +0 -36
  1258. package/dist/esm/react/core/signingEngine/webauthnAuth/credentials/helpers.js +0 -273
  1259. package/dist/esm/react/core/signingEngine/webauthnAuth/device/signerSlot.js +0 -25
  1260. package/dist/esm/react/core/signingEngine/webauthnAuth/fallbacks/safari-fallbacks.js +0 -171
  1261. package/dist/esm/react/core/signingEngine/workerManager/SignerWorkerManager.js +0 -70
  1262. package/dist/esm/react/core/signingEngine/workerManager/deviceLinkingPorts.js +0 -342
  1263. package/dist/esm/react/core/signingEngine/workerManager/deviceLinkingSourceContribution.js +0 -158
  1264. package/dist/esm/react/core/signingEngine/workerManager/ecdsaClientWorkerChannels.js +0 -17
  1265. package/dist/esm/react/core/signingEngine/workerManager/ecdsaPresignLifecycle.js +0 -6
  1266. package/dist/esm/react/core/signingEngine/workerManager/ecdsaPresignPoolIdentity.js +0 -49
  1267. package/dist/esm/react/core/signingEngine/workerManager/executeWorkerOperation.js +0 -12
  1268. package/dist/esm/react/core/signingEngine/workerManager/nearKeyOps/createNearKeyOps.js +0 -32
  1269. package/dist/esm/react/core/signingEngine/workerManager/validation.js +0 -114
  1270. package/dist/esm/react/core/signingEngine/workerManager/workerTransport.js +0 -773
  1271. package/dist/esm/react/core/signingEngine/workerManager/workerTypes.js +0 -109
  1272. package/dist/esm/react/core/types/accountIds.js +0 -26
  1273. package/dist/esm/react/core/types/actionBuilders.js +0 -73
  1274. package/dist/esm/react/core/types/confirmationConfig.js +0 -39
  1275. package/dist/esm/react/core/types/eventLogging.js +0 -28
  1276. package/dist/esm/react/core/types/linkDevice.js +0 -49
  1277. package/dist/esm/react/core/types/sdkSentEvents.js +0 -602
  1278. package/dist/esm/react/core/types/secure-confirm-worker.js +0 -22
  1279. package/dist/esm/react/core/types/signer-worker.js +0 -50
  1280. package/dist/esm/react/core/types/walletIframeIdentity.js +0 -15
  1281. package/dist/esm/react/core/walletRuntimePaths/base.js +0 -60
  1282. package/dist/esm/react/core/walletRuntimePaths/emailOtpWorker.js +0 -12
  1283. package/dist/esm/react/core/walletRuntimePaths/multichainWorkers.js +0 -25
  1284. package/dist/esm/react/core/walletRuntimePaths/walletCustodyCeremonyWorker.js +0 -18
  1285. package/dist/esm/react/core/walletRuntimePaths/workers.js +0 -93
  1286. package/dist/esm/react/externalEvm/boundary.js +0 -309
  1287. package/dist/esm/react/externalEvm/controller.js +0 -440
  1288. package/dist/esm/react/externalEvm/types.js +0 -31
  1289. package/dist/esm/react/node_modules/@noble/hashes/esm/_u64.js +0 -36
  1290. package/dist/esm/react/node_modules/@noble/hashes/esm/sha3.js +0 -197
  1291. package/dist/esm/react/node_modules/@noble/hashes/esm/utils.js +0 -87
  1292. package/dist/esm/react/node_modules/viem/_esm/errors/abi.js +0 -48
  1293. package/dist/esm/react/node_modules/viem/_esm/errors/address.js +0 -14
  1294. package/dist/esm/react/node_modules/viem/_esm/errors/base.js +0 -86
  1295. package/dist/esm/react/node_modules/viem/_esm/errors/data.js +0 -16
  1296. package/dist/esm/react/node_modules/viem/_esm/errors/encoding.js +0 -16
  1297. package/dist/esm/react/node_modules/viem/_esm/errors/typedData.js +0 -28
  1298. package/dist/esm/react/node_modules/viem/_esm/errors/version.js +0 -6
  1299. package/dist/esm/react/node_modules/viem/_esm/utils/abi/encodeAbiParameters.js +0 -243
  1300. package/dist/esm/react/node_modules/viem/_esm/utils/address/getAddress.js +0 -28
  1301. package/dist/esm/react/node_modules/viem/_esm/utils/address/isAddress.js +0 -23
  1302. package/dist/esm/react/node_modules/viem/_esm/utils/data/concat.js +0 -23
  1303. package/dist/esm/react/node_modules/viem/_esm/utils/data/isHex.js +0 -10
  1304. package/dist/esm/react/node_modules/viem/_esm/utils/data/pad.js +0 -40
  1305. package/dist/esm/react/node_modules/viem/_esm/utils/data/size.js +0 -16
  1306. package/dist/esm/react/node_modules/viem/_esm/utils/data/slice.js +0 -59
  1307. package/dist/esm/react/node_modules/viem/_esm/utils/encoding/fromHex.js +0 -13
  1308. package/dist/esm/react/node_modules/viem/_esm/utils/encoding/toBytes.js +0 -175
  1309. package/dist/esm/react/node_modules/viem/_esm/utils/encoding/toHex.js +0 -168
  1310. package/dist/esm/react/node_modules/viem/_esm/utils/hash/keccak256.js +0 -15
  1311. package/dist/esm/react/node_modules/viem/_esm/utils/lru.js +0 -38
  1312. package/dist/esm/react/node_modules/viem/_esm/utils/regex.js +0 -7
  1313. package/dist/esm/react/node_modules/viem/_esm/utils/signature/hashTypedData.js +0 -113
  1314. package/dist/esm/react/node_modules/viem/_esm/utils/stringify.js +0 -9
  1315. package/dist/esm/react/node_modules/viem/_esm/utils/typedData.js +0 -80
  1316. package/dist/esm/react/shared-ts/src/authorization/capabilityKinds.js +0 -111
  1317. package/dist/esm/react/shared-ts/src/authorization/delegatedAuthority.js +0 -121
  1318. package/dist/esm/react/shared-ts/src/authorization/index.js +0 -6
  1319. package/dist/esm/react/shared-ts/src/authorization/operationFingerprint.js +0 -57
  1320. package/dist/esm/react/shared-ts/src/authorization/walletAuthority.js +0 -719
  1321. package/dist/esm/react/shared-ts/src/authorization/walletCustodyOperation.js +0 -16
  1322. package/dist/esm/react/shared-ts/src/authorization/walletSessionIssuance.js +0 -115
  1323. package/dist/esm/react/shared-ts/src/authorization/walletSignerActivationEquality.js +0 -12
  1324. package/dist/esm/react/shared-ts/src/device-linking/activeWalletSession.js +0 -104
  1325. package/dist/esm/react/shared-ts/src/device-linking/authorityActivation.js +0 -142
  1326. package/dist/esm/react/shared-ts/src/device-linking/committedSignerPackages.js +0 -270
  1327. package/dist/esm/react/shared-ts/src/device-linking/contracts.js +0 -8
  1328. package/dist/esm/react/shared-ts/src/device-linking/delegatedActivationPlan.js +0 -130
  1329. package/dist/esm/react/shared-ts/src/device-linking/deviceManagement.js +0 -120
  1330. package/dist/esm/react/shared-ts/src/device-linking/digests.js +0 -115
  1331. package/dist/esm/react/shared-ts/src/device-linking/ed25519ExportRoot.js +0 -167
  1332. package/dist/esm/react/shared-ts/src/device-linking/index.js +0 -12
  1333. package/dist/esm/react/shared-ts/src/device-linking/parsers.js +0 -1029
  1334. package/dist/esm/react/shared-ts/src/device-linking/requestProof.js +0 -25
  1335. package/dist/esm/react/shared-ts/src/device-linking/sourceContribution.js +0 -542
  1336. package/dist/esm/react/shared-ts/src/device-linking/walletSessionCredentialDelivery.js +0 -173
  1337. package/dist/esm/react/shared-ts/src/device-linking/wireFields.js +0 -59
  1338. package/dist/esm/react/shared-ts/src/near/actions.js +0 -236
  1339. package/dist/esm/react/shared-ts/src/near/nearClient.js +0 -252
  1340. package/dist/esm/react/shared-ts/src/passkey-custody/ceremonyCommitPayload.js +0 -43
  1341. package/dist/esm/react/shared-ts/src/passkey-custody/custodyEnvelope.js +0 -278
  1342. package/dist/esm/react/shared-ts/src/passkey-custody/custodySecretBinding.js +0 -181
  1343. package/dist/esm/react/shared-ts/src/passkey-custody/index.js +0 -4
  1344. package/dist/esm/react/shared-ts/src/passkey-custody/primitives.js +0 -62
  1345. package/dist/esm/react/shared-ts/src/signing-lanes/evmFamilySigningKeySlotId.js +0 -49
  1346. package/dist/esm/react/shared-ts/src/signing-lanes/index.js +0 -8
  1347. package/dist/esm/react/shared-ts/src/signing-lanes/ownerContinuity.js +0 -62
  1348. package/dist/esm/react/shared-ts/src/signing-lanes/participantDigest.js +0 -2
  1349. package/dist/esm/react/shared-ts/src/signing-lanes/participants.js +0 -256
  1350. package/dist/esm/react/shared-ts/src/signing-lanes/recordParsers.js +0 -479
  1351. package/dist/esm/react/shared-ts/src/signing-lanes/rotationDigests.js +0 -6
  1352. package/dist/esm/react/shared-ts/src/signing-lanes/rotationParsers.js +0 -3
  1353. package/dist/esm/react/shared-ts/src/signing-lanes/rotationProtocolParsers.js +0 -8
  1354. package/dist/esm/react/shared-ts/src/signing-lanes/rotationWireFields.js +0 -3
  1355. package/dist/esm/react/shared-ts/src/threshold/ecdsaDerivationRoleLocalBootstrap.js +0 -39
  1356. package/dist/esm/react/shared-ts/src/threshold/ed25519OperationFingerprint.js +0 -222
  1357. package/dist/esm/react/shared-ts/src/threshold/keyMaterialBrands.js +0 -25
  1358. package/dist/esm/react/shared-ts/src/threshold/participants.js +0 -67
  1359. package/dist/esm/react/shared-ts/src/threshold/secp256k1.js +0 -6
  1360. package/dist/esm/react/shared-ts/src/threshold/sessionPolicy.js +0 -8
  1361. package/dist/esm/react/shared-ts/src/threshold/signingRootScope.js +0 -43
  1362. package/dist/esm/react/shared-ts/src/utils/addAuthMethodRegistration.js +0 -103
  1363. package/dist/esm/react/shared-ts/src/utils/addWalletAuthMethod.js +0 -1
  1364. package/dist/esm/react/shared-ts/src/utils/authenticatorOptions.js +0 -22
  1365. package/dist/esm/react/shared-ts/src/utils/base58.js +0 -28
  1366. package/dist/esm/react/shared-ts/src/utils/base64.js +0 -70
  1367. package/dist/esm/react/shared-ts/src/utils/canonicalPrimitives.js +0 -38
  1368. package/dist/esm/react/shared-ts/src/utils/digestEncoding.js +0 -63
  1369. package/dist/esm/react/shared-ts/src/utils/digests.js +0 -33
  1370. package/dist/esm/react/shared-ts/src/utils/domainIds.js +0 -257
  1371. package/dist/esm/react/shared-ts/src/utils/ecdsaCapabilityActivation.js +0 -67
  1372. package/dist/esm/react/shared-ts/src/utils/ecdsaKeyFactsInventory.js +0 -44
  1373. package/dist/esm/react/shared-ts/src/utils/ecdsaServerTiming.js +0 -38
  1374. package/dist/esm/react/shared-ts/src/utils/emailOtpDomain.js +0 -28
  1375. package/dist/esm/react/shared-ts/src/utils/emailOtpRecoveryKey.js +0 -65
  1376. package/dist/esm/react/shared-ts/src/utils/encoders.js +0 -2
  1377. package/dist/esm/react/shared-ts/src/utils/errors.js +0 -95
  1378. package/dist/esm/react/shared-ts/src/utils/evmRpcResults.js +0 -101
  1379. package/dist/esm/react/shared-ts/src/utils/exactKeys.js +0 -17
  1380. package/dist/esm/react/shared-ts/src/utils/exactRecord.js +0 -44
  1381. package/dist/esm/react/shared-ts/src/utils/index.js +0 -38
  1382. package/dist/esm/react/shared-ts/src/utils/jsonRpc.js +0 -64
  1383. package/dist/esm/react/shared-ts/src/utils/keccak.js +0 -150
  1384. package/dist/esm/react/shared-ts/src/utils/near.js +0 -205
  1385. package/dist/esm/react/shared-ts/src/utils/nearRpcResults.js +0 -205
  1386. package/dist/esm/react/shared-ts/src/utils/normalize.js +0 -86
  1387. package/dist/esm/react/shared-ts/src/utils/registrationAuthMethodInput.js +0 -84
  1388. package/dist/esm/react/shared-ts/src/utils/registrationEstablishedSession.js +0 -275
  1389. package/dist/esm/react/shared-ts/src/utils/registrationIds.js +0 -226
  1390. package/dist/esm/react/shared-ts/src/utils/registrationIntent.js +0 -390
  1391. package/dist/esm/react/shared-ts/src/utils/registrationSignerPlan.js +0 -439
  1392. package/dist/esm/react/shared-ts/src/utils/routerAbEcdsaDerivation.js +0 -1334
  1393. package/dist/esm/react/shared-ts/src/utils/routerAbEd25519Yao.js +0 -747
  1394. package/dist/esm/react/shared-ts/src/utils/routerAbEd25519YaoDigests.js +0 -76
  1395. package/dist/esm/react/shared-ts/src/utils/routerAbNormalSigningIdentity.js +0 -115
  1396. package/dist/esm/react/shared-ts/src/utils/routerAbPublicKeyset.js +0 -11
  1397. package/dist/esm/react/shared-ts/src/utils/routerAbTraceContext.js +0 -36
  1398. package/dist/esm/react/shared-ts/src/utils/secureRandomId.js +0 -35
  1399. package/dist/esm/react/shared-ts/src/utils/signerDomain.js +0 -37
  1400. package/dist/esm/react/shared-ts/src/utils/signerSlot.js +0 -12
  1401. package/dist/esm/react/shared-ts/src/utils/signingSessionSeal.js +0 -98
  1402. package/dist/esm/react/shared-ts/src/utils/theme.js +0 -8
  1403. package/dist/esm/react/shared-ts/src/utils/thresholdEcdsaChainTarget.js +0 -9
  1404. package/dist/esm/react/shared-ts/src/utils/thresholdEcdsaKeyHandle.js +0 -28
  1405. package/dist/esm/react/shared-ts/src/utils/validation.js +0 -92
  1406. package/dist/esm/react/shared-ts/src/utils/walletAddSignerActivation.js +0 -32
  1407. package/dist/esm/react/shared-ts/src/utils/walletAuthAuthority.js +0 -224
  1408. package/dist/esm/react/shared-ts/src/utils/walletAuthMethodRecord.js +0 -357
  1409. package/dist/esm/react/shared-ts/src/utils/walletCapabilityBindings.js +0 -277
  1410. package/dist/esm/react/shared-ts/src/utils/walletSessionFailure.js +0 -28
  1411. package/dist/esm/react/shared-ts/src/utils/webauthnDeviceInfo.js +0 -50
  1412. package/dist/esm/react/shared-ts/src/utils/wireSchema.js +0 -66
  1413. package/dist/esm/react/shared-ts/src/wallet-recovery/index.js +0 -10
  1414. package/dist/esm/react/shared-ts/src/wallet-recovery/recoveryCodeIssuance.js +0 -35
  1415. package/dist/esm/react/shared-ts/src/wallet-recovery/recoveryCodeLocator.js +0 -34
  1416. package/dist/esm/react/shared-ts/src/wallet-recovery/recoveryCodeReservation.js +0 -24
  1417. package/dist/esm/react/shared-ts/src/wallet-recovery/recoveryCodes.js +0 -3
  1418. package/dist/esm/react/shared-ts/src/wallet-recovery/recoveryKeyId.js +0 -14
  1419. package/dist/esm/react/shared-ts/src/wallet-recovery/walletRecoveryCommittedProjection.js +0 -251
  1420. package/dist/esm/react/shared-ts/src/wallet-recovery/walletRecoveryEcdsaPossession.js +0 -153
  1421. package/dist/esm/react/shared-ts/src/wallet-recovery/walletRecoveryEnvelopeSet.js +0 -84
  1422. package/dist/esm/react/shared-ts/src/wallet-recovery/walletRecoveryRotation.js +0 -64
  1423. package/dist/esm/react/theme/base-styles.js +0 -117
  1424. package/dist/esm/react/theme/palette.js +0 -170
  1425. package/dist/esm/react/utils/deviceDetection.js +0 -95
  1426. package/dist/esm/react/utils/intentDigest.js +0 -77
  1427. package/dist/esm/react/utils/menuItemBlink.js +0 -24
  1428. package/dist/esm/react/utils/qrScanner.js +0 -297
  1429. package/dist/esm/sdk/ConfirmationDrawer-MgFTBwwK.js +0 -425
  1430. package/dist/esm/sdk/EvmClient-f3gUhS2L.js +0 -644
  1431. package/dist/esm/sdk/NearClient-DY4NfHeD.js +0 -402
  1432. package/dist/esm/sdk/NonceCoordinator-4XWPhYww.js +0 -2253
  1433. package/dist/esm/sdk/accountIds-DhIPGOSN.js +0 -23
  1434. package/dist/esm/sdk/accountLifecycle-zthG08aC.js +0 -1341
  1435. package/dist/esm/sdk/actions-CCvThiKe.js +0 -225
  1436. package/dist/esm/sdk/adapters-Dli9XAZp.js +0 -4836
  1437. package/dist/esm/sdk/base-D1B5mGin.js +0 -64
  1438. package/dist/esm/sdk/base64-Clm8C-e9.js +0 -68
  1439. package/dist/esm/sdk/browser-D6eZGhzE.js +0 -2393
  1440. package/dist/esm/sdk/bytes-qKxKn4gg.js +0 -40
  1441. package/dist/esm/sdk/canonicalPrimitives-BTHWz80v.js +0 -36
  1442. package/dist/esm/sdk/canonicalSignerErrorCode-BBIk365e.js +0 -139
  1443. package/dist/esm/sdk/capabilityKinds-hvYqa6S_.js +0 -109
  1444. package/dist/esm/sdk/chains-BMh3btVo.js +0 -124
  1445. package/dist/esm/sdk/challengeDelivery-DZtopOAG.js +0 -74
  1446. package/dist/esm/sdk/chunk-BtrIJ4_z.js +0 -33
  1447. package/dist/esm/sdk/configHelpers-D1EqxVxg.js +0 -179
  1448. package/dist/esm/sdk/csp-stylesheet-btENhsNp.js +0 -215
  1449. package/dist/esm/sdk/defaultConfigs-D_33pPT9.js +0 -355
  1450. package/dist/esm/sdk/display-P4nQF-yc.js +0 -126
  1451. package/dist/esm/sdk/domainIds-lcrFg6Sa.js +0 -338
  1452. package/dist/esm/sdk/ecdsaCapabilityManifest-DuMs0VtU.js +0 -805
  1453. package/dist/esm/sdk/ecdsaChainTarget-Bl-JWyuw.js +0 -121
  1454. package/dist/esm/sdk/ecdsaPresignLifecycle-Bfx2AQKb.js +0 -1983
  1455. package/dist/esm/sdk/ecdsaPresignPoolIdentity-BjxZVIqn.js +0 -47
  1456. package/dist/esm/sdk/ecdsaWalletRecords-D42rtA9z.js +0 -18
  1457. package/dist/esm/sdk/encoders-D8d07vpx.js +0 -0
  1458. package/dist/esm/sdk/enrichDisplayModelWithAbi-CWggsykc.js +0 -395
  1459. package/dist/esm/sdk/enrichDisplayModelWithAbi-SDRwTd_M.js +0 -579
  1460. package/dist/esm/sdk/errors-93h9uAW9.js +0 -92
  1461. package/dist/esm/sdk/events-DYoBL2HO.js +0 -8
  1462. package/dist/esm/sdk/evmCryptoWasm-DWklhEEb.js +0 -196
  1463. package/dist/esm/sdk/evmFamilyEcdsaIdentity-CqGafQsI.js +0 -4274
  1464. package/dist/esm/sdk/exactSessionState-LWDUXydN.js +0 -2592
  1465. package/dist/esm/sdk/exactSigningLaneIdentity-m6uTXV_A.js +0 -335
  1466. package/dist/esm/sdk/executeWorkerOperation-Cl9whMK7.js +0 -10
  1467. package/dist/esm/sdk/export-viewer-host-rWMSQQMP.js +0 -204
  1468. package/dist/esm/sdk/helpers-ZrowMnev.js +0 -302
  1469. package/dist/esm/sdk/host-CnV8nAUe.js +0 -533
  1470. package/dist/esm/sdk/intentDigest-CvOSNlCH.js +0 -75
  1471. package/dist/esm/sdk/jsonRpc-VVkaQkFD.js +0 -62
  1472. package/dist/esm/sdk/jsxRuntime.module-CuH5ZEIA.js +0 -298
  1473. package/dist/esm/sdk/keccak-DUL3d8SF.js +0 -148
  1474. package/dist/esm/sdk/keyMaterialBrands-CogGAAZn.js +0 -94
  1475. package/dist/esm/sdk/localOnly-DTpa2jD5.js +0 -146
  1476. package/dist/esm/sdk/messages-C7Dbx9iN.js +0 -594
  1477. package/dist/esm/sdk/mountExportPrivateKeySurface-DgX-IBG_.js +0 -542
  1478. package/dist/esm/sdk/mountRecoveryCodeBackupSurface-DXrExiJ7.js +0 -590
  1479. package/dist/esm/sdk/nearEd25519YaoMaterialActivation-B5GecIvq.js +0 -4018
  1480. package/dist/esm/sdk/nearEd25519YaoSigningPreparation-CdOT5RuC.js +0 -405
  1481. package/dist/esm/sdk/nearRpcResults-DoUgDATm.js +0 -216
  1482. package/dist/esm/sdk/nonceLaneKeys-C3c9lG6u.js +0 -164
  1483. package/dist/esm/sdk/normalization-CBt413-z.js +0 -22
  1484. package/dist/esm/sdk/operationFingerprint-C8Trar4R.js +0 -929
  1485. package/dist/esm/sdk/operationFingerprint-CGZui5dR.js +0 -55
  1486. package/dist/esm/sdk/passkey-custody-UUHbC0pk.js +0 -487
  1487. package/dist/esm/sdk/pendingWalletRecoveryCodeBackup-BWluQMbt.js +0 -237
  1488. package/dist/esm/sdk/prfCache-wqQSjYLn.js +0 -58
  1489. package/dist/esm/sdk/profileAccountProjection-uZVJuBvS.js +0 -86
  1490. package/dist/esm/sdk/promptText-CuRa_ivd.js +0 -32
  1491. package/dist/esm/sdk/recovery-entrypoint-C3fydnRC.js +0 -779
  1492. package/dist/esm/sdk/registration-Ct_7LdGf.js +0 -14402
  1493. package/dist/esm/sdk/registration-DHERU8R_.js +0 -233
  1494. package/dist/esm/sdk/registrationAccounts-DmWPzf3T.js +0 -33
  1495. package/dist/esm/sdk/registrationIds-DLSdEKSv.js +0 -310
  1496. package/dist/esm/sdk/registrationIntent-4zwk16zQ.js +0 -387
  1497. package/dist/esm/sdk/registrationPreparationPreload-D6zpWp4O.js +0 -13
  1498. package/dist/esm/sdk/registrationSignerPlan-DhV8VAob.js +0 -437
  1499. package/dist/esm/sdk/relayerHttp-VC8Holz1.js +0 -24
  1500. package/dist/esm/sdk/routePlan-D59x5xzQ.js +0 -83
  1501. package/dist/esm/sdk/router-B4ZWFy9E.js +0 -4721
  1502. package/dist/esm/sdk/routerAbNormalSigning-CVFEOZ2m.js +0 -992
  1503. package/dist/esm/sdk/runtime-auth-DdfynDKt.js +0 -5393
  1504. package/dist/esm/sdk/runtime-device-link-HJ2ptFux.js +0 -259
  1505. package/dist/esm/sdk/runtime-ecdsa-tempo-BGLsTAWR.js +0 -177
  1506. package/dist/esm/sdk/runtime-email-otp-CpX88VZJ.js +0 -320
  1507. package/dist/esm/sdk/runtime-export-DIVY473L.js +0 -112
  1508. package/dist/esm/sdk/runtime-near-CxtQi4b2.js +0 -278
  1509. package/dist/esm/sdk/runtime-preferences-vnJc5Svg.js +0 -67
  1510. package/dist/esm/sdk/runtime-recovery-codes-BSCLVHQj.js +0 -95
  1511. package/dist/esm/sdk/runtime-recovery-i08vCJST.js +0 -45
  1512. package/dist/esm/sdk/runtimeContext-D3TBExQ6.js +0 -44484
  1513. package/dist/esm/sdk/runtimeLoader-DQVEFVaW.js +0 -44
  1514. package/dist/esm/sdk/sdkSentEvents-MqDkbQg1.js +0 -599
  1515. package/dist/esm/sdk/secp256k1-D-I6Gh4D.js +0 -2515
  1516. package/dist/esm/sdk/secureRandomId-BORsmdS4.js +0 -33
  1517. package/dist/esm/sdk/sessionPolicy-DO-MkL65.js +0 -460
  1518. package/dist/esm/sdk/shared-DkbeLCI3.js +0 -33
  1519. package/dist/esm/sdk/signEvmFamily-C3C97Th-.js +0 -4607
  1520. package/dist/esm/sdk/signEvmFamilyWithUiConfirmForTempo-BI9DSTIS.js +0 -226
  1521. package/dist/esm/sdk/signEvmWithUiConfirm-Bmcim5-g.js +0 -27
  1522. package/dist/esm/sdk/signNear-Bmb2fj_a.js +0 -5893
  1523. package/dist/esm/sdk/signatureUses-BkGyYt8F.js +0 -51
  1524. package/dist/esm/sdk/signerDomain-IEAVrOrc.js +0 -59
  1525. package/dist/esm/sdk/signerLoader-B7orgq5Z.js +0 -23
  1526. package/dist/esm/sdk/signerSlot-_ovonwVX.js +0 -10
  1527. package/dist/esm/sdk/signingFlow-SZ8t_lxv.js +0 -1319
  1528. package/dist/esm/sdk/signingSessionSeal-Cu-GHm6y.js +0 -96
  1529. package/dist/esm/sdk/surface-measurement-reporter-CSTyRsMa.js +0 -156
  1530. package/dist/esm/sdk/trace-DKLQZvec.js +0 -126
  1531. package/dist/esm/sdk/transaction-activity-CSMCveBn.js +0 -218
  1532. package/dist/esm/sdk/transactionReview-DpHLTznU.js +0 -100
  1533. package/dist/esm/sdk/transactionReviewAdmission-BCPvl8OZ.js +0 -172
  1534. package/dist/esm/sdk/transactionState-CJ4U8pcl.js +0 -1894
  1535. package/dist/esm/sdk/types-Dx9fczU7.js +0 -111
  1536. package/dist/esm/sdk/validation-gat4LEKm.js +0 -409
  1537. package/dist/esm/sdk/wallet-recovery-BX61-79p.js +0 -1902
  1538. package/dist/esm/sdk/walletAuthority-DD9T25F6.js +0 -1247
  1539. package/dist/esm/sdk/walletCustodyEcdsaContinuity-CF4bv9OI.js +0 -11000
  1540. package/dist/esm/sdk/walletIframeIdentity-DB6Z2EC9.js +0 -13
  1541. package/dist/esm/sdk/walletRecoveryCommit-AI1AtIRP.js +0 -2101
  1542. package/dist/esm/sdk/walletRecoveryRotate-BgLlW5ih.js +0 -309
  1543. package/dist/esm/sdk/warmSessionHydration-Os8niEm7.js +0 -7
  1544. package/dist/esm/sdk/webauthnP256-DC5EIbKN.js +0 -82
  1545. package/dist/esm/sdk/webauthnPromptCoordinator-L96oVvLz.js +0 -168
  1546. package/dist/esm/shared-ts/src/signing-lanes/rotationDigests.js +0 -6
  1547. package/dist/esm/shared-ts/src/signing-lanes/rotationParsers.js +0 -3
  1548. package/dist/esm/shared-ts/src/signing-lanes/rotationProtocolParsers.js +0 -8
  1549. package/dist/esm/shared-ts/src/signing-lanes/rotationWireFields.js +0 -3
  1550. package/dist/esm/shared-ts/src/utils/addWalletAuthMethod.js +0 -1
  1551. package/dist/esm/styles.css +0 -43
  1552. package/dist/public/sdk/ConfirmationDrawer-MgFTBwwK.js +0 -425
  1553. package/dist/public/sdk/EvmClient-f3gUhS2L.js +0 -644
  1554. package/dist/public/sdk/NearClient-DY4NfHeD.js +0 -402
  1555. package/dist/public/sdk/NonceCoordinator-4XWPhYww.js +0 -2253
  1556. package/dist/public/sdk/accountIds-DhIPGOSN.js +0 -23
  1557. package/dist/public/sdk/accountLifecycle-zthG08aC.js +0 -1341
  1558. package/dist/public/sdk/actions-CCvThiKe.js +0 -225
  1559. package/dist/public/sdk/adapters-Dli9XAZp.js +0 -4836
  1560. package/dist/public/sdk/base-D1B5mGin.js +0 -64
  1561. package/dist/public/sdk/base64-Clm8C-e9.js +0 -68
  1562. package/dist/public/sdk/browser-D6eZGhzE.js +0 -2393
  1563. package/dist/public/sdk/bytes-qKxKn4gg.js +0 -40
  1564. package/dist/public/sdk/canonicalPrimitives-BTHWz80v.js +0 -36
  1565. package/dist/public/sdk/canonicalSignerErrorCode-BBIk365e.js +0 -139
  1566. package/dist/public/sdk/capabilityKinds-hvYqa6S_.js +0 -109
  1567. package/dist/public/sdk/chains-BMh3btVo.js +0 -124
  1568. package/dist/public/sdk/challengeDelivery-DZtopOAG.js +0 -74
  1569. package/dist/public/sdk/chunk-BtrIJ4_z.js +0 -33
  1570. package/dist/public/sdk/configHelpers-D1EqxVxg.js +0 -179
  1571. package/dist/public/sdk/csp-stylesheet-btENhsNp.js +0 -215
  1572. package/dist/public/sdk/defaultConfigs-D_33pPT9.js +0 -355
  1573. package/dist/public/sdk/display-P4nQF-yc.js +0 -126
  1574. package/dist/public/sdk/domainIds-lcrFg6Sa.js +0 -338
  1575. package/dist/public/sdk/ecdsaCapabilityManifest-DuMs0VtU.js +0 -805
  1576. package/dist/public/sdk/ecdsaChainTarget-Bl-JWyuw.js +0 -121
  1577. package/dist/public/sdk/ecdsaPresignLifecycle-Bfx2AQKb.js +0 -1983
  1578. package/dist/public/sdk/ecdsaPresignPoolIdentity-BjxZVIqn.js +0 -47
  1579. package/dist/public/sdk/ecdsaWalletRecords-D42rtA9z.js +0 -18
  1580. package/dist/public/sdk/encoders-D8d07vpx.js +0 -0
  1581. package/dist/public/sdk/enrichDisplayModelWithAbi-CWggsykc.js +0 -395
  1582. package/dist/public/sdk/enrichDisplayModelWithAbi-SDRwTd_M.js +0 -579
  1583. package/dist/public/sdk/errors-93h9uAW9.js +0 -92
  1584. package/dist/public/sdk/events-DYoBL2HO.js +0 -8
  1585. package/dist/public/sdk/evmCryptoWasm-DWklhEEb.js +0 -196
  1586. package/dist/public/sdk/evmFamilyEcdsaIdentity-CqGafQsI.js +0 -4274
  1587. package/dist/public/sdk/exactSessionState-LWDUXydN.js +0 -2592
  1588. package/dist/public/sdk/exactSigningLaneIdentity-m6uTXV_A.js +0 -335
  1589. package/dist/public/sdk/executeWorkerOperation-Cl9whMK7.js +0 -10
  1590. package/dist/public/sdk/export-viewer-host-rWMSQQMP.js +0 -204
  1591. package/dist/public/sdk/helpers-ZrowMnev.js +0 -302
  1592. package/dist/public/sdk/host-CnV8nAUe.js +0 -533
  1593. package/dist/public/sdk/intentDigest-CvOSNlCH.js +0 -75
  1594. package/dist/public/sdk/jsonRpc-VVkaQkFD.js +0 -62
  1595. package/dist/public/sdk/jsxRuntime.module-CuH5ZEIA.js +0 -298
  1596. package/dist/public/sdk/keccak-DUL3d8SF.js +0 -148
  1597. package/dist/public/sdk/keyMaterialBrands-CogGAAZn.js +0 -94
  1598. package/dist/public/sdk/localOnly-DTpa2jD5.js +0 -146
  1599. package/dist/public/sdk/messages-C7Dbx9iN.js +0 -594
  1600. package/dist/public/sdk/mountExportPrivateKeySurface-DgX-IBG_.js +0 -542
  1601. package/dist/public/sdk/mountRecoveryCodeBackupSurface-DXrExiJ7.js +0 -590
  1602. package/dist/public/sdk/nearEd25519YaoMaterialActivation-B5GecIvq.js +0 -4018
  1603. package/dist/public/sdk/nearEd25519YaoSigningPreparation-CdOT5RuC.js +0 -405
  1604. package/dist/public/sdk/nearRpcResults-DoUgDATm.js +0 -216
  1605. package/dist/public/sdk/nonceLaneKeys-C3c9lG6u.js +0 -164
  1606. package/dist/public/sdk/normalization-CBt413-z.js +0 -22
  1607. package/dist/public/sdk/operationFingerprint-C8Trar4R.js +0 -929
  1608. package/dist/public/sdk/operationFingerprint-CGZui5dR.js +0 -55
  1609. package/dist/public/sdk/passkey-custody-UUHbC0pk.js +0 -487
  1610. package/dist/public/sdk/pendingWalletRecoveryCodeBackup-BWluQMbt.js +0 -237
  1611. package/dist/public/sdk/prfCache-wqQSjYLn.js +0 -58
  1612. package/dist/public/sdk/profileAccountProjection-uZVJuBvS.js +0 -86
  1613. package/dist/public/sdk/promptText-CuRa_ivd.js +0 -32
  1614. package/dist/public/sdk/recovery-entrypoint-C3fydnRC.js +0 -779
  1615. package/dist/public/sdk/registration-Ct_7LdGf.js +0 -14402
  1616. package/dist/public/sdk/registration-DHERU8R_.js +0 -233
  1617. package/dist/public/sdk/registrationAccounts-DmWPzf3T.js +0 -33
  1618. package/dist/public/sdk/registrationIds-DLSdEKSv.js +0 -310
  1619. package/dist/public/sdk/registrationIntent-4zwk16zQ.js +0 -387
  1620. package/dist/public/sdk/registrationPreparationPreload-D6zpWp4O.js +0 -13
  1621. package/dist/public/sdk/registrationSignerPlan-DhV8VAob.js +0 -437
  1622. package/dist/public/sdk/relayerHttp-VC8Holz1.js +0 -24
  1623. package/dist/public/sdk/routePlan-D59x5xzQ.js +0 -83
  1624. package/dist/public/sdk/router-B4ZWFy9E.js +0 -4721
  1625. package/dist/public/sdk/routerAbNormalSigning-CVFEOZ2m.js +0 -992
  1626. package/dist/public/sdk/runtime-auth-DdfynDKt.js +0 -5393
  1627. package/dist/public/sdk/runtime-device-link-HJ2ptFux.js +0 -259
  1628. package/dist/public/sdk/runtime-ecdsa-tempo-BGLsTAWR.js +0 -177
  1629. package/dist/public/sdk/runtime-email-otp-CpX88VZJ.js +0 -320
  1630. package/dist/public/sdk/runtime-export-DIVY473L.js +0 -112
  1631. package/dist/public/sdk/runtime-near-CxtQi4b2.js +0 -278
  1632. package/dist/public/sdk/runtime-preferences-vnJc5Svg.js +0 -67
  1633. package/dist/public/sdk/runtime-recovery-codes-BSCLVHQj.js +0 -95
  1634. package/dist/public/sdk/runtime-recovery-i08vCJST.js +0 -45
  1635. package/dist/public/sdk/runtimeContext-D3TBExQ6.js +0 -44484
  1636. package/dist/public/sdk/runtimeLoader-DQVEFVaW.js +0 -44
  1637. package/dist/public/sdk/sdkSentEvents-MqDkbQg1.js +0 -599
  1638. package/dist/public/sdk/secp256k1-D-I6Gh4D.js +0 -2515
  1639. package/dist/public/sdk/secureRandomId-BORsmdS4.js +0 -33
  1640. package/dist/public/sdk/sessionPolicy-DO-MkL65.js +0 -460
  1641. package/dist/public/sdk/shared-DkbeLCI3.js +0 -33
  1642. package/dist/public/sdk/signEvmFamily-C3C97Th-.js +0 -4607
  1643. package/dist/public/sdk/signEvmFamilyWithUiConfirmForTempo-BI9DSTIS.js +0 -226
  1644. package/dist/public/sdk/signEvmWithUiConfirm-Bmcim5-g.js +0 -27
  1645. package/dist/public/sdk/signNear-Bmb2fj_a.js +0 -5893
  1646. package/dist/public/sdk/signatureUses-BkGyYt8F.js +0 -51
  1647. package/dist/public/sdk/signerDomain-IEAVrOrc.js +0 -59
  1648. package/dist/public/sdk/signerLoader-B7orgq5Z.js +0 -23
  1649. package/dist/public/sdk/signerSlot-_ovonwVX.js +0 -10
  1650. package/dist/public/sdk/signingFlow-SZ8t_lxv.js +0 -1319
  1651. package/dist/public/sdk/signingSessionSeal-Cu-GHm6y.js +0 -96
  1652. package/dist/public/sdk/surface-measurement-reporter-CSTyRsMa.js +0 -156
  1653. package/dist/public/sdk/trace-DKLQZvec.js +0 -126
  1654. package/dist/public/sdk/transaction-activity-CSMCveBn.js +0 -218
  1655. package/dist/public/sdk/transactionReview-DpHLTznU.js +0 -100
  1656. package/dist/public/sdk/transactionReviewAdmission-BCPvl8OZ.js +0 -172
  1657. package/dist/public/sdk/transactionState-CJ4U8pcl.js +0 -1894
  1658. package/dist/public/sdk/types-Dx9fczU7.js +0 -111
  1659. package/dist/public/sdk/validation-gat4LEKm.js +0 -409
  1660. package/dist/public/sdk/wallet-recovery-BX61-79p.js +0 -1902
  1661. package/dist/public/sdk/walletAuthority-DD9T25F6.js +0 -1247
  1662. package/dist/public/sdk/walletCustodyEcdsaContinuity-CF4bv9OI.js +0 -11000
  1663. package/dist/public/sdk/walletIframeIdentity-DB6Z2EC9.js +0 -13
  1664. package/dist/public/sdk/walletRecoveryCommit-AI1AtIRP.js +0 -2101
  1665. package/dist/public/sdk/walletRecoveryRotate-BgLlW5ih.js +0 -309
  1666. package/dist/public/sdk/warmSessionHydration-Os8niEm7.js +0 -7
  1667. package/dist/public/sdk/webauthnP256-DC5EIbKN.js +0 -82
  1668. package/dist/public/sdk/webauthnPromptCoordinator-L96oVvLz.js +0 -168
  1669. package/dist/types/shared-ts/src/signing-lanes/participantDigest.typecheck.d.ts +0 -2
  1670. package/dist/types/shared-ts/src/signing-lanes/rotation.typecheck.d.ts +0 -2
  1671. package/dist/types/shared-ts/src/signing-lanes/rotationDigests.d.ts +0 -13
  1672. package/dist/types/shared-ts/src/signing-lanes/rotationLifecycle.d.ts +0 -78
  1673. package/dist/types/shared-ts/src/signing-lanes/rotationParsers.d.ts +0 -27
  1674. package/dist/types/shared-ts/src/signing-lanes/rotationProtocolParsers.d.ts +0 -6
  1675. package/dist/types/shared-ts/src/signing-lanes/rotationWireFields.d.ts +0 -20
  1676. package/dist/types/shared-ts/src/wallet-recovery/recoveryCodeAttempt.d.ts +0 -59
  1677. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/transport/webauthn-bridge.d.ts +0 -3
  1678. package/dist/types/wallet/src/core/indexedDB/seamsWalletDB/laneHolderMaterialStore.d.ts +0 -52
  1679. package/dist/types/wallet/src/core/signingEngine/interfaces/nearKeyOps.d.ts +0 -15
  1680. package/dist/types/wallet/src/core/signingEngine/session/holderShares/forbiddenHolderSharePayloads.typecheck.d.ts +0 -2
  1681. package/dist/types/wallet/src/core/signingEngine/session/holderShares/holderShareHandle.d.ts +0 -6
  1682. package/dist/types/wallet/src/core/signingEngine/session/identity/emailOtpEcdsaDerivationIdentity.typecheck.d.ts +0 -2
  1683. package/dist/types/wallet/src/core/signingEngine/session/lanes/operations/activationCoordinator.d.ts +0 -37
  1684. package/dist/types/wallet/src/core/signingEngine/session/lanes/operations/laneMaterialInvalidation.d.ts +0 -23
  1685. package/dist/types/wallet/src/core/signingEngine/session/lanes/operations/operations.typecheck.d.ts +0 -2
  1686. package/dist/types/wallet/src/core/signingEngine/session/lanes/operations/recipientPreparation.d.ts +0 -55
  1687. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/ecdsaProvisionPlan.typecheck.d.ts +0 -6
  1688. package/dist/types/wallet/src/core/signingEngine/threshold/crypto/ecdsaLaneWasm.d.ts +0 -4
  1689. package/dist/types/wallet/src/core/signingEngine/webauthnAuth/fallbacks/safari-fallbacks.d.ts +0 -44
  1690. package/dist/types/wallet/src/core/signingEngine/workerManager/nearKeyOps/createNearKeyOps.d.ts +0 -4
  1691. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/ecdsaLaneHolderWorkerRuntime.d.ts +0 -20
  1692. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/email-otp/passkeyCustodyLink.d.ts +0 -18
  1693. /package/dist/esm/{react/SeamsWeb → SeamsWeb}/assembly/preconnectWalletAssets.js +0 -0
@@ -1,4408 +0,0 @@
1
- import { base58Encode } from "../../../shared-ts/src/utils/base58.js";
2
- import { deriveImplicitNearAccountIdFromEd25519PublicKey } from "../../../shared-ts/src/utils/near.js";
3
- import { getUserFriendlyErrorMessage, isUserCancellationError, toError } from "../../../shared-ts/src/utils/errors.js";
4
- import { base64UrlDecode, base64UrlEncode } from "../../../shared-ts/src/utils/base64.js";
5
- import { secureRandomId } from "../../../shared-ts/src/utils/secureRandomId.js";
6
- import { joinNormalizedUrl } from "../../../shared-ts/src/utils/normalize.js";
7
- import { isObject } from "../../../shared-ts/src/utils/validation.js";
8
- import { normalizeRuntimePolicyScope } from "../../../shared-ts/src/threshold/signingRootScope.js";
9
- import { DEFAULT_UNLOCK_REMAINING_USES, resolveWalletUnlockSessionUsesFromRequestedUses } from "../../../core/signingEngine/threshold/sessionPolicy.js";
10
- import { parseRouterAbEd25519NormalSigningState } from "../../../shared-ts/src/utils/signingSessionSeal.js";
11
- import { mpcMaterialActivationRefsEqual, parseThresholdEcdsaSessionId, parseThresholdEd25519SessionId, parseWalletId } from "../../../shared-ts/src/utils/domainIds.js";
12
- import { sameRouterAbMpcMaterialActivationRef } from "../../../shared-ts/src/utils/routerAbNormalSigningIdentity.js";
13
- import { parseMpcWalletSigningQuotaId, parseWalletSessionAuthorizationId, parseWalletSessionId, parseWalletSessionMintId } from "../../../shared-ts/src/authorization/capabilityKinds.js";
14
- import { parseWalletSessionOperationCredentialV1 } from "../../../shared-ts/src/device-linking/activeWalletSession.js";
15
- import { buildPasskeyWalletAuthAuthority, parseEmailOtpWalletAuthAuthority, parseWalletAuthAuthorityRef, walletAuthAuthorityRef } from "../../../shared-ts/src/utils/walletAuthAuthority.js";
16
- import { sameRouterAbEcdsaDerivationPublicCapabilityV1, sameRouterAbEcdsaDerivationPublicIdentityV1, sameRouterAbEcdsaRegistrationActivationReceiptV1, sameRouterAbServerIdentityV1 } from "../../../shared-ts/src/utils/routerAbEcdsaDerivation.js";
17
- import { SIGNER_AUTH_METHODS } from "../../../shared-ts/src/utils/signerDomain.js";
18
- import { nearEd25519SigningKeyIdFromString } from "../../../shared-ts/src/utils/registrationIds.js";
19
- import { thresholdEcdsaChainTargetKey } from "../../../core/signingEngine/interfaces/ecdsaChainTarget.js";
20
- import { buildBaseEvmFamilyEcdsaKeyIdentity, buildEvmFamilyEcdsaSessionLanePolicy, deriveEvmFamilySigningKeySlotId, evmFamilyEcdsaWalletKeyToIdentity, resolveThresholdSigningRootBindingFromRuntimePolicyScope, toEvmFamilyEcdsaKeyHandle, toRpId } from "../../../core/signingEngine/session/identity/evmFamilyEcdsaIdentity.js";
21
- import { buildEmailOtpWalletAuthMethodBinding, buildPasskeyAuthScope, buildPasskeyWalletAuthMethodBinding, buildWalletIdentity, parseRpId } from "../../../shared-ts/src/utils/walletCapabilityBindings.js";
22
- import { exactEd25519SigningLaneIdentity, nearEd25519SignerBindingFromBoundaryFields } from "../../../core/signingEngine/session/identity/exactSigningLaneIdentity.js";
23
- import { parseSignerSlot } from "../../../shared-ts/src/utils/signerSlot.js";
24
- import { buildRouterAbEd25519SigningWalletSession } from "../../../core/signingEngine/session/routerAbSigningWalletSession.js";
25
- import { toAccountId } from "../../../core/types/accountIds.js";
26
- import { buildPasskeyRouterAbEd25519WalletSessionState } from "../../../core/signingEngine/session/warmCapabilities/routerAbEd25519WalletSessionState.js";
27
- import { isWalletCustodySeedBinding } from "../../../shared-ts/src/passkey-custody/custodySecretBinding.js";
28
- import { ROUTER_AB_ED25519_YAO_WARM_RECOVERY_BOOTSTRAP_PATH_V1, parseRouterAbEd25519YaoWarmRecoveryBootstrapRequestV1 } from "../../../shared-ts/src/utils/routerAbEd25519Yao.js";
29
- import "../../../shared-ts/src/device-linking/index.js";
30
- import { verifyPasskeyWalletUnlock } from "../../../core/rpcClients/near/rpcCalls.js";
31
- import { UnlockEventPhase, createUnlockFlowEvent } from "../../../core/types/sdkSentEvents.js";
32
- import { WalletSessionStatusReadScope } from "../../../core/rpcClients/relayer/walletSessionAuthorizationStatus.js";
33
- import { IndexedDbEd25519YaoPublicCapabilityReferenceStore, publishEd25519YaoPublicCapabilityReferenceAndLane } from "../../../core/signingEngine/threshold/ed25519/yaoPublicCapabilityReferences.js";
34
- import { ROUTER_AB_ED25519_YAO_ACTIVE_CLIENT_KIND_V1, RouterAbEd25519YaoClientV1 } from "../../../core/signingEngine/threshold/ed25519/yaoClient.js";
35
- import { destroyLinkedDeviceEcdsaHolderMaterialWasm, reconcileCanonicalEcdsaActivationWasm, storeLinkedDeviceEcdsaHolderMaterialWasm } from "../../../core/signingEngine/threshold/crypto/ecdsaDerivationClientWasm.js";
36
- import { WALLET_CUSTODY_ED25519_MATERIAL_KEY_KIND } from "../../../core/indexedDB/walletCustodyEd25519MaterialRecord.js";
37
- import { openWalletAuthorityLinkedSignerMaterialV1 } from "../../../core/indexedDB/linkedAuthoritySignerMaterial.js";
38
- import { computeWalletEcdsaKeyFactsInventoryChallengeDigestB64u } from "../../../shared-ts/src/utils/ecdsaKeyFactsInventory.js";
39
- import { WalletSessionAuthorizationUpgradeRequiredError, walletSessionAuthorizations } from "../../../core/indexedDB/seamsWalletDB/walletSessionAuthorizationStore.js";
40
- import { IndexedDBManager } from "../../../core/indexedDB/index.js";
41
- import { installLinkedEcdsaHolderRuntimeV1, removeLinkedEcdsaHolderRuntimeV1, resolveLinkedEcdsaHolderRuntimeV1 } from "../../../core/signingEngine/session/material/linkedEcdsaHolderRuntime.js";
42
- import { fetchWalletEcdsaKeyFactsInventoryWithOperationCredential, fetchWalletEcdsaKeyFactsInventoryWithWebAuthn } from "../../../core/rpcClients/relayer/walletRegistration.js";
43
- import { ecdsaAvailableLaneForTarget, isConcreteAvailableSigningLane } from "../../../core/signingEngine/session/availability/availableSigningLanes.js";
44
- import { persistPasskeyEd25519YaoSignerMaterialV1 } from "../../../core/signingEngine/session/passkey/ed25519YaoLocalMaterial.js";
45
- import { buildPasskeyEd25519RestoreMetadata, persistPasskeyEd25519YaoSessionForRefresh } from "../../../core/signingEngine/session/passkey/ed25519YaoSealedSession.js";
46
- import { getNearThresholdKeyMaterial } from "../../../core/accountData/near/keyMaterial.js";
47
- import { isEcdsaCredentialFreeSessionActivationAuthorization } from "../../../core/signingEngine/threshold/ecdsa/postRegistrationSessionActivation.js";
48
- import { exactWalletSessionAuthorityIdentity } from "../../../core/signingEngine/session/persistence/walletSessionAuthorizationProjection.js";
49
- import { getNearAccountProjection } from "../../../core/accountData/near/accountProjection.js";
50
- import { readExactWalletSessionAuthentication } from "../../../core/signingEngine/session/identity/exactWalletSessionReader.js";
51
- import { destroyUnlockedWalletEd25519ExportRootCapabilitiesV1, establishUnlockedWalletEd25519ExportRootCapabilityV1, walletCustodyCeremonyTransportFromWorkerContextV1 } from "../../../core/signingEngine/walletCustody/unlockedEd25519ExportRootCapability.js";
52
- import { unlockEmailOtpAuthorityWallet } from "../../../core/signingEngine/session/emailOtp/walletUnlock.js";
53
- import { disposeWalletCustodyEd25519ActiveClientV1 } from "../../../core/signingEngine/walletCustody/ed25519ActiveClient.js";
54
- import { browserExactWalletSessionReadPorts } from "../../../core/signingEngine/assembly/ports/emailOtp.js";
55
- import { listBrowserCanonicalEcdsaSigningCapabilitiesForWallet, resolveBrowserActiveEcdsaCapabilityRuntime } from "../../assembly/browserSigningSurfaceAssembly.js";
56
- import { rememberPasskeyCustodySessionEnvelope } from "../../../core/signingEngine/session/passkey/passkeyCustodySessionCache.js";
57
- import { listConfiguredThresholdEcdsaPublicationTargets } from "../session/thresholdEcdsaProvisioning.js";
58
- import { openWalletCustodyEd25519ActiveClientV1, walletCustodyActivationFactsFromActiveClientMetadataV1, walletCustodyCacheEnvelopeFromRecordV1 } from "../../../core/signingEngine/walletCustody/openCustodyCache.js";
59
- import { joinCustodyWireFromEnvelopeRecord } from "../../../core/signingEngine/walletCustody/joinCustodyWire.js";
60
- import { passkeyCredentialIdB64uFromAuthentication, passkeyPrfFirstB64uFromCredential } from "../authMethods/passkey/ecdsaBootstrap.js";
61
- import { scheduleEcdsaSessionPresignaturePrefill } from "./scheduleEcdsaSessionPresignaturePrefill.js";
62
- import { resolveManagedRuntimeScopeBootstrap } from "../../../core/config/managedRuntimeScope.js";
63
- import { exactPasskeyWalletAuthAuthorityRefForCredential, exactPasskeyWalletAuthMethodForCredential } from "../authMethods/passkey/exactPasskeyAuthority.js";
64
- import { scheduleLinkedDevicePresignaturePrefill } from "./scheduleLinkedDevicePresignaturePrefill.js";
65
- import { createRouterAbNormalSigningPolicy } from "../session/thresholdWarmSessionBootstrap.js";
66
- import { assertWalletRuntimePostconditions } from "../../../core/signingEngine/session/postconditions/runtimePostconditions.js";
67
- import { buildConfiguredTargetKeyCompletion, collectConfiguredTargetThresholdEcdsaWarmKeys, configuredTargetThresholdEcdsaWarmKey, mergeCanonicalThresholdEcdsaWarmSessionContexts, parseActiveEcdsaSignerRecordForUnlock, planUnlockEcdsaWarmup, requireCompleteConfiguredTargetKeyContext } from "../../../core/signingEngine/session/passkey/unlockEcdsaWarmupPlanner.js";
68
- import { collectPasskeyLoginAssertion } from "../authMethods/passkey/loginAssertion.js";
69
- import { collectFreshLocalPasskeyUnlockCredential, createLocalUnlockChallengeB64u } from "../authMethods/passkey/localUnlock.js";
70
- import { resolveEcdsaActivationJournalSelectors } from "./walletUnlockEcdsaSubject.js";
71
- import { resolveWalletCapabilitySubjectResolution } from "./walletUnlockSubject.js";
72
- //#region src/SeamsWeb/operations/auth/login.ts
73
- function emitUnlockEvent(onEvent, unlockSubjectId, event) {
74
- onEvent?.(createUnlockFlowEvent({
75
- flowId: `unlock:${unlockSubjectId}`,
76
- accountId: unlockSubjectId,
77
- ...event
78
- }));
79
- }
80
- function resolveLoginWalletUnlockSelection(selection) {
81
- switch (selection?.mode) {
82
- case "ed25519_only": return {
83
- mode: "ed25519_only",
84
- ed25519: true
85
- };
86
- case "ecdsa_only": return {
87
- mode: "ecdsa_only",
88
- ecdsa: true
89
- };
90
- case "ed25519_and_ecdsa":
91
- case void 0: return {
92
- mode: "ed25519_and_ecdsa",
93
- ed25519: true,
94
- ecdsa: true
95
- };
96
- }
97
- return assertNeverLoginState(selection);
98
- }
99
- function resolveLoginWalletUnlockSelectionForSubjectSet(args) {
100
- if (args.selection) return resolveLoginWalletUnlockSelection(args.selection);
101
- let hasNearEd25519 = false;
102
- let hasEvmFamilyEcdsa = false;
103
- for (const subject of args.subjectSet.subjects) switch (subject.kind) {
104
- case "near_ed25519_wallet":
105
- hasNearEd25519 = true;
106
- break;
107
- case "evm_family_ecdsa_wallet":
108
- hasEvmFamilyEcdsa = true;
109
- break;
110
- default: return assertNeverLoginState(subject);
111
- }
112
- if (hasNearEd25519 && hasEvmFamilyEcdsa) return {
113
- mode: "ed25519_and_ecdsa",
114
- ed25519: true,
115
- ecdsa: true
116
- };
117
- if (hasNearEd25519) return {
118
- mode: "ed25519_only",
119
- ed25519: true
120
- };
121
- if (hasEvmFamilyEcdsa) return {
122
- mode: "ecdsa_only",
123
- ecdsa: true
124
- };
125
- throw new Error("[login] wallet unlock subject set has no supported capability");
126
- }
127
- function buildAnonymousWalletSession() {
128
- return {
129
- appIdentity: { kind: "anonymous" },
130
- authentication: { kind: "signed_out" },
131
- capabilityProjection: { kind: "not_requested" },
132
- nonceDiagnostics: null
133
- };
134
- }
135
- function isNearEd25519WalletSubject(subject) {
136
- return subject.kind === "near_ed25519_wallet";
137
- }
138
- function isEvmFamilyEcdsaWalletSubject(subject) {
139
- return subject.kind === "evm_family_ecdsa_wallet";
140
- }
141
- function selectNearEd25519WalletSubject(subjectSet) {
142
- const nearSubjects = subjectSet.subjects.filter(isNearEd25519WalletSubject);
143
- if (nearSubjects.length === 0) return null;
144
- if (nearSubjects.length > 1) throw new Error("[WalletSession] multiple NEAR Ed25519 subjects found for wallet session");
145
- return nearSubjects[0] || null;
146
- }
147
- function resolveLoginWalletIdentity(args) {
148
- const nearSubject = selectNearEd25519WalletSubject(args.subjectSet);
149
- const ecdsaSubjects = args.subjectSet.subjects.filter(isEvmFamilyEcdsaWalletSubject);
150
- for (const subject of args.subjectSet.subjects) if (String(subject.walletId) !== String(args.subjectSet.walletId)) throw new Error("[login] wallet unlock subject belongs to a different wallet");
151
- switch (args.selection.mode) {
152
- case "ed25519_only":
153
- if (!nearSubject || ecdsaSubjects.length !== 0) throw new Error("[login] NEAR Ed25519 unlock requires one exact NEAR subject set");
154
- return {
155
- kind: "near_ed25519_capable_wallet",
156
- walletId: args.subjectSet.walletId,
157
- subjectSet: args.subjectSet,
158
- nearAccountId: nearSubject.nearAccountId,
159
- nearEd25519SigningKeyId: nearSubject.nearEd25519SigningKeyId,
160
- signerSlot: nearSubject.signerSlot
161
- };
162
- case "ecdsa_only": {
163
- const [firstEcdsaSubject, ...remainingEcdsaSubjects] = ecdsaSubjects;
164
- if (nearSubject || !firstEcdsaSubject) throw new Error("[login] ECDSA-only unlock requires exact ECDSA subjects");
165
- return {
166
- kind: "evm_family_ecdsa_only_wallet",
167
- walletId: args.subjectSet.walletId,
168
- subjectSet: args.subjectSet,
169
- ecdsaSubjects: [firstEcdsaSubject, ...remainingEcdsaSubjects]
170
- };
171
- }
172
- case "ed25519_and_ecdsa":
173
- if (!nearSubject || ecdsaSubjects.length === 0) throw new Error("[login] combined unlock requires exact NEAR and ECDSA subjects");
174
- return {
175
- kind: "near_ed25519_capable_wallet",
176
- walletId: args.subjectSet.walletId,
177
- subjectSet: args.subjectSet,
178
- nearAccountId: nearSubject.nearAccountId,
179
- nearEd25519SigningKeyId: nearSubject.nearEd25519SigningKeyId,
180
- signerSlot: nearSubject.signerSlot
181
- };
182
- }
183
- return assertNeverLoginState(args.selection);
184
- }
185
- function requireNearLoginWalletBinding(identity) {
186
- if (identity.kind === "near_ed25519_capable_wallet") return identity;
187
- throw new Error("[login] NEAR Ed25519 warm-up requires an exact NEAR subject");
188
- }
189
- function assertEcdsaWarmupMatchesUnlockSubjects(args) {
190
- const allowedThresholdKeyIds = /* @__PURE__ */ new Set();
191
- for (const subject of args.identity.subjectSet.subjects) if (subject.kind === "evm_family_ecdsa_wallet") allowedThresholdKeyIds.add(String(subject.ecdsaThresholdKeyId));
192
- if (allowedThresholdKeyIds.size === 0) throw new Error("[login] ECDSA warm-up requires an exact ECDSA unlock subject");
193
- for (const warmKey of args.context.ecdsaKeys) {
194
- const thresholdKeyId = String(warmKey.key?.ecdsaThresholdKeyId || "").trim();
195
- if (thresholdKeyId && !allowedThresholdKeyIds.has(thresholdKeyId)) throw new Error("[login] ECDSA warm-up key does not match the unlock subject set");
196
- }
197
- }
198
- function ecdsaActivationSelectorsFromSubjectSet(subjectSet) {
199
- const selectors = [];
200
- for (const subject of subjectSet.subjects) {
201
- if (subject.kind !== "evm_family_ecdsa_wallet") continue;
202
- selectors.push({
203
- capability: subject.capability,
204
- authority: subject.authority
205
- });
206
- }
207
- return selectors;
208
- }
209
- async function reconcileCanonicalEcdsaActivationSelectors(args) {
210
- let didFinalize = false;
211
- let pending = false;
212
- for (const selector of args.selectors) {
213
- const result = await reconcileCanonicalEcdsaActivationWasm({
214
- workerCtx: args.workerCtx,
215
- command: {
216
- kind: "reconcile_canonical_ecdsa_activation_v1",
217
- capability: selector.capability,
218
- authority: selector.authority
219
- }
220
- });
221
- switch (result.kind) {
222
- case "canonical_ecdsa_activation_reconciliation_absent_v1": break;
223
- case "canonical_ecdsa_activation_reconciliation_finalized_v1":
224
- didFinalize = true;
225
- break;
226
- case "canonical_ecdsa_activation_reconciliation_pending_v1":
227
- pending = true;
228
- break;
229
- case "canonical_ecdsa_activation_reconciliation_failed_v1": return {
230
- kind: "failed",
231
- didFinalize,
232
- code: result.code
233
- };
234
- default: assertNeverLoginState(result);
235
- }
236
- }
237
- return pending ? {
238
- kind: "pending",
239
- didFinalize
240
- } : {
241
- kind: "settled",
242
- didFinalize
243
- };
244
- }
245
- function reportNonSettledEcdsaActivationReconciliation(result) {
246
- switch (result.kind) {
247
- case "settled": return;
248
- case "pending":
249
- console.warn("[login] ECDSA activation remains prepared and requires confirmation");
250
- return;
251
- case "failed":
252
- console.warn("[login] ECDSA activation reconciliation failed without changing active state", { code: result.code });
253
- return;
254
- }
255
- assertNeverLoginState(result);
256
- }
257
- function walletAuthMethodBindingFromRecord(record) {
258
- const wallet = buildWalletIdentity({ walletId: record.walletId });
259
- switch (record.kind) {
260
- case "passkey": {
261
- const rpId = parseRpId(record.rpId);
262
- if (!rpId.ok) return null;
263
- return buildPasskeyWalletAuthMethodBinding({
264
- walletAuthMethodId: record.walletAuthMethodId,
265
- scope: buildPasskeyAuthScope({
266
- wallet,
267
- rpId: rpId.value
268
- }),
269
- credentialIdB64u: record.credentialIdB64u
270
- });
271
- }
272
- case "email_otp": return buildEmailOtpWalletAuthMethodBinding({
273
- walletAuthMethodId: record.walletAuthMethodId,
274
- wallet,
275
- emailHashHex: record.emailHashHex,
276
- registrationAuthorityId: record.registrationAuthorityId
277
- });
278
- default: return null;
279
- }
280
- }
281
- function walletAuthAuthorityForSelectedPasskeyMethod(record) {
282
- return {
283
- walletId: record.walletId,
284
- factor: {
285
- kind: "passkey",
286
- credentialIdB64u: record.credentialIdB64u
287
- },
288
- verifier: {
289
- kind: "webauthn",
290
- rpId: record.rpId
291
- },
292
- bindingId: record.walletAuthMethodId
293
- };
294
- }
295
- async function walletAuthAuthorityRefForSelectedPasskeyMethod(record) {
296
- return await walletAuthAuthorityRef({ authority: walletAuthAuthorityForSelectedPasskeyMethod(record) });
297
- }
298
- async function resolveExactLinkedEmailOtpAuthority(args) {
299
- const authority = parseEmailOtpWalletAuthAuthority({
300
- walletId: args.authMethod.walletId,
301
- factor: {
302
- kind: "email_otp",
303
- provider: args.provider,
304
- providerUserId: args.providerSubjectId
305
- },
306
- verifier: {
307
- kind: "email_otp_wallet_auth_method",
308
- emailHashHex: args.authMethod.emailHashHex
309
- },
310
- bindingId: args.authMethod.walletAuthMethodId
311
- });
312
- if (!authority) throw new Error("[login] linked Email OTP provider identity does not match selected authority");
313
- return authority;
314
- }
315
- async function walletAuthAuthorityForLinkedDeviceMethod(args) {
316
- if (args.selection.authMethod.kind === "passkey") return walletAuthAuthorityForSelectedPasskeyMethod(args.selection.authMethod);
317
- const providerIdentity = args.providerIdentity;
318
- if (!providerIdentity) throw new Error("[login] linked Email OTP authority provider identity is missing");
319
- return await resolveExactLinkedEmailOtpAuthority({
320
- authMethod: args.selection.authMethod,
321
- provider: providerIdentity.provider,
322
- providerSubjectId: providerIdentity.providerSubjectId
323
- });
324
- }
325
- async function walletAuthAuthorityRefForLinkedDeviceMethod(args) {
326
- return await walletAuthAuthorityRef({ authority: await walletAuthAuthorityForLinkedDeviceMethod(args) });
327
- }
328
- function selectedSignerMaterialForActivation(materials, authorityId, walletAuthMethodId, activation) {
329
- let selected = null;
330
- for (const material of materials) {
331
- if (material.authorityId !== authorityId || material.walletAuthMethodId !== walletAuthMethodId || material.activationId !== activation.activationId) continue;
332
- if (selected) return null;
333
- selected = material;
334
- }
335
- return selected;
336
- }
337
- function linkedDeviceUnlockIdentityMismatchLabels(input) {
338
- const failures = [];
339
- if (input.selection.walletId !== input.walletId) failures.push("selection_wallet_id");
340
- if (!input.allowUnselectedSibling && input.selection.walletAuthMethodId !== input.authMethod.walletAuthMethodId) failures.push("selection_auth_method_id");
341
- if (input.authMethod.walletId !== input.walletId) failures.push("auth_method_wallet_id");
342
- if (input.authMethod.status !== "active") failures.push("auth_method_inactive");
343
- if (input.expectedKind && input.authMethod.kind !== input.expectedKind) failures.push(`auth_method_not_${input.expectedKind}`);
344
- if (input.authority.walletId !== input.walletId) failures.push("authority_wallet_id");
345
- if (input.authority.state !== "active") failures.push("authority_inactive");
346
- if (input.authority.authorityId !== input.authMethod.walletAuthorityId) failures.push("authority_auth_method_id");
347
- return failures;
348
- }
349
- async function resolveLinkedDevicePasskeyAuthoritySelection(walletIdInput) {
350
- const parsedWalletId = parseWalletId(walletIdInput);
351
- if (!parsedWalletId.ok) return null;
352
- const walletId = parsedWalletId.value;
353
- try {
354
- const resolved = await IndexedDBManager.resolveSelectedWalletAuthority(String(walletId));
355
- if (resolved.kind !== "resolved") return null;
356
- const { selection, authMethod, authority } = resolved;
357
- if (linkedDeviceUnlockIdentityMismatchLabels({
358
- walletId,
359
- selection,
360
- authMethod,
361
- authority,
362
- expectedKind: "passkey"
363
- }).length > 0) return null;
364
- if (authMethod.status !== "active" || authMethod.kind !== "passkey") return null;
365
- if (authority.state !== "active") return null;
366
- if (authority.provenance.kind !== "device_link") return null;
367
- return {
368
- kind: "linked_device_passkey_authority_selection_v1",
369
- walletId,
370
- selection,
371
- authMethod,
372
- authority,
373
- signerMaterials: resolved.signerMaterials,
374
- exportRoot: resolved.exportRoot
375
- };
376
- } catch {
377
- return null;
378
- }
379
- }
380
- async function resolveLinkedDeviceEmailOtpAuthoritySelection(args) {
381
- const parsedWalletId = parseWalletId(args.walletIdInput);
382
- const emailHashHex = String(args.emailHashHex || "").trim().toLowerCase();
383
- const providerSubjectId = String(args.providerSubjectId || "").trim();
384
- if (!parsedWalletId.ok || !emailHashHex || !providerSubjectId) return { kind: "none" };
385
- const walletId = parsedWalletId.value;
386
- let resolved;
387
- try {
388
- resolved = args.walletAuthMethodId ? await IndexedDBManager.resolveWalletAuthorityForMethod(String(walletId), args.walletAuthMethodId) : await IndexedDBManager.resolveSelectedWalletAuthority(String(walletId));
389
- } catch (error) {
390
- return {
391
- kind: "rejected",
392
- message: error instanceof Error ? error.message : "Selected Email OTP authority is unavailable"
393
- };
394
- }
395
- if (resolved.kind === "missing_selection") return { kind: "none" };
396
- if (resolved.kind !== "resolved") return {
397
- kind: "rejected",
398
- message: "Selected Email OTP authority is unavailable"
399
- };
400
- const { selection, authMethod, authority } = resolved;
401
- if (authMethod.kind !== "email_otp") return { kind: "none" };
402
- if (linkedDeviceUnlockIdentityMismatchLabels({
403
- walletId,
404
- selection,
405
- authMethod,
406
- authority,
407
- expectedKind: "email_otp",
408
- allowUnselectedSibling: Boolean(args.walletAuthMethodId)
409
- }).length > 0 || authMethod.emailHashHex.toLowerCase() !== emailHashHex) return {
410
- kind: "rejected",
411
- message: "Selected Email OTP authority is inactive or does not match the verified email"
412
- };
413
- if (authMethod.status !== "active" || authority.state !== "active") return {
414
- kind: "rejected",
415
- message: "Selected Email OTP authority is inactive"
416
- };
417
- try {
418
- await resolveExactLinkedEmailOtpAuthority({
419
- authMethod,
420
- provider: args.provider,
421
- providerSubjectId
422
- });
423
- } catch (error) {
424
- return {
425
- kind: "rejected",
426
- message: error instanceof Error ? error.message : "Selected Email OTP provider identity does not match the local authority"
427
- };
428
- }
429
- if (authority.provenance.kind === "device_link" && resolved.signerMaterials.length === 0) return {
430
- kind: "rejected",
431
- message: "Selected linked Email OTP authority has no signer material"
432
- };
433
- if (resolved.signerMaterials.some((material) => material.kind !== "wallet_authority_linked_signer_material_v1")) return {
434
- kind: "rejected",
435
- message: "Selected Email OTP authority has an invalid linked signer material set"
436
- };
437
- return {
438
- kind: "selected",
439
- selection: {
440
- kind: "linked_device_email_otp_authority_selection_v1",
441
- walletId,
442
- selection,
443
- authMethod,
444
- authority,
445
- signerMaterials: resolved.signerMaterials,
446
- exportRoot: resolved.exportRoot
447
- }
448
- };
449
- }
450
- function linkedDeviceActivationForCapability(authority, subject) {
451
- const activation = subject.keyFamily === "ed25519" ? authority.signerActivations.ed25519 : authority.signerActivations.ecdsa;
452
- if (!activation) throw new Error(`[login] linked Wallet Session requested unavailable ${subject.keyFamily} material`);
453
- if (!mpcMaterialActivationRefsEqual(activation.materialActivation, subject.materialActivation)) throw new Error("[login] linked Wallet Session material activation does not match authority");
454
- return activation.materialActivation;
455
- }
456
- function assertLinkedDeviceWalletSessionExact(selection, walletSession) {
457
- if (walletSession.walletId !== selection.walletId || walletSession.authorityId !== selection.authority.authorityId || walletSession.authMethodId !== selection.authMethod.walletAuthMethodId || walletSession.authorityDigestB64u !== selection.authority.authorityDigestB64u || walletSession.authorityRevocationEpoch !== selection.authority.revocationEpoch) throw new Error("[login] linked Wallet Session identity does not match selected authority");
458
- for (const subject of walletSession.capabilitySubjects) switch (subject.kind) {
459
- case "sign":
460
- case "export_keys": {
461
- const activation = linkedDeviceActivationForCapability(selection.authority, subject);
462
- const material = selectedSignerMaterialForActivation(selection.signerMaterials, selection.authority.authorityId, selection.authMethod.walletAuthMethodId, activation);
463
- if (!material || material.keyFamily !== subject.keyFamily) throw new Error("[login] linked Wallet Session signer material is unavailable");
464
- if (!mpcMaterialActivationRefsEqual(material.materialActivation, subject.materialActivation)) throw new Error("[login] linked Wallet Session signer material activation is invalid");
465
- break;
466
- }
467
- case "link_devices":
468
- case "revoke_devices": break;
469
- default: return assertNeverLoginState(subject);
470
- }
471
- }
472
- function assertLinkedPasskeyMaterialTargetFactor(material, selection) {
473
- const target = material.targetFactor;
474
- if (target.kind !== "passkey" || target.walletAuthMethodId !== selection.authMethod.walletAuthMethodId || target.rpId !== selection.authMethod.rpId || target.credentialIdB64u !== selection.authMethod.credentialIdB64u) throw new Error("[login] linked passkey signer material target factor does not match V2 auth");
475
- }
476
- async function openLinkedDeviceSignerMaterialsWithFactorSecret(args) {
477
- if (args.factorSecret32.byteLength !== 32) throw new Error("[login] linked signer material requires a 32-byte factor secret");
478
- const factorSecret = args.factorSecret32.slice();
479
- try {
480
- const opened = [];
481
- for (const material of args.selection.signerMaterials) {
482
- if (material.kind !== "wallet_authority_linked_signer_material_v1") throw new Error("[login] linked signer material is not a linked sealed record");
483
- if (args.selection.kind === "linked_device_passkey_authority_selection_v1") assertLinkedPasskeyMaterialTargetFactor(material, args.selection);
484
- else assertLinkedEmailOtpMaterialTargetFactor(material, args.selection);
485
- const result = await openWalletAuthorityLinkedSignerMaterialV1({
486
- record: material,
487
- factorSecret,
488
- expected: {
489
- authorityId: args.selection.authority.authorityId,
490
- walletId: args.selection.walletId,
491
- walletAuthMethodId: args.selection.authMethod.walletAuthMethodId,
492
- packageSetDigestB64u: material.packageSetDigestB64u,
493
- targetFactor: material.targetFactor,
494
- materialActivation: material.materialActivation,
495
- keyFamily: material.keyFamily
496
- }
497
- });
498
- if (result.kind !== "opened_wallet_authority_linked_signer_material_v1") throw new Error(`[login] linked signer material open failed: ${result.reason}`);
499
- opened.push(result);
500
- }
501
- const [first, ...rest] = opened;
502
- if (!first) throw new Error("[login] linked signer material set is empty");
503
- return [first, ...rest];
504
- } finally {
505
- factorSecret.fill(0);
506
- }
507
- }
508
- function assertLinkedEmailOtpMaterialTargetFactor(material, selection) {
509
- const target = material.targetFactor;
510
- if (target.kind !== "email_otp" || target.walletAuthMethodId !== selection.authMethod.walletAuthMethodId || target.emailHashHex.toLowerCase() !== selection.authMethod.emailHashHex.toLowerCase() || target.registrationAuthorityId !== selection.authMethod.registrationAuthorityId) throw new Error("[login] linked Email OTP signer material target factor does not match V2 auth");
511
- }
512
- async function openLinkedDeviceEmailOtpSignerMaterials(args) {
513
- if (args.factorSecret32.byteLength !== 32) throw new Error("[login] linked Email OTP unlock requires a 32-byte factor secret");
514
- return await openLinkedDeviceSignerMaterialsWithFactorSecret({
515
- selection: args.selection,
516
- factorSecret32: args.factorSecret32
517
- });
518
- }
519
- function recentUnlockAccountFromUser(user) {
520
- const walletId = String(user.walletId || "").trim();
521
- if (!walletId) throw new Error("[login] recent unlock account is missing walletId");
522
- const displayName = String(user.loginDisplayName || "").trim() || walletId;
523
- return {
524
- walletId,
525
- nearAccountId: user.nearAccountId,
526
- displayName,
527
- signerSlot: user.signerSlot,
528
- ...typeof user.lastLogin === "number" ? { lastLogin: user.lastLogin } : {},
529
- authMethod: user.authMethod || null
530
- };
531
- }
532
- async function recentUnlockAccountFromLinkedDeviceSelection(selection) {
533
- const resolved = await IndexedDBManager.resolveSelectedWalletAuthority(String(selection.walletId)).catch(() => null);
534
- if (!resolved || resolved.kind !== "resolved" || resolved.selection.walletAuthMethodId !== selection.walletAuthMethodId || resolved.authMethod.status !== "active" || resolved.authority.state !== "active" || resolved.authority.provenance.kind !== "device_link") return null;
535
- const nearSubject = await resolveLinkedDeviceNearUnlockSubject({
536
- walletId: selection.walletId,
537
- authMethod: resolved.authMethod,
538
- authority: resolved.authority,
539
- signerMaterials: resolved.signerMaterials
540
- });
541
- if (nearSubject.kind !== "resolved") return null;
542
- let authMethod;
543
- switch (resolved.authMethod.kind) {
544
- case SIGNER_AUTH_METHODS.passkey:
545
- authMethod = SIGNER_AUTH_METHODS.passkey;
546
- break;
547
- case SIGNER_AUTH_METHODS.emailOtp:
548
- authMethod = SIGNER_AUTH_METHODS.emailOtp;
549
- break;
550
- default: return assertNeverLoginState(resolved.authMethod);
551
- }
552
- return {
553
- walletId: String(selection.walletId),
554
- nearAccountId: nearSubject.subject.nearAccountId,
555
- displayName: String(selection.walletId),
556
- signerSlot: nearSubject.subject.signerSlot,
557
- lastLogin: selection.updatedAtMs,
558
- authMethod
559
- };
560
- }
561
- function recentUnlockAccountKey(account) {
562
- return `${account.walletId}:${account.authMethod ?? ""}`;
563
- }
564
- function latestRecentUnlockAccount(accounts) {
565
- let latest = null;
566
- for (const account of accounts) if (!latest || (account.lastLogin ?? 0) > (latest.lastLogin ?? 0)) latest = account;
567
- return latest;
568
- }
569
- async function readWalletAuthMethodBindingsForSession(walletId) {
570
- if (!walletId) return [];
571
- return (await IndexedDBManager.listWalletAuthMethodsV2ForWallet(String(walletId)).catch(() => [])).filter((record) => record.status === "active").map(walletAuthMethodBindingFromRecord).filter((binding) => Boolean(binding));
572
- }
573
- function selectThresholdWarmupAuthMethodBinding(args) {
574
- if (args.authMethod === SIGNER_AUTH_METHODS.passkey) return null;
575
- if (args.authMethod !== SIGNER_AUTH_METHODS.emailOtp) throw new Error(`[login] unsupported wallet auth method for warm-up: ${args.authMethod}`);
576
- const matches = args.authMethods.filter((binding) => binding.kind === "email_otp");
577
- if (matches.length !== 1) throw new Error("[login] Email OTP warm-up requires one active wallet auth-method binding");
578
- const binding = matches[0];
579
- if (String(binding.wallet.walletId) !== String(args.walletId)) throw new Error("[login] Email OTP warm-up auth-method binding wallet mismatch");
580
- return binding;
581
- }
582
- async function readThresholdWarmupAuthMethodBinding(args) {
583
- return selectThresholdWarmupAuthMethodBinding({
584
- authMethods: await readWalletAuthMethodBindingsForSession(args.walletId),
585
- authMethod: args.authMethod,
586
- walletId: args.walletId
587
- });
588
- }
589
- async function readActiveWalletPasskeyAuthenticators(walletId) {
590
- const [authenticators, authMethods] = await Promise.all([IndexedDBManager.listWalletPasskeyAuthenticators(String(walletId)), IndexedDBManager.listWalletAuthMethodsV2ForWallet(String(walletId)).catch(() => [])]);
591
- const activeCredentialIds = /* @__PURE__ */ new Set();
592
- for (const method of authMethods) if (method.kind === "passkey" && method.status === "active") activeCredentialIds.add(method.credentialIdB64u);
593
- return authenticators.filter((authenticator) => activeCredentialIds.has(authenticator.credentialId));
594
- }
595
- function isActiveThresholdLoginSigningSession(sessionStatus) {
596
- return sessionStatus?.status === "active";
597
- }
598
- function resolveLoginEcdsaKeyFactsInventoryAuthority(args) {
599
- if (!args.request) return null;
600
- switch (args.request.mode) {
601
- case "wallet_session_operation_credential_v1": try {
602
- return {
603
- kind: "wallet_session_operation_credential_v1",
604
- operationCredential: parseLoginEcdsaInventoryOperationCredential(args.request.operationCredential)
605
- };
606
- } catch {
607
- return null;
608
- }
609
- case "webauthn": return { kind: "webauthn" };
610
- }
611
- return null;
612
- }
613
- function parseLoginEcdsaInventoryOperationCredential(value) {
614
- if (value.kind === "opaque_wallet_session_operation_credential_v1") return parseWalletSessionOperationCredentialV1(value);
615
- if (value.kind !== "opaque_hosted_wallet_session_operation_credential_v1" || !/^wsh_[A-Za-z0-9_-]{43}$/.test(value.token)) throw new Error("Hosted Wallet Session operation credential is invalid");
616
- const walletSessionId = parseWalletSessionId(value.walletSessionId);
617
- if (!walletSessionId.ok) throw new Error(`Hosted Wallet Session ID is invalid: ${walletSessionId.error.message}`);
618
- return {
619
- kind: value.kind,
620
- token: value.token,
621
- walletSessionId: walletSessionId.value
622
- };
623
- }
624
- function resolveLoginWarmupRouteAuthorization() {
625
- return { kind: "none" };
626
- }
627
- function loginPasskeyCredentialIdB64u(args) {
628
- return String(args.authenticators.find((authenticator) => authenticator.signerSlot === args.signerSlot)?.credentialId || args.authenticators[0]?.credentialId || "").trim();
629
- }
630
- function buildLoginPasskeyWalletAuthAuthority(args) {
631
- return buildPasskeyWalletAuthAuthority({
632
- walletId: args.walletId,
633
- rpId: args.rpId,
634
- credentialIdB64u: args.credentialIdB64u
635
- });
636
- }
637
- function resolveLoginEd25519SessionAuthority(args) {
638
- if (!args.wantsEd25519Warmup) return { kind: "not_requested" };
639
- if (args.authMethod === SIGNER_AUTH_METHODS.passkey) return {
640
- kind: "passkey",
641
- authority: {
642
- kind: "wallet_auth_authority",
643
- authority: buildLoginPasskeyWalletAuthAuthority({
644
- walletId: args.walletId,
645
- rpId: args.rpId,
646
- credentialIdB64u: args.passkeyCredentialIdB64u
647
- })
648
- },
649
- source: "login"
650
- };
651
- if (args.authMethod === SIGNER_AUTH_METHODS.emailOtp) throw new Error("[login] Email OTP warm-up requires its proof-bound unlock flow");
652
- throw new Error(`[login] unsupported wallet auth method for Ed25519 warm-up: ${args.authMethod}`);
653
- }
654
- function requireRequestedLoginEd25519SessionAuthority(authority) {
655
- if (authority.kind === "not_requested") throw new Error("[login] threshold Ed25519 warm-up authority is missing");
656
- return authority;
657
- }
658
- function bindLoginEd25519SessionAuthorityToAuthenticatedCredential(args) {
659
- if (args.authority.kind === "email_otp") return args.authority;
660
- return {
661
- kind: "passkey",
662
- authority: {
663
- kind: "wallet_auth_authority",
664
- authority: buildLoginPasskeyWalletAuthAuthority({
665
- walletId: args.walletId,
666
- rpId: args.rpId,
667
- credentialIdB64u: args.credentialIdB64u
668
- })
669
- },
670
- source: "login"
671
- };
672
- }
673
- function loginEd25519ExactProvisionAuthBinding(authority) {
674
- switch (authority.kind) {
675
- case "passkey": return {
676
- kind: "passkey",
677
- rpId: toRpId(authority.authority.authority.verifier.rpId),
678
- credentialIdB64u: String(authority.authority.authority.factor.credentialIdB64u || "").trim()
679
- };
680
- case "email_otp": return {
681
- kind: "email_otp",
682
- providerSubjectId: String(authority.authority.authority.factor.providerUserId || "").trim()
683
- };
684
- }
685
- throw new Error("[login] unsupported Ed25519 exact provision authority");
686
- }
687
- function loginEd25519ExactProvisionLaneIdentity(args) {
688
- return exactEd25519SigningLaneIdentity({
689
- signer: nearEd25519SignerBindingFromBoundaryFields({
690
- walletId: args.walletBinding.walletId,
691
- nearAccountId: args.walletBinding.nearAccountId,
692
- nearEd25519SigningKeyId: args.walletBinding.nearEd25519SigningKeyId,
693
- signerSlot: args.signerSlot
694
- }),
695
- auth: loginEd25519ExactProvisionAuthBinding(args.authority),
696
- walletSessionId: args.walletSessionId,
697
- quotaId: args.quotaId,
698
- thresholdSessionId: args.thresholdSessionId
699
- });
700
- }
701
- function resolveLoginWarmEd25519ProvisioningIdentity(args) {
702
- switch (args.mintPlan.kind) {
703
- case "not_requested": throw new Error("[login] threshold Ed25519 mint plan is missing");
704
- case "wallet_custody":
705
- if (args.ecdsaMint) return {
706
- kind: "exact_ed25519_provisioning",
707
- operationCredential: args.ecdsaMint.operationCredential,
708
- laneIdentity: loginEd25519ExactProvisionLaneIdentity({
709
- walletBinding: args.walletBinding,
710
- signerSlot: args.signerSlot,
711
- thresholdSessionId: args.mintPlan.thresholdSessionId,
712
- walletSessionId: args.ecdsaMint.operationCredential.walletSessionId,
713
- quotaId: args.ecdsaMint.quotaId,
714
- authority: args.authority
715
- })
716
- };
717
- return {
718
- kind: "fresh_ed25519_provisioning",
719
- materialActivation: args.mintPlan.custody.ed25519.capability.materialActivation
720
- };
721
- case "fresh": throw new Error("[login] fresh Ed25519 passkey provisioning requires canonical material activation");
722
- case "ecdsa_authorized":
723
- if (!args.ecdsaMint) throw new Error("[login] threshold Ed25519 warm-up requires the ECDSA bootstrap session minted during unlock");
724
- return {
725
- kind: "exact_ed25519_provisioning",
726
- operationCredential: args.ecdsaMint.operationCredential,
727
- laneIdentity: loginEd25519ExactProvisionLaneIdentity({
728
- walletBinding: args.walletBinding,
729
- signerSlot: args.signerSlot,
730
- thresholdSessionId: args.mintPlan.thresholdSessionId,
731
- walletSessionId: args.ecdsaMint.operationCredential.walletSessionId,
732
- quotaId: args.ecdsaMint.quotaId,
733
- authority: args.authority
734
- })
735
- };
736
- }
737
- return assertNeverLoginState(args.mintPlan);
738
- }
739
- function resolveLoginPasskeyMaterialActivation(identity, mintPlan) {
740
- if (identity.kind === "fresh_ed25519_provisioning" && identity.materialActivation) return identity.materialActivation;
741
- if (mintPlan.kind === "wallet_custody") return mintPlan.custody.ed25519.capability.materialActivation;
742
- throw new Error("[login] passkey Ed25519 warm-up requires a canonical material activation");
743
- }
744
- function resolveLoginEd25519ProvisionScope(args) {
745
- if (args.mintPlan.kind !== "wallet_custody") return args.fallback;
746
- return {
747
- relayerKeyId: args.mintPlan.custody.ed25519.relayerKeyId,
748
- participantIds: args.mintPlan.custody.ed25519.participantIds,
749
- runtimePolicyScope: args.mintPlan.custody.ed25519.capability.runtimePolicyScope,
750
- routerAbNormalSigning: args.fallback.routerAbNormalSigning
751
- };
752
- }
753
- function passkeyUnlockEd25519Connection(args) {
754
- const session = args.session;
755
- const custody = args.custody.ed25519;
756
- const passkeyPrfFirstB64u = args.credential ? passkeyPrfFirstB64uFromCredential(args.credential) : "";
757
- if (session.walletId !== String(args.walletBinding.walletId) || session.nearAccountId !== String(args.walletBinding.nearAccountId) || session.nearEd25519SigningKeyId !== String(args.walletBinding.nearEd25519SigningKeyId) || custody.signerSlot !== args.signerSlot || session.relayerKeyId !== args.provisionScope.relayerKeyId || session.thresholdSessionId !== custody.capability.lifecycle.thresholdSessionId || session.remainingUses !== args.remainingUses || !sameEd25519ParticipantIds(session.participantIds, args.provisionScope.participantIds) || !args.provisionScope.runtimePolicyScope || !sameThresholdRuntimePolicyScope(session.runtimePolicyScope, args.provisionScope.runtimePolicyScope) || !sameRouterAbEd25519NormalSigningState(session.routerAbNormalSigning, args.provisionScope.routerAbNormalSigning) || !passkeyPrfFirstB64u) throw new Error("[login] verified unlock returned an invalid Ed25519 Wallet Session");
758
- switch (session.sessionKind) {
759
- case "issued_exact_wallet_session":
760
- if (session.operationCredential.walletSessionId !== session.walletSessionId) throw new Error("[login] verified unlock returned a mismatched Ed25519 credential");
761
- return {
762
- ok: true,
763
- ...session,
764
- passkeyPrfFirstB64u
765
- };
766
- case "already_committed_exact_wallet_session": {
767
- const authorization = args.unlockAuthorization;
768
- if (!authorization) throw new Error("[login] verified unlock reused an Ed25519 Wallet Session without its authorization");
769
- if (authorization.operationCredential.walletSessionId !== session.walletSessionId || authorization.record.walletId !== session.walletId || authorization.record.authorizationId !== session.authorizationId || authorization.record.quotaId !== session.quotaId || authorization.record.expiresAtMs !== session.expiresAtMs) throw new Error("[login] verified unlock reused a mismatched Ed25519 Wallet Session");
770
- return {
771
- ok: true,
772
- ...session,
773
- operationCredential: authorization.operationCredential,
774
- passkeyPrfFirstB64u
775
- };
776
- }
777
- default: return assertNeverLoginState(session);
778
- }
779
- }
780
- function resolveLoginNoServerSessionPasskeyCredentialPlan(args) {
781
- if (args.hasLoginCredential) return { kind: "passkey_credential_already_collected" };
782
- if (!args.requiresLocalPasskeyUnlock) return { kind: "no_local_passkey_required" };
783
- if (args.requireThresholdWarmup) return { kind: "wallet_unlock_owns_passkey_credential" };
784
- return { kind: "local_unlock_passkey_assertion" };
785
- }
786
- function resolveLoginWarmupPasskeyCredentialPlan(args) {
787
- if (args.warmupPlan.signersToWarm.includes("ed25519") && args.requiresLocalPasskeyUnlock) return { kind: "wallet_custody" };
788
- if (args.hasLoginCredential) return { kind: "existing_passkey_credential" };
789
- args.routeAuthorization.kind;
790
- if (args.requiresLocalPasskeyUnlock) throw new Error("[login] passkey warm-up requires the verified wallet-unlock credential");
791
- return { kind: "no_passkey_credential_required" };
792
- }
793
- function authenticatorsForCredentialIds(args) {
794
- if (!args.credentialIds) return args.authenticators;
795
- const allowed = /* @__PURE__ */ new Set();
796
- for (const credentialId of args.credentialIds) allowed.add(credentialId.trim());
797
- const authenticators = [];
798
- for (const authenticator of args.authenticators) if (allowed.has(String(authenticator.credentialId || "").trim())) authenticators.push(authenticator);
799
- if (!authenticators.length) throw new Error("[login] no local authenticator matches the required credential");
800
- return authenticators;
801
- }
802
- function uniqueLoginCredentialIds(authenticators) {
803
- const credentialIds = [];
804
- const seen = /* @__PURE__ */ new Set();
805
- for (const authenticator of authenticators) {
806
- const credentialId = String(authenticator.credentialId || "").trim();
807
- if (!credentialId || seen.has(credentialId)) continue;
808
- seen.add(credentialId);
809
- credentialIds.push(credentialId);
810
- }
811
- return credentialIds;
812
- }
813
- function parseLoginChallengeCredentialIds(value) {
814
- if (!Array.isArray(value)) return [];
815
- const credentialIds = [];
816
- const seen = /* @__PURE__ */ new Set();
817
- for (const entry of value) {
818
- const credentialId = typeof entry === "string" ? entry.trim() : "";
819
- if (!credentialId || seen.has(credentialId)) continue;
820
- seen.add(credentialId);
821
- credentialIds.push(credentialId);
822
- }
823
- return credentialIds;
824
- }
825
- function resolveLoginPasskeyPromptCredentialIds(args) {
826
- const signerAuthenticators = [];
827
- for (const authenticator of args.authenticators) if (authenticator.signerSlot === args.signerSlot) signerAuthenticators.push(authenticator);
828
- const localCredentialIds = uniqueLoginCredentialIds(signerAuthenticators.length > 0 ? signerAuthenticators : args.authenticators);
829
- if (localCredentialIds.length === 0) throw new Error("[login] selected wallet has no local passkey credential ID");
830
- if (args.serverCredentialIds.length === 0) return localCredentialIds;
831
- const serverCredentialIds = new Set(args.serverCredentialIds);
832
- const matchingCredentialIds = [];
833
- for (const credentialId of localCredentialIds) if (serverCredentialIds.has(credentialId)) matchingCredentialIds.push(credentialId);
834
- if (matchingCredentialIds.length === 0) throw new Error("[login] server passkey allow-list does not match local wallet credentials");
835
- return matchingCredentialIds;
836
- }
837
- function resolveLoginUnlockWarmupBranchPlan(args) {
838
- const identity = resolveLoginWalletIdentity({
839
- subjectSet: args.subjectSet,
840
- selection: args.selection
841
- });
842
- switch (args.selection.mode) {
843
- case "ed25519_only": return {
844
- kind: "near_ed25519_only",
845
- wantsEd25519Warmup: true,
846
- wantsEcdsaWarmup: false
847
- };
848
- case "ecdsa_only":
849
- if (identity.kind !== "evm_family_ecdsa_only_wallet") throw new Error("[login] ECDSA-only warm-up requires exact ECDSA subjects");
850
- return {
851
- kind: "evm_family_ecdsa_only",
852
- wantsEd25519Warmup: false,
853
- wantsEcdsaWarmup: args.hasConfiguredEcdsaTargets
854
- };
855
- case "ed25519_and_ecdsa": return {
856
- kind: "near_ed25519_and_evm_family_ecdsa",
857
- wantsEd25519Warmup: true,
858
- wantsEcdsaWarmup: args.hasConfiguredEcdsaTargets
859
- };
860
- }
861
- return assertNeverLoginState(args.selection);
862
- }
863
- function resolveThresholdLoginWarmupPhaseInput(args) {
864
- const relayerUrl = String(args.context.configs?.network.relayer?.url || "").trim();
865
- if (!relayerUrl) throw new Error("[login] threshold warm session requires relayer.url to be configured");
866
- const configuredEcdsaTargets = listConfiguredThresholdEcdsaPublicationTargets(args.context.configs.network.chains);
867
- const branchPlan = resolveLoginUnlockWarmupBranchPlan({
868
- subjectSet: args.subjectSet,
869
- selection: args.selection,
870
- hasConfiguredEcdsaTargets: configuredEcdsaTargets.length > 0
871
- });
872
- const wantsEcdsaWarmup = branchPlan.wantsEcdsaWarmup;
873
- const wantsEd25519Warmup = branchPlan.wantsEd25519Warmup;
874
- const rpId = String(args.context.signingEngine.getRpId() || "").trim();
875
- return {
876
- kind: "threshold_login_warmup_phase_input",
877
- signerSlot: args.signerSlot,
878
- selection: args.selection,
879
- relayerUrl,
880
- rpId,
881
- configuredEcdsaTargets,
882
- selectedEcdsaTargets: wantsEcdsaWarmup ? configuredEcdsaTargets : [],
883
- wantsEd25519Warmup,
884
- wantsEcdsaWarmup,
885
- ed25519SessionAuthority: resolveLoginEd25519SessionAuthority({
886
- wantsEd25519Warmup,
887
- authMethod: args.authMethod,
888
- walletId: args.subjectSet.walletId,
889
- rpId,
890
- passkeyCredentialIdB64u: loginPasskeyCredentialIdB64u({
891
- authenticators: args.authenticators,
892
- signerSlot: args.signerSlot
893
- }),
894
- routeAuthorization: args.routeAuthorization
895
- }),
896
- keyFactsInventoryAuthority: args.keyFactsInventoryAuthority,
897
- routeAuthorization: args.routeAuthorization
898
- };
899
- }
900
- async function assertPasskeyUnlockRuntimePostconditions(args) {
901
- const requiredTargets = [...args.signersWarmed.includes("ed25519") ? [{ curve: "ed25519" }] : [], ...args.signersWarmed.includes("ecdsa") ? listConfiguredThresholdEcdsaPublicationTargets(args.context.configs.network.chains).map((target) => ({
902
- curve: "ecdsa",
903
- chainTarget: target.chainTarget
904
- })) : []];
905
- const credentialIdB64u = passkeyCredentialIdB64uFromAuthentication(args.credential);
906
- if (!credentialIdB64u) throw new Error("[login] runtime lane selection requires the authenticated credential");
907
- const walletId = String(args.walletIdentity.walletId);
908
- const authenticator = await IndexedDBManager.getWalletPasskeyAuthenticator({
909
- walletId,
910
- credentialId: credentialIdB64u
911
- });
912
- const derivedSignerSlot = parseSignerSlot(authenticator?.signerSlot, { min: 1 });
913
- if (!authenticator || derivedSignerSlot === null) throw new Error("[login] authenticated credential resolves no exact local authenticator for its signer slot");
914
- const ownerScope = {
915
- auth: {
916
- kind: "passkey",
917
- rpId: toRpId(args.context.signingEngine.getRpId()),
918
- credentialIdB64u
919
- },
920
- signerSlot: derivedSignerSlot
921
- };
922
- if (requiredTargets.length === 0) return;
923
- await assertWalletRuntimePostconditions({
924
- source: "wallet_unlock",
925
- walletId: String(args.walletIdentity.walletId),
926
- ownerScope,
927
- requiredTargets,
928
- readOwnerScopedSigningLanes: async (input) => await args.context.signingEngine.readOwnerScopedSigningLanes(input, args.statusReads)
929
- });
930
- }
931
- async function markPasskeyLoginSelectionUnlocked(args) {
932
- const credentialIdB64u = passkeyCredentialIdB64uFromAuthentication(args.credential);
933
- if (!credentialIdB64u) throw new Error("[login] successful Passkey unlock omitted its credential identity");
934
- const authority = await exactPasskeyWalletAuthAuthorityRefForCredential({
935
- walletId: args.walletIdentity.walletId,
936
- rpId: args.context.signingEngine.getRpId(),
937
- credentialIdB64u
938
- });
939
- await args.context.signingEngine.markWalletSelectionUnlocked({
940
- walletId: args.walletIdentity.walletId,
941
- walletAuthMethodId: authority.walletAuthMethodId
942
- });
943
- }
944
- function buildNearLoginUnlockAccountSubject(args) {
945
- if (args.userData && String(args.userData.walletId) !== String(args.walletId)) throw new Error("[login] NEAR account projection belongs to a different wallet");
946
- const operationalPublicKey = typeof args.userData?.operationalPublicKey === "string" ? args.userData.operationalPublicKey.trim() : "";
947
- return {
948
- kind: "near_wallet",
949
- walletId: args.walletId,
950
- operationalPublicKey: operationalPublicKey || null
951
- };
952
- }
953
- async function readNearLoginUnlockAccountPhase(args) {
954
- emitUnlockEvent(args.onEvent, String(args.identity.nearAccountId), {
955
- phase: UnlockEventPhase.STEP_02_ACCOUNT_LOOKUP_STARTED,
956
- status: "running",
957
- authMethod: "passkey"
958
- });
959
- const hintUserPromise = args.signerSlotHint !== null ? args.signingEngine.getUserBySignerSlot(args.identity.nearAccountId, args.signerSlotHint).catch(() => null) : Promise.resolve(null);
960
- const [hintUser, lastUser, latestByAccount, authenticators] = await Promise.all([
961
- hintUserPromise,
962
- args.signingEngine.getLastUser().catch(() => null),
963
- getNearAccountProjection(IndexedDBManager, args.identity.nearAccountId).catch(() => null),
964
- readActiveWalletPasskeyAuthenticators(args.identity.walletId)
965
- ]);
966
- if (authenticators.length === 0) throw new Error(`No authenticators found for account ${args.identity.nearAccountId}. Please register an account.`);
967
- let userData = null;
968
- if (hintUser && hintUser.nearAccountId === args.identity.nearAccountId) userData = hintUser;
969
- else if (latestByAccount && latestByAccount.nearAccountId === args.identity.nearAccountId) userData = latestByAccount;
970
- else if (lastUser && lastUser.nearAccountId === args.identity.nearAccountId) userData = lastUser;
971
- else userData = await args.signingEngine.getUserBySignerSlot(args.identity.nearAccountId, Number(args.identity.signerSlot)).catch(() => null);
972
- const accountSubject = buildNearLoginUnlockAccountSubject({
973
- userData,
974
- walletId: args.identity.walletId
975
- });
976
- emitUnlockEvent(args.onEvent, String(args.identity.nearAccountId), {
977
- phase: UnlockEventPhase.STEP_02_ACCOUNT_LOOKUP_SUCCEEDED,
978
- status: "succeeded",
979
- authMethod: "passkey",
980
- data: {
981
- signerSlot: Number(args.identity.signerSlot),
982
- ...accountSubject.operationalPublicKey ? { operationalPublicKey: accountSubject.operationalPublicKey } : { walletKind: accountSubject.kind }
983
- }
984
- });
985
- return {
986
- kind: "login_unlock_account_phase_ready",
987
- accountSubject,
988
- authenticators,
989
- baseSignerSlot: args.signerSlotHint ?? Number(args.identity.signerSlot),
990
- localUnlockAuthMethod: SIGNER_AUTH_METHODS.passkey,
991
- requiresLocalPasskeyUnlock: true
992
- };
993
- }
994
- async function readEcdsaLoginUnlockAccountPhase(args) {
995
- const unlockSubjectId = String(args.identity.walletId);
996
- emitUnlockEvent(args.onEvent, unlockSubjectId, {
997
- phase: UnlockEventPhase.STEP_02_ACCOUNT_LOOKUP_STARTED,
998
- status: "running",
999
- authMethod: "passkey"
1000
- });
1001
- const [profile, eligibleAuthenticators] = await Promise.all([IndexedDBManager.getProfile(unlockSubjectId), readActiveWalletPasskeyAuthenticators(args.identity.walletId)]);
1002
- if (!profile || eligibleAuthenticators.length === 0) throw new Error(`[login] ECDSA wallet ${unlockSubjectId} has no local passkey profile`);
1003
- const persistedSignerSlot = parseSignerSlot(profile.defaultSignerSlot, { min: 1 });
1004
- const baseSignerSlot = args.signerSlotHint ?? persistedSignerSlot;
1005
- if (baseSignerSlot === null) throw new Error("[login] ECDSA wallet profile is missing its exact signerSlot");
1006
- emitUnlockEvent(args.onEvent, unlockSubjectId, {
1007
- phase: UnlockEventPhase.STEP_02_ACCOUNT_LOOKUP_SUCCEEDED,
1008
- status: "succeeded",
1009
- authMethod: "passkey",
1010
- data: {
1011
- signerSlot: baseSignerSlot,
1012
- walletKind: "ecdsa_wallet_only"
1013
- }
1014
- });
1015
- return {
1016
- kind: "login_unlock_account_phase_ready",
1017
- accountSubject: {
1018
- kind: "ecdsa_wallet_only",
1019
- walletId: args.identity.walletId,
1020
- operationalPublicKey: null
1021
- },
1022
- authenticators: eligibleAuthenticators,
1023
- baseSignerSlot,
1024
- localUnlockAuthMethod: SIGNER_AUTH_METHODS.passkey,
1025
- requiresLocalPasskeyUnlock: true
1026
- };
1027
- }
1028
- async function readLoginUnlockAccountPhase(args) {
1029
- switch (args.identity.kind) {
1030
- case "near_ed25519_capable_wallet": return await readNearLoginUnlockAccountPhase({
1031
- signingEngine: args.signingEngine,
1032
- identity: args.identity,
1033
- signerSlotHint: args.signerSlotHint,
1034
- onEvent: args.onEvent
1035
- });
1036
- case "evm_family_ecdsa_only_wallet": return await readEcdsaLoginUnlockAccountPhase({
1037
- identity: args.identity,
1038
- signerSlotHint: args.signerSlotHint,
1039
- onEvent: args.onEvent
1040
- });
1041
- }
1042
- return assertNeverLoginState(args.identity);
1043
- }
1044
- function buildSuccessfulLoginResult(args) {
1045
- switch (args.identity.kind) {
1046
- case "near_ed25519_capable_wallet":
1047
- if (args.accountSubject.kind !== "near_wallet") throw new Error("[login] NEAR unlock returned an ECDSA-only account subject");
1048
- return {
1049
- success: true,
1050
- kind: "near_wallet_unlocked",
1051
- walletId: args.identity.walletId,
1052
- loggedInNearAccountId: String(args.identity.nearAccountId),
1053
- operationalPublicKey: args.accountSubject.operationalPublicKey,
1054
- nearAccountId: args.identity.nearAccountId
1055
- };
1056
- case "evm_family_ecdsa_only_wallet":
1057
- if (args.accountSubject.kind !== "ecdsa_wallet_only") throw new Error("[login] ECDSA-only unlock returned a NEAR account subject");
1058
- return {
1059
- success: true,
1060
- kind: "ecdsa_wallet_unlocked",
1061
- walletId: args.identity.walletId
1062
- };
1063
- }
1064
- return assertNeverLoginState(args.identity);
1065
- }
1066
- async function unlockResolvedWalletSubjectSet(context, subjectSet, options) {
1067
- return await unlockInternal(context, subjectSet, options, { kind: "wallet_only" });
1068
- }
1069
- async function resolveLinkedDeviceNearUnlockSubject(args) {
1070
- const activation = args.authority.signerActivations.ed25519;
1071
- if (!activation) return { kind: "absent" };
1072
- const material = selectedSignerMaterialForActivation(args.signerMaterials, args.authority.authorityId, args.authMethod.walletAuthMethodId, activation.materialActivation);
1073
- if (!material || material.kind !== "wallet_authority_linked_signer_material_v1" || material.keyFamily !== "ed25519" || !mpcMaterialActivationRefsEqual(material.materialActivation, activation.materialActivation)) return { kind: "invalid" };
1074
- const application = material.publicFacts.applicationBinding;
1075
- if (application.wallet_id !== String(args.walletId)) return { kind: "invalid" };
1076
- let match = null;
1077
- const references = await new IndexedDbEd25519YaoPublicCapabilityReferenceStore(IndexedDBManager).listLanes();
1078
- for (const reference of references) {
1079
- let factorMatches;
1080
- switch (args.authMethod.kind) {
1081
- case SIGNER_AUTH_METHODS.passkey:
1082
- factorMatches = reference.auth.kind === SIGNER_AUTH_METHODS.passkey && String(reference.auth.rpId) === String(args.authMethod.rpId) && String(reference.auth.credentialIdB64u) === String(args.authMethod.credentialIdB64u);
1083
- break;
1084
- case SIGNER_AUTH_METHODS.emailOtp:
1085
- factorMatches = reference.auth.kind === SIGNER_AUTH_METHODS.emailOtp;
1086
- break;
1087
- default: return assertNeverLoginState(args.authMethod);
1088
- }
1089
- if (!factorMatches || String(reference.walletId) !== String(args.walletId) || reference.signerSlot !== application.key_creation_signer_slot || String(reference.nearEd25519SigningKeyId) !== application.near_ed25519_signing_key_id || String(reference.thresholdSessionId) !== material.publicFacts.targetBinding.lifecycle.session_id || !mpcMaterialActivationRefsEqual(reference.materialActivation, activation.materialActivation)) continue;
1090
- if (match) return { kind: "invalid" };
1091
- match = reference;
1092
- }
1093
- if (!match) return { kind: "invalid" };
1094
- const signerSlot = parseSignerSlot(match.signerSlot, { min: 1 });
1095
- if (!signerSlot) return { kind: "invalid" };
1096
- return {
1097
- kind: "resolved",
1098
- subject: {
1099
- kind: "near_ed25519_wallet",
1100
- walletId: args.walletId,
1101
- nearAccountId: match.nearAccountId,
1102
- nearEd25519SigningKeyId: match.nearEd25519SigningKeyId,
1103
- signerSlot
1104
- }
1105
- };
1106
- }
1107
- /**
1108
- * The exact authority reference for a linked device whose factor carries no
1109
- * local credential. It names the authority by its own digest and the exact
1110
- * auth method, so it cannot be reconstructed from factor fields several
1111
- * methods may share.
1112
- */
1113
- function requireLinkedDeviceWalletAuthAuthorityRef(input) {
1114
- const authorityRef = parseWalletAuthAuthorityRef({
1115
- kind: "wallet_auth_authority_ref",
1116
- walletId: input.authority.walletId,
1117
- authorityDigest: input.authority.authorityDigestB64u,
1118
- walletAuthMethodId: input.authMethod.walletAuthMethodId
1119
- });
1120
- if (!authorityRef) throw new Error("[login] linked device wallet authority reference is invalid");
1121
- return authorityRef;
1122
- }
1123
- async function resolveLinkedDeviceUnlockSubjectSet(walletIdInput) {
1124
- const parsedWalletId = parseWalletId(walletIdInput);
1125
- if (!parsedWalletId.ok) return null;
1126
- const walletId = parsedWalletId.value;
1127
- try {
1128
- const resolved = await IndexedDBManager.resolveSelectedWalletAuthority(String(walletId));
1129
- if (resolved.kind !== "resolved") return null;
1130
- const { selection, authMethod, authority } = resolved;
1131
- if (linkedDeviceUnlockIdentityMismatchLabels({
1132
- walletId,
1133
- selection,
1134
- authMethod,
1135
- authority
1136
- }).length > 0) return null;
1137
- if (authMethod.status !== "active") return null;
1138
- if (authority.state !== "active") return null;
1139
- const subjects = [];
1140
- const nearSubject = await resolveLinkedDeviceNearUnlockSubject({
1141
- walletId,
1142
- authMethod,
1143
- authority,
1144
- signerMaterials: resolved.signerMaterials
1145
- });
1146
- if (nearSubject.kind === "invalid") return null;
1147
- if (nearSubject.kind === "resolved") subjects.push(nearSubject.subject);
1148
- const ecdsaActivation = authority.signerActivations.ecdsa;
1149
- if (ecdsaActivation) {
1150
- const ecdsaMaterial = selectedSignerMaterialForActivation(resolved.signerMaterials, authority.authorityId, authMethod.walletAuthMethodId, ecdsaActivation.materialActivation);
1151
- if (!ecdsaMaterial || ecdsaMaterial.keyFamily !== "ecdsa_secp256k1") return null;
1152
- if (!mpcMaterialActivationRefsEqual(ecdsaMaterial.materialActivation, ecdsaActivation.materialActivation)) return null;
1153
- let authorityRef;
1154
- try {
1155
- authorityRef = authMethod.kind === SIGNER_AUTH_METHODS.passkey ? await walletAuthAuthorityRefForSelectedPasskeyMethod(authMethod) : requireLinkedDeviceWalletAuthAuthorityRef({
1156
- authority,
1157
- authMethod
1158
- });
1159
- } catch {
1160
- return null;
1161
- }
1162
- subjects.push({
1163
- kind: "evm_family_ecdsa_wallet",
1164
- walletId,
1165
- capability: ecdsaActivation.materialActivation.capability,
1166
- authority: authorityRef,
1167
- ecdsaThresholdKeyId: ecdsaMaterial.ecdsaThresholdKeyId
1168
- });
1169
- }
1170
- const firstSubject = subjects[0];
1171
- if (!firstSubject) return null;
1172
- return {
1173
- kind: "wallet_unlock_subject_set",
1174
- walletId,
1175
- subjects: [firstSubject, ...subjects.slice(1)]
1176
- };
1177
- } catch {
1178
- return null;
1179
- }
1180
- }
1181
- function linkedDeviceRuntimeRequiresCurve(walletSession, curve) {
1182
- return walletSession.capabilitySubjects.some((subject) => (subject.kind === "sign" || subject.kind === "export_keys") && subject.keyFamily === (curve === "ed25519" ? "ed25519" : "ecdsa_secp256k1"));
1183
- }
1184
- function linkedDeviceEd25519Material(materials) {
1185
- const matches = materials.filter((material) => material.keyFamily === "ed25519");
1186
- if (matches.length > 1) throw new Error("[login] linked passkey has multiple active Ed25519 materials");
1187
- return matches[0] ?? null;
1188
- }
1189
- function linkedDeviceEcdsaMaterial(materials) {
1190
- const matches = materials.filter((material) => material.keyFamily === "ecdsa_secp256k1");
1191
- if (matches.length > 1) throw new Error("[login] linked passkey has multiple active ECDSA materials");
1192
- return matches[0] ?? null;
1193
- }
1194
- async function activateLinkedDeviceEcdsaHolderRuntime(args) {
1195
- const existing = resolveLinkedEcdsaHolderRuntimeV1({
1196
- walletId: args.selection.walletId,
1197
- materialActivation: args.material.materialActivation
1198
- });
1199
- if (existing) {
1200
- const [existingAuthorityRef, requestedAuthorityRef] = await Promise.all([walletAuthAuthorityRef({ authority: existing.factorAuthority }), walletAuthAuthorityRef({ authority: args.factorAuthority })]);
1201
- if (existing.authorityId !== args.selection.authority.authorityId || existing.walletAuthMethodId !== args.selection.authMethod.walletAuthMethodId || existing.ecdsaThresholdKeyId !== args.material.publicFacts.ecdsaThresholdKeyId || existingAuthorityRef.authorityDigest !== requestedAuthorityRef.authorityDigest) throw new Error("[login] linked ECDSA holder runtime conflicts with the selected authority");
1202
- return {
1203
- runtime: existing,
1204
- installed: false
1205
- };
1206
- }
1207
- const holderHandleId = secureRandomId("linked-ecdsa-holder");
1208
- try {
1209
- const stored = await storeLinkedDeviceEcdsaHolderMaterialWasm({
1210
- holderHandleId,
1211
- ownedSigningShare32: args.material.material.slice(),
1212
- activationReceiptJson: JSON.stringify(args.material.publicFacts.activationReceipt),
1213
- workerCtx: args.context.signingEngine.getSignerWorkerContext()
1214
- });
1215
- const runtime = {
1216
- kind: "linked_ecdsa_holder_runtime_v1",
1217
- walletId: args.selection.walletId,
1218
- authorityId: args.selection.authority.authorityId,
1219
- walletAuthMethodId: args.selection.authMethod.walletAuthMethodId,
1220
- factorAuthority: args.factorAuthority,
1221
- materialActivation: args.material.materialActivation,
1222
- holderHandleId: stored.holderHandleId,
1223
- ecdsaThresholdKeyId: args.material.publicFacts.ecdsaThresholdKeyId,
1224
- activationReceipt: args.material.publicFacts.activationReceipt
1225
- };
1226
- installLinkedEcdsaHolderRuntimeV1(runtime);
1227
- return {
1228
- runtime,
1229
- installed: true
1230
- };
1231
- } catch (error) {
1232
- await destroyLinkedDeviceEcdsaHolderMaterialWasm({
1233
- holderHandleId,
1234
- workerCtx: args.context.signingEngine.getSignerWorkerContext()
1235
- }).catch(() => void 0);
1236
- throw error;
1237
- }
1238
- }
1239
- async function resolveLinkedDevicePostLinkSelection(factor) {
1240
- if (factor.kind === "passkey") {
1241
- const selection = await resolveLinkedDevicePasskeyAuthoritySelection(String(factor.walletId));
1242
- if (!selection) throw new Error("[login] linked Passkey authority is unavailable after link");
1243
- return selection;
1244
- }
1245
- const resolution = await resolveLinkedDeviceEmailOtpAuthoritySelection({
1246
- walletIdInput: String(factor.walletId),
1247
- walletAuthMethodId: String(factor.walletAuthMethodId),
1248
- emailHashHex: factor.emailHashHex,
1249
- provider: factor.providerIdentity.provider,
1250
- providerSubjectId: factor.providerIdentity.providerSubjectId
1251
- });
1252
- if (resolution.kind !== "selected") throw new Error(resolution.kind === "rejected" ? resolution.message : "[login] linked Email OTP authority is unavailable after link");
1253
- return resolution.selection;
1254
- }
1255
- async function linkedDeviceEd25519SessionAfterLink(args) {
1256
- const metadata = linkedDeviceEd25519Metadata(args.material);
1257
- const nearAccountId = deriveImplicitNearAccountIdFromEd25519PublicKey(`ed25519:${base58Encode(metadata.registeredPublicKey)}`);
1258
- const requestResult = parseRouterAbEd25519YaoWarmRecoveryBootstrapRequestV1({
1259
- kind: "router_ab_ed25519_yao_warm_recovery_bootstrap_request_v1",
1260
- walletId: String(args.selection.walletId),
1261
- nearAccountId,
1262
- nearEd25519SigningKeyId: metadata.applicationBinding.near_ed25519_signing_key_id,
1263
- signerSlot: metadata.applicationBinding.key_creation_signer_slot,
1264
- thresholdSessionId: metadata.scope.threshold_session_id,
1265
- signingWorkerId: metadata.scope.signing_worker_id,
1266
- participantIds: metadata.participantIds
1267
- });
1268
- if (!requestResult.ok) throw new Error(requestResult.message);
1269
- const response = await fetch(`${new URL(args.relayerUrl).origin}${ROUTER_AB_ED25519_YAO_WARM_RECOVERY_BOOTSTRAP_PATH_V1}`, {
1270
- method: "POST",
1271
- headers: {
1272
- Authorization: `Bearer ${args.operationCredential.token}`,
1273
- "Content-Type": "application/json"
1274
- },
1275
- body: JSON.stringify(requestResult.value)
1276
- });
1277
- const raw = await response.json().catch(() => null);
1278
- if (!response.ok || !isObject(raw)) {
1279
- const message = isObject(raw) ? String(raw.message || "").trim() : "";
1280
- throw new Error(`[login] linked Ed25519 post-link bootstrap failed (HTTP ${response.status}): ${message || "invalid response"}`);
1281
- }
1282
- const thresholdSessionId = parseThresholdEd25519SessionId(raw.thresholdSessionId);
1283
- const walletSessionId = parseWalletSessionId(raw.walletSessionId);
1284
- const quotaId = parseMpcWalletSigningQuotaId(raw.quotaId);
1285
- const runtimePolicyScope = normalizeRuntimePolicyScope(raw.runtimePolicyScope);
1286
- const routerAbNormalSigning = parseRouterAbEd25519NormalSigningState(raw.routerAbNormalSigning);
1287
- const participantIds = Array.isArray(raw.participantIds) ? raw.participantIds : [];
1288
- if (raw.kind !== "router_ab_ed25519_yao_warm_recovery_bootstrap_v1" && raw.kind !== "router_ab_ed25519_yao_v2_session_bootstrap_v1" || String(raw.walletId) !== String(args.selection.walletId) || String(raw.nearAccountId) !== requestResult.value.nearAccountId || String(raw.nearEd25519SigningKeyId) !== requestResult.value.nearEd25519SigningKeyId || String(raw.signingWorkerId) !== requestResult.value.signingWorkerId || !thresholdSessionId.ok || !walletSessionId.ok || !quotaId.ok || !runtimePolicyScope || !routerAbNormalSigning || participantIds.length !== 2 || !Number.isSafeInteger(participantIds[0]) || !Number.isSafeInteger(participantIds[1]) || String(walletSessionId.value) !== String(args.operationCredential.walletSessionId) || String(thresholdSessionId.value) !== requestResult.value.thresholdSessionId) throw new Error("[login] linked Ed25519 post-link bootstrap identity is invalid");
1289
- const expiresAtMs = Number(raw.thresholdExpiresAtMs);
1290
- if (!Number.isSafeInteger(expiresAtMs) || expiresAtMs <= Date.now()) throw new Error("[login] linked Ed25519 post-link bootstrap is expired");
1291
- return {
1292
- walletId: String(args.selection.walletId),
1293
- nearAccountId: requestResult.value.nearAccountId,
1294
- nearEd25519SigningKeyId: requestResult.value.nearEd25519SigningKeyId,
1295
- relayerKeyId: requestResult.value.signingWorkerId,
1296
- participantIds: [participantIds[0], participantIds[1]],
1297
- thresholdSessionId: thresholdSessionId.value,
1298
- authorizationId: args.walletSession.authorizationId,
1299
- walletSessionId: walletSessionId.value,
1300
- quotaId: quotaId.value,
1301
- expiresAtMs,
1302
- remainingUses: DEFAULT_UNLOCK_REMAINING_USES,
1303
- runtimePolicyScope,
1304
- routerAbNormalSigning,
1305
- operationCredential: args.operationCredential
1306
- };
1307
- }
1308
- async function activateLinkedDeviceSignerRuntimesAfterLink(args) {
1309
- const selection = await resolveLinkedDevicePostLinkSelection(args.factor);
1310
- assertLinkedDeviceWalletSessionExact(selection, args.walletSession);
1311
- const relayerUrl = String(args.context.configs.network.relayer?.url || "").trim();
1312
- if (!relayerUrl) throw new Error("[login] linked post-link activation requires relayer.url");
1313
- await walletSessionAuthorizations.writeExactWithOperationCredential({
1314
- record: args.walletSession,
1315
- operationCredential: args.operationCredential
1316
- });
1317
- const openedMaterials = await openLinkedDeviceSignerMaterialsWithFactorSecret({
1318
- selection,
1319
- factorSecret32: args.factorSecret32
1320
- });
1321
- try {
1322
- const providerIdentity = args.factor.kind === "email_otp" ? args.factor.providerIdentity : void 0;
1323
- const factorAuthority = await walletAuthAuthorityForLinkedDeviceMethod({
1324
- selection,
1325
- ...providerIdentity ? { providerIdentity } : {}
1326
- });
1327
- const ecdsaMaterial = linkedDeviceEcdsaMaterial(openedMaterials);
1328
- if (ecdsaMaterial) {
1329
- const { runtime } = await activateLinkedDeviceEcdsaHolderRuntime({
1330
- context: args.context,
1331
- selection,
1332
- factorAuthority,
1333
- material: ecdsaMaterial
1334
- });
1335
- scheduleLinkedDevicePresignaturePrefill({
1336
- runtime,
1337
- operationCredential: args.operationCredential,
1338
- expiresAtMs: args.walletSession.expiresAtMs,
1339
- relayerUrl,
1340
- workerCtx: args.context.signingEngine.getSignerWorkerContext()
1341
- });
1342
- }
1343
- const ed25519Material = linkedDeviceEd25519Material(openedMaterials);
1344
- if (ed25519Material) {
1345
- const session = await linkedDeviceEd25519SessionAfterLink({
1346
- relayerUrl,
1347
- selection,
1348
- walletSession: args.walletSession,
1349
- operationCredential: args.operationCredential,
1350
- material: ed25519Material
1351
- });
1352
- await activateLinkedDeviceEd25519Runtime({
1353
- context: args.context,
1354
- selection,
1355
- session,
1356
- material: ed25519Material,
1357
- relayerUrl,
1358
- ...providerIdentity ? { providerIdentity } : {}
1359
- });
1360
- }
1361
- if (selection.exportRoot) {
1362
- if (args.factor.kind === "passkey") await args.context.signingEngine.establishUnlockedWalletEd25519ExportRootCapabilityV1({
1363
- existingEnvelope: selection.exportRoot.envelope,
1364
- passkeyPrfFirstB64u: base64UrlEncode(args.factorSecret32),
1365
- walletId: String(selection.walletId),
1366
- walletAuthMethodId: String(selection.authMethod.walletAuthMethodId),
1367
- walletSessionId: String(args.operationCredential.walletSessionId),
1368
- expiresAtMs: args.walletSession.expiresAtMs
1369
- });
1370
- else if (isWalletCustodySeedBinding(selection.exportRoot.envelope.binding) || selection.exportRoot.envelope.binding.kind === "ed25519_yao_client_root_v1") await establishUnlockedWalletEd25519ExportRootCapabilityV1(walletCustodyCeremonyTransportFromWorkerContextV1(args.context.signingEngine.getSignerWorkerContext()), {
1371
- existingEnvelope: selection.exportRoot.envelope,
1372
- existingFactorSecret: args.factorSecret32,
1373
- walletId: String(selection.walletId),
1374
- walletAuthMethodId: String(selection.authMethod.walletAuthMethodId),
1375
- walletSessionId: String(args.operationCredential.walletSessionId),
1376
- expiresAtMs: args.walletSession.expiresAtMs
1377
- });
1378
- }
1379
- await args.context.signingEngine.markWalletSelectionUnlocked({
1380
- walletId: selection.walletId,
1381
- walletAuthMethodId: selection.authMethod.walletAuthMethodId
1382
- });
1383
- } finally {
1384
- for (const openedMaterial of openedMaterials) openedMaterial.material.fill(0);
1385
- }
1386
- }
1387
- function linkedDeviceEd25519Metadata(material) {
1388
- const binding = material.publicFacts.targetBinding;
1389
- const receipt = material.publicFacts.activationReceipt;
1390
- return {
1391
- kind: ROUTER_AB_ED25519_YAO_ACTIVE_CLIENT_KIND_V1,
1392
- scope: {
1393
- lifecycle_id: binding.lifecycle.lifecycle_id,
1394
- root_share_epoch: binding.lifecycle.root_share_epoch,
1395
- account_id: binding.lifecycle.account_id,
1396
- threshold_session_id: binding.lifecycle.session_id,
1397
- signer_set_id: binding.lifecycle.signer_set_id,
1398
- signing_worker_id: binding.lifecycle.selected_server_id,
1399
- material_activation: binding.material_activation
1400
- },
1401
- applicationBinding: material.publicFacts.applicationBinding,
1402
- participantIds: material.publicFacts.participantIds,
1403
- registeredPublicKey: Uint8Array.from(receipt.registered_public_key),
1404
- signingWorkerVerifyingShare: Uint8Array.from(receipt.signing_worker_verifying_share),
1405
- stateEpoch: BigInt(receipt.state_epoch),
1406
- transcript: Uint8Array.from(receipt.transcript),
1407
- activeCapabilityBinding: binding.session_id,
1408
- materialActivation: material.materialActivation
1409
- };
1410
- }
1411
- function linkedDeviceEmailOtpProviderSubjectId(providerIdentity) {
1412
- const providerSubjectId = String(providerIdentity?.providerSubjectId || "").trim();
1413
- if (!providerSubjectId) throw new Error("[login] linked Email OTP lane provider identity is missing");
1414
- return providerSubjectId;
1415
- }
1416
- function linkedDeviceEd25519SessionFromEmailOtpBootstrap(args) {
1417
- const session = args.session;
1418
- if (session.authorityScope.kind !== "email_otp" || String(session.authorityScope.providerUserId) !== String(args.providerIdentity.providerSubjectId)) {
1419
- const mismatches = [...session.authorityScope.kind !== "email_otp" ? ["scope.kind"] : [], ...session.authorityScope.kind === "email_otp" && String(session.authorityScope.providerUserId) !== String(args.providerIdentity.providerSubjectId) ? ["scope.providerUserId"] : []];
1420
- throw new Error(`[login] linked Email OTP Ed25519 session authority mismatch: ${mismatches.join(", ")}`);
1421
- }
1422
- const thresholdSessionId = parseThresholdEd25519SessionId(session.thresholdSessionId);
1423
- const authorizationId = parseWalletSessionAuthorizationId(session.authorizationId);
1424
- const walletSessionId = parseWalletSessionId(session.walletSessionId);
1425
- const quotaId = parseMpcWalletSigningQuotaId(session.quotaId);
1426
- if (!thresholdSessionId.ok || !authorizationId.ok || !walletSessionId.ok || !quotaId.ok) throw new Error("[login] linked Email OTP Ed25519 session identity is invalid");
1427
- if (args.operationCredential.walletSessionId !== walletSessionId.value) throw new Error("[login] linked Email OTP Ed25519 credential identifies another session");
1428
- return {
1429
- walletId: String(session.walletId),
1430
- nearAccountId: session.nearAccountId,
1431
- nearEd25519SigningKeyId: session.nearEd25519SigningKeyId,
1432
- relayerKeyId: session.routerAbNormalSigning.signingWorkerId,
1433
- participantIds: session.participantIds,
1434
- thresholdSessionId: thresholdSessionId.value,
1435
- authorizationId: authorizationId.value,
1436
- walletSessionId: walletSessionId.value,
1437
- quotaId: quotaId.value,
1438
- expiresAtMs: session.expiresAtMs,
1439
- remainingUses: session.remainingUses,
1440
- runtimePolicyScope: session.runtimePolicyScope,
1441
- routerAbNormalSigning: session.routerAbNormalSigning,
1442
- operationCredential: args.operationCredential
1443
- };
1444
- }
1445
- function linkedDeviceEd25519YaoLaneReference(args) {
1446
- const nearAccountId = toAccountId(args.session.nearAccountId);
1447
- const common = {
1448
- walletId: args.selection.walletId,
1449
- nearAccountId,
1450
- thresholdSessionId: args.session.thresholdSessionId,
1451
- runtimePolicyScope: args.session.runtimePolicyScope,
1452
- materialActivation: args.material.materialActivation,
1453
- nearEd25519SigningKeyId: nearEd25519SigningKeyIdFromString(args.session.nearEd25519SigningKeyId),
1454
- signerSlot: args.material.publicFacts.applicationBinding.key_creation_signer_slot
1455
- };
1456
- if (args.selection.authMethod.kind === "passkey") return {
1457
- ...common,
1458
- auth: {
1459
- kind: "passkey",
1460
- rpId: toRpId(args.selection.authMethod.rpId),
1461
- credentialIdB64u: args.selection.authMethod.credentialIdB64u
1462
- }
1463
- };
1464
- return {
1465
- ...common,
1466
- auth: {
1467
- kind: "email_otp",
1468
- providerSubjectId: linkedDeviceEmailOtpProviderSubjectId(args.providerIdentity)
1469
- },
1470
- remainingUses: args.session.remainingUses,
1471
- expiresAtMs: args.session.expiresAtMs
1472
- };
1473
- }
1474
- async function activateLinkedDeviceEd25519Runtime(args) {
1475
- const metadata = linkedDeviceEd25519Metadata(args.material);
1476
- const application = metadata.applicationBinding;
1477
- const mismatchLabels = [];
1478
- if (args.session.walletId !== String(args.selection.walletId)) mismatchLabels.push("walletId");
1479
- if (application.wallet_id !== String(args.selection.walletId)) mismatchLabels.push("application.walletId");
1480
- if (metadata.scope.account_id !== String(args.selection.walletId)) mismatchLabels.push("material.walletId");
1481
- if (args.session.nearEd25519SigningKeyId !== application.near_ed25519_signing_key_id) mismatchLabels.push("nearEd25519SigningKeyId");
1482
- if (args.session.thresholdSessionId !== metadata.scope.threshold_session_id) mismatchLabels.push("thresholdSessionId");
1483
- if (args.session.relayerKeyId !== metadata.scope.signing_worker_id) mismatchLabels.push("signingWorkerId");
1484
- if (mismatchLabels.length > 0) throw new Error(`[login] linked Ed25519 Wallet Session does not match local material: ${mismatchLabels.join(", ")}`);
1485
- const activeClient = (await RouterAbEd25519YaoClientV1.initializeBundled()).importLinkedMaterial({
1486
- ownedClientScalarShare: args.material.material,
1487
- publicReceipt: args.material.publicFacts.activationReceipt,
1488
- metadata
1489
- });
1490
- let activated = false;
1491
- try {
1492
- const activatedIdentity = await args.context.signingEngine.activateVerifiedNearEd25519YaoMaterial({
1493
- activeClient,
1494
- facts: {
1495
- thresholdSessionId: args.session.thresholdSessionId,
1496
- signer: nearEd25519SignerBindingFromBoundaryFields({
1497
- walletId: args.selection.walletId,
1498
- nearAccountId: toAccountId(args.session.nearAccountId),
1499
- nearEd25519SigningKeyId: nearEd25519SigningKeyIdFromString(args.session.nearEd25519SigningKeyId),
1500
- signerSlot: application.key_creation_signer_slot
1501
- }),
1502
- signingRootId: application.signing_root_id,
1503
- signingRootVersion: metadata.scope.root_share_epoch,
1504
- routerAbNormalSigning: args.session.routerAbNormalSigning,
1505
- runtimePolicyScope: args.session.runtimePolicyScope,
1506
- relayerUrl: args.relayerUrl
1507
- }
1508
- });
1509
- const nearAccountId = toAccountId(args.session.nearAccountId);
1510
- if (String(activatedIdentity.walletId) !== String(args.selection.walletId) || String(activatedIdentity.nearAccountId) !== String(nearAccountId) || !mpcMaterialActivationRefsEqual(activatedIdentity.materialActivation, args.material.materialActivation)) throw new Error("[login] linked Ed25519 activation identity does not match the V2 session");
1511
- await publishEd25519YaoPublicCapabilityReferenceAndLane(new IndexedDbEd25519YaoPublicCapabilityReferenceStore(IndexedDBManager), linkedDeviceEd25519YaoLaneReference({
1512
- selection: args.selection,
1513
- session: args.session,
1514
- material: args.material,
1515
- ...args.providerIdentity ? { providerIdentity: args.providerIdentity } : {}
1516
- }));
1517
- activated = true;
1518
- } finally {
1519
- if (!activated) activeClient.dispose();
1520
- }
1521
- const nearAccountId = toAccountId(args.session.nearAccountId);
1522
- return {
1523
- success: true,
1524
- kind: "near_wallet_unlocked",
1525
- walletId: args.selection.walletId,
1526
- loggedInNearAccountId: String(nearAccountId),
1527
- operationalPublicKey: `ed25519:${base58Encode(metadata.registeredPublicKey)}`,
1528
- nearAccountId
1529
- };
1530
- }
1531
- function emailOtpUnlockSource(selection) {
1532
- const [first, ...rest] = selection.signerMaterials;
1533
- if (selection.authority.provenance.kind === "device_link") {
1534
- if (!first) throw new Error("[login] linked Email OTP authority has no signer material");
1535
- return {
1536
- kind: "linked_device",
1537
- selection,
1538
- signerMaterials: [first, ...rest]
1539
- };
1540
- }
1541
- if (first) throw new Error("[login] owner Email OTP authority must not carry linked signer material");
1542
- return {
1543
- kind: "owner_authority",
1544
- selection
1545
- };
1546
- }
1547
- /**
1548
- * What this unlock should build, decided by the branch rather than by whichever
1549
- * fields happened to be present.
1550
- *
1551
- * A linked device names the signer slot its own sealed material carries. An
1552
- * owner authority has none, so the request is assembled from its exact
1553
- * authority projection and the runtime is built inside the unlock.
1554
- */
1555
- async function emailOtpAuthorityUnlockEd25519Request(input) {
1556
- const { source } = input;
1557
- if (source.kind === "linked_device") {
1558
- const ed25519Material = source.signerMaterials.find((material) => material.kind === "wallet_authority_linked_signer_material_v1" && material.keyFamily === "ed25519");
1559
- if (!ed25519Material) return { kind: "no_ed25519" };
1560
- return {
1561
- kind: "linked_device",
1562
- signerSlot: ed25519Material.publicFacts.applicationBinding.key_creation_signer_slot,
1563
- remainingUses: DEFAULT_UNLOCK_REMAINING_USES
1564
- };
1565
- }
1566
- if (!source.selection.authority.signerActivations.ed25519 || await hasPendingJoinedNearRegistration(source.selection)) return { kind: "no_ed25519" };
1567
- return await input.context.signingEngine.resolveOwnerAuthorityEd25519UnlockRequestInternal({
1568
- walletSession: {
1569
- walletId: source.selection.walletId,
1570
- walletSessionUserId: String(source.selection.walletId)
1571
- },
1572
- providerSubjectId: input.providerIdentity.providerSubjectId,
1573
- walletAuthMethodId: String(source.selection.authMethod.walletAuthMethodId),
1574
- remainingUses: DEFAULT_UNLOCK_REMAINING_USES
1575
- }) ?? { kind: "no_ed25519" };
1576
- }
1577
- async function hasPendingJoinedNearRegistration(selection) {
1578
- const activation = selection.authority.signerActivations.ed25519?.materialActivation;
1579
- if (!activation) return false;
1580
- return (await IndexedDBManager.listPendingWalletRegistrationCommits()).some(pendingNearRegistrationMatchesAuthority.bind(void 0, selection, activation));
1581
- }
1582
- function pendingNearRegistrationMatchesAuthority(selection, activation, pending) {
1583
- return pending.operation === "near_provisioning" && pending.phase === "joined" && pending.signerPlanKind === "near_ed25519_and_evm_family_ecdsa" && pending.walletId === selection.walletId && pending.walletAuthMethodId === selection.authMethod.walletAuthMethodId && mpcMaterialActivationRefsEqual(pending.localMaterial.ed25519.metadata.materialActivation, activation);
1584
- }
1585
- /**
1586
- * Install the Ed25519 runtime an owner authority's unlock just built.
1587
- *
1588
- * Everything is checked against the authority and method that were selected,
1589
- * before the handle is used: a session naming a different method, or a
1590
- * capability naming a different activation, must not be able to activate a
1591
- * runtime under this one.
1592
- */
1593
- async function unlockOwnerAuthorityEmailOtpEd25519(input) {
1594
- const { selection, unlocked } = input;
1595
- const session = unlocked.walletSession;
1596
- if (session.walletId !== selection.walletId || session.authorityId !== selection.authority.authorityId || session.authMethodId !== selection.authMethod.walletAuthMethodId || session.authorityDigestB64u !== selection.authority.authorityDigestB64u || session.authorityRevocationEpoch !== selection.authority.revocationEpoch) throw new Error("[login] owner Email OTP Wallet Session does not match the selected authority");
1597
- const activation = selection.authority.signerActivations.ed25519?.materialActivation;
1598
- if (!activation) return;
1599
- if (unlocked.ed25519Activation.kind !== "ed25519_activation_ready") {
1600
- if (await hasPendingJoinedNearRegistration(selection)) return;
1601
- throw new Error("[login] owner Email OTP unlock built no Ed25519 runtime to install");
1602
- }
1603
- const ready = unlocked.ed25519Activation;
1604
- if (!mpcMaterialActivationRefsEqual(ready.bootstrap.capability.materialActivation, activation)) throw new Error("[login] owner Email OTP Ed25519 capability names another activation");
1605
- if (!mpcMaterialActivationRefsEqual(ready.metadata.materialActivation, activation)) throw new Error("[login] owner Email OTP Ed25519 runtime names another activation");
1606
- if (ready.bootstrap.session.walletSessionId !== unlocked.operationCredential.walletSessionId) throw new Error("[login] owner Email OTP Ed25519 session credential mismatch");
1607
- const authority = await walletAuthAuthorityRefForLinkedDeviceMethod({
1608
- selection,
1609
- providerIdentity: input.providerIdentity
1610
- });
1611
- await input.context.signingEngine.activateOwnerAuthorityEd25519RuntimeInternal({
1612
- walletSession: {
1613
- walletId: selection.walletId,
1614
- walletSessionUserId: String(selection.walletId)
1615
- },
1616
- providerSubjectId: input.providerIdentity.providerSubjectId,
1617
- walletAuthMethodId: String(selection.authMethod.walletAuthMethodId),
1618
- emailHashHex: input.emailHashHex,
1619
- authority,
1620
- activeClientHandle: ready.activeClientHandle,
1621
- metadata: ready.metadata,
1622
- bootstrap: ready.bootstrap
1623
- });
1624
- }
1625
- function ownerAuthorityWalletCustodySeedEnvelope(unlocked) {
1626
- switch (unlocked.walletCustodySeed.kind) {
1627
- case "owner_authority_seed_envelope": return unlocked.walletCustodySeed.existingEnvelope;
1628
- case "linked_device_seed_unavailable": throw new Error("[login] owner Email OTP unlock returned linked-device custody state");
1629
- default: return assertNeverLoginState(unlocked.walletCustodySeed);
1630
- }
1631
- }
1632
- async function unlockLinkedDeviceEmailOtpWallet(args) {
1633
- const providerIdentity = {
1634
- provider: args.providerSubjectId.startsWith("google:") ? "google" : "email",
1635
- providerSubjectId: args.providerSubjectId
1636
- };
1637
- const resolution = await resolveLinkedDeviceEmailOtpAuthoritySelection({
1638
- walletIdInput: args.walletIdInput,
1639
- emailHashHex: args.emailHashHex,
1640
- provider: providerIdentity.provider,
1641
- providerSubjectId: providerIdentity.providerSubjectId,
1642
- walletAuthMethodId: args.walletAuthMethodId
1643
- });
1644
- if (resolution.kind === "none") throw new Error("[login] linked Email OTP authority is unavailable");
1645
- if (resolution.kind === "rejected") throw new Error(resolution.message);
1646
- const selection = resolution.selection;
1647
- if (String(selection.authMethod.walletAuthMethodId) !== String(args.walletAuthMethodId)) throw new Error("[login] linked Email OTP selected auth method changed during unlock");
1648
- const relayUrl = String(args.relayUrl || "").trim();
1649
- if (!relayUrl) throw new Error("[login] linked Email OTP unlock requires relayer.url");
1650
- const source = emailOtpUnlockSource(selection);
1651
- const ed25519Request = await emailOtpAuthorityUnlockEd25519Request({
1652
- context: args.context,
1653
- source,
1654
- providerIdentity
1655
- });
1656
- const unlocked = await unlockEmailOtpAuthorityWallet({
1657
- relayUrl,
1658
- walletId: String(selection.walletId),
1659
- walletAuthMethodId: String(selection.authMethod.walletAuthMethodId),
1660
- challengeId: args.challengeId,
1661
- otpCode: args.otpCode,
1662
- ed25519: ed25519Request,
1663
- workerCtx: args.context.signingEngine.getSignerWorkerContext()
1664
- });
1665
- const factorSecret32 = unlocked.factorSecret32;
1666
- const effectiveProviderIdentity = providerIdentity;
1667
- let openedMaterials = null;
1668
- let installedEcdsaRuntime = null;
1669
- let ownedActiveClientHandle = unlocked.ed25519Activation.kind === "ed25519_activation_ready" ? unlocked.ed25519Activation.activeClientHandle : null;
1670
- try {
1671
- if (source.kind === "owner_authority") {
1672
- await walletSessionAuthorizations.writeExactWithOperationCredential({
1673
- record: unlocked.walletSession,
1674
- operationCredential: unlocked.operationCredential
1675
- });
1676
- await unlockOwnerAuthorityEmailOtpEd25519({
1677
- context: args.context,
1678
- selection,
1679
- unlocked,
1680
- providerIdentity: effectiveProviderIdentity,
1681
- emailHashHex: args.emailHashHex
1682
- });
1683
- ownedActiveClientHandle = null;
1684
- if (!factorSecret32) throw new Error("[login] owner Email OTP factor secret ownership was lost");
1685
- await establishUnlockedWalletEd25519ExportRootCapabilityV1(walletCustodyCeremonyTransportFromWorkerContextV1(args.context.signingEngine.getSignerWorkerContext()), {
1686
- existingEnvelope: ownerAuthorityWalletCustodySeedEnvelope(unlocked),
1687
- existingFactorSecret: factorSecret32,
1688
- walletId: String(selection.walletId),
1689
- walletAuthMethodId: String(selection.authMethod.walletAuthMethodId),
1690
- walletSessionId: String(unlocked.operationCredential.walletSessionId),
1691
- expiresAtMs: unlocked.walletSession.expiresAtMs
1692
- });
1693
- await args.context.signingEngine.markWalletSelectionUnlocked({
1694
- walletId: selection.walletId,
1695
- walletAuthMethodId: selection.authMethod.walletAuthMethodId
1696
- });
1697
- args.context.signingEngine.setWalletAuthenticated({
1698
- kind: "authenticated",
1699
- walletId: selection.walletId,
1700
- authMethod: SIGNER_AUTH_METHODS.emailOtp
1701
- });
1702
- resumeNearAfterSuccessfulUnlock({
1703
- context: args.context,
1704
- sessionAuthority: {
1705
- record: unlocked.walletSession,
1706
- operationCredential: unlocked.operationCredential
1707
- },
1708
- factor: {
1709
- kind: "email_otp",
1710
- provider: providerIdentity.provider,
1711
- providerSubject: providerIdentity.providerSubjectId,
1712
- emailHashHex: args.emailHashHex
1713
- },
1714
- ownedFactorSecret: factorSecret32.slice().buffer,
1715
- custodyEnvelope: ownerAuthorityWalletCustodySeedEnvelope(unlocked)
1716
- });
1717
- return;
1718
- }
1719
- assertLinkedDeviceWalletSessionExact(selection, unlocked.walletSession);
1720
- if (!factorSecret32) throw new Error("[login] linked Email OTP factor secret ownership was lost");
1721
- openedMaterials = await openLinkedDeviceEmailOtpSignerMaterials({
1722
- selection,
1723
- factorSecret32
1724
- });
1725
- const ed25519Material = linkedDeviceEd25519Material(openedMaterials);
1726
- const ecdsaMaterial = linkedDeviceEcdsaMaterial(openedMaterials);
1727
- if (linkedDeviceRuntimeRequiresCurve(unlocked.walletSession, "ed25519")) {
1728
- if (!ed25519Material || !unlocked.ed25519Activation.bootstrap) throw new Error("[login] linked Email OTP Ed25519 runtime material or capability is missing");
1729
- if (!mpcMaterialActivationRefsEqual(unlocked.ed25519Activation.bootstrap.capability.materialActivation, ed25519Material.materialActivation)) throw new Error("[login] linked Email OTP Ed25519 capability activation is invalid");
1730
- }
1731
- if (linkedDeviceRuntimeRequiresCurve(unlocked.walletSession, "ecdsa")) {
1732
- if (!ecdsaMaterial) throw new Error("[login] linked Email OTP ECDSA runtime material is missing");
1733
- const activatedEcdsa = await activateLinkedDeviceEcdsaHolderRuntime({
1734
- context: args.context,
1735
- selection,
1736
- factorAuthority: await walletAuthAuthorityForLinkedDeviceMethod({
1737
- selection,
1738
- providerIdentity: effectiveProviderIdentity
1739
- }),
1740
- material: ecdsaMaterial
1741
- });
1742
- if (activatedEcdsa.installed) installedEcdsaRuntime = activatedEcdsa.runtime;
1743
- }
1744
- let loginResult;
1745
- if (ed25519Material && unlocked.ed25519Activation.bootstrap) {
1746
- const ed25519Session = linkedDeviceEd25519SessionFromEmailOtpBootstrap({
1747
- session: unlocked.ed25519Activation.bootstrap.session,
1748
- operationCredential: unlocked.operationCredential,
1749
- providerIdentity: effectiveProviderIdentity
1750
- });
1751
- if (ed25519Session.walletSessionId !== unlocked.operationCredential.walletSessionId) throw new Error("[login] linked Email OTP Ed25519 session credential mismatch");
1752
- loginResult = await activateLinkedDeviceEd25519Runtime({
1753
- context: args.context,
1754
- selection,
1755
- session: ed25519Session,
1756
- material: ed25519Material,
1757
- relayerUrl: relayUrl,
1758
- providerIdentity: effectiveProviderIdentity
1759
- });
1760
- } else if (ecdsaMaterial) loginResult = {
1761
- success: true,
1762
- kind: "ecdsa_wallet_unlocked",
1763
- walletId: selection.walletId
1764
- };
1765
- else throw new Error("[login] linked Email OTP has no unlockable signing runtime");
1766
- await walletSessionAuthorizations.writeExactWithOperationCredential({
1767
- record: unlocked.walletSession,
1768
- operationCredential: unlocked.operationCredential
1769
- });
1770
- if (selection.exportRoot && isWalletCustodySeedBinding(selection.exportRoot.envelope.binding)) await establishUnlockedWalletEd25519ExportRootCapabilityV1(walletCustodyCeremonyTransportFromWorkerContextV1(args.context.signingEngine.getSignerWorkerContext()), {
1771
- existingEnvelope: selection.exportRoot.envelope,
1772
- existingFactorSecret: factorSecret32,
1773
- walletId: String(selection.walletId),
1774
- walletAuthMethodId: String(selection.authMethod.walletAuthMethodId),
1775
- walletSessionId: String(unlocked.operationCredential.walletSessionId),
1776
- expiresAtMs: unlocked.walletSession.expiresAtMs
1777
- });
1778
- await args.context.signingEngine.markWalletSelectionUnlocked({
1779
- walletId: selection.walletId,
1780
- walletAuthMethodId: selection.authMethod.walletAuthMethodId
1781
- });
1782
- args.context.signingEngine.setWalletAuthenticated({
1783
- kind: "authenticated",
1784
- walletId: loginResult.walletId,
1785
- authMethod: SIGNER_AUTH_METHODS.emailOtp
1786
- });
1787
- } catch (error) {
1788
- if (installedEcdsaRuntime) {
1789
- removeLinkedEcdsaHolderRuntimeV1({
1790
- walletId: installedEcdsaRuntime.walletId,
1791
- materialActivation: installedEcdsaRuntime.materialActivation,
1792
- holderHandleId: installedEcdsaRuntime.holderHandleId
1793
- });
1794
- await destroyLinkedDeviceEcdsaHolderMaterialWasm({
1795
- holderHandleId: installedEcdsaRuntime.holderHandleId,
1796
- workerCtx: args.context.signingEngine.getSignerWorkerContext()
1797
- }).catch(() => void 0);
1798
- }
1799
- const workerContext = args.context.signingEngine.getSignerWorkerContext();
1800
- if (workerContext) await destroyUnlockedWalletEd25519ExportRootCapabilitiesV1(walletCustodyCeremonyTransportFromWorkerContextV1(workerContext), {
1801
- kind: "wallet_session",
1802
- walletSessionId: String(unlocked.operationCredential.walletSessionId)
1803
- });
1804
- await Promise.allSettled([args.context.signingEngine.clearVolatileWarmSigningMaterial(selection.walletId), walletSessionAuthorizations.clearWallet(selection.walletId)]);
1805
- throw error;
1806
- } finally {
1807
- if (ownedActiveClientHandle) {
1808
- const workerContext = args.context.signingEngine.getSignerWorkerContext();
1809
- if (workerContext) await disposeWalletCustodyEd25519ActiveClientV1({
1810
- workerContext,
1811
- activeClientHandle: ownedActiveClientHandle
1812
- }).catch(() => void 0);
1813
- ownedActiveClientHandle = null;
1814
- }
1815
- for (const openedMaterial of openedMaterials || []) openedMaterial.material.fill(0);
1816
- factorSecret32?.fill(0);
1817
- }
1818
- }
1819
- async function unlockInternal(context, subjectSet, options, _completion) {
1820
- const { onEvent, onError, afterCall } = options || {};
1821
- const { signingEngine } = context;
1822
- const walletUnlockSelection = resolveLoginWalletUnlockSelectionForSubjectSet({
1823
- selection: options?.unlockSelection,
1824
- subjectSet
1825
- });
1826
- const walletIdentity = resolveLoginWalletIdentity({
1827
- subjectSet,
1828
- selection: walletUnlockSelection
1829
- });
1830
- const unlockSubjectId = walletIdentity.kind === "near_ed25519_capable_wallet" ? String(walletIdentity.nearAccountId) : String(walletIdentity.walletId);
1831
- let loginCredential;
1832
- emitUnlockEvent(onEvent, unlockSubjectId, {
1833
- phase: UnlockEventPhase.STEP_01_STARTED,
1834
- status: "started",
1835
- authMethod: "passkey"
1836
- });
1837
- try {
1838
- signingEngine.assertSealedRefreshStartupParity().catch((error) => {
1839
- console.warn("[login] sealed refresh startup parity check failed during unlock; continuing to local passkey prompt", error instanceof Error ? error.message : String(error || "unknown error"));
1840
- });
1841
- if (typeof window !== "undefined" && !window.isSecureContext) {
1842
- const errorMessage = "Passkey operations require a secure context (HTTPS or localhost).";
1843
- return await finalizeLoginError({
1844
- unlockSubjectId,
1845
- message: errorMessage,
1846
- error: new Error(errorMessage),
1847
- onEvent,
1848
- onError,
1849
- afterCall,
1850
- callAfterCall: false
1851
- });
1852
- }
1853
- const { accountSubject, authenticators, baseSignerSlot, localUnlockAuthMethod, requiresLocalPasskeyUnlock } = await readLoginUnlockAccountPhase({
1854
- signingEngine,
1855
- identity: walletIdentity,
1856
- signerSlotHint: parseSignerSlot(options?.signerSlot, { min: 1 }),
1857
- onEvent
1858
- });
1859
- const collectLocalPasskeyCredentialForChallenge = async (args) => {
1860
- const eligibleAuthenticators = authenticatorsForCredentialIds({
1861
- authenticators,
1862
- credentialIds: args.credentialIds
1863
- });
1864
- const credential = await collectPasskeyLoginAssertion({
1865
- signingEngine,
1866
- subjectId: unlockSubjectId,
1867
- challengeB64u: args.challengeB64u,
1868
- authenticators: eligibleAuthenticators,
1869
- onPromptStarted: () => {
1870
- emitUnlockEvent(onEvent, unlockSubjectId, {
1871
- phase: UnlockEventPhase.STEP_03_PASSKEY_PROMPT_STARTED,
1872
- status: "waiting_for_user",
1873
- authMethod: "passkey",
1874
- interaction: {
1875
- kind: "passkey_assert",
1876
- overlay: "show"
1877
- }
1878
- });
1879
- },
1880
- onPromptSucceeded: () => {
1881
- emitUnlockEvent(onEvent, unlockSubjectId, {
1882
- phase: UnlockEventPhase.STEP_03_PASSKEY_PROMPT_SUCCEEDED,
1883
- status: "succeeded",
1884
- authMethod: "passkey",
1885
- interaction: {
1886
- kind: "passkey_assert",
1887
- overlay: "hide"
1888
- }
1889
- });
1890
- }
1891
- });
1892
- if (args.saveAsLoginCredential) loginCredential = credential;
1893
- return credential;
1894
- };
1895
- const collectFreshLocalPasskeyUnlockCredentialForLogin = async () => {
1896
- const credential = await collectFreshLocalPasskeyUnlockCredential({
1897
- currentCredential: loginCredential,
1898
- collectCredentialForChallenge: async (challengeB64u) => await collectLocalPasskeyCredentialForChallenge({
1899
- challengeB64u,
1900
- saveAsLoginCredential: true,
1901
- credentialIds: resolveLoginPasskeyPromptCredentialIds({
1902
- authenticators,
1903
- signerSlot: baseSignerSlot,
1904
- serverCredentialIds: []
1905
- })
1906
- })
1907
- });
1908
- if (credential) loginCredential = credential;
1909
- };
1910
- const signingSessionPolicy = (() => {
1911
- const ttlMsRaw = options?.signingSession?.ttlMs ?? context.configs?.signing.sessionDefaults?.ttlMs;
1912
- const configuredRemainingUses = options?.signingSession?.remainingUses;
1913
- const defaultRemainingUses = context.configs?.signing.sessionDefaults?.remainingUses;
1914
- const requestedRemainingUses = configuredRemainingUses ?? defaultRemainingUses ?? DEFAULT_UNLOCK_REMAINING_USES;
1915
- const ttlMs = typeof ttlMsRaw === "number" ? Math.floor(ttlMsRaw) : Math.floor(Number(ttlMsRaw) || 0);
1916
- const unlockRemainingUses = resolveWalletUnlockSessionUsesFromRequestedUses({ requestedRemainingUses });
1917
- return {
1918
- ttlMs: Math.max(0, ttlMs),
1919
- unlockRemainingUses
1920
- };
1921
- })();
1922
- const requireThresholdWarmup = signingSessionPolicy.ttlMs > 0 && signingSessionPolicy.unlockRemainingUses != null;
1923
- const thresholdKeyMaterialPrefetch = requireThresholdWarmup && walletIdentity.kind === "near_ed25519_capable_wallet" ? getNearThresholdKeyMaterial({
1924
- clientDB: IndexedDBManager,
1925
- keyMaterialStore: IndexedDBManager
1926
- }, walletIdentity.nearAccountId, baseSignerSlot).catch(() => null) : Promise.resolve(null);
1927
- let completedPasskeyExchangeEcdsaActivation = null;
1928
- let completedPasskeyEd25519Session = null;
1929
- let completedPasskeyWalletSessionAuthorization = null;
1930
- let completedPasskeySessionCustody = null;
1931
- let localWarmupRouteAuthorization = resolveLoginWarmupRouteAuthorization();
1932
- let warmupPhase = null;
1933
- const requireActiveWarmSession = (source, sessionStatus) => {
1934
- if (isActiveThresholdLoginSigningSession(sessionStatus)) return sessionStatus;
1935
- const status = String(sessionStatus?.status || "not_found");
1936
- throw new Error(`[login] ${source} did not produce an active warm signing session (status=${status})`);
1937
- };
1938
- const warmThresholdSigningSessions = async (warmupInput) => {
1939
- emitUnlockEvent(onEvent, unlockSubjectId, {
1940
- phase: UnlockEventPhase.STEP_05_SIGNING_SESSION_WARMUP_STARTED,
1941
- status: "running",
1942
- authMethod: loginCredential ? "passkey" : "warm_session"
1943
- });
1944
- const nearWalletBinding = warmupInput.wantsEd25519Warmup ? requireNearLoginWalletBinding(walletIdentity) : null;
1945
- const managedRuntimeScopeBootstrap = resolveManagedRuntimeScopeBootstrap(context.configs);
1946
- let volatileWarmMaterialCleared = false;
1947
- const clearVolatileWarmMaterialForUnlock = async () => {
1948
- if (volatileWarmMaterialCleared) return;
1949
- volatileWarmMaterialCleared = true;
1950
- await signingEngine.clearVolatileWarmSigningMaterial(walletIdentity.walletId);
1951
- };
1952
- if (warmupInput.wantsEcdsaWarmup) reportNonSettledEcdsaActivationReconciliation(await reconcileCanonicalEcdsaActivationSelectors({
1953
- workerCtx: signingEngine.getSignerWorkerContext(),
1954
- selectors: ecdsaActivationSelectorsFromSubjectSet(walletIdentity.subjectSet)
1955
- }));
1956
- const storedCanonicalEcdsaContext = warmupInput.wantsEcdsaWarmup ? await resolveCanonicalThresholdEcdsaWarmSessionContext(context, walletIdentity.walletId, {
1957
- keyFactsInventoryAuthority: warmupInput.keyFactsInventoryAuthority,
1958
- keyFactsInventoryRequested: Boolean(options?.ecdsaKeyFactsInventory),
1959
- relayerUrl: warmupInput.relayerUrl,
1960
- rpId: warmupInput.rpId
1961
- }, localUnlockAuthMethod) : { ecdsaKeys: [] };
1962
- const thresholdKeyMaterial = await thresholdKeyMaterialPrefetch;
1963
- const participantIds = thresholdKeyMaterial?.participants.map((participant) => participant.id) || [];
1964
- if (warmupInput.wantsEcdsaWarmup) assertEcdsaWarmupMatchesUnlockSubjects({
1965
- identity: walletIdentity,
1966
- context: storedCanonicalEcdsaContext
1967
- });
1968
- const canFirstBootstrapThresholdEcdsa = Boolean(managedRuntimeScopeBootstrap);
1969
- const warmupPlan = resolveThresholdLoginWarmupPlan({
1970
- selection: warmupInput.selection,
1971
- selectedEcdsaTargets: warmupInput.selectedEcdsaTargets,
1972
- storedCanonicalEcdsaContext,
1973
- canFirstBootstrapThresholdEcdsa,
1974
- wantsEd25519Warmup: warmupInput.wantsEd25519Warmup
1975
- });
1976
- const passkeyExchangeEcdsaActivationForWarmup = completedPasskeyExchangeEcdsaActivation;
1977
- const passkeyExchangeOwnsFirstEcdsaActivation = Boolean(passkeyExchangeEcdsaActivationForWarmup && warmupPlan.signersToWarm.includes("ecdsa"));
1978
- const ed25519DependsOnEcdsa = passkeyExchangeOwnsFirstEcdsaActivation ? warmupPlan.signersToWarm.includes("ed25519") : warmupPlan.ed25519DependsOnEcdsa;
1979
- const ecdsaDependsOnEd25519 = passkeyExchangeOwnsFirstEcdsaActivation ? false : warmupPlan.ecdsaDependsOnEd25519;
1980
- const warmupPasskeyCredentialPlan = resolveLoginWarmupPasskeyCredentialPlan({
1981
- requiresLocalPasskeyUnlock,
1982
- hasLoginCredential: Boolean(loginCredential),
1983
- routeAuthorization: warmupInput.routeAuthorization,
1984
- warmupPlan
1985
- });
1986
- await clearVolatileWarmMaterialForUnlock();
1987
- const plannedEd25519SessionId = createThresholdLoginWarmSessionId("threshold-login");
1988
- let ed25519MintPlan = !warmupPlan.signersToWarm.includes("ed25519") ? { kind: "not_requested" } : ed25519DependsOnEcdsa ? {
1989
- kind: "ecdsa_authorized",
1990
- thresholdSessionId: plannedEd25519SessionId
1991
- } : { kind: "fresh" };
1992
- switch (warmupPasskeyCredentialPlan.kind) {
1993
- case "existing_passkey_credential":
1994
- case "no_passkey_credential_required": break;
1995
- case "wallet_custody":
1996
- if (warmupInput.ed25519SessionAuthority.kind !== "passkey") throw new Error("[login] wallet custody requires passkey wallet authority");
1997
- if (!completedPasskeySessionCustody || completedPasskeySessionCustody.ed25519.kind !== "active") throw createThresholdEd25519DeviceLinkRequiredError();
1998
- ed25519MintPlan = {
1999
- kind: "wallet_custody",
2000
- thresholdSessionId: plannedEd25519SessionId,
2001
- custody: {
2002
- ...completedPasskeySessionCustody,
2003
- ed25519: completedPasskeySessionCustody.ed25519
2004
- }
2005
- };
2006
- break;
2007
- default: return assertNeverLoginState(warmupPasskeyCredentialPlan);
2008
- }
2009
- if (nearWalletBinding && !thresholdKeyMaterial && ed25519MintPlan.kind !== "wallet_custody") throw new Error(`[login] threshold warm-up requires threshold key material for ${nearWalletBinding.nearAccountId} signer slot ${warmupInput.signerSlot}`);
2010
- const authenticatedPasskeyCredentialIdB64u = loginCredential ? passkeyCredentialIdB64uFromAuthentication(loginCredential) : "";
2011
- const localPasskeyCredentialIdB64u = String(authenticatedPasskeyCredentialIdB64u || authenticators.find((authenticator) => authenticator.signerSlot === baseSignerSlot)?.credentialId || authenticators[0]?.credentialId || "").trim();
2012
- const credentialState = loginCredential ? {
2013
- kind: "available",
2014
- credential: loginCredential,
2015
- localPasskeyCredentialIdB64u
2016
- } : localPasskeyCredentialIdB64u ? {
2017
- kind: "credential_id_only",
2018
- localPasskeyCredentialIdB64u
2019
- } : {
2020
- kind: "unavailable",
2021
- localPasskeyCredentialIdB64u: ""
2022
- };
2023
- const runtimeScopeBootstrapState = managedRuntimeScopeBootstrap ? {
2024
- kind: "available",
2025
- runtimeScopeBootstrap: managedRuntimeScopeBootstrap
2026
- } : { kind: "unavailable" };
2027
- const warmupResult = await primeThresholdLoginWarmSigners({
2028
- statusReads,
2029
- context,
2030
- signingEngine,
2031
- walletIdentity,
2032
- signerSlot: warmupInput.signerSlot,
2033
- thresholdKeyMaterial,
2034
- relayerUrl: warmupInput.relayerUrl,
2035
- relayerKeyId: thresholdKeyMaterial?.relayerKeyId || "",
2036
- participantIds,
2037
- ttlMs: signingSessionPolicy.ttlMs,
2038
- unlockRemainingUses: requireLoginUnlockSessionUses(signingSessionPolicy.unlockRemainingUses),
2039
- ecdsaContextResolution: warmupPlan.ecdsaContextResolution,
2040
- credentialState,
2041
- runtimeScopeBootstrapState,
2042
- signersToWarm: warmupPlan.signersToWarm,
2043
- ed25519DependsOnEcdsa,
2044
- ecdsaDependency: ecdsaDependsOnEd25519 ? { kind: "ed25519_wallet_session_authority" } : { kind: "none" },
2045
- ed25519MintPlan,
2046
- ed25519SessionAuthority: warmupInput.ed25519SessionAuthority,
2047
- routeAuthorization: warmupInput.routeAuthorization,
2048
- passkeyExchangeEcdsaActivation: passkeyExchangeEcdsaActivationForWarmup,
2049
- passkeyUnlockEd25519Session: completedPasskeyEd25519Session,
2050
- passkeyUnlockWalletSessionAuthorization: completedPasskeyWalletSessionAuthorization
2051
- });
2052
- if (warmupPlan.signersToWarm.includes("ed25519")) {
2053
- const ed25519Session = warmupResult.ed25519Session;
2054
- if (!ed25519Session) throw new Error("[login] threshold warm-up omitted the Ed25519 session result");
2055
- const activeSigningSession = requireActiveWarmSession("threshold warm-up", createActiveLoginSigningSessionStatus({
2056
- session: ed25519Session,
2057
- authMethod: localUnlockAuthMethod
2058
- }));
2059
- emitUnlockEvent(onEvent, unlockSubjectId, {
2060
- phase: UnlockEventPhase.STEP_05_ED25519_SIGNING_SESSION_READY,
2061
- status: "succeeded",
2062
- authMethod: "warm_session"
2063
- });
2064
- if (warmupPlan.signersToWarm.includes("ecdsa")) emitUnlockEvent(onEvent, unlockSubjectId, {
2065
- phase: UnlockEventPhase.STEP_05_ECDSA_SIGNING_SESSION_READY,
2066
- status: "succeeded",
2067
- authMethod: "warm_session"
2068
- });
2069
- return {
2070
- kind: "threshold_login_warmup_ready",
2071
- signingSession: activeSigningSession,
2072
- signersWarmed: warmupPlan.signersToWarm
2073
- };
2074
- }
2075
- if (warmupPlan.signersToWarm.length !== 1 || warmupPlan.signersToWarm[0] !== "ecdsa") throw new Error("[login] threshold warm-up signer selection is invalid");
2076
- emitUnlockEvent(onEvent, unlockSubjectId, {
2077
- phase: UnlockEventPhase.STEP_05_ECDSA_SIGNING_SESSION_READY,
2078
- status: "succeeded",
2079
- authMethod: "warm_session"
2080
- });
2081
- return {
2082
- kind: "threshold_login_ecdsa_only_warmup_ready",
2083
- signersWarmed: ["ecdsa"]
2084
- };
2085
- };
2086
- const persistSuccessfulLoginState = async (signerSlot) => {
2087
- await signingEngine.setLastUser(walletIdentity.walletId, signerSlot);
2088
- if (walletIdentity.kind === "near_ed25519_capable_wallet") {
2089
- if (!(accountSubject.kind === "near_wallet" && accountSubject.operationalPublicKey === null)) await signingEngine.activateAuthenticatedWalletState({
2090
- walletId: walletIdentity.walletId,
2091
- nearAccountId: toAccountId(walletIdentity.nearAccountId),
2092
- signerSlot,
2093
- nearClient: context.nearClient
2094
- });
2095
- }
2096
- };
2097
- const recoverNonceLanesAfterUnlock = async () => {
2098
- await signingEngine.getNonceCoordinator().recoverDurableLeases({ walletId: walletIdentity.walletId }).catch((error) => {
2099
- console.warn("[login] nonce lane durable recovery after unlock failed", error);
2100
- });
2101
- };
2102
- const noServerSessionPasskeyCredentialPlan = resolveLoginNoServerSessionPasskeyCredentialPlan({
2103
- requiresLocalPasskeyUnlock,
2104
- requireThresholdWarmup,
2105
- hasLoginCredential: Boolean(loginCredential)
2106
- });
2107
- switch (noServerSessionPasskeyCredentialPlan.kind) {
2108
- case "wallet_unlock_owns_passkey_credential":
2109
- case "passkey_credential_already_collected":
2110
- case "no_local_passkey_required": break;
2111
- case "local_unlock_passkey_assertion":
2112
- await collectFreshLocalPasskeyUnlockCredentialForLogin();
2113
- break;
2114
- default: return assertNeverLoginState(noServerSessionPasskeyCredentialPlan);
2115
- }
2116
- const statusReads = new WalletSessionStatusReadScope();
2117
- if (requireThresholdWarmup && localUnlockAuthMethod === SIGNER_AUTH_METHODS.passkey) {
2118
- const preparedActivation = await preparePasskeyExchangeEcdsaActivation({
2119
- context,
2120
- walletIdentity,
2121
- selection: walletUnlockSelection,
2122
- ttlMs: signingSessionPolicy.ttlMs,
2123
- remainingUses: requireLoginUnlockSessionUses(signingSessionPolicy.unlockRemainingUses)
2124
- });
2125
- const relayUrl = String(context.configs.network.relayer.url || "").trim();
2126
- const rpId = String(signingEngine.getRpId() || "").trim();
2127
- if (!relayUrl || !rpId) throw new Error("[login] passkey wallet unlock requires relayer URL and rpId");
2128
- const completedUnlock = await completePasskeyWalletUnlock({
2129
- context,
2130
- walletIdentity,
2131
- unlockSubjectId,
2132
- onEvent,
2133
- authenticators,
2134
- signerSlot: baseSignerSlot,
2135
- remainingUses: requireLoginUnlockSessionUses(signingSessionPolicy.unlockRemainingUses),
2136
- relayUrl,
2137
- rpId,
2138
- expectedOrigin: void 0,
2139
- activation: preparedActivation,
2140
- collectCredentialForChallenge: async (challenge) => await collectLocalPasskeyCredentialForChallenge({
2141
- challengeB64u: challenge.challengeB64u,
2142
- saveAsLoginCredential: true,
2143
- credentialIds: challenge.credentialIds
2144
- })
2145
- }, statusReads);
2146
- loginCredential = completedUnlock.credential;
2147
- completedPasskeyExchangeEcdsaActivation = completedUnlock.activation;
2148
- completedPasskeyEd25519Session = completedUnlock.result.ed25519Session;
2149
- completedPasskeyWalletSessionAuthorization = completedUnlock.result.walletSessionAuthorization ?? (completedUnlock.activation ? exactAuthorizationFromPasskeyEcdsaActivation(completedUnlock.activation.sessionActivation) : null);
2150
- completedPasskeySessionCustody = completedUnlock.custody;
2151
- await rememberPasskeySessionCustodyForExport({
2152
- walletId: String(walletIdentity.walletId),
2153
- unlock: completedUnlock
2154
- });
2155
- localWarmupRouteAuthorization = resolveLoginWarmupRouteAuthorization();
2156
- }
2157
- if (!loginCredential) throw new Error("[login] successful Passkey unlock omitted its credential");
2158
- await markPasskeyLoginSelectionUnlocked({
2159
- context,
2160
- walletIdentity,
2161
- credential: loginCredential
2162
- });
2163
- if (requireThresholdWarmup) {
2164
- const authMethodBinding = await readThresholdWarmupAuthMethodBinding({
2165
- walletId: walletIdentity.walletId,
2166
- authMethod: localUnlockAuthMethod
2167
- });
2168
- const keyFactsInventoryAuthority = resolveUnlockEcdsaKeyFactsInventoryAuthority({
2169
- completedActivation: completedPasskeyExchangeEcdsaActivation,
2170
- request: options?.ecdsaKeyFactsInventory,
2171
- routeAuthorization: localWarmupRouteAuthorization,
2172
- wantsEcdsaWarmup: resolveLoginUnlockWarmupBranchPlan({
2173
- subjectSet: walletIdentity.subjectSet,
2174
- selection: walletUnlockSelection,
2175
- hasConfiguredEcdsaTargets: listConfiguredThresholdEcdsaPublicationTargets(context.configs.network.chains).length > 0
2176
- }).wantsEcdsaWarmup
2177
- });
2178
- warmupPhase = await warmThresholdSigningSessions(resolveThresholdLoginWarmupPhaseInput({
2179
- context,
2180
- signerSlot: baseSignerSlot,
2181
- authenticators,
2182
- selection: walletUnlockSelection,
2183
- subjectSet: walletIdentity.subjectSet,
2184
- authMethod: localUnlockAuthMethod,
2185
- authMethodBinding,
2186
- keyFactsInventoryAuthority,
2187
- routeAuthorization: localWarmupRouteAuthorization
2188
- }));
2189
- if (localUnlockAuthMethod === SIGNER_AUTH_METHODS.passkey) {
2190
- const authenticatedCredential = loginCredential;
2191
- if (!authenticatedCredential) throw new Error("[login] passkey threshold warm-up completed without a credential");
2192
- await assertPasskeyUnlockRuntimePostconditions({
2193
- context,
2194
- statusReads,
2195
- walletIdentity,
2196
- signersWarmed: warmupPhase.signersWarmed,
2197
- credential: authenticatedCredential
2198
- });
2199
- }
2200
- }
2201
- await persistSuccessfulLoginState(baseSignerSlot);
2202
- recoverNonceLanesAfterUnlock();
2203
- if (completedPasskeyWalletSessionAuthorization && loginCredential && completedPasskeySessionCustody) {
2204
- const prfFirstB64u = passkeyPrfFirstB64uFromCredential(loginCredential);
2205
- if (prfFirstB64u) resumeNearAfterSuccessfulUnlock({
2206
- context,
2207
- sessionAuthority: completedPasskeyWalletSessionAuthorization,
2208
- factor: {
2209
- kind: "passkey",
2210
- rpId: signingEngine.getRpId(),
2211
- credentialIdB64u: passkeyCredentialIdB64uFromAuthentication(loginCredential),
2212
- prfFirstB64u
2213
- },
2214
- ownedFactorSecret: base64UrlDecode(prfFirstB64u).slice().buffer,
2215
- custodyEnvelope: completedPasskeySessionCustody.envelope
2216
- });
2217
- }
2218
- const baseLoginResult = buildSuccessfulLoginResult({
2219
- identity: walletIdentity,
2220
- accountSubject
2221
- });
2222
- const loginResult = warmupPhase ? {
2223
- ...baseLoginResult,
2224
- ...warmupPhase.kind === "threshold_login_warmup_ready" ? { signingSession: warmupPhase.signingSession } : {}
2225
- } : baseLoginResult;
2226
- emitUnlockEvent(onEvent, unlockSubjectId, {
2227
- phase: UnlockEventPhase.STEP_06_SESSION_READY,
2228
- status: "succeeded",
2229
- authMethod: loginCredential ? "passkey" : void 0
2230
- });
2231
- return await finalizeLoginSuccess({
2232
- context,
2233
- authMethod: localUnlockAuthMethod,
2234
- unlockSubjectId,
2235
- loginResult,
2236
- onEvent,
2237
- afterCall
2238
- });
2239
- } catch (err) {
2240
- console.warn("[login] unlock failed before active session commit", {
2241
- unlockSubjectId,
2242
- message: err && typeof err === "object" && "message" in err ? String(err.message || "") : String(err || "")
2243
- });
2244
- await clearFailedUnlockSessionState({
2245
- context,
2246
- walletId: walletIdentity.walletId
2247
- });
2248
- return await finalizeLoginError({
2249
- unlockSubjectId,
2250
- message: getUserFriendlyErrorMessage(err, "login") || "Login failed",
2251
- error: err,
2252
- cancelled: isUserCancellationError(err),
2253
- onEvent,
2254
- onError,
2255
- afterCall
2256
- });
2257
- }
2258
- }
2259
- async function clearFailedUnlockSessionState(args) {
2260
- await IndexedDBManager.clearLastProfileSelection().catch(() => void 0);
2261
- try {
2262
- args.context.signingEngine.getNonceCoordinator().clearAll();
2263
- } catch {}
2264
- try {
2265
- await args.context.signingEngine.clearVolatileWarmSigningMaterial(args.walletId);
2266
- } catch {}
2267
- }
2268
- async function finalizeLoginSuccess(args) {
2269
- const { context, authMethod, unlockSubjectId, loginResult, onEvent, afterCall } = args;
2270
- if (loginResult.success) context.signingEngine.setWalletAuthenticated({
2271
- kind: "authenticated",
2272
- walletId: loginResult.walletId,
2273
- authMethod
2274
- });
2275
- emitUnlockEvent(onEvent, unlockSubjectId, {
2276
- phase: UnlockEventPhase.STEP_07_COMPLETED,
2277
- status: "succeeded",
2278
- data: { ...loginResult.success && loginResult.kind === "near_wallet_unlocked" ? { operationalPublicKey: loginResult.operationalPublicKey ?? "" } : { walletId: loginResult.success ? String(loginResult.walletId) : "" } }
2279
- });
2280
- await afterCall?.(true, loginResult);
2281
- return loginResult;
2282
- }
2283
- async function finalizeLoginError(args) {
2284
- const { message, unlockSubjectId, error, onEvent, onError, afterCall, callOnError = true, callAfterCall = true, cancelled = false } = args;
2285
- if (callOnError) onError?.(toError(error));
2286
- emitUnlockEvent(onEvent, unlockSubjectId, {
2287
- phase: cancelled ? UnlockEventPhase.CANCELLED : UnlockEventPhase.FAILED,
2288
- status: cancelled ? "cancelled" : "failed",
2289
- ...cancelled ? {} : { message },
2290
- interaction: {
2291
- kind: "passkey_assert",
2292
- overlay: "hide"
2293
- },
2294
- error: { message }
2295
- });
2296
- if (callAfterCall) await afterCall?.(false);
2297
- return {
2298
- success: false,
2299
- error: message
2300
- };
2301
- }
2302
- function thresholdSessionIdFromPasskeyEcdsaActivation(activation) {
2303
- return isEcdsaCredentialFreeSessionActivationAuthorization(activation) ? activation.activation.session.threshold_session_id : activation.session.threshold_session_id;
2304
- }
2305
- function exactAuthorizationFromPasskeyEcdsaActivation(activation) {
2306
- if (isEcdsaCredentialFreeSessionActivationAuthorization(activation)) return activation.authorization;
2307
- return {
2308
- record: activation.session.wallet_session,
2309
- operationCredential: activation.session.operation_credential
2310
- };
2311
- }
2312
- function resolveUnlockEcdsaKeyFactsInventoryAuthority(args) {
2313
- if (!args.wantsEcdsaWarmup) return null;
2314
- if (args.completedActivation) {
2315
- let operationCredential;
2316
- try {
2317
- const sessionActivation = args.completedActivation.sessionActivation;
2318
- if (isEcdsaCredentialFreeSessionActivationAuthorization(sessionActivation)) operationCredential = parseWalletSessionOperationCredentialV1(sessionActivation.authorization.operationCredential);
2319
- else {
2320
- const response = args.completedActivation.response;
2321
- if (response.kind !== "router_ab_ecdsa_post_registration_session_activated_v1") throw new Error("completed ECDSA unlock activation branch is invalid");
2322
- operationCredential = parseWalletSessionOperationCredentialV1(response.session.operation_credential);
2323
- }
2324
- } catch {
2325
- throw new Error("[login] completed ECDSA unlock omitted a valid Wallet Session operation credential");
2326
- }
2327
- return {
2328
- kind: "wallet_session_operation_credential_v1",
2329
- operationCredential
2330
- };
2331
- }
2332
- const authority = resolveLoginEcdsaKeyFactsInventoryAuthority({
2333
- request: args.request ?? null,
2334
- routeAuthorization: args.routeAuthorization
2335
- });
2336
- if (authority?.kind === "webauthn") throw new Error("[login] ECDSA warm-up requires the Wallet Session minted by the unlock assertion");
2337
- return authority;
2338
- }
2339
- function assertPasskeyEcdsaExchangeContinuity(args) {
2340
- const signer = args.continuity.signers.find((candidate) => thresholdEcdsaChainTargetKey(candidate.chainTarget) === args.prepared.targetKey);
2341
- if (!signer) throw new Error("Passkey ECDSA custody continuity omitted the requested chain target");
2342
- const capability = signer.walletKey.publicCapability;
2343
- const receipt = signer.activationReceipt;
2344
- const activation = receipt.ecdsa_activation;
2345
- const normalScope = args.response.normal_signing.scope;
2346
- if (signer.walletKey.walletId !== args.walletId || signer.walletKey.keyHandle !== args.prepared.policy.key_handle || args.response.session.threshold_session_id !== args.prepared.policy.session_policy.threshold_session_id || !sameThresholdRuntimePolicyScope(signer.runtimePolicyScope, args.prepared.policy.session_policy.runtime_policy_scope) || !sameRouterAbEcdsaDerivationPublicCapabilityV1(args.response.public_capability, capability) || !sameRouterAbEcdsaRegistrationActivationReceiptV1(args.activationReceipt, receipt) || capability.context.application_binding_digest_b64u !== activation.context.application_binding_digest_b64u || !sameRouterAbEcdsaDerivationPublicIdentityV1(capability.public_identity, activation.public_identity) || !sameRouterAbMpcMaterialActivationRef(capability.material_activation, activation.material_activation) || !sameRouterAbServerIdentityV1(capability.signer_set.selected_server, activation.signing_worker) || capability.activation_epoch !== activation.activation_epoch || normalScope.context.application_binding_digest_b64u !== activation.context.application_binding_digest_b64u || !sameRouterAbEcdsaDerivationPublicIdentityV1(normalScope.public_identity, activation.public_identity) || !sameRouterAbMpcMaterialActivationRef(normalScope.material_activation, activation.material_activation) || !sameRouterAbServerIdentityV1(normalScope.signing_worker, activation.signing_worker) || normalScope.activation_epoch !== activation.activation_epoch || normalScope.wallet_id !== args.walletId || normalScope.ecdsa_threshold_key_id !== signer.walletKey.ecdsaThresholdKeyId || normalScope.signing_root_id !== signer.walletKey.signingRootId || normalScope.signing_root_version !== signer.walletKey.signingRootVersion) throw new Error("Passkey ECDSA session activation changed custody continuity");
2347
- }
2348
- function assertRejoinedPasskeyEcdsaPublicFacts(args) {
2349
- const identity = args.signer.walletKey.publicCapability.public_identity;
2350
- if (args.publicFacts.contextBinding32B64u !== identity.context_binding_b64u || args.publicFacts.derivationClientSharePublicKey33B64u !== identity.derivation_client_share_public_key33_b64u || args.publicFacts.relayerPublicKey33B64u !== identity.server_public_key33_b64u || args.publicFacts.groupPublicKey33B64u !== identity.threshold_public_key33_b64u || args.publicFacts.ethereumAddress !== ethereumAddressFromEcdsaIdentityB64u(identity.ethereum_address20_b64u) || args.publicFacts.clientShareRetryCounter !== identity.client_share_retry_counter || args.publicFacts.relayerShareRetryCounter !== identity.server_share_retry_counter) throw new Error("Passkey ECDSA custody rejoin changed registered public identity");
2351
- }
2352
- async function rememberPasskeySessionCustodyForExport(args) {
2353
- const credentialIdB64u = String(args.unlock.credential.rawId || args.unlock.credential.id || "").trim();
2354
- if (!credentialIdB64u) throw new Error("[login] passkey assertion credential id is missing");
2355
- await rememberPasskeyCustodySessionEnvelope({
2356
- walletId: args.walletId,
2357
- credentialIdB64u,
2358
- envelope: args.unlock.custody.envelope
2359
- });
2360
- }
2361
- async function preparePasskeyExchangeEcdsaActivation(args) {
2362
- const configuredTargets = listConfiguredThresholdEcdsaPublicationTargets(args.context.configs.network.chains);
2363
- if (!resolveLoginUnlockWarmupBranchPlan({
2364
- subjectSet: args.walletIdentity.subjectSet,
2365
- selection: args.selection,
2366
- hasConfiguredEcdsaTargets: configuredTargets.length > 0
2367
- }).wantsEcdsaWarmup) return null;
2368
- const target = configuredTargets[0];
2369
- if (!target) return null;
2370
- const context = await resolveCanonicalThresholdEcdsaWarmSessionContext(args.context, args.walletIdentity.walletId, void 0, "passkey");
2371
- const targetKey = thresholdEcdsaChainTargetKey(target.chainTarget);
2372
- const targetEcdsaKey = context.ecdsaKeys.find((candidate) => candidate.targetKey === targetKey);
2373
- if (!targetEcdsaKey) throw createThresholdEcdsaDeviceLinkRequiredError(targetKey);
2374
- const runtimePolicyScope = context.runtimePolicyScope;
2375
- if (!runtimePolicyScope) throw new Error("[login] passkey ECDSA activation requires runtime policy scope");
2376
- const thresholdSessionId = requireThresholdLoginEcdsaSessionId(createThresholdLoginWarmSessionId("threshold-ecdsa-login"));
2377
- const walletSessionMintId = requireThresholdLoginWalletSessionMintId(createThresholdLoginWarmSessionId("wallet-session-mint"));
2378
- return {
2379
- targetKey,
2380
- requiresCustodyRejoin: !targetEcdsaKey.existingRoleLocalMaterial,
2381
- policy: {
2382
- kind: "router_ab_ecdsa_post_registration_session_activation_policy_v1",
2383
- key_handle: targetEcdsaKey.keyHandle,
2384
- session_policy: {
2385
- threshold_session_id: thresholdSessionId,
2386
- wallet_session_mint_id: walletSessionMintId,
2387
- ttl_ms: args.ttlMs,
2388
- remaining_uses: args.remainingUses,
2389
- runtime_policy_scope: runtimePolicyScope
2390
- }
2391
- }
2392
- };
2393
- }
2394
- function passkeyUnlockEd25519SessionRequest(args) {
2395
- switch (args.walletIdentity.kind) {
2396
- case "near_ed25519_capable_wallet": return {
2397
- kind: "requested",
2398
- remainingUses: args.remainingUses
2399
- };
2400
- case "evm_family_ecdsa_only_wallet": return { kind: "not_requested" };
2401
- default: return assertNeverLoginState(args.walletIdentity);
2402
- }
2403
- }
2404
- function passkeyWalletUnlockInput(args) {
2405
- if (args.activation) return {
2406
- type: "passkey_assertion",
2407
- challengeId: args.challengeId,
2408
- walletId: String(args.walletIdentity.walletId),
2409
- webauthn_authentication: args.credential,
2410
- ed25519SessionRequest: args.ed25519SessionRequest,
2411
- expected_origin: args.expectedOrigin,
2412
- ecdsaSessionPolicy: args.activation.policy
2413
- };
2414
- return {
2415
- type: "passkey_assertion",
2416
- challengeId: args.challengeId,
2417
- webauthn_authentication: args.credential,
2418
- ed25519SessionRequest: args.ed25519SessionRequest,
2419
- expected_origin: args.expectedOrigin
2420
- };
2421
- }
2422
- async function resolveActivePasskeyWalletSessionAuthority(args) {
2423
- const authMethod = await IndexedDBManager.getWalletAuthMethodV2(args.authorization.record.authMethodId);
2424
- if (!authMethod || authMethod.kind !== "passkey" || authMethod.status !== "active" || authMethod.walletId !== args.walletId || authMethod.walletAuthorityId !== args.authorization.record.authorityId) throw new Error("Passkey Wallet Session authorization changed auth-method identity");
2425
- const authority = await IndexedDBManager.getWalletAuthority(authMethod.walletAuthorityId);
2426
- if (!authority || authority.state !== "active" || authority.walletId !== args.walletId || authority.authorityId !== args.authorization.record.authorityId || authority.authorityDigestB64u !== args.authorization.record.authorityDigestB64u || authority.revocationEpoch !== args.authorization.record.authorityRevocationEpoch) throw new Error("Passkey Wallet Session authorization changed authority identity");
2427
- return {
2428
- reference: await walletAuthAuthorityRefForSelectedPasskeyMethod(authMethod),
2429
- identity: exactWalletSessionAuthorityIdentity({
2430
- authority,
2431
- walletAuthMethodId: authMethod.walletAuthMethodId
2432
- })
2433
- };
2434
- }
2435
- async function validatePasskeyWalletSessionAuthorization(args) {
2436
- const credentialIdB64u = passkeyCredentialIdB64uFromAuthentication(args.credential);
2437
- if (!credentialIdB64u) throw new Error("Passkey Wallet Session adoption requires WebAuthn credential identity");
2438
- const authMethod = await exactPasskeyWalletAuthMethodForCredential({
2439
- walletId: args.walletIdentity.walletId,
2440
- rpId: args.rpId,
2441
- credentialIdB64u
2442
- });
2443
- const authority = await resolveActivePasskeyWalletSessionAuthority({
2444
- walletId: args.walletIdentity.walletId,
2445
- authorization: args.authorization
2446
- });
2447
- if (args.authorization.record.walletId !== args.walletIdentity.walletId || args.authorization.record.authMethodId !== authMethod.walletAuthMethodId || args.authorization.record.authorityId !== authMethod.walletAuthorityId || authority.reference.walletId !== args.walletIdentity.walletId) throw new Error("Passkey Wallet Session authorization changed auth-method identity");
2448
- return authority;
2449
- }
2450
- function bindPasskeyEcdsaSessionPolicyToUnlockChallenge(policy, challengeId) {
2451
- return {
2452
- ...policy,
2453
- session_policy: {
2454
- ...policy.session_policy,
2455
- wallet_session_mint_id: requireThresholdLoginWalletSessionMintId(challengeId)
2456
- }
2457
- };
2458
- }
2459
- async function completePasskeyWalletUnlock(args, statusReads) {
2460
- emitUnlockEvent(args.onEvent, args.unlockSubjectId, {
2461
- phase: UnlockEventPhase.STEP_03_PASSKEY_CHALLENGE_STARTED,
2462
- status: "running",
2463
- authMethod: "passkey"
2464
- });
2465
- const challengeResponse = await fetch(joinNormalizedUrl(args.relayUrl, "/wallet/unlock/challenge"), {
2466
- method: "POST",
2467
- headers: { "Content-Type": "application/json" },
2468
- body: JSON.stringify({
2469
- unlockBackend: "passkey",
2470
- userId: String(args.walletIdentity.walletId),
2471
- rpId: args.rpId
2472
- })
2473
- });
2474
- const challengeBodyUnknown = await challengeResponse.json().catch(() => ({}));
2475
- const challengeBody = isObject(challengeBodyUnknown) ? challengeBodyUnknown : {};
2476
- const challengeMessage = typeof challengeBody.message === "string" ? challengeBody.message : "";
2477
- if (!challengeResponse.ok || challengeBody.ok !== true) throw new Error(challengeMessage || `wallet/unlock/challenge failed (HTTP ${challengeResponse.status})`);
2478
- const challengeId = String(challengeBody.challengeId || "").trim();
2479
- const challengeB64u = String(challengeBody.challengeB64u || "").trim();
2480
- if (!challengeId || !challengeB64u) throw new Error("wallet/unlock/challenge returned invalid challenge");
2481
- const activation = args.activation ? {
2482
- ...args.activation,
2483
- policy: bindPasskeyEcdsaSessionPolicyToUnlockChallenge(args.activation.policy, challengeId)
2484
- } : null;
2485
- const credentialIds = resolveLoginPasskeyPromptCredentialIds({
2486
- authenticators: args.authenticators,
2487
- signerSlot: args.signerSlot,
2488
- serverCredentialIds: parseLoginChallengeCredentialIds(challengeBody.credentialIds)
2489
- });
2490
- const credential = await args.collectCredentialForChallenge({
2491
- challengeB64u,
2492
- credentialIds
2493
- });
2494
- const expectedOrigin = String(args.expectedOrigin ?? (typeof window !== "undefined" ? window.location.origin : "")).trim();
2495
- if (!expectedOrigin) throw new Error("[login] passkey wallet unlock requires an expected origin");
2496
- const unlockInput = passkeyWalletUnlockInput({
2497
- challengeId,
2498
- credential,
2499
- ed25519SessionRequest: passkeyUnlockEd25519SessionRequest({
2500
- walletIdentity: args.walletIdentity,
2501
- remainingUses: args.remainingUses
2502
- }),
2503
- expectedOrigin,
2504
- walletIdentity: args.walletIdentity,
2505
- activation
2506
- });
2507
- const result = await verifyPasskeyWalletUnlock(args.relayUrl, unlockInput, statusReads);
2508
- if (!result.success) throw new Error(result.error || "Passkey wallet unlock failed");
2509
- if (!result.walletCustody) throw new Error("Passkey wallet unlock omitted wallet custody continuity");
2510
- if (activation && (!result.ecdsaSession || !result.ecdsaActivationReceipt || !result.ecdsaCustody)) throw new Error("Passkey wallet unlock omitted the requested ECDSA activation");
2511
- const walletSessionAuthorizationToPersist = result.walletSessionAuthorization ?? null;
2512
- const passkeySessionAuthority = walletSessionAuthorizationToPersist ? await validatePasskeyWalletSessionAuthorization({
2513
- walletIdentity: args.walletIdentity,
2514
- rpId: args.rpId,
2515
- credential,
2516
- authorization: walletSessionAuthorizationToPersist
2517
- }) : null;
2518
- let sessionActivation = null;
2519
- if (activation && result.ecdsaSession && result.ecdsaActivationReceipt && result.ecdsaCustody && result.ecdsaSession.kind === "router_ab_ecdsa_credential_free_session_activated_v1") {
2520
- const walletSessionAuthorization = result.walletSessionAuthorization;
2521
- if (!walletSessionAuthorization) throw new Error("Passkey credential-free activation omitted exact Wallet Session authority");
2522
- if (!passkeySessionAuthority) throw new Error("Passkey credential-free activation omitted exact Passkey authority");
2523
- sessionActivation = {
2524
- kind: "credential_free_ecdsa_session_activation_authorization_v1",
2525
- activation: result.ecdsaSession,
2526
- authorization: walletSessionAuthorization
2527
- };
2528
- }
2529
- if (activation && result.ecdsaSession && result.ecdsaActivationReceipt && result.ecdsaCustody) {
2530
- assertPasskeyEcdsaExchangeContinuity({
2531
- walletId: String(args.walletIdentity.walletId),
2532
- prepared: activation,
2533
- response: result.ecdsaSession,
2534
- activationReceipt: result.ecdsaActivationReceipt,
2535
- continuity: result.ecdsaCustody
2536
- });
2537
- if (result.ecdsaSession.kind === "router_ab_ecdsa_post_registration_session_activated_v1") sessionActivation = result.ecdsaSession;
2538
- }
2539
- const ecdsaSessionAuthority = sessionActivation ? await validatePasskeyWalletSessionAuthorization({
2540
- walletIdentity: args.walletIdentity,
2541
- rpId: args.rpId,
2542
- credential,
2543
- authorization: exactAuthorizationFromPasskeyEcdsaActivation(sessionActivation)
2544
- }) : null;
2545
- if (walletSessionAuthorizationToPersist) await walletSessionAuthorizations.writeExactWithOperationCredential(walletSessionAuthorizationToPersist);
2546
- if (activation?.requiresCustodyRejoin) {
2547
- if (!("ecdsaCustody" in result) || !result.ecdsaCustody) throw new Error("Passkey wallet unlock omitted ECDSA custody rejoin continuity");
2548
- const passkeyPrfFirstB64u = passkeyPrfFirstB64uFromCredential(credential);
2549
- if (!passkeyPrfFirstB64u) throw new Error("Passkey ECDSA custody rejoin requires WebAuthn PRF.first");
2550
- const credentialIdB64u = passkeyCredentialIdB64uFromAuthentication(credential);
2551
- const authority = ecdsaSessionAuthority?.reference ?? passkeySessionAuthority?.reference ?? await exactPasskeyWalletAuthAuthorityRefForCredential({
2552
- walletId: args.walletIdentity.walletId,
2553
- rpId: args.rpId,
2554
- credentialIdB64u
2555
- });
2556
- await restorePasskeyEcdsaCustodyLogin({
2557
- signingEngine: args.context.signingEngine,
2558
- walletId: String(args.walletIdentity.walletId),
2559
- custody: result.walletCustody,
2560
- continuity: result.ecdsaCustody,
2561
- authority,
2562
- passkeyPrfFirstB64u
2563
- });
2564
- }
2565
- return {
2566
- credential,
2567
- activation: activation && result.ecdsaSession && sessionActivation && ecdsaSessionAuthority ? {
2568
- ...activation,
2569
- response: result.ecdsaSession,
2570
- sessionActivation,
2571
- authorizationIdentity: ecdsaSessionAuthority.identity,
2572
- activationReceipt: result.ecdsaActivationReceipt,
2573
- continuity: result.ecdsaCustody
2574
- } : null,
2575
- custody: result.walletCustody,
2576
- result
2577
- };
2578
- }
2579
- var LoginWarmupDeferred = class {
2580
- constructor() {
2581
- this.settled = false;
2582
- this.promise = new Promise(this.capturePromise.bind(this));
2583
- }
2584
- resolve(value) {
2585
- if (this.settled) return;
2586
- this.settled = true;
2587
- this.resolvePromise(value);
2588
- }
2589
- reject(error) {
2590
- if (this.settled) return;
2591
- this.settled = true;
2592
- this.rejectPromise(toError(error));
2593
- }
2594
- async wait() {
2595
- return await this.promise;
2596
- }
2597
- capturePromise(resolve, reject) {
2598
- this.resolvePromise = resolve;
2599
- this.rejectPromise = reject;
2600
- }
2601
- };
2602
- async function stageMintedLoginEd25519WalletSessionAuthority(context, minted) {
2603
- context.sharedState.ed25519.thresholdSessionId = String(minted.thresholdSessionId);
2604
- context.sharedState.ed25519.authorizationId = minted.authorizationId;
2605
- context.sharedState.ed25519.walletSessionId = minted.walletSessionId;
2606
- context.sharedState.ed25519.quotaId = minted.quotaId;
2607
- context.sharedState.ed25519.operationCredential = minted.operationCredential;
2608
- context.sharedState.ed25519.expiresAtMs = minted.expiresAtMs;
2609
- context.sharedState.ed25519.remainingUses = minted.remainingUses;
2610
- context.sharedState.ed25519.runtimePolicyScope = minted.runtimePolicyScope;
2611
- if (context.ecdsaContextResolution.kind === "resolve_after_ed25519") context.sharedState.activeCanonicalEcdsaContext = await context.ecdsaContextResolution.resolveAfterEd25519(context.sharedState.ed25519);
2612
- context.authorityDeferred?.resolve(minted);
2613
- }
2614
- function rejectLoginWarmupEd25519Deferreds(authorityDeferred, error) {
2615
- authorityDeferred?.reject(error);
2616
- }
2617
- function createActiveLoginSigningSessionStatus(args) {
2618
- return {
2619
- sessionId: String(args.session.thresholdSessionId),
2620
- status: "active",
2621
- authMethod: args.authMethod,
2622
- ...args.authMethod === SIGNER_AUTH_METHODS.emailOtp ? { retention: "session" } : {},
2623
- remainingUses: args.session.remainingUses,
2624
- expiresAtMs: args.session.expiresAtMs
2625
- };
2626
- }
2627
- function isWalletSessionReconnectEcdsaRouteAuth(auth) {
2628
- return auth?.kind === "opaque_wallet_session_operation_credential_v1";
2629
- }
2630
- function publicCapabilityFromThresholdEcdsaBootstrap(bootstrap) {
2631
- const backendBinding = bootstrap.thresholdEcdsaKeyRef.backendBinding;
2632
- if (!backendBinding) return void 0;
2633
- switch (backendBinding.materialKind) {
2634
- case "role_local_worker_handle":
2635
- case "role_local_durable_sealed_ref":
2636
- case "role_local_durable_public_anchor": return backendBinding.publicFacts.publicCapability;
2637
- case "role_local_ready_state_blob": return backendBinding.ecdsaRoleLocalReadyRecord.publicFacts.publicCapability;
2638
- case "metadata_only": return;
2639
- }
2640
- }
2641
- function sharedEcdsaActivationKey(capability) {
2642
- return JSON.stringify(capability);
2643
- }
2644
- function preauthorizedEcdsaActivationFromBootstrap(bootstrap) {
2645
- const publicCapability = publicCapabilityFromThresholdEcdsaBootstrap(bootstrap);
2646
- if (!publicCapability) throw new Error("[login] ECDSA bootstrap is missing its public capability");
2647
- const session = bootstrap.session;
2648
- const normalSigning = bootstrap.thresholdEcdsaKeyRef.routerAbEcdsaDerivationNormalSigning;
2649
- if (!normalSigning) throw new Error("[login] ECDSA bootstrap is missing normal-signing state");
2650
- return {
2651
- kind: "router_ab_ecdsa_post_registration_session_activated_v1",
2652
- public_capability: publicCapability,
2653
- session: {
2654
- authorization_session_id: session.authorizationSessionId,
2655
- authorization_id: session.authorizationId,
2656
- threshold_session_id: requireThresholdLoginEcdsaSessionId(session.thresholdSessionId),
2657
- wallet_session_id: session.walletSessionId,
2658
- quota_id: session.quotaId,
2659
- expires_at_ms: session.expiresAtMs,
2660
- remaining_uses: session.remainingUses,
2661
- wallet_session: session.walletSession,
2662
- operation_credential: session.operationCredential
2663
- },
2664
- normal_signing: normalSigning
2665
- };
2666
- }
2667
- function sameEd25519ParticipantIds(left, right) {
2668
- return left.length === right.length && left.every((participantId, index) => participantId === right[index]);
2669
- }
2670
- function sameRouterAbEd25519NormalSigningState(left, right) {
2671
- return left.kind === right.kind && left.signingWorkerId === right.signingWorkerId;
2672
- }
2673
- function sameThresholdRuntimePolicyScope(left, right) {
2674
- return left.orgId === right.orgId && left.projectId === right.projectId && left.envId === right.envId && left.signingRootVersion === right.signingRootVersion;
2675
- }
2676
- function mergeThresholdEcdsaWarmSessionContexts(args) {
2677
- if (args.current.runtimePolicyScope && args.incoming.runtimePolicyScope && !sameThresholdRuntimePolicyScope(args.current.runtimePolicyScope, args.incoming.runtimePolicyScope)) throw new Error(`[login] threshold ECDSA ${args.source} has a conflicting runtime policy scope`);
2678
- return mergeCanonicalThresholdEcdsaWarmSessionContexts(args.current, args.incoming);
2679
- }
2680
- /** Public capability and authority are the manifest's half of the capability
2681
- * split; the sealed record is only correlated runtime evidence. A persisted
2682
- * capability on the configured target is used directly; otherwise the exact
2683
- * manifest is resolved. There is deliberately no composite-record fallback --
2684
- * absent canonical state is device-link-required, not a silent miss. */
2685
- async function resolvePersistedEcdsaPublicCapabilityForLogin(args) {
2686
- if (args.targetEcdsaKey.publicCapability.kind === "persisted_public_capability") {
2687
- const publicCapability = args.targetEcdsaKey.publicCapability.value;
2688
- if (String(publicCapability.client_id) !== String(args.walletId)) throw new Error(`[login] threshold ECDSA persisted public capability wallet mismatch for ${thresholdEcdsaChainTargetKey(args.chainTarget)}`);
2689
- return publicCapability;
2690
- }
2691
- const resolved = await resolveBrowserActiveEcdsaCapabilityRuntime({
2692
- walletId: args.walletId,
2693
- chainTarget: args.chainTarget
2694
- });
2695
- if (resolved.kind !== "resolved") throw createThresholdEcdsaDeviceLinkRequiredError(thresholdEcdsaChainTargetKey(args.chainTarget));
2696
- const publicFacts = resolved.manifest.durableMaterial.roleLocalPublicFacts;
2697
- if (String(publicFacts.keyHandle) !== String(args.targetEcdsaKey.keyHandle) || String(publicFacts.walletId) !== String(args.walletId)) throw createThresholdEcdsaDeviceLinkRequiredError(thresholdEcdsaChainTargetKey(args.chainTarget));
2698
- return publicFacts.publicCapability;
2699
- }
2700
- function buildThresholdLoginWarmSignerSelection(signersToWarm) {
2701
- const normalized = [];
2702
- for (const signer of signersToWarm) {
2703
- if (signer !== "ed25519" && signer !== "ecdsa") continue;
2704
- if (normalized.includes(signer)) continue;
2705
- normalized.push(signer);
2706
- }
2707
- return normalized;
2708
- }
2709
- async function runThresholdLoginWarmupTask(task) {
2710
- try {
2711
- await task.run();
2712
- return {
2713
- kind: "succeeded",
2714
- task
2715
- };
2716
- } catch (error) {
2717
- task.onFailure?.(error);
2718
- return {
2719
- kind: "failed",
2720
- task,
2721
- error: toError(error)
2722
- };
2723
- }
2724
- }
2725
- async function runThresholdLoginWarmupTasks(tasks) {
2726
- const pendingBySigner = /* @__PURE__ */ new Map();
2727
- for (const task of tasks) pendingBySigner.set(task.signer, task);
2728
- const completed = /* @__PURE__ */ new Set();
2729
- while (pendingBySigner.size > 0) {
2730
- const ready = [];
2731
- for (const task of pendingBySigner.values()) if (task.dependencies.every((dep) => completed.has(dep))) ready.push(task);
2732
- if (ready.length === 0) throw new Error("[login] threshold warm-up task dependency graph is unsatisfied");
2733
- const outcomes = await Promise.all(ready.map(runThresholdLoginWarmupTask));
2734
- let firstFailure = null;
2735
- for (const outcome of outcomes) switch (outcome.kind) {
2736
- case "succeeded":
2737
- completed.add(outcome.task.signer);
2738
- pendingBySigner.delete(outcome.task.signer);
2739
- break;
2740
- case "failed":
2741
- firstFailure ??= outcome.error;
2742
- break;
2743
- default: return assertNeverLoginState(outcome);
2744
- }
2745
- if (firstFailure) throw firstFailure;
2746
- }
2747
- }
2748
- function resolveThresholdLoginWarmEcdsaBootstrapIdentity(args) {
2749
- args.routeAuthorization.kind;
2750
- if (args.credentialState.kind === "available") return {};
2751
- throw new Error("[login] threshold ECDSA warm-up requires route authorization");
2752
- }
2753
- function thresholdLoginWarmupErrorMessage(error) {
2754
- return String((error && typeof error === "object" && "message" in error ? error.message : error) || "");
2755
- }
2756
- function assertNeverLoginState(value) {
2757
- throw new Error(`[login] unexpected state: ${String(value)}`);
2758
- }
2759
- async function bootstrapLoginEcdsaSession(args) {
2760
- switch (args.runtimeScopeBootstrapState.kind) {
2761
- case "available": return await args.signingEngine.bootstrapEcdsaSession({
2762
- ...args.request,
2763
- runtimeScopeBootstrap: args.runtimeScopeBootstrapState.runtimeScopeBootstrap
2764
- });
2765
- case "unavailable": return await args.signingEngine.bootstrapEcdsaSession(args.request);
2766
- default: return assertNeverLoginState(args.runtimeScopeBootstrapState);
2767
- }
2768
- }
2769
- function requireLoginWarmEd25519OperationCredential(session) {
2770
- if ("operationCredential" in session) return session.operationCredential;
2771
- throw new Error("[login] wallet custody Ed25519 activation requires the exact issued operation credential");
2772
- }
2773
- async function ensurePasskeyEd25519OwnerProfile(input) {
2774
- const existing = await input.signingEngine.getUserBySignerSlot(input.walletBinding.nearAccountId, input.signerSlot).catch(() => null);
2775
- if (existing) {
2776
- if (existing.walletId !== String(input.walletBinding.walletId) || existing.nearEd25519SigningKeyId !== String(input.walletBinding.nearEd25519SigningKeyId) || existing.signerSlot !== input.signerSlot) throw new Error("[login] local Ed25519 owner profile identity is invalid");
2777
- return;
2778
- }
2779
- await input.signingEngine.storeUserData({
2780
- walletId: String(input.walletBinding.walletId),
2781
- nearAccountId: input.walletBinding.nearAccountId,
2782
- nearEd25519SigningKeyId: String(input.walletBinding.nearEd25519SigningKeyId),
2783
- signerSlot: input.signerSlot,
2784
- operationalPublicKey: `ed25519:${base58Encode(input.registeredPublicKey)}`,
2785
- passkeyCredential: {
2786
- id: input.credentialIdB64u,
2787
- rawId: input.credentialIdB64u
2788
- },
2789
- lastUpdated: Date.now(),
2790
- version: 2
2791
- });
2792
- }
2793
- function walletCustodyLoginActivationFacts(custody, thresholdSessionId) {
2794
- const capability = custody.ed25519.capability;
2795
- const continuity = capability.registrationContinuity;
2796
- return {
2797
- materialActivation: capability.materialActivation,
2798
- lifecycleId: capability.lifecycle.lifecycleId,
2799
- signingRootVersion: capability.lifecycle.rootShareEpoch,
2800
- signingRootId: capability.applicationBinding.signing_root_id,
2801
- signerSetId: capability.lifecycle.signerSetId,
2802
- thresholdSessionId,
2803
- activationTranscriptB64u: base64UrlEncode(Uint8Array.from(continuity.activationTranscript)),
2804
- activationCapabilityBindingB64u: base64UrlEncode(Uint8Array.from(capability.activeCapabilityBinding))
2805
- };
2806
- }
2807
- function assertWalletCustodyLoginIdentity(input) {
2808
- const ed25519 = input.custody.ed25519;
2809
- const capability = ed25519.capability;
2810
- if (ed25519.nearAccountId !== String(input.walletBinding.nearAccountId) || ed25519.nearEd25519SigningKeyId !== String(input.walletBinding.nearEd25519SigningKeyId) || ed25519.signerSlot !== input.signerSlot || capability.applicationBinding.wallet_id !== String(input.walletBinding.walletId) || capability.applicationBinding.near_ed25519_signing_key_id !== String(input.walletBinding.nearEd25519SigningKeyId) || capability.applicationBinding.key_creation_signer_slot !== input.signerSlot || capability.nearAccountId !== input.walletBinding.nearAccountId || capability.lifecycle.accountId !== String(input.walletBinding.walletId) || capability.lifecycle.signingWorkerId !== ed25519.relayerKeyId) throw new Error("[login] wallet custody identity does not match the selected signing lane");
2811
- }
2812
- async function openAndActivatePasskeyEd25519CustodyLogin(input) {
2813
- assertWalletCustodyLoginIdentity(input);
2814
- const capability = input.custody.ed25519.capability;
2815
- const cached = await input.signingEngine.loadWalletCustodyEd25519Material({
2816
- nearAccountId: String(input.walletBinding.nearAccountId),
2817
- signerSlot: input.signerSlot,
2818
- expectedRegisteredPublicKeyB64u: base64UrlEncode(Uint8Array.from(capability.registeredPublicKey))
2819
- });
2820
- const thresholdSessionId = parseThresholdEd25519SessionId(input.walletSession.thresholdSessionId);
2821
- if (!thresholdSessionId.ok) throw new Error("[login] wallet custody returned an invalid threshold session identity");
2822
- const activation = walletCustodyLoginActivationFacts(input.custody, thresholdSessionId.value);
2823
- const envelope = walletCustodyCacheEnvelopeFromRecordV1(input.custody.envelope);
2824
- let activeClient = null;
2825
- let rejoinSecret = null;
2826
- let openSecret = null;
2827
- try {
2828
- if (cached.kind === "found") {
2829
- openSecret = base64UrlDecode(input.passkeyPrfFirstB64u);
2830
- activeClient = await openWalletCustodyEd25519ActiveClientV1({
2831
- material: cached.material,
2832
- activation,
2833
- envelope,
2834
- ownedFactorSecret: openSecret
2835
- });
2836
- } else {
2837
- const custodyWire = joinCustodyWireFromEnvelopeRecord(input.custody.envelope);
2838
- if (!custodyWire.ok) throw new Error(custodyWire.reason);
2839
- rejoinSecret = base64UrlDecode(input.passkeyPrfFirstB64u);
2840
- openSecret = base64UrlDecode(input.passkeyPrfFirstB64u);
2841
- const rejoined = await input.signingEngine.rejoinWalletCustodyNearEd25519KeySet({
2842
- walletId: String(input.walletBinding.walletId),
2843
- custodyJson: custodyWire.custodyJson,
2844
- factorSecret: rejoinSecret.buffer,
2845
- nearEd25519SigningKeyId: String(input.walletBinding.nearEd25519SigningKeyId),
2846
- recoveryBasis: capability,
2847
- routerOrigin: new URL(input.relayerUrl).origin,
2848
- walletSessionToken: requireLoginWarmEd25519OperationCredential(input.walletSession).token
2849
- });
2850
- const materialBinding = {
2851
- kind: WALLET_CUSTODY_ED25519_MATERIAL_KEY_KIND,
2852
- applicationBindingDigestB64u: rejoined.localMaterial.applicationBindingDigestB64u,
2853
- registeredPublicKeyB64u: base64UrlEncode(rejoined.metadata.registeredPublicKey),
2854
- participantIds: rejoined.metadata.participantIds,
2855
- stateEpoch: String(rejoined.metadata.stateEpoch),
2856
- walletId: String(input.walletBinding.walletId),
2857
- nearAccountId: String(input.walletBinding.nearAccountId),
2858
- nearEd25519SigningKeyId: String(input.walletBinding.nearEd25519SigningKeyId),
2859
- signerSlot: input.signerSlot,
2860
- signingWorkerId: input.custody.ed25519.relayerKeyId,
2861
- signingWorkerVerifyingShareB64u: base64UrlEncode(rejoined.metadata.signingWorkerVerifyingShare)
2862
- };
2863
- const sealed = {
2864
- ciphertextB64u: rejoined.localMaterial.b64u,
2865
- nonceB64u: rejoined.localMaterial.nonceB64u
2866
- };
2867
- try {
2868
- await input.signingEngine.persistWalletCustodyEd25519Material({
2869
- binding: materialBinding,
2870
- sealed
2871
- });
2872
- } catch (error) {
2873
- console.warn("[login] wallet custody cache write failed; continuing with verified material", { error });
2874
- }
2875
- activeClient = await openWalletCustodyEd25519ActiveClientV1({
2876
- material: {
2877
- binding: materialBinding,
2878
- sealed
2879
- },
2880
- activation: walletCustodyActivationFactsFromActiveClientMetadataV1(rejoined.metadata),
2881
- envelope,
2882
- ownedFactorSecret: openSecret
2883
- });
2884
- }
2885
- if (!activeClient) throw new Error("[login] wallet custody produced no active client");
2886
- const recoveredThresholdSessionId = parseThresholdEd25519SessionId(activeClient.metadata().scope.threshold_session_id);
2887
- if (!recoveredThresholdSessionId.ok) throw new Error("[login] wallet custody returned an invalid threshold session identity");
2888
- if (recoveredThresholdSessionId.value !== input.walletSession.thresholdSessionId) throw new Error("[login] wallet custody changed the threshold session identity");
2889
- const envelopeFactor = input.custody.envelope.factor;
2890
- if (envelopeFactor.kind !== "passkey") throw new Error("[login] wallet custody returned a different factor authority");
2891
- await ensurePasskeyEd25519OwnerProfile({
2892
- signingEngine: input.signingEngine,
2893
- walletBinding: input.walletBinding,
2894
- signerSlot: input.signerSlot,
2895
- credentialIdB64u: envelopeFactor.credentialIdB64u,
2896
- registeredPublicKey: activeClient.metadata().registeredPublicKey
2897
- });
2898
- await persistPasskeyEd25519YaoSignerMaterialV1({
2899
- store: IndexedDBManager,
2900
- activeClient,
2901
- identity: {
2902
- walletId: String(input.walletBinding.walletId),
2903
- nearAccountId: String(input.walletBinding.nearAccountId),
2904
- nearEd25519SigningKeyId: String(input.walletBinding.nearEd25519SigningKeyId),
2905
- thresholdSessionId: recoveredThresholdSessionId.value,
2906
- signerSlot: input.signerSlot,
2907
- rpId: envelopeFactor.rpId,
2908
- credentialIdB64u: envelopeFactor.credentialIdB64u,
2909
- signingRootId: capability.applicationBinding.signing_root_id,
2910
- signingRootVersion: capability.lifecycle.rootShareEpoch,
2911
- signingWorkerId: input.custody.ed25519.relayerKeyId
2912
- },
2913
- stableServerScope: {
2914
- relayerKeyId: input.custody.ed25519.relayerKeyId,
2915
- participantIds: input.custody.ed25519.participantIds,
2916
- runtimePolicyScope: capability.runtimePolicyScope,
2917
- routerAbNormalSigning: input.routerAbNormalSigning
2918
- },
2919
- passkeyPrfFirstB64u: input.passkeyPrfFirstB64u
2920
- });
2921
- const activated = await input.signingEngine.activateVerifiedNearEd25519YaoMaterial({
2922
- activeClient,
2923
- facts: {
2924
- thresholdSessionId: recoveredThresholdSessionId.value,
2925
- signer: nearEd25519SignerBindingFromBoundaryFields({
2926
- walletId: input.walletBinding.walletId,
2927
- nearAccountId: input.walletBinding.nearAccountId,
2928
- nearEd25519SigningKeyId: input.walletBinding.nearEd25519SigningKeyId,
2929
- signerSlot: input.signerSlot
2930
- }),
2931
- signingRootId: capability.applicationBinding.signing_root_id,
2932
- signingRootVersion: capability.lifecycle.rootShareEpoch,
2933
- routerAbNormalSigning: input.routerAbNormalSigning,
2934
- runtimePolicyScope: capability.runtimePolicyScope,
2935
- relayerUrl: input.relayerUrl
2936
- }
2937
- });
2938
- const signingWalletSession = buildRouterAbEd25519SigningWalletSession({
2939
- walletId: String(input.walletBinding.walletId),
2940
- nearAccountId: String(input.walletBinding.nearAccountId),
2941
- nearEd25519SigningKeyId: String(input.walletBinding.nearEd25519SigningKeyId),
2942
- walletSessionId: input.walletSession.walletSessionId,
2943
- authorizationId: input.walletSession.authorizationId,
2944
- quotaId: input.walletSession.quotaId,
2945
- thresholdSessionId: recoveredThresholdSessionId.value,
2946
- remainingUses: input.walletSession.remainingUses,
2947
- expiresAtMs: input.walletSession.expiresAtMs,
2948
- runtimePolicyScope: input.walletSession.runtimePolicyScope,
2949
- signingRootId: capability.applicationBinding.signing_root_id,
2950
- signingRootVersion: capability.lifecycle.rootShareEpoch,
2951
- routerAbNormalSigning: input.routerAbNormalSigning,
2952
- walletSessionToken: requireLoginWarmEd25519OperationCredential(input.walletSession).token,
2953
- nowMs: Math.min(Date.now(), input.walletSession.expiresAtMs - 1)
2954
- });
2955
- if (!signingWalletSession.ok) throw new Error(`[login] wallet custody returned an unusable Ed25519 Wallet Session: ${signingWalletSession.reason}`);
2956
- const session = buildPasskeyRouterAbEd25519WalletSessionState({
2957
- walletId: input.walletBinding.walletId,
2958
- nearAccountId: input.walletBinding.nearAccountId,
2959
- nearEd25519SigningKeyId: input.walletBinding.nearEd25519SigningKeyId,
2960
- signerSlot: input.signerSlot,
2961
- rpId: toRpId(envelopeFactor.rpId),
2962
- credentialIdB64u: envelopeFactor.credentialIdB64u,
2963
- relayerUrl: input.relayerUrl,
2964
- authority: input.authority,
2965
- signingWalletSession: signingWalletSession.value
2966
- });
2967
- await persistPasskeyEd25519YaoSessionForRefresh({
2968
- persistence: input.signingEngine,
2969
- session,
2970
- prfFirstB64u: input.passkeyPrfFirstB64u,
2971
- ed25519Restore: buildPasskeyEd25519RestoreMetadata({
2972
- rpId: envelopeFactor.rpId,
2973
- nearAccountId: String(input.walletBinding.nearAccountId),
2974
- nearEd25519SigningKeyId: String(input.walletBinding.nearEd25519SigningKeyId),
2975
- relayerKeyId: input.custody.ed25519.relayerKeyId,
2976
- participantIds: input.custody.ed25519.participantIds,
2977
- runtimePolicyScope: input.walletSession.runtimePolicyScope,
2978
- signerSlot: input.signerSlot,
2979
- routerAbNormalSigning: input.routerAbNormalSigning,
2980
- credentialIdB64u: envelopeFactor.credentialIdB64u,
2981
- materialActivation: activated.materialActivation
2982
- }),
2983
- materialActivation: activated.materialActivation
2984
- });
2985
- await input.signingEngine.establishUnlockedWalletEd25519ExportRootCapabilityV1({
2986
- existingEnvelope: input.custody.envelope,
2987
- passkeyPrfFirstB64u: input.passkeyPrfFirstB64u,
2988
- walletId: String(input.walletBinding.walletId),
2989
- walletAuthMethodId: String(input.authority.walletAuthMethodId),
2990
- walletSessionId: String(input.walletSession.walletSessionId),
2991
- expiresAtMs: input.walletSession.expiresAtMs
2992
- });
2993
- } catch (error) {
2994
- activeClient?.dispose();
2995
- throw error;
2996
- } finally {
2997
- rejoinSecret?.fill(0);
2998
- openSecret?.fill(0);
2999
- }
3000
- }
3001
- function ethereumAddressFromEcdsaIdentityB64u(value) {
3002
- const bytes = base64UrlDecode(value);
3003
- if (bytes.length !== 20) throw new Error("[login] ECDSA custody address is invalid");
3004
- let hex = "0x";
3005
- for (const byte of bytes) hex += byte.toString(16).padStart(2, "0");
3006
- return hex;
3007
- }
3008
- function nonEmptyEcdsaCustodyChainTargets(signers) {
3009
- const [first, ...rest] = signers;
3010
- if (!first) throw new Error("[login] passkey ECDSA custody continuity is empty");
3011
- return [first.chainTarget, ...rest.map((signer) => signer.chainTarget)];
3012
- }
3013
- async function restorePasskeyEcdsaCustodyLogin(input) {
3014
- const first = input.continuity.signers[0];
3015
- if (!first) throw new Error("[login] passkey ECDSA custody continuity is empty");
3016
- if (first.walletKey.walletId !== input.walletId) throw new Error("[login] passkey ECDSA custody continuity changed wallet identity");
3017
- for (const signer of input.continuity.signers) if (signer.walletKey.walletId !== first.walletKey.walletId || signer.walletKey.keyHandle !== first.walletKey.keyHandle || signer.walletKey.ecdsaThresholdKeyId !== first.walletKey.ecdsaThresholdKeyId || signer.walletKey.signingRootId !== first.walletKey.signingRootId || signer.walletKey.signingRootVersion !== first.walletKey.signingRootVersion || signer.walletKey.relayerKeyId !== first.walletKey.relayerKeyId || !sameRouterAbEcdsaDerivationPublicCapabilityV1(signer.walletKey.publicCapability, first.walletKey.publicCapability) || !sameRouterAbEcdsaRegistrationActivationReceiptV1(signer.activationReceipt, first.activationReceipt) || !sameThresholdRuntimePolicyScope(signer.runtimePolicyScope, first.runtimePolicyScope)) throw new Error("[login] passkey ECDSA custody continuity conflicts across targets");
3018
- const custodyWire = joinCustodyWireFromEnvelopeRecord(input.custody.envelope);
3019
- if (!custodyWire.ok) throw new Error(custodyWire.reason);
3020
- const factorSecret = base64UrlDecode(input.passkeyPrfFirstB64u);
3021
- try {
3022
- const rejoined = await input.signingEngine.rejoinWalletCustodyEvmFamilyKeySet({
3023
- walletId: input.walletId,
3024
- custodyJson: custodyWire.custodyJson,
3025
- factorSecret: factorSecret.buffer,
3026
- evmFamilySigningKeySlotId: deriveEvmFamilySigningKeySlotId({
3027
- walletId: input.walletId,
3028
- signingRootId: first.walletKey.signingRootId,
3029
- signingRootVersion: first.walletKey.signingRootVersion
3030
- }),
3031
- applicationBindingDigestB64u: first.walletKey.publicCapability.context.application_binding_digest_b64u,
3032
- registeredClientRootPublicKey33B64u: first.walletKey.derivationClientSharePublicKey33B64u,
3033
- relayerPublicIdentityJson: JSON.stringify({
3034
- relayerKeyId: first.walletKey.relayerKeyId,
3035
- relayerPublicKey33B64u: first.activationReceipt.ecdsa_activation.public_identity.server_public_key33_b64u,
3036
- groupPublicKey33B64u: first.activationReceipt.ecdsa_activation.public_identity.threshold_public_key33_b64u,
3037
- ethereumAddress: ethereumAddressFromEcdsaIdentityB64u(first.activationReceipt.ecdsa_activation.public_identity.ethereum_address20_b64u),
3038
- relayerShareRetryCounter: first.activationReceipt.ecdsa_activation.public_identity.server_share_retry_counter
3039
- })
3040
- });
3041
- assertRejoinedPasskeyEcdsaPublicFacts({
3042
- publicFacts: rejoined.publicFacts,
3043
- signer: first
3044
- });
3045
- await input.signingEngine.restoreWalletCustodyEcdsaContinuity({
3046
- authority: input.authority,
3047
- chainTargets: nonEmptyEcdsaCustodyChainTargets(input.continuity.signers),
3048
- walletId: first.walletKey.walletId,
3049
- keyHandle: first.walletKey.keyHandle,
3050
- ecdsaThresholdKeyId: first.walletKey.ecdsaThresholdKeyId,
3051
- signingRootId: first.walletKey.signingRootId,
3052
- signingRootVersion: first.walletKey.signingRootVersion,
3053
- relayerKeyId: first.walletKey.relayerKeyId,
3054
- participantIds: first.walletKey.participantIds,
3055
- publicCapability: first.walletKey.publicCapability,
3056
- activationReceipt: first.activationReceipt,
3057
- runtimePolicyScope: first.runtimePolicyScope,
3058
- readyStateBlobB64u: rejoined.readyStateBlobB64u,
3059
- publicFacts: rejoined.publicFacts
3060
- });
3061
- } finally {
3062
- factorSecret.fill(0);
3063
- }
3064
- }
3065
- async function primeThresholdLoginWarmSigners(args) {
3066
- const signersToWarm = buildThresholdLoginWarmSignerSelection(args.signersToWarm);
3067
- const credential = args.credentialState.kind === "available" ? args.credentialState.credential : void 0;
3068
- const localPasskeyCredentialIdB64u = args.credentialState.localPasskeyCredentialIdB64u;
3069
- const runtimeScopeBootstrap = args.runtimeScopeBootstrapState.kind === "available" ? args.runtimeScopeBootstrapState.runtimeScopeBootstrap : null;
3070
- const initialCanonicalEcdsaContext = args.ecdsaContextResolution.kind === "pre_resolved" ? args.ecdsaContextResolution.context : args.ecdsaContextResolution.initialContext;
3071
- const sharedState = {
3072
- activeCanonicalEcdsaContext: initialCanonicalEcdsaContext,
3073
- ed25519: {
3074
- thresholdSessionId: "",
3075
- authorizationId: null,
3076
- walletSessionId: null,
3077
- quotaId: null,
3078
- operationCredential: null,
3079
- expiresAtMs: 0,
3080
- remainingUses: 0,
3081
- runtimePolicyScope: null
3082
- }
3083
- };
3084
- const authorityDeferred = args.ecdsaDependency.kind === "ed25519_wallet_session_authority" ? new LoginWarmupDeferred() : null;
3085
- const ecdsaThresholdSessionState = { generatedThresholdSessionId: args.passkeyExchangeEcdsaActivation?.policy.session_policy.threshold_session_id || "" };
3086
- const unlockRemainingUses = args.unlockRemainingUses;
3087
- const ecdsaBootstraps = [];
3088
- let ed25519Session = null;
3089
- let ecdsaAuthorizedEd25519Mint = null;
3090
- const tasks = [];
3091
- if (signersToWarm.includes("ed25519")) tasks.push({
3092
- signer: "ed25519",
3093
- dependencies: args.ed25519DependsOnEcdsa ? ["ecdsa"] : [],
3094
- onFailure: authorityDeferred ? rejectLoginWarmupEd25519Deferreds.bind(void 0, authorityDeferred) : null,
3095
- run: async () => {
3096
- const walletBinding = requireNearLoginWalletBinding(args.walletIdentity);
3097
- const ecdsaMint = ecdsaAuthorizedEd25519Mint;
3098
- const ed25519SessionAuthority = bindLoginEd25519SessionAuthorityToAuthenticatedCredential({
3099
- authority: requireRequestedLoginEd25519SessionAuthority(args.ed25519SessionAuthority),
3100
- walletId: walletBinding.walletId,
3101
- rpId: args.context.signingEngine.getRpId(),
3102
- credentialIdB64u: localPasskeyCredentialIdB64u
3103
- });
3104
- const ed25519ProvisioningIdentity = resolveLoginWarmEd25519ProvisioningIdentity({
3105
- mintPlan: args.ed25519MintPlan,
3106
- ecdsaMint,
3107
- walletBinding,
3108
- signerSlot: args.signerSlot,
3109
- authority: ed25519SessionAuthority
3110
- });
3111
- const provisionScope = resolveLoginEd25519ProvisionScope({
3112
- mintPlan: args.ed25519MintPlan,
3113
- fallback: {
3114
- relayerKeyId: args.relayerKeyId,
3115
- participantIds: args.participantIds,
3116
- runtimePolicyScope: initialCanonicalEcdsaContext.runtimePolicyScope ?? null,
3117
- routerAbNormalSigning: createRouterAbNormalSigningPolicy(args.context.configs)
3118
- }
3119
- });
3120
- const sharedEd25519ConnectArgs = {
3121
- relayerUrl: args.relayerUrl,
3122
- relayerKeyId: provisionScope.relayerKeyId,
3123
- runtimePolicyScope: provisionScope.runtimePolicyScope || void 0,
3124
- routerAbNormalSigning: provisionScope.routerAbNormalSigning,
3125
- runtimeScopeBootstrap: runtimeScopeBootstrap || void 0,
3126
- participantIds: provisionScope.participantIds,
3127
- ttlMs: args.ttlMs,
3128
- remainingUses: unlockRemainingUses,
3129
- onWalletSessionAuthorityReady: stageMintedLoginEd25519WalletSessionAuthority.bind(void 0, {
3130
- sharedState,
3131
- authorityDeferred,
3132
- ecdsaContextResolution: args.ecdsaContextResolution
3133
- })
3134
- };
3135
- const commonEd25519ConnectArgs = ed25519ProvisioningIdentity.kind === "fresh_ed25519_provisioning" ? {
3136
- ...ed25519ProvisioningIdentity,
3137
- walletId: String(walletBinding.walletId),
3138
- nearAccountId: walletBinding.nearAccountId,
3139
- nearEd25519SigningKeyId: walletBinding.nearEd25519SigningKeyId,
3140
- signerSlot: args.signerSlot,
3141
- ...sharedEd25519ConnectArgs
3142
- } : {
3143
- ...ed25519ProvisioningIdentity,
3144
- ...sharedEd25519ConnectArgs
3145
- };
3146
- let connected;
3147
- switch (ed25519SessionAuthority.kind) {
3148
- case "email_otp":
3149
- connected = await args.signingEngine.connectEd25519Session({
3150
- ...commonEd25519ConnectArgs,
3151
- source: "email_otp",
3152
- authority: ed25519SessionAuthority.authority,
3153
- emailOtpAuthContext: ed25519SessionAuthority.emailOtpAuthContext,
3154
- materialActivation: void 0
3155
- });
3156
- break;
3157
- case "passkey":
3158
- if (!args.passkeyUnlockEd25519Session) throw new Error("[login] verified wallet unlock omitted its Ed25519 Wallet Session");
3159
- if (args.ed25519MintPlan.kind !== "wallet_custody") throw new Error("[login] verified unlock Ed25519 session requires wallet custody");
3160
- connected = passkeyUnlockEd25519Connection({
3161
- session: args.passkeyUnlockEd25519Session,
3162
- walletBinding,
3163
- signerSlot: args.signerSlot,
3164
- custody: args.ed25519MintPlan.custody,
3165
- provisionScope,
3166
- credential,
3167
- remainingUses: unlockRemainingUses,
3168
- unlockAuthorization: args.passkeyUnlockWalletSessionAuthorization
3169
- });
3170
- break;
3171
- default: return assertNeverLoginState(ed25519SessionAuthority);
3172
- }
3173
- if (!connected.ok) {
3174
- const details = String(connected.message || connected.code || "Failed to connect threshold Ed25519 session");
3175
- throw new Error(`[login] threshold Ed25519 warm-up failed: ${details}`);
3176
- }
3177
- ed25519Session = connected;
3178
- if (!connected.thresholdSessionId) throw new Error("[login] threshold Ed25519 warm-up did not return a thresholdSessionId");
3179
- const connectedAuthority = ed25519SessionAuthority.kind === "passkey" ? await exactPasskeyWalletAuthAuthorityRefForCredential({
3180
- walletId: walletBinding.walletId,
3181
- rpId: args.context.signingEngine.getRpId(),
3182
- credentialIdB64u: passkeyCredentialIdB64uFromAuthentication(credential || void 0) || localPasskeyCredentialIdB64u
3183
- }) : await walletAuthAuthorityRef({ authority: ed25519SessionAuthority.authority.authority });
3184
- if (args.ed25519MintPlan.kind === "wallet_custody") {
3185
- if (ed25519SessionAuthority.kind !== "passkey") throw new Error("[login] wallet custody requires passkey authority");
3186
- const expectedMaterialActivation = resolveLoginPasskeyMaterialActivation(ed25519ProvisioningIdentity, args.ed25519MintPlan);
3187
- const passkeyPrfFirstB64u = credential ? passkeyPrfFirstB64uFromCredential(credential) : "";
3188
- if (!passkeyPrfFirstB64u) throw new Error("[login] wallet custody requires WebAuthn PRF.first");
3189
- await args.signingEngine.withExactEd25519MaterialOwner({
3190
- materialActivation: expectedMaterialActivation,
3191
- nearAccountId: walletBinding.nearAccountId,
3192
- task: openAndActivatePasskeyEd25519CustodyLogin.bind(void 0, {
3193
- signingEngine: args.signingEngine,
3194
- custody: args.ed25519MintPlan.custody,
3195
- walletBinding,
3196
- signerSlot: args.signerSlot,
3197
- passkeyPrfFirstB64u,
3198
- walletSession: connected,
3199
- authority: connectedAuthority,
3200
- routerAbNormalSigning: provisionScope.routerAbNormalSigning,
3201
- relayerUrl: args.relayerUrl
3202
- })
3203
- });
3204
- }
3205
- }
3206
- });
3207
- if (signersToWarm.includes("ecdsa")) tasks.push({
3208
- signer: "ecdsa",
3209
- dependencies: [],
3210
- onFailure: null,
3211
- run: async () => {
3212
- await authorityDeferred?.promise;
3213
- let bootstrapIdentity = null;
3214
- let consumedPasskeyExchangeActivation = false;
3215
- const activationByMaterial = /* @__PURE__ */ new Map();
3216
- const configuredEcdsaTargets = listConfiguredThresholdEcdsaPublicationTargets(args.context.configs.network.chains);
3217
- const completeActiveContextFromConfiguredTargets = (source) => {
3218
- const completion = buildConfiguredTargetKeyCompletion({
3219
- context: sharedState.activeCanonicalEcdsaContext,
3220
- configuredTargets: configuredEcdsaTargets
3221
- });
3222
- if (completion.kind === "complete_configured_target_keys") {
3223
- sharedState.activeCanonicalEcdsaContext = completion.context;
3224
- return;
3225
- }
3226
- if (completion.kind === "missing_configured_target_keys") return;
3227
- requireCompleteConfiguredTargetKeyContext({
3228
- completion,
3229
- source
3230
- });
3231
- };
3232
- const rememberEcdsaAuthorizedEd25519Mint = (bootstrap) => {
3233
- if (ecdsaAuthorizedEd25519Mint) return;
3234
- const operationCredential = bootstrap.session.operationCredential;
3235
- const passkeyPrfFirstB64u = credential ? passkeyPrfFirstB64uFromCredential(credential) : "";
3236
- const passkeyCredentialIdB64u = passkeyCredentialIdB64uFromAuthentication(credential || void 0) || localPasskeyCredentialIdB64u;
3237
- if (!operationCredential.token || !passkeyPrfFirstB64u || !passkeyCredentialIdB64u) return;
3238
- ecdsaAuthorizedEd25519Mint = {
3239
- operationCredential,
3240
- passkeyPrfFirstB64u,
3241
- passkeyCredentialIdB64u,
3242
- quotaId: bootstrap.session.quotaId
3243
- };
3244
- };
3245
- const resolveCurrentBootstrapIdentity = () => {
3246
- if (sharedState.ed25519.operationCredential) return { routeAuth: sharedState.ed25519.operationCredential };
3247
- const operationCredential = ecdsaAuthorizedEd25519Mint?.operationCredential;
3248
- if (operationCredential) return { routeAuth: operationCredential };
3249
- if (bootstrapIdentity) return bootstrapIdentity;
3250
- bootstrapIdentity = resolveThresholdLoginWarmEcdsaBootstrapIdentity({
3251
- credentialState: args.credentialState,
3252
- routeAuthorization: args.routeAuthorization
3253
- });
3254
- return bootstrapIdentity;
3255
- };
3256
- const bootstrapTarget = async (target, targetEcdsaKey) => {
3257
- if (!targetEcdsaKey.key) throw new Error("[login] threshold ECDSA warm-up requires configured target key identity");
3258
- const publicCapability = await resolvePersistedEcdsaPublicCapabilityForLogin({
3259
- walletId: args.walletIdentity.walletId,
3260
- chainTarget: target.chainTarget,
3261
- targetEcdsaKey
3262
- });
3263
- const reusedMaterialActivation = activationByMaterial.get(sharedEcdsaActivationKey(publicCapability));
3264
- const exchangeActivation = args.passkeyExchangeEcdsaActivation;
3265
- const matchingExchangeActivation = exchangeActivation && !consumedPasskeyExchangeActivation && exchangeActivation.targetKey === thresholdEcdsaChainTargetKey(target.chainTarget) ? exchangeActivation : null;
3266
- const preauthorized = matchingExchangeActivation ? {
3267
- sessionActivation: matchingExchangeActivation.sessionActivation,
3268
- authorizationIdentity: matchingExchangeActivation.authorizationIdentity
3269
- } : reusedMaterialActivation ?? null;
3270
- const thresholdSessionId = preauthorized ? thresholdSessionIdFromPasskeyEcdsaActivation(preauthorized.sessionActivation) : resolveThresholdLoginWarmEcdsaThresholdSessionId({ sharedState: ecdsaThresholdSessionState });
3271
- const runtimePolicyScope = sharedState.activeCanonicalEcdsaContext.runtimePolicyScope;
3272
- if (!runtimePolicyScope) throw new Error("[login] ECDSA session lane requires runtimePolicyScope");
3273
- const lanePolicy = buildEvmFamilyEcdsaSessionLanePolicy({
3274
- chainTarget: target.chainTarget,
3275
- thresholdSessionId,
3276
- ttlMs: args.ttlMs,
3277
- remainingUses: unlockRemainingUses,
3278
- runtimePolicyScope
3279
- });
3280
- const existingRoleLocalMaterial = targetEcdsaKey.existingRoleLocalMaterial;
3281
- if (!existingRoleLocalMaterial) throw createThresholdEcdsaDeviceLinkRequiredError(thresholdEcdsaChainTargetKey(target.chainTarget));
3282
- if (!localPasskeyCredentialIdB64u) throw new Error("[login] ECDSA role-local activation requires passkey identity");
3283
- const authorizationAuthority = existingRoleLocalMaterial.authority;
3284
- if (preauthorized) {
3285
- if (matchingExchangeActivation) consumedPasskeyExchangeActivation = true;
3286
- return await bootstrapLoginEcdsaSession({
3287
- signingEngine: args.signingEngine,
3288
- runtimeScopeBootstrapState: args.runtimeScopeBootstrapState,
3289
- request: {
3290
- kind: "passkey_preauthorized_ecdsa_bootstrap",
3291
- source: "login",
3292
- relayerUrl: args.relayerUrl,
3293
- keyHandle: toEvmFamilyEcdsaKeyHandle(targetEcdsaKey.keyHandle),
3294
- key: targetEcdsaKey.key,
3295
- lanePolicy,
3296
- publicCapability,
3297
- existingRoleLocalMaterial,
3298
- authorizationAuthority,
3299
- authorizationIdentity: preauthorized.authorizationIdentity,
3300
- passkeyCredentialIdB64u: localPasskeyCredentialIdB64u,
3301
- sessionActivation: preauthorized.sessionActivation
3302
- }
3303
- });
3304
- }
3305
- const reconnectRouteAuth = resolveCurrentBootstrapIdentity().routeAuth;
3306
- if (!isWalletSessionReconnectEcdsaRouteAuth(reconnectRouteAuth)) throw new Error("[login] ECDSA role-local activation requires a verified Wallet Session");
3307
- return await bootstrapLoginEcdsaSession({
3308
- signingEngine: args.signingEngine,
3309
- runtimeScopeBootstrapState: args.runtimeScopeBootstrapState,
3310
- request: {
3311
- kind: "wallet_session_reconnect_ecdsa_bootstrap",
3312
- source: "login",
3313
- relayerUrl: args.relayerUrl,
3314
- keyHandle: toEvmFamilyEcdsaKeyHandle(targetEcdsaKey.keyHandle),
3315
- key: targetEcdsaKey.key,
3316
- lanePolicy,
3317
- publicCapability,
3318
- existingRoleLocalMaterial,
3319
- authorizationAuthority,
3320
- passkeyCredentialIdB64u: localPasskeyCredentialIdB64u,
3321
- routeAuth: reconnectRouteAuth
3322
- }
3323
- });
3324
- };
3325
- const bootstrapConfiguredTargets = async () => {
3326
- completeActiveContextFromConfiguredTargets("login ECDSA warm-up preflight");
3327
- const orderedConfiguredEcdsaTargets = [];
3328
- const preauthorizedTargetKey = args.passkeyExchangeEcdsaActivation?.targetKey || null;
3329
- if (preauthorizedTargetKey) {
3330
- for (const target of configuredEcdsaTargets) if (thresholdEcdsaChainTargetKey(target.chainTarget) === preauthorizedTargetKey) orderedConfiguredEcdsaTargets.push(target);
3331
- }
3332
- for (const target of configuredEcdsaTargets) if (thresholdEcdsaChainTargetKey(target.chainTarget) !== preauthorizedTargetKey) orderedConfiguredEcdsaTargets.push(target);
3333
- for (const target of orderedConfiguredEcdsaTargets) {
3334
- const targetKey = thresholdEcdsaChainTargetKey(target.chainTarget);
3335
- const targetEcdsaKey = sharedState.activeCanonicalEcdsaContext.ecdsaKeys.find((key) => key.targetKey === targetKey);
3336
- const keyHandle = String(targetEcdsaKey?.keyHandle || "").trim();
3337
- if (!targetEcdsaKey?.key || !keyHandle) throw createThresholdEcdsaDeviceLinkRequiredError(targetKey);
3338
- const bootstrap = await bootstrapTarget(target, targetEcdsaKey);
3339
- ecdsaBootstraps.push(bootstrap);
3340
- scheduleEcdsaSessionPresignaturePrefill({
3341
- statusReads: args.statusReads,
3342
- trigger: "unlock",
3343
- signingEngine: args.signingEngine,
3344
- walletId: args.walletIdentity.walletId,
3345
- chainTarget: target.chainTarget
3346
- });
3347
- rememberEcdsaAuthorizedEd25519Mint(bootstrap);
3348
- const activation = preauthorizedEcdsaActivationFromBootstrap(bootstrap);
3349
- const activationKey = sharedEcdsaActivationKey(activation.public_capability);
3350
- if (!activationByMaterial.has(activationKey)) {
3351
- const activationAuthority = await resolveActivePasskeyWalletSessionAuthority({
3352
- walletId: args.walletIdentity.walletId,
3353
- authorization: {
3354
- record: bootstrap.session.walletSession,
3355
- operationCredential: bootstrap.session.operationCredential
3356
- }
3357
- });
3358
- activationByMaterial.set(activationKey, {
3359
- sessionActivation: activation,
3360
- authorizationIdentity: activationAuthority.identity
3361
- });
3362
- }
3363
- if (String(bootstrap.thresholdEcdsaKeyRef?.keyHandle || "").trim() !== targetEcdsaKey.keyHandle) throw new Error(`[login] threshold ECDSA warm-up returned a different keyHandle for ${targetKey}`);
3364
- }
3365
- if (args.passkeyExchangeEcdsaActivation && !consumedPasskeyExchangeActivation) throw new Error("[login] passkey exchange ECDSA activation did not match a configured target");
3366
- };
3367
- try {
3368
- await bootstrapConfiguredTargets();
3369
- } catch (error) {
3370
- const details = thresholdLoginWarmupErrorMessage(error) || "Failed to bootstrap threshold ECDSA session";
3371
- throw new Error(`[login] threshold ECDSA warm-up failed: ${details}`);
3372
- }
3373
- }
3374
- });
3375
- await runThresholdLoginWarmupTasks(tasks);
3376
- return {
3377
- ecdsaBootstraps,
3378
- ed25519Session
3379
- };
3380
- }
3381
- async function getWalletSession(context, walletId) {
3382
- let currentAuthentication = context.signingEngine.readWalletAuthenticationState();
3383
- const requestedWalletId = walletId ?? (currentAuthentication.kind !== "signed_out" ? currentAuthentication.walletId : void 0);
3384
- let requestedWalletIdValue = null;
3385
- let requestedAuthenticationRead = null;
3386
- if (requestedWalletId !== void 0) {
3387
- const parsedRequestedWalletId = parseWalletId(String(requestedWalletId));
3388
- if (parsedRequestedWalletId.ok) {
3389
- requestedWalletIdValue = parsedRequestedWalletId.value;
3390
- requestedAuthenticationRead = await readExactWalletSessionAuthentication({
3391
- walletId: parsedRequestedWalletId.value,
3392
- ports: browserExactWalletSessionReadPorts
3393
- });
3394
- if (requestedAuthenticationRead.kind === "upgrade_required") throw new WalletSessionAuthorizationUpgradeRequiredError("[WalletSession] Wallet Session authorization requires a newer client");
3395
- if (requestedAuthenticationRead.kind === "missing") currentAuthentication = { kind: "signed_out" };
3396
- }
3397
- }
3398
- let readResolution = await resolveWalletCapabilitySubjectResolution(requestedWalletId);
3399
- if (readResolution.kind === "no_session_for_wallet") {
3400
- const linkedSubjectSet = await resolveLinkedDeviceUnlockSubjectSet(String(readResolution.walletId));
3401
- if (linkedSubjectSet) readResolution = {
3402
- kind: "resolved",
3403
- walletId: readResolution.walletId,
3404
- subjectSet: linkedSubjectSet,
3405
- source: "local_wallet_authority"
3406
- };
3407
- }
3408
- let didReconcileEcdsaActivation = false;
3409
- if (readResolution.kind === "no_session_request") return buildAnonymousWalletSession();
3410
- if (readResolution.kind === "no_session_for_wallet") {
3411
- const journalSelectors = await resolveEcdsaActivationJournalSelectors(readResolution.walletId);
3412
- if (journalSelectors.kind !== "resolved") return await buildCapabilityUnresolvableWalletSession({
3413
- context,
3414
- walletId: readResolution.walletId,
3415
- reason: "activation_reconciliation_failed"
3416
- });
3417
- if (journalSelectors.selectors.length > 0) {
3418
- didReconcileEcdsaActivation = true;
3419
- const reconciliation = await reconcileCanonicalEcdsaActivationSelectors({
3420
- workerCtx: context.signingEngine.getSignerWorkerContext(),
3421
- selectors: journalSelectors.selectors
3422
- });
3423
- if (reconciliation.didFinalize) readResolution = await resolveWalletCapabilitySubjectResolution(readResolution.walletId);
3424
- if (readResolution.kind === "no_session_for_wallet" && reconciliation.kind !== "settled") return await buildCapabilityUnresolvableWalletSession({
3425
- context,
3426
- walletId: readResolution.walletId,
3427
- reason: reconciliation.kind === "pending" ? "activation_reconciliation_pending" : "activation_reconciliation_failed"
3428
- });
3429
- }
3430
- }
3431
- if (readResolution.kind === "no_session_for_wallet") return await buildCapabilityUnresolvableWalletSession({
3432
- context,
3433
- walletId: readResolution.walletId,
3434
- reason: readResolution.reason
3435
- });
3436
- if (readResolution.kind === "no_session_request") return buildAnonymousWalletSession();
3437
- if (readResolution.kind === "unresolvable_profile") {
3438
- console.warn("[WalletSession] wallet session profile is unresolvable", {
3439
- profileId: readResolution.profileId,
3440
- reason: readResolution.reason
3441
- });
3442
- return buildAnonymousWalletSession();
3443
- }
3444
- if (readResolution.kind === "unresolvable") {
3445
- console.warn("[WalletSession] wallet session identity is unresolvable", {
3446
- walletId: String(readResolution.walletId),
3447
- reason: readResolution.reason
3448
- });
3449
- return await buildCapabilityUnresolvableWalletSession({
3450
- context,
3451
- walletId: readResolution.walletId,
3452
- reason: readResolution.reason
3453
- });
3454
- }
3455
- const activeEcdsaSelectors = ecdsaActivationSelectorsFromSubjectSet(readResolution.subjectSet);
3456
- if (!didReconcileEcdsaActivation && activeEcdsaSelectors.length > 0) reportNonSettledEcdsaActivationReconciliation(await reconcileCanonicalEcdsaActivationSelectors({
3457
- workerCtx: context.signingEngine.getSignerWorkerContext(),
3458
- selectors: activeEcdsaSelectors
3459
- }));
3460
- await context.signingEngine.assertSealedRefreshStartupParity().catch((error) => {
3461
- console.warn("[WalletSession] sealed refresh startup parity check failed during session read; continuing with cached login state", error instanceof Error ? error.message : String(error || "unknown error"));
3462
- });
3463
- const [appIdentity, availableLanes] = await Promise.all([resolveWalletSessionAppIdentity(context, readResolution), readExactWalletSessionAvailableLanes(context, readResolution.walletId)]);
3464
- const restoredAuthenticationRead = requestedAuthenticationRead && requestedWalletIdValue && String(requestedWalletIdValue) === String(readResolution.walletId) ? requestedAuthenticationRead : await readExactWalletSessionAuthentication({
3465
- walletId: readResolution.walletId,
3466
- ports: browserExactWalletSessionReadPorts
3467
- });
3468
- let authentication = { kind: "signed_out" };
3469
- switch (restoredAuthenticationRead.kind) {
3470
- case "authenticated":
3471
- if (await setRestoredWalletAuthenticationIfUnlocked(context, restoredAuthenticationRead.state)) authentication = restoredAuthenticationRead.state;
3472
- break;
3473
- case "missing": break;
3474
- case "upgrade_required": throw new WalletSessionAuthorizationUpgradeRequiredError("[WalletSession] Wallet Session authorization requires a newer client");
3475
- }
3476
- const capabilityProjection = buildWalletSessionCapabilityProjection({
3477
- subjectSet: authentication.kind === "authenticated" && restoredAuthenticationRead.kind === "authenticated" ? scopeSubjectSetToWalletAuthMethod(readResolution.subjectSet, restoredAuthenticationRead.walletAuthMethodId) : readResolution.subjectSet,
3478
- availableLanes,
3479
- configuredEcdsaTargets: listConfiguredThresholdEcdsaPublicationTargets(context.configs.network.chains).map((target) => target.chainTarget)
3480
- });
3481
- return {
3482
- appIdentity,
3483
- authentication,
3484
- capabilityProjection,
3485
- nonceDiagnostics: readWalletSessionNonceDiagnostics(context, appIdentity.nearAccountId)
3486
- };
3487
- }
3488
- function scopeSubjectSetToWalletAuthMethod(subjectSet, walletAuthMethodId) {
3489
- const [first, ...rest] = subjectSet.subjects.filter((subject) => subject.kind !== "evm_family_ecdsa_wallet" || String(subject.authority.walletAuthMethodId) === String(walletAuthMethodId));
3490
- if (!first) return subjectSet;
3491
- return {
3492
- ...subjectSet,
3493
- subjects: [first, ...rest]
3494
- };
3495
- }
3496
- /**
3497
- * A restore read races the user's lock: the read observes an unlocked
3498
- * selection, the lock lands while its network validation runs, and the stale
3499
- * result would re-authenticate a wallet the user just locked. Re-checking the
3500
- * durable lock right before the runtime write keeps the lock decisive over
3501
- * any in-flight restore.
3502
- */
3503
- async function setRestoredWalletAuthenticationIfUnlocked(context, state) {
3504
- let lockedOut = false;
3505
- try {
3506
- const selected = await IndexedDBManager.resolveSelectedWalletAuthority(String(state.walletId));
3507
- lockedOut = selected.kind !== "resolved" || selected.selection.lockState !== "unlocked";
3508
- } catch {
3509
- lockedOut = true;
3510
- }
3511
- if (lockedOut) return false;
3512
- context.signingEngine.setWalletAuthenticated(state);
3513
- return true;
3514
- }
3515
- async function buildCapabilityUnresolvableWalletSession(args) {
3516
- const [appIdentity, exactAuthenticationRead] = await Promise.all([resolveWalletSessionAppIdentityForWallet(args.context, args.walletId), readExactWalletSessionAuthentication({
3517
- walletId: args.walletId,
3518
- ports: browserExactWalletSessionReadPorts
3519
- })]);
3520
- let authentication = { kind: "signed_out" };
3521
- switch (exactAuthenticationRead.kind) {
3522
- case "authenticated":
3523
- if (await setRestoredWalletAuthenticationIfUnlocked(args.context, exactAuthenticationRead.state)) authentication = exactAuthenticationRead.state;
3524
- break;
3525
- case "missing": break;
3526
- case "upgrade_required": throw new WalletSessionAuthorizationUpgradeRequiredError("[WalletSession] Wallet Session authorization requires a newer client");
3527
- }
3528
- return {
3529
- appIdentity,
3530
- authentication,
3531
- capabilityProjection: {
3532
- kind: "unresolvable",
3533
- reason: args.reason
3534
- },
3535
- nonceDiagnostics: readWalletSessionNonceDiagnostics(args.context, appIdentity.nearAccountId)
3536
- };
3537
- }
3538
- function readExactWalletSessionAvailableLanes(context, walletId) {
3539
- return context.signingEngine.readPersistedAvailableSigningLanes({ walletId }).then((lanes) => ({
3540
- kind: "available",
3541
- lanes
3542
- })).catch(() => ({ kind: "unavailable" }));
3543
- }
3544
- function readWalletSessionNonceDiagnostics(context, nearAccountId) {
3545
- const accountId = String(nearAccountId || "").trim();
3546
- if (!accountId) return null;
3547
- try {
3548
- return context.signingEngine.getNonceCoordinator().getDiagnostics({
3549
- accountId,
3550
- emitMetrics: true
3551
- });
3552
- } catch {
3553
- return null;
3554
- }
3555
- }
3556
- function normalizeEvmOwnerAddress(value) {
3557
- const candidate = String(value || "").trim().toLowerCase();
3558
- return /^0x[0-9a-f]{40}$/.test(candidate) ? candidate : "";
3559
- }
3560
- async function readProfileContinuityThresholdEcdsaWalletKeys(context, walletId) {
3561
- const configuredTargets = listConfiguredThresholdEcdsaPublicationTargets(context.configs.network.chains).map((target) => target.chainTarget);
3562
- if (!configuredTargets.length) return [];
3563
- const walletSigners = await IndexedDBManager.listAccountSignersByProfile({
3564
- profileId: String(walletId),
3565
- status: "active"
3566
- }).catch(() => []);
3567
- const walletKeys = [];
3568
- for (const signer of walletSigners) {
3569
- const parsed = parseActiveEcdsaSignerRecordForUnlock({
3570
- walletId,
3571
- configuredTargets,
3572
- signer
3573
- });
3574
- if (parsed.kind === "active_ecdsa_signer_record") walletKeys.push(parsed.walletKey);
3575
- }
3576
- return walletKeys;
3577
- }
3578
- async function resolveProfileContinuityThresholdEcdsaEthereumAddress(context, walletId) {
3579
- const addresses = [...new Set((await readProfileContinuityThresholdEcdsaWalletKeys(context, walletId)).map((walletKey) => normalizeEvmOwnerAddress(walletKey.keyFacts.thresholdOwnerAddress)).filter(Boolean))];
3580
- if (addresses.length === 1) return addresses[0];
3581
- if (addresses.length > 1) console.warn("[WalletSession] conflicting profile threshold ECDSA addresses", {
3582
- walletId: String(walletId),
3583
- addresses
3584
- });
3585
- return null;
3586
- }
3587
- function resolveThresholdLoginWarmSigners(args) {
3588
- if (args.selection.mode === "ed25519_only") return ["ed25519"];
3589
- if (!args.configuredEcdsaTargets.length) return args.selection.mode === "ecdsa_only" ? [] : ["ed25519"];
3590
- const keyIdsByTarget = new Set((args.canonicalEcdsaContext?.ecdsaKeys || []).map((key) => key.targetKey));
3591
- if (keyIdsByTarget.size === 0) throw new Error("[login] threshold ECDSA warm-up missing canonical key identity");
3592
- const missingTargets = args.configuredEcdsaTargets.map((target) => thresholdEcdsaChainTargetKey(target.chainTarget)).filter((targetKey) => !keyIdsByTarget.has(targetKey));
3593
- if (missingTargets.length) throw new Error(`[login] threshold ECDSA warm-up missing configured-target key ids for ${missingTargets.join(", ")}`);
3594
- return args.selection.mode === "ecdsa_only" ? ["ecdsa"] : ["ed25519", "ecdsa"];
3595
- }
3596
- function resolveThresholdLoginWarmupPlan(args) {
3597
- const configuredTargetKeyCompletion = buildConfiguredTargetKeyCompletion({
3598
- context: args.storedCanonicalEcdsaContext,
3599
- configuredTargets: args.selectedEcdsaTargets
3600
- });
3601
- let ecdsaContextResolution;
3602
- let signersToWarm;
3603
- const ed25519DependsOnEcdsa = false;
3604
- let ecdsaDependsOnEd25519 = false;
3605
- if (configuredTargetKeyCompletion.kind === "missing_configured_target_keys" && args.selectedEcdsaTargets.length) {
3606
- const initialContext = {
3607
- ecdsaKeys: [],
3608
- ...args.storedCanonicalEcdsaContext.runtimePolicyScope ? { runtimePolicyScope: args.storedCanonicalEcdsaContext.runtimePolicyScope } : {}
3609
- };
3610
- if (!args.canFirstBootstrapThresholdEcdsa) throw new Error(`[login] threshold ECDSA warm-up requires complete local key facts for ${configuredTargetKeyCompletion.missingTargets.join(", ")}; run explicit authenticated ECDSA key-facts inventory before unlock`);
3611
- signersToWarm = args.wantsEd25519Warmup ? ["ed25519", "ecdsa"] : ["ecdsa"];
3612
- ecdsaDependsOnEd25519 = args.wantsEd25519Warmup;
3613
- ecdsaContextResolution = {
3614
- kind: "first_bootstrap_missing_target_keys",
3615
- initialContext
3616
- };
3617
- } else {
3618
- const resolvedCanonicalEcdsaContext = requireCompleteConfiguredTargetKeyContext({
3619
- completion: configuredTargetKeyCompletion,
3620
- source: "stored ECDSA key facts"
3621
- });
3622
- ecdsaContextResolution = {
3623
- kind: "pre_resolved",
3624
- context: resolvedCanonicalEcdsaContext
3625
- };
3626
- signersToWarm = resolveThresholdLoginWarmSigners({
3627
- selection: args.selection,
3628
- configuredEcdsaTargets: args.selectedEcdsaTargets,
3629
- canonicalEcdsaContext: resolvedCanonicalEcdsaContext
3630
- });
3631
- if (args.wantsEd25519Warmup && !signersToWarm.includes("ed25519")) signersToWarm = ["ed25519", ...signersToWarm];
3632
- ecdsaDependsOnEd25519 = signersToWarm.includes("ed25519") && signersToWarm.includes("ecdsa");
3633
- }
3634
- if (!signersToWarm.length) throw new Error("[login] ECDSA unlock requested with no configured ECDSA targets");
3635
- return {
3636
- kind: "threshold_login_warmup_plan_ready",
3637
- storedCanonicalEcdsaContext: args.storedCanonicalEcdsaContext,
3638
- configuredTargetKeyCompletion,
3639
- ecdsaContextResolution,
3640
- signersToWarm,
3641
- ed25519DependsOnEcdsa,
3642
- ecdsaDependsOnEd25519
3643
- };
3644
- }
3645
- function createThresholdLoginWarmSessionId(prefix) {
3646
- return secureRandomId(prefix, 32, "threshold login warm session IDs");
3647
- }
3648
- function requireThresholdLoginEcdsaSessionId(value) {
3649
- const parsed = parseThresholdEcdsaSessionId(value);
3650
- if (!parsed.ok) throw new Error("[login] failed to create threshold ECDSA session identity");
3651
- return parsed.value;
3652
- }
3653
- function requireThresholdLoginWalletSessionMintId(value) {
3654
- const parsed = parseWalletSessionMintId(value);
3655
- if (!parsed.ok) throw new Error("[login] failed to create Wallet Session mint identity");
3656
- return parsed.value;
3657
- }
3658
- function requireLoginUnlockSessionUses(remainingUses) {
3659
- if (remainingUses == null || remainingUses <= 0) throw new Error("[login] unlock warm-up requires positive unlock session uses");
3660
- return remainingUses;
3661
- }
3662
- function createThresholdEcdsaDeviceLinkRequiredError(targetKey) {
3663
- const error = /* @__PURE__ */ new Error(`[login] device_link_required: local threshold ECDSA material is unavailable for ${targetKey}`);
3664
- error.code = "device_link_required";
3665
- return error;
3666
- }
3667
- function createThresholdEd25519DeviceLinkRequiredError() {
3668
- const error = /* @__PURE__ */ new Error("[login] device_link_required: local threshold Ed25519 material is unavailable");
3669
- error.code = "device_link_required";
3670
- return error;
3671
- }
3672
- function resolveThresholdLoginWarmEcdsaThresholdSessionId(input) {
3673
- const current = String(input.sharedState.generatedThresholdSessionId || "").trim();
3674
- if (current) return current;
3675
- const generated = createThresholdLoginWarmSessionId("threshold-ecdsa-login");
3676
- input.sharedState.generatedThresholdSessionId = generated;
3677
- return generated;
3678
- }
3679
- async function resolveWalletEcdsaKeyFactsInventoryWithWebAuthn(args) {
3680
- if (!args.collectCredential) throw new Error("[login] WebAuthn ECDSA key-facts inventory requires a credential collector");
3681
- const serverNonceB64u = createLocalUnlockChallengeB64u();
3682
- const expectedChallengeDigestB64u = await computeWalletEcdsaKeyFactsInventoryChallengeDigestB64u({
3683
- walletId: args.walletId,
3684
- rpId: args.rpId,
3685
- keyTargets: args.keyTargets,
3686
- serverNonceB64u,
3687
- ...args.runtimePolicyScope ? { runtimePolicyScope: args.runtimePolicyScope } : {}
3688
- });
3689
- const credential = await args.collectCredential(expectedChallengeDigestB64u);
3690
- return await fetchWalletEcdsaKeyFactsInventoryWithWebAuthn({
3691
- relayerUrl: args.relayerUrl,
3692
- walletId: args.walletId,
3693
- rpId: args.rpId,
3694
- credential,
3695
- keyTargets: args.keyTargets,
3696
- serverNonceB64u,
3697
- expectedChallengeDigestB64u,
3698
- ...args.runtimePolicyScope ? { runtimePolicyScope: args.runtimePolicyScope } : {}
3699
- });
3700
- }
3701
- async function resolveWalletEcdsaKeyFactsInventoryForLogin(args) {
3702
- const relayerUrl = String(args.relayerUrl || "").trim();
3703
- const rpId = String(args.rpId || "").trim();
3704
- if (!relayerUrl || !rpId) throw new Error("[login] threshold ECDSA key-facts inventory requires relayerUrl and rpId");
3705
- if (args.authority?.kind === "wallet_session_operation_credential_v1") return await fetchWalletEcdsaKeyFactsInventoryWithOperationCredential({
3706
- relayerUrl,
3707
- walletId: args.walletId,
3708
- rpId,
3709
- operationCredential: args.authority.operationCredential,
3710
- keyTargets: args.keyTargets
3711
- });
3712
- return await resolveWalletEcdsaKeyFactsInventoryWithWebAuthn({
3713
- walletId: args.walletId,
3714
- relayerUrl,
3715
- rpId,
3716
- keyTargets: args.keyTargets,
3717
- ...args.runtimePolicyScope ? { runtimePolicyScope: args.runtimePolicyScope } : {},
3718
- collectCredential: args.collectWebAuthnInventoryCredential
3719
- });
3720
- }
3721
- function authenticatedInventorySignerMatch(args) {
3722
- const parsed = parseActiveEcdsaSignerRecordForUnlock({
3723
- walletId: args.walletId,
3724
- configuredTargets: args.configuredTargets,
3725
- signer: args.signer
3726
- });
3727
- switch (parsed.kind) {
3728
- case "active_ecdsa_signer_record": return parsed.targetKey === thresholdEcdsaChainTargetKey(args.record.walletKey.chainTarget) && String(parsed.walletKey.keyHandle) === String(args.record.walletKey.keyHandle);
3729
- case "key_facts_inventory_required": return parsed.targetKey === thresholdEcdsaChainTargetKey(args.record.walletKey.chainTarget) && parsed.keyHandle === String(args.record.walletKey.keyHandle);
3730
- case "blocked":
3731
- case "skipped": return false;
3732
- }
3733
- return false;
3734
- }
3735
- function repairedEcdsaSignerMetadata(args) {
3736
- const walletKey = args.record.walletKey;
3737
- const keyFacts = walletKey.keyFacts;
3738
- const targetKey = thresholdEcdsaChainTargetKey(walletKey.chainTarget);
3739
- return {
3740
- ...args.signer.metadata || {},
3741
- accountModel: "threshold-ecdsa",
3742
- accountAddress: args.record.accountAddress,
3743
- ownerAddress: args.record.ownerAddress,
3744
- thresholdOwnerAddress: keyFacts.thresholdOwnerAddress,
3745
- keyScope: keyFacts.keyScope,
3746
- keyHandle: walletKey.keyHandle,
3747
- walletId: walletKey.walletId,
3748
- ecdsaThresholdKeyId: keyFacts.ecdsaThresholdKeyId,
3749
- signingRootId: keyFacts.signingRootId,
3750
- signingRootVersion: keyFacts.signingRootVersion,
3751
- publicCapability: args.record.publicCapability,
3752
- thresholdEcdsaPublicKeyB64u: keyFacts.thresholdEcdsaPublicKeyB64u,
3753
- participantIds: [...keyFacts.participantIds],
3754
- chainTarget: walletKey.chainTarget,
3755
- targetMembership: {
3756
- targetKey,
3757
- chainTarget: walletKey.chainTarget
3758
- },
3759
- sharedEvmFamilyKey: {
3760
- walletId: walletKey.walletId,
3761
- keyScope: keyFacts.keyScope,
3762
- keyHandle: walletKey.keyHandle,
3763
- ecdsaThresholdKeyId: keyFacts.ecdsaThresholdKeyId,
3764
- signingRootId: keyFacts.signingRootId,
3765
- signingRootVersion: keyFacts.signingRootVersion,
3766
- participantIds: [...keyFacts.participantIds],
3767
- thresholdOwnerAddress: keyFacts.thresholdOwnerAddress,
3768
- thresholdEcdsaPublicKeyB64u: keyFacts.thresholdEcdsaPublicKeyB64u
3769
- },
3770
- chainId: walletKey.chainTarget.chainId
3771
- };
3772
- }
3773
- async function persistAuthenticatedEcdsaInventoryProfileRepairs(args) {
3774
- for (const record of args.records) {
3775
- const matchingSigners = args.walletSigners.filter((signer) => authenticatedInventorySignerMatch({
3776
- walletId: args.walletId,
3777
- configuredTargets: args.configuredTargets,
3778
- signer,
3779
- record
3780
- }));
3781
- if (matchingSigners.length !== 1) throw new Error(`[login] authenticated ECDSA key inventory could not identify one profile signer for ${thresholdEcdsaChainTargetKey(record.walletKey.chainTarget)}`);
3782
- const signer = matchingSigners[0];
3783
- if (String(record.walletKey.walletId) !== String(args.walletId) || record.accountAddress !== signer.accountAddress || record.ownerAddress !== signer.accountAddress || String(record.walletKey.keyFacts.thresholdOwnerAddress) !== signer.accountAddress) throw new Error(`[login] authenticated ECDSA key inventory profile identity mismatch for ${thresholdEcdsaChainTargetKey(record.walletKey.chainTarget)}`);
3784
- await args.store.activateAccountSigner({
3785
- account: {
3786
- profileId: signer.profileId,
3787
- chainIdKey: signer.chainIdKey,
3788
- accountAddress: signer.accountAddress,
3789
- accountModel: "threshold-ecdsa"
3790
- },
3791
- signer: {
3792
- signerId: signer.signerId,
3793
- signerType: signer.signerType,
3794
- signerKind: signer.signerKind,
3795
- signerAuthMethod: signer.signerAuthMethod,
3796
- signerSource: signer.signerSource,
3797
- metadata: repairedEcdsaSignerMetadata({
3798
- signer,
3799
- record
3800
- })
3801
- },
3802
- activationPolicy: { mode: "allocate_next_free" },
3803
- preferredSlot: signer.signerSlot,
3804
- selectAsActive: false,
3805
- mutation: { routeThroughOutbox: false }
3806
- });
3807
- }
3808
- }
3809
- function buildCanonicalThresholdEcdsaWarmSessionContext(ecdsaKeys, runtimePolicyScope) {
3810
- if (runtimePolicyScope) return {
3811
- ecdsaKeys,
3812
- runtimePolicyScope
3813
- };
3814
- return { ecdsaKeys };
3815
- }
3816
- function buildProfileContinuityEcdsaInventoryInput(args) {
3817
- const keyFactsInventoryAuthority = args.input?.keyFactsInventoryAuthority || null;
3818
- const keyFactsInventoryRequested = args.input?.keyFactsInventoryRequested === true;
3819
- const relayerUrl = args.input?.relayerUrl || "";
3820
- const rpId = args.input?.rpId || "";
3821
- const collectWebAuthnInventoryCredential = args.input?.collectWebAuthnInventoryCredential;
3822
- if (args.runtimePolicyScope) return {
3823
- kind: "runtime_policy_scoped",
3824
- keyFactsInventoryAuthority,
3825
- keyFactsInventoryRequested,
3826
- relayerUrl,
3827
- rpId,
3828
- runtimePolicyScope: args.runtimePolicyScope,
3829
- collectWebAuthnInventoryCredential
3830
- };
3831
- return {
3832
- kind: "runtime_policy_unscoped",
3833
- keyFactsInventoryAuthority,
3834
- keyFactsInventoryRequested,
3835
- relayerUrl,
3836
- rpId,
3837
- collectWebAuthnInventoryCredential
3838
- };
3839
- }
3840
- async function resolveProfileContinuityEcdsaWarmKeys(walletId, configuredTargets, keyFactsInventoryInput) {
3841
- const configuredChainTargets = configuredTargets.map((target) => target.chainTarget);
3842
- const walletSigners = await IndexedDBManager.listAccountSignersByProfile({
3843
- profileId: String(walletId),
3844
- status: "active"
3845
- }).catch(() => []);
3846
- const activeSignerRecords = [];
3847
- const keyFactsInventoryRequiredRecords = [];
3848
- const blockedRecords = [];
3849
- for (const signer of walletSigners) {
3850
- const parsed = parseActiveEcdsaSignerRecordForUnlock({
3851
- walletId,
3852
- configuredTargets: configuredChainTargets,
3853
- signer
3854
- });
3855
- switch (parsed.kind) {
3856
- case "active_ecdsa_signer_record":
3857
- activeSignerRecords.push(parsed);
3858
- break;
3859
- case "key_facts_inventory_required":
3860
- keyFactsInventoryRequiredRecords.push(parsed);
3861
- break;
3862
- case "blocked":
3863
- blockedRecords.push(parsed);
3864
- break;
3865
- case "skipped": break;
3866
- default:
3867
- }
3868
- }
3869
- if (!activeSignerRecords.length && !keyFactsInventoryRequiredRecords.length && !blockedRecords.length) return [];
3870
- const plan = planUnlockEcdsaWarmup({
3871
- selection: {
3872
- mode: "ecdsa_only",
3873
- ecdsa: true
3874
- },
3875
- configuredTargets: configuredChainTargets,
3876
- activeSignerRecords,
3877
- keyFactsInventoryRequiredRecords,
3878
- blockedRecords,
3879
- runtimeConfig: {
3880
- explicitKeyFactsInventoryMode: keyFactsInventoryInput?.keyFactsInventoryRequested === true,
3881
- allowAuthenticatedKeyFactsInventory: Boolean(keyFactsInventoryInput?.keyFactsInventoryAuthority)
3882
- }
3883
- });
3884
- switch (plan.kind) {
3885
- case "ready": {
3886
- const missingCapabilityTargets = plan.readyTargets.filter((target) => target.publicCapability.kind === "missing_public_capability");
3887
- const repairedCapabilities = /* @__PURE__ */ new Map();
3888
- let repairedInventoryRecords = [];
3889
- if (missingCapabilityTargets.length) {
3890
- const inventory = await resolveWalletEcdsaKeyFactsInventoryForLogin({
3891
- walletId,
3892
- relayerUrl: keyFactsInventoryInput?.relayerUrl || "",
3893
- rpId: keyFactsInventoryInput?.rpId || "",
3894
- keyTargets: missingCapabilityTargets.map((target) => ({
3895
- keyHandle: target.walletKey.keyHandle,
3896
- chainTarget: target.chainTarget
3897
- })),
3898
- authority: keyFactsInventoryInput?.keyFactsInventoryAuthority || null,
3899
- ...keyFactsInventoryInput?.runtimePolicyScope ? { runtimePolicyScope: keyFactsInventoryInput.runtimePolicyScope } : {},
3900
- collectWebAuthnInventoryCredential: keyFactsInventoryInput?.collectWebAuthnInventoryCredential
3901
- });
3902
- repairedInventoryRecords = inventory.records;
3903
- for (const record of inventory.records) repairedCapabilities.set(thresholdEcdsaChainTargetKey(record.walletKey.chainTarget), record.publicCapability);
3904
- }
3905
- const canonicalKeys = collectConfiguredTargetThresholdEcdsaWarmKeys({
3906
- source: "profile continuity",
3907
- keys: plan.readyTargets.map((target) => configuredTargetThresholdEcdsaWarmKey({
3908
- chainTarget: target.chainTarget,
3909
- keyHandle: target.walletKey.keyHandle,
3910
- key: evmFamilyEcdsaWalletKeyToIdentity(target.walletKey),
3911
- publicCapability: target.publicCapability.kind === "persisted_public_capability" ? target.publicCapability.value : repairedCapabilities.get(target.targetKey)
3912
- }))
3913
- });
3914
- const unresolvedCapabilities = canonicalKeys.filter((key) => key.publicCapability.kind === "missing_public_capability").map((key) => key.targetKey);
3915
- if (unresolvedCapabilities.length) throw new Error(`[login] authenticated ECDSA key inventory did not return public capabilities for ${unresolvedCapabilities.join(", ")}`);
3916
- await persistAuthenticatedEcdsaInventoryProfileRepairs({
3917
- store: IndexedDBManager,
3918
- walletId,
3919
- configuredTargets: configuredChainTargets,
3920
- walletSigners,
3921
- records: repairedInventoryRecords
3922
- });
3923
- return canonicalKeys;
3924
- }
3925
- case "no_configured_ecdsa_targets": return [];
3926
- case "awaiting_authenticated_key_facts_inventory": {
3927
- const keyFactsInventoryAuthority = keyFactsInventoryInput?.keyFactsInventoryAuthority;
3928
- if (!keyFactsInventoryAuthority) throw new Error("[login] threshold ECDSA key-facts inventory requires authenticated inventory authority");
3929
- const inventory = await resolveWalletEcdsaKeyFactsInventoryForLogin({
3930
- walletId,
3931
- relayerUrl: keyFactsInventoryInput.relayerUrl,
3932
- rpId: keyFactsInventoryInput.rpId,
3933
- keyTargets: plan.keyTargets,
3934
- authority: keyFactsInventoryAuthority,
3935
- ...keyFactsInventoryInput.runtimePolicyScope ? { runtimePolicyScope: keyFactsInventoryInput.runtimePolicyScope } : {},
3936
- collectWebAuthnInventoryCredential: keyFactsInventoryInput.collectWebAuthnInventoryCredential
3937
- });
3938
- const inventoriedCompletion = buildConfiguredTargetKeyCompletion({
3939
- context: { ecdsaKeys: collectConfiguredTargetThresholdEcdsaWarmKeys({
3940
- source: "profile continuity inventory",
3941
- keys: inventory.records.map((record) => configuredTargetThresholdEcdsaWarmKey({
3942
- chainTarget: record.walletKey.chainTarget,
3943
- keyHandle: record.walletKey.keyHandle,
3944
- key: evmFamilyEcdsaWalletKeyToIdentity(record.walletKey),
3945
- publicCapability: record.publicCapability
3946
- }))
3947
- }) },
3948
- configuredTargets
3949
- });
3950
- if (inventoriedCompletion.kind !== "complete_configured_target_keys") throw new Error("[login] threshold ECDSA key-facts inventory returned incomplete key facts");
3951
- await persistAuthenticatedEcdsaInventoryProfileRepairs({
3952
- store: IndexedDBManager,
3953
- walletId,
3954
- configuredTargets: configuredChainTargets,
3955
- walletSigners,
3956
- records: inventory.records
3957
- });
3958
- return inventoriedCompletion.context.ecdsaKeys;
3959
- }
3960
- case "key_facts_inventory_required": {
3961
- const targets = plan.keyFactsInventoryRequiredRecords.map((record) => record.targetKey).join(", ");
3962
- if (keyFactsInventoryInput?.keyFactsInventoryRequested) throw new Error(`[login] threshold ECDSA key-facts inventory requires authenticated inventory authority for ${targets}`);
3963
- throw new Error(`[login] threshold ECDSA warm-up requires complete local key facts for ${targets}; run explicit authenticated ECDSA key-facts inventory before unlock`);
3964
- }
3965
- case "blocked": {
3966
- const reasons = plan.blockedRecords.map((record) => `${record.targetKey || "unknown"}:${record.reason}`).join(", ");
3967
- throw new Error(`[login] threshold ECDSA warm-up requires complete local key facts before unlock; run explicit authenticated ECDSA key-facts inventory before unlock; blocked profile signer records: ${reasons}`);
3968
- }
3969
- }
3970
- return [];
3971
- }
3972
- async function resolveCanonicalThresholdEcdsaWarmSessionContext(context, walletId, keyFactsInventoryInput, authMethod) {
3973
- const configuredTargets = listConfiguredThresholdEcdsaPublicationTargets(context.configs.network.chains);
3974
- const storedKeys = [];
3975
- let runtimePolicyScope;
3976
- let canonicalContext = buildCanonicalThresholdEcdsaWarmSessionContext(collectConfiguredTargetThresholdEcdsaWarmKeys({
3977
- source: "stored",
3978
- keys: storedKeys
3979
- }), runtimePolicyScope);
3980
- const capabilities = await listBrowserCanonicalEcdsaSigningCapabilitiesForWallet({
3981
- walletId,
3982
- chainTargets: configuredTargets.map((target) => target.chainTarget),
3983
- ...authMethod ? { authMethod } : {}
3984
- });
3985
- const availableLaneKeys = [];
3986
- let availableLaneRuntimePolicyScope;
3987
- for (const capability of capabilities) {
3988
- const manifest = capability.manifest;
3989
- for (const { chainTarget: target } of configuredTargets) {
3990
- if (!manifest.signer.scope.targetMemberships.some((membership) => thresholdEcdsaChainTargetKey(membership) === thresholdEcdsaChainTargetKey(target))) continue;
3991
- const publicFacts = manifest.durableMaterial.roleLocalPublicFacts;
3992
- const keyHandle = String(publicFacts.keyHandle);
3993
- const publicCapability = publicFacts.publicCapability;
3994
- const existingRoleLocalMaterial = capability.material;
3995
- const laneRuntimePolicyScope = manifest.durableMaterial.runtimePolicyScope;
3996
- const signingRootBinding = resolveThresholdSigningRootBindingFromRuntimePolicyScope({ runtimePolicyScope: laneRuntimePolicyScope });
3997
- if (String(signingRootBinding.signingRootId) !== String(manifest.signer.signingRootId) || String(signingRootBinding.signingRootVersion) !== String(manifest.signer.signingRootVersion)) throw new Error(`[login] threshold ECDSA canonical runtime policy scope mismatch for ${thresholdEcdsaChainTargetKey(target)}`);
3998
- if (availableLaneRuntimePolicyScope && laneRuntimePolicyScope && !sameThresholdRuntimePolicyScope(availableLaneRuntimePolicyScope, laneRuntimePolicyScope)) throw new Error("[login] threshold ECDSA durable lanes have conflicting runtime policy scopes");
3999
- if (!availableLaneRuntimePolicyScope && laneRuntimePolicyScope) availableLaneRuntimePolicyScope = laneRuntimePolicyScope;
4000
- availableLaneKeys.push(configuredTargetThresholdEcdsaWarmKey({
4001
- chainTarget: target,
4002
- keyHandle,
4003
- key: buildBaseEvmFamilyEcdsaKeyIdentity({
4004
- walletId: manifest.signer.walletId,
4005
- ecdsaThresholdKeyId: manifest.durableMaterial.roleLocalBinding.ecdsaThresholdKeyId,
4006
- signingRootId: manifest.signer.signingRootId,
4007
- signingRootVersion: manifest.signer.signingRootVersion,
4008
- participantIds: manifest.signer.registeredPublicFacts.participantIds,
4009
- thresholdOwnerAddress: manifest.signer.registeredPublicFacts.thresholdOwnerAddress
4010
- }),
4011
- publicCapability,
4012
- existingRoleLocalMaterial
4013
- }));
4014
- }
4015
- }
4016
- const exactAvailableLaneKeys = collectConfiguredTargetThresholdEcdsaWarmKeys({
4017
- source: "available lane",
4018
- keys: availableLaneKeys
4019
- });
4020
- canonicalContext = mergeThresholdEcdsaWarmSessionContexts({
4021
- current: canonicalContext,
4022
- incoming: buildCanonicalThresholdEcdsaWarmSessionContext(exactAvailableLaneKeys, availableLaneRuntimePolicyScope),
4023
- source: "durable lanes"
4024
- });
4025
- const configuredTargetCompletion = buildConfiguredTargetKeyCompletion({
4026
- context: canonicalContext,
4027
- configuredTargets
4028
- });
4029
- if (configuredTargetCompletion.kind === "complete_configured_target_keys") return configuredTargetCompletion.context;
4030
- const missingTargets = new Set(configuredTargetCompletion.missingTargets);
4031
- const profileEcdsaThresholdKeys = await resolveProfileContinuityEcdsaWarmKeys(walletId, configuredTargets.filter((target) => missingTargets.has(thresholdEcdsaChainTargetKey(target.chainTarget))), buildProfileContinuityEcdsaInventoryInput({
4032
- input: keyFactsInventoryInput,
4033
- runtimePolicyScope: canonicalContext.runtimePolicyScope
4034
- }));
4035
- canonicalContext = mergeThresholdEcdsaWarmSessionContexts({
4036
- current: canonicalContext,
4037
- incoming: { ecdsaKeys: profileEcdsaThresholdKeys },
4038
- source: "profile continuity"
4039
- });
4040
- return canonicalContext;
4041
- }
4042
- async function resolveProfileContinuityThresholdEcdsaPublicKeyB64u(context, walletId) {
4043
- const publicKeys = [...new Set((await readProfileContinuityThresholdEcdsaWalletKeys(context, walletId)).map((walletKey) => String(walletKey.keyFacts.thresholdEcdsaPublicKeyB64u || "").trim()).filter(Boolean))];
4044
- if (publicKeys.length === 1) return publicKeys[0];
4045
- if (publicKeys.length > 1) console.warn("[WalletSession] conflicting profile threshold ECDSA public keys", {
4046
- walletId: String(walletId),
4047
- publicKeyCount: publicKeys.length
4048
- });
4049
- return null;
4050
- }
4051
- async function resolveThresholdEcdsaLoginMetadata(context, walletId) {
4052
- const [profileAddress, profilePublicKey] = await Promise.all([resolveProfileContinuityThresholdEcdsaEthereumAddress(context, walletId), resolveProfileContinuityThresholdEcdsaPublicKeyB64u(context, walletId)]);
4053
- if (profileAddress && profilePublicKey) return {
4054
- ethereumAddress: profileAddress,
4055
- thresholdEcdsaPublicKeyB64u: profilePublicKey
4056
- };
4057
- const capabilities = await listBrowserCanonicalEcdsaSigningCapabilitiesForWallet({
4058
- walletId,
4059
- chainTargets: listConfiguredThresholdEcdsaPublicationTargets(context.configs.network.chains).map((target) => target.chainTarget)
4060
- });
4061
- const addresses = /* @__PURE__ */ new Set();
4062
- const publicKeys = /* @__PURE__ */ new Set();
4063
- for (const capability of capabilities) {
4064
- const facts = capability.manifest.signer.registeredPublicFacts;
4065
- addresses.add(normalizeEvmOwnerAddress(facts.thresholdOwnerAddress));
4066
- publicKeys.add(facts.publicKeyB64u);
4067
- }
4068
- return {
4069
- ethereumAddress: profileAddress ?? (addresses.size === 1 ? [...addresses][0] : null),
4070
- thresholdEcdsaPublicKeyB64u: profilePublicKey ?? (publicKeys.size === 1 ? [...publicKeys][0] : null)
4071
- };
4072
- }
4073
- function failedCapabilityLane(reason) {
4074
- return {
4075
- kind: "failed",
4076
- reason
4077
- };
4078
- }
4079
- function persistenceUnavailableCapabilityLane() {
4080
- return {
4081
- kind: "failed",
4082
- reason: "persistence_unavailable"
4083
- };
4084
- }
4085
- function parseExactAvailableLaneReadiness(lane) {
4086
- switch (lane.state) {
4087
- case "ready": return { kind: "ready" };
4088
- case "restorable": return {
4089
- kind: "pending",
4090
- resume: "restore_material"
4091
- };
4092
- case "deferred": return {
4093
- kind: "pending",
4094
- resume: "resolve_deferred_state"
4095
- };
4096
- case "expired": return {
4097
- kind: "authorization_required",
4098
- requirement: "wallet_session_expired"
4099
- };
4100
- case "exhausted": return {
4101
- kind: "authorization_required",
4102
- requirement: "wallet_session_exhausted"
4103
- };
4104
- }
4105
- throw new Error("[SeamsWeb] unsupported capability lane readiness");
4106
- }
4107
- function invalidLaneReasonForCurve(snapshot, curve) {
4108
- const diagnostic = snapshot.diagnostics?.invalidLanes.find((candidate) => candidate.curve === curve);
4109
- if (!diagnostic) return null;
4110
- return diagnostic.reason === "ambiguous_material" || diagnostic.reason === "conflicting_key_material" ? "ambiguous_lane" : "malformed";
4111
- }
4112
- function invalidEcdsaLaneReasonForTarget(snapshot, chainTarget) {
4113
- const targetKey = thresholdEcdsaChainTargetKey(chainTarget);
4114
- const diagnostic = snapshot.diagnostics?.invalidLanes.find((candidate) => candidate.curve === "ecdsa" && (candidate.targetKey === void 0 || candidate.targetKey === targetKey));
4115
- if (!diagnostic) return null;
4116
- return diagnostic.reason === "ambiguous_material" || diagnostic.reason === "conflicting_key_material" ? "ambiguous_lane" : "malformed";
4117
- }
4118
- function nearSubjectMatchesLane(subject, lane) {
4119
- return String(lane.walletId) === String(subject.walletId) && String(lane.nearAccountId) === String(subject.nearAccountId) && String(lane.nearEd25519SigningKeyId) === String(subject.nearEd25519SigningKeyId) && lane.signerSlot === subject.signerSlot;
4120
- }
4121
- function ecdsaSubjectMatchesLane(subject, lane) {
4122
- return String(lane.key.walletId) === String(subject.walletId) && String(lane.key.ecdsaThresholdKeyId) === String(subject.ecdsaThresholdKeyId);
4123
- }
4124
- function nearCapabilityReadiness(args) {
4125
- if (args.availableLanes.kind === "unavailable") return {
4126
- kind: "near_ed25519",
4127
- subject: args.subject,
4128
- lane: persistenceUnavailableCapabilityLane()
4129
- };
4130
- const snapshot = args.availableLanes.lanes;
4131
- if (String(snapshot.walletId) !== String(args.subject.walletId)) return {
4132
- kind: "near_ed25519",
4133
- subject: args.subject,
4134
- lane: failedCapabilityLane("identity_mismatch")
4135
- };
4136
- const invalidReason = invalidLaneReasonForCurve(snapshot, "ed25519");
4137
- if (invalidReason) return {
4138
- kind: "near_ed25519",
4139
- subject: args.subject,
4140
- lane: failedCapabilityLane(invalidReason)
4141
- };
4142
- const lane = snapshot.lanes.ed25519.near;
4143
- if (!isConcreteAvailableSigningLane(lane)) return {
4144
- kind: "near_ed25519",
4145
- subject: args.subject,
4146
- lane: failedCapabilityLane("missing")
4147
- };
4148
- return {
4149
- kind: "near_ed25519",
4150
- subject: args.subject,
4151
- lane: nearSubjectMatchesLane(args.subject, lane) ? parseExactAvailableLaneReadiness(lane) : failedCapabilityLane("identity_mismatch")
4152
- };
4153
- }
4154
- function ecdsaCapabilityLaneReadinessForTarget(args) {
4155
- if (args.availableLanes.kind === "unavailable") return persistenceUnavailableCapabilityLane();
4156
- const snapshot = args.availableLanes.lanes;
4157
- if (String(snapshot.walletId) !== String(args.subject.walletId)) return failedCapabilityLane("identity_mismatch");
4158
- const invalidReason = invalidEcdsaLaneReasonForTarget(snapshot, args.chainTarget);
4159
- if (invalidReason) return failedCapabilityLane(invalidReason);
4160
- const lane = ecdsaAvailableLaneForTarget(snapshot, args.chainTarget);
4161
- if (!isConcreteAvailableSigningLane(lane)) return failedCapabilityLane("missing");
4162
- if (!ecdsaSubjectMatchesLane(args.subject, lane)) return failedCapabilityLane("identity_mismatch");
4163
- if (lane.source === "canonical_capability" && !lane.authorization) return {
4164
- kind: "authorization_required",
4165
- requirement: "same_method_step_up"
4166
- };
4167
- return parseExactAvailableLaneReadiness(lane);
4168
- }
4169
- function ecdsaCapabilityReadiness(args) {
4170
- const [firstTarget, ...remainingTargets] = args.configuredTargets;
4171
- if (!firstTarget) return {
4172
- kind: "evm_family_ecdsa",
4173
- subject: args.subject,
4174
- targets: { kind: "no_configured_target" }
4175
- };
4176
- return {
4177
- kind: "evm_family_ecdsa",
4178
- subject: args.subject,
4179
- targets: {
4180
- kind: "configured_targets",
4181
- lanes: [{
4182
- chainTarget: firstTarget,
4183
- readiness: ecdsaCapabilityLaneReadinessForTarget({
4184
- subject: args.subject,
4185
- availableLanes: args.availableLanes,
4186
- chainTarget: firstTarget
4187
- })
4188
- }, ...remainingTargets.map((chainTarget) => ({
4189
- chainTarget,
4190
- readiness: ecdsaCapabilityLaneReadinessForTarget({
4191
- subject: args.subject,
4192
- availableLanes: args.availableLanes,
4193
- chainTarget
4194
- })
4195
- }))]
4196
- }
4197
- };
4198
- }
4199
- function buildWalletSessionCapabilityProjection(args) {
4200
- const capabilities = args.subjectSet.subjects.map((subject) => {
4201
- switch (subject.kind) {
4202
- case "near_ed25519_wallet": return nearCapabilityReadiness({
4203
- subject,
4204
- availableLanes: args.availableLanes
4205
- });
4206
- case "evm_family_ecdsa_wallet": return ecdsaCapabilityReadiness({
4207
- subject,
4208
- availableLanes: args.availableLanes,
4209
- configuredTargets: args.configuredEcdsaTargets
4210
- });
4211
- }
4212
- return assertNeverLoginState(subject);
4213
- });
4214
- const firstCapability = capabilities[0];
4215
- if (!firstCapability) throw new Error("[WalletSession] resolved capability subjects must be non-empty");
4216
- return {
4217
- kind: "resolved",
4218
- subjectSet: args.subjectSet,
4219
- capabilities: [firstCapability, ...capabilities.slice(1)]
4220
- };
4221
- }
4222
- function selectNearOperationalPublicKeyForLogin(userData) {
4223
- return userData ? userData.operationalPublicKey : null;
4224
- }
4225
- function userMatchesNearWalletSubject(user, subject) {
4226
- return Boolean(user && String(user.walletId) === String(subject.walletId) && String(user.nearAccountId) === String(subject.nearAccountId) && user.signerSlot === subject.signerSlot);
4227
- }
4228
- async function resolveExactNearWalletUser(signingEngine, subject) {
4229
- const lastUser = await signingEngine.getLastUser().catch(() => null);
4230
- if (userMatchesNearWalletSubject(lastUser, subject)) return lastUser;
4231
- const projected = await getNearAccountProjection(IndexedDBManager, subject.nearAccountId, subject.signerSlot).catch(() => null);
4232
- if (userMatchesNearWalletSubject(projected, subject)) return projected;
4233
- const stored = await signingEngine.getUserBySignerSlot(subject.nearAccountId, subject.signerSlot).catch(() => null);
4234
- return userMatchesNearWalletSubject(stored, subject) ? stored : null;
4235
- }
4236
- function nearWalletSubjectsEqual(left, right) {
4237
- return left.walletId === right.walletId && left.nearAccountId === right.nearAccountId && left.nearEd25519SigningKeyId === right.nearEd25519SigningKeyId && left.signerSlot === right.signerSlot;
4238
- }
4239
- async function resolveLinkedNearOperationalPublicKey(subject) {
4240
- const parsedWalletId = parseWalletId(String(subject.walletId));
4241
- if (!parsedWalletId.ok) return null;
4242
- const walletId = parsedWalletId.value;
4243
- let resolved;
4244
- try {
4245
- resolved = await IndexedDBManager.resolveSelectedWalletAuthority(String(walletId));
4246
- } catch {
4247
- return null;
4248
- }
4249
- if (resolved.kind !== "resolved") return null;
4250
- const { selection, authMethod, authority } = resolved;
4251
- if (linkedDeviceUnlockIdentityMismatchLabels({
4252
- walletId,
4253
- selection,
4254
- authMethod,
4255
- authority
4256
- }).length > 0 || authMethod.status !== "active" || authority.state !== "active" || authority.provenance.kind !== "device_link") return null;
4257
- const resolvedSubject = await resolveLinkedDeviceNearUnlockSubject({
4258
- walletId,
4259
- authMethod,
4260
- authority,
4261
- signerMaterials: resolved.signerMaterials
4262
- });
4263
- if (resolvedSubject.kind !== "resolved" || !nearWalletSubjectsEqual(resolvedSubject.subject, subject)) return null;
4264
- const activation = authority.signerActivations.ed25519;
4265
- if (!activation) return null;
4266
- return `ed25519:${base58Encode(base64UrlDecode(activation.signer.registeredPublicKeyB64u))}`;
4267
- }
4268
- async function resolveWalletSessionAppIdentityForWallet(context, walletId) {
4269
- const [authMethods, thresholdMetadata] = await Promise.all([readWalletAuthMethodBindingsForSession(walletId), resolveThresholdEcdsaLoginMetadata(context, walletId).catch(() => ({
4270
- ethereumAddress: null,
4271
- thresholdEcdsaPublicKeyB64u: null
4272
- }))]);
4273
- return {
4274
- kind: "resolved",
4275
- walletId,
4276
- nearAccountId: null,
4277
- nearOperationalPublicKey: null,
4278
- userData: null,
4279
- authMethods,
4280
- thresholdEcdsaEthereumAddress: thresholdMetadata.ethereumAddress,
4281
- thresholdEcdsaPublicKeyB64u: thresholdMetadata.thresholdEcdsaPublicKeyB64u
4282
- };
4283
- }
4284
- async function resolveWalletSessionAppIdentity(context, readResolution) {
4285
- const resolvedWalletId = readResolution.walletId;
4286
- const nearSubject = selectNearEd25519WalletSubject(readResolution.subjectSet);
4287
- const resolvedNearAccountId = nearSubject?.nearAccountId || null;
4288
- const [userData, base] = await Promise.all([nearSubject ? resolveExactNearWalletUser(context.signingEngine, nearSubject) : null, resolveWalletSessionAppIdentityForWallet(context, resolvedWalletId)]);
4289
- const nearOperationalPublicKey = selectNearOperationalPublicKeyForLogin(userData) || (nearSubject ? await resolveLinkedNearOperationalPublicKey(nearSubject) : null);
4290
- return {
4291
- ...base,
4292
- nearAccountId: resolvedNearAccountId,
4293
- nearOperationalPublicKey,
4294
- userData
4295
- };
4296
- }
4297
- /**
4298
- * List recently used accounts from IndexedDB.
4299
- *
4300
- * Used for account picker UIs and initial app bootstrap state.
4301
- */
4302
- async function getRecentUnlocks(context) {
4303
- const [allUsersData, selections, lastUsedUser] = await Promise.all([
4304
- context.signingEngine.getAllUsers(),
4305
- IndexedDBManager.listWalletSelections(),
4306
- context.signingEngine.getLastUser()
4307
- ]);
4308
- const linkedAccounts = (await Promise.all(selections.map(recentUnlockAccountFromLinkedDeviceSelection))).filter((account) => account !== null);
4309
- const accountsByWalletAuthMethod = /* @__PURE__ */ new Map();
4310
- for (const user of allUsersData) {
4311
- const account = recentUnlockAccountFromUser(user);
4312
- accountsByWalletAuthMethod.set(recentUnlockAccountKey(account), account);
4313
- }
4314
- for (const account of linkedAccounts) accountsByWalletAuthMethod.set(recentUnlockAccountKey(account), account);
4315
- const accounts = [...accountsByWalletAuthMethod.values()];
4316
- const walletIds = [...new Set([...accounts.map((account) => account.walletId), ...selections.map((selection) => String(selection.walletId))])];
4317
- const accountIds = [...new Set(accounts.map((account) => account.nearAccountId))];
4318
- const legacyLastUsedAccount = lastUsedUser ? recentUnlockAccountFromUser(lastUsedUser) : null;
4319
- return {
4320
- walletIds,
4321
- accountIds,
4322
- accounts,
4323
- lastUsedAccount: latestRecentUnlockAccount([...linkedAccounts, ...legacyLastUsedAccount ? [legacyLastUsedAccount] : []])
4324
- };
4325
- }
4326
- async function lock(context) {
4327
- const { signingEngine } = context;
4328
- const authentication = signingEngine.readWalletAuthenticationState();
4329
- let failure;
4330
- let failed = false;
4331
- let authenticationCleared = false;
4332
- if (authentication.kind === "authenticated") {
4333
- try {
4334
- await signingEngine.advanceWalletLockGeneration(authentication.walletId);
4335
- } catch (error) {
4336
- failure = error;
4337
- failed = true;
4338
- }
4339
- try {
4340
- await signingEngine.retireActiveWalletSessionAuthorizationForLock(authentication.walletId);
4341
- } catch (error) {
4342
- if (!failed) {
4343
- failure = error;
4344
- failed = true;
4345
- }
4346
- }
4347
- }
4348
- try {
4349
- authenticationCleared = signingEngine.clearWalletAuthenticationIfCurrent(authentication);
4350
- } catch (error) {
4351
- if (!failed) {
4352
- failure = error;
4353
- failed = true;
4354
- }
4355
- }
4356
- if (authenticationCleared) {
4357
- try {
4358
- signingEngine.getNonceCoordinator().clearAll();
4359
- } catch {}
4360
- try {
4361
- signingEngine.clearThresholdEcdsaSigningQueue();
4362
- } catch {}
4363
- }
4364
- try {
4365
- await signingEngine.clearVolatileWarmSigningMaterial(authentication.kind === "authenticated" ? authentication.walletId : void 0);
4366
- } catch (error) {
4367
- if (!failed) {
4368
- failure = error;
4369
- failed = true;
4370
- }
4371
- }
4372
- if (failed) throw failure;
4373
- }
4374
- async function logout(context) {
4375
- const authentication = context.signingEngine.readWalletAuthenticationState();
4376
- const cleanupTarget = authentication.kind === "authenticated" ? {
4377
- kind: "wallet",
4378
- walletId: authentication.walletId
4379
- } : null;
4380
- let failure;
4381
- let failed = false;
4382
- try {
4383
- await lock(context);
4384
- } catch (error) {
4385
- failure = error;
4386
- failed = true;
4387
- }
4388
- if (cleanupTarget) try {
4389
- await context.signingEngine.deleteDurableEcdsaPresignatures(cleanupTarget);
4390
- } catch (error) {
4391
- if (!failed) failure = error;
4392
- failed = true;
4393
- }
4394
- if (failed) throw failure;
4395
- }
4396
- async function resumeNearAfterSuccessfulUnlock(args) {
4397
- try {
4398
- await (await import("../registration/registration.js")).resumeNearRegistrationAfterUnlock(args);
4399
- } catch (error) {
4400
- console.warn("[login] NEAR continuation could not start", error instanceof Error ? error.message : "module unavailable");
4401
- } finally {
4402
- new Uint8Array(args.ownedFactorSecret).fill(0);
4403
- }
4404
- }
4405
- //#endregion
4406
- export { activateLinkedDeviceSignerRuntimesAfterLink, getRecentUnlocks, getWalletSession, lock, logout, resolveExactLinkedEmailOtpAuthority, resolveLinkedDeviceEmailOtpAuthoritySelection, unlockLinkedDeviceEmailOtpWallet, unlockResolvedWalletSubjectSet };
4407
-
4408
- //# sourceMappingURL=login.js.map