@opensesame-labs/web-pwa 0.0.0-alpha.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 (323) hide show
  1. package/README.md +5 -0
  2. package/bin/serve.mjs +60 -0
  3. package/dist/404.html +35 -0
  4. package/dist/about.html +37 -0
  5. package/dist/assets/AmbientAuthPanel-CwFZygJY.js +1 -0
  6. package/dist/assets/AppShell-OiN-7dB4.css +1 -0
  7. package/dist/assets/AppShell-xqEu_Cfz.js +1 -0
  8. package/dist/assets/ApproveScreen-Dj995x0T.js +1 -0
  9. package/dist/assets/BackupEnableSwitch-DwKTWzBG.js +1 -0
  10. package/dist/assets/CoachHud-9Bqu4Gtl.css +1 -0
  11. package/dist/assets/CoachHud-DHqFf7ez.js +1 -0
  12. package/dist/assets/Crumbs-BQsauYj_.js +1 -0
  13. package/dist/assets/DraftSuggestions-DT51r14S.js +2 -0
  14. package/dist/assets/DraftSuggestions-DuLxCyqM.css +1 -0
  15. package/dist/assets/EmptyTip-DnxQjLsP.js +1 -0
  16. package/dist/assets/FeatureSections-BG-JsWID.js +1 -0
  17. package/dist/assets/FormatHintMatch-QX0JkGnd.js +1 -0
  18. package/dist/assets/HealthPanel-DXnPgdo5.js +1 -0
  19. package/dist/assets/IdentityConnectionSignIn-Bg53RjtJ.js +2 -0
  20. package/dist/assets/InteractionScreen-BCh2d-a4.js +1 -0
  21. package/dist/assets/InvokeScreen-C-kFFYVF.js +1 -0
  22. package/dist/assets/InvokeScreen-CsvSkues.css +1 -0
  23. package/dist/assets/ItemDetail-DCzWiS4b.js +1 -0
  24. package/dist/assets/ItemEditor-BQp0D0PB.js +1 -0
  25. package/dist/assets/KeybindingsPanels-Buh32SBq.css +1 -0
  26. package/dist/assets/KeybindingsPanels-CAhCFduu.js +1 -0
  27. package/dist/assets/MethodPicker-CqQTyAaT.js +1 -0
  28. package/dist/assets/MfaStep-DvSV4q5P.js +1 -0
  29. package/dist/assets/OpenFileKey-DKFq5mOf.js +1 -0
  30. package/dist/assets/PageTreeBranch-OgsaK684.js +1 -0
  31. package/dist/assets/SaveRequestScreen-exu7HwhA.js +1 -0
  32. package/dist/assets/SettingsSection-BHTAhGaz.css +1 -0
  33. package/dist/assets/SettingsSection-BfxiCHWn.js +2 -0
  34. package/dist/assets/SiopAuthorize-D_OIu8gb.js +1 -0
  35. package/dist/assets/SupportLauncher-DgUajogl.css +1 -0
  36. package/dist/assets/SupportLauncher-DlkkaWxf.js +2 -0
  37. package/dist/assets/SupportPanel-W7lTTCHo.js +1 -0
  38. package/dist/assets/VaultSection-BUcbIjl5.css +1 -0
  39. package/dist/assets/VaultSection-DuzGVD_1.js +1 -0
  40. package/dist/assets/WalletSection-C4CTvIi9.js +1 -0
  41. package/dist/assets/agent-ag-ui-DRbKYcn6.js +2 -0
  42. package/dist/assets/agent-boundary-D0s3Xear.js +2 -0
  43. package/dist/assets/agent-prompt-api-BiYrmT5D.js +1 -0
  44. package/dist/assets/agent-provider-BiJcKH7o.js +1 -0
  45. package/dist/assets/binary-encoding-D9rJ9tvs.js +1 -0
  46. package/dist/assets/bitwarden-native.worker-CFoAF-yw.js +1 -0
  47. package/dist/assets/bitwarden-secrets.worker-BfAQLREw.js +1 -0
  48. package/dist/assets/bitwarden_wasm_bg.wasm-B2_HqYUA.gz +0 -0
  49. package/dist/assets/browser-pslP6-1t.js +1 -0
  50. package/dist/assets/bucket-boot-4cPKWVva.js +1 -0
  51. package/dist/assets/bucket-saved-vQCiVvN_.js +1 -0
  52. package/dist/assets/byo-B-SNpHiS.js +1 -0
  53. package/dist/assets/byo-CDLRauwG.css +1 -0
  54. package/dist/assets/canary-owner-effects-CY2GR4d-.js +1 -0
  55. package/dist/assets/cap-access.authority-D-B2rtcO.js +1 -0
  56. package/dist/assets/cap-agents.surrogate-credentials-7eqyWZfT.js +1 -0
  57. package/dist/assets/cap-agents.webmcp-Bve0G9t3.js +2 -0
  58. package/dist/assets/cap-ai.password-reset-rh9CIhu-.js +1 -0
  59. package/dist/assets/cap-connectors.external-dKuiKE5J.js +1 -0
  60. package/dist/assets/cap-enterprise.ca-administration-CirJdAWC.js +1 -0
  61. package/dist/assets/cap-enterprise.directory-provisioning-ixTSdLjk.js +1 -0
  62. package/dist/assets/cap-identity.ambient-sso-Bfz5okEX.js +1 -0
  63. package/dist/assets/cap-identity.claim-different-link-C0NXeZQE.js +1 -0
  64. package/dist/assets/cap-identity.federation-Di6GjTkh.js +1 -0
  65. package/dist/assets/cap-identity.local-iam-DdhiDQdb.js +2 -0
  66. package/dist/assets/cap-identity.siop-C80liHvH.js +1 -0
  67. package/dist/assets/cap-networking.tailnet-c5h7F7pL.js +1 -0
  68. package/dist/assets/cap-networking.tailnet-devices-BeZz-plo.js +1 -0
  69. package/dist/assets/cap-notifications.local-QwuLGxJM.js +1 -0
  70. package/dist/assets/cap-notifications.routing-CF-Wp35c.js +1 -0
  71. package/dist/assets/cap-notifications.web-push-DAddcIp-.js +1 -0
  72. package/dist/assets/cap-sharing.household-BeYPmwj5.js +1 -0
  73. package/dist/assets/cap-sharing.live-BkP10O4Q.js +2 -0
  74. package/dist/assets/cap-sharing.relay-Clx_tuEX.js +1 -0
  75. package/dist/assets/cap-sharing.trusted-contacts-D7bWujCh.js +1 -0
  76. package/dist/assets/cap-storage.encrypted-search-PLxhoql0.js +1 -0
  77. package/dist/assets/cap-support.local-ai-3PHedffw.js +1 -0
  78. package/dist/assets/cap-support.remote-ai-CmtCh9L6.js +1 -0
  79. package/dist/assets/cap-telemetry.external-BF6Csk9L.js +1 -0
  80. package/dist/assets/cap-vault.browser-autofill-CdS4F8Xw.js +1 -0
  81. package/dist/assets/cap-vault.certificate-records-Br6SdLtm.js +1 -0
  82. package/dist/assets/cap-vault.derived-records-CJXFAVNG.js +1 -0
  83. package/dist/assets/cap-vault.environments-CfpmRCF-.js +1 -0
  84. package/dist/assets/cap-vault.passkey-records-kB9UoKJ4.js +1 -0
  85. package/dist/assets/cap-vault.security-checks-BXzOBUjO.js +1 -0
  86. package/dist/assets/cap-wallet.spending-BGifVwmx.js +1 -0
  87. package/dist/assets/catalog-Y21H0gVA.js +1 -0
  88. package/dist/assets/certification_request-yoK4-cIl.js +1 -0
  89. package/dist/assets/certs-CDCfMuEi.js +1 -0
  90. package/dist/assets/cli-app-integration-crypto-TwyER0q4.js +2 -0
  91. package/dist/assets/commonjs-runtime-R6OqCcd0.js +1 -0
  92. package/dist/assets/compartment-guard-D3FuKM8N.js +1 -0
  93. package/dist/assets/configured-runtime-qg0cjMOO.js +1 -0
  94. package/dist/assets/connect-plan-ClXbb_FT.js +1 -0
  95. package/dist/assets/connections-CNmhCNAV.js +1 -0
  96. package/dist/assets/connectivity-monitor-B0ueE5HQ.js +1 -0
  97. package/dist/assets/connector-directory-D47kqlDJ.css +1 -0
  98. package/dist/assets/connector-directory-gjDOqgWh.js +1 -0
  99. package/dist/assets/connector-marks-BsMcGRbV.js +1 -0
  100. package/dist/assets/connector-settings-CBJ6GX5X.js +1 -0
  101. package/dist/assets/consent-CcqmRPoB.js +1 -0
  102. package/dist/assets/context-CL4-cwvA.js +1 -0
  103. package/dist/assets/context-DQQZvpeW.js +1 -0
  104. package/dist/assets/device-identity-carry-XMZRU4oW.js +1 -0
  105. package/dist/assets/device-identity-host-Bc5g7ie-.js +1 -0
  106. package/dist/assets/device-inbox-BoaNI30L.js +1 -0
  107. package/dist/assets/directory-panels-DNhzC0ld.js +1 -0
  108. package/dist/assets/directory-panels-DiZjkKtX.css +1 -0
  109. package/dist/assets/directory-signin-model-BfxENbC3.js +1 -0
  110. package/dist/assets/drop-open-BjgdLxWM.js +2 -0
  111. package/dist/assets/entra-instances-NyEKYI5c.js +1 -0
  112. package/dist/assets/features-9FeW22VH.js +1 -0
  113. package/dist/assets/federation-configured-restoration-DWAXgzcz.js +1 -0
  114. package/dist/assets/files-Bc2ZE3YH.js +1 -0
  115. package/dist/assets/gate-seat-D6oRkKUH.css +1 -0
  116. package/dist/assets/gate-seat-DHBrLaMG.js +2 -0
  117. package/dist/assets/github-app-local-B-4pPsY4.js +1 -0
  118. package/dist/assets/hosted-identity-rail-CUw0rn2T.css +1 -0
  119. package/dist/assets/hosted-identity-rail-Dv05NPNo.js +1 -0
  120. package/dist/assets/hosted-model-authority-CcNPE44H.js +1 -0
  121. package/dist/assets/hosted-model-protocol-B8j_voAG.js +1 -0
  122. package/dist/assets/iam-0IMZ11b6.css +1 -0
  123. package/dist/assets/iam-zBfzStfy.js +1 -0
  124. package/dist/assets/identity-BVf8yWa4.js +1 -0
  125. package/dist/assets/identity-DrfyABP-.css +1 -0
  126. package/dist/assets/identity-view-paths-Bi1yigZk.js +1 -0
  127. package/dist/assets/idp-presets-B1M-P0Ek.js +1 -0
  128. package/dist/assets/index-B6LVfIPY.js +1 -0
  129. package/dist/assets/index-BDSP-mCB.js +1 -0
  130. package/dist/assets/index-DGpAAq0f.js +1 -0
  131. package/dist/assets/index-browser-Cl3nb4Uk.js +1 -0
  132. package/dist/assets/install-DvNMSThj.js +1 -0
  133. package/dist/assets/item-contributions-BNmtlrGT.js +2 -0
  134. package/dist/assets/item-contributions-DNpnHRuL.css +1 -0
  135. package/dist/assets/item-secret-update-BGxSkyWF.js +1 -0
  136. package/dist/assets/item-type-pack-account-CoqotdBn.js +1 -0
  137. package/dist/assets/item-type-pack-address-CuEhIEN8.js +1 -0
  138. package/dist/assets/item-type-pack-api-credential-2taJJvyo.js +1 -0
  139. package/dist/assets/item-type-pack-api-key-BtsbWNqK.js +1 -0
  140. package/dist/assets/item-type-pack-authenticator-C10FbI_v.js +1 -0
  141. package/dist/assets/item-type-pack-bank-account-C7tahN_l.js +1 -0
  142. package/dist/assets/item-type-pack-card-DI2dXCYa.js +1 -0
  143. package/dist/assets/item-type-pack-contact-C8PeT6f9.js +1 -0
  144. package/dist/assets/item-type-pack-crypto-wallet-Sfg8ziqc.js +1 -0
  145. package/dist/assets/item-type-pack-database-Dy7ScLs9.js +1 -0
  146. package/dist/assets/item-type-pack-drivers-license-vMew977g.js +1 -0
  147. package/dist/assets/item-type-pack-health-insurance-DUixDMZj.js +1 -0
  148. package/dist/assets/item-type-pack-identity-document-FU9zx609.js +1 -0
  149. package/dist/assets/item-type-pack-membership-D_NYNr9q.js +1 -0
  150. package/dist/assets/item-type-pack-note-B3DY9bUR.js +1 -0
  151. package/dist/assets/item-type-pack-oauth-client-DMhUuM7e.js +1 -0
  152. package/dist/assets/item-type-pack-passport-B8VaXkBH.js +1 -0
  153. package/dist/assets/item-type-pack-password-D--bKPPZ.js +1 -0
  154. package/dist/assets/item-type-pack-server-BwQMhxjI.js +1 -0
  155. package/dist/assets/item-type-pack-software-license-CG2Bi2-4.js +1 -0
  156. package/dist/assets/item-type-pack-ssh-key-Cf4KqR5v.js +1 -0
  157. package/dist/assets/item-type-pack-token-Cfp58zHW.js +1 -0
  158. package/dist/assets/item-type-pack-wifi-DlJBEYLH.js +1 -0
  159. package/dist/assets/kdbxweb-Deb8D9Lv.js +1 -0
  160. package/dist/assets/linearRedirect-Cac5chv5.js +1 -0
  161. package/dist/assets/listing-page-B-c8QQVp.js +1 -0
  162. package/dist/assets/live-mqtt-BaSKU8QX.js +1 -0
  163. package/dist/assets/live-nats-CsIvuPj3.js +1 -0
  164. package/dist/assets/live-nostr-BfmabjiE.js +1 -0
  165. package/dist/assets/live-transport-files-DQCGPnPz.js +1 -0
  166. package/dist/assets/live-transport-files-Zxaw-sAI.css +1 -0
  167. package/dist/assets/local-ai-sdk-entry-Dq4Sm2_e.js +1 -0
  168. package/dist/assets/local-applications-rigvedS6.js +2 -0
  169. package/dist/assets/local-directory-bootstrap-NwIMPDrD.js +1 -0
  170. package/dist/assets/local-notifications-files-CWGvPHb8.js +1 -0
  171. package/dist/assets/local-share-grants-approvals-C89RIn08.js +1 -0
  172. package/dist/assets/local-vault-sessions-CGv9AsFj.js +1 -0
  173. package/dist/assets/main-BKK5N8Uh.css +1 -0
  174. package/dist/assets/main-BrkS-iow.js +2 -0
  175. package/dist/assets/merge-C8VYouYu.js +1 -0
  176. package/dist/assets/model-key-state-NiiWojtT.js +1 -0
  177. package/dist/assets/model-provider-B6oAnQX9.js +1 -0
  178. package/dist/assets/msalRedirect-CsZOSL-b.js +1 -0
  179. package/dist/assets/native-auth-return-BTXjvSvx.js +1 -0
  180. package/dist/assets/native-catalog-status-INsDvLpU.js +1 -0
  181. package/dist/assets/native-google-capability-BVj1mBPb.js +1 -0
  182. package/dist/assets/native-identity-admission-C4ZFillF.js +1 -0
  183. package/dist/assets/native-implicit-session-B9CuYTBA.js +1 -0
  184. package/dist/assets/native-oauth-http-BDqv664F.js +1 -0
  185. package/dist/assets/native-oauth-resource-runtime-D9u6_l-d.js +1 -0
  186. package/dist/assets/native-saml-DgVO7f2_.js +1 -0
  187. package/dist/assets/native-worker-bitwarden-native-contract-4175b124-DCuX5Y-I.js +1 -0
  188. package/dist/assets/native-worker-bitwarden-native-network-protocol-2ec12c2c-DdlqONg5.js +1 -0
  189. package/dist/assets/native-worker-bitwarden-native-worker-protocol-f491b626-C1Dz2Mxy.js +1 -0
  190. package/dist/assets/native-worker-bitwarden-worker-protocol-c9bedea4-CgZDhS6p.js +1 -0
  191. package/dist/assets/native-worker-bytes-a0e18d71-DFmKzL3P.js +1 -0
  192. package/dist/assets/native-worker-hash-wasm-9cbb16de-Bp4uJJy_.js +1 -0
  193. package/dist/assets/native-worker-levischuck-tiny-cbor-d8381e8f-BEl3rArG.js +1 -0
  194. package/dist/assets/native-worker-noble-ciphers-708367a7-BPuD3lXB.js +1 -0
  195. package/dist/assets/native-worker-noble-hashes-b1a58353-IgGIMWEC.js +1 -0
  196. package/dist/assets/native-worker-wasm-gzip-asset-47456844-DSWTIKdX.js +1 -0
  197. package/dist/assets/native-worker-zod-5c0ed887-B342B6ko.js +1 -0
  198. package/dist/assets/native-worker-zod-jitless-ba55e4a3-DZHC6DC7.js +1 -0
  199. package/dist/assets/nativeConnectorRedirect-Cac5chv5.js +1 -0
  200. package/dist/assets/nativeGoogleConsent-By04fGU0.js +1 -0
  201. package/dist/assets/nativeImplicitRedirect-CSQMi-YW.js +1 -0
  202. package/dist/assets/noble-crypto-Mv8l2A7D.js +1 -0
  203. package/dist/assets/notifications-CJoypYjy.css +1 -0
  204. package/dist/assets/notifications-DlWvurGh.js +1 -0
  205. package/dist/assets/onepassword-artifacts-DnlvryeZ.js +1 -0
  206. package/dist/assets/onepassword-sdk.worker-CcSZlR8e.js +1 -0
  207. package/dist/assets/os-logo-Dhy2KbxY.ttf +0 -0
  208. package/dist/assets/pane-trail-dW-2RSUm.js +1 -0
  209. package/dist/assets/password-workflows-Cmir8qky.js +1 -0
  210. package/dist/assets/payload-CVz3G9cA.js +1 -0
  211. package/dist/assets/peer-trust-CZzPSQ-X.js +1 -0
  212. package/dist/assets/plugin-activation-BLVTpDLX.css +1 -0
  213. package/dist/assets/plugin-activation-B_0fIk_I.js +1 -0
  214. package/dist/assets/portable-drop-CD_3kpqo.js +1 -0
  215. package/dist/assets/post-wire-DZbVz-_e.js +1 -0
  216. package/dist/assets/projection-read-9xClzF-E.js +1 -0
  217. package/dist/assets/react-dom-BwC4eQlG.js +1 -0
  218. package/dist/assets/react-router-XsJY84ug.js +1 -0
  219. package/dist/assets/reflect-metadata-DF0mcVP2.js +1 -0
  220. package/dist/assets/retired-owner-authentication-work-J-86Ved1.js +1 -0
  221. package/dist/assets/rotation-relay-DCS7Aa59.js +1 -0
  222. package/dist/assets/runtime-2tzejM54.js +1 -0
  223. package/dist/assets/runtime-BFa23LKn.css +1 -0
  224. package/dist/assets/runtime-BUihkTjL.js +1 -0
  225. package/dist/assets/runtime-BzHz3H7U.css +1 -0
  226. package/dist/assets/runtime-CXh-BOHA.js +1 -0
  227. package/dist/assets/runtime-CtH6kdhA.js +1 -0
  228. package/dist/assets/runtime-Dfzb5fxj.js +2 -0
  229. package/dist/assets/runtime-_4MyTTJ2.js +1 -0
  230. package/dist/assets/s3-CXe7JlAr.js +1 -0
  231. package/dist/assets/saved-model-agent-Cdn954wf.js +2 -0
  232. package/dist/assets/scroll-renderer-CPup0pR-.css +1 -0
  233. package/dist/assets/scroll-renderer-CPxIcBzQ.js +1 -0
  234. package/dist/assets/seams-DJ_lslby.js +1 -0
  235. package/dist/assets/secret-backend-onepassword-sdk-hhTb3tZb.js +1 -0
  236. package/dist/assets/secret-backends-_-CBukTJ.js +1 -0
  237. package/dist/assets/section-nav-goals-B_N-ZW2I.js +1 -0
  238. package/dist/assets/session-connections-WQ2L1zGG.js +2 -0
  239. package/dist/assets/session-connections-oSO_RMA1.css +1 -0
  240. package/dist/assets/settings-CHnpwTwf.css +1 -0
  241. package/dist/assets/settings-files-NL7VAn-D.css +1 -0
  242. package/dist/assets/settings-files-OnHfWPp_.js +1 -0
  243. package/dist/assets/sha3-Bm70HrE3.js +1 -0
  244. package/dist/assets/shared-Ck7e2FJN.js +1 -0
  245. package/dist/assets/signaling-BgALI1Na.js +1 -0
  246. package/dist/assets/signals-DdOHdr--.js +1 -0
  247. package/dist/assets/support-context-DrcseTKK.js +1 -0
  248. package/dist/assets/tailnet-devices-B4-KR7Lk.css +1 -0
  249. package/dist/assets/tailnet-devices-CRKI2IIc.js +1 -0
  250. package/dist/assets/tailnet-plugin-pairing-DTK4jAlP.js +1 -0
  251. package/dist/assets/tailscale-artifacts-FyY85j_Y.js +1 -0
  252. package/dist/assets/tailscale-node-Bxh73eIz.js +1 -0
  253. package/dist/assets/trusted-contacts-BUPioBSb.css +1 -0
  254. package/dist/assets/trusted-contacts-QkvTYGDn.js +1 -0
  255. package/dist/assets/types-Ctz6L20B.js +1 -0
  256. package/dist/assets/use-access-book-1e-Lb3_j.css +1 -0
  257. package/dist/assets/use-access-book-BusjdJX8.js +2 -0
  258. package/dist/assets/use-integrations-drawn-DYzpglrK.js +1 -0
  259. package/dist/assets/use-password-reset-generate-B11XaeM6.js +2 -0
  260. package/dist/assets/use-password-reset-generate-D7yK7QdU.css +1 -0
  261. package/dist/assets/use-settings-category-Ci1J38pa.css +1 -0
  262. package/dist/assets/use-settings-category-Dy0gsCtF.js +1 -0
  263. package/dist/assets/use-vault-search-C7u00nrc.js +1 -0
  264. package/dist/assets/use-vault-search-Cy48_tAA.css +1 -0
  265. package/dist/assets/useLocalConsent-LY9hCn8F.js +2 -0
  266. package/dist/assets/vault-credential-custody-DpnBb4qo.js +1 -0
  267. package/dist/assets/vault-list-path-Bh2_KZkq.js +1 -0
  268. package/dist/assets/vault-menu-CqO_AStq.js +1 -0
  269. package/dist/assets/vault-ui-seam-BQGS7RR6.js +1 -0
  270. package/dist/assets/vaults-B043odav.js +1 -0
  271. package/dist/assets/vendor-1password-save-bVqbF-cI.js +1 -0
  272. package/dist/assets/vendor-ag-ui-DapcFk1d.js +1 -0
  273. package/dist/assets/vendor-ai-sdk-D8TnA_ou.js +1 -0
  274. package/dist/assets/vendor-msal-D-SCQ_ve.js +1 -0
  275. package/dist/assets/wake-lock-C_y0fQco.js +1 -0
  276. package/dist/assets/webmcp-sdk-Brp7pH5M.js +1 -0
  277. package/dist/assets/website-pattern.worker-CHLdQLlR.js +1 -0
  278. package/dist/auth/linear.html +17 -0
  279. package/dist/auth/native-client.json +17 -0
  280. package/dist/auth/native-connector.html +17 -0
  281. package/dist/auth/native-google.html +29 -0
  282. package/dist/auth/native-implicit.html +18 -0
  283. package/dist/auth/redirect.html +15 -0
  284. package/dist/auth.js +1 -0
  285. package/dist/auth.js.sha384 +1 -0
  286. package/dist/browser-schema-config.js +5 -0
  287. package/dist/capability-distribution.json +108 -0
  288. package/dist/capability-graph.json +1 -0
  289. package/dist/contact.html +37 -0
  290. package/dist/icon-192.png +0 -0
  291. package/dist/icon-512.png +0 -0
  292. package/dist/icon.svg +1 -0
  293. package/dist/index.html +150 -0
  294. package/dist/index.md +22 -0
  295. package/dist/licenses/saml-xml.txt +315 -0
  296. package/dist/llms.txt +35 -0
  297. package/dist/manifest.webmanifest +1 -0
  298. package/dist/onepassword/LICENSE-0.5.0.txt +21 -0
  299. package/dist/onepassword/core-0.5.0-764c359d.mjs +822 -0
  300. package/dist/onepassword/core-0.5.0-7cc0e700.wasm.gz +0 -0
  301. package/dist/os-runtime-config.json +1 -0
  302. package/dist/privacy.html +39 -0
  303. package/dist/release.json +9 -0
  304. package/dist/robots.txt +4 -0
  305. package/dist/save-button.js +220 -0
  306. package/dist/security-profile.json +6 -0
  307. package/dist/siop-metadata.json +39 -0
  308. package/dist/sitemap.xml +9 -0
  309. package/dist/static-auth/1.0.3/opensesame-auth.min.js +1 -0
  310. package/dist/static-auth/1.0.3/opensesame-auth.min.js.sha384 +1 -0
  311. package/dist/static-auth/1.0.4/opensesame-auth.min.js +1 -0
  312. package/dist/static-auth/1.0.4/opensesame-auth.min.js.sha384 +1 -0
  313. package/dist/static-auth/1.0.5/opensesame-auth.min.js +1 -0
  314. package/dist/static-auth/1.0.5/opensesame-auth.min.js.sha384 +1 -0
  315. package/dist/static-auth/manifest.json +24 -0
  316. package/dist/sw-push.js +1 -0
  317. package/dist/sw.js +1 -0
  318. package/dist/tailscale/LICENSE.txt +86 -0
  319. package/dist/tailscale/OPEN-SOURCE-LICENSES.md +109 -0
  320. package/dist/tailscale/go-runtime-3e61b3267aa67a55.js +3 -0
  321. package/dist/tailscale/main-7b2a0868bcb7f638.wasm.gz +0 -0
  322. package/dist/tailscale/native-http-1992487ea59d7d17.js +1 -0
  323. package/package.json +26 -0
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/main-BKK5N8Uh.css","assets/InvokeScreen-CsvSkues.css","assets/byo-CDLRauwG.css","assets/use-settings-category-Ci1J38pa.css","assets/use-vault-search-Cy48_tAA.css","assets/hosted-identity-rail-CUw0rn2T.css","assets/identity-DrfyABP-.css","assets/settings-files-NL7VAn-D.css","assets/live-transport-files-Zxaw-sAI.css"])))=>i.map(i=>d[i]);
2
+ import{M as e,O as s,aq as t,ar as n,X as a,y as r,n as l,Y as i,as as o,at as c,a1 as u,j as d,au as m,d as h,av as p,aw as f,Q as v,S as j,ax as b,ay as g,az as x,aA as y,o as w,aB as k,l as C,K as _,aC as N,aD as S,z as T,v as $,c as R,r as E,h as P,aE as I,aF as z}from"./main-BrkS-iow.js";import{p as A,C as q,l as L,c as F,o as M,a as O,w as B,N as D,b as V,h as U,r as K,i as H,d as W,e as J,f as X,g as Y,j as Q,k as G,L as Z,m as ee,n as se,D as te,T as ne,q as ae,s as re,t as le,u as ie,v as oe,x as ce,y as ue,z as de,A as me,B as he,M as pe,E as fe,F as ve,G as je,H as be,I as ge,J as xe,K as ye,O as we,P as ke,Q as Ce,R as _e,S as Ne,U as Se,V as Te,W as $e,X as Re,Y as Ee,Z as Pe,_ as Ie,$ as ze,a0 as Ae,a1 as qe}from"./live-transport-files-DQCGPnPz.js";import{r as Le,j as Fe}from"./react-dom-BwC4eQlG.js";import{c as Me,L as Oe}from"./react-router-XsJY84ug.js";import{o as Be,i as De,j as Ve}from"./identity-view-paths-Bi1yigZk.js";import{_ as Ue}from"./hosted-model-authority-CcNPE44H.js";import{A as Ke,n as He,r as We,a as Je,b as Xe}from"./peer-trust-CZzPSQ-X.js";import{S as Ye,C as Qe}from"./InvokeScreen-C-kFFYVF.js";import{F as Ge,b as Ze,C as es,R as ss,c as ts,d as ns,u as as,Q as rs}from"./wake-lock-C_y0fQco.js";import{i as ls,E as is,c as os}from"./vault-ui-seam-BQGS7RR6.js";import{s as cs}from"./signaling-BgALI1Na.js";import{e as us}from"./local-directory-bootstrap-NwIMPDrD.js";import{E as ds,G as ms,H as hs,b as ps,v as fs,x as vs,d as js,s as bs}from"./drop-open-BjgdLxWM.js";import{s as gs,v as xs}from"./vaults-B043odav.js";import{C as ys}from"./MethodPicker-CqQTyAaT.js";import{u as ws,V as ks}from"./Crumbs-BQsauYj_.js";import{u as Cs}from"./idp-presets-B1M-P0Ek.js";import{e as _s,i as Ns,j as Ss}from"./signals-DdOHdr--.js";import{u as Ts}from"./payload-CVz3G9cA.js";import"./model-provider-B6oAnQX9.js";import{V as $s}from"./settings-files-OnHfWPp_.js";import{O as Rs,S as Es}from"./OpenFileKey-DKFq5mOf.js";import"./seams-DJ_lslby.js";import"./native-worker-zod-jitless-ba55e4a3-DZHC6DC7.js";import"./native-worker-noble-hashes-b1a58353-IgGIMWEC.js";import"./identity-BVf8yWa4.js";import"./native-worker-zod-5c0ed887-B342B6ko.js";import"./cli-app-integration-crypto-TwyER0q4.js";import"./cap-identity.local-iam-DdhiDQdb.js";import"./useLocalConsent-LY9hCn8F.js";import"./device-inbox-BoaNI30L.js";import"./local-applications-rigvedS6.js";import"./entra-instances-NyEKYI5c.js";import"./byo-B-SNpHiS.js";import"./connector-marks-BsMcGRbV.js";import"./hosted-identity-rail-Dv05NPNo.js";import"./pane-trail-dW-2RSUm.js";import"./use-vault-search-C7u00nrc.js";import"./section-nav-goals-B_N-ZW2I.js";import"./vault-menu-CqO_AStq.js";import"./listing-page-B-c8QQVp.js";import"./certs-CDCfMuEi.js";import"./bucket-saved-vQCiVvN_.js";import"./native-worker-bytes-a0e18d71-DFmKzL3P.js";import"./local-vault-sessions-CGv9AsFj.js";import"./native-catalog-status-INsDvLpU.js";import"./local-share-grants-approvals-C89RIn08.js";/* empty css */import"./PageTreeBranch-OgsaK684.js";import"./native-worker-noble-ciphers-708367a7-BPuD3lXB.js";import"./vault-list-path-Bh2_KZkq.js";import"./support-context-DrcseTKK.js";import"./use-settings-category-Dy0gsCtF.js";import"./features-9FeW22VH.js";import"./use-integrations-drawn-DYzpglrK.js";import"./shared-Ck7e2FJN.js";import"./FeatureSections-BG-JsWID.js";import"./compartment-guard-D3FuKM8N.js";function Ps(e){const s=function(e){for(let s=e.parentElement;s;s=s.parentElement){const e=getComputedStyle(s).overflowY;if(("auto"===e||"scroll"===e)&&s.scrollHeight>s.clientHeight)return s}return null}(e);if(!s)return;const t=e.getBoundingClientRect(),n=function(e){const s=e.getBoundingClientRect().top,t=e.querySelector(".page-index");return t&&"sticky"===getComputedStyle(t).position?Math.max(s,t.getBoundingClientRect().bottom):s}(s)+8,a=function(e){const s=e.getBoundingClientRect().bottom,t=window.visualViewport;return t?Math.min(s,t.offsetTop+t.height):s}(s)-8;t.top<n?s.scrollTop-=n-t.top:t.bottom>a&&(s.scrollTop+=t.bottom-a)}function Is(){if(e())return!0;const s=document.activeElement;return(s instanceof HTMLButtonElement||s instanceof HTMLInputElement||s instanceof HTMLSelectElement||s instanceof HTMLTextAreaElement)&&s.disabled}function zs(e){s(e)&&e&&Ps(e)}function As(e,s){const t=Le.useRef(e),n=Le.useRef(s);n.current=s,Le.useEffect(()=>{t.current!==e&&(t.current=e,Is()&&zs(n.current()))},[e])}function qs(e,s){const t=Le.useRef(e),n=Le.useRef(s);n.current=s,Le.useEffect(()=>{const s=t.current&&!e;t.current=e,s&&Is()&&zs(n.current())},[e])}const Ls={capability:"sharing.live",purpose:t},Fs=async()=>{throw new q("capability-not-active")};let Ms=null,Os=!1;const Bs=new Set;function Ds(){for(const e of Bs)e()}const Vs={blocked:"",peerTrustSignal:null,unverifiedManual:!0};function Us(e,s,t){const n={blocked:s,peerTrustSignal:e,unverifiedManual:!1};return t?{...n,rememberedPeerFingerprint:t.fingerprint,minimumPeerTrustEpoch:t.epoch}:n}function Ks(e,s,t=s){return{tone:e,label:s,tray:t}}const Hs={link:null,pasted:"",code:"",name:"",note:"",failed:"",alarm:"",useRoutes:!0,peerTrust:""},Ws=new Set;function Js(){for(const e of Ws)e()}function Xs(e){return Ws.add(e),()=>{Ws.delete(e)}}function Ys(e){return[Le.useSyncExternalStore(Xs,()=>Hs[e]),s=>{Hs[e]=s,Js()}]}const Qs={transport:B(e=>{const s=Ms?Ms.certificate:null;return s?new RTCPeerConnection({...e,certificates:[s]}):new RTCPeerConnection(e)}),carriers:Fs,joinUrl:()=>new URL("/OpenSesame/",window.location.origin).href,now:()=>Date.now(),joinTrust:async function(e){if(0===e.length)return Vs;const s=We(e);if(!s)return Us(e,"",null);try{const t=await Je(s.fingerprint);if("mismatch"===t.kind)return Us(e,"This peer's key changed",t);if("known"===t.kind)return Us(e,"",t)}catch{}return Us(e,"",null)}};function Gs(){const[e,s]=Le.useState(F),[t,n]=Le.useState(()=>e?.status??null);return Le.useEffect(()=>(s(F()),M(()=>s(F()))),[]),Le.useEffect(()=>{if(e)return e.subscribe(n);n(null)},[e]),{guest:e,status:t}}function Zs(){const[e,s]=Le.useState(O),[t,n]=Le.useState(()=>e?.state??null);return Le.useEffect(()=>(s(O()),M(()=>s(O()))),[]),Le.useEffect(()=>{if(e)return e.subscribe(n);n(null)},[e]),{host:e,state:t}}function et(e){const[s,t]=Le.useState(()=>e?.states??[]);return Le.useEffect(()=>(t(e?.states??[]),e?.subscribe(t)),[e]),s.some(e=>"ready"===e.status)}function st(e){const[s,t]=Le.useState(Qs.now),[n]=Le.useState(Qs.now);return Le.useEffect(()=>{if(null===e)return;const s=setInterval(()=>t(Qs.now()),1e3);return()=>clearInterval(s)},[e]),null===e?0:Math.max(0,(e<1e12?n+e:e)-s)}function tt(e){const s=Math.floor(e/6e4),t=Math.floor(s/60),n=Math.floor(t/24);return n>0?`${n} d ${t%24} h left`:t>0?`${t} h ${s%60} min left`:s>0?`${s} min left`:`${Math.ceil(e/1e3)} s left`}function nt({fieldLabel:e,editLabel:s,canEdit:t,save:n,onSaved:i,actions:o,children:c}){const[u,d]=Le.useState(!1),[m,h]=Le.useState(""),[p,f]=Le.useState(!1),v=Le.useId(),j=t&&void 0!==n&&u;async function b(){if(!n)return;const e=await n(m);null!==e?(f(!1),d(!1),h(""),i?.(e)):f(!0)}return Le.useEffect(()=>{j&&document.getElementById(v)?.focus()},[j,v]),Fe.jsxs(Ge,{label:e,actions:Fe.jsxs(Fe.Fragment,{children:[o,t&&n&&!u?Fe.jsx("button",{type:"button",className:"icon-btn","aria-label":`Edit ${s}`,title:`Edit ${s}`,onClick:()=>{f(!1),d(!0)},children:Fe.jsx(r,{size:17})}):null,j?Fe.jsx("button",{type:"button",className:"icon-btn","aria-label":`Save ${s}`,title:`Save ${s}`,onClick:()=>{b()},children:Fe.jsx(l,{size:17})}):null]}),children:[c,j?Fe.jsxs("div",{className:"live-edit",children:[Fe.jsx(a,{id:v,label:`New ${s}`,value:m,onValueChange:h,onEnter:()=>{b()}}),p?Fe.jsx(Ye,{tone:"err",label:"The owner refused"}):null]}):null]})}function at({item:e,field:s,canReveal:t,canCopy:n,canEdit:a,request:r,save:o}){const[c,u]=Le.useState(null),[d,m]=Le.useState(!1),{copied:h,failed:p,copy:f}=Ze(),v=`${e.id}:${s.key}`,j=`${e.name} ${s.label}`;return Fe.jsxs(nt,{fieldLabel:s.label,editLabel:j,canEdit:a,save:o?t=>o(e.id,s.key,t):void 0,onSaved:e=>{m(!1),u(e)},actions:t||n?Fe.jsxs(Fe.Fragment,{children:[t?Fe.jsx(ss,{revealed:null!==c,label:j,onToggle:()=>{!async function(){if(null!==c)return void u(null);const t=await r("reveal",e.id,s.key);m(null===t),u(t)}()}}):null,n?Fe.jsx("button",{type:"button",className:"icon-btn"+(h===v?" is-on":""),"aria-label":p===v?`Could not copy ${j}`:`Copy ${j}`,title:p===v?`Could not copy ${j}`:`Copy ${j}`,onClick:()=>{!async function(){if(!n)return;const t=await r("copy",e.id,s.key);m(null===t),null!==t&&await f(v,t)}()},children:Fe.jsx(h===v?l:i,{size:17})}):null]}):void 0,children:[Fe.jsx(es,{value:c??"",label:s.label,revealed:null!==c}),d?Fe.jsx(Ye,{tone:"err",label:"The owner refused"}):null]})}function rt({item:e,field:s,canEdit:t,save:n}){const[a,r]=Le.useState(null);return Fe.jsx(nt,{fieldLabel:s.label,editLabel:`${e.name} ${s.label}`,canEdit:t,save:n?t=>n(e.id,s.key,t):void 0,onSaved:r,children:Fe.jsx("span",{className:"frow__value",children:a??s.value})})}function lt({item:e,canReveal:s,canCopy:t,canEdit:n,request:a,save:r}){return Fe.jsxs("li",{className:"panel live-item",children:[Fe.jsxs("div",{className:"panel__head",children:[Fe.jsx("h2",{children:e.name}),Fe.jsx("span",{className:"vault-row__meta",children:e.type})]}),Fe.jsx("div",{className:"panel__body",children:e.fields.map(l=>l.concealed?Fe.jsx(at,{item:e,field:l,canReveal:s,canCopy:t,canEdit:n,request:a,save:r},l.key):Fe.jsx(rt,{item:e,field:l,canEdit:n,save:r},l.key))})]})}function it({catalog:e,request:s,save:t}){if(0===e.items.length)return Fe.jsx("p",{className:"live-help",children:"Nothing is shared yet."});const n="edit"===e.policy&&void 0!==t,a="use"!==e.policy;return Fe.jsx("ul",{className:"live-items","aria-label":e.title,children:e.items.map(r=>Fe.jsx(lt,{item:r,canReveal:"read"===e.policy||"edit"===e.policy,canCopy:a,canEdit:n,request:s,save:t},r.id))})}const ot="Allow the owner's addresses",ct="Join without them";function ut({addresses:e,onAnswer:s}){return Fe.jsxs("div",{className:"setup__stack",id:"live-addresses",children:[e.map(e=>Fe.jsx(Ge,{label:"Owner's address",children:Fe.jsx("span",{className:"frow__value frow__value--mono",children:e})},e)),Fe.jsxs("div",{className:"go-row",children:[Fe.jsx("button",{type:"button",className:"go",id:"live-addresses-allow","aria-label":ot,title:ot,onClick:()=>s(!0),children:Fe.jsx(l,{size:18})}),Fe.jsx("span",{className:"go-verb","aria-hidden":"true",children:ot}),Fe.jsx("button",{type:"button",className:"icon-btn","aria-label":ct,title:ct,onClick:()=>s(!1),children:Fe.jsx(o,{size:18})})]})]})}function dt({pasted:e,link:s,busy:t,setPasted:n}){return Fe.jsx(a,{id:"live-link",label:"Session link",type:"text",mono:!0,autoComplete:"off",lead:Fe.jsx(c,{size:17}),value:e,disabled:t,status:e&&!s?Fe.jsx(Ye,{tone:"err",label:"Not a live-session link"}):null,onValueChange:n})}function mt(e){const{needsCode:s,code:t,name:n,note:r,busy:l,setCode:i,setName:o,setNote:c}=e;return Fe.jsxs(Fe.Fragment,{children:[s?Fe.jsx(a,{id:"live-code",label:"Code",mono:!0,autoComplete:"off",placeholder:"XXXX-XXXX",lead:Fe.jsx(u,{size:17}),value:t,disabled:l,onValueChange:i}):null,Fe.jsx(a,{id:"live-name",label:"Your name",autoComplete:"nickname",lead:Fe.jsx(d,{size:17}),value:n,disabled:l,onValueChange:e=>o(e.slice(0,D))}),Fe.jsx(a,{id:"live-note",label:"Note",placeholder:"Optional",value:r,disabled:l,onValueChange:e=>c(e.slice(0,V))})]})}function ht({pin:e,confirm:s,accepted:t,problems:n,busy:a,setPin:r,setConfirm:l,setAccepted:i}){return Fe.jsxs("fieldset",{className:"fieldset",children:[Fe.jsx("legend",{children:"Create your own vault"}),Fe.jsxs("p",{className:"live-help",children:[Fe.jsx(m,{size:14,"aria-hidden":"true"})," This is your vault, separate from the owner's. It keeps your own items and gives you a local user for the owner to recognise."]}),Fe.jsxs("div",{className:"field",children:[Fe.jsx("label",{htmlFor:"live-device-pin",children:"Your vault PIN"}),Fe.jsx("input",{id:"live-device-pin",type:"password",inputMode:"numeric",autoComplete:"new-password","aria-describedby":"live-pin-rules",value:e,disabled:a,onChange:e=>r(e.target.value)})]}),Fe.jsx("p",{className:"live-help",id:"live-pin-rules",children:"8–12 digits, at least three different digits, and no run of three sequential digits."}),e.length>0&&n.length>0?Fe.jsx("ul",{className:"live-rules",children:n.map(e=>Fe.jsx("li",{children:e},e))}):null,Fe.jsxs("div",{className:"field",children:[Fe.jsx("label",{htmlFor:"live-device-pin-confirm",children:"Confirm PIN"}),Fe.jsx("input",{id:"live-device-pin-confirm",type:"password",inputMode:"numeric",autoComplete:"new-password",value:s,disabled:a,onChange:e=>l(e.target.value)})]}),Fe.jsxs("label",{className:"check",children:[Fe.jsx("input",{type:"checkbox",checked:t,disabled:a,onChange:e=>i(e.target.checked)}),Fe.jsx("span",{children:"I understand this vault cannot be recovered."})]})]})}function pt({peerTrust:e,busy:s,setPeerTrust:t}){return Fe.jsx(a,{id:"live-peer-trust",label:"Peer trust signal",type:"password",mono:!0,autoComplete:"off",value:e,disabled:s,onValueChange:t})}function ft(e){return`${e.slice(0,20)}…`}function vt({guest:e,code:s}){const{copied:t,failed:n,copy:r}=Ze(),[l,i]=Le.useState(""),[o,u]=Le.useState(!1),[d,m]=Le.useState(!1);return qs(d,()=>document.getElementById("live-reply")),Fe.jsxs(Fe.Fragment,{children:[Fe.jsx("p",{className:"live-help",children:"Send this join request to the owner. They paste it into their live session, then send you their reply code."}),Fe.jsx(Ge,{label:"Join request",actions:Fe.jsx(ts,{value:s,label:"your join request",fieldKey:"live-request",copied:t,failed:n,onCopy:r}),children:Fe.jsx("span",{className:"frow__value frow__value--mono",children:ft(s)})}),Fe.jsx("form",{onSubmit:s=>{s.preventDefault(),async function(){m(!0);try{u(!(await e.accept(l)))}finally{m(!1)}}()},children:Fe.jsx(a,{id:"live-reply",label:"The owner's reply code",placeholder:"Paste the reply the owner sends back",mono:!0,autoComplete:"off",lead:Fe.jsx(c,{size:17}),value:l,disabled:d,status:o?Fe.jsx(Ye,{tone:"err",label:"That reply is not for this request"}):null,onValueChange:e=>{i(e),u(!1)},tail:Fe.jsx("button",{type:"submit",className:"icon-btn","aria-label":"Connect",title:"Connect",disabled:d||0===l.trim().length,children:Fe.jsx(h,{size:16})})})})]})}function jt({routes:e,checked:s,disabled:t,onChange:n}){return U(e)?Fe.jsxs(Fe.Fragment,{children:[Fe.jsxs("label",{className:"join__choice",children:[Fe.jsx("input",{type:"checkbox",checked:s,disabled:t,onChange:e=>n(e.target.checked)}),Fe.jsxs("span",{children:["Pair through ",K(e).join(", ")]})]}),Fe.jsxs("p",{className:"live-help",children:[Fe.jsx(m,{size:14,"aria-hidden":"true"})," This relay exchanges only the sealed connection codes. Vault contents stay between the two browsers. Clear it to use the manual request and reply codes instead."]})]}):null}function bt({rendezvous:e}){const[s,t]=Le.useState(()=>e?.states??[]);return Le.useEffect(()=>e?.subscribe(t),[e]),e&&0!==s.length?Fe.jsx("div",{className:"live-carriers",children:s.map(e=>{const s=function(e){const s="broadcast"===e.spec.kind?"this browser":new URL(e.spec.url).host,t=`${s} (${e.spec.kind})`;return"blocked"===e.status?Ks("warn",`Blocked by this installation: ${s}`):"ready"===e.status?Ks("ok",`Carrying codes: ${t}`):"failed"===e.status?Ks("err",`Unreachable: ${t}`):Ks("idle",`Connecting: ${t}`)}(e);return Fe.jsx(Ye,{tone:s.tone,label:s.label},`${e.spec.kind} ${e.spec.url}`)})}):null}function gt({status:e}){const[s,t]=Le.useState(()=>Date.now());Le.useEffect(()=>{const e=setInterval(()=>t(Date.now()),1e3);return()=>clearInterval(e)},[]);const n=Math.max(0,Math.floor((s-e.since)/1e3)),a=Math.floor(X/1e3),r=e.ice?H(e.ice):"Checking a route";return Fe.jsxs(Fe.Fragment,{children:[Fe.jsxs("p",{className:"vault-row__meta","data-testid":"live-join-ice",children:[r," · ",n,"s / ",a,"s"]}),Fe.jsxs("div",{className:"go-row",id:"live-start-over",children:[Fe.jsx("button",{type:"button",className:"go","aria-label":"Start over",title:"Start over",onClick:()=>{W(),J("Live session","Connecting ended")},children:Fe.jsx(h,{size:18})}),Fe.jsx("span",{className:"go-verb","aria-hidden":"true",children:"Start over"})]})]})}const xt="Ask to join again";function yt({held:e}){const s=as(),t=function(e,s){const t=ns(),n=function(){const[e,s]=Ys("pasted"),[t,n]=Ys("code"),[a,r]=Ys("name"),[l,i]=Ys("note"),[o,c]=Le.useState(""),[u,d]=Le.useState(""),[m,h]=Le.useState(!1),[p,f]=Ys("peerTrust"),[v,j]=Le.useState(!1),[b,g]=Ys("failed"),[x,y]=Ys("alarm"),[w,k]=Le.useState(Hs.useRoutes);return{fields:{pasted:e,code:t,name:a,note:l,peerTrust:p,useRoutes:w,pin:o,confirm:u,accepted:m},set:{setPasted:s,setCode:n,setName:r,setNote:i,setPeerTrust:e=>{f(e),y(""),g("")},setUseRoutes:e=>{Hs.useRoutes=e,k(e)},setPin:c,setConfirm:d,setAccepted:h},busy:v,failed:b,alarm:x,setBusy:j,setFailed:g,setAlarm:y}}(),{fields:a,setBusy:r,setFailed:l,setAlarm:i}=n,o=function(e,s,t){const n=e??p(s.pasted),a=n?Y(n):null,r=a?n:null,l="invite"===r?.admission,i=l?f(s.code):null,o=Q(s.name),c=ds(s.pin),u=(m=s.confirm,0===(d=s.pin).length?null:ds(d)[0]??(m.length>0&&d!==m?"PINs do not match.":null));var d,m;const h=function(e,s,t){const{pin:n,confirm:a,accepted:r}=s;return"unlocked"===e?null:0===n.length?"Choose a PIN for your own vault.":null!==t?t:0===a.length?"Confirm your vault PIN.":n!==a?"PINs do not match.":r?null:"Acknowledge that your vault cannot be recovered."}(t,s,u);return{link:r,routes:a,needsCode:l,normalized:i,cleanedName:o,pinProblems:c,pinProblem:u,sealProblem:h,ready:null!==r&&o.length>0&&(!l||null!==i)&&null===h}}(e,a,s),{link:c,ready:u,normalized:d,cleanedName:m}=o;return{...n,...o,ask:async function(){if(c&&u){r(!0),l("");try{"empty"===s?(await t.createWithPin(a.pin),await us(t.activeTomb(),m)):"locked"===s&&(await gs(m,{shareKey:!1}),await t.createWithPin(a.pin),await us(t.activeTomb(),m));const e=await Qs.joinTrust(Q(a.peerTrust));if(e.blocked)return J("Live session",e.blocked),i(e.blocked),void l(e.blocked);await G({link:c,code:d,name:m,note:Q(a.note),transport:Qs.transport,useRoutes:a.useRoutes,carriers:Qs.carriers,peerTrustSignal:e.peerTrustSignal,unverifiedManual:e.unverifiedManual,rememberedPeerFingerprint:e.rememberedPeerFingerprint,minimumPeerTrustEpoch:e.minimumPeerTrustEpoch}),Os||(Os=!0,Ds())}catch(e){W();const s=e instanceof Error?function(e){return e.message.startsWith("peer_trust_refused:")?e.message.endsWith(":changed-key")?"This peer's key changed":e.message.endsWith(":missing-signal")?"Peer trust signal is required":"Peer trust could not be verified":null}(e):null,t=s??"This browser could not make a request code";J("Live session",t),i("This peer's key changed"===s?s:""),l(t)}finally{r(!1)}}}}}(e,s.status),{fields:n,link:a,needsCode:r,ready:l,busy:i,failed:o,alarm:c,sealProblem:u,ask:d}=t,m=Le.useRef(null),v=(b={alarm:c,ready:l,busy:i,link:a,pasted:n.pasted,needsCode:r??!1,code:n.code,name:n.name,sealProblem:u??void 0}).alarm?b.alarm:b.sealProblem?b.sealProblem:b.ready||b.busy?void 0:L({link:b.link,pasted:b.pasted,needsCode:b.needsCode,code:b.code,name:b.name,busy:b.busy});var b;return qs(i,()=>m.current?.querySelector(".go")),Fe.jsxs("form",{ref:m,className:"setup__stack",onSubmit:e=>{e.preventDefault(),d()},children:[Fe.jsx(wt,{held:e,vaultStatus:s.status,state:t}),o&&o!==c?Fe.jsx(Ye,{tone:"err",label:o}):null,c?Fe.jsx(Ye,{tone:"err",label:c}):null,l||i||!v?null:Fe.jsx("output",{className:"live-help",children:v}),Fe.jsx(j,{label:"Ask to join",disabled:!l||i||c.length>0,disabledReason:v,busy:i,icon:Fe.jsx(h,{size:18})})]})}function wt({held:e,vaultStatus:s,state:t}){const{fields:n,set:a,link:r,routes:l,needsCode:i,busy:o,pinProblems:c}=t,{pasted:u,code:d,name:h,note:p,peerTrust:f,useRoutes:v,pin:j,confirm:b,accepted:g}=n,{setPasted:x,setCode:y,setName:w,setNote:k,setPeerTrust:C,setUseRoutes:_,setPin:N,setConfirm:S,setAccepted:T}=a;return Fe.jsxs(Fe.Fragment,{children:[e&&r?Fe.jsx(Ye,{tone:"ok",label:"Link in hand"}):null,e&&!r?Fe.jsx(Ye,{tone:"err",label:"Not a live-session link"}):null,e?null:Fe.jsx(dt,{pasted:u,link:r,busy:o,setPasted:x}),Fe.jsx(mt,{needsCode:i??!1,code:d,name:h,note:p,busy:o,setCode:y,setName:w,setNote:k}),"empty"===s||"locked"===s?Fe.jsx(ht,{pin:j,confirm:b,accepted:g,problems:c,busy:o,setPin:N,setConfirm:S,setAccepted:T}):null,"locked"===s?Fe.jsxs("p",{className:"live-help",children:[Fe.jsx(m,{size:14,"aria-hidden":"true"})," A vault is locked on this device. Joining creates a new vault for this person; the old locked vault and its items stay on the device."]}):null,Fe.jsxs("p",{className:"live-help",children:[Fe.jsx(m,{size:14,"aria-hidden":"true"})," The owner sees the name you enter. Your own vault is separate; shared items stay live in this tab while the session is open."]}),Fe.jsxs("details",{className:"live-advanced",children:[Fe.jsx("summary",{children:"Advanced"}),l?Fe.jsx(jt,{routes:l,checked:v,disabled:o,onChange:_}):null,Fe.jsxs("p",{className:"live-help",children:[Fe.jsx(m,{size:14,"aria-hidden":"true"})," Peer trust is only for a code the owner gave you outside this link. Most people can leave it empty."]}),Fe.jsx(pt,{peerTrust:f,busy:o,setPeerTrust:C})]})]})}function kt(){const{guest:e,status:s}=Gs(),t=as(),n=Me(),a=Le.useSyncExternalStore(e=>(Bs.add(e),()=>Bs.delete(e)),()=>Os),r="joined"===s?.at?s.catalog:null,l=st(r?.expiresAt??null),i=s?function(e){switch(e.at){case"preparing":return{tone:"idle",label:"Making your request code",tray:"Making your request code"};case"request":return{tone:"idle",label:"Waiting for the owner's reply code",tray:"Waiting for the owner's reply code"};case"addresses":return{tone:"idle",label:"The owner's browser names its addresses",tray:"Allow the owner's addresses, or join without them"};case"connecting":return{tone:"idle",label:"Connecting to the owner's browser",tray:e.ice?H(e.ice):"Connecting"};case"connect_timeout":return{tone:"err",label:"Connection timed out",tray:"Connection timed out — ask again, or check your network"};case"joined":return{tone:"ok",label:`Joined ${e.catalog.title}`,tray:`Joined ${e.catalog.title}`};case"unreachable":return{tone:"err",label:"No route to the owner's browser",tray:e.reason};default:return{tone:"idle",label:"The session ended",tray:"The session ended"}}}(s):null;Le.useEffect(()=>{"unreachable"===s?.at&&J("Live session",s.reason),"ended"===s?.at&&J("Live session",i?.tray||Z)},[s,i?.tray]),Le.useEffect(()=>{"joined"===s?.at&&"unlocked"===t.status&&a&&Os&&(Os=!1,Ds(),1)&&n("/vault",{replace:!0})},[s?.at,t.status,a,n]),Le.useEffect(()=>{if("joined"!==s?.at||!e)return;const t=e.trustedOwner();t&&Xe(t).catch(()=>{})},[e,s]);const o=function(e,s,t){return e&&s&&t?{guest:e,status:s,mark:t}:null}(e,s,i);return o?Fe.jsxs("div",{className:"setup__stack",id:"live-view",children:[Fe.jsxs("div",{className:"live-status",id:"live-status",tabIndex:-1,children:[Fe.jsx(Ye,{tone:o.mark.tone,label:o.mark.label}),Fe.jsx("span",{className:"live-status__label",children:o.mark.label}),Fe.jsx("span",{className:"vault-row__meta",children:r?tt(l):o.mark.tray}),"joined"===o.status.at&&"unlocked"===t.status?Fe.jsx(Oe,{className:"btn btn--sm",to:"/vault",children:"Open my vault"}):null]}),"request"===o.status.at?Fe.jsx(Ct,{guest:o.guest,status:o.status}):null,"addresses"===o.status.at?Fe.jsx(ut,{addresses:o.status.addresses,onAnswer:e=>{o.guest.allowAddresses(e)}}):null,"connecting"===o.status.at?Fe.jsx(gt,{guest:o.guest,status:o.status}):null,"connect_timeout"===o.status.at?Fe.jsxs("div",{className:"go-row",children:[Fe.jsx("button",{type:"button",className:"go","aria-label":xt,title:xt,onClick:()=>{o.guest.askAgain().catch(()=>{W(),J("Live session","This browser could not make a request code")})},children:Fe.jsx(h,{size:18})}),Fe.jsx("span",{className:"go-verb","aria-hidden":"true",children:xt})]}):null,r?Fe.jsx(it,{catalog:r,request:(e,s,t)=>o.guest.request(e,s,t),save:(e,s,t)=>o.guest.edit(e,s,t)}):null]}):null}function Ct({guest:e,status:s}){const t=et(ee());return Fe.jsxs(Fe.Fragment,{children:[Fe.jsx(bt,{rendezvous:ee()}),t?Fe.jsx(Ye,{tone:"idle",label:"The owner can see your request. Waiting for them to let you in."}):null,s.sas?Fe.jsxs("details",{className:"live-verify",children:[Fe.jsx("summary",{children:"Security code"}),Fe.jsx("p",{className:"live-help",children:"Compare this with the owner if you are on a call with them. It is not needed when the owner already recognises your request."}),Fe.jsx("span",{className:"frow__value frow__value--mono live-sas",children:s.sas})]}):null,s.unverified?Fe.jsx(Ye,{tone:"warn",label:"Unverified"}):null,t?null:Fe.jsx(vt,{guest:e,code:s.code})]})}function _t(e,s){switch(s){case"ask":return v(e?.querySelector("form"));case"preparing":case"request":return v(document.getElementById("live-view"));case"addresses":return document.getElementById("live-addresses-allow");case"connecting":case"connect_timeout":case"joined":return document.getElementById("live-status");case"ended":case"unreachable":return document.getElementById("live-start-over");default:return null}}function Nt(){const t=Me(),[a]=Le.useState(()=>(Hs.link=b()??g()??x()??p(window.location.href)??Hs.link,Hs.link));Le.useEffect(()=>{window.location.hash.includes("live=")&&window.history.replaceState(null,"",`${window.location.pathname}${window.location.search}`)},[]);const{guest:r,status:l}=Gs(),i=null!==r&&("ended"===l?.at||"unreachable"===l?.at),o=i?"Close":r?"Leave the session":"Close",c=Le.useRef(null);return As(r?l?.at??"starting":"ask",()=>_t(c.current,r?l?.at:"ask")),Le.useEffect(()=>{if(!r||"request"!==l?.at&&"joined"!==l?.at)return;const t=document.getElementById("main"),n="joined"===l.at&&document.activeElement?.matches('button[aria-controls="live-view"]');if(!e()&&document.activeElement!==t&&!n)return;const a=_t(c.current,l.at);s(a)&&a&&Ps(a)},[r,l?.at]),Fe.jsxs("div",{className:"section__inner live-join",ref:c,children:[Fe.jsxs("div",{className:"section__head",children:[Fe.jsx("h1",{children:"Join a session"}),i?Fe.jsx("button",{type:"button",className:"icon-btn",id:"live-start-over","aria-label":"Start over",title:"Start over",onClick:W,children:Fe.jsx(y,{size:18})}):null,Fe.jsx("button",{type:"button",className:"icon-btn","aria-label":o,title:o,onClick:()=>{W(),Os&&(Os=!1,Ds()),n(),Object.assign(Hs,{link:null,pasted:"",code:"",name:"",note:"",failed:"",alarm:"",useRoutes:!0,peerTrust:""}),Js(),t("/")},children:Fe.jsx(w,{size:18})})]}),r?Fe.jsx(kt,{}):Fe.jsx(yt,{held:a})]})}function St(){const[e,s]=Le.useState(null);return Le.useEffect(()=>{let e=()=>{};const t=()=>{e();const t=F();if(!t)return void s(null);const n=e=>s("joined"===e.at?e.catalog.items.length:null);n(t.status),e=t.subscribe(n)};t();const n=M(t);return()=>{e(),n()}},[]),null===e?null:Fe.jsxs("div",{className:"vault-live-banner","aria-label":"Live session",children:[Fe.jsx(Ye,{tone:"ok",label:"In a live session"}),Fe.jsxs("span",{children:[1===e?"1 shared item":`${e} shared items`," from the owner's session."]}),Fe.jsx(Oe,{className:"btn btn--sm",to:"/live",children:"Open shared items"})]})}function Tt(){const e=ws(),{status:s,guest:t,tomb:n}=as(),{host:a,state:r}=Zs(),l=Gs(),i=Me(),o=Cs("shell.share");if(!e)return null;if(l.guest&&l.status&&"ended"!==l.status.at&&"unreachable"!==l.status.at)return Fe.jsx("button",{ref:o,type:"button",className:"icon-btn live-share live-share--on",onClick:()=>i("/live"),"aria-label":"Open live session","aria-controls":"live-view",title:"Open live session",children:Fe.jsx(c,{size:18})});if("unlocked"!==s||t||ms(n??null))return null;const u=Boolean(a&&"live"===r?.status),d=u?"Sharing — live session":"Share this vault";return Fe.jsx("button",{ref:o,type:"button",className:u?"icon-btn live-share live-share--on":"icon-btn live-share",onClick:()=>e.open(),"aria-label":d,title:d,children:Fe.jsx(c,{size:18})})}const $t=[{value:"vault",label:"The whole vault"},{value:"items",label:"Chosen items"},{value:"none",label:"Nothing"}],Rt=[{value:"no",label:"Not allowed"},{value:"ask",label:"May ask"}],Et=[{value:"read",label:"Show values"},{value:"use",label:"Copy only"},{value:"edit",label:"Can edit"}],Pt=[{value:"open",label:"Anyone with the link"},{value:"invite",label:"Link and code"}],It=[{value:"anyone",label:"Anyone with the link"},{value:"all-users",label:"All users group"},{value:"people",label:"Selected people"}],zt=[{value:15,label:"15 minutes"},{value:60,label:"1 hour"},{value:240,label:"4 hours"},{value:480,label:"8 hours"},{value:1440,label:"1 day"},{value:10080,label:"Until this tab closes (up to 7 days)"}],At=[{value:15,label:"15 minutes"},{value:60,label:"1 hour"},{value:240,label:"4 hours"},{value:480,label:"8 hours"}];function qt({id:e,name:s,value:t,options:n,onChange:a}){return Fe.jsxs("div",{className:"sw",children:[Fe.jsx("label",{className:"sw__name",htmlFor:e,children:s}),Fe.jsx("select",{id:e,className:"sw__select",value:String(t),onChange:e=>{const s=n.find(s=>String(s.value)===e.target.value);s&&a(s.value)},children:n.map(e=>Fe.jsx("option",{value:String(e.value),children:e.label},String(e.value)))})]})}function Lt({chosen:e,onChange:s}){const{items:t}=as(),n=hs(ps(t)),a=Ts(),r=a.find(e=>e.id===(fs.activeTomb?.()??""))?.label,l=Le.useMemo(()=>se(n,{vaultLabel:r}),[n,r]);return 0===n.length?Fe.jsx(Ye,{tone:"idle",label:"This vault has no items"}):Fe.jsxs("fieldset",{className:"live-choose",children:[Fe.jsx("legend",{className:"visually-hidden",children:"Items to share"}),n.map(t=>Fe.jsxs("label",{className:"join__choice",children:[Fe.jsx("input",{type:"checkbox",checked:e.has(t.id),onChange:n=>{const a=new Set(e);n.target.checked?a.add(t.id):a.delete(t.id),s(a)}}),Fe.jsx("span",{children:l.get(t.id)??t.name})]},t.id))]})}function Ft({people:e,peopleIds:s,onChange:t}){return Fe.jsxs("fieldset",{className:"live-choose",children:[Fe.jsx("legend",{className:"visually-hidden",children:"People"}),0===e.length?Fe.jsx(Ye,{tone:"idle",label:"No people in this vault."}):e.map(e=>Fe.jsxs("label",{className:"join__choice",children:[Fe.jsx("input",{type:"checkbox",checked:s.has(e.id),onChange:n=>{const a=new Set(s);n.target.checked?a.add(e.id):a.delete(e.id),t(a)}}),Fe.jsx("span",{children:e.name})]},e.id))]})}function Mt(e,s=!1){const t=[],n=(e,s,t)=>0===e?null:`${e} ${1===e?s:t}`,a=e.ice.filter(e=>e.urls.some(e=>e.startsWith("turn"))).length;for(const l of[n(e.addresses.length,"address","addresses"),n(e.ice.length-a,"STUN server","STUN servers"),n(a,"TURN server","TURN servers"),n(e.carriers.length,"carrier","carriers")])l&&t.push(l);const r=s?["ntfy.sh pairing"]:[];return 0===t.length&&0===r.length?"Direct only":`${e.relay?"Relay only":"Direct"}, with ${[...t,...r].join(", ")}`}const Ot=()=>fs.activeTomb?.()??"",Bt=e=>oe(e),Dt=new Set;function Vt(e){return re(JSON.parse(le(e)))}function Ut(){const[e,s]=Le.useState(te),[t,n]=Le.useState(!1),[a,r]=Le.useState(null),l=Le.useRef(te),i=Le.useRef([]),o=Le.useRef(Promise.resolve()),c=Le.useRef(0),u=Le.useRef(!0),d=Le.useCallback(()=>{u.current&&s(i.current.reduce((e,{edit:s})=>{const t=Vt(s(e));return t.ok?t.transport:e},l.current))},[]),m=Le.useCallback(()=>{if(i.current.length>0)return;c.current+=1;const e=c.current;Promise.resolve().then(()=>Bt(Ot())).then(t=>{u.current&&e===c.current&&(l.current=t,s(t),r(null),n(!0))},t=>{u.current&&e===c.current&&(l.current=te,s(te),r(t instanceof ne?t.message:"This vault's routes could not be read"),n(!0))})},[]);Le.useEffect(()=>{u.current=!0,m();const e=ae(m);return()=>{u.current=!1,e()}},[m]);const h=Le.useCallback(async e=>{c.current+=1;let s=null;try{const a=await(t=Ot(),n=s=>Vt(e.edit(s)),ie(t,n));a.ok?l.current=a.transport:s=a.errors[0]??"Refused"}catch(a){s=a instanceof ne?a.message:"This vault could not keep the change"}var t,n;return c.current+=1,i.current=i.current.filter(s=>s!==e),d(),m(),s},[d,m]);return{transport:e,loaded:t,refused:a,change:Le.useCallback(e=>{const s={edit:e};i.current.push(s),d();const t=o.current.then(()=>h(s));o.current=t,Dt.add(t);const n=()=>{Dt.delete(t)};return t.then(n,n),t},[d,h])}}function Kt(e){return"none"===e.scope?{kind:"none"}:"vault"===e.scope?{kind:"vault"}:{kind:"items",ids:[...e.chosen]}}function Ht({initialTitle:e=""}){const{values:s,set:t,lend:n,ready:r,reason:l,transport:i,refused:o,failed:c,submit:u}=function(e=""){const[s,t]=Le.useState(e),[n,a]=Le.useState("vault"),[r,l]=Le.useState("no"),[i,o]=Le.useState(()=>new Set),[c,u]=Le.useState("use"),[d,m]=Le.useState("open"),[h,p]=Le.useState("anyone"),[f,v]=Le.useState(new Set),[j,b]=Le.useState([]),[g,x]=Le.useState(10080),{starting:y,failed:w,start:C}=function(){const[e,s]=Le.useState(!1),[t,n]=Le.useState("");return{starting:e,failed:t,start:Le.useCallback(e=>{n(""),s(!0),Promise.resolve(e).then(ce).catch(e=>n(e instanceof ue||e instanceof ne?e.message:"The live session could not start")).finally(()=>s(!1))},[])}}();!function(e){Le.useEffect(()=>{let s=!0;return vs(fs.activeTomb?.()??"").then(t=>{s&&e(k(t.entries).filter(e=>"person"===e.kind).map(e=>({id:e.id,name:e.name})))}).catch(()=>{s&&e([])}),()=>{s=!1}},[e])}(b);const{transport:_,loaded:N,refused:S}=Ut(),T=function(){const[e,s]=Le.useState(()=>Be(Ve()));return Le.useEffect(()=>De(()=>s(Be(Ve()))),[]),e}().length>0,$=T&&"ask"===r,R="vault"===n||"items"===n&&i.size>0||"none"===n&&$,E="people"!==h||f.size>0,P=N&&null===S&&!y&&s.trim().length>0&&E&&R,I=P?void 0:E?de({loaded:N,refused:S,starting:y,title:s,scope:n,chosenCount:i.size,devices:$}):"Choose at least one person.";return{values:{title:s,scope:n,devices:r,chosen:i,policy:c,admission:d,minutes:g,audience:h,peopleIds:f,people:j},set:{title:t,scope:a,devices:l,chosen:o,policy:u,admission:m,minutes:x,audience:p,peopleIds:v},lend:T,ready:P,reason:I,transport:_,refused:S,failed:w,submit:()=>{P&&C(async function(e){return{title:e.title.trim(),scope:Kt(e),policy:e.policy,admission:e.admission,minutes:e.minutes,devices:e.devices,provision:{audience:e.audience,peopleIds:e.peopleIds},transport:Qs.transport,carriers:Qs.carriers,routes:await async function(){for(;Dt.size>0;)await Promise.allSettled([...Dt]);return Bt(Ot())}()}}({title:s,scope:n,chosen:i,policy:c,admission:d,minutes:g,devices:$,audience:h,peopleIds:[...f]}))}}}(e);return Fe.jsxs("form",{className:"setup__stack",onSubmit:e=>{e.preventDefault(),u()},children:[Fe.jsx(a,{id:"live-title",label:"Session name",value:s.title,onValueChange:e=>t.title(e.slice(0,64))}),Fe.jsx(qt,{id:"live-scope",name:"Share",value:s.scope,options:n?$t:$t.filter(e=>"none"!==e.value),onChange:t.scope}),"items"===s.scope?Fe.jsx(Lt,{chosen:s.chosen,onChange:t.chosen}):null,Fe.jsx(qt,{id:"live-policy",name:"Values",value:s.policy,options:Et,onChange:t.policy}),n?Fe.jsx(qt,{id:"live-devices",name:"Devices",value:s.devices,options:Rt,onChange:t.devices}):null,Fe.jsx(qt,{id:"live-audience",name:"Share with",value:s.audience,options:It,onChange:t.audience}),"people"===s.audience?Fe.jsx(Ft,{people:s.people,peopleIds:s.peopleIds,onChange:t.peopleIds}):null,Fe.jsx(qt,{id:"live-admission",name:"Who gets in",value:s.admission,options:Pt,onChange:t.admission}),Fe.jsx(qt,{id:"live-minutes",name:"For",value:s.minutes,options:zt,onChange:t.minutes}),Fe.jsx(Ye,o?{tone:"err",label:o}:{tone:"idle",label:Mt(i)}),c?Fe.jsx(Ye,{tone:"err",label:c}):null,Fe.jsx(j,{label:"Share this vault",disabled:!r,disabledReason:l,icon:Fe.jsx(C,{size:18})})]})}function Wt({host:e,pending:s,close:t}){const[n,a]=Le.useState(null);return Fe.jsx(ys,{title:"Review reset capability",mark:Fe.jsx(N,{size:20}),onClose:t,children:Fe.jsx(Qe,{name:s.itemName,facts:[{key:"Origin",value:s.origin},{key:"Capability",value:s.actions[0]??""},{key:"Runtime",value:s.runtime},{key:"Model",value:s.model},{key:"Expires",value:new Date(s.expiresAt).toISOString()}],primary:{label:"Approve reset capability",icon:Fe.jsx(l,{size:18}),onClick:()=>{(async()=>{try{const n=await me(e.resets,fs.activeTomb?.()??"",s.id);"approved"===n?t():a({message:`Reset capability was not approved (${n}).`})}catch{a({message:"Reset capability approval failed before a grant was made."})}})()}},children:Fe.jsx(_,{id:`reset-approval-${s.id}`,title:"Reset capability was not approved",message:n?.message,occurrence:n})})})}function Jt({host:e,pending:s}){const[t,n]=Le.useState(!1);return Fe.jsxs("div",{className:"vault-row",children:[Fe.jsxs("div",{className:"vault-row__body",children:[Fe.jsxs("span",{className:"vault-row__text",children:[Fe.jsx("span",{className:"vault-row__name",children:s.itemName}),Fe.jsx("span",{className:"vault-row__meta",children:s.actions[0]})]}),Fe.jsx(Ye,{tone:"warn",label:"Reset approval requested"})]}),Fe.jsx("button",{type:"button",className:"icon-btn","aria-label":`Review ${s.actions[0]}`,title:`Review ${s.actions[0]}`,onClick:()=>n(!0),children:Fe.jsx(l,{size:16})}),Fe.jsx("button",{type:"button",className:"icon-btn","aria-label":`Deny ${s.actions[0]}`,title:`Deny ${s.actions[0]}`,onClick:()=>e.resets?.deny(s.id),children:Fe.jsx(w,{size:16})}),t?Fe.jsx(Wt,{host:e,pending:s,close:()=>n(!1)}):null]})}function Xt({host:e,grant:s}){return Fe.jsxs("div",{className:"vault-row",children:[Fe.jsxs("div",{className:"vault-row__body",children:[Fe.jsxs("span",{className:"vault-row__text",children:[Fe.jsx("span",{className:"vault-row__name",children:s.itemName}),Fe.jsx("span",{className:"vault-row__meta",children:s.actions[0]})]}),Fe.jsx(Ye,{tone:s.humanStatus?"warn":"ok",label:"takeover_requested"===s.humanStatus?"Human takeover requested":"Reset capability approved"})]}),Fe.jsx("button",{type:"button",className:"icon-btn","aria-label":`Revoke ${s.actions[0]}`,title:`Revoke ${s.actions[0]}`,onClick:()=>e.resets?.revoke(s.id),children:Fe.jsx(w,{size:16})})]})}function Yt({host:e}){const{pending:s,grants:t}=e.state.resets??{pending:[],grants:[]};return!e.resets||0===s.length&&0===t.length?null:Fe.jsxs("div",{className:"setup__stack","aria-label":"Password reset approvals",children:[s.map(s=>Fe.jsx(Jt,{host:e,pending:s},s.id)),t.map(s=>Fe.jsx(Xt,{host:e,grant:s},s.id))]})}const Qt={approved:null,unknown:Ks("err","The device has left"),lapsed:Ks("err","The request lapsed"),nothing_chosen:Ks("warn","Choose a connection"),unavailable:Ks("err","Connections are not available")},Gt=Ks("err","Could not allow the device","Allowing the device failed before anything was granted. Try again.");function Zt({host:e,pending:s,onClose:t}){const n=e.devices?.offered()??[],[a,r]=Le.useState(new Set),[i,o]=Le.useState(60),{said:c,failure:u,allow:d,clear:m}=function(e,s,t){const[n,a]=Le.useState(null),[r,l]=Le.useState(null);function i(e){a(e),l("err"===e.tone?{message:e.tray}:null)}return{said:n,failure:r,allow:async function(n){try{const a=await he(e.devices,fs.activeTomb?.()??"",s.id,n),r=Qt[a];null===r?t():i(r)}catch(a){i(a instanceof _s?Ks("err","Not allowed here",a.message):Gt)}},clear:()=>a(null)}}(e,s,t);return Fe.jsx(ys,{title:"Allow a device",mark:Fe.jsx(N,{size:20}),onClose:t,children:Fe.jsxs(Qe,{name:s.name,facts:[{key:"Code",value:s.userCode}],primary:{label:`Allow ${s.name}`,icon:Fe.jsx(l,{size:18}),disabled:0===a.size,onClick:()=>{d({connections:[...a],minutes:i})}},children:[Fe.jsxs("fieldset",{className:"live-choose",children:[Fe.jsx("legend",{className:"visually-hidden",children:"Connections to allow"}),n.map(e=>Fe.jsxs("label",{className:"join__choice",children:[Fe.jsx("input",{type:"checkbox",checked:a.has(e.id),onChange:s=>{const t=new Set(a);s.target.checked?t.add(e.id):t.delete(e.id),r(t),m()}}),Fe.jsx("span",{children:e.label})]},e.id))]}),Fe.jsx(qt,{id:"live-device-minutes",name:"For",value:i,options:At,onChange:o}),c?Fe.jsx(Ye,{tone:c.tone,label:c.label}):null,Fe.jsx(_,{id:"live-device-allow",title:"A device was not allowed",message:u?.message,occurrence:u})]})})}function en({host:e,pending:s}){const[t,n]=Le.useState(!1);return Fe.jsxs("div",{className:"vault-row",children:[Fe.jsxs("div",{className:"vault-row__body",children:[Fe.jsxs("span",{className:"vault-row__text",children:[Fe.jsx("span",{className:"vault-row__name",children:s.name}),Fe.jsx("span",{className:"vault-row__meta live-code",children:s.userCode})]}),Fe.jsx(Ye,{tone:"warn",label:"Asking to use your connections"})]}),Fe.jsx("button",{type:"button",className:"icon-btn","aria-label":`Allow ${s.name}`,title:`Allow ${s.name}`,onClick:()=>n(!0),children:Fe.jsx(l,{size:16})}),Fe.jsx("button",{type:"button",className:"icon-btn","aria-label":`Turn ${s.name} down`,title:`Turn ${s.name} down`,onClick:()=>e.devices?.deny(s.id),children:Fe.jsx(w,{size:16})}),t?Fe.jsx(Zt,{host:e,pending:s,onClose:()=>n(!1)}):null]})}function sn({host:e,grant:s,offered:t}){const n=st(s.expiresAt),a=s.connections.map(e=>t.find(s=>s.id===e)?.label??e);return Fe.jsxs("div",{className:"vault-row",children:[Fe.jsxs("div",{className:"vault-row__body",children:[Fe.jsxs("span",{className:"vault-row__text",children:[Fe.jsx("span",{className:"vault-row__name",children:s.name}),Fe.jsxs("span",{className:"vault-row__meta",children:[a.join(", ")," · ",tt(n)]})]}),Fe.jsx(Ye,{tone:"ok",label:"Using your connections"})]}),Fe.jsx("button",{type:"button",className:"icon-btn","aria-label":`Revoke ${s.name}`,title:`Revoke ${s.name}`,onClick:()=>e.devices?.revoke(s.id),children:Fe.jsx(w,{size:16})})]})}function tn({host:e,state:s}){const t=Le.useRef(null),{pending:n,grants:a}=s.devices;if(As(`${n.length}:${a.length}`,()=>a.length>0?t.current?.querySelector('[aria-label^="Revoke"]'):document.getElementById("live-request")),(!e.devices||0===n.length&&0===a.length)&&!e.resets)return null;const r=e.devices?.offered()??[];return Fe.jsxs("div",{ref:t,className:"setup__stack",children:[n.map(s=>Fe.jsx(en,{host:e,pending:s},s.id)),a.map(s=>Fe.jsx(sn,{host:e,grant:s,offered:r},s.id)),Fe.jsx(Yt,{host:e})]})}const nn={asking:Ks("warn","Asking to join"),replied:Ks("idle","Let in: hand back the reply code"),joined:Ks("ok","In the session"),refused:Ks("err","Turned away"),gone:Ks("idle","Left")};function an({host:e}){const[s,t]=Le.useState(""),[n,r]=Le.useState(!1),[l,i]=Le.useState(null);return qs(n,()=>document.getElementById("live-request")),Fe.jsxs("form",{onSubmit:n=>{n.preventDefault(),async function(){r(!0);try{const n=function(e){switch(e.kind){case"not-a-request":return Ks("err","Not a request code");case"not-this-session":return Ks("err",`Not for this session (${e.misses} of ${pe})`);case"full":return Ks("warn","The session is full");case"no-devices":return Ks("warn","This session does not let devices ask");case"no-relay":return Ks("warn","This session has no relay for a device");case"ended":return Ks("idle","The session has ended");case"locked":return Ks("warn","The session is locked");case"duplicate":return Ks("err","Already asking with this key");default:return null}}(await e.receive(s));i(n),null===n&&t("")}finally{r(!1)}}()},children:[Fe.jsx(a,{id:"live-request",label:"Paste a join request",mono:!0,autoComplete:"off",lead:Fe.jsx(c,{size:17}),value:s,disabled:n,status:l?Fe.jsx(Ye,{tone:l.tone,label:l.label}):null,onValueChange:e=>{t(e),i(null)},tail:Fe.jsx("button",{type:"submit",className:"icon-btn","aria-label":"Read the request",title:"Read the request",disabled:n||0===s.trim().length,children:Fe.jsx(h,{size:16})})}),Fe.jsx("p",{className:"live-help",children:"Only needed when the joiner cannot pair automatically."})]})}function rn({host:e,guest:s,canCompare:t,onCompare:n,onRefuse:a}){const{copied:r,failed:i,copy:o}=Ze(),c="asking"===s.state,u=Boolean(s.sas),d=u?`Yes, they match for ${s.name}`:`Let ${s.name} in`,m=c?`Turn ${s.name} away`:`Remove ${s.name}`;return Fe.jsxs(Fe.Fragment,{children:[!c||u&&!t?null:Fe.jsx("button",{type:"button",className:"icon-btn","aria-label":d,title:d,onClick:()=>{u?n():e.admit(s.key)},children:Fe.jsx(l,{size:16})}),s.reply?Fe.jsx(ts,{value:s.reply,label:`the reply code for ${s.name}`,fieldKey:`reply-${s.key}`,copied:r,failed:i,onCopy:o}):null,Fe.jsx("button",{type:"button",className:"icon-btn","aria-label":m,title:m,onClick:a,children:Fe.jsx(w,{size:16})})]})}function ln({host:e,guest:s,canCompare:t=!0,onCompare:n,onRefuse:a}){const r=nn[s.state],l=Le.useRef(null);return As(s.state,()=>"replied"===s.state?l.current?.querySelector('[aria-label^="Copy the reply code"]'):document.getElementById("live-request")),Fe.jsxs("div",{className:"vault-row",ref:l,children:[Fe.jsxs("div",{className:"vault-row__body",children:[Fe.jsx(on,{guest:s}),Fe.jsx(un,{guest:s,mark:r,canCompare:t})]}),(i=s.state,"asking"===i||"replied"===i||"joined"===i?Fe.jsx(rn,{host:e,guest:s,canCompare:t,onCompare:n??(()=>{e.admit(s.key)}),onRefuse:a??(()=>e.refuse(s.key))}):null)]});var i}function on({guest:e}){return Fe.jsxs("span",{className:"vault-row__text",children:[Fe.jsx("span",{className:"vault-row__name",children:e.name}),"device"===e.kind?Fe.jsx("span",{className:"vault-row__meta",children:"A device"}):null,e.note?Fe.jsx("span",{className:"vault-row__meta",children:e.note}):null,e.connection?Fe.jsx("span",{className:"vault-row__meta","data-testid":"live-owner-connection",children:e.connection.detail}):null,e.sas&&"asking"===e.state?Fe.jsx("span",{className:"vault-row__meta live-sas",children:e.sas}):null,cn(e)?Fe.jsx("span",{className:"vault-row__meta",children:e.keyId}):null]})}function cn(e){return Boolean(e.keyId&&(e.nameClash||e.sas))}function un({guest:e,mark:s,canCompare:t}){return Fe.jsxs(Fe.Fragment,{children:[Fe.jsx(Ye,{tone:s.tone,label:s.label}),e.unverified?Fe.jsx(Ye,{tone:"warn",label:"Unverified"}):null,e.nameClash?Fe.jsx(Ye,{tone:"warn",label:"Same display name"}):null,dn(e,t)?Fe.jsx(Ye,{tone:"idle",label:"Waiting to compare"}):null]})}function dn(e,s){return Boolean(e.sas&&function(e,s){return"asking"===e.state&&!s}(e,s))}function mn({host:e,guests:s}){const t=function(e){const s=Le.useRef(null);if(null!==s.current&&s.current.host===e)return s.current.gate;const t=fe();return s.current={host:e,gate:t},t}(e),n=function(e){let s=null;for(const t of e)"asking"===t.state&&t.sas&&(!s||t.askedAt<s.askedAt)&&(s=t);return s?s.key:null}(s);return Fe.jsxs(Fe.Fragment,{children:[s.some(e=>e.sas&&"asking"===e.state)?Fe.jsx("p",{className:"live-help",children:"Compare the security code with the joiner before letting them in."}):null,s.map(s=>Fe.jsx(ln,{host:e,guest:s,canCompare:!s.sas||s.key===n,onCompare:()=>{!async function(e,s,t){const n=e.requestJoinApproval(t.key);n.requestId&&e.queue.approve(n.requestId,t.key),await s.admit(t.key);const a=s.state.guests.find(e=>e.key===t.key);!a||"replied"!==a.state&&"joined"!==a.state||t.peerFingerprint&&await Xe({fingerprint:t.peerFingerprint,epoch:t.peerEpoch??1}).catch(()=>{})}(t,e,s)},onRefuse:()=>function(e,s,t){if(t.sas){const s=e.requestJoinApproval(t.key);s.requestId&&e.queue.deny(s.requestId,t.key)}s.refuse(t.key)}(t,e,s)},s.key))]})}const hn=Le.lazy(()=>Ue(()=>Promise.resolve().then(()=>aa),void 0));function pn({host:e,state:s}){const{items:t}=as();if(0===s.log.length)return null;const n=new Map(s.guests.map(e=>[e.key,e.name])),a=e.devices?.offered()??[],r=new Map,l=s.log.map(e=>{const s=`${e.at}:${e.guest}:${e.what}:${e.item}:${e.field}`,t=(r.get(s)??0)+1;return r.set(s,t),{entry:e,key:`${s}:${t}`}});return Fe.jsx("ul",{className:"live-log","aria-label":"Handed out",children:l.reverse().map(({entry:e,key:s})=>{return Fe.jsx("li",{children:Fe.jsx(Ye,{tone:"denied"===e.what?"err":"idle",label:`${new Date(e.at).toLocaleTimeString()} · ${n.get(e.guest)??"?"} · ${e.what} · ${r=e.item,t.find(e=>e.id===r)?.name??a.find(e=>e.id===r)?.label??r} ${e.field}`})},s);var r})})}function fn({host:e,state:s}){const[t,n]=Le.useState(!1),{copied:a,failed:r,copy:l}=Ze(),i=et(ve()),o=st(e.expiresAt),c=S(Qs.joinUrl(),e.link);return Fe.jsxs("div",{className:"setup__stack",children:[Fe.jsxs("div",{className:"live-status",children:[Fe.jsx(Ye,{tone:"ok",label:"Live"}),s.locked?Fe.jsx(Ye,{tone:"warn",label:"Locked: too many wrong codes"}):null,Fe.jsx("span",{className:"vault-row__meta",children:tt(o)}),Fe.jsx("button",{type:"button",className:"icon-btn","aria-label":"End the session for everyone",title:"End the session for everyone",onClick:()=>n(!0),children:Fe.jsx(w,{size:16})})]}),t?Fe.jsx(ys,{title:"End for everyone",mark:Fe.jsx(w,{size:20}),onClose:()=>n(!1),children:Fe.jsx(Qe,{name:"Live session",facts:[{key:"Guests",value:"lose access immediately"},{key:"This tab",value:"stops hosting"}],primary:{label:"End for everyone",tone:"danger",onClick:()=>{n(!1),je()}}})}):null,Fe.jsx(rs,{value:c,label:"Scan to join this live session",size:168}),Fe.jsx(Ge,{label:"Link",actions:Fe.jsx(ts,{value:c,label:"the link",fieldKey:"live-link",copied:a,failed:r,onCopy:l}),children:Fe.jsx("span",{className:"frow__value frow__value--mono live-link",children:c})}),e.code?Fe.jsx(Ge,{label:"Code",actions:Fe.jsx(ts,{value:e.code,label:"the code",fieldKey:"live-code",copied:a,failed:r,onCopy:l}),children:Fe.jsx("span",{className:"frow__value live-code",children:e.code})}):null,Fe.jsx(bt,{rendezvous:ve()}),i?null:Fe.jsx(an,{host:e}),Fe.jsxs("details",{className:"live-advanced",children:[Fe.jsx("summary",{children:"Peer trust signal"}),Fe.jsx(Le.Suspense,{fallback:null,children:Fe.jsx(hn,{})})]}),Fe.jsx(mn,{host:e,guests:s.guests}),Fe.jsx(tn,{host:e,state:s}),Fe.jsx(pn,{host:e,state:s})]})}const vn=e=>e.urls.some(e=>e.startsWith("turn")),jn=["none","mint","creds"],bn={signIn:"none",account:"",signingKey:"",jwt:"",seed:"",session:"fallback"},gn={none:"None",mint:"Per session",creds:"User JWT"},xn={fallback:"If direct fails",always:"Always",off:"Codes only"};function yn({id:e,label:s,name:t,value:n,options:a,labels:r,onPick:l}){return Fe.jsxs("div",{className:"sw",children:[Fe.jsx("label",{className:"sw__name",htmlFor:e,children:s}),Fe.jsx("select",{id:e,className:"sw__select","aria-label":t,value:n,onChange:e=>{const s=a.find(s=>s===e.target.value);s&&l(s)},children:a.map(e=>Fe.jsx("option",{value:e,children:r[e]},e))})]})}function wn({value:e,ok:s,label:t}){return e&&!s(e.trim())?Fe.jsx(Ye,{tone:"err",label:t}):null}function kn({draft:e,edit:s}){return Fe.jsxs(Fe.Fragment,{children:[Fe.jsx(a,{id:"live-nats-account",label:"Account public key",mono:!0,autoComplete:"off",placeholder:"A…",value:e.account,onValueChange:e=>s({account:e}),status:Fe.jsx(wn,{value:e.account,ok:we,label:"Not an account public key"})}),Fe.jsx(a,{id:"live-nats-signing-key",label:"Account signing key",type:"password",mono:!0,autoComplete:"off",placeholder:"SA…",value:e.signingKey,onValueChange:e=>s({signingKey:e}),status:Fe.jsx(wn,{value:e.signingKey,ok:ke,label:"Not an account signing seed"})})]})}function Cn({draft:e,edit:s}){return Fe.jsxs(Fe.Fragment,{children:[Fe.jsx(a,{id:"live-nats-jwt",label:"User JWT",mono:!0,autoComplete:"off",value:e.jwt,onValueChange:e=>s({jwt:e}),status:Fe.jsx(wn,{value:e.jwt,ok:Ce,label:"Not a user JWT"})}),Fe.jsx(a,{id:"live-nats-seed",label:"User seed",type:"password",mono:!0,autoComplete:"off",placeholder:"SU…",value:e.seed,onValueChange:e=>s({seed:e}),status:Fe.jsx(wn,{value:e.seed,ok:_e,label:"Not a user seed"})})]})}function _n({draft:e,edit:s}){return Fe.jsxs(Fe.Fragment,{children:[Fe.jsx(yn,{id:"live-nats-sign-in",label:"Sign-in",value:e.signIn,options:jn,labels:gn,onPick:e=>s({signIn:e})}),"mint"===e.signIn?Fe.jsx(kn,{draft:e,edit:s}):null,"creds"===e.signIn?Fe.jsx(Cn,{draft:e,edit:s}):null,Fe.jsx(yn,{id:"live-nats-session",label:"Session over this server",value:e.session,options:xe,labels:xn,onPick:e=>s({session:e})})]})}function Nn({carrier:e,at:s,change:t}){return Fe.jsx(yn,{id:`live-nats-session-${s}`,label:"Session over it",name:`Session over ${e.url}`,value:ye(e),options:xe,labels:xn,onPick:s=>{t(t=>function(e,s,t){return{...e,carriers:e.carriers.map(e=>{if(ge(e)!==ge(s))return e;const{session:n,...a}=e;return"fallback"===t?a:{...a,session:t}})}}(t,e,s))}})}function Sn(){const e=Le.useRef(!1),[s,t]=Le.useState({pending:!1,generation:0});return Le.useLayoutEffect(()=>{s.pending||(e.current=!1)},[s]),{pending:s.pending,begin:()=>!e.current&&(e.current=!0,t(e=>({...e,pending:!0})),!0),finish:()=>t(e=>({pending:!1,generation:e.generation+1}))}}const Tn={nostr:"Nostr relay",mqtt:"MQTT broker",nats:"NATS server",ntfy:"ntfy server",broadcast:"This browser's tabs"};function $n({label:e,onRemove:s}){return Fe.jsx("button",{type:"button",className:"icon-btn","aria-label":e,title:e,onClick:s,children:Fe.jsx(T,{size:16})})}const Rn=["signIn","account","signingKey","jwt","seed","session"];function En({kind:e,onSelect:s}){return Fe.jsxs("div",{className:"sw",children:[Fe.jsx("label",{className:"sw__name",htmlFor:"live-carrier-kind",children:"Code carrier"}),Fe.jsx("select",{id:"live-carrier-kind",className:"sw__select",value:e,onChange:e=>{const t=Se.find(s=>s===e.target.value);t&&s(t)},children:Se.map(e=>Fe.jsx("option",{value:e,children:Tn[e]},e))})]})}function Pn({transport:e,change:s}){return Fe.jsxs(Fe.Fragment,{children:[e.carriers.map((e,t)=>Fe.jsxs(Le.Fragment,{children:[Fe.jsx(Ge,{label:Tn[e.kind],actions:Fe.jsx($n,{label:`Remove ${e.url||Tn[e.kind]}`,onRemove:()=>{s(s=>function(e,s){return{...e,carriers:e.carriers.filter(e=>ge(e)!==ge(s))}}(s,e))}}),children:Fe.jsx("span",{className:"frow__value frow__value--mono",children:e.url||"—"})}),"nats"===e.kind?Fe.jsx(Nn,{carrier:e,at:t,change:s}):null]},`${t}:${e.kind} ${e.url}`)),Fe.jsx(In,{change:s})]})}function In({change:e}){const[s,t]=Le.useState("ntfy"),[n,r]=Le.useState(""),[l,i]=Le.useState(bn),o=Le.useRef(0),c=Le.useRef(0),u=Le.useRef({signIn:0,account:0,signingKey:0,jwt:0,seed:0,session:0}),d=Sn(),m="broadcast"===s?"":n.trim(),h="nats"===s,p=Ne(s,m)&&(!h||("mint"===(f=l).signIn?we(f.account.trim())&&ke(f.signingKey):"creds"!==f.signIn||Ce(f.jwt.trim())&&_e(f.seed.trim())));var f;return Fe.jsxs("form",{className:"setup__stack",onSubmit:t=>{if(t.preventDefault(),!p||!d.begin())return;const n=h?function(e){const s="fallback"===e.session?{}:{session:e.session};return"mint"===e.signIn?{...s,mint:{account:e.account.trim(),signingKey:e.signingKey}}:"creds"===e.signIn?{...s,jwt:e.jwt.trim(),seed:e.seed.trim()}:s}(l):{},a=o.current,f=c.current,v={...u.current};e(e=>{return a={kind:s,url:m,...n},(t=e).carriers.some(e=>ge(e)===ge(a))?t:{...t,carriers:[...t.carriers,a]};var t,a}).then(e=>{const s=o.current!==a,t=c.current!==f;(null===e||s||t)&&(s||null!==e&&!t||r(""),i(s=>function(e,s,t,n){const a=e=>s[e]!==t[e];return{signIn:["signIn","account","signingKey","jwt","seed"].some(a)?e.signIn:bn.signIn,account:a("account")?e.account:"",signingKey:a("signingKey")?e.signingKey:"",jwt:a("jwt")?e.jwt:"",seed:a("seed")?e.seed:"",session:null!==n||a("session")?e.session:bn.session}}(s,u.current,v,e)))}).finally(d.finish)},children:[Fe.jsx(En,{kind:s,onSelect:e=>{c.current+=1,t(e)}}),"broadcast"===s?null:Fe.jsx(a,{id:"live-carrier-url",label:"ntfy"===s?"Server (https://)":"Server (wss://)",mono:!0,type:"url",placeholder:"ntfy"===s?"https://ntfy.example.com":"wss://relay.example.com",value:n,onValueChange:e=>{o.current+=1,r(e)},status:m&&!p?Fe.jsx(Ye,{tone:"err",label:"Needs a secure address"}):null}),h?Fe.jsx(_n,{draft:l,edit:e=>{for(const s of Rn)Object.hasOwn(e,s)&&(u.current[s]+=1);i(s=>({...s,...e}))}}):null,Fe.jsx(j,{label:"Add the carrier",disabled:!p||d.pending,icon:Fe.jsx($,{size:18})})]})}function zn({transport:e,change:s}){const[t,n]=Le.useState(""),r=Le.useRef(0),l=t.trim();return Fe.jsxs(Fe.Fragment,{children:[e.addresses.map((e,t)=>Fe.jsx(Ge,{label:"Reachable at",actions:Fe.jsx($n,{label:`Remove ${e}`,onRemove:()=>{s(s=>function(e,s){return{...e,addresses:e.addresses.filter(e=>e!==s)}}(s,e))}}),children:Fe.jsx("span",{className:"frow__value frow__value--mono",children:e})},`${t}:${e}`)),Fe.jsx("form",{onSubmit:e=>{if(e.preventDefault(),!Re(l))return;const t=r.current;s(e=>function(e,s){return e.addresses.includes(s)?e:{...e,addresses:[...e.addresses,s]}}(e,l)).then(e=>{null===e&&r.current===t&&n("")})},children:Fe.jsx(a,{id:"live-address",label:"Tailnet, VPN or LAN address",mono:!0,placeholder:"100.64.0.1",value:t,onValueChange:e=>{r.current+=1,n(e)},status:l&&!Re(l)?Fe.jsx(Ye,{tone:"err",label:"Not an IP address"}):null,tail:Fe.jsx("button",{type:"submit",className:"icon-btn","aria-label":"Add the address",title:"Add the address",disabled:!Re(l),children:Fe.jsx($,{size:16})})})})]})}function An({transport:e,change:s}){return Fe.jsx(Fe.Fragment,{children:e.ice.map((e,t)=>Fe.jsx(Ge,{label:e.urls.some(e=>e.startsWith("turn"))?"TURN":"STUN",actions:Fe.jsx($n,{label:`Remove ${e.urls[0]??"the server"}`,onRemove:()=>{s(s=>function(e,s){const t=e.ice.filter(e=>be(e)!==be(s));return{...e,ice:t,relay:e.relay&&t.some(vn)}}(s,e))}}),children:Fe.jsx("span",{className:"frow__value frow__value--mono",children:e.urls.join(" ")})},`${t}:${e.urls.join(" ")}`))})}function qn({transport:e,change:s}){const[t,n]=Le.useState(""),[r,l]=Le.useState(""),[i,o]=Le.useState(""),c=Le.useRef({url:0,username:0,credential:0}),u=Sn(),d=t.trim(),m=d.startsWith("turn"),h=Ee(d)&&(!m||""!==r&&""!==i);return Fe.jsxs(Fe.Fragment,{children:[Fe.jsx(An,{transport:e,change:s}),Fe.jsxs("form",{className:"setup__stack",onSubmit:e=>{if(e.preventDefault(),!h||!u.begin())return;const t=m?{urls:[d],username:r,credential:i}:{urls:[d]},a={...c.current};s(e=>function(e,s){return e.ice.some(e=>be(e)===be(s))?e:{...e,ice:[...e.ice,s]}}(e,t)).then(e=>{const s=c.current.url!==a.url;(null===e||s)&&(null!==e||s||n(""),c.current.username===a.username&&l(""),c.current.credential===a.credential&&o(""))}).finally(u.finish)},children:[Fe.jsx(a,{id:"live-ice",label:"STUN or TURN server",mono:!0,placeholder:"turns:turn.example.com:443?transport=tcp",value:t,onValueChange:e=>{c.current.url+=1,n(e)},status:d&&!Ee(d)?Fe.jsx(Ye,{tone:"err",label:"Not a stun: or turn: URL"}):null}),m?Fe.jsxs(Fe.Fragment,{children:[Fe.jsx(a,{id:"live-ice-user",label:"TURN username",autoComplete:"off",value:r,onValueChange:e=>{c.current.username+=1,l(e)}}),Fe.jsx(a,{id:"live-ice-credential",label:"TURN credential",type:"password",autoComplete:"off",value:i,onValueChange:e=>{c.current.credential+=1,o(e)}})]}):null,Fe.jsx(j,{label:"Add the server",disabled:!h||u.pending,icon:Fe.jsx($,{size:18})})]})]})}function Ln({transport:e,change:s}){return e.ice.some(e=>e.urls.some(e=>e.startsWith("turn")))||e.relay?Fe.jsxs("label",{className:"join__choice",children:[Fe.jsx("input",{type:"checkbox",checked:e.relay,onChange:e=>{s(s=>({...s,relay:e.target.checked}))}}),Fe.jsx("span",{children:"Relay only, through TURN"})]}):null}function Fn(){const{transport:e,loaded:s,refused:t,change:n}=Ut(),[a,r]=Le.useState(""),l=async e=>{const s=await n(e);return r(s??""),s};return Fe.jsxs("div",{className:"setup__stack",id:"live-routes",children:[Fe.jsxs("div",{className:"live-routes__head",children:[Fe.jsx("h3",{children:"Routes"}),s?Fe.jsx("div",{className:"actions",children:Fe.jsx(Rs,{path:Te,name:"transport.json"})}):null]}),Fe.jsx("div",{className:"setup__stack",children:s?t?Fe.jsx(Ye,{tone:"err",label:t}):Fe.jsxs(Fe.Fragment,{children:[Fe.jsx(zn,{transport:e,change:l}),Fe.jsx(qn,{transport:e,change:l}),Fe.jsx(Ln,{transport:e,change:l}),Fe.jsx(Pn,{transport:e,change:l}),$e(e)?Fe.jsx(Ye,{tone:"warn",label:"Credentials in this profile travel in the link"}):null,a?Fe.jsx(Ye,{tone:"err",label:a}):null]}):Fe.jsx(Ye,{tone:"idle",label:"Reading this vault's routes"})})]})}function Mn(){const[e,s]=Le.useState(null),t=Le.useMemo(()=>Pe(()=>Ot()),[]),n=Le.useMemo(()=>({openFile:s}),[]),a=t.list().find(s=>s.path===e),r=Le.useRef(null);return As(a?.path??"routes",()=>v(r.current)),Fe.jsx("div",{ref:r,className:"setup__stack",children:a?Fe.jsxs(Fe.Fragment,{children:[Fe.jsx("button",{type:"button",className:"icon-btn","aria-label":"Back to routes",onClick:()=>s(null),children:Fe.jsx(y,{size:18})}),Fe.jsx($s,{file:a,files:t,onMoved:s})]}):Fe.jsx(Es.Provider,{value:n,children:Fe.jsx(Fn,{})})})}function On(){const{tomb:e,status:s}=as();return"unlocked"===s?Fe.jsx(Mn,{},e):null}function Bn(){const e=Le.useSyncExternalStore(Ns,Ss),s=e.projects.find(s=>s.id===e.activeId)??e.projects[0];return s?xs(s):"personal"}function Dn(){const{host:e,state:s}=Zs(),t=Boolean(e&&"live"===s?.status),n=Bn(),a=Le.useRef(null);return As(t?"live":"form",()=>t?a.current?.querySelector('[aria-label="Copy the link"]')??v(a.current):v(a.current)),Fe.jsxs("div",{className:"setup__stack",ref:a,children:[t&&e&&s?Fe.jsx(fn,{host:e,state:s}):Fe.jsx(Ht,{initialTitle:n.slice(0,64)}),Fe.jsxs("details",{className:"live-advanced",children:[Fe.jsx("summary",{children:"Advanced"}),Fe.jsx("div",{className:"live-advanced__body setup__stack",children:Fe.jsx(On,{})})]})]})}function Vn({children:e}){const[s,t]=Le.useState(!1),n=Bn(),a=Le.useCallback(()=>t(!0),[]),r=Le.useCallback(()=>t(!1),[]),l=Le.useMemo(()=>({Button:Tt,Banner:St,open:a}),[a]);return Fe.jsxs(ks,{value:l,children:[e,s?Fe.jsx(ys,{title:`Share ${n}`,mark:Fe.jsx(c,{size:20}),onClose:r,children:Fe.jsx(Dn,{})}):null]})}const Un=new Set,Kn=new Map,Hn=new Set,Wn=new Map,Jn=new Map;function Xn(){for(const e of[...Kn.values(),...Wn.values()])js(e);Kn.clear(),Un.clear(),Wn.clear(),Hn.clear();for(const e of Jn.values())js(e);Jn.clear()}const Yn="sharing.live",Qn={capability:Yn,async activate(e){const s=R(e,Yn);if(s.disposed())return s.handle();const t=(n={egress:e.egress,plan:()=>P.getSnapshot().plan},async(e,s,t="joiner")=>{const a=function(e,s){if("broadcast"===e.kind)return null;let t;try{t=new URL(e.url)}catch{return"invalid-url"}if("ntfy"===e.kind){const e=s.egress.decide(t,Ls);return e.ok?null:e.code}return A(e,s.plan())}(e,n);if(null!==a)throw new q(a);return function(e,s=1e4){return new Promise((t,n)=>{const a=new AbortController;let r=!1;const l=setTimeout(()=>{r=!0,a.abort(),n(new Error("carrier_timeout"))},s);e(a.signal).then(e=>{clearTimeout(l),r?e.close():t(e)},e=>{clearTimeout(l),r||n(e)})})}(a=>async function(e,s,t,n,a){switch(e.kind){case"broadcast":return(await Ue(async()=>{const{broadcastCarrier:e}=await Promise.resolve().then(()=>Gn);return{broadcastCarrier:e}},void 0)).broadcastCarrier(s);case"ntfy":return(await Ue(async()=>{const{ntfyCarrier:e}=await Promise.resolve().then(()=>na);return{ntfyCarrier:e}},void 0)).ntfyCarrier(e,s,n,a);case"nostr":return(await Ue(async()=>{const{nostrCarrier:e}=await(import("./live-nostr-BfmabjiE.js"));return{nostrCarrier:e}},[])).nostrCarrier(e,s);case"mqtt":return(await Ue(async()=>{const{mqttCarrier:e}=await(import("./live-mqtt-BaSKU8QX.js"));return{mqttCarrier:e}},[])).mqttCarrier(e,s);case"nats":return(await Ue(async()=>{const{natsCarrier:e}=await import("./live-nats-CsIvuPj3.js").then(e=>e.a);return{natsCarrier:e}},[])).natsCarrier(e,s,t)}}(e,s,t,n.egress,a))});var n;Qs.carriers=t;const a=Ie.onHostState,r=Ie.onHostingEnded;return Ie.onHostState=e=>{!function(e){const s=new Set(e.guests.filter(e=>"asking"===e.state).map(e=>e.key));for(const[n,a]of Kn)s.has(n)||(js(a),Kn.delete(n));const t=new Map(e.guests.filter(e=>"joined"===e.state).map(e=>[e.key,e.name]));for(const[n,a]of Jn)t.has(n)||(js(a),Jn.delete(n));for(const[n,a]of t){if(Jn.has(n))continue;const e=`sharing.live.joined.${n}`;bs({id:e,tone:"info",title:"Live session",body:`${a} joined the live session`}),Jn.set(n,e)}for(const n of e.guests){if("asking"!==n.state||Un.has(n.key))continue;Un.add(n.key);const e=`sharing.live.ask.${n.key}`;bs({id:e,tone:"warn",title:"Live session",body:`${n.name} is asking to join`}),Kn.set(n.key,e)}}(e),function(e){const s=new Set(e.devices.pending.map(e=>e.id));for(const[t,n]of Wn)s.has(t)||(js(n),Wn.delete(t));for(const t of e.devices.pending){if(Hn.has(t.id))continue;Hn.add(t.id);const e=`sharing.live.device.${t.id}`;bs({id:e,tone:"warn",title:"Live session",body:`${t.name} wants to use your connections (${t.userCode})`}),Wn.set(t.id,e)}}(e)},Ie.onHostingEnded=Xn,s.onDispose(()=>{Qs.carriers===t&&(Qs.carriers=Fs),Ie.onHostState=a,Ie.onHostingEnded=r}),s.register("route",{id:"live",path:"/live",element:Nt,framed:!0,order:48,gate:"any"}),s.register("shell-wrapper",{id:"live-share",Wrapper:Vn,order:30}),E(s,{targets:ze,goals:Ae,routes:qe}),s.handle()}},Gn=Object.freeze(Object.defineProperty({__proto__:null,broadcastCarrier:function(e){const s=new BroadcastChannel(`osm-live-${e}`),t=new Set;return{async post(e){s.postMessage(e)},listen(e){const n=s=>{ls(s.data)&&e(s.data)};s.addEventListener("message",n);const a=()=>s.removeEventListener("message",n);return t.add(a),a},close(){for(const e of t)e();s.close()}}}},Symbol.toStringTag,{value:"Module"}));function Zn(e,s){let t="";for(const n of(new TextEncoder).encode(`${e}:${s}`))t+=String.fromCharCode(n);return btoa(t)}function ea(e){if(e.length>16384)return null;try{const s=JSON.parse(e);if(!os(s)||"message"!==s.event)return null;const{id:t,message:n}=s;return ls(t)&&ls(n)?{id:t,message:n}:null}catch{return null}}async function sa(e,s){const t=e.body?.pipeThrough(new TextDecoderStream).getReader();if(!t)return;let n="";for(;;){const{done:e,value:a}=await t.read();if(e)return;n+=a;const r=n.split("\n");n=r.pop()??"",n.length>16384&&(n="");for(const t of r){const e=ea(t);null!==e&&s(e)}}}function ta(e){const s=new Headers(e);return s.set("Content-Type","text/plain"),s}const na=Object.freeze(Object.defineProperty({__proto__:null,basicCredentials:Zn,ntfyCarrier:async function(e,s,t,n){const a=e.url.replace(/\/+$/,""),r=function(e){const s=new Headers;return e.token?s.set("Authorization",`Bearer ${e.token}`):e.username&&e.password&&s.set("Authorization",`Basic ${Zn(e.username,e.password)}`),s}(e),l=new Set;let i=!1,o=String(Math.floor(Date.now()/1e3));const c=new AbortController;l.add(c);const u=()=>c.abort();n.aborted?u():n.addEventListener("abort",u,{once:!0});const d=await t.fetch(`${a}/${s}/json?since=${encodeURIComponent(o)}`,{headers:r,signal:c.signal,cache:"no-store"},Ls).finally(()=>n.removeEventListener("abort",u));if(!d.ok)throw d.body?.cancel(),new Error(`ntfy_${d.status}`);return{async post(e){const n=await t.fetch(`${a}/${s}`,{method:"POST",headers:ta(r),body:e},Ls);if(!n.ok)throw new Error(`ntfy_${n.status}`)},listen(e){let n=d;return(async()=>{for(;!i;){let u=!1;try{if(!n){const e=new AbortController;if(l.add(e),n=await t.fetch(`${a}/${s}/json?since=${encodeURIComponent(o)}`,{headers:r,signal:e.signal,cache:"no-store"},Ls),!n.ok)throw new Error(`ntfy_${n.status}`)}await sa(n,s=>{o=s.id,e(s.message)})}catch(c){u=!0,c instanceof is&&(i=!0)}n=null,!i&&u&&await new Promise(e=>setTimeout(e,3e3))}})(),()=>{i=!0;for(const e of l)e.abort()}},close(){i=!0;for(const e of l)e.abort()}}}},Symbol.toStringTag,{value:"Module"})),aa=Object.freeze(Object.defineProperty({__proto__:null,default:function(){const[e,s]=Le.useState(null),[t,n]=Le.useState(!1),a=Ze();if(Le.useEffect(()=>{let e=!1;return async function(){if(Ms)return Ms.dtls;const e=globalThis.RTCPeerConnection;if(!e?.generateCertificate)return Ke;try{const s={name:"ECDSA",namedCurve:"P-256"},t=await e.generateCertificate(s),n=await async function(e){const s=await e.getFingerprints();for(const t of s){if(!t.algorithm||!t.value)continue;const e=He(`${t.algorithm} ${t.value}`);if(e!==Ke)return e}return Ke}(t);return Ms={certificate:t,dtls:n},n}catch{return Ke}}().then(e=>Ue(()=>import("./live-transport-files-DQCGPnPz.js").then(e=>e.a2),__vite__mapDeps([0,1,2,3,4,5,6,7,8])).then(s=>s.exportLivePeerTrustSignal({ownerDtls:e}))).then(t=>{if(e)return;if(!t.ok)return void s({failed:!0});const n=cs(t.spkiFingerprint);s(n?{signal:t.signal,fingerprint:n}:{failed:!0})}).catch(()=>{e||s({failed:!0})}),()=>{e=!0}},[]),!e)return null;if("failed"in e)return Fe.jsx(Ye,{tone:"warn",label:"Peer trust is not available on this device"});const r=t?"Hide fingerprint QR":"Show fingerprint QR";return Fe.jsxs(Fe.Fragment,{children:[Fe.jsx(Ge,{label:"Fingerprint",actions:Fe.jsxs(Fe.Fragment,{children:[Fe.jsx(ts,{value:e.signal,label:"peer trust signal",fieldKey:"live-peer-trust-signal",copied:a.copied,failed:a.failed,onCopy:a.copy}),Fe.jsx("button",{type:"button",className:"icon-btn","aria-label":r,title:r,onClick:()=>n(e=>!e),children:Fe.jsx(t?I:z,{size:16})})]}),children:Fe.jsx("span",{className:"frow__value frow__value--mono live-sas",children:e.fingerprint})}),t?Fe.jsx(rs,{value:e.signal,label:"Peer trust signal"}):null]})}},Symbol.toStringTag,{value:"Module"}));export{Yn as CAPABILITY,Qn as capabilityRuntime};
@@ -0,0 +1 @@
1
+ import{s as e}from"./FeatureSections-BG-JsWID.js";import{e as r,v as t,m as a,c as n}from"./main-BrkS-iow.js";import{j as i,r as s}from"./react-dom-BwC4eQlG.js";import{d as o,s as l}from"./drop-open-BjgdLxWM.js";import{c as u,b as c,i as d,k as h}from"./vault-ui-seam-BQGS7RR6.js";import"./features-9FeW22VH.js";import"./identity-BVf8yWa4.js";import"./model-provider-B6oAnQX9.js";import"./native-worker-bytes-a0e18d71-DFmKzL3P.js";import"./hosted-model-authority-CcNPE44H.js";import"./native-worker-zod-5c0ed887-B342B6ko.js";import"./native-worker-zod-jitless-ba55e4a3-DZHC6DC7.js";import"./wake-lock-C_y0fQco.js";import"./signals-DdOHdr--.js";import"./identity-view-paths-Bi1yigZk.js";import"./react-router-XsJY84ug.js";import"./InvokeScreen-C-kFFYVF.js";import"./idp-presets-B1M-P0Ek.js";import"./seams-DJ_lslby.js";import"./native-worker-noble-hashes-b1a58353-IgGIMWEC.js";import"./native-worker-noble-ciphers-708367a7-BPuD3lXB.js";class p extends Error{status;generation;constructor(e,r){super(`relay answered ${e}`),this.name="RelayRequestError",this.status=e,this.generation=r}}function g(e){return e.replace(/\/$/,"")}function m(e){return e.fetch?e.fetch:(e,r)=>h(String(e),{...r??{},ciphertextDrive:!0,timeoutMs:15e3,skipAddressSpace:String(e).startsWith("https:")})}function f(e,r){r&&e.set("authorization",`Bearer ${r}`)}async function w(e){const r=await e.text();if(!r)return null;try{return JSON.parse(r)}catch{return null}}function v(e){if(!u(e))return null;const r=e.generation;return c(r)?r:null}function j(e){return!!u(e)&&("user"===(r=e.ownerKind)||"organization"===r)&&d(e.owner)&&d(e.slug);var r}function y({draft:e,setDraft:r}){return i.jsxs(i.Fragment,{children:[i.jsxs("div",{className:"field",children:[i.jsx("label",{htmlFor:"org-vault-relay",children:"Relay URL"}),i.jsx("input",{id:"org-vault-relay",value:e.relay,autoComplete:"off",onChange:t=>r({...e,relay:t.target.value})})]}),i.jsxs("div",{className:"field",children:[i.jsx("label",{htmlFor:"org-vault-principal",children:"Principal"}),i.jsx("input",{id:"org-vault-principal",value:e.principal,autoComplete:"off",onChange:t=>r({...e,principal:t.target.value})})]}),i.jsxs("div",{className:"field",children:[i.jsx("label",{htmlFor:"org-vault-kind",children:"Owner kind"}),i.jsxs("select",{id:"org-vault-kind",value:e.ownerKind,onChange:t=>r({...e,ownerKind:"user"===t.target.value?"user":"organization"}),children:[i.jsx("option",{value:"organization",children:"Organization"}),i.jsx("option",{value:"user",children:"User"})]})]}),i.jsxs("div",{className:"field",children:[i.jsx("label",{htmlFor:"org-vault-role",children:"Role"}),i.jsxs("select",{id:"org-vault-role",value:e.orgRole,onChange:t=>{const a=t.target.value;r({...e,orgRole:"admin"===a?"admin":"member"===a?"member":"owner"})},children:[i.jsx("option",{value:"owner",children:"Owner"}),i.jsx("option",{value:"admin",children:"Admin"}),i.jsx("option",{value:"member",children:"Member"})]})]})]})}function x({draft:e,setDraft:n,busy:s,onCreate:o,onList:l}){return i.jsxs(i.Fragment,{children:[i.jsxs("div",{className:"field",children:[i.jsx("label",{htmlFor:"org-vault-owner",children:"Owner"}),i.jsx("input",{id:"org-vault-owner",value:e.owner,autoComplete:"off",onChange:r=>n({...e,owner:r.target.value})})]}),i.jsxs("div",{className:"field",children:[i.jsx("label",{htmlFor:"org-vault-slug",children:"Slug"}),i.jsx("input",{id:"org-vault-slug",value:e.slug,autoComplete:"off",onChange:r=>n({...e,slug:r.target.value})})]}),i.jsxs("div",{className:"field-inline",children:[i.jsx(r,{label:"Create vault",disabled:s,onClick:o,children:i.jsx(t,{size:16})}),i.jsx(r,{label:"List vaults",disabled:s,onClick:l,children:i.jsx(a,{size:16})})]})]})}function b({draft:e,setDraft:r,busy:t,onCreate:a,onList:n}){return i.jsxs(i.Fragment,{children:[i.jsx(y,{draft:e,setDraft:r}),i.jsx(x,{draft:e,setDraft:r,busy:t,onCreate:a,onList:n})]})}const k="sharing.relay.directory",R={relay:"",principal:"",ownerKind:"organization",orgRole:"owner",owner:"",slug:""},C={};function S(e){l({id:k,tone:"err",title:"Organization vaults",body:e})}function z(e){return 409===e?"That address is already published.":403===e?"A member cannot publish that address.":400===e?"That address was refused.":"The relay did not answer."}async function O(e,r,t){if(o(k),0!==e.owner.trim().length&&0!==e.relay.trim().length){t(!0);try{r(await async function(e){const r=m(e),t=new URLSearchParams;e.owner&&t.set("owner",e.owner),e.principal&&t.set("principal",e.principal);const a=new Headers;!e.relayRegistrationToken&&e.orgRole&&a.set("x-opensesame-org-role",e.orgRole),f(a,e.relayRegistrationToken);const n=await r(`${g(e.baseUrl)}/v1/org-vaults?${t.toString()}`,{method:"GET",headers:a}),i=await w(n);if(!n.ok)throw new p(n.status,v(i));if(!u(i))throw new p(n.status,null);const s=i.vaults;if(!Array.isArray(s)||!s.every(j))throw new p(n.status,null);return s}({baseUrl:e.relay.trim(),owner:e.owner.trim(),principal:e.principal.trim()||void 0,orgRole:e.orgRole,fetch:C.fetch}))}catch(a){S(z(a instanceof p?a.status:0))}finally{t(!1)}}else S("Name the relay and the owner to list.")}function N(){const[e,r]=s.useState(R),[t,a]=s.useState([]),[n,l]=s.useState(!1);return i.jsxs("section",{id:"org-vault-directory","aria-label":"Organization vaults",children:[i.jsx(b,{draft:e,setDraft:r,busy:n,onCreate:()=>{!async function(e,r,t,a){if(o(k),0!==e.relay.trim().length&&0!==e.principal.trim().length&&0!==e.owner.trim().length&&0!==e.slug.trim().length){a(!0);try{await async function(e){const r=m(e),t=new Headers({"content-type":"application/json"});e.relayRegistrationToken||(t.set("x-opensesame-principal",e.principal),e.orgRole&&t.set("x-opensesame-org-role",e.orgRole)),f(t,e.relayRegistrationToken);const a=await r(`${g(e.baseUrl)}/v1/org-vaults`,{method:"POST",headers:Object.fromEntries(t.entries()),body:JSON.stringify({ownerKind:e.ownerKind,owner:e.owner,slug:e.slug})}),n=await w(a);if(!a.ok)throw new p(a.status,v(n));if(!u(n))throw new p(a.status,null);if(!j(n.vault))throw new p(a.status,null);return n.vault}({baseUrl:e.relay.trim(),owner:e.owner.trim(),slug:e.slug.trim(),ownerKind:e.ownerKind,principal:e.principal.trim(),orgRole:e.orgRole,fetch:C.fetch}),r({...e,slug:""}),await O(e,t,a)}catch(n){S(z(n instanceof p?n.status:0))}finally{a(!1)}}else S("Name the relay, the principal, the owner, and the slug.")}(e,r,a,l)},onList:()=>{O(e,a,l)}}),i.jsx("ul",{"aria-label":"Vaults for this owner",children:t.map(e=>i.jsxs("li",{children:[e.owner,"/",e.slug]},`${e.ownerKind}/${e.owner}/${e.slug}`))})]})}const F="sharing.relay",$={capability:F,async activate(r){const t=n(r,F);return t.disposed()||t.register("settings-panel",{id:"org-vault-directory",label:"Organization vaults",category:e("feature-sharing"),Panel:N,order:40}),t.handle()}};export{F as CAPABILITY,$ as capabilityRuntime};
@@ -0,0 +1 @@
1
+ import{u as e,D as t,t as s,a as n,P as a,e as r,T as i,r as l,G as o,c,b as d,s as u,d as m,w as h,f as p,g as y,h as f}from"./trusted-contacts-QkvTYGDn.js";import{e as v,v as w,z as g,aG as j,aH as b,c as x,r as k}from"./main-BrkS-iow.js";import{j as S,r as N}from"./react-dom-BwC4eQlG.js";import{S as _}from"./InvokeScreen-C-kFFYVF.js";import{u as I}from"./idp-presets-B1M-P0Ek.js";import{b as P,i as $,a as C,I as T,J as E,x as M,K as z,L as O,O as R}from"./drop-open-BjgdLxWM.js";import{C as K}from"./MethodPicker-CqQTyAaT.js";import{h as A,c as F,i as H,v as D}from"./vault-ui-seam-BQGS7RR6.js";import{u as J,d as G}from"./wake-lock-C_y0fQco.js";import{o as L,d as Q,w as W,m as q,p as U,t as V,V as Z,r as B,I as X}from"./model-provider-B6oAnQX9.js";import"./native-worker-zod-5c0ed887-B342B6ko.js";import"./native-worker-zod-jitless-ba55e4a3-DZHC6DC7.js";import"./noble-crypto-Mv8l2A7D.js";import"./native-worker-noble-hashes-b1a58353-IgGIMWEC.js";import"./signals-DdOHdr--.js";import"./identity-BVf8yWa4.js";import"./hosted-model-authority-CcNPE44H.js";import"./seams-DJ_lslby.js";import"./react-router-XsJY84ug.js";import"./native-worker-bytes-a0e18d71-DFmKzL3P.js";import"./identity-view-paths-Bi1yigZk.js";import"./vault-list-path-Bh2_KZkq.js";import"./native-worker-noble-ciphers-708367a7-BPuD3lXB.js";function Y({name:e,setName:t,people:s,selected:n,setSelected:a,maximum:r,wanted:i,setThreshold:l,onEnroll:o,enrolling:c}){return S.jsxs(S.Fragment,{children:[S.jsxs("div",{className:"field",children:[S.jsx("label",{htmlFor:"unlock-circle-name",children:"Name"}),S.jsx("input",{id:"unlock-circle-name",value:e,onChange:e=>t(e.target.value)})]}),S.jsxs("fieldset",{className:"f",children:[S.jsx("legend",{className:"f__label",children:"People"}),0===s.length?S.jsx(_,{tone:"idle",label:"Add a person with a passkey in Identity first."}):S.jsx("ul",{className:"unlock-circle-people",children:s.map(e=>S.jsxs("li",{className:"unlock-circle-person",children:[S.jsxs("label",{children:[S.jsx("input",{type:"checkbox",checked:n.includes(e.id),disabled:null!==c||!e.hasPasskey&&!n.includes(e.id),onChange:t=>a(s=>t.target.checked?[...s,e.id]:s.filter(t=>t!==e.id))}),e.name]}),e.hasPasskey?null:S.jsxs("span",{className:"unlock-circle-person__missing",children:["No passkey",S.jsx(v,{small:!0,label:`Enroll a passkey for ${e.name}`,disabled:null!==c,onClick:()=>o(e),children:S.jsx(w,{size:14})})]})]},e.id))})]}),r>0?S.jsxs("div",{className:"field",children:[S.jsx("label",{htmlFor:"unlock-circle-threshold",children:"Required approvals"}),S.jsx("select",{id:"unlock-circle-threshold",value:String(i),onChange:e=>l(e.target.value),children:Array.from({length:r},(e,t)=>t+1).map(e=>S.jsxs("option",{value:e,children:[e," of ",r]},e))})]}):null]})}function ee({id:e,title:t,target:s,said:n,keys:a,overlay:r,children:i}){const l=I(s);return S.jsxs("section",{ref:l,className:"trusted-contacts__group",id:e,"aria-label":t,"aria-labelledby":`${e}-title`,"data-guide-target":s,children:[S.jsxs("div",{className:"trusted-contacts__group-head",children:[S.jsx("h3",{id:`${e}-title`,children:t}),a?S.jsx("fieldset",{className:"actions trusted-contacts__commands","aria-label":`${t} commands`,children:a}):null]}),S.jsxs("div",{className:"trusted-contacts__group-body",children:[S.jsx("output",{className:"visually-hidden","aria-live":"polite",children:n}),i]}),r]})}const te="config/trusted-contacts/pending",se=16777216,ne=/^[0-9a-f]{64}$/,ae="a saved ceremony could not be read";async function re(n){const a=e(n);if(0===a.length)throw new t("stored","that ceremony cannot be kept on this device");return s(new Uint8Array(await crypto.subtle.digest("SHA-256",A(a))))}function ie(e){const t=JSON.parse(n(e));if(!F(t)||!H(t.key)||void 0===t.value)throw new Error("not a pending document");return{key:t.key,value:t.value}}async function le(e,t,s){"persistent"===q()&&await U(V(e,t),2*s)}async function oe(e,t){await le(e,t,se);try{return await B(e,t)}catch(s){if(s instanceof Z&&"not-found"===s.code)return null;throw s}}function ce(s){return{async read(e){const n=`${te}/${await re(e)}`,a=await oe(s,n);if(null===a)return;let r;try{r=ie(a)}catch{throw new t("stored",ae)}if(r.key!==e)throw new t("stored",ae);return r.value},async write(n,a){const r=`${te}/${await re(n)}`,i=e(JSON.stringify({key:n,value:a}));if(i.length>se)throw new t("stored","that ceremony is too large to keep");await W(s,r,i)},async remove(e){await Q(s,`${te}/${await re(e)}`)},async list(e){await le(s,X,1048576);const t=(await L(s,te)).filter(e=>ne.test(e.slice(32))).slice(0,256),n=[];for(const a of t){const t=await de(s,a);t?.startsWith(e)&&n.push(t)}return n.sort()}}}async function de(e,t){try{const s=await oe(e,t);if(null===s)return null;const{key:n}=ie(s);return await re(n)===t.slice(32)?n:null}catch(s){if(s instanceof Z&&"locked"===s.code)throw s;return null}}const ue=["inviting","armed","recovering","retired"];function me(e){return H(e)?e:""}function he(e){const t=me(e);for(const s of ue)if(s===t)return s;throw new Error("not a circle state")}function pe(e){const{signedPolicy:t,ownerSecretKey:s}=d(e);return{signedPolicy:t,ownerSecretKey:s,state:he(e.status)}}function ye(e,t){return e.filter(e=>"typed"===e.kind&&e.typeId===t)}function fe(e,t,s,n){const r=[],i=[];for(const o of ye(P([...e]),t))try{r.push(n(o.values))}catch(l){const e=me(o.values.circleId);i.push({itemId:o.id,type:s,name:o.name,circleId:""===e?null:e,reason:l instanceof a?"policy":"format"})}return{records:r,unreadable:i}}const ve=e=>fe(e,i,"owned",pe),we=e=>fe(e,o,"held",l);function ge(e,t,s){return ye(e,t).filter(e=>me(e.values.circleId)===s)}async function je(e,t){await r(e);const s=$().get(t.typeId);if(!s)throw new Error(`${t.typeId} is not installed`);for(let a=0;;a+=1){const[r]=ge(P([...e.getSnapshot().items]),t.typeId,t.circleId),i=t.values(r),l=r?{...r,name:t.name,values:i}:C(s,i,t.name);try{return void(await e.saveItem(l))}catch(n){if(a>0)throw n}}}async function be(e,t,s){for(const n of ge(e.getSnapshot().items,t,s))await e.purgeItem(n.id)}function xe(e){const s=()=>e.getSnapshot().items;return{owned:async()=>ve(s()).records,unreadable:async()=>function(e){return[...ve(e).unreadable,...we(e).unreadable]}(s()),held:async()=>we(s()).records,async saveOwned(t){const{policy:s}=t.signedPolicy;await je(e,{typeId:i,circleId:s.circleId,name:s.label,values:()=>c(t)})},async saveHeld(s){const n=s.seat.signedPolicy.policy.circleId;if(s.holding&&s.holding.wrapped.circleId!==n)throw new t("mismatch","that share belongs to another circle");await je(e,{typeId:o,circleId:n,name:s.seat.signedPolicy.policy.label,values:e=>function(e,t){const s=e.holding?e.holding.signedPolicy:e.seat.signedPolicy,n=me(t?.values.owner)||s.policy.label,a=e.receivingKey??void 0;return e.holding?u({holding:e.holding,heldFor:n,receivingKey:a,state:e.state}):m({signedPolicy:s,guardianId:e.seat.guardianId,heldFor:n,receivingKey:a,state:e.state})}(s,e)})},removeOwned:t=>be(e,i,t),removeHeld:t=>be(e,o,t)}}function ke(){return function(){const e=J(),t=G(),[,s]=N.useReducer(e=>e+1,0),n=function(e){return"unlocked"!==e.status||e.guest||e.decoy||""===e.tomb?null:e.tomb}(e),a=N.useMemo(()=>null===n?null:function(e,t){const s=Ne.get(e);if(s?.tomb===t)return s.ports;const n=function(e,t){const s=D();return s?{now:()=>new Date,origin:s.location.origin,rpId:s.location.hostname,ceremony:Se,pending:ce(t),records:xe(e),tomb:t}:null}(e,t);return n&&Ne.set(e,{tomb:t,ports:n}),n}(t,n),[t,n]),r=N.useMemo(()=>null===a?[]:ve(e.items).records,[a,e.items]),i=N.useMemo(()=>null===a?[]:we(e.items).records,[a,e.items]),l=N.useCallback(async()=>s(),[]);return N.useMemo(()=>null===a?null:{ports:a,owned:r,held:i,refresh:l},[a,r,i,l])}()}const Se={register:async e=>h().register(e),assert:async e=>h().assert(e)},Ne=new WeakMap,_e={readPolicy:T,view:R,writePolicy:O,clearPolicy:z,directory:M,passkeys:E,enroll:j};function Ie(e){const t=function({tomb:e,people:t,policy:s,onClose:n,onSaved:a}){const[r,i]=N.useState(s?.name??"Trusted contacts"),[l,o]=N.useState(s?.memberIds??[]),[c,d]=N.useState(String(s?.threshold??Math.min(2,t.length||1))),[u,m]=N.useState(!1),[h,p]=N.useState(null),[y,f]=N.useState(""),v=t.filter(e=>l.includes(e.id)),w=v.length,g=Math.min(Number(c)||1,Math.max(1,w));return{fields:{name:r,setName:i,people:t,selected:l,setSelected:o,maximum:w,wanted:g,setThreshold:d,onEnroll:t=>{!async function(t){if(!u&&null===h){p(t.id),f("");try{const s=await _e.enroll(e,t.id);s.vaultOffer?.discard(),o(e=>e.includes(t.id)?e:[...e,t.id]),a()}catch(s){f(s instanceof Error?s.message:"The passkey could not be enrolled.")}finally{p(null)}}}(t)},enrolling:h},save:async function(){if(!u&&null===h&&0!==v.length){m(!0),f("");try{await _e.writePolicy(e,{name:r.trim()||"Trusted contacts",threshold:Math.min(g,v.length),memberIds:v.map(e=>e.id)}),a(),n()}catch(t){f(t instanceof Error?t.message:"The circle could not be saved.")}finally{m(!1)}}},error:y,busy:u,disabled:u||null!==h||0===v.length}}(e);return S.jsx(K,{title:"Trusted contacts",mark:S.jsx(b,{size:20}),onClose:e.onClose,children:S.jsxs("form",{"aria-label":"Trusted contacts circle",onSubmit:e=>{e.preventDefault(),t.save()},children:[S.jsx(Y,{...t.fields}),t.error?S.jsx(_,{tone:"err",label:t.error}):null,S.jsx("div",{className:"actions",children:S.jsx("button",{type:"submit",className:"go-row",disabled:t.disabled,children:S.jsx("span",{className:"go-verb",children:t.busy?"Saving…":"Save the circle"})})})]})})}function Pe({tomb:e}){const t=function(e){const[t,s]=N.useState(null),[n,a]=N.useState(null),[r,i]=N.useState([]),[l,o]=N.useState(""),[c,d]=N.useState(0);return N.useEffect(()=>{let t=!0;return(async()=>{try{const[n,r,l]=await Promise.all([_e.readPolicy(e),_e.directory(e),_e.passkeys(e)]);if(!t)return;s(n),i(r.entries.filter(e=>"person"===e.kind&&e.enabled).map(e=>({id:e.id,name:e.name,hasPasskey:l.some(t=>t.principalId===e.id)}))),a(n?await _e.view(e,n,[]):null),o("")}catch(n){t&&o(n instanceof Error?n.message:"The trusted-contact policy could not be read.")}})(),()=>{t=!1}},[e,c]),{policy:t,view:n,people:r,error:l,reload:()=>d(e=>e+1)}}(e),[s,n]=N.useState(!1),[a,r]=N.useState(!1),i=I("circle.new"),l=function(e){const t=N.useRef(e),[s,n]=N.useState("");return N.useEffect(()=>{t.current!==e&&(t.current=e,n(e))},[e]),s}(t.view?`${t.view.name}, ${t.view.threshold} of ${t.view.members.length} contacts`:"No trusted-contact circle");return S.jsx(ee,{id:"circles",title:"Circles",target:"settings.trusted-contacts-circles",said:l,keys:S.jsx(v,{id:"circle-new",keyRef:i,small:!0,label:"Start a circle",onClick:()=>n(!0),children:S.jsx(w,{size:15})}),overlay:s?S.jsx(Ie,{tomb:e,people:t.people,policy:t.policy,onClose:()=>n(!1),onSaved:t.reload}):null,children:t.error?S.jsx(_,{tone:"err",label:t.error}):t.view?S.jsxs("div",{className:"tc-row",children:[S.jsx("h3",{children:t.view.name}),S.jsxs("span",{className:"tc-row__facts",children:[t.view.threshold," of ",t.view.members.length," contacts must approve"]}),S.jsx("span",{className:"tc-row__facts",children:t.view.members.map(e=>e.name).join(" · ")}),S.jsx(v,{small:!0,label:a?"Confirm remove the circle":"Remove the circle",onClick:()=>{!async function(){if(a)try{await _e.clearPolicy(e),t.reload()}finally{r(!1)}else r(!0)}()},children:S.jsx(g,{size:16})})]}):S.jsx(_,{tone:"idle",label:"No circles yet."})})}function $e(){const e=ke();return e?S.jsx(Pe,{tomb:e.ports.tomb}):null}function Ce(){const e=ke(),t=I("settings.trusted-contacts");return S.jsxs("section",e?{ref:t,className:"panel set__security",id:"trusted-contacts","aria-labelledby":"trusted-contacts-title",children:[S.jsx("div",{className:"panel__head",children:S.jsx("div",{children:S.jsx("h2",{id:"trusted-contacts-title",children:"Trusted contacts"})})}),S.jsx("div",{className:"panel__body trusted-contacts__body",children:S.jsx($e,{})})]}:{ref:t,className:"panel set__security",id:"trusted-contacts","aria-labelledby":"trusted-contacts-title",children:[S.jsx("div",{className:"panel__head",children:S.jsx("div",{children:S.jsx("h2",{id:"trusted-contacts-title",children:"Trusted contacts"})})}),S.jsx("div",{className:"panel__body",children:S.jsx("div",{className:"actions",children:S.jsx(_,{tone:"idle",label:"Trusted contacts need an unlocked owner vault. A guest or decoy session cannot keep a circle."})})})]})}const Te="sharing.trusted-contacts",Ee={targets:f,goals:y,routes:p},Me={capability:Te,async activate(e){const t=x(e,Te);return t.disposed()||(t.register("settings-panel",{id:"trusted-contacts",label:"Trusted contacts",category:"security",Panel:Ce,order:330}),k(t,Ee)),t.handle()}};export{Te as CAPABILITY,Ee as TUTORIAL,Me as capabilityRuntime};
@@ -0,0 +1 @@
1
+ import{i as t}from"./install-DvNMSThj.js";import{c as o}from"./main-BrkS-iow.js";import"./drop-open-BjgdLxWM.js";import"./vault-ui-seam-BQGS7RR6.js";import"./native-worker-noble-ciphers-708367a7-BPuD3lXB.js";import"./native-worker-noble-hashes-b1a58353-IgGIMWEC.js";import"./native-worker-bytes-a0e18d71-DFmKzL3P.js";import"./hosted-model-authority-CcNPE44H.js";import"./model-provider-B6oAnQX9.js";import"./signals-DdOHdr--.js";import"./identity-BVf8yWa4.js";import"./native-worker-zod-5c0ed887-B342B6ko.js";import"./native-worker-zod-jitless-ba55e4a3-DZHC6DC7.js";import"./native-identity-admission-C4ZFillF.js";import"./vaults-B043odav.js";import"./react-dom-BwC4eQlG.js";import"./seams-DJ_lslby.js";import"./react-router-XsJY84ug.js";const r="storage.encrypted-search",s={capability:r,async activate(s){const i=o(s,r);if(i.disposed())return i.handle();const e=t();return i.onDispose(e.uninstall),i.handle()}};export{r as CAPABILITY,s as capabilityRuntime};
@@ -0,0 +1 @@
1
+ import{_ as t}from"./hosted-model-authority-CcNPE44H.js";import{M as s,e,a as o,f as r,l as i}from"./model-provider-B6oAnQX9.js";import{A as a,C as p,i as m,D as n,s as d,E as j,S as c}from"./DraftSuggestions-DT51r14S.js";import{c as l,aI as g}from"./main-BrkS-iow.js";import{i as v}from"./consent-CcqmRPoB.js";import{t as u}from"./vault-ui-seam-BQGS7RR6.js";import"./native-worker-bytes-a0e18d71-DFmKzL3P.js";import"./agent-prompt-api-BiYrmT5D.js";import"./native-worker-noble-ciphers-708367a7-BPuD3lXB.js";import"./native-worker-noble-hashes-b1a58353-IgGIMWEC.js";import"./identity-BVf8yWa4.js";import"./native-worker-zod-5c0ed887-B342B6ko.js";import"./native-worker-zod-jitless-ba55e4a3-DZHC6DC7.js";import"./section-nav-goals-B_N-ZW2I.js";import"./identity-view-paths-Bi1yigZk.js";import"./drop-open-BjgdLxWM.js";import"./signals-DdOHdr--.js";import"./react-dom-BwC4eQlG.js";import"./InvokeScreen-C-kFFYVF.js";import"./react-router-XsJY84ug.js";import"./model-key-state-NiiWojtT.js";import"./types-Ctz6L20B.js";import"./certs-CDCfMuEi.js";import"./bucket-saved-vQCiVvN_.js";import"./connections-CNmhCNAV.js";import"./native-catalog-status-INsDvLpU.js";import"./github-app-local-B-4pPsY4.js";import"./connect-plan-ClXbb_FT.js";import"./idp-presets-B1M-P0Ek.js";import"./seams-DJ_lslby.js";import"./context-CL4-cwvA.js";import"./noble-crypto-Mv8l2A7D.js";const b="support.local-ai",f={capability:b,async activate(f){const y=l(f,b);return y.disposed()||(await f.hydrate([s]),y.disposed()||(y.onDispose(v({promptApi:()=>t(()=>import("./agent-prompt-api-BiYrmT5D.js"),[])})),y.register("setup-panel",{id:"ai",tab:"ai",rail:"AI",Panel:a,order:20}),y.register("webmcp-tool",u(c)),y.register("command-assist",{id:"on-device",order:10,interpret:m,Voice:p}),y.register("item-draft-assist",{id:"on-device",order:10,Suggestions:n,suggest:(t,s)=>d({...t},s)}),y.register("settings-panel",{id:"model-provider",label:"Model provider",category:"features.feature-ai",Panel:j,order:10}),y.onDispose(g(async()=>{const t=await e();return o(r(i(),t))})))),y.handle()}};export{b as CAPABILITY,f as capabilityRuntime};
@@ -0,0 +1 @@
1
+ import{_ as t,h as r}from"./hosted-model-authority-CcNPE44H.js";import{r as e}from"./section-nav-goals-B_N-ZW2I.js";import{c as o,m as s}from"./saved-model-agent-Cdn954wf.js";import{loadAgUiEndpoint as n,applyAgUiEndpoint as i}from"./agent-ag-ui-DRbKYcn6.js";import{i as a}from"./consent-CcqmRPoB.js";import{c as m}from"./main-BrkS-iow.js";import{b as p,r as d}from"./signals-DdOHdr--.js";import"./identity-view-paths-Bi1yigZk.js";import"./drop-open-BjgdLxWM.js";import"./vault-ui-seam-BQGS7RR6.js";import"./native-worker-noble-ciphers-708367a7-BPuD3lXB.js";import"./native-worker-noble-hashes-b1a58353-IgGIMWEC.js";import"./native-worker-bytes-a0e18d71-DFmKzL3P.js";import"./model-provider-B6oAnQX9.js";import"./identity-BVf8yWa4.js";import"./native-worker-zod-5c0ed887-B342B6ko.js";import"./native-worker-zod-jitless-ba55e4a3-DZHC6DC7.js";import"./react-dom-BwC4eQlG.js";import"./certs-CDCfMuEi.js";import"./bucket-saved-vQCiVvN_.js";import"./hosted-model-protocol-B8j_voAG.js";import"./seams-DJ_lslby.js";import"./react-router-XsJY84ug.js";const c="support.remote-ai",l={loadAgUiEndpoint:n};function u(t){return s(t)}function j(){return[]}function g(){return[]}async function f(e,s){const n=await t(()=>import("./agent-ag-ui-DRbKYcn6.js"),[]);if(e?.aborted)return{createAgUiAgent:()=>null};const i=e?function(t){let e;try{const t=r();if(!t)return null;e=t}catch{return null}return{assertCurrent(){t.throwIfAborted(),e.assertCurrent()},fetch(r,o){t.throwIfAborted(),e.assertCurrent();const s=o?.signal?p([t,o.signal]):t;return d(s,()=>e.fetch(r,{...o,signal:s}))}}}(e):null;return{createAgUiAgent(){if(e?.aborted)return null;const t=n.createAgUiAgent()??o(i??void 0);return t&&s?.(t),t}}}function b(t){t.aborted||l.loadAgUiEndpoint(t).then(()=>{},()=>{})}const h={capability:c,async activate(r){const o=m(r,c);if(o.disposed())return o.handle();const s=new AbortController,n=p([r.lease.signal,s.signal]),d=new Set;return o.onDispose(a({provider:()=>t(()=>import("./agent-provider-BiJcKH7o.js"),[]),agUi:()=>f(n,t=>d.add(t))})),o.onDispose(()=>{for(const t of d)t.destroy();d.clear()}),o.onDispose(()=>i(null)),o.onDispose(()=>s.abort()),o.register("background-job",{id:"ag-ui-endpoint",start:t=>b(p([n,t]))}),o.register("command-assist",{id:"remote",order:30,interpret:t=>Promise.resolve(e(t))}),o.handle()}};export{c as CAPABILITY,g as acceptedRemoteModels,h as capabilityRuntime,f as loadRemoteAgentModule,j as loadSavedRemoteModels,l as remoteSupportSeams,u as savedRemoteModel,b as startAgUiEndpointLoad};
@@ -0,0 +1 @@
1
+ import{c as e}from"./main-BrkS-iow.js";import"./vault-ui-seam-BQGS7RR6.js";import"./native-worker-noble-ciphers-708367a7-BPuD3lXB.js";import"./native-worker-noble-hashes-b1a58353-IgGIMWEC.js";import"./native-worker-bytes-a0e18d71-DFmKzL3P.js";import"./signals-DdOHdr--.js";import"./model-provider-B6oAnQX9.js";import"./identity-BVf8yWa4.js";import"./hosted-model-authority-CcNPE44H.js";import"./native-worker-zod-5c0ed887-B342B6ko.js";import"./native-worker-zod-jitless-ba55e4a3-DZHC6DC7.js";import"./drop-open-BjgdLxWM.js";import"./react-dom-BwC4eQlG.js";import"./seams-DJ_lslby.js";import"./react-router-XsJY84ug.js";const t="telemetry.external",r={capability:t,activate:async r=>e(r,t).handle()};export{t as CAPABILITY,r as capabilityRuntime};
@@ -0,0 +1 @@
1
+ import{p as t}from"./catalog-Y21H0gVA.js";import{c as o,t as r,A as i,b as e}from"./plugin-activation-B_0fIk_I.js";import{c as s}from"./main-BrkS-iow.js";import"./vault-ui-seam-BQGS7RR6.js";import"./native-worker-noble-ciphers-708367a7-BPuD3lXB.js";import"./native-worker-noble-hashes-b1a58353-IgGIMWEC.js";import"./native-worker-bytes-a0e18d71-DFmKzL3P.js";import"./identity-BVf8yWa4.js";import"./model-provider-B6oAnQX9.js";import"./hosted-model-authority-CcNPE44H.js";import"./native-worker-zod-5c0ed887-B342B6ko.js";import"./native-worker-zod-jitless-ba55e4a3-DZHC6DC7.js";import"./drop-open-BjgdLxWM.js";import"./signals-DdOHdr--.js";import"./tailnet-plugin-pairing-DTK4jAlP.js";import"./idp-presets-B1M-P0Ek.js";import"./react-dom-BwC4eQlG.js";import"./identity-view-paths-Bi1yigZk.js";import"./seams-DJ_lslby.js";import"./FeatureSections-BG-JsWID.js";import"./features-9FeW22VH.js";import"./wake-lock-C_y0fQco.js";import"./react-router-XsJY84ug.js";import"./InvokeScreen-C-kFFYVF.js";const a="vault.browser-autofill",p={capability:a,async activate(p){const m=s(p,a);return m.disposed()||o(m,{plugin:t("browser-autofill"),daemon:r(p.egress,a),section:"feature-autofill",guideId:"settings.browser-autofill",tutorial:{targets:e,goals:i}}),m.handle()}};export{a as CAPABILITY,p as capabilityRuntime};
@@ -0,0 +1 @@
1
+ import{j as t,k as e}from"./certs-CDCfMuEi.js";import{aJ as r,aK as n,aL as o,aM as a,aN as s,aO as i,aP as c,aQ as u,aR as l,aS as f,aT as m,aU as p,aV as d,aW as h,c as w,aX as y}from"./main-BrkS-iow.js";import"./react-dom-BwC4eQlG.js";import{Q as g}from"./drop-open-BjgdLxWM.js";import"./hosted-model-authority-CcNPE44H.js";import"./vault-ui-seam-BQGS7RR6.js";import"./native-worker-noble-ciphers-708367a7-BPuD3lXB.js";import"./native-worker-noble-hashes-b1a58353-IgGIMWEC.js";import"./native-worker-bytes-a0e18d71-DFmKzL3P.js";import"./native-worker-zod-5c0ed887-B342B6ko.js";import"./native-worker-zod-jitless-ba55e4a3-DZHC6DC7.js";import"./bucket-saved-vQCiVvN_.js";import"./model-provider-B6oAnQX9.js";import"./signals-DdOHdr--.js";import"./identity-BVf8yWa4.js";import"./seams-DJ_lslby.js";import"./react-router-XsJY84ug.js";const b="1.2.840.10045.4.3.2";function A(t,e,n){return e?r(o(t),d(),f(n)):r(o(t),f(n))}const j=new RegExp("^(?!-)[A-Za-z0-9-]{1,63}(?<!-)$");function v(t){if(0===t.length||t.length>253)return!1;const e=t.split("."),[r,...n]=e;return!("*"===r&&0===n.length||!("*"===r?n:e).every(t=>j.test(t))||/^\d+$/.test(e[e.length-1]??""))}function E(t){const e=t.split(".");if(4!==e.length)return null;const r=[];for(const n of e){if(!/^(0|[1-9]\d{0,2})$/.test(n))return null;const t=Number(n);if(t>255)return null;r.push(t)}return Uint8Array.from(r)}function k(t,e){const r=[];for(const[n,o]of t.entries())if(e&&n===t.length-1&&o.includes(".")){const t=E(o);if(null===t)return null;r.push((t[0]??0)<<8|(t[1]??0),(t[2]??0)<<8|(t[3]??0))}else{if(!/^[0-9A-Fa-f]{1,4}$/.test(o))return null;r.push(Number.parseInt(o,16))}return r}const N=Date.UTC(9999,11,31,23,59,59);function C(t){const e=[];for(const r of t??[]){const t=r.trim();t&&!e.includes(t)&&e.push(t)}return e}async function S(t){const e=function(t){const e=t.trim();if(0===e.length)throw new Error("Enter a common name for the certificate.");if([...e].length>64)throw new Error("A certificate's common name can be at most 64 characters.");if(/[\u0000-\u001f\u007f]/.test(e))throw new Error("A certificate's common name cannot hold control characters.");return e}(t.commonName),d=C(t.dnsNames);for(const r of d)if(!v(r))throw new Error(`"${r}" is not a valid DNS name.`);const w=C(t.ipAddrs).map(t=>{const e=(r=t).includes(":")?function(t){const e=t.split("::");if(e.length>2)return null;const r=t=>""===t?[]:t.split(":"),n=2===e.length,o=r(e[0]??""),a=n?r(e[1]??""):[],s=k(o,!n),i=k(a,!0);if(null===s||null===i)return null;const c=s.length+i.length;if(n?c>7:8!==c)return null;const u=[...s,...new Array(8-c).fill(0),...i],l=new Uint8Array(16);for(const[f,m]of u.entries())l[2*f]=m>>8,l[2*f+1]=255&m;return l}(r):E(r);var r;if(null===e)throw new Error(`"${t}" is not a valid IP address.`);return e}),y=1e3*Math.floor(Date.now()/1e3),g=function(t,e){const r=e+36e5*t;if(!Number.isFinite(t)||t<=0||!Number.isFinite(r)||r>N)throw new Error("Choose a certificate lifetime of more than zero hours that ends before the year 10000.");return 1e3*Math.floor(r/1e3)}(t.ttlHours??24,y),j=function(){const t=crypto.getRandomValues(new Uint8Array(16));return t[0]=127&(t[0]??0)||1,t}(),{der:S,pkcs8:D}=await async function(t){const e=await crypto.subtle.generateKey({name:"ECDSA",namedCurve:"P-256"},!0,["sign","verify"]),d=new Uint8Array(await crypto.subtle.exportKey("spki",e.publicKey)),h=await async function(t,e){const n=r(o(b)),d=(h=t.commonName,r(u(r(o("2.5.4.3"),l(h)))));var h;return r(i(0,c(2)),s(t.serial),n,d,r(a(t.notBefore),a(t.notAfter)),d,e,await async function(t,e){const n=function(t){const e=new TextEncoder,n=[...t.dnsNames.map(t=>p(2,e.encode(t))),...t.ipAddresses.map(t=>p(7,t))];return 0===n.length?null:r(...n)}(t);return i(3,r(A("2.5.29.19",!0,r()),A("2.5.29.15",!0,m([0])),A("2.5.29.37",!1,r(o("1.3.6.1.5.5.7.3.1"),o("1.3.6.1.5.5.7.3.2"))),...null===n?[]:[A("2.5.29.17",!1,n)],A("2.5.29.14",!1,f(await async function(t){const e=await crypto.subtle.digest("SHA-256",function(t){const e=t.length-65,r=t.subarray(e-3,e);if(3!==r[0]||66!==r[1]||0!==r[2]||4!==t[e])throw new Error("WebCrypto returned an unexpected P-256 public key.");return t.subarray(e)}(t).slice());return new Uint8Array(e).subarray(0,20)}(e)))))}(t,e))}(t,d),w=new Uint8Array(await crypto.subtle.sign({name:"ECDSA",hash:"SHA-256"},e.privateKey,h.slice())),y=r(h,r(o(b)),n(function(t){if(64!==t.length)throw new RangeError(`ECDSA P-256 signature is ${t.length} bytes`);return r(s(t.subarray(0,32)),s(t.subarray(32)))}(w)));return{der:y,pkcs8:new Uint8Array(await crypto.subtle.exportKey("pkcs8",e.privateKey))}}({serial:j,commonName:e,dnsNames:d,ipAddresses:w,notBefore:new Date(y),notAfter:new Date(g)}),U=Array.from(j,t=>t.toString(16).padStart(2,"0")).join("").toUpperCase();return{certificate:h(S,"CERTIFICATE"),privateKey:h(D,"PRIVATE KEY"),caCertificate:"",serial:U,commonName:e,dnsNames:d,notBefore:new Date(y).toISOString(),notAfter:new Date(g).toISOString(),deliveryId:`local-${e}-${U}`}}const D="vault.certificate-records",U={capability:D,async activate(r){const n=w(r,D);if(n.disposed())return n.handle();const o=e.issueCertificate;return t(S),n.onDispose(()=>{e.issueCertificate=o}),n.register("item-kind",{kind:"certificate",label:g.certificate,segment:"certs",Icon:y,order:70}),n.handle()}};export{D as CAPABILITY,U as capabilityRuntime};
@@ -0,0 +1 @@
1
+ import{c as e,aY as r,aZ as t,a_ as o,a$ as s}from"./main-BrkS-iow.js";import{R as a,S as i}from"./drop-open-BjgdLxWM.js";import"./vault-ui-seam-BQGS7RR6.js";import"./native-worker-noble-ciphers-708367a7-BPuD3lXB.js";import"./native-worker-noble-hashes-b1a58353-IgGIMWEC.js";import"./native-worker-bytes-a0e18d71-DFmKzL3P.js";import"./signals-DdOHdr--.js";import"./model-provider-B6oAnQX9.js";import"./identity-BVf8yWa4.js";import"./hosted-model-authority-CcNPE44H.js";import"./native-worker-zod-5c0ed887-B342B6ko.js";import"./native-worker-zod-jitless-ba55e4a3-DZHC6DC7.js";import"./react-dom-BwC4eQlG.js";import"./seams-DJ_lslby.js";import"./react-router-XsJY84ug.js";const m="vault.derived-records",p={capability:m,async activate(p){const d=e(p,m);return d.disposed()||(r.forEach((e,r)=>{const s=a(e);void 0!==s&&d.register("item-kind",{kind:e,label:s.title,segment:o(e,i(s.plural,e)),order:t(e,r)})}),s(r,{keep:!1})),d.handle()}};export{m as CAPABILITY,p as capabilityRuntime};
@@ -0,0 +1 @@
1
+ import{c as e}from"./main-BrkS-iow.js";import"./vault-ui-seam-BQGS7RR6.js";import"./native-worker-noble-ciphers-708367a7-BPuD3lXB.js";import"./native-worker-noble-hashes-b1a58353-IgGIMWEC.js";import"./native-worker-bytes-a0e18d71-DFmKzL3P.js";import"./signals-DdOHdr--.js";import"./model-provider-B6oAnQX9.js";import"./identity-BVf8yWa4.js";import"./hosted-model-authority-CcNPE44H.js";import"./native-worker-zod-5c0ed887-B342B6ko.js";import"./native-worker-zod-jitless-ba55e4a3-DZHC6DC7.js";import"./drop-open-BjgdLxWM.js";import"./react-dom-BwC4eQlG.js";import"./seams-DJ_lslby.js";import"./react-router-XsJY84ug.js";const r="vault.environments",t={capability:r,async activate(t){const o=e(t,r);return o.disposed()||o.register("item-kind",{kind:"environment",label:"Environments",segment:"environments",order:80}),o.handle()}};export{r as CAPABILITY,t as capabilityRuntime};
@@ -0,0 +1 @@
1
+ import{c as e,T as s}from"./main-BrkS-iow.js";import{Q as r}from"./drop-open-BjgdLxWM.js";import"./vault-ui-seam-BQGS7RR6.js";import"./native-worker-noble-ciphers-708367a7-BPuD3lXB.js";import"./native-worker-noble-hashes-b1a58353-IgGIMWEC.js";import"./native-worker-bytes-a0e18d71-DFmKzL3P.js";import"./signals-DdOHdr--.js";import"./model-provider-B6oAnQX9.js";import"./identity-BVf8yWa4.js";import"./hosted-model-authority-CcNPE44H.js";import"./native-worker-zod-5c0ed887-B342B6ko.js";import"./native-worker-zod-jitless-ba55e4a3-DZHC6DC7.js";import"./react-dom-BwC4eQlG.js";import"./seams-DJ_lslby.js";import"./react-router-XsJY84ug.js";const o="vault.passkey-records",t={capability:o,async activate(t){const i=e(t,o);return i.disposed()||i.register("item-kind",{kind:"passkey",label:r.passkey,segment:"passkeys",Icon:s,order:20}),i.handle()}};export{o as CAPABILITY,t as capabilityRuntime};
@@ -0,0 +1 @@
1
+ import{_ as e}from"./hosted-model-authority-CcNPE44H.js";import{c as t,b0 as s,b1 as n,b2 as a,e as o,m as r,aX as c}from"./main-BrkS-iow.js";import{j as i,r as l}from"./react-dom-BwC4eQlG.js";import{T as d,U as h,p as u,V as p,W as f,b as m,X as w,Y as k,Z as b,_ as g,$ as j,a0 as v}from"./drop-open-BjgdLxWM.js";import{c as y,i as _}from"./vault-ui-seam-BQGS7RR6.js";import{u as $}from"./wake-lock-C_y0fQco.js";import{S as x,a as A}from"./InvokeScreen-C-kFFYVF.js";import"./signals-DdOHdr--.js";import"./model-provider-B6oAnQX9.js";import"./native-worker-bytes-a0e18d71-DFmKzL3P.js";import"./identity-BVf8yWa4.js";import"./native-worker-zod-5c0ed887-B342B6ko.js";import"./native-worker-zod-jitless-ba55e4a3-DZHC6DC7.js";import"./seams-DJ_lslby.js";import"./native-worker-noble-hashes-b1a58353-IgGIMWEC.js";import"./react-router-XsJY84ug.js";import"./native-worker-noble-ciphers-708367a7-BPuD3lXB.js";const N="Breach and two-step checks are on. Not checked yet.";function S(e,t,s){return`${e} ${1===e?t:s}`}function C(e){const t=e.findings.filter(e=>e.breaches>0).length,s=e.findings.filter(e=>e.twoFactorAvailable).length,{checked:n,notCheckable:a}=e;return 0===n?a>0?function(e){return`No logins checked: ${S(e,"password","passwords")} ${1===e?"uses":"use"} a pepper only you hold, so this device can't check them.`}(a):"No logins this device can check.":t>0&&s>0?`${t} of ${n} passwords found in known breaches. ${S(s,"login","logins")} could add an authenticator code.`:t>0?`${t} of ${n} passwords found in known breaches.`:s>0?`${S(s,"login","logins")} of ${n} could add an authenticator code.`:`${S(n,"login","logins")} checked. Nothing found in known breaches, and no login is missing an authenticator code its site offers.`}function F(e,t){const s=[];return e>0&&s.push(`Found in breaches ${S(e,"time","times")}: change this password`),t&&s.push("This site takes an authenticator code; none is stored"),s}function P(e){const t="account"===e.item.kind?h(e.item.uris[0]?.uri):"";return{id:e.item.id,name:e.item.name,site:t,breaches:e.breaches,twoFactorAvailable:e.twoFactorAvailable,sentences:F(e.breaches,e.twoFactorAvailable)}}let E=null;function T(e){if("credential"===e.kind){const t=e.method;return`${e.id}:${t.id}:${"password"===t.type?t.changedAt:""}`}const t=u(e);return`${e.id}:${t?.id??""}:${t?.changedAt??""}`}function M(e,t){return`${e}\0${function(e){return B(e).filter(e=>""!==I(e))}(t).map(T).sort().join("|")}`}function z(e){switch(e.phase){case"off":return E=null,void d({phase:"off"});case"idle":return E=null,void d({phase:"idle",label:N});case"checking":return void d({phase:"checking",label:"Checking logins against known breaches and two-step sites."});case"error":return void d({phase:"error",label:e.message});case"checked":return void d(function(e){const t=e.findings.filter(e=>e.breaches>0).length,s=e.findings.filter(e=>e.twoFactorAvailable).length;return{phase:"checked",label:C(e),checked:e.checked,breached:t,twoStep:s,lines:e.findings.map(P)}}(e.report))}}async function L(e){const t=await crypto.subtle.digest("SHA-1",(new TextEncoder).encode(e));return Array.from(new Uint8Array(t),e=>e.toString(16).padStart(2,"0")).join("").toUpperCase()}function O(e){const t=new Map;for(const s of e.split(/\r?\n/u)){const[e,n]=s.trim().split(":"),a=Number(n);e&&Number.isSafeInteger(a)&&a>0&&t.set(e.toUpperCase(),a)}return t}function U(e,t){const s=e.toLowerCase().split(".");for(let n=0;n<s.length-1;n+=1)if(t.has(s.slice(n).join(".")))return!0;return!1}function I(e){return"credential"===e.kind?"password"===e.method.type?k(b(e.method))??"":"":k(g(e))??""}function B(e){const t=f(e);return[...m([...t]).filter(e=>"account"===e.kind),...w(t)].filter(e=>"credential"===e.kind?"password"===e.method.type:void 0!==u(e))}const D="vault.security-checks",R={capability:D,async activate(a){const o=t(a,D);if(o.disposed())return o.handle();o.onDispose(()=>{z({phase:"off"})}),z({phase:"idle"});const r={capability:D,purpose:n},c={capability:D,purpose:s},{securityChecksPanel:i}=await e(async()=>{const{securityChecksPanel:e}=await Promise.resolve().then(()=>H);return{securityChecksPanel:e}},void 0),l=i({range:(e,t)=>a.egress.fetch(e,t,r),twoFactor:(e,t)=>a.egress.fetch(e,t,c)});return o.register("settings-panel",{id:"capability-security-checks",label:"Breach and two-step checks",category:"features.feature-security-checks",Panel:l,order:10}),o.handle()}};function V(e){return"error"===e.phase?"err":"checked"!==e.phase?"idle":e.breached>0?"err":e.twoStep>0?"warn":"ok"}function X({watch:e,label:t,open:s,vault:n,fetches:l}){const d="checking"===e.phase,u="checking"===e.phase||"error"===e.phase||"checked"===e.phase;return i.jsxs("section",{className:"panel set__security",id:"security-checks",children:[i.jsxs("div",{className:"panel__head",children:[i.jsx("div",{children:i.jsx("h2",{children:"Breach and two-step checks"})}),u?i.jsx(x,{tone:V(e),label:t}):null]}),i.jsxs("div",{className:"panel__body",children:[i.jsx("p",{className:"hint set__lead",children:a}),i.jsx("p",{className:"set__status",children:t}),i.jsx(A,{icon:i.jsx(c,{size:16}),label:"Logins in this vault",sub:"checked"===e.phase?(f=e.checked,`${f.toLocaleString()} ${1===f?"login checked":"logins checked"}`):"checking"===e.phase?"Checking":"Not checked",action:i.jsx(o,{small:!0,label:"Check logins against breaches and two-step sites",disabled:d||!s,onClick:()=>{!d&&s&&(z({phase:"checking"}),async function(e,t,s,n=()=>new Date,a){const o=B(e),r=o.filter(e=>""!==I(e)),c=o.length-r.length,i=await async function(e,t){const s=new Map;for(const a of new Set(e)){const e=await L(a),t=e.slice(0,5),n=s.get(t)??new Map;n.set(e.slice(5),a),s.set(t,n)}const n=new Map;for(const[a,o]of s){const e=await t(`https://api.pwnedpasswords.com/range/${a}`,{headers:{"Add-Padding":"true"},cache:"no-store"});if(!e.ok)throw new Error(`The breach check failed (${e.status}).`);const s=O(await e.text());for(const[t,a]of o)n.set(a,s.get(t)??0)}return n}(r.map(I),t),l=r.some(e=>"account"===e.kind&&!p(e))?await async function(e){const t=await e("https://api.2fa.directory/v3/totp.json",{cache:"no-store"});if(!t.ok)throw new Error(`The two-step list could not be read (${t.status}).`);return function(e){const t=new Set;if(!Array.isArray(e))return t;for(const s of e){const e=Array.isArray(s)?s[1]:void 0;if(!y(e))continue;const n=[e.domain,...Array.isArray(e["additional-domains"])?e["additional-domains"]:[]];for(const s of n)_(s)&&""!==s.trim()&&t.add(s.trim().toLowerCase())}return t}(await t.json())}(s):new Set,d=[];for(const u of r){const e=i.get(I(u))??0,t="account"===u.kind&&!p(u)&&u.uris.some(e=>{const t=h(e.uri);return""!==t&&U(t,l)});(e>0||t)&&d.push({item:u,breaches:e,twoFactorAvailable:t})}return d.sort((e,t)=>t.breaches-e.breaches||e.item.name.localeCompare(t.item.name)),void 0!==a&&(E=M(a,e)),{checkedAt:n().toISOString(),checked:r.length,notCheckable:c,findings:d}}(n.items,l.range,l.twoFactor,void 0,n.tomb).then(e=>z({phase:"checked",report:e}),e=>z({phase:"error",message:e instanceof Error?e.message:"The check failed."})))},children:i.jsx(r,{size:16})})}),"checked"===e.phase?e.lines.map(e=>i.jsxs("div",{className:"vault-row",children:[i.jsx("div",{className:"vault-row__body",children:i.jsxs("span",{className:"vault-row__text",children:[i.jsx("span",{className:"vault-row__name",children:e.name||e.site||"Untitled"}),e.site?i.jsx("span",{className:"vault-row__meta",children:e.site}):null,e.sentences.map(e=>i.jsx("span",{className:"set__finding",children:e},e))]})}),e.breaches>0?i.jsx(x,{tone:"err",label:e.sentences[0]??""}):null,e.twoFactorAvailable?i.jsx(x,{tone:"warn",label:e.sentences[e.breaches>0?1:0]??""}):null]},e.id)):null]})]});var f}const H=Object.freeze(Object.defineProperty({__proto__:null,securityChecksPanel:function(e){return function(){const t=$(),{tomb:s,items:n}=t;l.useEffect(()=>{!function(e,t){null!==E&&E!==M(e,t)&&z({phase:"idle"})}(s,n)},[s,n]);const a=l.useSyncExternalStore(j,v,v),o="unlocked"===t.status,r=function(e){return"off"===e.phase||"idle"===e.phase?N:e.label}(a);return i.jsx(X,{watch:a,label:r,open:o,vault:t,fetches:e})}}},Symbol.toStringTag,{value:"Module"}));export{D as CAPABILITY,R as capabilityRuntime};
@@ -0,0 +1 @@
1
+ import{r as t,h as e,p as s}from"./certs-CDCfMuEi.js";import{u as r,l as a,w as o,a as i,b as m,s as p,g as n,f as l,W as d,c as j,d as c,e as u,h as f,i as h,j as w}from"./WalletSection-C4CTvIi9.js";import{c as g}from"./section-nav-goals-B_N-ZW2I.js";import{a as v}from"./types-Ctz6L20B.js";import{c as b,r as k}from"./main-BrkS-iow.js";import{t as y}from"./vault-ui-seam-BQGS7RR6.js";import{j as $}from"./react-dom-BwC4eQlG.js";import{w as I,W as x,k as D}from"./identity-view-paths-Bi1yigZk.js";import{u as P}from"./react-router-XsJY84ug.js";import{P as W}from"./PageTreeBranch-OgsaK684.js";import{w as S}from"./Crumbs-BQsauYj_.js";import{p as M}from"./InvokeScreen-C-kFFYVF.js";import{u as _}from"./wake-lock-C_y0fQco.js";import"./hosted-model-authority-CcNPE44H.js";import"./native-worker-zod-5c0ed887-B342B6ko.js";import"./native-worker-zod-jitless-ba55e4a3-DZHC6DC7.js";import"./drop-open-BjgdLxWM.js";import"./native-worker-bytes-a0e18d71-DFmKzL3P.js";import"./model-provider-B6oAnQX9.js";import"./signals-DdOHdr--.js";import"./identity-BVf8yWa4.js";import"./native-worker-noble-hashes-b1a58353-IgGIMWEC.js";import"./bucket-saved-vQCiVvN_.js";import"./hosted-identity-rail-Dv05NPNo.js";import"./pane-trail-dW-2RSUm.js";import"./use-vault-search-C7u00nrc.js";import"./idp-presets-B1M-P0Ek.js";import"./seams-DJ_lslby.js";import"./vault-menu-CqO_AStq.js";import"./MethodPicker-CqQTyAaT.js";import"./vault-list-path-Bh2_KZkq.js";import"./vaults-B043odav.js";import"./payload-CVz3G9cA.js";import"./compartment-guard-D3FuKM8N.js";import"./support-context-DrcseTKK.js";import"./listing-page-B-c8QQVp.js";import"./item-secret-update-BGxSkyWF.js";import"./password-workflows-Cmir8qky.js";import"./item-contributions-BNmtlrGT.js";import"./context-CL4-cwvA.js";import"./noble-crypto-Mv8l2A7D.js";import"./native-worker-noble-ciphers-708367a7-BPuD3lXB.js";import"./use-settings-category-Dy0gsCtF.js";import"./features-9FeW22VH.js";import"./use-integrations-drawn-DYzpglrK.js";import"./shared-Ck7e2FJN.js";import"./native-catalog-status-INsDvLpU.js";import"./local-vault-sessions-CGv9AsFj.js";import"./FeatureSections-BG-JsWID.js";function z({pathname:t}){r();const{items:e}=_(),{hash:s}=P(),d={budgets:a().map(t=>({id:t.nodeId,label:t.label,href:o("/wallet/budgets",t.nodeId)})),methods:i(e).map(t=>({id:t.id,label:t.name,href:o(I("methods"),t.id)})),passes:[...m().map(t=>({id:`lease:${t.id}`,label:`${t.amount} ${t.currency} → ${p(t.recipient)}`,href:o(I("passes"),`lease:${t.id}`)})),...[...n().snapshot().attempts.values()].filter(t=>"reserved"===t.state).map(t=>({id:`attempt:${t.attemptId}`,label:`${l(t.amount)} on ${t.nodeId}`,href:o(I("passes"),`attempt:${t.attemptId}`)}))]},j=M(x.map(t=>({id:t,label:D[t],href:`/wallet/${t}`,items:d[t]})));return $.jsx("div",{className:"railtree__kids",children:j.map(e=>$.jsx(W,{node:e,level:2,current:S(t,s)},e.id))})}const F="wallet.spending";function N(t){return e(t)}function Q(){return v(["wallet"],N)}function R(){return Q().map(t=>T(t.providerId))}function T(t){return s(t)}function Y(){return R()}const q={targets:j,goals:g,routes:d},B={capability:F,async activate(e){const s=b(e,F);if(s.disposed())return s.handle();s.onDispose(t("wallet",Y)),s.onDispose(c()),s.onDispose(u()),s.onDispose(f()),s.register("section",{id:"wallet",to:"/wallet",label:"Wallet",segment:"wallet",jump:"w",icon:"card",order:50,Tree:z}),s.register("route",{id:"wallet",path:"/wallet/:category?",element:w,framed:!0,order:50}),s.register("command-path",{path:"/wallet",label:"Wallet"}),s.register("keymap-jump",{key:"w",path:"/wallet"}),k(s,q);for(const t of h)s.register("webmcp-tool",y(t));return s.handle()}};export{F as CAPABILITY,q as TUTORIAL,Q as applySavedWalletConnectors,B as capabilityRuntime,Y as runSavedWalletConnectors,N as savedWalletOperation,R as startWalletConnectors,T as walletOperation};
@@ -0,0 +1 @@
1
+ const n=[{id:"surrogate-proxy",kind:"native-binary",capability:"agents.surrogate-credentials",title:"Surrogate proxy",installCommand:"opensesame plugins install surrogate-proxy --from <file-or-url> --sha256 <sha256>",notices:!0},{id:"browser-autofill",kind:"browser-extension",capability:"vault.browser-autofill",title:"Autofill extension",installCommand:"opensesame plugins install browser-autofill --from <file-or-url> --sha256 <sha256> --extension-id <extension-id>",notices:!1}],i=new Set(n.map(n=>n.id));function t(n){return i.has(n)}function e(i){const t=n.find(n=>n.id===i);if(!t)throw new Error(`unknown plugin ${i}`);return t}function o(i){return n.find(n=>n.capability===i)??null}export{o as a,t as i,e as p};