@seams/wallet 0.29.0 → 0.30.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 (251) hide show
  1. package/README.md +6 -6
  2. package/dist/.build-inputs.sha256 +1 -1
  3. package/dist/esm/SeamsWeb/SeamsWeb.js +2 -0
  4. package/dist/esm/SeamsWeb/walletIframe/client/inboundMessages.js +9 -0
  5. package/dist/esm/SeamsWeb/walletIframe/client/router.js +30 -0
  6. package/dist/esm/SeamsWeb/walletIframe/coordinator.js +18 -0
  7. package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/AuthMenuSurface.js +88 -47
  8. package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/WalletAlternativesSection.js +67 -0
  9. package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/mountAuthMenuSurface.js +13 -0
  10. package/dist/esm/SeamsWeb/walletIframe/host/walletMutationGuard.js +1 -0
  11. package/dist/esm/SeamsWeb/walletIframe/shared/messages.js +20 -6
  12. package/dist/esm/SeamsWeb/walletIframe/shared/walletAlternatives.js +109 -0
  13. package/dist/esm/core/config/configBuilder.js +1 -1
  14. package/dist/esm/core/config/defaultConfigs.js +9 -2
  15. package/dist/esm/core/ui/messages.js +3 -1
  16. package/dist/esm/core/ui/walletIcon.js +10 -0
  17. package/dist/esm/externalEvm/boundary.js +4 -2
  18. package/dist/esm/react/components/HostedSeamsAuthMenu/shell.js +26 -6
  19. package/dist/esm/react/components/HostedSeamsAuthMenu/walletAlternatives.js +178 -0
  20. package/dist/esm/react/index.js +1 -2
  21. package/dist/esm/react/styles/styles.css +0 -183
  22. package/dist/esm/react/styles.css +0 -1
  23. package/dist/esm/sdk/{ConfirmationDrawer-BRnd5SEf.js → ConfirmationDrawer-fyl4IDRl.js} +1 -1
  24. package/dist/{public/sdk/NonceCoordinator-CNXYrOoy.js → esm/sdk/NonceCoordinator-C1lw03Ce.js} +1 -1
  25. package/dist/esm/sdk/{activeWalletSession-BJ4B-nJo.js → activeWalletSession-HAOgRKzn.js} +1 -1
  26. package/dist/esm/sdk/{adapters-B2k8y0MB.js → adapters-BY1wGpm5.js} +1 -1
  27. package/dist/esm/sdk/appearance-token-vars-CzlRDVQ7.js +1 -0
  28. package/dist/esm/sdk/{authorization-gVWwKwav.js → authorization-D_NueqAv.js} +1 -1
  29. package/dist/esm/sdk/{clientSessionPersistenceState-BxpITYM_.js → clientSessionPersistenceState-B3gU3515.js} +1 -1
  30. package/dist/esm/sdk/{commitQueue-C1wkey4q.js → commitQueue-CbyuhEW9.js} +1 -1
  31. package/dist/{public/sdk/confirm-ui-Dx6c4-Rk.js → esm/sdk/confirm-ui-DWFcGTsT.js} +1 -1
  32. package/dist/{public/sdk/device-linking-_o3_fgiG.js → esm/sdk/device-linking-BL2aDEUF.js} +1 -1
  33. package/dist/esm/sdk/{deviceLinkApproval-CObsEWBa.js → deviceLinkApproval-C4T8XAmi.js} +1 -1
  34. package/dist/esm/sdk/{digestEncoding-34kXJoJr.js → digestEncoding-Rx8Vjy4J.js} +1 -1
  35. package/dist/esm/sdk/{display-CUWg48tD.js → display-8NGPOhQT.js} +1 -1
  36. package/dist/{public/sdk/ecdsaCapabilityManifest--1Ztngfx.js → esm/sdk/ecdsaCapabilityManifest-BbPXL-qh.js} +1 -1
  37. package/dist/{public/sdk/ecdsaDerivationClientWasm-DJh2uN-q.js → esm/sdk/ecdsaDerivationClientWasm-GCt9yVsd.js} +1 -1
  38. package/dist/{public/sdk/ecdsaDerivationExport-BUUUGc6o.js → esm/sdk/ecdsaDerivationExport-jm2VBMz_.js} +1 -1
  39. package/dist/esm/sdk/{emailOtpEcdsaDerivationIdentity-Qd4pBwHv.js → emailOtpEcdsaDerivationIdentity-DJmMyqL-.js} +1 -1
  40. package/dist/esm/sdk/{export-viewer-host-O0OV1Oou.js → export-viewer-host-TzgdJQuZ.js} +1 -1
  41. package/dist/{public/sdk/exportKeypairOperation-DkqY9Bpf.js → esm/sdk/exportKeypairOperation-B9_ulzNz.js} +1 -1
  42. package/dist/esm/sdk/host-Csu5L7VF.js +1 -0
  43. package/dist/esm/sdk/{indexedDB-CA4tGqkr.js → indexedDB-BqsYXybq.js} +1 -1
  44. package/dist/esm/sdk/{lanes-vBKm6yBJ.js → lanes-0WT2w1Xz.js} +1 -1
  45. package/dist/esm/sdk/{localOnly-U_MucUAe.js → localOnly-DFrtrfdO.js} +1 -1
  46. package/dist/esm/sdk/{mountExportPrivateKeySurface-C2-fnvP6.js → mountExportPrivateKeySurface-D8juRQJM.js} +1 -1
  47. package/dist/{public/sdk/mountRecoveryCodeBackupSurface-C_tJNPJX.js → esm/sdk/mountRecoveryCodeBackupSurface-CMtByh-L.js} +1 -1
  48. package/dist/esm/sdk/{nearEd25519YaoSigningPreparation-CnbgQfZc.js → nearEd25519YaoSigningPreparation-Cz2Gb95g.js} +1 -1
  49. package/dist/esm/sdk/{operationFingerprint-Bas59T7L.js → operationFingerprint-GKEY-X5I.js} +1 -1
  50. package/dist/esm/sdk/ownerNearOperation-DCxxHcwX.js +1 -0
  51. package/dist/esm/sdk/{pendingWalletRecoveryCodeBackup-DXFrQmO5.js → pendingWalletRecoveryCodeBackup-8iMhQU-E.js} +1 -1
  52. package/dist/{public/sdk/presignaturePool-Dq4RhzXn.js → esm/sdk/presignaturePool-CaI45td2.js} +1 -1
  53. package/dist/esm/sdk/{presignatures-CkhuZ0YQ.js → presignatures-B9KnQyfE.js} +1 -1
  54. package/dist/esm/sdk/{recovery-entrypoint-s9OoKBcl.js → recovery-entrypoint-DA2FGLG6.js} +1 -1
  55. package/dist/esm/sdk/{registration-CTtTocyo.js → registration-C7w_51wE.js} +1 -1
  56. package/dist/esm/sdk/{registration-D3p7muCc.js → registration-XNyt1YRK.js} +1 -1
  57. package/dist/esm/sdk/{registrationIntent-C1-Kyx_-.js → registrationIntent-Cb3tggIM.js} +1 -1
  58. package/dist/{public/sdk/requireStepUpAuth-iVo6h_U-.js → esm/sdk/requireStepUpAuth-ByMTPBu4.js} +1 -1
  59. package/dist/esm/sdk/resealedEnvelopeResult-DKY5fVNY.js +1 -0
  60. package/dist/esm/sdk/routerAbNormalSigning-CPLDkttX.js +1 -0
  61. package/dist/esm/sdk/router_ab_ed25519_yao_client_bg.wasm +0 -0
  62. package/dist/esm/sdk/runtime-auth-BMT_gIKI.js +1 -0
  63. package/dist/esm/sdk/{runtime-device-link-qmYvGep9.js → runtime-device-link-DQe0aqRi.js} +1 -1
  64. package/dist/{public/sdk/runtime-ecdsa-tempo-Zh95TuLV.js → esm/sdk/runtime-ecdsa-tempo-DKkeMMpm.js} +1 -1
  65. package/dist/esm/sdk/{runtime-email-otp-CnLuW4H1.js → runtime-email-otp-CzTe7r9I.js} +1 -1
  66. package/dist/esm/sdk/{runtime-export-m8lvrXtw.js → runtime-export-BiyLbdCe.js} +1 -1
  67. package/dist/esm/sdk/{runtime-near-BiXzXXhH.js → runtime-near-Kk0n1FSf.js} +1 -1
  68. package/dist/esm/sdk/runtime-preferences-B-A3hddU.js +1 -0
  69. package/dist/esm/sdk/runtime-recovery-C9p1TU1w.js +1 -0
  70. package/dist/esm/sdk/{runtime-recovery-codes-B033ake_.js → runtime-recovery-codes-CFOWDVd9.js} +1 -1
  71. package/dist/esm/sdk/{runtimeContext-RNS2E5wy.js → runtimeContext-ChuvOC0h.js} +3 -3
  72. package/dist/esm/sdk/{secp256k1-DPeaOjM0.js → secp256k1-sDDAa4Ga.js} +1 -1
  73. package/dist/{public/sdk/signEvmFamily-Cksw3RpU.js → esm/sdk/signEvmFamily-CMrXkVsZ.js} +1 -1
  74. package/dist/esm/sdk/{signEvmFamilyWithUiConfirmForTempo-B7p9UVix.js → signEvmFamilyWithUiConfirmForTempo-CnRoo0e8.js} +1 -1
  75. package/dist/esm/sdk/{signEvmWithUiConfirm-B14zYdwE.js → signEvmWithUiConfirm-yITc3ZvP.js} +1 -1
  76. package/dist/esm/sdk/{signNear-D0rFEYP1.js → signNear-DyFk--I3.js} +1 -1
  77. package/dist/{public/sdk/signingFlow-Bd1X0e-1.js → esm/sdk/signingFlow-DTP4D19E.js} +1 -1
  78. package/dist/{public/sdk/signingQueue-DoUBeaCv.js → esm/sdk/signingQueue-Dy5mYMus.js} +1 -1
  79. package/dist/esm/sdk/{thresholdEcdsa-BxfOZmiR.js → thresholdEcdsa-CRfx6RP1.js} +1 -1
  80. package/dist/esm/sdk/{trace-BnhLKxcu.js → trace-BA8jya7O.js} +1 -1
  81. package/dist/{public/sdk/transactionState-G_FPe-U8.js → esm/sdk/transactionState-BCbaT2hO.js} +1 -1
  82. package/dist/esm/sdk/tx-confirm-ui.js +3 -1
  83. package/dist/esm/sdk/{types-A-w1cYlJ.js → types-D2Zk1W7I.js} +1 -1
  84. package/dist/{public/sdk/unlockedEd25519ExportRootCapability-5F1egCSv.js → esm/sdk/unlockedEd25519ExportRootCapability-BbGMlikr.js} +1 -1
  85. package/dist/esm/sdk/voiceid-host.js +1 -1
  86. package/dist/esm/sdk/wallet-iframe-host-ecdsa.js +1 -1
  87. package/dist/esm/sdk/wallet-iframe-host-full.js +1 -1
  88. package/dist/esm/sdk/wallet-iframe-host-near.js +1 -1
  89. package/dist/esm/sdk/wallet-iframe-host-runtime.js +1 -1
  90. package/dist/esm/sdk/{wallet-recovery-DXdm68_Q.js → wallet-recovery-Bfm-oUoP.js} +1 -1
  91. package/dist/esm/sdk/wallet-ui.css +1 -1
  92. package/dist/{public/sdk/walletAuthMethodRecord-BW-XV4fv.js → esm/sdk/walletAuthMethodRecord--fvGr8r1.js} +1 -1
  93. package/dist/{public/sdk/walletAuthority-DbGaSw7D.js → esm/sdk/walletAuthority-CU9nO0Ze.js} +1 -1
  94. package/dist/esm/sdk/{walletCustodyEcdsaContinuity-BnyL1Ryu.js → walletCustodyEcdsaContinuity-BUdDyRl_.js} +1 -1
  95. package/dist/esm/sdk/{walletDbName-Ca0rCq5r.js → walletDbName-B6-CV_Rq.js} +1 -1
  96. package/dist/esm/sdk/{walletOwnerOperation-CScYv2K6.js → walletOwnerOperation-BJPxzo-k.js} +1 -1
  97. package/dist/esm/sdk/{walletOwnershipGeneration-BZc6UKqX.js → walletOwnershipGeneration-B3uE9GRG.js} +1 -1
  98. package/dist/{public/sdk/walletRecoveryAdminProof-DdwikrW3.js → esm/sdk/walletRecoveryAdminProof-BmZaP0Q8.js} +1 -1
  99. package/dist/{public/sdk/walletRecoveryCommit-DbAoiJp5.js → esm/sdk/walletRecoveryCommit-CSYNbYNd.js} +1 -1
  100. package/dist/esm/sdk/{walletSessionAuthorizationStatus-GhcGvDCX.js → walletSessionAuthorizationStatus-CQ3qA9tI.js} +1 -1
  101. package/dist/{public/sdk/walletSessionAuthorizationStore-BivTUoKY.js → esm/sdk/walletSessionAuthorizationStore-CGt-s5fX.js} +1 -1
  102. package/dist/esm/shared-ts/src/utils/index.js +1 -1
  103. package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker_bg.wasm +0 -0
  104. package/dist/esm/wasm/router_ab_ecdsa_client/pkg/router_ab_ecdsa_client_bg.wasm +0 -0
  105. package/dist/esm/wasm/router_ab_ed25519_yao_client/pkg/router_ab_ed25519_yao_client_bg.wasm +0 -0
  106. package/dist/public/headers.manifest.json +1 -1
  107. package/dist/public/sdk/{ConfirmationDrawer-BRnd5SEf.js → ConfirmationDrawer-fyl4IDRl.js} +1 -1
  108. package/dist/{esm/sdk/NonceCoordinator-CNXYrOoy.js → public/sdk/NonceCoordinator-C1lw03Ce.js} +1 -1
  109. package/dist/public/sdk/{activeWalletSession-BJ4B-nJo.js → activeWalletSession-HAOgRKzn.js} +1 -1
  110. package/dist/public/sdk/{adapters-B2k8y0MB.js → adapters-BY1wGpm5.js} +1 -1
  111. package/dist/public/sdk/appearance-token-vars-CzlRDVQ7.js +1 -0
  112. package/dist/public/sdk/{authorization-gVWwKwav.js → authorization-D_NueqAv.js} +1 -1
  113. package/dist/public/sdk/{clientSessionPersistenceState-BxpITYM_.js → clientSessionPersistenceState-B3gU3515.js} +1 -1
  114. package/dist/public/sdk/{commitQueue-C1wkey4q.js → commitQueue-CbyuhEW9.js} +1 -1
  115. package/dist/{esm/sdk/confirm-ui-Dx6c4-Rk.js → public/sdk/confirm-ui-DWFcGTsT.js} +1 -1
  116. package/dist/{esm/sdk/device-linking-_o3_fgiG.js → public/sdk/device-linking-BL2aDEUF.js} +1 -1
  117. package/dist/public/sdk/{deviceLinkApproval-CObsEWBa.js → deviceLinkApproval-C4T8XAmi.js} +1 -1
  118. package/dist/public/sdk/{digestEncoding-34kXJoJr.js → digestEncoding-Rx8Vjy4J.js} +1 -1
  119. package/dist/public/sdk/{display-CUWg48tD.js → display-8NGPOhQT.js} +1 -1
  120. package/dist/{esm/sdk/ecdsaCapabilityManifest--1Ztngfx.js → public/sdk/ecdsaCapabilityManifest-BbPXL-qh.js} +1 -1
  121. package/dist/{esm/sdk/ecdsaDerivationClientWasm-DJh2uN-q.js → public/sdk/ecdsaDerivationClientWasm-GCt9yVsd.js} +1 -1
  122. package/dist/{esm/sdk/ecdsaDerivationExport-BUUUGc6o.js → public/sdk/ecdsaDerivationExport-jm2VBMz_.js} +1 -1
  123. package/dist/public/sdk/{emailOtpEcdsaDerivationIdentity-Qd4pBwHv.js → emailOtpEcdsaDerivationIdentity-DJmMyqL-.js} +1 -1
  124. package/dist/public/sdk/{export-viewer-host-O0OV1Oou.js → export-viewer-host-TzgdJQuZ.js} +1 -1
  125. package/dist/{esm/sdk/exportKeypairOperation-DkqY9Bpf.js → public/sdk/exportKeypairOperation-B9_ulzNz.js} +1 -1
  126. package/dist/public/sdk/host-Csu5L7VF.js +1 -0
  127. package/dist/public/sdk/{indexedDB-CA4tGqkr.js → indexedDB-BqsYXybq.js} +1 -1
  128. package/dist/public/sdk/{lanes-vBKm6yBJ.js → lanes-0WT2w1Xz.js} +1 -1
  129. package/dist/public/sdk/{localOnly-U_MucUAe.js → localOnly-DFrtrfdO.js} +1 -1
  130. package/dist/public/sdk/{mountExportPrivateKeySurface-C2-fnvP6.js → mountExportPrivateKeySurface-D8juRQJM.js} +1 -1
  131. package/dist/{esm/sdk/mountRecoveryCodeBackupSurface-C_tJNPJX.js → public/sdk/mountRecoveryCodeBackupSurface-CMtByh-L.js} +1 -1
  132. package/dist/public/sdk/{nearEd25519YaoSigningPreparation-CnbgQfZc.js → nearEd25519YaoSigningPreparation-Cz2Gb95g.js} +1 -1
  133. package/dist/public/sdk/{operationFingerprint-Bas59T7L.js → operationFingerprint-GKEY-X5I.js} +1 -1
  134. package/dist/public/sdk/ownerNearOperation-DCxxHcwX.js +1 -0
  135. package/dist/public/sdk/{pendingWalletRecoveryCodeBackup-DXFrQmO5.js → pendingWalletRecoveryCodeBackup-8iMhQU-E.js} +1 -1
  136. package/dist/{esm/sdk/presignaturePool-Dq4RhzXn.js → public/sdk/presignaturePool-CaI45td2.js} +1 -1
  137. package/dist/public/sdk/{presignatures-CkhuZ0YQ.js → presignatures-B9KnQyfE.js} +1 -1
  138. package/dist/public/sdk/{recovery-entrypoint-s9OoKBcl.js → recovery-entrypoint-DA2FGLG6.js} +1 -1
  139. package/dist/public/sdk/{registration-CTtTocyo.js → registration-C7w_51wE.js} +1 -1
  140. package/dist/public/sdk/{registration-D3p7muCc.js → registration-XNyt1YRK.js} +1 -1
  141. package/dist/public/sdk/{registrationIntent-C1-Kyx_-.js → registrationIntent-Cb3tggIM.js} +1 -1
  142. package/dist/{esm/sdk/requireStepUpAuth-iVo6h_U-.js → public/sdk/requireStepUpAuth-ByMTPBu4.js} +1 -1
  143. package/dist/public/sdk/resealedEnvelopeResult-DKY5fVNY.js +1 -0
  144. package/dist/public/sdk/routerAbNormalSigning-CPLDkttX.js +1 -0
  145. package/dist/public/sdk/router_ab_ed25519_yao_client_bg.wasm +0 -0
  146. package/dist/public/sdk/runtime-auth-BMT_gIKI.js +1 -0
  147. package/dist/public/sdk/{runtime-device-link-qmYvGep9.js → runtime-device-link-DQe0aqRi.js} +1 -1
  148. package/dist/{esm/sdk/runtime-ecdsa-tempo-Zh95TuLV.js → public/sdk/runtime-ecdsa-tempo-DKkeMMpm.js} +1 -1
  149. package/dist/public/sdk/{runtime-email-otp-CnLuW4H1.js → runtime-email-otp-CzTe7r9I.js} +1 -1
  150. package/dist/public/sdk/{runtime-export-m8lvrXtw.js → runtime-export-BiyLbdCe.js} +1 -1
  151. package/dist/public/sdk/{runtime-near-BiXzXXhH.js → runtime-near-Kk0n1FSf.js} +1 -1
  152. package/dist/public/sdk/runtime-preferences-B-A3hddU.js +1 -0
  153. package/dist/public/sdk/runtime-recovery-C9p1TU1w.js +1 -0
  154. package/dist/public/sdk/{runtime-recovery-codes-B033ake_.js → runtime-recovery-codes-CFOWDVd9.js} +1 -1
  155. package/dist/public/sdk/{runtimeContext-RNS2E5wy.js → runtimeContext-ChuvOC0h.js} +3 -3
  156. package/dist/public/sdk/{secp256k1-DPeaOjM0.js → secp256k1-sDDAa4Ga.js} +1 -1
  157. package/dist/{esm/sdk/signEvmFamily-Cksw3RpU.js → public/sdk/signEvmFamily-CMrXkVsZ.js} +1 -1
  158. package/dist/public/sdk/{signEvmFamilyWithUiConfirmForTempo-B7p9UVix.js → signEvmFamilyWithUiConfirmForTempo-CnRoo0e8.js} +1 -1
  159. package/dist/public/sdk/{signEvmWithUiConfirm-B14zYdwE.js → signEvmWithUiConfirm-yITc3ZvP.js} +1 -1
  160. package/dist/public/sdk/{signNear-D0rFEYP1.js → signNear-DyFk--I3.js} +1 -1
  161. package/dist/{esm/sdk/signingFlow-Bd1X0e-1.js → public/sdk/signingFlow-DTP4D19E.js} +1 -1
  162. package/dist/{esm/sdk/signingQueue-DoUBeaCv.js → public/sdk/signingQueue-Dy5mYMus.js} +1 -1
  163. package/dist/public/sdk/{thresholdEcdsa-BxfOZmiR.js → thresholdEcdsa-CRfx6RP1.js} +1 -1
  164. package/dist/public/sdk/{trace-BnhLKxcu.js → trace-BA8jya7O.js} +1 -1
  165. package/dist/{esm/sdk/transactionState-G_FPe-U8.js → public/sdk/transactionState-BCbaT2hO.js} +1 -1
  166. package/dist/public/sdk/tx-confirm-ui.js +3 -1
  167. package/dist/public/sdk/{types-A-w1cYlJ.js → types-D2Zk1W7I.js} +1 -1
  168. package/dist/{esm/sdk/unlockedEd25519ExportRootCapability-5F1egCSv.js → public/sdk/unlockedEd25519ExportRootCapability-BbGMlikr.js} +1 -1
  169. package/dist/public/sdk/voiceid-host.js +1 -1
  170. package/dist/public/sdk/wallet-iframe-host-ecdsa.js +1 -1
  171. package/dist/public/sdk/wallet-iframe-host-full.js +1 -1
  172. package/dist/public/sdk/wallet-iframe-host-near.js +1 -1
  173. package/dist/public/sdk/wallet-iframe-host-runtime.js +1 -1
  174. package/dist/public/sdk/{wallet-recovery-DXdm68_Q.js → wallet-recovery-Bfm-oUoP.js} +1 -1
  175. package/dist/public/sdk/wallet-ui.css +1 -1
  176. package/dist/{esm/sdk/walletAuthMethodRecord-BW-XV4fv.js → public/sdk/walletAuthMethodRecord--fvGr8r1.js} +1 -1
  177. package/dist/{esm/sdk/walletAuthority-DbGaSw7D.js → public/sdk/walletAuthority-CU9nO0Ze.js} +1 -1
  178. package/dist/public/sdk/{walletCustodyEcdsaContinuity-BnyL1Ryu.js → walletCustodyEcdsaContinuity-BUdDyRl_.js} +1 -1
  179. package/dist/public/sdk/{walletDbName-Ca0rCq5r.js → walletDbName-B6-CV_Rq.js} +1 -1
  180. package/dist/public/sdk/{walletOwnerOperation-CScYv2K6.js → walletOwnerOperation-BJPxzo-k.js} +1 -1
  181. package/dist/public/sdk/{walletOwnershipGeneration-BZc6UKqX.js → walletOwnershipGeneration-B3uE9GRG.js} +1 -1
  182. package/dist/{esm/sdk/walletRecoveryAdminProof-DdwikrW3.js → public/sdk/walletRecoveryAdminProof-BmZaP0Q8.js} +1 -1
  183. package/dist/{esm/sdk/walletRecoveryCommit-DbAoiJp5.js → public/sdk/walletRecoveryCommit-CSYNbYNd.js} +1 -1
  184. package/dist/public/sdk/{walletSessionAuthorizationStatus-GhcGvDCX.js → walletSessionAuthorizationStatus-CQ3qA9tI.js} +1 -1
  185. package/dist/{esm/sdk/walletSessionAuthorizationStore-BivTUoKY.js → public/sdk/walletSessionAuthorizationStore-CGt-s5fX.js} +1 -1
  186. package/dist/public/sdk/workers/email_otp_runtime_bg.wasm +0 -0
  187. package/dist/public/sdk/workers/evm_crypto_bg.wasm +0 -0
  188. package/dist/public/sdk/workers/router_ab_ecdsa_client_bg.wasm +0 -0
  189. package/dist/public/sdk/workers/router_ab_ed25519_yao_client_bg.wasm +0 -0
  190. package/dist/public/sdk/workers/shamir3pass_runtime_bg.wasm +0 -0
  191. package/dist/public/sdk/workers/tempo_signer_bg.wasm +0 -0
  192. package/dist/public/sdk/workers/wallet_custody_ceremony_bg.wasm +0 -0
  193. package/dist/public/sdk/workers/wasm_signer_worker_bg.wasm +0 -0
  194. package/dist/public/wallet-assets.manifest.json +153 -153
  195. package/dist/public/wallet-service/index.html +4 -4
  196. package/dist/types/wallet/src/SeamsWeb/index.d.ts +1 -0
  197. package/dist/types/wallet/src/SeamsWeb/publicApi/types.d.ts +3 -0
  198. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/inboundMessages.d.ts +5 -0
  199. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/router.d.ts +3 -0
  200. package/dist/types/wallet/src/SeamsWeb/walletIframe/coordinator.d.ts +6 -0
  201. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/auth-menu/controller.d.ts +2 -0
  202. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/auth-menu/domain.d.ts +3 -0
  203. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/auth-menu/session.d.ts +4 -0
  204. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/requestRouter.d.ts +1 -1
  205. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/ui/auth-menu/AuthMenuSurface.d.ts +5 -0
  206. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/ui/auth-menu/WalletAlternativesSection.d.ts +13 -0
  207. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/ui/auth-menu/mountAuthMenuSurface.d.ts +3 -0
  208. package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/messages.d.ts +11 -4
  209. package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/walletAlternatives.d.ts +52 -0
  210. package/dist/types/wallet/src/core/types/seams.d.ts +2 -2
  211. package/dist/types/wallet/src/core/ui/messages.d.ts +1 -1
  212. package/dist/types/wallet/src/core/ui/walletIcon.d.ts +3 -0
  213. package/dist/types/wallet/src/index.d.ts +1 -0
  214. package/dist/types/wallet/src/react/components/HostedSeamsAuthMenu/public.d.ts +1 -0
  215. package/dist/types/wallet/src/react/components/HostedSeamsAuthMenu/types.d.ts +4 -0
  216. package/dist/types/wallet/src/react/components/HostedSeamsAuthMenu/walletAlternatives.d.ts +48 -0
  217. package/dist/types/wallet/src/react/index.d.ts +1 -2
  218. package/dist/workers/email_otp_runtime_bg.wasm +0 -0
  219. package/dist/workers/evm_crypto_bg.wasm +0 -0
  220. package/dist/workers/router_ab_ecdsa_client_bg.wasm +0 -0
  221. package/dist/workers/router_ab_ed25519_yao_client_bg.wasm +0 -0
  222. package/dist/workers/shamir3pass_runtime_bg.wasm +0 -0
  223. package/dist/workers/tempo_signer_bg.wasm +0 -0
  224. package/dist/workers/wallet_custody_ceremony_bg.wasm +0 -0
  225. package/dist/workers/wasm_signer_worker_bg.wasm +0 -0
  226. package/package.json +1 -1
  227. package/dist/esm/react/components/HostedSeamsAuthMenu/WalletConnectorMenu.css +0 -182
  228. package/dist/esm/react/components/HostedSeamsAuthMenu/WalletConnectorMenu.js +0 -315
  229. package/dist/esm/sdk/appearance-token-vars-DkF3EBbF.js +0 -1
  230. package/dist/esm/sdk/host-BeE2dIU4.js +0 -1
  231. package/dist/esm/sdk/ownerNearOperation-DjNDxW3_.js +0 -1
  232. package/dist/esm/sdk/resealedEnvelopeResult-DXDo-72P.js +0 -1
  233. package/dist/esm/sdk/routerAbNormalSigning-DVFFkNhJ.js +0 -1
  234. package/dist/esm/sdk/runtime-auth-Dsmw_dUA.js +0 -1
  235. package/dist/esm/sdk/runtime-preferences-DlKHDIjb.js +0 -1
  236. package/dist/esm/sdk/runtime-recovery-C6lS71Jp.js +0 -1
  237. package/dist/public/sdk/appearance-token-vars-DkF3EBbF.js +0 -1
  238. package/dist/public/sdk/host-BeE2dIU4.js +0 -1
  239. package/dist/public/sdk/ownerNearOperation-DjNDxW3_.js +0 -1
  240. package/dist/public/sdk/resealedEnvelopeResult-DXDo-72P.js +0 -1
  241. package/dist/public/sdk/routerAbNormalSigning-DVFFkNhJ.js +0 -1
  242. package/dist/public/sdk/runtime-auth-Dsmw_dUA.js +0 -1
  243. package/dist/public/sdk/runtime-preferences-DlKHDIjb.js +0 -1
  244. package/dist/public/sdk/runtime-recovery-C6lS71Jp.js +0 -1
  245. package/dist/types/wallet/src/react/components/HostedSeamsAuthMenu/WalletConnectorMenu.d.ts +0 -31
  246. /package/dist/esm/sdk/{canonicalPrimitives-Jd3i_Ngz.js → canonicalPrimitives-DKeS3M40.js} +0 -0
  247. /package/dist/esm/sdk/{capabilityKinds-DVlGMspk.js → capabilityKinds-Cafn86Y1.js} +0 -0
  248. /package/dist/esm/sdk/{walletIframeIdentity-CpgyEnKg.js → walletIframeIdentity-Cz82I_Uh.js} +0 -0
  249. /package/dist/public/sdk/{canonicalPrimitives-Jd3i_Ngz.js → canonicalPrimitives-DKeS3M40.js} +0 -0
  250. /package/dist/public/sdk/{capabilityKinds-DVlGMspk.js → capabilityKinds-Cafn86Y1.js} +0 -0
  251. /package/dist/public/sdk/{walletIframeIdentity-CpgyEnKg.js → walletIframeIdentity-Cz82I_Uh.js} +0 -0
@@ -0,0 +1,109 @@
1
+ import { isPlainObject } from "../../../shared-ts/src/utils/validation.js";
2
+ import { parseWalletDataIcon } from "../../../core/ui/walletIcon.js";
3
+ import { walletIframeRequestIdFromBoundary } from "../../../core/types/walletIframeIdentity.js";
4
+ import { hostedAuthMenuSessionIdFromBoundary } from "./messages.js";
5
+ //#region src/SeamsWeb/walletIframe/shared/walletAlternatives.ts
6
+ function emptyWalletAlternatives() {
7
+ return {
8
+ primary: [],
9
+ secondary: []
10
+ };
11
+ }
12
+ function boundedText(value) {
13
+ return typeof value === "string" && value.trim().length > 0 && value.length <= 512;
14
+ }
15
+ function parseWalletIcon(value) {
16
+ if (value === null) return {
17
+ ok: true,
18
+ value: null
19
+ };
20
+ const dataIcon = parseWalletDataIcon(value);
21
+ if (dataIcon !== null) return {
22
+ ok: true,
23
+ value: dataIcon
24
+ };
25
+ if (typeof value !== "string" || value.length > 131072) return { ok: false };
26
+ try {
27
+ if (new URL(value).protocol === "https:") return {
28
+ ok: true,
29
+ value
30
+ };
31
+ } catch {
32
+ return { ok: false };
33
+ }
34
+ return { ok: false };
35
+ }
36
+ function parseWalletRows(value, ids) {
37
+ if (!Array.isArray(value) || value.length > 32) return null;
38
+ const rows = [];
39
+ for (const row of value) {
40
+ if (!isPlainObject(row) || !boundedText(row.id) || !boundedText(row.label) || typeof row.description !== "string" || row.description.length > 512 || ids.has(row.id)) return null;
41
+ const icon = parseWalletIcon(row.icon);
42
+ if (!icon.ok) return null;
43
+ ids.add(row.id);
44
+ rows.push({
45
+ id: row.id,
46
+ label: row.label,
47
+ description: row.description,
48
+ icon: icon.value
49
+ });
50
+ }
51
+ return rows;
52
+ }
53
+ function parseWalletAlternatives(value) {
54
+ if (!isPlainObject(value)) return null;
55
+ const ids = /* @__PURE__ */ new Set();
56
+ const primary = parseWalletRows(value.primary, ids);
57
+ const secondary = parseWalletRows(value.secondary, ids);
58
+ return primary && secondary ? {
59
+ primary,
60
+ secondary
61
+ } : null;
62
+ }
63
+ function parseWalletConnectionRequest(value) {
64
+ if (!isPlainObject(value)) return null;
65
+ const authMenuSessionId = hostedAuthMenuSessionIdFromBoundary(value.authMenuSessionId);
66
+ if (!authMenuSessionId || !boundedText(value.connectionRequestId) || !boundedText(value.alternativeId)) return null;
67
+ return {
68
+ authMenuSessionId,
69
+ connectionRequestId: value.connectionRequestId,
70
+ alternativeId: value.alternativeId
71
+ };
72
+ }
73
+ function parseWalletConnectionResolution(value) {
74
+ if (!isPlainObject(value) || !isPlainObject(value.result)) return null;
75
+ const authMenuSessionId = hostedAuthMenuSessionIdFromBoundary(value.authMenuSessionId);
76
+ let requestId;
77
+ try {
78
+ requestId = walletIframeRequestIdFromBoundary(value.requestId);
79
+ } catch {
80
+ return null;
81
+ }
82
+ if (!authMenuSessionId || !boundedText(value.connectionRequestId)) return null;
83
+ let result;
84
+ switch (value.result.kind) {
85
+ case "connected":
86
+ case "cancelled":
87
+ if (value.result.message !== void 0) return null;
88
+ result = { kind: value.result.kind };
89
+ break;
90
+ case "failed":
91
+ if (!boundedText(value.result.message)) return null;
92
+ result = {
93
+ kind: "failed",
94
+ message: value.result.message
95
+ };
96
+ break;
97
+ default: return null;
98
+ }
99
+ return {
100
+ authMenuSessionId,
101
+ requestId,
102
+ connectionRequestId: value.connectionRequestId,
103
+ result
104
+ };
105
+ }
106
+ //#endregion
107
+ export { emptyWalletAlternatives, parseWalletAlternatives, parseWalletConnectionRequest, parseWalletConnectionResolution };
108
+
109
+ //# sourceMappingURL=walletAlternatives.js.map
@@ -1,9 +1,9 @@
1
1
  import { normalizeTrimmedString } from "../../shared-ts/src/utils/normalize.js";
2
+ import { SIGNING_SESSION_SEAL_ALG, SIGNING_SESSION_SEAL_GROUP_ID } from "../../shared-ts/src/utils/signingSessionSeal.js";
2
3
  import { normalizeWalletLocale } from "../ui/locale.js";
3
4
  import { parseWalletAuthMethodPlugins } from "../authMethods/plugins.js";
4
5
  import { copyEcdsaSignerProvisioningDefaults, resolveAppearanceTheme, resolveBoolean, resolveChains, resolveIntegerInRange, resolveThemePalette } from "./configHelpers.js";
5
6
  import { normalizeWalletHostVariant } from "../browser/walletIframe/hostVariant.js";
6
- import { SIGNING_SESSION_SEAL_ALG, SIGNING_SESSION_SEAL_GROUP_ID } from "../../shared-ts/src/utils/signingSessionSeal.js";
7
7
  //#region src/core/config/configBuilder.ts
8
8
  const THRESHOLD_ECDSA_PRESIGN_POOL_LIMITS = {
9
9
  targetDepth: {
@@ -1,6 +1,7 @@
1
1
  import { UserVerificationPolicy } from "../../shared-ts/src/utils/authenticatorOptions.js";
2
2
  import "../../shared-ts/src/threshold/participants.js";
3
3
  import { DEFAULT_THRESHOLD_SESSION_TTL_MS } from "../signingEngine/threshold/sessionPolicy.js";
4
+ import { SIGNING_SESSION_SEAL_ALG, SIGNING_SESSION_SEAL_GROUP_ID } from "../../shared-ts/src/utils/signingSessionSeal.js";
4
5
  import { buildConfigsFromDefaults } from "./configBuilder.js";
5
6
  //#region src/core/config/defaultConfigs.ts
6
7
  const DEFAULT_ROUTER_AB_ECDSA_DERIVATION_PRESIGNATURE_POOL_POLICY = {
@@ -57,8 +58,14 @@ const PASSKEY_MANAGER_DEFAULT_CONFIGS = {
57
58
  remainingUses: 3
58
59
  },
59
60
  emailOtp: { authPolicy: "session" },
60
- sessionPersistenceMode: "none",
61
- sessionSeal: { mode: "none" },
61
+ sessionPersistenceMode: "sealed_refresh_v1",
62
+ sessionSeal: {
63
+ mode: "sealed_refresh_v1",
64
+ protocol: {
65
+ algorithm: SIGNING_SESSION_SEAL_ALG,
66
+ groupId: SIGNING_SESSION_SEAL_GROUP_ID
67
+ }
68
+ },
62
69
  routerAb: { normalSigning: { mode: "disabled" } },
63
70
  routerAbEcdsaDerivation: { presignaturePool: DEFAULT_ROUTER_AB_ECDSA_DERIVATION_PRESIGNATURE_POOL_POLICY },
64
71
  thresholdEcdsa: { provisioningDefaults: {
@@ -246,7 +246,9 @@ const walletMessages = [
246
246
  ["Unlock with email code", "メールのコードでロック解除"],
247
247
  ["Saved wallets", "保存済みウォレット"],
248
248
  ["Generate another name", "別の名前を生成"],
249
- ["Other options", "その他の方法"],
249
+ ["Recover or link wallet", "ウォレットを復元または連携"],
250
+ ["Or connect another wallet", "別のウォレットを接続"],
251
+ ["More wallets", "その他のウォレット"],
250
252
  ["Link this device", "このデバイスを連携"],
251
253
  ["Scan a code with your other device", "別のデバイスでコードをスキャン"],
252
254
  ["Use your recovery code", "リカバリーコードを使用"],
@@ -0,0 +1,10 @@
1
+ //#region src/core/ui/walletIcon.ts
2
+ const MAX_WALLET_ICON_LENGTH = 131072;
3
+ function parseWalletDataIcon(value) {
4
+ if (typeof value !== "string" || value.length > 131072 || !/^data:image\/(?:png|webp|jpeg|svg\+xml)[;,]/i.test(value)) return null;
5
+ return value;
6
+ }
7
+ //#endregion
8
+ export { MAX_WALLET_ICON_LENGTH, parseWalletDataIcon };
9
+
10
+ //# sourceMappingURL=walletIcon.js.map
@@ -1,3 +1,4 @@
1
+ import { parseWalletDataIcon } from "../core/ui/walletIcon.js";
1
2
  import { isHex } from "../node_modules/viem/_esm/utils/data/isHex.js";
2
3
  import { numberToHex } from "../node_modules/viem/_esm/utils/encoding/toHex.js";
3
4
  import { getAddress } from "../node_modules/viem/_esm/utils/address/getAddress.js";
@@ -26,12 +27,13 @@ function parseAnnouncement(value) {
26
27
  if (typeof uuid !== "string" || !/^[\da-f]{8}-[\da-f]{4}-4[\da-f]{3}-[89ab][\da-f]{3}-[\da-f]{12}$/i.test(uuid)) return null;
27
28
  if (typeof name !== "string" || !name.trim() || name.length > 128) return null;
28
29
  if (typeof rdns !== "string" || !rdns.trim() || rdns.length > 253) return null;
29
- if (typeof icon !== "string" || icon.length > 131072 || !/^data:image\/(?:png|webp|jpeg|svg\+xml)[;,]/i.test(icon)) return null;
30
+ const walletIcon = parseWalletDataIcon(icon);
31
+ if (walletIcon === null) return null;
30
32
  return Object.freeze({
31
33
  wallet: Object.freeze({
32
34
  id: uuid.toLowerCase(),
33
35
  name: name.trim(),
34
- icon,
36
+ icon: walletIcon,
35
37
  rdns: rdns.trim()
36
38
  }),
37
39
  provider
@@ -1,6 +1,7 @@
1
1
  import { buildHostedAuthMenuOpenRequest, hostedAuthMenuExternalAuthRequestIdFromBoundary, hostedAuthMenuSessionIdFromBoundary } from "../../../SeamsWeb/walletIframe/shared/messages.js";
2
2
  import { useSeams } from "../../context/index.js";
3
3
  import { SeamsAuthMenuMock } from "./SeamsAuthMenuMock.js";
4
+ import { WalletAlternativesBroker, describeWalletAlternatives, walletAlternativesControllerKey } from "./walletAlternatives.js";
4
5
  import { endHostedAuthMenuAnchor, resetHostedAuthMenuAnchor } from "../../../SeamsWeb/walletIframe/client/authMenuAnchor.js";
5
6
  import React from "react";
6
7
  import { jsx } from "react/jsx-runtime";
@@ -83,7 +84,8 @@ function hostedAuthMenuEffectConfigKey(config) {
83
84
  showRegistrationInput: config.showRegistrationInput,
84
85
  showProgress: config.showProgress,
85
86
  copy: config.copy,
86
- enabledExternalProviders: config.enabledExternalProviders
87
+ enabledExternalProviders: config.enabledExternalProviders,
88
+ walletAlternatives: describeWalletAlternatives(config.walletAlternatives)
87
89
  });
88
90
  return JSON.stringify({
89
91
  initialMode: normalized.initialMode,
@@ -92,7 +94,9 @@ function hostedAuthMenuEffectConfigKey(config) {
92
94
  showRegistrationInput: normalized.showRegistrationInput,
93
95
  showProgress: normalized.showProgress,
94
96
  copy: normalized.copy,
95
- enabledExternalProviders: normalized.enabledExternalProviders
97
+ enabledExternalProviders: normalized.enabledExternalProviders,
98
+ walletAlternatives: normalized.walletAlternatives,
99
+ walletControllers: walletAlternativesControllerKey(config.walletAlternatives)
96
100
  });
97
101
  } catch {
98
102
  return "invalid";
@@ -109,6 +113,8 @@ var HostedAuthMenuSessionController = class {
109
113
  showProgress;
110
114
  copy;
111
115
  externalAuthBroker;
116
+ walletAlternatives;
117
+ walletBroker;
112
118
  onOutcome;
113
119
  externalAuthRequestIds = /* @__PURE__ */ new Set();
114
120
  handleExternalAuthRequestBound;
@@ -128,12 +134,15 @@ var HostedAuthMenuSessionController = class {
128
134
  this.showProgress = args.showProgress;
129
135
  this.copy = args.copy;
130
136
  this.externalAuthBroker = args.externalAuthBroker;
137
+ this.walletAlternatives = args.walletAlternatives;
138
+ this.walletBroker = new WalletAlternativesBroker(args.seams.authMenu, args.authMenuSessionId, args.walletAlternatives);
131
139
  this.onOutcome = args.onOutcome;
132
140
  this.handleExternalAuthRequestBound = this.handleExternalAuthRequest.bind(this);
133
141
  }
134
142
  start() {
135
143
  if (this.isActive) return;
136
144
  this.isActive = true;
145
+ this.walletBroker.start();
137
146
  resetHostedAuthMenuAnchor(this.anchorElement);
138
147
  this.unsubscribeExternalAuthRequest = this.seams.authMenu.onExternalAuthRequest(this.handleExternalAuthRequestBound);
139
148
  this.open();
@@ -142,6 +151,7 @@ var HostedAuthMenuSessionController = class {
142
151
  if (this.hasFinalizedCleanup) return;
143
152
  this.hasFinalizedCleanup = true;
144
153
  this.isActive = false;
154
+ this.walletBroker.cleanup();
145
155
  this.unsubscribeExternalAuthRequest?.();
146
156
  this.unsubscribeExternalAuthRequest = null;
147
157
  this.externalAuthRequestIds.clear();
@@ -161,7 +171,8 @@ var HostedAuthMenuSessionController = class {
161
171
  showRegistrationInput: this.showRegistrationInput,
162
172
  showProgress: this.showProgress,
163
173
  copy: this.copy,
164
- enabledExternalProviders: this.externalAuthBroker.current ? ["google"] : []
174
+ enabledExternalProviders: this.externalAuthBroker.current ? ["google"] : [],
175
+ walletAlternatives: describeWalletAlternatives(this.walletAlternatives.current)
165
176
  });
166
177
  } catch (error) {
167
178
  this.emitFailure(failureCodeForError(error), errorMessage(error));
@@ -225,6 +236,10 @@ var HostedAuthMenuSessionController = class {
225
236
  if (this.hasTerminalOutcome) return;
226
237
  this.hasTerminalOutcome = true;
227
238
  endHostedAuthMenuAnchor(this.anchorElement);
239
+ try {
240
+ if (outcome.kind === "wallet_connected") this.walletBroker.complete(outcome.alternativeId);
241
+ } catch {}
242
+ this.walletBroker.cleanup();
228
243
  try {
229
244
  this.onOutcome.current(outcome);
230
245
  } catch {}
@@ -274,7 +289,7 @@ function forwardHostedAuthMenuOutcome(terminalGateRef, onOutcomeRef, outcome) {
274
289
  if (isTerminalHostedAuthMenuSuccess(outcome) && terminalGateRef.current) terminalGateRef.current.completed = true;
275
290
  onOutcomeRef.current(outcome);
276
291
  }
277
- const HostedSeamsAuthMenu = ({ initialMode = "login", initialHeightCssPx, placeholder, registrationAccountInput = "implicit_wallet", showRegistrationInput = false, showProgress = false, copy, externalAuthBroker = null, onOutcome }) => {
292
+ const HostedSeamsAuthMenu = ({ initialMode = "login", initialHeightCssPx, placeholder, registrationAccountInput = "implicit_wallet", showRegistrationInput = false, showProgress = false, copy, externalAuthBroker = null, walletAlternatives, onOutcome }) => {
278
293
  const { seams, isLoggedIn } = useOptionalSeams();
279
294
  const terminalGate = terminalGateFor(seams);
280
295
  syncTerminalGate(terminalGate, isLoggedIn);
@@ -285,9 +300,12 @@ const HostedSeamsAuthMenu = ({ initialMode = "login", initialHeightCssPx, placeh
285
300
  showRegistrationInput,
286
301
  showProgress,
287
302
  copy,
288
- enabledExternalProviders: externalProvidersForBroker(externalAuthBroker)
303
+ enabledExternalProviders: externalProvidersForBroker(externalAuthBroker),
304
+ walletAlternatives
289
305
  });
290
306
  const externalAuthBrokerRef = React.useRef(externalAuthBroker);
307
+ const walletAlternativesRef = React.useRef(walletAlternatives);
308
+ walletAlternativesRef.current = walletAlternatives;
291
309
  const onOutcomeRef = React.useRef(onOutcome);
292
310
  const terminalGateRef = React.useRef(terminalGate);
293
311
  const forwardedOutcomeRef = React.useRef(() => {});
@@ -299,7 +317,8 @@ const HostedSeamsAuthMenu = ({ initialMode = "login", initialHeightCssPx, placeh
299
317
  showRegistrationInput,
300
318
  showProgress,
301
319
  copy,
302
- enabledExternalProviders: externalProvidersForBroker(externalAuthBroker)
320
+ enabledExternalProviders: externalProvidersForBroker(externalAuthBroker),
321
+ walletAlternatives
303
322
  };
304
323
  externalAuthBrokerRef.current = externalAuthBroker;
305
324
  onOutcomeRef.current = onOutcome;
@@ -323,6 +342,7 @@ const HostedSeamsAuthMenu = ({ initialMode = "login", initialHeightCssPx, placeh
323
342
  showProgress: config.showProgress,
324
343
  copy: config.copy,
325
344
  externalAuthBroker: externalAuthBrokerRef,
345
+ walletAlternatives: walletAlternativesRef,
326
346
  onOutcome: forwardedOutcomeRef
327
347
  });
328
348
  session.start();
@@ -0,0 +1,178 @@
1
+ import { parseWalletAlternatives } from "../../../SeamsWeb/walletIframe/shared/walletAlternatives.js";
2
+ import { nearWalletName } from "../../../externalNear/wallets.js";
3
+ import { hotWalletIcon, meteorWalletIcon } from "../externalWalletBrandImages.js";
4
+ //#region src/react/components/HostedSeamsAuthMenu/walletAlternatives.ts
5
+ function walletAlternativeId(alternative) {
6
+ switch (alternative.kind) {
7
+ case "near": return `near:${alternative.wallet}`;
8
+ case "evm": return `evm:${alternative.wallet.id}`;
9
+ default: return assertNeverAlternative(alternative);
10
+ }
11
+ }
12
+ function describeWalletAlternative(alternative) {
13
+ let label;
14
+ let icon;
15
+ switch (alternative.kind) {
16
+ case "near":
17
+ label = nearWalletName(alternative.wallet);
18
+ icon = nearWalletIcon(alternative.wallet);
19
+ break;
20
+ case "evm":
21
+ label = alternative.wallet.name;
22
+ icon = alternative.wallet.icon;
23
+ break;
24
+ default: return assertNeverAlternative(alternative);
25
+ }
26
+ return {
27
+ id: walletAlternativeId(alternative),
28
+ label: alternative.label ?? label,
29
+ description: alternative.description ?? "Use your existing wallet",
30
+ icon: alternative.icon ?? icon
31
+ };
32
+ }
33
+ function describeWalletAlternatives(config) {
34
+ const parsed = parseWalletAlternatives({
35
+ primary: (config?.primary ?? []).map(describeWalletAlternative),
36
+ secondary: (config?.secondary ?? []).map(describeWalletAlternative)
37
+ });
38
+ if (!parsed) throw new Error("Wallet alternatives must have unique identifiers and valid display data");
39
+ return parsed;
40
+ }
41
+ /** Owns application-origin requests for exactly one hosted menu session. */
42
+ var WalletAlternativesBroker = class {
43
+ state = { kind: "inactive" };
44
+ unsubscribe = null;
45
+ seen = /* @__PURE__ */ new Set();
46
+ constructor(api, sessionId, config) {
47
+ this.api = api;
48
+ this.sessionId = sessionId;
49
+ this.config = config;
50
+ }
51
+ start() {
52
+ if (!this.config.current || this.config.current.primary.length + this.config.current.secondary.length === 0) return;
53
+ this.state = { kind: "idle" };
54
+ this.unsubscribe = this.api.onWalletConnectionRequest(this.receive);
55
+ }
56
+ cleanup() {
57
+ const previous = this.state;
58
+ this.state = { kind: "inactive" };
59
+ this.unsubscribe?.();
60
+ this.unsubscribe = null;
61
+ if (previous.kind === "pending" || previous.kind === "connected") previous.alternative.controller.disconnect();
62
+ }
63
+ complete(alternativeId) {
64
+ const attempt = this.state;
65
+ if (attempt.kind !== "connected" || attempt.request.alternativeId !== alternativeId) return;
66
+ this.state = { kind: "idle" };
67
+ attempt.notify();
68
+ }
69
+ receive = (request) => {
70
+ if (this.state.kind !== "idle" || request.authMenuSessionId !== this.sessionId || this.seen.has(request.connectionRequestId)) return;
71
+ this.seen.add(request.connectionRequestId);
72
+ const alternative = [...this.config.current?.primary ?? [], ...this.config.current?.secondary ?? []].find(matchesRequest.bind(null, request));
73
+ if (!alternative) return;
74
+ const attempt = {
75
+ kind: "pending",
76
+ alternative,
77
+ request
78
+ };
79
+ this.state = attempt;
80
+ this.connect(attempt);
81
+ };
82
+ async connect(attempt) {
83
+ const result = await connectWalletAlternative(attempt.alternative);
84
+ if (this.state !== attempt) return;
85
+ let resolution;
86
+ switch (result.kind) {
87
+ case "connected":
88
+ this.state = {
89
+ kind: "connected",
90
+ alternative: attempt.alternative,
91
+ request: attempt.request,
92
+ notify: result.notify
93
+ };
94
+ resolution = { kind: "connected" };
95
+ break;
96
+ case "cancelled":
97
+ case "failed":
98
+ this.state = { kind: "idle" };
99
+ resolution = result;
100
+ break;
101
+ default: return assertNeverAlternative(result);
102
+ }
103
+ try {
104
+ await this.api.resolveWalletConnection({
105
+ authMenuSessionId: this.sessionId,
106
+ connectionRequestId: attempt.request.connectionRequestId,
107
+ result: resolution
108
+ });
109
+ } catch {
110
+ this.cleanup();
111
+ }
112
+ }
113
+ };
114
+ async function connectWalletAlternative(alternative) {
115
+ try {
116
+ switch (alternative.kind) {
117
+ case "near": {
118
+ const result = await alternative.controller.connect(alternative.wallet);
119
+ if (!result.ok) return {
120
+ kind: "failed",
121
+ message: result.message
122
+ };
123
+ return {
124
+ kind: "connected",
125
+ notify: alternative.onConnected.bind(null, result.value)
126
+ };
127
+ }
128
+ case "evm": {
129
+ const result = await alternative.controller.connect(alternative.wallet.id);
130
+ if (result.ok) return {
131
+ kind: "connected",
132
+ notify: alternative.onConnected.bind(null, result.value)
133
+ };
134
+ if (result.code === "rejected") return { kind: "cancelled" };
135
+ return {
136
+ kind: "failed",
137
+ message: result.message
138
+ };
139
+ }
140
+ default: return assertNeverAlternative(alternative);
141
+ }
142
+ } catch {
143
+ return {
144
+ kind: "failed",
145
+ message: "Unable to connect this wallet."
146
+ };
147
+ }
148
+ }
149
+ function matchesRequest(request, alternative) {
150
+ return request.alternativeId === walletAlternativeId(alternative);
151
+ }
152
+ function nearWalletIcon(wallet) {
153
+ switch (wallet) {
154
+ case "meteor": return meteorWalletIcon;
155
+ case "hot": return hotWalletIcon;
156
+ case "intear": return null;
157
+ default: return assertNeverAlternative(wallet);
158
+ }
159
+ }
160
+ const controllerIds = /* @__PURE__ */ new WeakMap();
161
+ let nextControllerId = 0;
162
+ function controllerId(alternative) {
163
+ const current = controllerIds.get(alternative.controller);
164
+ if (current !== void 0) return current;
165
+ const id = ++nextControllerId;
166
+ controllerIds.set(alternative.controller, id);
167
+ return id;
168
+ }
169
+ function walletAlternativesControllerKey(config) {
170
+ return JSON.stringify([...config?.primary ?? [], ...config?.secondary ?? []].map(controllerId));
171
+ }
172
+ function assertNeverAlternative(value) {
173
+ throw new Error(`Unexpected wallet alternative: ${String(value)}`);
174
+ }
175
+ //#endregion
176
+ export { WalletAlternativesBroker, describeWalletAlternatives, walletAlternativesControllerKey };
177
+
178
+ //# sourceMappingURL=walletAlternatives.js.map
@@ -31,7 +31,6 @@ import HostedSeamsAuthMenu from "./components/HostedSeamsAuthMenu/shell.js";
31
31
  import { AccountMenuButtonMock } from "./components/AccountMenuButton/AccountMenuButtonMock.js";
32
32
  import { AccountMenuButton, ProfileSettingsButton, WalletSettingsPage } from "./components/AccountMenuButton/index.js";
33
33
  import { ShowQRCode } from "./components/ShowQRCode.js";
34
- import { WalletConnectorMenu } from "./components/HostedSeamsAuthMenu/WalletConnectorMenu.js";
35
34
  import QRCodeIcon from "./components/QRCodeIcon.js";
36
35
  import { useOwnerNearOperation } from "./hooks/useOwnerNearOperation.js";
37
- export { AccountMenuButton, AccountMenuButtonMock, AccountSyncEventPhase, ActionType, AmountError, DARK_TOKENS, ExternalEvmController, ExternalEvmWalletPicker, HostedSeamsAuthMenu, KeyExportEventPhase, LIGHT_TOKENS, LinkDeviceEventPhase, MoonIcon, PASSKEY_MANAGER_DEFAULT_CONFIGS, PROFILE_MENU_ITEM_IDS, ProfileSettingsButton, QRCodeIcon, QRCodeScanner, QRScanMode, RegistrationEventPhase, SHAPE_PRESETS, SHAPE_ROUNDED, SHAPE_SQUARE, SeamsAuthMenuMock, SeamsContextProvider, SeamsWeb, SeamsWebProvider, ShowQRCode, SigningEventPhase, SunIcon, Theme, TouchIcon, TransactionReviewError, TransactionReviewHost, TxExecutionStatus, UnlockEventPhase, WALLET_FLOW_EVENT_MESSAGES, WALLET_FLOW_EVENT_STEPS, WALLET_FLOW_EVENT_VERSION, WalletConnectorMenu, WalletSettingsPage, addKey, configuredThresholdEcdsaChainTargets, createAccount, createAccountSyncFlowEvent, createKeyExportFlowEvent, createLinkDeviceFlowEvent, createRegistrationFlowEvent, createSigningFlowEvent, createUnlockFlowEvent, createWalletFlowEvent, defineSeamsConfig, deleteAccount, deleteKey, deployContract, functionCall, isWalletFlowEvent, logWalletEvents, nearAccountRefFromAccountId, parseEther, parseNear, parseUnits, seamsTestnetConfig, stake, thresholdEcdsaChainTargetFromChainFamily, thresholdEcdsaChainTargetFromConfig, thresholdEcdsaChainTargetFromConfiguredRequest, thresholdEcdsaChainTargetFromRequest, thresholdEcdsaChainTargetKey, thresholdEcdsaChainTargetsEqual, toWalletId, transfer, useAccountInput, useDeviceLinking, useExternalEvm, useNearClient, useOwnerNearOperation, useQRCamera, useSeams, useTheme, useWalletAuth, useWalletDevices, walletIdFromWalletProfile, walletSessionRefFromSession, yoctoNear };
36
+ export { AccountMenuButton, AccountMenuButtonMock, AccountSyncEventPhase, ActionType, AmountError, DARK_TOKENS, ExternalEvmController, ExternalEvmWalletPicker, HostedSeamsAuthMenu, KeyExportEventPhase, LIGHT_TOKENS, LinkDeviceEventPhase, MoonIcon, PASSKEY_MANAGER_DEFAULT_CONFIGS, PROFILE_MENU_ITEM_IDS, ProfileSettingsButton, QRCodeIcon, QRCodeScanner, QRScanMode, RegistrationEventPhase, SHAPE_PRESETS, SHAPE_ROUNDED, SHAPE_SQUARE, SeamsAuthMenuMock, SeamsContextProvider, SeamsWeb, SeamsWebProvider, ShowQRCode, SigningEventPhase, SunIcon, Theme, TouchIcon, TransactionReviewError, TransactionReviewHost, TxExecutionStatus, UnlockEventPhase, WALLET_FLOW_EVENT_MESSAGES, WALLET_FLOW_EVENT_STEPS, WALLET_FLOW_EVENT_VERSION, WalletSettingsPage, addKey, configuredThresholdEcdsaChainTargets, createAccount, createAccountSyncFlowEvent, createKeyExportFlowEvent, createLinkDeviceFlowEvent, createRegistrationFlowEvent, createSigningFlowEvent, createUnlockFlowEvent, createWalletFlowEvent, defineSeamsConfig, deleteAccount, deleteKey, deployContract, functionCall, isWalletFlowEvent, logWalletEvents, nearAccountRefFromAccountId, parseEther, parseNear, parseUnits, seamsTestnetConfig, stake, thresholdEcdsaChainTargetFromChainFamily, thresholdEcdsaChainTargetFromConfig, thresholdEcdsaChainTargetFromConfiguredRequest, thresholdEcdsaChainTargetFromRequest, thresholdEcdsaChainTargetKey, thresholdEcdsaChainTargetsEqual, toWalletId, transfer, useAccountInput, useDeviceLinking, useExternalEvm, useNearClient, useOwnerNearOperation, useQRCamera, useSeams, useTheme, useWalletAuth, useWalletDevices, walletIdFromWalletProfile, walletSessionRefFromSession, yoctoNear };