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