@seams/wallet 0.29.0 → 0.31.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 (264) hide show
  1. package/README.md +7 -7
  2. package/THIRD_PARTY_NOTICES.md +1 -127
  3. package/dist/.build-inputs.sha256 +1 -1
  4. package/dist/esm/SeamsWeb/SeamsWeb.js +2 -0
  5. package/dist/esm/SeamsWeb/walletIframe/client/inboundMessages.js +9 -0
  6. package/dist/esm/SeamsWeb/walletIframe/client/router.js +30 -0
  7. package/dist/esm/SeamsWeb/walletIframe/coordinator.js +18 -0
  8. package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/AuthMenuSurface.js +88 -47
  9. package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/WalletAlternativesSection.js +67 -0
  10. package/dist/esm/SeamsWeb/walletIframe/host/ui/auth-menu/mountAuthMenuSurface.js +13 -0
  11. package/dist/esm/SeamsWeb/walletIframe/host/walletMutationGuard.js +1 -0
  12. package/dist/esm/SeamsWeb/walletIframe/shared/messages.js +20 -6
  13. package/dist/esm/SeamsWeb/walletIframe/shared/walletAlternatives.js +109 -0
  14. package/dist/esm/core/config/configBuilder.js +1 -1
  15. package/dist/esm/core/config/defaultConfigs.js +9 -2
  16. package/dist/esm/core/ui/messages.js +3 -1
  17. package/dist/esm/core/ui/walletIcon.js +10 -0
  18. package/dist/esm/externalEvm/boundary.js +4 -2
  19. package/dist/esm/react/components/HostedSeamsAuthMenu/shell.js +26 -6
  20. package/dist/esm/react/components/HostedSeamsAuthMenu/walletAlternatives.js +178 -0
  21. package/dist/esm/react/index.js +1 -2
  22. package/dist/esm/react/styles/styles.css +0 -183
  23. package/dist/esm/react/styles.css +0 -1
  24. package/dist/esm/sdk/{ConfirmationDrawer-BRnd5SEf.js → ConfirmationDrawer-fyl4IDRl.js} +1 -1
  25. package/dist/{public/sdk/NonceCoordinator-CNXYrOoy.js → esm/sdk/NonceCoordinator-C1lw03Ce.js} +1 -1
  26. package/dist/esm/sdk/{activeWalletSession-BJ4B-nJo.js → activeWalletSession-HAOgRKzn.js} +1 -1
  27. package/dist/esm/sdk/{adapters-B2k8y0MB.js → adapters-BY1wGpm5.js} +1 -1
  28. package/dist/esm/sdk/appearance-token-vars-CzlRDVQ7.js +1 -0
  29. package/dist/esm/sdk/{authorization-gVWwKwav.js → authorization-D_NueqAv.js} +1 -1
  30. package/dist/esm/sdk/{clientSessionPersistenceState-BxpITYM_.js → clientSessionPersistenceState-B3gU3515.js} +1 -1
  31. package/dist/esm/sdk/{commitQueue-C1wkey4q.js → commitQueue-CbyuhEW9.js} +1 -1
  32. package/dist/{public/sdk/confirm-ui-Dx6c4-Rk.js → esm/sdk/confirm-ui-DWFcGTsT.js} +1 -1
  33. package/dist/{public/sdk/device-linking-_o3_fgiG.js → esm/sdk/device-linking-BL2aDEUF.js} +1 -1
  34. package/dist/esm/sdk/{deviceLinkApproval-CObsEWBa.js → deviceLinkApproval-C4T8XAmi.js} +1 -1
  35. package/dist/esm/sdk/{digestEncoding-34kXJoJr.js → digestEncoding-Rx8Vjy4J.js} +1 -1
  36. package/dist/esm/sdk/{display-CUWg48tD.js → display-8NGPOhQT.js} +1 -1
  37. package/dist/{public/sdk/ecdsaCapabilityManifest--1Ztngfx.js → esm/sdk/ecdsaCapabilityManifest-BbPXL-qh.js} +1 -1
  38. package/dist/{public/sdk/ecdsaDerivationClientWasm-DJh2uN-q.js → esm/sdk/ecdsaDerivationClientWasm-GCt9yVsd.js} +1 -1
  39. package/dist/{public/sdk/ecdsaDerivationExport-BUUUGc6o.js → esm/sdk/ecdsaDerivationExport-jm2VBMz_.js} +1 -1
  40. package/dist/esm/sdk/{emailOtpEcdsaDerivationIdentity-Qd4pBwHv.js → emailOtpEcdsaDerivationIdentity-DJmMyqL-.js} +1 -1
  41. package/dist/esm/sdk/{export-viewer-host-O0OV1Oou.js → export-viewer-host-TzgdJQuZ.js} +1 -1
  42. package/dist/{public/sdk/exportKeypairOperation-DkqY9Bpf.js → esm/sdk/exportKeypairOperation-B9_ulzNz.js} +1 -1
  43. package/dist/esm/sdk/host-DltV2Oan.js +1 -0
  44. package/dist/esm/sdk/{indexedDB-CA4tGqkr.js → indexedDB-BqsYXybq.js} +1 -1
  45. package/dist/esm/sdk/{lanes-vBKm6yBJ.js → lanes-0WT2w1Xz.js} +1 -1
  46. package/dist/esm/sdk/{localOnly-U_MucUAe.js → localOnly-DFrtrfdO.js} +1 -1
  47. package/dist/esm/sdk/{mountExportPrivateKeySurface-C2-fnvP6.js → mountExportPrivateKeySurface-D8juRQJM.js} +1 -1
  48. package/dist/{public/sdk/mountRecoveryCodeBackupSurface-C_tJNPJX.js → esm/sdk/mountRecoveryCodeBackupSurface-CMtByh-L.js} +1 -1
  49. package/dist/esm/sdk/{nearEd25519YaoSigningPreparation-CnbgQfZc.js → nearEd25519YaoSigningPreparation-Cz2Gb95g.js} +1 -1
  50. package/dist/esm/sdk/{operationFingerprint-Bas59T7L.js → operationFingerprint-GKEY-X5I.js} +1 -1
  51. package/dist/esm/sdk/ownerNearOperation-DCxxHcwX.js +1 -0
  52. package/dist/esm/sdk/{pendingWalletRecoveryCodeBackup-DXFrQmO5.js → pendingWalletRecoveryCodeBackup-8iMhQU-E.js} +1 -1
  53. package/dist/{public/sdk/presignaturePool-Dq4RhzXn.js → esm/sdk/presignaturePool-CaI45td2.js} +1 -1
  54. package/dist/esm/sdk/{presignatures-CkhuZ0YQ.js → presignatures-B9KnQyfE.js} +1 -1
  55. package/dist/esm/sdk/{recovery-entrypoint-s9OoKBcl.js → recovery-entrypoint-DA2FGLG6.js} +1 -1
  56. package/dist/esm/sdk/registration-Coh0_Nva.js +1 -0
  57. package/dist/esm/sdk/{registration-D3p7muCc.js → registration-XNyt1YRK.js} +1 -1
  58. package/dist/esm/sdk/{registrationIntent-C1-Kyx_-.js → registrationIntent-Cb3tggIM.js} +1 -1
  59. package/dist/{public/sdk/requireStepUpAuth-iVo6h_U-.js → esm/sdk/requireStepUpAuth-ByMTPBu4.js} +1 -1
  60. package/dist/esm/sdk/resealedEnvelopeResult-DKY5fVNY.js +1 -0
  61. package/dist/esm/sdk/routerAbNormalSigning-CPLDkttX.js +1 -0
  62. package/dist/esm/sdk/router_ab_ed25519_yao_client_bg.wasm +0 -0
  63. package/dist/esm/sdk/runtime-auth-CP6P681o.js +1 -0
  64. package/dist/esm/sdk/{runtime-device-link-qmYvGep9.js → runtime-device-link-CGDZQK-D.js} +1 -1
  65. package/dist/{public/sdk/runtime-ecdsa-tempo-Zh95TuLV.js → esm/sdk/runtime-ecdsa-tempo-BiJYKWK4.js} +1 -1
  66. package/dist/esm/sdk/{runtime-email-otp-CnLuW4H1.js → runtime-email-otp-B0XCNDRb.js} +1 -1
  67. package/dist/esm/sdk/{runtime-export-m8lvrXtw.js → runtime-export-CXxv6KIx.js} +1 -1
  68. package/dist/esm/sdk/{runtime-near-BiXzXXhH.js → runtime-near-CuyS57wu.js} +1 -1
  69. package/dist/esm/sdk/runtime-preferences-B2WBUZO7.js +1 -0
  70. package/dist/esm/sdk/runtime-recovery-KwVdSe94.js +1 -0
  71. package/dist/esm/sdk/{runtime-recovery-codes-B033ake_.js → runtime-recovery-codes-CFOWDVd9.js} +1 -1
  72. package/dist/esm/sdk/{runtimeContext-RNS2E5wy.js → runtimeContext-Iy1vecX0.js} +3 -3
  73. package/dist/esm/sdk/{secp256k1-DPeaOjM0.js → secp256k1-sDDAa4Ga.js} +1 -1
  74. package/dist/{public/sdk/signEvmFamily-Cksw3RpU.js → esm/sdk/signEvmFamily-CMrXkVsZ.js} +1 -1
  75. package/dist/esm/sdk/{signEvmFamilyWithUiConfirmForTempo-B7p9UVix.js → signEvmFamilyWithUiConfirmForTempo-CnRoo0e8.js} +1 -1
  76. package/dist/esm/sdk/{signEvmWithUiConfirm-B14zYdwE.js → signEvmWithUiConfirm-yITc3ZvP.js} +1 -1
  77. package/dist/esm/sdk/{signNear-D0rFEYP1.js → signNear-DyFk--I3.js} +1 -1
  78. package/dist/{public/sdk/signingFlow-Bd1X0e-1.js → esm/sdk/signingFlow-DTP4D19E.js} +1 -1
  79. package/dist/{public/sdk/signingQueue-DoUBeaCv.js → esm/sdk/signingQueue-Dy5mYMus.js} +1 -1
  80. package/dist/esm/sdk/{thresholdEcdsa-BxfOZmiR.js → thresholdEcdsa-CRfx6RP1.js} +1 -1
  81. package/dist/esm/sdk/{trace-BnhLKxcu.js → trace-BA8jya7O.js} +1 -1
  82. package/dist/{public/sdk/transactionState-G_FPe-U8.js → esm/sdk/transactionState-BCbaT2hO.js} +1 -1
  83. package/dist/esm/sdk/tx-confirm-ui.js +3 -1
  84. package/dist/esm/sdk/{types-A-w1cYlJ.js → types-D2Zk1W7I.js} +1 -1
  85. package/dist/{public/sdk/unlockedEd25519ExportRootCapability-5F1egCSv.js → esm/sdk/unlockedEd25519ExportRootCapability-BbGMlikr.js} +1 -1
  86. package/dist/esm/sdk/voiceid-host.js +1 -1
  87. package/dist/esm/sdk/wallet-iframe-host-ecdsa.js +1 -1
  88. package/dist/esm/sdk/wallet-iframe-host-full.js +1 -1
  89. package/dist/esm/sdk/wallet-iframe-host-near.js +1 -1
  90. package/dist/esm/sdk/wallet-iframe-host-runtime.js +1 -1
  91. package/dist/esm/sdk/{wallet-recovery-DXdm68_Q.js → wallet-recovery-Bfm-oUoP.js} +1 -1
  92. package/dist/esm/sdk/wallet-ui.css +1 -1
  93. package/dist/{public/sdk/walletAuthMethodRecord-BW-XV4fv.js → esm/sdk/walletAuthMethodRecord--fvGr8r1.js} +1 -1
  94. package/dist/{public/sdk/walletAuthority-DbGaSw7D.js → esm/sdk/walletAuthority-CU9nO0Ze.js} +1 -1
  95. package/dist/esm/sdk/{walletCustodyEcdsaContinuity-BnyL1Ryu.js → walletCustodyEcdsaContinuity-BUdDyRl_.js} +1 -1
  96. package/dist/esm/sdk/{walletDbName-Ca0rCq5r.js → walletDbName-B6-CV_Rq.js} +1 -1
  97. package/dist/esm/sdk/{walletOwnerOperation-CScYv2K6.js → walletOwnerOperation-BJPxzo-k.js} +1 -1
  98. package/dist/esm/sdk/{walletOwnershipGeneration-BZc6UKqX.js → walletOwnershipGeneration-B3uE9GRG.js} +1 -1
  99. package/dist/{public/sdk/walletRecoveryAdminProof-DdwikrW3.js → esm/sdk/walletRecoveryAdminProof-BmZaP0Q8.js} +1 -1
  100. package/dist/{public/sdk/walletRecoveryCommit-DbAoiJp5.js → esm/sdk/walletRecoveryCommit-CSYNbYNd.js} +1 -1
  101. package/dist/esm/sdk/{walletSessionAuthorizationStatus-GhcGvDCX.js → walletSessionAuthorizationStatus-CQ3qA9tI.js} +1 -1
  102. package/dist/{public/sdk/walletSessionAuthorizationStore-BivTUoKY.js → esm/sdk/walletSessionAuthorizationStore-CGt-s5fX.js} +1 -1
  103. package/dist/esm/shared-ts/src/utils/index.js +1 -1
  104. package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker_bg.wasm +0 -0
  105. package/dist/esm/wasm/router_ab_ecdsa_client/pkg/router_ab_ecdsa_client_bg.wasm +0 -0
  106. package/dist/esm/wasm/router_ab_ed25519_yao_client/pkg/router_ab_ed25519_yao_client.d.ts +212 -233
  107. package/dist/esm/wasm/router_ab_ed25519_yao_client/pkg/router_ab_ed25519_yao_client.js +675 -694
  108. package/dist/esm/wasm/router_ab_ed25519_yao_client/pkg/router_ab_ed25519_yao_client_bg.wasm +0 -0
  109. package/dist/public/headers.manifest.json +1 -1
  110. package/dist/public/sdk/{ConfirmationDrawer-BRnd5SEf.js → ConfirmationDrawer-fyl4IDRl.js} +1 -1
  111. package/dist/{esm/sdk/NonceCoordinator-CNXYrOoy.js → public/sdk/NonceCoordinator-C1lw03Ce.js} +1 -1
  112. package/dist/public/sdk/{activeWalletSession-BJ4B-nJo.js → activeWalletSession-HAOgRKzn.js} +1 -1
  113. package/dist/public/sdk/{adapters-B2k8y0MB.js → adapters-BY1wGpm5.js} +1 -1
  114. package/dist/public/sdk/appearance-token-vars-CzlRDVQ7.js +1 -0
  115. package/dist/public/sdk/{authorization-gVWwKwav.js → authorization-D_NueqAv.js} +1 -1
  116. package/dist/public/sdk/{clientSessionPersistenceState-BxpITYM_.js → clientSessionPersistenceState-B3gU3515.js} +1 -1
  117. package/dist/public/sdk/{commitQueue-C1wkey4q.js → commitQueue-CbyuhEW9.js} +1 -1
  118. package/dist/{esm/sdk/confirm-ui-Dx6c4-Rk.js → public/sdk/confirm-ui-DWFcGTsT.js} +1 -1
  119. package/dist/{esm/sdk/device-linking-_o3_fgiG.js → public/sdk/device-linking-BL2aDEUF.js} +1 -1
  120. package/dist/public/sdk/{deviceLinkApproval-CObsEWBa.js → deviceLinkApproval-C4T8XAmi.js} +1 -1
  121. package/dist/public/sdk/{digestEncoding-34kXJoJr.js → digestEncoding-Rx8Vjy4J.js} +1 -1
  122. package/dist/public/sdk/{display-CUWg48tD.js → display-8NGPOhQT.js} +1 -1
  123. package/dist/{esm/sdk/ecdsaCapabilityManifest--1Ztngfx.js → public/sdk/ecdsaCapabilityManifest-BbPXL-qh.js} +1 -1
  124. package/dist/{esm/sdk/ecdsaDerivationClientWasm-DJh2uN-q.js → public/sdk/ecdsaDerivationClientWasm-GCt9yVsd.js} +1 -1
  125. package/dist/{esm/sdk/ecdsaDerivationExport-BUUUGc6o.js → public/sdk/ecdsaDerivationExport-jm2VBMz_.js} +1 -1
  126. package/dist/public/sdk/{emailOtpEcdsaDerivationIdentity-Qd4pBwHv.js → emailOtpEcdsaDerivationIdentity-DJmMyqL-.js} +1 -1
  127. package/dist/public/sdk/{export-viewer-host-O0OV1Oou.js → export-viewer-host-TzgdJQuZ.js} +1 -1
  128. package/dist/{esm/sdk/exportKeypairOperation-DkqY9Bpf.js → public/sdk/exportKeypairOperation-B9_ulzNz.js} +1 -1
  129. package/dist/public/sdk/host-DltV2Oan.js +1 -0
  130. package/dist/public/sdk/{indexedDB-CA4tGqkr.js → indexedDB-BqsYXybq.js} +1 -1
  131. package/dist/public/sdk/{lanes-vBKm6yBJ.js → lanes-0WT2w1Xz.js} +1 -1
  132. package/dist/public/sdk/{localOnly-U_MucUAe.js → localOnly-DFrtrfdO.js} +1 -1
  133. package/dist/public/sdk/{mountExportPrivateKeySurface-C2-fnvP6.js → mountExportPrivateKeySurface-D8juRQJM.js} +1 -1
  134. package/dist/{esm/sdk/mountRecoveryCodeBackupSurface-C_tJNPJX.js → public/sdk/mountRecoveryCodeBackupSurface-CMtByh-L.js} +1 -1
  135. package/dist/public/sdk/{nearEd25519YaoSigningPreparation-CnbgQfZc.js → nearEd25519YaoSigningPreparation-Cz2Gb95g.js} +1 -1
  136. package/dist/public/sdk/{operationFingerprint-Bas59T7L.js → operationFingerprint-GKEY-X5I.js} +1 -1
  137. package/dist/public/sdk/ownerNearOperation-DCxxHcwX.js +1 -0
  138. package/dist/public/sdk/{pendingWalletRecoveryCodeBackup-DXFrQmO5.js → pendingWalletRecoveryCodeBackup-8iMhQU-E.js} +1 -1
  139. package/dist/{esm/sdk/presignaturePool-Dq4RhzXn.js → public/sdk/presignaturePool-CaI45td2.js} +1 -1
  140. package/dist/public/sdk/{presignatures-CkhuZ0YQ.js → presignatures-B9KnQyfE.js} +1 -1
  141. package/dist/public/sdk/{recovery-entrypoint-s9OoKBcl.js → recovery-entrypoint-DA2FGLG6.js} +1 -1
  142. package/dist/public/sdk/registration-Coh0_Nva.js +1 -0
  143. package/dist/public/sdk/{registration-D3p7muCc.js → registration-XNyt1YRK.js} +1 -1
  144. package/dist/public/sdk/{registrationIntent-C1-Kyx_-.js → registrationIntent-Cb3tggIM.js} +1 -1
  145. package/dist/{esm/sdk/requireStepUpAuth-iVo6h_U-.js → public/sdk/requireStepUpAuth-ByMTPBu4.js} +1 -1
  146. package/dist/public/sdk/resealedEnvelopeResult-DKY5fVNY.js +1 -0
  147. package/dist/public/sdk/routerAbNormalSigning-CPLDkttX.js +1 -0
  148. package/dist/public/sdk/router_ab_ed25519_yao_client_bg.wasm +0 -0
  149. package/dist/public/sdk/runtime-auth-CP6P681o.js +1 -0
  150. package/dist/public/sdk/{runtime-device-link-qmYvGep9.js → runtime-device-link-CGDZQK-D.js} +1 -1
  151. package/dist/{esm/sdk/runtime-ecdsa-tempo-Zh95TuLV.js → public/sdk/runtime-ecdsa-tempo-BiJYKWK4.js} +1 -1
  152. package/dist/public/sdk/{runtime-email-otp-CnLuW4H1.js → runtime-email-otp-B0XCNDRb.js} +1 -1
  153. package/dist/public/sdk/{runtime-export-m8lvrXtw.js → runtime-export-CXxv6KIx.js} +1 -1
  154. package/dist/public/sdk/{runtime-near-BiXzXXhH.js → runtime-near-CuyS57wu.js} +1 -1
  155. package/dist/public/sdk/runtime-preferences-B2WBUZO7.js +1 -0
  156. package/dist/public/sdk/runtime-recovery-KwVdSe94.js +1 -0
  157. package/dist/public/sdk/{runtime-recovery-codes-B033ake_.js → runtime-recovery-codes-CFOWDVd9.js} +1 -1
  158. package/dist/public/sdk/{runtimeContext-RNS2E5wy.js → runtimeContext-Iy1vecX0.js} +3 -3
  159. package/dist/public/sdk/{secp256k1-DPeaOjM0.js → secp256k1-sDDAa4Ga.js} +1 -1
  160. package/dist/{esm/sdk/signEvmFamily-Cksw3RpU.js → public/sdk/signEvmFamily-CMrXkVsZ.js} +1 -1
  161. package/dist/public/sdk/{signEvmFamilyWithUiConfirmForTempo-B7p9UVix.js → signEvmFamilyWithUiConfirmForTempo-CnRoo0e8.js} +1 -1
  162. package/dist/public/sdk/{signEvmWithUiConfirm-B14zYdwE.js → signEvmWithUiConfirm-yITc3ZvP.js} +1 -1
  163. package/dist/public/sdk/{signNear-D0rFEYP1.js → signNear-DyFk--I3.js} +1 -1
  164. package/dist/{esm/sdk/signingFlow-Bd1X0e-1.js → public/sdk/signingFlow-DTP4D19E.js} +1 -1
  165. package/dist/{esm/sdk/signingQueue-DoUBeaCv.js → public/sdk/signingQueue-Dy5mYMus.js} +1 -1
  166. package/dist/public/sdk/{thresholdEcdsa-BxfOZmiR.js → thresholdEcdsa-CRfx6RP1.js} +1 -1
  167. package/dist/public/sdk/{trace-BnhLKxcu.js → trace-BA8jya7O.js} +1 -1
  168. package/dist/{esm/sdk/transactionState-G_FPe-U8.js → public/sdk/transactionState-BCbaT2hO.js} +1 -1
  169. package/dist/public/sdk/tx-confirm-ui.js +3 -1
  170. package/dist/public/sdk/{types-A-w1cYlJ.js → types-D2Zk1W7I.js} +1 -1
  171. package/dist/{esm/sdk/unlockedEd25519ExportRootCapability-5F1egCSv.js → public/sdk/unlockedEd25519ExportRootCapability-BbGMlikr.js} +1 -1
  172. package/dist/public/sdk/voiceid-host.js +1 -1
  173. package/dist/public/sdk/wallet-iframe-host-ecdsa.js +1 -1
  174. package/dist/public/sdk/wallet-iframe-host-full.js +1 -1
  175. package/dist/public/sdk/wallet-iframe-host-near.js +1 -1
  176. package/dist/public/sdk/wallet-iframe-host-runtime.js +1 -1
  177. package/dist/public/sdk/{wallet-recovery-DXdm68_Q.js → wallet-recovery-Bfm-oUoP.js} +1 -1
  178. package/dist/public/sdk/wallet-ui.css +1 -1
  179. package/dist/{esm/sdk/walletAuthMethodRecord-BW-XV4fv.js → public/sdk/walletAuthMethodRecord--fvGr8r1.js} +1 -1
  180. package/dist/{esm/sdk/walletAuthority-DbGaSw7D.js → public/sdk/walletAuthority-CU9nO0Ze.js} +1 -1
  181. package/dist/public/sdk/{walletCustodyEcdsaContinuity-BnyL1Ryu.js → walletCustodyEcdsaContinuity-BUdDyRl_.js} +1 -1
  182. package/dist/public/sdk/{walletDbName-Ca0rCq5r.js → walletDbName-B6-CV_Rq.js} +1 -1
  183. package/dist/public/sdk/{walletOwnerOperation-CScYv2K6.js → walletOwnerOperation-BJPxzo-k.js} +1 -1
  184. package/dist/public/sdk/{walletOwnershipGeneration-BZc6UKqX.js → walletOwnershipGeneration-B3uE9GRG.js} +1 -1
  185. package/dist/{esm/sdk/walletRecoveryAdminProof-DdwikrW3.js → public/sdk/walletRecoveryAdminProof-BmZaP0Q8.js} +1 -1
  186. package/dist/{esm/sdk/walletRecoveryCommit-DbAoiJp5.js → public/sdk/walletRecoveryCommit-CSYNbYNd.js} +1 -1
  187. package/dist/public/sdk/{walletSessionAuthorizationStatus-GhcGvDCX.js → walletSessionAuthorizationStatus-CQ3qA9tI.js} +1 -1
  188. package/dist/{esm/sdk/walletSessionAuthorizationStore-BivTUoKY.js → public/sdk/walletSessionAuthorizationStore-CGt-s5fX.js} +1 -1
  189. package/dist/public/sdk/workers/device-linking-key.worker.js +454 -947
  190. package/dist/public/sdk/workers/email-otp.worker.js +588 -820
  191. package/dist/public/sdk/workers/email_otp_runtime_bg.wasm +0 -0
  192. package/dist/public/sdk/workers/evm_crypto_bg.wasm +0 -0
  193. package/dist/public/sdk/workers/passkey-mpc-export.worker.js +572 -804
  194. package/dist/public/sdk/workers/router_ab_ecdsa_client_bg.wasm +0 -0
  195. package/dist/public/sdk/workers/router_ab_ed25519_yao_client_bg.wasm +0 -0
  196. package/dist/public/sdk/workers/shamir3pass_runtime_bg.wasm +0 -0
  197. package/dist/public/sdk/workers/tempo_signer_bg.wasm +0 -0
  198. package/dist/public/sdk/workers/wallet-custody-ceremony.worker.js +524 -971
  199. package/dist/public/sdk/workers/wallet_custody_ceremony_bg.wasm +0 -0
  200. package/dist/public/sdk/workers/wasm_signer_worker_bg.wasm +0 -0
  201. package/dist/public/wallet-assets.manifest.json +153 -153
  202. package/dist/public/wallet-service/index.html +4 -4
  203. package/dist/types/wallet/src/SeamsWeb/index.d.ts +1 -0
  204. package/dist/types/wallet/src/SeamsWeb/publicApi/types.d.ts +3 -0
  205. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/inboundMessages.d.ts +5 -0
  206. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/router.d.ts +3 -0
  207. package/dist/types/wallet/src/SeamsWeb/walletIframe/coordinator.d.ts +6 -0
  208. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/auth-menu/controller.d.ts +2 -0
  209. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/auth-menu/domain.d.ts +3 -0
  210. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/auth-menu/session.d.ts +4 -0
  211. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/requestRouter.d.ts +1 -1
  212. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/ui/auth-menu/AuthMenuSurface.d.ts +5 -0
  213. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/ui/auth-menu/WalletAlternativesSection.d.ts +13 -0
  214. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/ui/auth-menu/mountAuthMenuSurface.d.ts +3 -0
  215. package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/messages.d.ts +11 -4
  216. package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/walletAlternatives.d.ts +52 -0
  217. package/dist/types/wallet/src/core/types/seams.d.ts +2 -2
  218. package/dist/types/wallet/src/core/ui/messages.d.ts +1 -1
  219. package/dist/types/wallet/src/core/ui/walletIcon.d.ts +3 -0
  220. package/dist/types/wallet/src/index.d.ts +1 -0
  221. package/dist/types/wallet/src/react/components/HostedSeamsAuthMenu/public.d.ts +1 -0
  222. package/dist/types/wallet/src/react/components/HostedSeamsAuthMenu/types.d.ts +4 -0
  223. package/dist/types/wallet/src/react/components/HostedSeamsAuthMenu/walletAlternatives.d.ts +48 -0
  224. package/dist/types/wallet/src/react/index.d.ts +1 -2
  225. package/dist/workers/device-linking-key.worker.js +454 -947
  226. package/dist/workers/email-otp.worker.js +588 -820
  227. package/dist/workers/email_otp_runtime_bg.wasm +0 -0
  228. package/dist/workers/evm_crypto_bg.wasm +0 -0
  229. package/dist/workers/passkey-mpc-export.worker.js +572 -804
  230. package/dist/workers/router_ab_ecdsa_client_bg.wasm +0 -0
  231. package/dist/workers/router_ab_ed25519_yao_client_bg.wasm +0 -0
  232. package/dist/workers/shamir3pass_runtime_bg.wasm +0 -0
  233. package/dist/workers/tempo_signer_bg.wasm +0 -0
  234. package/dist/workers/wallet-custody-ceremony.worker.js +524 -971
  235. package/dist/workers/wallet_custody_ceremony_bg.wasm +0 -0
  236. package/dist/workers/wasm_signer_worker_bg.wasm +0 -0
  237. package/package.json +17 -17
  238. package/dist/esm/react/components/HostedSeamsAuthMenu/WalletConnectorMenu.css +0 -182
  239. package/dist/esm/react/components/HostedSeamsAuthMenu/WalletConnectorMenu.js +0 -315
  240. package/dist/esm/sdk/appearance-token-vars-DkF3EBbF.js +0 -1
  241. package/dist/esm/sdk/host-BeE2dIU4.js +0 -1
  242. package/dist/esm/sdk/ownerNearOperation-DjNDxW3_.js +0 -1
  243. package/dist/esm/sdk/registration-CTtTocyo.js +0 -1
  244. package/dist/esm/sdk/resealedEnvelopeResult-DXDo-72P.js +0 -1
  245. package/dist/esm/sdk/routerAbNormalSigning-DVFFkNhJ.js +0 -1
  246. package/dist/esm/sdk/runtime-auth-Dsmw_dUA.js +0 -1
  247. package/dist/esm/sdk/runtime-preferences-DlKHDIjb.js +0 -1
  248. package/dist/esm/sdk/runtime-recovery-C6lS71Jp.js +0 -1
  249. package/dist/public/sdk/appearance-token-vars-DkF3EBbF.js +0 -1
  250. package/dist/public/sdk/host-BeE2dIU4.js +0 -1
  251. package/dist/public/sdk/ownerNearOperation-DjNDxW3_.js +0 -1
  252. package/dist/public/sdk/registration-CTtTocyo.js +0 -1
  253. package/dist/public/sdk/resealedEnvelopeResult-DXDo-72P.js +0 -1
  254. package/dist/public/sdk/routerAbNormalSigning-DVFFkNhJ.js +0 -1
  255. package/dist/public/sdk/runtime-auth-Dsmw_dUA.js +0 -1
  256. package/dist/public/sdk/runtime-preferences-DlKHDIjb.js +0 -1
  257. package/dist/public/sdk/runtime-recovery-C6lS71Jp.js +0 -1
  258. package/dist/types/wallet/src/react/components/HostedSeamsAuthMenu/WalletConnectorMenu.d.ts +0 -31
  259. /package/dist/esm/sdk/{canonicalPrimitives-Jd3i_Ngz.js → canonicalPrimitives-DKeS3M40.js} +0 -0
  260. /package/dist/esm/sdk/{capabilityKinds-DVlGMspk.js → capabilityKinds-Cafn86Y1.js} +0 -0
  261. /package/dist/esm/sdk/{walletIframeIdentity-CpgyEnKg.js → walletIframeIdentity-Cz82I_Uh.js} +0 -0
  262. /package/dist/public/sdk/{canonicalPrimitives-Jd3i_Ngz.js → canonicalPrimitives-DKeS3M40.js} +0 -0
  263. /package/dist/public/sdk/{capabilityKinds-DVlGMspk.js → capabilityKinds-Cafn86Y1.js} +0 -0
  264. /package/dist/public/sdk/{walletIframeIdentity-CpgyEnKg.js → walletIframeIdentity-Cz82I_Uh.js} +0 -0
@@ -2,6 +2,7 @@ import { isLinkedDeviceTargetEmailAddressV1 } from "../../../../../core/types/li
2
2
  import "../../../../../shared-ts/src/wallet-recovery/recoveryCodes.js";
3
3
  import { walletDisplayText, walletText } from "../../../../../core/ui/messages.js";
4
4
  import { WalletLocaleContext, WalletText } from "../../../../../core/signingEngine/uiConfirm/ui/preact/WalletLocale.js";
5
+ import { WalletAlternativesSection } from "./WalletAlternativesSection.js";
5
6
  import { recoveryInputCharacters, rejectedRecoveryCharacters, renderRecoveryCodeGroups } from "./recovery-code-input.js";
6
7
  import { AUTH_MENU_WAITING_PROMPTS, isAuthMenuActionReady, isAuthMenuGoogleActionReady, isAuthMenuLoadingStatus, isAuthMenuReady } from "../../auth-menu/domain.js";
7
8
  import { AUTH_MENU_ACCOUNT_LIST_ID, AUTH_MENU_TITLE_ID, accountGroups, accountSecondaryText, authViewKey, menuNotice, modeLabel, modeSwitchCopy, otpCodeDigits, passkeyButtonLabel, recoveryAnnouncement, recoveryBackLabel, recoveryCaretAtPoint, recoveryNavigationLocked, renderDemoEmailCode, renderOtpCodeDigit, savedAccountsTriggerLabel, selectedAccountPrimaryText, selectedLoginAccount } from "./presentation.js";
@@ -13,7 +14,6 @@ import { linkDeviceDotRing, linkDeviceEmailOtpPresentation } from "./linkDeviceB
13
14
  import { Component, Fragment } from "preact";
14
15
  import { Fragment as Fragment$1, jsx, jsxs } from "preact/jsx-runtime";
15
16
  //#region src/SeamsWeb/walletIframe/host/ui/auth-menu/AuthMenuSurface.tsx
16
- /** @jsxImportSource preact */
17
17
  const ACCOUNT_MENU_EXIT_MS = 160;
18
18
  var AuthMenuSurface = class extends Component {
19
19
  static contextType = WalletLocaleContext;
@@ -94,7 +94,10 @@ var AuthMenuSurface = class extends Component {
94
94
  const current = this.viewModel;
95
95
  if (previous?.kind === "recovery" && current.kind !== "recovery") {
96
96
  this.previousRecoveryStage = null;
97
- this.props.element.querySelector("[data-recovery-action]")?.focus();
97
+ const action = this.props.element.querySelector("[data-recovery-action]");
98
+ const expander = action?.closest("details");
99
+ if (expander) expander.open = true;
100
+ action?.focus();
98
101
  return;
99
102
  }
100
103
  if (current.kind !== "recovery") return;
@@ -183,8 +186,15 @@ var AuthMenuSurface = class extends Component {
183
186
  }
184
187
  };
185
188
  focusableElements() {
186
- return Array.from(this.props.element.querySelectorAll("button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), a[href], [tabindex]:not([tabindex=\"-1\"])"));
189
+ return Array.from(this.props.element.querySelectorAll("button, input, select, textarea, summary, a[href], [tabindex]:not([tabindex=\"-1\"])")).filter(isAvailableMenuControl);
187
190
  }
191
+ onDismiss = () => {
192
+ if (recoveryNavigationLocked(this.viewModel)) return;
193
+ this.emitIntent({
194
+ kind: "close",
195
+ reason: "close_button"
196
+ });
197
+ };
188
198
  onBackClick = () => {
189
199
  this.emitIntent({ kind: "back" });
190
200
  };
@@ -501,7 +511,19 @@ var AuthMenuSurface = class extends Component {
501
511
  children: [
502
512
  /* @__PURE__ */ jsx(PadlockIcon, {}),
503
513
  " ",
504
- /* @__PURE__ */ jsx("span", { children: viewModel.hostname })
514
+ /* @__PURE__ */ jsx("span", { children: viewModel.hostname }),
515
+ /* @__PURE__ */ jsx("button", {
516
+ type: "button",
517
+ class: "seams-menu-dismiss",
518
+ "aria-label": viewModel.closeLabel,
519
+ disabled: recoveryNavigationLocked(viewModel),
520
+ onClick: this.onDismiss,
521
+ "data-auth-menu-dismiss": true,
522
+ children: /* @__PURE__ */ jsx("span", {
523
+ "aria-hidden": "true",
524
+ children: "×"
525
+ })
526
+ })
505
527
  ]
506
528
  }),
507
529
  /* @__PURE__ */ jsxs("div", {
@@ -549,12 +571,28 @@ var AuthMenuSurface = class extends Component {
549
571
  if (viewModel.kind === "google_registration") return this.renderGoogleRegistration(viewModel);
550
572
  return /* @__PURE__ */ jsxs(Fragment$1, { children: [
551
573
  this.renderMenuHeader(viewModel),
552
- " ",
553
- this.renderPasskeyInput(viewModel),
554
- this.renderAuthMethods(viewModel),
555
- " ",
556
- this.renderOtherOptions(),
557
- this.renderIntentSwitch(viewModel)
574
+ /* @__PURE__ */ jsxs("fieldset", {
575
+ class: "seams-connection-controls",
576
+ disabled: this.props.walletConnection.kind === "pending",
577
+ children: [
578
+ this.renderPasskeyInput(viewModel),
579
+ this.renderAuthMethods(viewModel),
580
+ /* @__PURE__ */ jsx(WalletAlternativesSection, {
581
+ alternatives: this.props.walletAlternatives,
582
+ onIntent: this.props.onIntent
583
+ }),
584
+ this.renderOtherOptions(),
585
+ this.renderIntentSwitch(viewModel)
586
+ ]
587
+ }),
588
+ this.props.walletConnection.kind === "pending" && /* @__PURE__ */ jsx("p", {
589
+ role: "status",
590
+ children: /* @__PURE__ */ jsx(WalletText, { copy: "Complete the request in your wallet." })
591
+ }),
592
+ this.props.walletConnection.kind === "failed" && /* @__PURE__ */ jsx("p", {
593
+ role: "alert",
594
+ children: this.props.walletConnection.message
595
+ })
558
596
  ] });
559
597
  }
560
598
  renderMenuHeader(viewModel) {
@@ -766,44 +804,44 @@ var AuthMenuSurface = class extends Component {
766
804
  }) });
767
805
  }
768
806
  renderOtherOptions() {
769
- return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("div", {
770
- class: "seams-menu-options-label",
771
- children: /* @__PURE__ */ jsx(WalletText, { message: "Other options" })
772
- }), /* @__PURE__ */ jsxs("div", {
773
- class: "seams-menu-options",
774
- children: [/* @__PURE__ */ jsxs("button", {
775
- class: "seams-menu-option",
776
- type: "button",
777
- onClick: this.onLinkDeviceOpen,
778
- children: [
779
- /* @__PURE__ */ jsx("span", {
780
- class: "seams-menu-option-icon",
781
- children: linkDeviceIcon()
782
- }),
783
- /* @__PURE__ */ jsxs("span", {
784
- class: "seams-menu-option-text",
785
- children: [/* @__PURE__ */ jsx(WalletText, { message: "Link this device" }), /* @__PURE__ */ jsx("small", { children: /* @__PURE__ */ jsx(WalletText, { message: "Scan a code with your other device" }) })]
786
- }),
787
- chevronIcon()
788
- ]
789
- }), /* @__PURE__ */ jsxs("button", {
790
- class: "seams-menu-option",
791
- type: "button",
792
- "data-recovery-action": true,
793
- onClick: this.onRecoveryOpen,
794
- children: [
795
- /* @__PURE__ */ jsx("span", {
796
- class: "seams-menu-option-icon",
797
- children: recoveryIcon()
798
- }),
799
- /* @__PURE__ */ jsxs("span", {
800
- class: "seams-menu-option-text",
801
- children: [/* @__PURE__ */ jsx(WalletText, { message: "Recover wallet" }), /* @__PURE__ */ jsx("small", { children: /* @__PURE__ */ jsx(WalletText, { message: "Use your recovery code" }) })]
802
- }),
803
- chevronIcon()
804
- ]
807
+ return /* @__PURE__ */ jsxs("details", {
808
+ class: "seams-menu-expander",
809
+ children: [/* @__PURE__ */ jsxs("summary", { children: [/* @__PURE__ */ jsx(WalletText, { copy: "Recover or link wallet" }), chevronIcon()] }), /* @__PURE__ */ jsxs("div", {
810
+ class: "seams-menu-options",
811
+ children: [/* @__PURE__ */ jsxs("button", {
812
+ class: "seams-menu-option",
813
+ type: "button",
814
+ onClick: this.onLinkDeviceOpen,
815
+ children: [
816
+ /* @__PURE__ */ jsx("span", {
817
+ class: "seams-menu-option-icon",
818
+ children: linkDeviceIcon()
819
+ }),
820
+ /* @__PURE__ */ jsxs("span", {
821
+ class: "seams-menu-option-text",
822
+ children: [/* @__PURE__ */ jsx(WalletText, { message: "Link this device" }), /* @__PURE__ */ jsx("small", { children: /* @__PURE__ */ jsx(WalletText, { message: "Scan a code with your other device" }) })]
823
+ }),
824
+ chevronIcon()
825
+ ]
826
+ }), /* @__PURE__ */ jsxs("button", {
827
+ class: "seams-menu-option",
828
+ type: "button",
829
+ "data-recovery-action": true,
830
+ onClick: this.onRecoveryOpen,
831
+ children: [
832
+ /* @__PURE__ */ jsx("span", {
833
+ class: "seams-menu-option-icon",
834
+ children: recoveryIcon()
835
+ }),
836
+ /* @__PURE__ */ jsxs("span", {
837
+ class: "seams-menu-option-text",
838
+ children: [/* @__PURE__ */ jsx(WalletText, { message: "Recover wallet" }), /* @__PURE__ */ jsx("small", { children: /* @__PURE__ */ jsx(WalletText, { message: "Use your recovery code" }) })]
839
+ }),
840
+ chevronIcon()
841
+ ]
842
+ })]
805
843
  })]
806
- })] });
844
+ });
807
845
  }
808
846
  renderRecovery(viewModel) {
809
847
  if (viewModel.stage === "enter_code") {
@@ -1577,6 +1615,9 @@ function voiceMethodIcon() {
1577
1615
  children: /* @__PURE__ */ jsx("path", { d: "M4 10v4m4-7v10m4-14v18m4-14v10m4-7v4" })
1578
1616
  });
1579
1617
  }
1618
+ function isAvailableMenuControl(element) {
1619
+ return !element.matches(":disabled") && element.getClientRects().length > 0;
1620
+ }
1580
1621
  //#endregion
1581
1622
  export { AuthMenuSurface };
1582
1623
 
@@ -0,0 +1,67 @@
1
+ import { WalletText } from "../../../../../core/signingEngine/uiConfirm/ui/preact/WalletLocale.js";
2
+ import { Component } from "preact";
3
+ import { Fragment as Fragment$1, jsx, jsxs } from "preact/jsx-runtime";
4
+ //#region src/SeamsWeb/walletIframe/host/ui/auth-menu/WalletAlternativesSection.tsx
5
+ /** @jsxImportSource preact */
6
+ var WalletAlternativesSection = class extends Component {
7
+ connect = (alternativeId) => {
8
+ this.props.onIntent({
9
+ kind: "wallet_connection",
10
+ alternativeId
11
+ });
12
+ };
13
+ renderWalletRows(wallets) {
14
+ const rows = [];
15
+ for (const wallet of wallets) rows.push(/* @__PURE__ */ jsxs("button", {
16
+ type: "button",
17
+ class: "seams-menu-option seams-wallet-alternative",
18
+ onClick: this.connect.bind(this, wallet.id),
19
+ children: [
20
+ /* @__PURE__ */ jsx("span", {
21
+ class: "seams-alternative-icon",
22
+ "aria-hidden": "true",
23
+ children: wallet.icon ? /* @__PURE__ */ jsx("img", {
24
+ src: wallet.icon,
25
+ alt: "",
26
+ width: "32",
27
+ height: "32"
28
+ }) : "↗"
29
+ }),
30
+ /* @__PURE__ */ jsxs("span", {
31
+ class: "seams-menu-option-text",
32
+ children: [wallet.label, wallet.description && /* @__PURE__ */ jsx("small", { children: wallet.description })]
33
+ }),
34
+ /* @__PURE__ */ jsx("span", {
35
+ class: "seams-alternative-arrow",
36
+ "aria-hidden": "true",
37
+ children: "↗"
38
+ })
39
+ ]
40
+ }, wallet.id));
41
+ return /* @__PURE__ */ jsx("div", {
42
+ class: "seams-menu-options",
43
+ children: rows
44
+ });
45
+ }
46
+ render() {
47
+ const { primary, secondary } = this.props.alternatives;
48
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [primary.length > 0 && /* @__PURE__ */ jsxs("section", {
49
+ "aria-label": "Or connect another wallet",
50
+ children: [/* @__PURE__ */ jsx("div", {
51
+ class: "seams-menu-options-label seams-alternatives-heading",
52
+ children: /* @__PURE__ */ jsx(WalletText, { copy: "Or connect another wallet" })
53
+ }), this.renderWalletRows(primary)]
54
+ }), secondary.length > 0 && /* @__PURE__ */ jsxs("details", {
55
+ class: "seams-menu-expander",
56
+ "data-wallet-alternatives-secondary": true,
57
+ children: [/* @__PURE__ */ jsxs("summary", { children: [/* @__PURE__ */ jsx(WalletText, { copy: "More wallets" }), /* @__PURE__ */ jsx("span", {
58
+ "aria-hidden": "true",
59
+ children: "⌄"
60
+ })] }), this.renderWalletRows(secondary)]
61
+ })] });
62
+ }
63
+ };
64
+ //#endregion
65
+ export { WalletAlternativesSection };
66
+
67
+ //# sourceMappingURL=WalletAlternativesSection.js.map
@@ -1,3 +1,4 @@
1
+ import { emptyWalletAlternatives } from "../../../shared/walletAlternatives.js";
1
2
  import { appearanceTokenCssRule } from "../../../../../core/signingEngine/uiConfirm/ui/appearance-token-vars.js";
2
3
  import { createCspStylesheetManager, getDefaultCspNonce } from "../../../../../core/browser/walletIframe/csp-stylesheet.js";
3
4
  import { withWalletLocale } from "../../../../../core/signingEngine/uiConfirm/ui/preact/WalletLocale.js";
@@ -23,10 +24,15 @@ function authMenuStyles(document) {
23
24
  }
24
25
  var MountedAuthMenuSurface = class {
25
26
  element;
27
+ walletAlternatives;
28
+ walletConnection = { kind: "idle" };
29
+ viewModel;
26
30
  styles;
27
31
  entrance = [];
28
32
  state;
29
33
  constructor(input) {
34
+ this.walletAlternatives = input.walletAlternatives ?? emptyWalletAlternatives();
35
+ this.viewModel = input.viewModel;
30
36
  const document = input.parent.ownerDocument;
31
37
  this.styles = authMenuStyles(document);
32
38
  this.element = document.createElement("div");
@@ -70,7 +76,12 @@ var MountedAuthMenuSurface = class {
70
76
  easing: "cubic-bezier(0.25, 1, 0.5, 1)"
71
77
  }));
72
78
  }
79
+ updateWalletConnection(state) {
80
+ this.walletConnection = state;
81
+ this.update(this.viewModel);
82
+ }
73
83
  update(viewModel) {
84
+ this.viewModel = viewModel;
74
85
  if (this.state.kind === "disposed") return;
75
86
  this.element.lang = viewModel.appearance.locale ?? "en";
76
87
  this.element.dataset.theme = viewModel.appearance.theme.mode;
@@ -78,6 +89,8 @@ var MountedAuthMenuSurface = class {
78
89
  render(withWalletLocale(viewModel.appearance.locale ?? "en", /* @__PURE__ */ jsx(AuthMenuSurface, {
79
90
  element: this.element,
80
91
  viewModel,
92
+ walletAlternatives: this.walletAlternatives,
93
+ walletConnection: this.walletConnection,
81
94
  onIntent: this.state.onIntent,
82
95
  styles: this.styles
83
96
  })), this.element);
@@ -45,6 +45,7 @@ function walletForHostRequest(request, currentWalletId) {
45
45
  case "PM_OPEN_AUTH_MENU":
46
46
  case "PM_CANCEL_AUTH_MENU":
47
47
  case "PM_RESOLVE_AUTH_MENU_EXTERNAL_AUTH":
48
+ case "PM_RESOLVE_WALLET_CONNECTION":
48
49
  case "PM_REDEEM_HOSTED_WALLET_SEAMS_SESSION":
49
50
  case "PM_REGISTER_WALLET":
50
51
  case "PM_UNLOCK":
@@ -2,6 +2,7 @@ import { isPlainObject } from "../../../shared-ts/src/utils/validation.js";
2
2
  import { parseWalletAuthMethodId, parseWalletId } from "../../../shared-ts/src/utils/domainIds.js";
3
3
  import { parseWalletSessionHome } from "../../../shared-ts/src/device-linking/activeWalletSession.js";
4
4
  import { walletIframeRequestIdFromBoundary } from "../../../core/types/walletIframeIdentity.js";
5
+ import { emptyWalletAlternatives, parseWalletAlternatives } from "./walletAlternatives.js";
5
6
  //#region src/SeamsWeb/walletIframe/shared/messages.ts
6
7
  const WALLET_IFRAME_SURFACE_MEASUREMENT_MAX_CSS_PX = 4096;
7
8
  const HOSTED_AUTH_MENU_ERROR_EVENT = "seams:hosted-auth-menu-error";
@@ -209,7 +210,8 @@ function parseHostedAuthMenuOpenRequest(value) {
209
210
  "showRegistrationInput",
210
211
  "showProgress",
211
212
  "copy",
212
- "enabledExternalProviders"
213
+ "enabledExternalProviders",
214
+ "walletAlternatives"
213
215
  ]) || !hasOnlyHostedAuthMenuCopyKeys(record.copy)) return null;
214
216
  const authMenuSessionId = hostedAuthMenuSessionIdFromBoundary(record.authMenuSessionId);
215
217
  const initialMode = parseAuthMenuMode(record.initialMode);
@@ -226,7 +228,8 @@ function parseHostedAuthMenuOpenRequest(value) {
226
228
  } : null;
227
229
  const registrationAccountInput = parseRegistrationAccountInput(record.registrationAccountInput);
228
230
  const providers = parseExternalProviders(record.enabledExternalProviders);
229
- if (!authMenuSessionId || !initialMode || !loginTarget || !registrationAccountInput || typeof record.showRegistrationInput !== "boolean" || typeof record.showProgress !== "boolean" || !providers || !isWireSerializable(record.copy, /* @__PURE__ */ new Set(), true)) return null;
231
+ const walletAlternatives = record.walletAlternatives === void 0 ? emptyWalletAlternatives() : parseWalletAlternatives(record.walletAlternatives);
232
+ if (!authMenuSessionId || !initialMode || !loginTarget || !registrationAccountInput || typeof record.showRegistrationInput !== "boolean" || typeof record.showProgress !== "boolean" || !providers || !walletAlternatives || !isWireSerializable(record.copy, /* @__PURE__ */ new Set(), true)) return null;
230
233
  return {
231
234
  kind: "hosted_auth_menu_open_v1",
232
235
  authMenuSessionId,
@@ -237,7 +240,8 @@ function parseHostedAuthMenuOpenRequest(value) {
237
240
  showRegistrationInput: record.showRegistrationInput,
238
241
  showProgress: record.showProgress,
239
242
  copy: normalizeHostedAuthMenuCopy(record.copy),
240
- enabledExternalProviders: providers
243
+ enabledExternalProviders: providers,
244
+ walletAlternatives
241
245
  };
242
246
  }
243
247
  function buildHostedAuthMenuOpenRequest(args) {
@@ -252,7 +256,8 @@ function buildHostedAuthMenuOpenRequest(args) {
252
256
  "showRegistrationInput",
253
257
  "showProgress",
254
258
  "copy",
255
- "enabledExternalProviders"
259
+ "enabledExternalProviders",
260
+ "walletAlternatives"
256
261
  ]) || args.copy !== void 0 && !hasOnlyHostedAuthMenuCopyKeys(args.copy)) throw new Error("Hosted auth-menu open configuration contains unsupported fields");
257
262
  const parsedSessionId = hostedAuthMenuSessionIdFromBoundary(args.authMenuSessionId);
258
263
  if (!parsedSessionId) throw new Error("authMenuSessionId must be a non-empty string");
@@ -266,7 +271,8 @@ function buildHostedAuthMenuOpenRequest(args) {
266
271
  showRegistrationInput: args.showRegistrationInput ?? false,
267
272
  showProgress: args.showProgress ?? false,
268
273
  copy: normalizeHostedAuthMenuCopy(args.copy),
269
- enabledExternalProviders: [...args.enabledExternalProviders ?? []]
274
+ enabledExternalProviders: [...args.enabledExternalProviders ?? []],
275
+ walletAlternatives: args.walletAlternatives ?? emptyWalletAlternatives()
270
276
  };
271
277
  if (!parseHostedAuthMenuOpenRequest(request)) throw new Error("Hosted auth-menu open request is invalid");
272
278
  return Object.freeze(request);
@@ -425,6 +431,14 @@ function parseHostedAuthMenuOutcome(value) {
425
431
  method
426
432
  } : null;
427
433
  }
434
+ case "wallet_connected": {
435
+ const alternativeId = boundaryString(record.alternativeId, "alternativeId");
436
+ return alternativeId ? {
437
+ kind: "wallet_connected",
438
+ authMenuSessionId,
439
+ alternativeId
440
+ } : null;
441
+ }
428
442
  case "account_synced": {
429
443
  if (!hasOnlyKeys(record, [
430
444
  "kind",
@@ -470,7 +484,7 @@ function parseHostedAuthMenuOutcome(value) {
470
484
  default: return null;
471
485
  }
472
486
  }
473
- const WALLET_PROTOCOL_VERSION = "19.0.0";
487
+ const WALLET_PROTOCOL_VERSION = "20.0.0";
474
488
  const WALLET_IFRAME_PROTOCOL_VERSION_MISMATCH = "WALLET_IFRAME_PROTOCOL_VERSION_MISMATCH";
475
489
  const HOSTED_WALLET_REDEMPTION_PAYLOAD_FIELDS = [
476
490
  "home",
@@ -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