@seams/wallet 0.27.0 → 0.28.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 (134) hide show
  1. package/dist/.build-inputs.sha256 +1 -1
  2. package/dist/esm/SeamsWeb/walletIframe/client/router.js +38 -0
  3. package/dist/esm/SeamsWeb/walletIframe/client/sessionCommands.js +16 -0
  4. package/dist/esm/SeamsWeb/walletIframe/host/walletMutationGuard.js +1 -0
  5. package/dist/esm/SeamsWeb/walletIframe/shared/exactSessionState.js +27 -4
  6. package/dist/esm/SeamsWeb/walletIframe/shared/messages.js +1 -1
  7. package/dist/esm/core/authMethods/plugins.js +8 -2
  8. package/dist/esm/core/ui/messages.js +5 -0
  9. package/dist/esm/react/components/AccountMenuButton/AccountMenuButtonView.js +35 -22
  10. package/dist/esm/react/components/AccountMenuButton/AccountSettingsDialog.js +157 -0
  11. package/dist/esm/react/components/AccountMenuButton/AuthenticationMethodsModal.js +13 -1
  12. package/dist/esm/react/components/AccountMenuButton/ExternalWalletSettings.js +46 -0
  13. package/dist/esm/react/components/AccountMenuButton/LinkedDevicesModal.js +14 -2
  14. package/dist/esm/react/components/AccountMenuButton/WalletSettingsLayout.js +1 -1
  15. package/dist/esm/react/components/AccountMenuButton/Web3AuthProfileButton.css +154 -5
  16. package/dist/esm/react/components/AccountMenuButton/index.js +7 -3
  17. package/dist/esm/react/context/reactLoginStateBuilders.js +20 -0
  18. package/dist/esm/react/styles/styles.css +154 -5
  19. package/dist/esm/sdk/{ConfirmationDrawer-AZruQmhP.js → ConfirmationDrawer-MJoE0AAo.js} +1 -1
  20. package/dist/{public/sdk/adapters-d9yh1bdC.js → esm/sdk/adapters-C-g_hkkZ.js} +1 -1
  21. package/dist/esm/sdk/appearance-token-vars-01eH9pgA.js +1 -0
  22. package/dist/esm/sdk/configBuilder-DpChXfDO.js +1 -0
  23. package/dist/esm/sdk/{configuration-DBEc3bsj.js → configuration-BAad7ngq.js} +1 -1
  24. package/dist/esm/sdk/{confirm-ui-nU6ymgiv.js → confirm-ui-em0vkd2m.js} +1 -1
  25. package/dist/esm/sdk/{deviceLinkApproval-CfEiotVt.js → deviceLinkApproval-x3WkiYrd.js} +1 -1
  26. package/dist/esm/sdk/{export-viewer-host-BtrKVXxu.js → export-viewer-host-BSTfHhau.js} +1 -1
  27. package/dist/{public/sdk/exportKeypairOperation-CGE9ZU1m.js → esm/sdk/exportKeypairOperation-CjST_NUK.js} +1 -1
  28. package/dist/esm/sdk/host-C51z-AxP.js +1 -0
  29. package/dist/esm/sdk/{localOnly-BATWJj78.js → localOnly-Xs89Xajm.js} +1 -1
  30. package/dist/esm/sdk/{mountExportPrivateKeySurface-CyHU8bVc.js → mountExportPrivateKeySurface-CsUEKeum.js} +1 -1
  31. package/dist/esm/sdk/{mountRecoveryCodeBackupSurface-C7aglQxf.js → mountRecoveryCodeBackupSurface-kFLo5zLk.js} +1 -1
  32. package/dist/{public/sdk/pendingWalletRecoveryCodeBackup-Cjx-X-pP.js → esm/sdk/pendingWalletRecoveryCodeBackup-B-R_U34I.js} +1 -1
  33. package/dist/esm/sdk/{registration-CNLUYN-p.js → registration-Byl4l4yZ.js} +1 -1
  34. package/dist/esm/sdk/{registration-HSwOHZOo.js → registration-C2fb9kRQ.js} +1 -1
  35. package/dist/esm/sdk/resealedEnvelopeResult-CLW00Vbw.js +1 -0
  36. package/dist/esm/sdk/runtime-auth-ufbVur2p.js +1 -0
  37. package/dist/esm/sdk/{runtime-device-link-DAsq5tGT.js → runtime-device-link-CagI2Q62.js} +1 -1
  38. package/dist/{public/sdk/runtime-ecdsa-tempo-CVh_Vwl6.js → esm/sdk/runtime-ecdsa-tempo-Rctxr0yM.js} +1 -1
  39. package/dist/{public/sdk/runtime-email-otp-BxSKK9AG.js → esm/sdk/runtime-email-otp-BQtcG-LF.js} +1 -1
  40. package/dist/esm/sdk/{runtime-export-BWnQXMzT.js → runtime-export-wTeEaqlk.js} +1 -1
  41. package/dist/esm/sdk/{runtime-near-CuzPZrDS.js → runtime-near-59yU_3ud.js} +1 -1
  42. package/dist/esm/sdk/{runtime-preferences-B-nDWlm3.js → runtime-preferences-B9qLHX8W.js} +1 -1
  43. package/dist/esm/sdk/{runtime-recovery-DpOdEJ8N.js → runtime-recovery-DNyzdMBj.js} +1 -1
  44. package/dist/esm/sdk/{runtime-recovery-codes-DeUjQsxZ.js → runtime-recovery-codes-si1fGktB.js} +1 -1
  45. package/dist/esm/sdk/runtimeContext-ByeM6Z4Z.js +6 -0
  46. package/dist/{public/sdk/sessionObservationRevision-JOvVF4Hf.js → esm/sdk/sessionObservationRevision-ihBwjS3y.js} +1 -1
  47. package/dist/esm/sdk/tx-confirm-ui.js +8 -0
  48. package/dist/esm/sdk/voiceid-host.js +1 -1
  49. package/dist/esm/sdk/wallet-iframe-host-ecdsa.js +1 -1
  50. package/dist/esm/sdk/wallet-iframe-host-full.js +1 -1
  51. package/dist/esm/sdk/wallet-iframe-host-near.js +1 -1
  52. package/dist/esm/sdk/wallet-iframe-host-runtime.js +1 -1
  53. package/dist/esm/sdk/{walletRecoveryAdminProof-CvSYbyg5.js → walletRecoveryAdminProof-B4Ic07jY.js} +1 -1
  54. package/dist/esm/shared-ts/src/auth/externalAuth.js +53 -0
  55. package/dist/esm/voiceid-host.js +1 -1
  56. package/dist/public/headers.manifest.json +1 -1
  57. package/dist/public/sdk/{ConfirmationDrawer-AZruQmhP.js → ConfirmationDrawer-MJoE0AAo.js} +1 -1
  58. package/dist/{esm/sdk/adapters-d9yh1bdC.js → public/sdk/adapters-C-g_hkkZ.js} +1 -1
  59. package/dist/public/sdk/appearance-token-vars-01eH9pgA.js +1 -0
  60. package/dist/public/sdk/configBuilder-DpChXfDO.js +1 -0
  61. package/dist/public/sdk/{configuration-DBEc3bsj.js → configuration-BAad7ngq.js} +1 -1
  62. package/dist/public/sdk/{confirm-ui-nU6ymgiv.js → confirm-ui-em0vkd2m.js} +1 -1
  63. package/dist/public/sdk/{deviceLinkApproval-CfEiotVt.js → deviceLinkApproval-x3WkiYrd.js} +1 -1
  64. package/dist/public/sdk/{export-viewer-host-BtrKVXxu.js → export-viewer-host-BSTfHhau.js} +1 -1
  65. package/dist/{esm/sdk/exportKeypairOperation-CGE9ZU1m.js → public/sdk/exportKeypairOperation-CjST_NUK.js} +1 -1
  66. package/dist/public/sdk/host-C51z-AxP.js +1 -0
  67. package/dist/public/sdk/{localOnly-BATWJj78.js → localOnly-Xs89Xajm.js} +1 -1
  68. package/dist/public/sdk/{mountExportPrivateKeySurface-CyHU8bVc.js → mountExportPrivateKeySurface-CsUEKeum.js} +1 -1
  69. package/dist/public/sdk/{mountRecoveryCodeBackupSurface-C7aglQxf.js → mountRecoveryCodeBackupSurface-kFLo5zLk.js} +1 -1
  70. package/dist/{esm/sdk/pendingWalletRecoveryCodeBackup-Cjx-X-pP.js → public/sdk/pendingWalletRecoveryCodeBackup-B-R_U34I.js} +1 -1
  71. package/dist/public/sdk/{registration-CNLUYN-p.js → registration-Byl4l4yZ.js} +1 -1
  72. package/dist/public/sdk/{registration-HSwOHZOo.js → registration-C2fb9kRQ.js} +1 -1
  73. package/dist/public/sdk/resealedEnvelopeResult-CLW00Vbw.js +1 -0
  74. package/dist/public/sdk/runtime-auth-ufbVur2p.js +1 -0
  75. package/dist/public/sdk/{runtime-device-link-DAsq5tGT.js → runtime-device-link-CagI2Q62.js} +1 -1
  76. package/dist/{esm/sdk/runtime-ecdsa-tempo-CVh_Vwl6.js → public/sdk/runtime-ecdsa-tempo-Rctxr0yM.js} +1 -1
  77. package/dist/{esm/sdk/runtime-email-otp-BxSKK9AG.js → public/sdk/runtime-email-otp-BQtcG-LF.js} +1 -1
  78. package/dist/public/sdk/{runtime-export-BWnQXMzT.js → runtime-export-wTeEaqlk.js} +1 -1
  79. package/dist/public/sdk/{runtime-near-CuzPZrDS.js → runtime-near-59yU_3ud.js} +1 -1
  80. package/dist/public/sdk/{runtime-preferences-B-nDWlm3.js → runtime-preferences-B9qLHX8W.js} +1 -1
  81. package/dist/public/sdk/{runtime-recovery-DpOdEJ8N.js → runtime-recovery-DNyzdMBj.js} +1 -1
  82. package/dist/public/sdk/{runtime-recovery-codes-DeUjQsxZ.js → runtime-recovery-codes-si1fGktB.js} +1 -1
  83. package/dist/public/sdk/runtimeContext-ByeM6Z4Z.js +6 -0
  84. package/dist/{esm/sdk/sessionObservationRevision-JOvVF4Hf.js → public/sdk/sessionObservationRevision-ihBwjS3y.js} +1 -1
  85. package/dist/public/sdk/tx-confirm-ui.js +8 -0
  86. package/dist/public/sdk/voiceid-host.js +1 -1
  87. package/dist/public/sdk/wallet-iframe-host-ecdsa.js +1 -1
  88. package/dist/public/sdk/wallet-iframe-host-full.js +1 -1
  89. package/dist/public/sdk/wallet-iframe-host-near.js +1 -1
  90. package/dist/public/sdk/wallet-iframe-host-runtime.js +1 -1
  91. package/dist/public/sdk/{walletRecoveryAdminProof-CvSYbyg5.js → walletRecoveryAdminProof-B4Ic07jY.js} +1 -1
  92. package/dist/public/wallet-assets.manifest.json +61 -61
  93. package/dist/public/wallet-service/index.html +4 -4
  94. package/dist/types/shared-ts/src/auth/externalAuth.d.ts +84 -0
  95. package/dist/types/wallet/src/SeamsWeb/operations/devices/walletHostOwnerAuthority.d.ts +2 -1
  96. package/dist/types/wallet/src/SeamsWeb/publicApi/auth.d.ts +1 -1
  97. package/dist/types/wallet/src/SeamsWeb/publicApi/types.d.ts +11 -0
  98. package/dist/types/wallet/src/SeamsWeb/walletIframe/client/router.d.ts +4 -0
  99. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/WalletHostRuntime.d.ts +4 -2
  100. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/createSessionCommands.d.ts +5 -2
  101. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/externalAuth.d.ts +29 -0
  102. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/requestRouter.d.ts +1 -1
  103. package/dist/types/wallet/src/SeamsWeb/walletIframe/host/sessionObserver.d.ts +1 -0
  104. package/dist/types/wallet/src/SeamsWeb/walletIframe/shared/messages.d.ts +3 -3
  105. package/dist/types/wallet/src/core/authMethods/plugins.d.ts +2 -0
  106. package/dist/types/wallet/src/core/types/seams.d.ts +14 -6
  107. package/dist/types/wallet/src/core/ui/messages.d.ts +1 -1
  108. package/dist/types/wallet/src/index.d.ts +1 -0
  109. package/dist/types/wallet/src/react/components/AccountMenuButton/AccountMenuButtonView.d.ts +2 -1
  110. package/dist/types/wallet/src/react/components/AccountMenuButton/AccountSettingsDialog.d.ts +10 -0
  111. package/dist/types/wallet/src/react/components/AccountMenuButton/AuthenticationMethodsModal.d.ts +1 -2
  112. package/dist/types/wallet/src/react/components/AccountMenuButton/ExternalWalletSettings.d.ts +10 -0
  113. package/dist/types/wallet/src/react/components/AccountMenuButton/LinkedDevicesModal.d.ts +1 -2
  114. package/dist/types/wallet/src/react/components/AccountMenuButton/WalletSettingsLayout.d.ts +1 -0
  115. package/dist/types/wallet/src/react/components/AccountMenuButton/hooks/useProfileState.d.ts +2 -2
  116. package/dist/types/wallet/src/react/components/AccountMenuButton/types.d.ts +4 -3
  117. package/dist/types/wallet/src/react/context/reactLoginStateBuilders.d.ts +1 -1
  118. package/dist/types/wallet/src/react/types.d.ts +13 -3
  119. package/dist/types/wallet/src/voiceid-host.d.ts +2 -2
  120. package/package.json +1 -1
  121. package/dist/esm/react/components/AccountMenuButton/AccountMenuModal.js +0 -66
  122. package/dist/esm/sdk/appearance-token-vars-BJydfWT_.js +0 -1
  123. package/dist/esm/sdk/configBuilder-CSwJrmcR.js +0 -1
  124. package/dist/esm/sdk/host-DayrOrgm.js +0 -1
  125. package/dist/esm/sdk/resealedEnvelopeResult-B1p5UkYg.js +0 -1
  126. package/dist/esm/sdk/runtime-auth-BCoj7_-G.js +0 -1
  127. package/dist/esm/sdk/runtimeContext-5JcewRo3.js +0 -6
  128. package/dist/public/sdk/appearance-token-vars-BJydfWT_.js +0 -1
  129. package/dist/public/sdk/configBuilder-CSwJrmcR.js +0 -1
  130. package/dist/public/sdk/host-DayrOrgm.js +0 -1
  131. package/dist/public/sdk/resealedEnvelopeResult-B1p5UkYg.js +0 -1
  132. package/dist/public/sdk/runtime-auth-BCoj7_-G.js +0 -1
  133. package/dist/public/sdk/runtimeContext-5JcewRo3.js +0 -6
  134. package/dist/types/wallet/src/react/components/AccountMenuButton/AccountMenuModal.d.ts +0 -9
@@ -574,7 +574,7 @@
574
574
  accent-color: var(--seams-colors-textPrimary);
575
575
  }
576
576
 
577
- [data-seams-root].seams-theme-provider dialog[data-seams-root].seams-account-modal {
577
+ [data-seams-root].seams-theme-provider dialog[data-seams-root].seams-account-dialog {
578
578
  display: none;
579
579
  position: fixed;
580
580
  inset: 0;
@@ -596,16 +596,165 @@
596
596
  color: var(--seams-colors-textPrimary);
597
597
  box-shadow: none;
598
598
  }
599
- [data-seams-root].seams-theme-provider dialog[data-seams-root].seams-account-modal[open] {
599
+ [data-seams-root].seams-theme-provider dialog[data-seams-root].seams-account-dialog[open] {
600
600
  display: block;
601
601
  }
602
- [data-seams-root].seams-theme-provider dialog[data-seams-root].seams-account-modal::backdrop {
602
+ [data-seams-root].seams-theme-provider dialog[data-seams-root].seams-account-dialog::backdrop {
603
603
  background: rgb(0 0 0 / 0.26);
604
604
  }
605
- [data-seams-root].seams-theme-provider .seams-account-modal .seams-profile-button-morphable.open {
605
+ [data-seams-root].seams-theme-provider .seams-account-dialog .seams-profile-button-morphable.open {
606
606
  width: 100%;
607
607
  }
608
- html:has(dialog[data-seams-root].seams-account-modal[open]) {
608
+ html:has(dialog[data-seams-root].seams-account-dialog[open]) {
609
609
  overflow: hidden;
610
610
  scrollbar-gutter: stable;
611
611
  }
612
+
613
+ [data-seams-root].seams-theme-provider
614
+ dialog[data-seams-root].seams-account-dialog[data-presentation='drawer'] {
615
+ --seams-account-drawer-offset: translateX(100%);
616
+ inset-block: 0;
617
+ inset-inline: auto 0;
618
+ margin: 0;
619
+ width: min(440px, 100vw);
620
+ max-width: 100vw;
621
+ height: 100dvh;
622
+ max-height: 100dvh;
623
+ border-radius: 0;
624
+ border-start-start-radius: var(--seams-border-radius-lg);
625
+ border-end-start-radius: var(--seams-border-radius-lg);
626
+ overflow: hidden;
627
+ background: var(--seams-colors-colorBackground);
628
+ box-shadow: var(--seams-shadows-xl);
629
+ }
630
+ @media (min-width: 601px) {
631
+ [data-seams-root].seams-theme-provider
632
+ dialog[data-seams-root].seams-account-dialog[data-presentation='drawer']:dir(rtl) {
633
+ --seams-account-drawer-offset: translateX(-100%);
634
+ }
635
+ }
636
+ [data-seams-root].seams-theme-provider .seams-account-dialog[data-presentation='drawer']::backdrop {
637
+ background: rgb(13 20 24 / 0.22);
638
+ transition: background-color 240ms ease;
639
+ }
640
+ [data-seams-root].seams-theme-provider
641
+ .seams-account-dialog[data-presentation='drawer'][data-state='closing']::backdrop {
642
+ background: transparent;
643
+ }
644
+ @starting-style {
645
+ [data-seams-root].seams-theme-provider
646
+ .seams-account-dialog[data-presentation='drawer'][open]::backdrop {
647
+ background: transparent;
648
+ }
649
+ }
650
+ [data-seams-root].seams-theme-provider
651
+ .seams-account-dialog[data-presentation='drawer']
652
+ .seams-profile-button-morphable.open {
653
+ height: 100%;
654
+ border: 0;
655
+ border-radius: inherit;
656
+ box-shadow: none;
657
+ animation: none;
658
+ }
659
+ [data-seams-root].seams-theme-provider
660
+ .seams-account-dialog[data-presentation='drawer']
661
+ .seams-account-resize {
662
+ height: 100%;
663
+ }
664
+ [data-seams-root].seams-theme-provider
665
+ .seams-account-dialog[data-presentation='drawer']
666
+ .seams-account-panel-content {
667
+ display: flex;
668
+ flex-direction: column;
669
+ height: 100%;
670
+ }
671
+ [data-seams-root].seams-theme-provider
672
+ .seams-account-dialog[data-presentation='drawer']
673
+ .seams-account-origin {
674
+ display: grid;
675
+ grid-template-columns: 14px 1fr 32px;
676
+ flex: none;
677
+ padding: var(--seams-spacing-lg) var(--seams-spacing-lg) 0;
678
+ }
679
+ [data-seams-root].seams-theme-provider h2.seams-account-drawer-title {
680
+ grid-column: 1 / -1;
681
+ color: var(--seams-colors-textPrimary);
682
+ font: inherit;
683
+ font-size: 25px;
684
+ font-weight: 550;
685
+ letter-spacing: -0.8px;
686
+ line-height: 1.2;
687
+ margin: var(--seams-spacing-md) 0 2px;
688
+ }
689
+ [data-seams-root].seams-theme-provider
690
+ .seams-account-dialog[data-presentation='drawer']
691
+ .seams-account-main {
692
+ flex: 1;
693
+ min-height: 0;
694
+ overflow-y: auto;
695
+ overscroll-behavior: contain;
696
+ padding: calc(var(--seams-spacing-md) + var(--seams-spacing-xs)) var(--seams-spacing-lg)
697
+ var(--seams-spacing-lg);
698
+ }
699
+ [data-seams-root].seams-theme-provider
700
+ .seams-account-dialog[data-presentation='drawer']
701
+ .seams-account-main:has(> .seams-account-identity) {
702
+ display: flex;
703
+ flex-direction: column;
704
+ }
705
+ [data-seams-root].seams-theme-provider
706
+ .seams-account-dialog[data-presentation='drawer']
707
+ .seams-account-identity {
708
+ flex: none;
709
+ }
710
+ [data-seams-root].seams-theme-provider
711
+ .seams-account-dialog[data-presentation='drawer']
712
+ .seams-profile-dropdown-menu {
713
+ display: flex;
714
+ flex-direction: column;
715
+ flex: 1;
716
+ }
717
+ [data-seams-root].seams-theme-provider
718
+ .seams-account-dialog[data-presentation='drawer']
719
+ button.seams-lock-menu-item {
720
+ margin-top: auto;
721
+ flex: none;
722
+ }
723
+ [data-seams-root].seams-theme-provider
724
+ .seams-account-dialog[data-presentation='drawer']
725
+ .seams-account-menu-group:last-of-type {
726
+ margin-bottom: var(--seams-spacing-lg);
727
+ }
728
+ [data-seams-root].seams-theme-provider
729
+ .seams-account-dialog[data-presentation='drawer']
730
+ .seams-account-footer {
731
+ flex: none;
732
+ padding: var(--seams-spacing-md) var(--seams-spacing-lg);
733
+ }
734
+ [data-seams-root].seams-theme-provider
735
+ .seams-account-dialog[data-presentation='drawer']
736
+ button.seams-dropdown-menu-item {
737
+ min-height: 46px;
738
+ }
739
+ @media (max-width: 600px) {
740
+ [data-seams-root].seams-theme-provider
741
+ dialog[data-seams-root].seams-account-dialog[data-presentation='drawer'] {
742
+ --seams-account-drawer-offset: translateY(100%);
743
+ inset: auto 0 0;
744
+ width: 100%;
745
+ height: min(720px, calc(100dvh - 36px));
746
+ max-height: calc(100dvh - 36px);
747
+ border-radius: var(--seams-border-radius-lg) var(--seams-border-radius-lg) 0 0;
748
+ }
749
+ [data-seams-root].seams-theme-provider
750
+ .seams-account-dialog[data-presentation='drawer']
751
+ .seams-account-footer {
752
+ padding-bottom: max(var(--seams-spacing-md), env(safe-area-inset-bottom));
753
+ }
754
+ }
755
+ @media (prefers-reduced-motion: reduce) {
756
+ [data-seams-root].seams-theme-provider
757
+ .seams-account-dialog[data-presentation='drawer']::backdrop {
758
+ transition: none;
759
+ }
760
+ }
@@ -115,15 +115,17 @@ const AccountMenuButtonInner = (props) => {
115
115
  const accountMenuCapabilities = accountMenuCapabilitiesForLoginState(loginState);
116
116
  const canShowRecoveryCodes = accountMenuCapabilities.kind === "owner" && Boolean(walletId);
117
117
  const canManageLinkedDevices = accountMenuCapabilities.canManageLinkedDevices;
118
+ const canReadSettings = loginState.isLoggedIn && loginState.access === "external";
118
119
  const handleQrCodeScanned = useCallback(() => {
119
120
  setShowQRScanner(false);
120
121
  handleClose();
121
122
  }, [handleClose]);
122
123
  useEffect(() => {
123
124
  const switchedWallet = accountSetupState.kind !== "idle" && walletId !== null && walletId !== accountSetupState.walletId;
124
- if (!canManageLinkedDevices && !accountSetupRunning && accountSetupState.kind !== "added" || switchedWallet) setScreen("overview");
125
+ if (!canManageLinkedDevices && !canReadSettings && !accountSetupRunning && accountSetupState.kind !== "added" || switchedWallet) setScreen("overview");
125
126
  }, [
126
127
  canManageLinkedDevices,
128
+ canReadSettings,
127
129
  accountSetupRunning,
128
130
  accountSetupState,
129
131
  walletId
@@ -330,7 +332,7 @@ const AccountMenuButtonInner = (props) => {
330
332
  icon: /* @__PURE__ */ jsx(TouchIcon, {}),
331
333
  label: "Authentication methods",
332
334
  description: "Add or remove ways to unlock this device",
333
- disabled: !canManageLinkedDevices,
335
+ disabled: !canManageLinkedDevices && !canReadSettings,
334
336
  onClick: setScreen.bind(null, "authentication-methods"),
335
337
  keepOpenOnClick: true
336
338
  }, {
@@ -346,7 +348,7 @@ const AccountMenuButtonInner = (props) => {
346
348
  icon: /* @__PURE__ */ jsx(LinkIcon, {}),
347
349
  label: "Linked devices",
348
350
  description: "See devices using this wallet",
349
- disabled: !canManageLinkedDevices,
351
+ disabled: !canManageLinkedDevices && !canReadSettings,
350
352
  onClick: setScreen.bind(null, "linked-devices"),
351
353
  keepOpenOnClick: true
352
354
  });
@@ -372,6 +374,7 @@ const AccountMenuButtonInner = (props) => {
372
374
  accountsRows.length,
373
375
  layout,
374
376
  accountMenuCapabilities,
377
+ canReadSettings,
375
378
  canShowRecoveryCodes,
376
379
  exportLoadingChain,
377
380
  loginState.isLoggedIn,
@@ -491,6 +494,7 @@ const AccountMenuButtonInner = (props) => {
491
494
  })
492
495
  };
493
496
  if (layout === "page" && loginState.isLoggedIn && walletId) return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(WalletSettingsLayout, {
497
+ access: loginState.access,
494
498
  walletId: toWalletId(walletId),
495
499
  placement: seams.placement,
496
500
  menuItems: MENU_ITEMS,
@@ -3,6 +3,7 @@ import { isWalletSessionReadyForUi } from "./walletSessionReadiness.js";
3
3
  //#region src/react/context/reactLoginStateBuilders.ts
4
4
  function linkedDeviceManagementPermissionForLoginState(state) {
5
5
  if (!state.isLoggedIn) return { kind: "unauthenticated" };
6
+ if (state.access === "external") return { kind: "settings_only" };
6
7
  if (state.currentAuthMethod.kind !== "selected") return { kind: "signing_only" };
7
8
  return { kind: "owner" };
8
9
  }
@@ -24,6 +25,11 @@ function accountMenuCapabilitiesForLoginState(state) {
24
25
  canExportKeys: false,
25
26
  canManageLinkedDevices: false
26
27
  };
28
+ case "settings_only": return {
29
+ kind: "settings_only",
30
+ canExportKeys: false,
31
+ canManageLinkedDevices: false
32
+ };
27
33
  }
28
34
  return assertNeverAccountMenuPermission(management);
29
35
  }
@@ -47,8 +53,21 @@ function buildReactLoggedInLoginStateFromSession(session) {
47
53
  if (session.appIdentity.kind !== "resolved") return null;
48
54
  const appIdentity = session.appIdentity;
49
55
  const authentication = session.authentication;
56
+ if (session.externalSettings) return {
57
+ isLoggedIn: true,
58
+ access: "external",
59
+ externalSettings: session.externalSettings,
60
+ walletId: String(appIdentity.walletId),
61
+ nearAccountId: appIdentity.nearAccountId ? String(appIdentity.nearAccountId) : null,
62
+ nearPublicKey: appIdentity.nearOperationalPublicKey,
63
+ currentAuthMethod: buildNoCurrentWalletAuthMethod(),
64
+ authMethods: [],
65
+ thresholdEcdsaEthereumAddress: appIdentity.thresholdEcdsaEthereumAddress,
66
+ thresholdEcdsaPublicKeyB64u: appIdentity.thresholdEcdsaPublicKeyB64u
67
+ };
50
68
  if (authentication.kind === "authenticated" && session.appIdentity.authMethods.length === 0) return {
51
69
  isLoggedIn: true,
70
+ access: "wallet",
52
71
  walletId: String(appIdentity.walletId),
53
72
  nearAccountId: appIdentity.nearAccountId ? String(appIdentity.nearAccountId) : null,
54
73
  nearPublicKey: appIdentity.nearOperationalPublicKey,
@@ -63,6 +82,7 @@ function buildReactLoggedInLoginStateFromSession(session) {
63
82
  const currentAuthMethod = buildSelectedCurrentWalletAuthMethod({ binding: matchingAuthMethods[0] });
64
83
  return {
65
84
  isLoggedIn: true,
85
+ access: "wallet",
66
86
  walletId: String(appIdentity.walletId),
67
87
  nearAccountId: appIdentity.nearAccountId ? String(appIdentity.nearAccountId) : null,
68
88
  nearPublicKey: appIdentity.nearOperationalPublicKey,
@@ -3058,7 +3058,7 @@ svg[data-seams-root].seams-icon[viewBox],
3058
3058
  accent-color: var(--seams-colors-textPrimary);
3059
3059
  }
3060
3060
 
3061
- [data-seams-root].seams-theme-provider dialog[data-seams-root].seams-account-modal {
3061
+ [data-seams-root].seams-theme-provider dialog[data-seams-root].seams-account-dialog {
3062
3062
  display: none;
3063
3063
  position: fixed;
3064
3064
  inset: 0;
@@ -3080,20 +3080,169 @@ svg[data-seams-root].seams-icon[viewBox],
3080
3080
  color: var(--seams-colors-textPrimary);
3081
3081
  box-shadow: none;
3082
3082
  }
3083
- [data-seams-root].seams-theme-provider dialog[data-seams-root].seams-account-modal[open] {
3083
+ [data-seams-root].seams-theme-provider dialog[data-seams-root].seams-account-dialog[open] {
3084
3084
  display: block;
3085
3085
  }
3086
- [data-seams-root].seams-theme-provider dialog[data-seams-root].seams-account-modal::backdrop {
3086
+ [data-seams-root].seams-theme-provider dialog[data-seams-root].seams-account-dialog::backdrop {
3087
3087
  background: rgb(0 0 0 / 0.26);
3088
3088
  }
3089
- [data-seams-root].seams-theme-provider .seams-account-modal .seams-profile-button-morphable.open {
3089
+ [data-seams-root].seams-theme-provider .seams-account-dialog .seams-profile-button-morphable.open {
3090
3090
  width: 100%;
3091
3091
  }
3092
- html:has(dialog[data-seams-root].seams-account-modal[open]) {
3092
+ html:has(dialog[data-seams-root].seams-account-dialog[open]) {
3093
3093
  overflow: hidden;
3094
3094
  scrollbar-gutter: stable;
3095
3095
  }
3096
3096
 
3097
+ [data-seams-root].seams-theme-provider
3098
+ dialog[data-seams-root].seams-account-dialog[data-presentation='drawer'] {
3099
+ --seams-account-drawer-offset: translateX(100%);
3100
+ inset-block: 0;
3101
+ inset-inline: auto 0;
3102
+ margin: 0;
3103
+ width: min(440px, 100vw);
3104
+ max-width: 100vw;
3105
+ height: 100dvh;
3106
+ max-height: 100dvh;
3107
+ border-radius: 0;
3108
+ border-start-start-radius: var(--seams-border-radius-lg);
3109
+ border-end-start-radius: var(--seams-border-radius-lg);
3110
+ overflow: hidden;
3111
+ background: var(--seams-colors-colorBackground);
3112
+ box-shadow: var(--seams-shadows-xl);
3113
+ }
3114
+ @media (min-width: 601px) {
3115
+ [data-seams-root].seams-theme-provider
3116
+ dialog[data-seams-root].seams-account-dialog[data-presentation='drawer']:dir(rtl) {
3117
+ --seams-account-drawer-offset: translateX(-100%);
3118
+ }
3119
+ }
3120
+ [data-seams-root].seams-theme-provider .seams-account-dialog[data-presentation='drawer']::backdrop {
3121
+ background: rgb(13 20 24 / 0.22);
3122
+ transition: background-color 240ms ease;
3123
+ }
3124
+ [data-seams-root].seams-theme-provider
3125
+ .seams-account-dialog[data-presentation='drawer'][data-state='closing']::backdrop {
3126
+ background: transparent;
3127
+ }
3128
+ @starting-style {
3129
+ [data-seams-root].seams-theme-provider
3130
+ .seams-account-dialog[data-presentation='drawer'][open]::backdrop {
3131
+ background: transparent;
3132
+ }
3133
+ }
3134
+ [data-seams-root].seams-theme-provider
3135
+ .seams-account-dialog[data-presentation='drawer']
3136
+ .seams-profile-button-morphable.open {
3137
+ height: 100%;
3138
+ border: 0;
3139
+ border-radius: inherit;
3140
+ box-shadow: none;
3141
+ animation: none;
3142
+ }
3143
+ [data-seams-root].seams-theme-provider
3144
+ .seams-account-dialog[data-presentation='drawer']
3145
+ .seams-account-resize {
3146
+ height: 100%;
3147
+ }
3148
+ [data-seams-root].seams-theme-provider
3149
+ .seams-account-dialog[data-presentation='drawer']
3150
+ .seams-account-panel-content {
3151
+ display: flex;
3152
+ flex-direction: column;
3153
+ height: 100%;
3154
+ }
3155
+ [data-seams-root].seams-theme-provider
3156
+ .seams-account-dialog[data-presentation='drawer']
3157
+ .seams-account-origin {
3158
+ display: grid;
3159
+ grid-template-columns: 14px 1fr 32px;
3160
+ flex: none;
3161
+ padding: var(--seams-spacing-lg) var(--seams-spacing-lg) 0;
3162
+ }
3163
+ [data-seams-root].seams-theme-provider h2.seams-account-drawer-title {
3164
+ grid-column: 1 / -1;
3165
+ color: var(--seams-colors-textPrimary);
3166
+ font: inherit;
3167
+ font-size: 25px;
3168
+ font-weight: 550;
3169
+ letter-spacing: -0.8px;
3170
+ line-height: 1.2;
3171
+ margin: var(--seams-spacing-md) 0 2px;
3172
+ }
3173
+ [data-seams-root].seams-theme-provider
3174
+ .seams-account-dialog[data-presentation='drawer']
3175
+ .seams-account-main {
3176
+ flex: 1;
3177
+ min-height: 0;
3178
+ overflow-y: auto;
3179
+ overscroll-behavior: contain;
3180
+ padding: calc(var(--seams-spacing-md) + var(--seams-spacing-xs)) var(--seams-spacing-lg)
3181
+ var(--seams-spacing-lg);
3182
+ }
3183
+ [data-seams-root].seams-theme-provider
3184
+ .seams-account-dialog[data-presentation='drawer']
3185
+ .seams-account-main:has(> .seams-account-identity) {
3186
+ display: flex;
3187
+ flex-direction: column;
3188
+ }
3189
+ [data-seams-root].seams-theme-provider
3190
+ .seams-account-dialog[data-presentation='drawer']
3191
+ .seams-account-identity {
3192
+ flex: none;
3193
+ }
3194
+ [data-seams-root].seams-theme-provider
3195
+ .seams-account-dialog[data-presentation='drawer']
3196
+ .seams-profile-dropdown-menu {
3197
+ display: flex;
3198
+ flex-direction: column;
3199
+ flex: 1;
3200
+ }
3201
+ [data-seams-root].seams-theme-provider
3202
+ .seams-account-dialog[data-presentation='drawer']
3203
+ button.seams-lock-menu-item {
3204
+ margin-top: auto;
3205
+ flex: none;
3206
+ }
3207
+ [data-seams-root].seams-theme-provider
3208
+ .seams-account-dialog[data-presentation='drawer']
3209
+ .seams-account-menu-group:last-of-type {
3210
+ margin-bottom: var(--seams-spacing-lg);
3211
+ }
3212
+ [data-seams-root].seams-theme-provider
3213
+ .seams-account-dialog[data-presentation='drawer']
3214
+ .seams-account-footer {
3215
+ flex: none;
3216
+ padding: var(--seams-spacing-md) var(--seams-spacing-lg);
3217
+ }
3218
+ [data-seams-root].seams-theme-provider
3219
+ .seams-account-dialog[data-presentation='drawer']
3220
+ button.seams-dropdown-menu-item {
3221
+ min-height: 46px;
3222
+ }
3223
+ @media (max-width: 600px) {
3224
+ [data-seams-root].seams-theme-provider
3225
+ dialog[data-seams-root].seams-account-dialog[data-presentation='drawer'] {
3226
+ --seams-account-drawer-offset: translateY(100%);
3227
+ inset: auto 0 0;
3228
+ width: 100%;
3229
+ height: min(720px, calc(100dvh - 36px));
3230
+ max-height: calc(100dvh - 36px);
3231
+ border-radius: var(--seams-border-radius-lg) var(--seams-border-radius-lg) 0 0;
3232
+ }
3233
+ [data-seams-root].seams-theme-provider
3234
+ .seams-account-dialog[data-presentation='drawer']
3235
+ .seams-account-footer {
3236
+ padding-bottom: max(var(--seams-spacing-md), env(safe-area-inset-bottom));
3237
+ }
3238
+ }
3239
+ @media (prefers-reduced-motion: reduce) {
3240
+ [data-seams-root].seams-theme-provider
3241
+ .seams-account-dialog[data-presentation='drawer']::backdrop {
3242
+ transition: none;
3243
+ }
3244
+ }
3245
+
3097
3246
  [data-seams-root].seams-theme-provider .seams-settings-page {
3098
3247
  min-height: 100dvh;
3099
3248
  color: var(--seams-colors-textPrimary);
@@ -1 +1 @@
1
- import{a as e,i as t,r as n}from"./csp-stylesheet-DUSqfXvZ.js";import{c as r,i,r as a,s as o}from"./appearance-token-vars-BJydfWT_.js";async function s(e,t,n){if(!e.isConnected||n?.aborted)return!1;let r=e.ownerDocument,i=r.defaultView?.navigator.clipboard;if(i?.writeText)try{return await i.writeText(t),!0}catch{}if(!e.isConnected||n?.aborted)return!1;let a=r.createElement(`textarea`);a.value=t,a.readOnly=!0,a.className=`seams-offscreen`,e.appendChild(a),a.select();try{return r.execCommand(`copy`)}finally{a.remove()}}function c(){return n(`span`,{class:`copy-icon`,"aria-hidden":`true`,children:[n(`span`,{class:`copy-icon-check`,children:n(`svg`,{width:`16`,height:`16`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,children:n(`path`,{d:`M20 6 9 17l-5-5`})})}),n(`span`,{class:`copy-icon-copy`,children:n(`svg`,{width:`16`,height:`16`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,children:[n(`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`}),n(`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`})]})})]})}let l=0;function u(e){return n(d,{...e},e.context)}var d=class extends t{static contextType=a;dialog=e();hosted=e();containerId=`seams-confirmation-modal-${++l}`;componentDidMount(){this.props.context===`standalone`?this.dialog.current?.showModal():this.hosted.current?.focus({preventScroll:!0})}componentWillUnmount(){this.dialog.current?.close()}cancel=e=>{e.preventDefault(),e.stopPropagation(),this.props.onCancel()};backdropClick=e=>{let t=this.dialog.current;if(!t||e.target!==t)return;let n=t.getBoundingClientRect();(e.clientX<n.left||e.clientX>n.right||e.clientY<n.top||e.clientY>n.bottom)&&this.cancel(e)};hostedKeyDown=e=>{!e.defaultPrevented&&e.key===`Escape`&&this.cancel(e)};render(){return this.props.context===`standalone`?n(`dialog`,{ref:this.dialog,class:`seams-confirmation-modal`,"aria-label":o(this.context,this.props.label),onCancel:this.cancel,onClick:this.backdropClick,children:n(`div`,{id:this.containerId,class:`modal-container-root`,tabIndex:-1,children:this.props.children})}):n(`div`,{ref:this.hosted,class:`seams-confirmation-modal seams-confirmation-modal--hosted`,tabIndex:-1,onKeyDown:this.hostedKeyDown,children:n(`div`,{id:this.containerId,class:`modal-container-root`,children:this.props.children})})}};function f(e){let t=e.startTranslatePx+e.deltaPx;if(t>=e.restTranslatePx)return t;let n=Math.max(e.sheetHeightPx*.5,e.viewportHeightPx*.5,e.minimumOverpullPx),r=e.restTranslatePx-t;return e.restTranslatePx-n*(1-1/(r/n+1))}function p(e){let t=e.totalDeltaPx/Math.max(1,e.durationMs);return Math.min(e.velocityPxPerMs,t)<=-.6||Math.max(e.velocityPxPerMs,t)>=.7||e.translatePx>=e.sheetHeightPx-50}let m=0;function h(e){return n(g,{...e},e.context)}var g=class extends t{static contextType=a;state={settled:!1};id=`seams-confirmation-drawer-${++m}`;dialog=e();sheet=e();body=e();content=e();observer=null;frame=null;closeTimer=null;gesture={kind:`idle`};lifetime=`active`;closeReported=!1;suppressPointerClick=!1;componentDidMount(){let e=this.sheet.current,t=e.ownerDocument.defaultView;this.dialog.current?.showModal(),this.dialog.current||e.focus({preventScroll:!0}),this.observer=new ResizeObserver(this.measureContent),this.observer.observe(this.content.current),this.observer.observe(e),t.addEventListener(`resize`,this.scheduleMeasure),t.visualViewport?.addEventListener(`resize`,this.scheduleMeasure),this.measure(),this.frame=t.requestAnimationFrame(this.openAfterLayout),this.props.state.kind===`closing`&&this.startClose()}openAfterLayout=()=>{this.frame=null,this.setState({settled:!0})};componentDidUpdate(e){e.styles!==this.props.styles&&(e.styles.deleteDynamicRule(this.id),e.styles.deleteDynamicRule(`${this.id}-drag`),this.resetGesture(),this.measure()),e.state.kind!==this.props.state.kind&&(this.props.state.kind===`closing`?this.startClose():(this.clearCloseTimer(),this.closeReported=!1)),this.props.state.kind===`open`&&this.props.state.interaction===`busy`&&this.resetGesture()}componentWillUnmount(){this.lifetime=`disposed`,this.resetGesture();let e=this.sheet.current.ownerDocument.defaultView;this.frame!==null&&e.cancelAnimationFrame(this.frame),this.clearCloseTimer(),this.observer?.disconnect(),e.removeEventListener(`resize`,this.scheduleMeasure),e.visualViewport?.removeEventListener(`resize`,this.scheduleMeasure),this.props.styles.deleteDynamicRule(this.id),this.dialog.current?.close()}scheduleMeasure=()=>{this.lifetime===`disposed`||this.frame!==null||(this.frame=this.sheet.current.ownerDocument.defaultView.requestAnimationFrame(this.measureFrame))};measureFrame=()=>{this.frame=null,this.measure()};measureContent=()=>{this.lifetime===`active`&&this.measure()};measure(){if(this.gesture.kind!==`idle`)return;let e=this.sheet.current,t=this.content.current,n=Math.round(t.getBoundingClientRect().bottom-e.getBoundingClientRect().top),r=this.props.context===`standalone`?Math.max(0,e.offsetHeight-n):0;this.props.styles.setDynamicDeclarations(this.id,`#${this.id}`,{"--seams-drawer-rest":`${r}px`})}startClose(){this.resetGesture(),this.clearCloseTimer();let e=this.sheet.current.ownerDocument.defaultView,t=e.matchMedia(`(prefers-reduced-motion: reduce)`).matches?0:150;this.closeTimer=e.setTimeout(this.reportClosed,t)}clearCloseTimer(){this.closeTimer!==null&&(this.sheet.current.ownerDocument.defaultView.clearTimeout(this.closeTimer),this.closeTimer=null)}reportClosed=()=>{this.clearCloseTimer(),!(this.lifetime===`disposed`||this.closeReported||this.props.state.kind!==`closing`)&&(this.closeReported=!0,this.props.state.onClosed())};transitionEnd=e=>{e.target===this.sheet.current&&e.propertyName===`transform`&&this.reportClosed()};cancel=e=>{e.preventDefault(),e.stopPropagation(),this.props.state.kind===`open`&&this.props.onCancel()};backdropClick=e=>{this.props.dismissOnBackdrop!==!1&&e.target===this.dialog.current&&this.canDrag()&&this.cancel(e)};keyDown=e=>{!e.defaultPrevented&&e.key===`Escape`&&this.cancel(e)};canDrag(){return this.props.state.kind===`open`&&this.props.state.interaction===`ready`}pointerDown=e=>{if(this.clearClickSuppression(),!this.canDrag()||this.gesture.kind!==`idle`||!e.isPrimary||e.button!==0)return;let t=e.target;if(t instanceof Element&&t.closest(`a, input, textarea, select, summary, button:not(.seams-drawer-handle), [data-seams-drawer-no-drag]`))return;this.gesture={kind:`pending`,pointerId:e.pointerId,startY:e.clientY};let n=this.sheet.current.ownerDocument;n.addEventListener(`pointermove`,this.pointerMove,{passive:!1}),n.addEventListener(`pointerup`,this.pointerUp),n.addEventListener(`pointercancel`,this.pointerCancel)};pointerMove=e=>{let t=this.gesture;if(t.kind===`idle`||t.pointerId!==e.pointerId)return;let n=this.sheet.current;if(t.kind===`pending`){if(Math.abs(e.clientY-t.startY)<8||this.body.current.scrollTop>0)return;let r=n.ownerDocument.defaultView,i=new DOMMatrixReadOnly(r.getComputedStyle(n).transform).m42;t={kind:`dragging`,pointerId:t.pointerId,startY:t.startY,lastY:t.startY,startedAt:e.timeStamp,lastTime:e.timeStamp,velocity:0,rest:i,translate:i,height:n.offsetHeight},this.gesture=t,n.setPointerCapture(e.pointerId),n.classList.add(`is-dragging`)}let r=e.timeStamp-t.lastTime;r>0&&(t.velocity=(e.clientY-t.lastY)/r),t.lastY=e.clientY,t.lastTime=e.timeStamp,t.translate=f({startTranslatePx:t.rest,deltaPx:e.clientY-t.startY,restTranslatePx:t.rest,sheetHeightPx:t.height,viewportHeightPx:n.ownerDocument.defaultView.innerHeight,minimumOverpullPx:160}),this.props.styles.setDynamicDeclarations(`${this.id}-drag`,`#${this.id}`,{"--seams-drawer-drag":`${t.translate}px`}),e.preventDefault()};pointerUp=e=>{let t=this.gesture;if(t.kind===`idle`||t.pointerId!==e.pointerId)return;let n=t.kind===`dragging`&&p({velocityPxPerMs:t.velocity,totalDeltaPx:t.lastY-t.startY,durationMs:e.timeStamp-t.startedAt,translatePx:t.translate,sheetHeightPx:t.height});t.kind===`dragging`&&(this.suppressPointerClick=!0,e.preventDefault()),this.resetGesture(),n&&this.props.state.kind===`open`&&this.props.onCancel()};pointerCancel=e=>{this.gesture.kind!==`idle`&&this.gesture.pointerId===e.pointerId&&(this.gesture.kind===`dragging`&&(this.suppressPointerClick=!0),this.resetGesture())};clearClickSuppression=()=>{this.suppressPointerClick=!1};suppressDragClick=e=>{!this.suppressPointerClick||e.detail===0||(this.suppressPointerClick=!1,e.preventDefault(),e.stopPropagation())};resetGesture(){let e=this.sheet.current,t=this.gesture;this.gesture={kind:`idle`},t.kind!==`idle`&&e.hasPointerCapture(t.pointerId)&&e.releasePointerCapture(t.pointerId),e.classList.remove(`is-dragging`);let n=e.ownerDocument;n.removeEventListener(`pointermove`,this.pointerMove),n.removeEventListener(`pointerup`,this.pointerUp),n.removeEventListener(`pointercancel`,this.pointerCancel),this.props.styles.deleteDynamicRule(`${this.id}-drag`),this.lifetime===`active`&&this.scheduleMeasure()}render(){let e=this.state.settled&&this.props.state.kind===`open`,t=[`seams-confirmation-drawer`];e&&t.push(`is-open`),this.gesture.kind===`dragging`&&t.push(`is-dragging`);let a=n(`section`,{ref:this.sheet,id:this.id,class:t.join(` `),"data-context":this.props.context,tabIndex:-1,onPointerDownCapture:this.pointerDown,onClickCapture:this.suppressDragClick,onLostPointerCapture:this.pointerCancel,onTransitionEnd:this.transitionEnd,onKeyDown:this.keyDown,children:[n(`div`,{class:`seams-drawer-controls`,children:[this.props.origin&&n(`div`,{class:`seams-drawer-origin`,children:this.props.origin}),n(`button`,{type:`button`,class:`seams-drawer-handle`,"aria-label":r(this.context,`Dismiss confirmation`),disabled:!this.canDrag(),onClick:this.cancel,children:n(`span`,{})}),n(`button`,{type:`button`,class:`seams-drawer-close`,"aria-label":r(this.context,`Close`),disabled:!this.canDrag(),onClick:this.cancel,children:`×`})]}),n(`div`,{class:`seams-drawer-body`,ref:this.body,children:[this.props.errorMessage&&n(`div`,{class:`error`,children:n(i,{copy:this.props.errorMessage})}),n(`div`,{class:`seams-drawer-content`,ref:this.content,children:this.props.children})]})]});return this.props.context===`wallet-iframe`?a:n(`dialog`,{class:`seams-drawer-dialog`,ref:this.dialog,"aria-label":o(this.context,this.props.label),onCancel:this.cancel,onClick:this.backdropClick,onClickCapture:this.suppressDragClick,onPointerDownCapture:this.clearClickSuppression,children:a})}};export{s as i,u as n,c as r,h as t};
1
+ import{a as e,i as t,r as n}from"./csp-stylesheet-DUSqfXvZ.js";import{c as r,i,r as a,s as o}from"./appearance-token-vars-01eH9pgA.js";async function s(e,t,n){if(!e.isConnected||n?.aborted)return!1;let r=e.ownerDocument,i=r.defaultView?.navigator.clipboard;if(i?.writeText)try{return await i.writeText(t),!0}catch{}if(!e.isConnected||n?.aborted)return!1;let a=r.createElement(`textarea`);a.value=t,a.readOnly=!0,a.className=`seams-offscreen`,e.appendChild(a),a.select();try{return r.execCommand(`copy`)}finally{a.remove()}}function c(){return n(`span`,{class:`copy-icon`,"aria-hidden":`true`,children:[n(`span`,{class:`copy-icon-check`,children:n(`svg`,{width:`16`,height:`16`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,children:n(`path`,{d:`M20 6 9 17l-5-5`})})}),n(`span`,{class:`copy-icon-copy`,children:n(`svg`,{width:`16`,height:`16`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,children:[n(`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`}),n(`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`})]})})]})}let l=0;function u(e){return n(d,{...e},e.context)}var d=class extends t{static contextType=a;dialog=e();hosted=e();containerId=`seams-confirmation-modal-${++l}`;componentDidMount(){this.props.context===`standalone`?this.dialog.current?.showModal():this.hosted.current?.focus({preventScroll:!0})}componentWillUnmount(){this.dialog.current?.close()}cancel=e=>{e.preventDefault(),e.stopPropagation(),this.props.onCancel()};backdropClick=e=>{let t=this.dialog.current;if(!t||e.target!==t)return;let n=t.getBoundingClientRect();(e.clientX<n.left||e.clientX>n.right||e.clientY<n.top||e.clientY>n.bottom)&&this.cancel(e)};hostedKeyDown=e=>{!e.defaultPrevented&&e.key===`Escape`&&this.cancel(e)};render(){return this.props.context===`standalone`?n(`dialog`,{ref:this.dialog,class:`seams-confirmation-modal`,"aria-label":o(this.context,this.props.label),onCancel:this.cancel,onClick:this.backdropClick,children:n(`div`,{id:this.containerId,class:`modal-container-root`,tabIndex:-1,children:this.props.children})}):n(`div`,{ref:this.hosted,class:`seams-confirmation-modal seams-confirmation-modal--hosted`,tabIndex:-1,onKeyDown:this.hostedKeyDown,children:n(`div`,{id:this.containerId,class:`modal-container-root`,children:this.props.children})})}};function f(e){let t=e.startTranslatePx+e.deltaPx;if(t>=e.restTranslatePx)return t;let n=Math.max(e.sheetHeightPx*.5,e.viewportHeightPx*.5,e.minimumOverpullPx),r=e.restTranslatePx-t;return e.restTranslatePx-n*(1-1/(r/n+1))}function p(e){let t=e.totalDeltaPx/Math.max(1,e.durationMs);return Math.min(e.velocityPxPerMs,t)<=-.6||Math.max(e.velocityPxPerMs,t)>=.7||e.translatePx>=e.sheetHeightPx-50}let m=0;function h(e){return n(g,{...e},e.context)}var g=class extends t{static contextType=a;state={settled:!1};id=`seams-confirmation-drawer-${++m}`;dialog=e();sheet=e();body=e();content=e();observer=null;frame=null;closeTimer=null;gesture={kind:`idle`};lifetime=`active`;closeReported=!1;suppressPointerClick=!1;componentDidMount(){let e=this.sheet.current,t=e.ownerDocument.defaultView;this.dialog.current?.showModal(),this.dialog.current||e.focus({preventScroll:!0}),this.observer=new ResizeObserver(this.measureContent),this.observer.observe(this.content.current),this.observer.observe(e),t.addEventListener(`resize`,this.scheduleMeasure),t.visualViewport?.addEventListener(`resize`,this.scheduleMeasure),this.measure(),this.frame=t.requestAnimationFrame(this.openAfterLayout),this.props.state.kind===`closing`&&this.startClose()}openAfterLayout=()=>{this.frame=null,this.setState({settled:!0})};componentDidUpdate(e){e.styles!==this.props.styles&&(e.styles.deleteDynamicRule(this.id),e.styles.deleteDynamicRule(`${this.id}-drag`),this.resetGesture(),this.measure()),e.state.kind!==this.props.state.kind&&(this.props.state.kind===`closing`?this.startClose():(this.clearCloseTimer(),this.closeReported=!1)),this.props.state.kind===`open`&&this.props.state.interaction===`busy`&&this.resetGesture()}componentWillUnmount(){this.lifetime=`disposed`,this.resetGesture();let e=this.sheet.current.ownerDocument.defaultView;this.frame!==null&&e.cancelAnimationFrame(this.frame),this.clearCloseTimer(),this.observer?.disconnect(),e.removeEventListener(`resize`,this.scheduleMeasure),e.visualViewport?.removeEventListener(`resize`,this.scheduleMeasure),this.props.styles.deleteDynamicRule(this.id),this.dialog.current?.close()}scheduleMeasure=()=>{this.lifetime===`disposed`||this.frame!==null||(this.frame=this.sheet.current.ownerDocument.defaultView.requestAnimationFrame(this.measureFrame))};measureFrame=()=>{this.frame=null,this.measure()};measureContent=()=>{this.lifetime===`active`&&this.measure()};measure(){if(this.gesture.kind!==`idle`)return;let e=this.sheet.current,t=this.content.current,n=Math.round(t.getBoundingClientRect().bottom-e.getBoundingClientRect().top),r=this.props.context===`standalone`?Math.max(0,e.offsetHeight-n):0;this.props.styles.setDynamicDeclarations(this.id,`#${this.id}`,{"--seams-drawer-rest":`${r}px`})}startClose(){this.resetGesture(),this.clearCloseTimer();let e=this.sheet.current.ownerDocument.defaultView,t=e.matchMedia(`(prefers-reduced-motion: reduce)`).matches?0:150;this.closeTimer=e.setTimeout(this.reportClosed,t)}clearCloseTimer(){this.closeTimer!==null&&(this.sheet.current.ownerDocument.defaultView.clearTimeout(this.closeTimer),this.closeTimer=null)}reportClosed=()=>{this.clearCloseTimer(),!(this.lifetime===`disposed`||this.closeReported||this.props.state.kind!==`closing`)&&(this.closeReported=!0,this.props.state.onClosed())};transitionEnd=e=>{e.target===this.sheet.current&&e.propertyName===`transform`&&this.reportClosed()};cancel=e=>{e.preventDefault(),e.stopPropagation(),this.props.state.kind===`open`&&this.props.onCancel()};backdropClick=e=>{this.props.dismissOnBackdrop!==!1&&e.target===this.dialog.current&&this.canDrag()&&this.cancel(e)};keyDown=e=>{!e.defaultPrevented&&e.key===`Escape`&&this.cancel(e)};canDrag(){return this.props.state.kind===`open`&&this.props.state.interaction===`ready`}pointerDown=e=>{if(this.clearClickSuppression(),!this.canDrag()||this.gesture.kind!==`idle`||!e.isPrimary||e.button!==0)return;let t=e.target;if(t instanceof Element&&t.closest(`a, input, textarea, select, summary, button:not(.seams-drawer-handle), [data-seams-drawer-no-drag]`))return;this.gesture={kind:`pending`,pointerId:e.pointerId,startY:e.clientY};let n=this.sheet.current.ownerDocument;n.addEventListener(`pointermove`,this.pointerMove,{passive:!1}),n.addEventListener(`pointerup`,this.pointerUp),n.addEventListener(`pointercancel`,this.pointerCancel)};pointerMove=e=>{let t=this.gesture;if(t.kind===`idle`||t.pointerId!==e.pointerId)return;let n=this.sheet.current;if(t.kind===`pending`){if(Math.abs(e.clientY-t.startY)<8||this.body.current.scrollTop>0)return;let r=n.ownerDocument.defaultView,i=new DOMMatrixReadOnly(r.getComputedStyle(n).transform).m42;t={kind:`dragging`,pointerId:t.pointerId,startY:t.startY,lastY:t.startY,startedAt:e.timeStamp,lastTime:e.timeStamp,velocity:0,rest:i,translate:i,height:n.offsetHeight},this.gesture=t,n.setPointerCapture(e.pointerId),n.classList.add(`is-dragging`)}let r=e.timeStamp-t.lastTime;r>0&&(t.velocity=(e.clientY-t.lastY)/r),t.lastY=e.clientY,t.lastTime=e.timeStamp,t.translate=f({startTranslatePx:t.rest,deltaPx:e.clientY-t.startY,restTranslatePx:t.rest,sheetHeightPx:t.height,viewportHeightPx:n.ownerDocument.defaultView.innerHeight,minimumOverpullPx:160}),this.props.styles.setDynamicDeclarations(`${this.id}-drag`,`#${this.id}`,{"--seams-drawer-drag":`${t.translate}px`}),e.preventDefault()};pointerUp=e=>{let t=this.gesture;if(t.kind===`idle`||t.pointerId!==e.pointerId)return;let n=t.kind===`dragging`&&p({velocityPxPerMs:t.velocity,totalDeltaPx:t.lastY-t.startY,durationMs:e.timeStamp-t.startedAt,translatePx:t.translate,sheetHeightPx:t.height});t.kind===`dragging`&&(this.suppressPointerClick=!0,e.preventDefault()),this.resetGesture(),n&&this.props.state.kind===`open`&&this.props.onCancel()};pointerCancel=e=>{this.gesture.kind!==`idle`&&this.gesture.pointerId===e.pointerId&&(this.gesture.kind===`dragging`&&(this.suppressPointerClick=!0),this.resetGesture())};clearClickSuppression=()=>{this.suppressPointerClick=!1};suppressDragClick=e=>{!this.suppressPointerClick||e.detail===0||(this.suppressPointerClick=!1,e.preventDefault(),e.stopPropagation())};resetGesture(){let e=this.sheet.current,t=this.gesture;this.gesture={kind:`idle`},t.kind!==`idle`&&e.hasPointerCapture(t.pointerId)&&e.releasePointerCapture(t.pointerId),e.classList.remove(`is-dragging`);let n=e.ownerDocument;n.removeEventListener(`pointermove`,this.pointerMove),n.removeEventListener(`pointerup`,this.pointerUp),n.removeEventListener(`pointercancel`,this.pointerCancel),this.props.styles.deleteDynamicRule(`${this.id}-drag`),this.lifetime===`active`&&this.scheduleMeasure()}render(){let e=this.state.settled&&this.props.state.kind===`open`,t=[`seams-confirmation-drawer`];e&&t.push(`is-open`),this.gesture.kind===`dragging`&&t.push(`is-dragging`);let a=n(`section`,{ref:this.sheet,id:this.id,class:t.join(` `),"data-context":this.props.context,tabIndex:-1,onPointerDownCapture:this.pointerDown,onClickCapture:this.suppressDragClick,onLostPointerCapture:this.pointerCancel,onTransitionEnd:this.transitionEnd,onKeyDown:this.keyDown,children:[n(`div`,{class:`seams-drawer-controls`,children:[this.props.origin&&n(`div`,{class:`seams-drawer-origin`,children:this.props.origin}),n(`button`,{type:`button`,class:`seams-drawer-handle`,"aria-label":r(this.context,`Dismiss confirmation`),disabled:!this.canDrag(),onClick:this.cancel,children:n(`span`,{})}),n(`button`,{type:`button`,class:`seams-drawer-close`,"aria-label":r(this.context,`Close`),disabled:!this.canDrag(),onClick:this.cancel,children:`×`})]}),n(`div`,{class:`seams-drawer-body`,ref:this.body,children:[this.props.errorMessage&&n(`div`,{class:`error`,children:n(i,{copy:this.props.errorMessage})}),n(`div`,{class:`seams-drawer-content`,ref:this.content,children:this.props.children})]})]});return this.props.context===`wallet-iframe`?a:n(`dialog`,{class:`seams-drawer-dialog`,ref:this.dialog,"aria-label":o(this.context,this.props.label),onCancel:this.cancel,onClick:this.backdropClick,onClickCapture:this.suppressDragClick,onPointerDownCapture:this.clearClickSuppression,children:a})}};export{s as i,u as n,c as r,h as t};
@@ -1 +1 @@
1
- import{z as e}from"./domainIds-t1lp25yU.js";import{h as t,m as n,v as r}from"./digests-BIaE0DMd.js";import{r as i,t as a}from"./errors-BJBDbwHk.js";import{p as o}from"./nonceLaneKeys-BF_UpvIy.js";import{u as s}from"./trace--mRP2OQc.js";import{n as c}from"./NonceCoordinator-3YhmDTS5.js";import{t as l}from"./collectAuthenticationCredentialForChallengeB64u-I4wq8OGq.js";import{o as u,t as d}from"./types-C4OErbBf.js";import{n as f,t as p}from"./confirmTypes-BvVtQs-M.js";import{i as m,t as h}from"./confirm-ui-nU6ymgiv.js";function g(e){return e===`drawer`?`drawer`:`modal`}function _(e){return typeof e!=`number`||!Number.isFinite(e)?0:Math.max(0,Math.floor(e))}function v(e){if(e?.uiMode===`none`)return{kind:`silent`,uiMode:`none`};let t=g(e?.uiMode);return e?.behavior===`skipClick`?{kind:`auto_proceed`,uiMode:t,behavior:`skipClick`,autoProceedDelay:_(e.autoProceedDelay)}:{kind:`interactive`,uiMode:t,behavior:`requireClick`}}function y(){return{kind:`silent`,uiMode:`none`}}function b(e){throw Error(`Unsupported confirmation config: ${String(e.kind)}`)}function x(e){if(e.type!==f.SIGN_TRANSACTION)return;let t=e.payload;if(t.signingKind!==`transaction`)return;let{subject:n,operation:r,signatureUses:i}=t.nearFundingRequest;if(n.walletId!==t.walletId||n.nearAccountId!==t.rpcCall.nearAccountId||n.nearPublicKeyStr!==t.nearPublicKeyStr)throw Error(`Invalid secure confirm request: NEAR funding subject mismatch`);if(r.accountId!==n.nearAccountId)throw Error(`Invalid secure confirm request: NEAR funding operation account mismatch`);if(!Number.isInteger(i)||i<1)throw Error(`Invalid secure confirm request: invalid NEAR funding signature use count`)}function S(e){if(e.type!==f.SIGN_TRANSACTION&&e.type!==f.SIGN_NEP413_MESSAGE)return;let t=e.payload;if(t.prfOutput!==void 0)throw Error(`Invalid secure confirm request: forbidden signing payload field prfOutput`);if(t.wrapKeySeed!==void 0)throw Error(`Invalid secure confirm request: forbidden signing payload field wrapKeySeed`);if(t.wrapKeySalt!==void 0)throw Error(`Invalid secure confirm request: forbidden signing payload field wrapKeySalt`)}function C(e){switch(e.type){case f.SIGN_TRANSACTION:return A(e).rpcCall.nearAccountId;case f.SIGN_NEP413_MESSAGE:return e.payload.nearAccountId;case f.SIGN_INTENT_DIGEST:{let t=E(e);return t.kind===`near_wallet`?t.nearAccountId:``}case f.REGISTER_ACCOUNT:case f.LINK_DEVICE:return String(P(e).nearAccountId||``).trim();case f.AUTHORIZE_KEY_EXPORT:{let t=w(e);return t.kind===`near_wallet`?t.nearAccountId:``}case f.SHOW_SECURE_PRIVATE_KEY_UI:{let t=w(e);return t.kind===`near_wallet`?t.nearAccountId:``}default:return``}}function w(e){if(e.type!==f.AUTHORIZE_KEY_EXPORT&&e.type!==f.SHOW_SECURE_PRIVATE_KEY_UI)throw Error(`Expected local key export request, got ${e.type}`);return e.payload.subject}function T(e){let t=w(e);switch(t.kind){case`near_wallet`:return t.nearAccountId;case`evm_wallet`:return t.walletId;default:{let e=t;throw Error(`Unsupported local key export subject: ${String(e)}`)}}}function E(e){if(e.type!==f.SIGN_INTENT_DIGEST)throw Error(`Expected SIGN_INTENT_DIGEST request, got ${e.type}`);return e.payload.signingSubject}function D(e){switch(e.type){case f.SIGN_TRANSACTION:return String(A(e).walletId||``).trim();case f.SIGN_NEP413_MESSAGE:return String(e.payload.walletId||``).trim();case f.REGISTER_ACCOUNT:case f.LINK_DEVICE:return String(P(e).walletId||``).trim();case f.SIGN_INTENT_DIGEST:return E(e).walletId;case f.AUTHORIZE_KEY_EXPORT:case f.SHOW_SECURE_PRIVATE_KEY_UI:return T(e);default:return C(e)}}function O(e){return e.type===f.SIGN_TRANSACTION&&A(e).txSigningRequests?.length||1}function k(e){return e.type===f.SIGN_TRANSACTION?e.payload.intentDigest:e?.intentDigest}function A(e){if(e.type!==f.SIGN_TRANSACTION)throw Error(`Expected SIGN_TRANSACTION request, got ${e.type}`);return e.payload}function j(e){if(e.type===f.SIGN_TRANSACTION)return A(e).displayModel;if(e.type===f.SIGN_NEP413_MESSAGE||e.type===f.SIGN_INTENT_DIGEST)return e.payload.displayModel}function M(e){if(e.type===f.SIGN_TRANSACTION)return u(A(e).signingAuthPlan);if(e.type===f.SIGN_NEP413_MESSAGE){let t=e.payload;return u(t.signingAuthPlan)}if(e.type===f.SIGN_INTENT_DIGEST){let t=e.payload;return u(t.signingAuthPlan)}}function N(e){if(e.type===f.SIGN_TRANSACTION){let t=A(e);return t.signingAuthPlan?.kind===d.EmailOtpReauth?t.signingAuthPlan.emailOtpPrompt:t.emailOtpPrompt}if(e.type===f.SIGN_NEP413_MESSAGE){let t=e.payload;return t.signingAuthPlan?.kind===d.EmailOtpReauth?t.signingAuthPlan.emailOtpPrompt:t.emailOtpPrompt}if(e.type===f.SIGN_INTENT_DIGEST){let t=e.payload;return t.signingAuthPlan?.kind===d.EmailOtpReauth?t.signingAuthPlan.emailOtpPrompt:t.emailOtpPrompt}}function P(e){if(e.type!==f.REGISTER_ACCOUNT&&e.type!==f.LINK_DEVICE)throw Error(`Expected REGISTER_ACCOUNT or LINK_DEVICE request, got ${e.type}`);return e.payload}function F(e){if(typeof e==`string`){let n=e.trim();if(!n)return{};try{let e=JSON.parse(n);return t(e)&&!Array.isArray(e)?e:{}}catch{return{}}}if(!t(e)||Array.isArray(e))throw Error(`Invalid secure confirm request summary: expected an object`);return e}function I(e){if(e==null)return e;if(Array.isArray(e))return e.map(e=>e);if(t(e)){let t=e,r={};for(let e of Object.keys(t)){if(e===`_confirmHandle`)continue;let i=t[e];n(i)||(r[e]=i)}return r}return e}const L={cancelled:`User cancelled secure confirm request`,collectCredentialsFailed:`Failed to collect credentials`,nearRpcFailed:`Failed to fetch NEAR data`};function R(t){return e(t.channelToken)}function z(t,n){let r=e(n?.channelToken);return!r&&!n?.onDecision?t:{postMessage:t.postMessage.bind(t),...r?{channelToken:r}:{},...n?.onDecision?{onDecision:n.onDecision}:{}}}function B(t,n,i){let{_confirmHandle:a,...o}=n,s=r(o.requestId)?o.requestId:n.requestId,c=e(i?.channelToken)??R(t),l={type:p.USER_PASSKEY_CONFIRM_RESPONSE,requestId:s,data:o,...c?{channelToken:c}:{}};t.onDecision?.(o),t.postMessage(l)}function V(t,n,i){let a=I(n),o=r(a?.requestId)?a.requestId:n.requestId,s=e(i?.channelToken)??R(t),c={type:p.USER_PASSKEY_CONFIRM_PROGRESS,requestId:o,data:a,...s?{channelToken:s}:{}};t.postMessage(c)}function H(e){return i(e)}function U(e,t){if(typeof e==`bigint`)return e;let n=String(e??t??`0`).trim();if(!n)return 0n;try{return BigInt(n)}catch{return 0n}}function W(e){if(!t(e))return null;let n=String(e.kind||``).trim(),r=String(e.walletId||``).trim(),i=String(e.nearAccountId||``).trim(),a=String(e.nearPublicKeyStr||``).trim();if(!r||!i||!a)return null;switch(n){case`implicit_unfunded`:return{kind:n,walletId:r,nearAccountId:i,nearPublicKeyStr:a};case`access_key_available`:case`sponsored_named_ready`:return{kind:n,walletId:r,nearAccountId:i,nearPublicKeyStr:a,nonce:U(e.nonce,e.nextNonce),accessKeyNonce:String(e.accessKeyNonce||``).trim(),nextNonce:String(e.nextNonce||``).trim(),txBlockHeight:String(e.txBlockHeight||``).trim(),txBlockHash:String(e.txBlockHash||``).trim()};case`account_lookup_failed`:return{kind:n,walletId:r,nearAccountId:i,nearPublicKeyStr:a,message:String(e.message||``).trim()};default:return null}}function G(e){return t(e)?W(e.readiness):null}function K(e,t){return e.walletId===String(t.subject.walletId)&&e.nearAccountId===String(t.subject.nearAccountId)&&e.nearPublicKeyStr===t.subject.nearPublicKeyStr}async function q(e,t){try{let{context:n,leases:r}=await e.nonceCoordinator.reserveNearContext({lane:c({chains:e.chains,walletId:String(t.subject.walletId),nearAccountId:String(t.subject.nearAccountId),nearPublicKeyStr:t.subject.nearPublicKeyStr}),operation:t.operation,count:t.signatureUses,nearClient:e.nearClient});return{kind:`readiness`,readiness:{kind:`context_ready`,transactionContext:{...n},nonceLeases:r.map(o)},reservedNonceLeases:r}}catch(e){let n=G(e);return n?.kind===`implicit_unfunded`&&K(n,t)?{kind:`readiness`,readiness:{kind:`funding_required`,request:t},reservedNonceLeases:[]}:{kind:`failed`,error:n?.kind===`account_lookup_failed`?`NEAR_ACCOUNT_LOOKUP_FAILED`:`NEAR_CONTEXT_UNAVAILABLE`,details:a(e)}}}async function J(e,t){t?.length&&await Promise.all(t.map(t=>e.nonceCoordinator.release({leaseId:t.leaseId,operationId:t.operationId,operationFingerprint:t.operationFingerprint,reason:`cancelled`})))}async function Y({ctx:e,nearAccountId:t,challengeB64u:n,onBeforePrompt:r,includeSecondPrfOutput:i=!1}){return l({credentialStore:e.webauthnCredentialStore,touchIdPrompt:e.touchIdPrompt,nearAccountId:t,challengeB64u:n,includeSecondPrfOutput:i,onBeforePrompt:r})}function X(e,t){t?.close?.(e)}function Z(e){return{chains:e.chains,getAppearance:e.getAppearance,nearExplorerUrl:e.nearExplorerUrl,tempoExplorerUrl:e.tempoExplorerUrl,evmExplorerUrl:e.evmExplorerUrl,surfaceMeasurementBinding:e.surfaceMeasurementBinding}}function Q(){return{kind:`confirm_ui_prompt_diagnostics_v1`,elementDefineMs:0,mountMs:0,hostFirstUpdateMs:0,hostInteractiveMs:0,confirmEventMs:0,decisionWaitMs:0}}async function $(e){let t=performance.now(),n=await m({ctx:Z(e.ctx),summary:e.transactionSummary,txSigningRequests:e.txSigningRequests,model:e.model,securityContext:e.securityContext,loading:e.loading??!0,theme:e.theme,uiMode:e.confirmationConfig.uiMode,signingAuthMode:e.signingAuthMode,emailOtpPrompt:e.emailOtpPrompt,surface:e.surface}),r=Math.max(0,Math.round(performance.now()-t));e.onMounted?.(n);let i=performance.now();await new Promise(t=>setTimeout(t,e.confirmationConfig.autoProceedDelay));let a=Math.max(0,Math.round(performance.now()-i));return{confirmed:!0,confirmHandle:n,diagnostics:{...Q(),mountMs:r,decisionWaitMs:a}}}async function ee(e){let{confirmed:t,handle:n,error:r,otpCode:i,emailOtpChallengeId:a,diagnostics:o}=await h({ctx:Z(e.ctx),summary:e.transactionSummary,txSigningRequests:e.txSigningRequests,model:e.model,securityContext:e.securityContext,loading:e.loading,theme:e.theme,uiMode:e.confirmationConfig.uiMode,onMounted:e.onMounted,signingAuthMode:e.signingAuthMode,emailOtpPrompt:e.emailOtpPrompt,surface:e.surface});return e.request.type===f.SIGN_TRANSACTION&&A(e.request).signingKind===`transaction`&&s(`near`,{event:`near_confirmation_prompt_timing`,mountMs:o.mountMs,decisionWaitMs:o.decisionWaitMs,confirmed:t}),{confirmed:t,confirmHandle:n,error:r,otpCode:i,emailOtpChallengeId:a,diagnostics:o}}async function te({ctx:e,request:t,confirmationConfig:n,transactionSummary:r,securityContext:i,loading:a,theme:o,surface:s,onMounted:c}){if(s.kind===`preparation_cancelled`)return{confirmed:!1,confirmHandle:void 0,diagnostics:Q()};let l=t.type===f.SIGN_TRANSACTION?A(t).txSigningRequests:[],u=j(t),d=M(t),p=N(t);switch(n.kind){case`silent`:return s.kind===`reuse_mounted`&&s.handle.close(!0),{confirmed:!0,confirmHandle:void 0,diagnostics:Q()};case`auto_proceed`:return await $({ctx:e,request:t,confirmationConfig:n,transactionSummary:r,securityContext:i,loading:a,theme:o,surface:s,onMounted:c,txSigningRequests:l,model:u,signingAuthMode:d,emailOtpPrompt:p});case`interactive`:return await ee({ctx:e,request:t,confirmationConfig:n,transactionSummary:r,securityContext:i,loading:a,theme:o,surface:s,onMounted:c,txSigningRequests:l,model:u,signingAuthMode:d,emailOtpPrompt:p});default:return b(n)}}function ne(e){return{near:{fetchNearContext:t=>q(e,t),releaseReservedNonces:t=>J(e,t)},security:{getRpId:()=>e.touchIdPrompt.getRpId()},webauthn:{collectAuthenticationCredentialWithPRF:t=>Y({ctx:e,...t}),createRegistrationCredential:t=>e.touchIdPrompt.generateRegistrationCredentialsInternal(t)},ui:{renderConfirmUI:t=>te({ctx:e,...t}),closeModalSafely:X}}}function re({adapters:e,worker:t,request:n,confirmationConfig:r,transactionSummary:i,theme:a,surface:o}){let s,c;return{setNonceLeases:e=>{s=e},updateUI:e=>{c?.update?.(e)},promptUser:async({securityContext:t,loading:s,onMounted:l})=>{let{confirmed:u,confirmHandle:d,error:f,otpCode:p,emailOtpChallengeId:m,diagnostics:h}=await e.ui.renderConfirmUI({request:n,confirmationConfig:r,transactionSummary:i,securityContext:t,loading:s,theme:a,surface:o,onMounted:e=>{c=e,l?.(e)}});return c=d,{confirmed:u,error:f,otpCode:p,emailOtpChallengeId:m,diagnostics:h}},dismissReviewSurface:()=>{e.ui.closeModalSafely(!0,c),c=void 0},confirmAndCloseModal:n=>{try{B(t,n)}finally{n.confirmed||e.near.releaseReservedNonces(s),e.ui.closeModalSafely(!!n.confirmed,c)}}}}export{O as _,H as a,y as b,V as c,x as d,k as f,M as g,A as h,z as i,B as l,E as m,ne as n,F as o,C as p,L as r,I as s,re as t,S as u,D as v,v as y};
1
+ import{z as e}from"./domainIds-t1lp25yU.js";import{h as t,m as n,v as r}from"./digests-BIaE0DMd.js";import{r as i,t as a}from"./errors-BJBDbwHk.js";import{p as o}from"./nonceLaneKeys-BF_UpvIy.js";import{u as s}from"./trace--mRP2OQc.js";import{n as c}from"./NonceCoordinator-3YhmDTS5.js";import{t as l}from"./collectAuthenticationCredentialForChallengeB64u-I4wq8OGq.js";import{o as u,t as d}from"./types-C4OErbBf.js";import{n as f,t as p}from"./confirmTypes-BvVtQs-M.js";import{i as m,t as h}from"./confirm-ui-em0vkd2m.js";function g(e){return e===`drawer`?`drawer`:`modal`}function _(e){return typeof e!=`number`||!Number.isFinite(e)?0:Math.max(0,Math.floor(e))}function v(e){if(e?.uiMode===`none`)return{kind:`silent`,uiMode:`none`};let t=g(e?.uiMode);return e?.behavior===`skipClick`?{kind:`auto_proceed`,uiMode:t,behavior:`skipClick`,autoProceedDelay:_(e.autoProceedDelay)}:{kind:`interactive`,uiMode:t,behavior:`requireClick`}}function y(){return{kind:`silent`,uiMode:`none`}}function b(e){throw Error(`Unsupported confirmation config: ${String(e.kind)}`)}function x(e){if(e.type!==f.SIGN_TRANSACTION)return;let t=e.payload;if(t.signingKind!==`transaction`)return;let{subject:n,operation:r,signatureUses:i}=t.nearFundingRequest;if(n.walletId!==t.walletId||n.nearAccountId!==t.rpcCall.nearAccountId||n.nearPublicKeyStr!==t.nearPublicKeyStr)throw Error(`Invalid secure confirm request: NEAR funding subject mismatch`);if(r.accountId!==n.nearAccountId)throw Error(`Invalid secure confirm request: NEAR funding operation account mismatch`);if(!Number.isInteger(i)||i<1)throw Error(`Invalid secure confirm request: invalid NEAR funding signature use count`)}function S(e){if(e.type!==f.SIGN_TRANSACTION&&e.type!==f.SIGN_NEP413_MESSAGE)return;let t=e.payload;if(t.prfOutput!==void 0)throw Error(`Invalid secure confirm request: forbidden signing payload field prfOutput`);if(t.wrapKeySeed!==void 0)throw Error(`Invalid secure confirm request: forbidden signing payload field wrapKeySeed`);if(t.wrapKeySalt!==void 0)throw Error(`Invalid secure confirm request: forbidden signing payload field wrapKeySalt`)}function C(e){switch(e.type){case f.SIGN_TRANSACTION:return A(e).rpcCall.nearAccountId;case f.SIGN_NEP413_MESSAGE:return e.payload.nearAccountId;case f.SIGN_INTENT_DIGEST:{let t=E(e);return t.kind===`near_wallet`?t.nearAccountId:``}case f.REGISTER_ACCOUNT:case f.LINK_DEVICE:return String(P(e).nearAccountId||``).trim();case f.AUTHORIZE_KEY_EXPORT:{let t=w(e);return t.kind===`near_wallet`?t.nearAccountId:``}case f.SHOW_SECURE_PRIVATE_KEY_UI:{let t=w(e);return t.kind===`near_wallet`?t.nearAccountId:``}default:return``}}function w(e){if(e.type!==f.AUTHORIZE_KEY_EXPORT&&e.type!==f.SHOW_SECURE_PRIVATE_KEY_UI)throw Error(`Expected local key export request, got ${e.type}`);return e.payload.subject}function T(e){let t=w(e);switch(t.kind){case`near_wallet`:return t.nearAccountId;case`evm_wallet`:return t.walletId;default:{let e=t;throw Error(`Unsupported local key export subject: ${String(e)}`)}}}function E(e){if(e.type!==f.SIGN_INTENT_DIGEST)throw Error(`Expected SIGN_INTENT_DIGEST request, got ${e.type}`);return e.payload.signingSubject}function D(e){switch(e.type){case f.SIGN_TRANSACTION:return String(A(e).walletId||``).trim();case f.SIGN_NEP413_MESSAGE:return String(e.payload.walletId||``).trim();case f.REGISTER_ACCOUNT:case f.LINK_DEVICE:return String(P(e).walletId||``).trim();case f.SIGN_INTENT_DIGEST:return E(e).walletId;case f.AUTHORIZE_KEY_EXPORT:case f.SHOW_SECURE_PRIVATE_KEY_UI:return T(e);default:return C(e)}}function O(e){return e.type===f.SIGN_TRANSACTION&&A(e).txSigningRequests?.length||1}function k(e){return e.type===f.SIGN_TRANSACTION?e.payload.intentDigest:e?.intentDigest}function A(e){if(e.type!==f.SIGN_TRANSACTION)throw Error(`Expected SIGN_TRANSACTION request, got ${e.type}`);return e.payload}function j(e){if(e.type===f.SIGN_TRANSACTION)return A(e).displayModel;if(e.type===f.SIGN_NEP413_MESSAGE||e.type===f.SIGN_INTENT_DIGEST)return e.payload.displayModel}function M(e){if(e.type===f.SIGN_TRANSACTION)return u(A(e).signingAuthPlan);if(e.type===f.SIGN_NEP413_MESSAGE){let t=e.payload;return u(t.signingAuthPlan)}if(e.type===f.SIGN_INTENT_DIGEST){let t=e.payload;return u(t.signingAuthPlan)}}function N(e){if(e.type===f.SIGN_TRANSACTION){let t=A(e);return t.signingAuthPlan?.kind===d.EmailOtpReauth?t.signingAuthPlan.emailOtpPrompt:t.emailOtpPrompt}if(e.type===f.SIGN_NEP413_MESSAGE){let t=e.payload;return t.signingAuthPlan?.kind===d.EmailOtpReauth?t.signingAuthPlan.emailOtpPrompt:t.emailOtpPrompt}if(e.type===f.SIGN_INTENT_DIGEST){let t=e.payload;return t.signingAuthPlan?.kind===d.EmailOtpReauth?t.signingAuthPlan.emailOtpPrompt:t.emailOtpPrompt}}function P(e){if(e.type!==f.REGISTER_ACCOUNT&&e.type!==f.LINK_DEVICE)throw Error(`Expected REGISTER_ACCOUNT or LINK_DEVICE request, got ${e.type}`);return e.payload}function F(e){if(typeof e==`string`){let n=e.trim();if(!n)return{};try{let e=JSON.parse(n);return t(e)&&!Array.isArray(e)?e:{}}catch{return{}}}if(!t(e)||Array.isArray(e))throw Error(`Invalid secure confirm request summary: expected an object`);return e}function I(e){if(e==null)return e;if(Array.isArray(e))return e.map(e=>e);if(t(e)){let t=e,r={};for(let e of Object.keys(t)){if(e===`_confirmHandle`)continue;let i=t[e];n(i)||(r[e]=i)}return r}return e}const L={cancelled:`User cancelled secure confirm request`,collectCredentialsFailed:`Failed to collect credentials`,nearRpcFailed:`Failed to fetch NEAR data`};function R(t){return e(t.channelToken)}function z(t,n){let r=e(n?.channelToken);return!r&&!n?.onDecision?t:{postMessage:t.postMessage.bind(t),...r?{channelToken:r}:{},...n?.onDecision?{onDecision:n.onDecision}:{}}}function B(t,n,i){let{_confirmHandle:a,...o}=n,s=r(o.requestId)?o.requestId:n.requestId,c=e(i?.channelToken)??R(t),l={type:p.USER_PASSKEY_CONFIRM_RESPONSE,requestId:s,data:o,...c?{channelToken:c}:{}};t.onDecision?.(o),t.postMessage(l)}function V(t,n,i){let a=I(n),o=r(a?.requestId)?a.requestId:n.requestId,s=e(i?.channelToken)??R(t),c={type:p.USER_PASSKEY_CONFIRM_PROGRESS,requestId:o,data:a,...s?{channelToken:s}:{}};t.postMessage(c)}function H(e){return i(e)}function U(e,t){if(typeof e==`bigint`)return e;let n=String(e??t??`0`).trim();if(!n)return 0n;try{return BigInt(n)}catch{return 0n}}function W(e){if(!t(e))return null;let n=String(e.kind||``).trim(),r=String(e.walletId||``).trim(),i=String(e.nearAccountId||``).trim(),a=String(e.nearPublicKeyStr||``).trim();if(!r||!i||!a)return null;switch(n){case`implicit_unfunded`:return{kind:n,walletId:r,nearAccountId:i,nearPublicKeyStr:a};case`access_key_available`:case`sponsored_named_ready`:return{kind:n,walletId:r,nearAccountId:i,nearPublicKeyStr:a,nonce:U(e.nonce,e.nextNonce),accessKeyNonce:String(e.accessKeyNonce||``).trim(),nextNonce:String(e.nextNonce||``).trim(),txBlockHeight:String(e.txBlockHeight||``).trim(),txBlockHash:String(e.txBlockHash||``).trim()};case`account_lookup_failed`:return{kind:n,walletId:r,nearAccountId:i,nearPublicKeyStr:a,message:String(e.message||``).trim()};default:return null}}function G(e){return t(e)?W(e.readiness):null}function K(e,t){return e.walletId===String(t.subject.walletId)&&e.nearAccountId===String(t.subject.nearAccountId)&&e.nearPublicKeyStr===t.subject.nearPublicKeyStr}async function q(e,t){try{let{context:n,leases:r}=await e.nonceCoordinator.reserveNearContext({lane:c({chains:e.chains,walletId:String(t.subject.walletId),nearAccountId:String(t.subject.nearAccountId),nearPublicKeyStr:t.subject.nearPublicKeyStr}),operation:t.operation,count:t.signatureUses,nearClient:e.nearClient});return{kind:`readiness`,readiness:{kind:`context_ready`,transactionContext:{...n},nonceLeases:r.map(o)},reservedNonceLeases:r}}catch(e){let n=G(e);return n?.kind===`implicit_unfunded`&&K(n,t)?{kind:`readiness`,readiness:{kind:`funding_required`,request:t},reservedNonceLeases:[]}:{kind:`failed`,error:n?.kind===`account_lookup_failed`?`NEAR_ACCOUNT_LOOKUP_FAILED`:`NEAR_CONTEXT_UNAVAILABLE`,details:a(e)}}}async function J(e,t){t?.length&&await Promise.all(t.map(t=>e.nonceCoordinator.release({leaseId:t.leaseId,operationId:t.operationId,operationFingerprint:t.operationFingerprint,reason:`cancelled`})))}async function Y({ctx:e,nearAccountId:t,challengeB64u:n,onBeforePrompt:r,includeSecondPrfOutput:i=!1}){return l({credentialStore:e.webauthnCredentialStore,touchIdPrompt:e.touchIdPrompt,nearAccountId:t,challengeB64u:n,includeSecondPrfOutput:i,onBeforePrompt:r})}function X(e,t){t?.close?.(e)}function Z(e){return{chains:e.chains,getAppearance:e.getAppearance,nearExplorerUrl:e.nearExplorerUrl,tempoExplorerUrl:e.tempoExplorerUrl,evmExplorerUrl:e.evmExplorerUrl,surfaceMeasurementBinding:e.surfaceMeasurementBinding}}function Q(){return{kind:`confirm_ui_prompt_diagnostics_v1`,elementDefineMs:0,mountMs:0,hostFirstUpdateMs:0,hostInteractiveMs:0,confirmEventMs:0,decisionWaitMs:0}}async function $(e){let t=performance.now(),n=await m({ctx:Z(e.ctx),summary:e.transactionSummary,txSigningRequests:e.txSigningRequests,model:e.model,securityContext:e.securityContext,loading:e.loading??!0,theme:e.theme,uiMode:e.confirmationConfig.uiMode,signingAuthMode:e.signingAuthMode,emailOtpPrompt:e.emailOtpPrompt,surface:e.surface}),r=Math.max(0,Math.round(performance.now()-t));e.onMounted?.(n);let i=performance.now();await new Promise(t=>setTimeout(t,e.confirmationConfig.autoProceedDelay));let a=Math.max(0,Math.round(performance.now()-i));return{confirmed:!0,confirmHandle:n,diagnostics:{...Q(),mountMs:r,decisionWaitMs:a}}}async function ee(e){let{confirmed:t,handle:n,error:r,otpCode:i,emailOtpChallengeId:a,diagnostics:o}=await h({ctx:Z(e.ctx),summary:e.transactionSummary,txSigningRequests:e.txSigningRequests,model:e.model,securityContext:e.securityContext,loading:e.loading,theme:e.theme,uiMode:e.confirmationConfig.uiMode,onMounted:e.onMounted,signingAuthMode:e.signingAuthMode,emailOtpPrompt:e.emailOtpPrompt,surface:e.surface});return e.request.type===f.SIGN_TRANSACTION&&A(e.request).signingKind===`transaction`&&s(`near`,{event:`near_confirmation_prompt_timing`,mountMs:o.mountMs,decisionWaitMs:o.decisionWaitMs,confirmed:t}),{confirmed:t,confirmHandle:n,error:r,otpCode:i,emailOtpChallengeId:a,diagnostics:o}}async function te({ctx:e,request:t,confirmationConfig:n,transactionSummary:r,securityContext:i,loading:a,theme:o,surface:s,onMounted:c}){if(s.kind===`preparation_cancelled`)return{confirmed:!1,confirmHandle:void 0,diagnostics:Q()};let l=t.type===f.SIGN_TRANSACTION?A(t).txSigningRequests:[],u=j(t),d=M(t),p=N(t);switch(n.kind){case`silent`:return s.kind===`reuse_mounted`&&s.handle.close(!0),{confirmed:!0,confirmHandle:void 0,diagnostics:Q()};case`auto_proceed`:return await $({ctx:e,request:t,confirmationConfig:n,transactionSummary:r,securityContext:i,loading:a,theme:o,surface:s,onMounted:c,txSigningRequests:l,model:u,signingAuthMode:d,emailOtpPrompt:p});case`interactive`:return await ee({ctx:e,request:t,confirmationConfig:n,transactionSummary:r,securityContext:i,loading:a,theme:o,surface:s,onMounted:c,txSigningRequests:l,model:u,signingAuthMode:d,emailOtpPrompt:p});default:return b(n)}}function ne(e){return{near:{fetchNearContext:t=>q(e,t),releaseReservedNonces:t=>J(e,t)},security:{getRpId:()=>e.touchIdPrompt.getRpId()},webauthn:{collectAuthenticationCredentialWithPRF:t=>Y({ctx:e,...t}),createRegistrationCredential:t=>e.touchIdPrompt.generateRegistrationCredentialsInternal(t)},ui:{renderConfirmUI:t=>te({ctx:e,...t}),closeModalSafely:X}}}function re({adapters:e,worker:t,request:n,confirmationConfig:r,transactionSummary:i,theme:a,surface:o}){let s,c;return{setNonceLeases:e=>{s=e},updateUI:e=>{c?.update?.(e)},promptUser:async({securityContext:t,loading:s,onMounted:l})=>{let{confirmed:u,confirmHandle:d,error:f,otpCode:p,emailOtpChallengeId:m,diagnostics:h}=await e.ui.renderConfirmUI({request:n,confirmationConfig:r,transactionSummary:i,securityContext:t,loading:s,theme:a,surface:o,onMounted:e=>{c=e,l?.(e)}});return c=d,{confirmed:u,error:f,otpCode:p,emailOtpChallengeId:m,diagnostics:h}},dismissReviewSurface:()=>{e.ui.closeModalSafely(!0,c),c=void 0},confirmAndCloseModal:n=>{try{B(t,n)}finally{n.confirmed||e.near.releaseReservedNonces(s),e.ui.closeModalSafely(!!n.confirmed,c)}}}}export{O as _,H as a,y as b,V as c,x as d,k as f,M as g,A as h,z as i,B as l,E as m,ne as n,F as o,C as p,L as r,I as s,re as t,S as u,D as v,v as y};