@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 @@
1
+ import{j as e}from"./react-dom-BwC4eQlG.js";import{k as t}from"./sha3-Bm70HrE3.js";import{i as n,c as r,o as i}from"./vault-ui-seam-BQGS7RR6.js";import{d as s,c as a,a as o,b as c}from"./native-worker-bytes-a0e18d71-DFmKzL3P.js";import{ai as l,bE as u,ah as p}from"./drop-open-BjgdLxWM.js";import{c as d,r as m,e as g,f,g as h,h as y,i as $}from"./vault-list-path-Bh2_KZkq.js";import"./native-worker-noble-hashes-b1a58353-IgGIMWEC.js";import"./native-worker-noble-ciphers-708367a7-BPuD3lXB.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"./main-BrkS-iow.js";import"./seams-DJ_lslby.js";import"./react-router-XsJY84ug.js";import"./wake-lock-C_y0fQco.js";import"./idp-presets-B1M-P0Ek.js";import"./identity-view-paths-Bi1yigZk.js";const b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",A=[{id:"supabase-pat",label:"Supabase personal access token",service:"Supabase",header:"Authorization",specificity:100,pattern:/^sbp_(?:v\d+_)?[0-9a-f]{40}$/u,generate:e=>`sbp_${e.hex(40)}`},{id:"supabase-secret",label:"Supabase secret key",service:"Supabase",header:"apikey",specificity:99,pattern:/^sb_secret_[A-Za-z0-9_-]{32,}$/u,generate:e=>`sb_secret_${e.string(b,40)}`},{id:"github-token",label:"GitHub token",service:"GitHub",header:"Authorization",specificity:98,pattern:/^(?:gh[pousr]_[A-Za-z0-9]{36,251}|github_pat_[A-Za-z0-9_]{22,255})$/u,generate:e=>`ghp_${e.string(b,36)}`},{id:"gitlab-token",label:"GitLab personal access token",service:"GitLab",header:"PRIVATE-TOKEN",specificity:97,pattern:/^glpat-[A-Za-z0-9_-]{20,}$/u,generate:e=>`glpat-${e.string(b,20)}`},{id:"aws-access-key",label:"AWS access key ID",service:"AWS",header:"Authorization",specificity:96,pattern:/^(?:AKIA|ASIA)[A-Z0-9]{16}$/u,generate:e=>`AKIA${e.string("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",16)}`},{id:"slack-token",label:"Slack token",service:"Slack",header:"Authorization",specificity:95,pattern:/^xox[abposr]-[A-Za-z0-9-]{10,}$/u,generate:e=>`xoxb-${e.digits(12)}-${e.string(b,24)}`},{id:"stripe-key",label:"Stripe secret key",service:"Stripe",header:"Authorization",specificity:94,pattern:/^(?:sk|rk)_(?:live|test)_[A-Za-z0-9]{16,}$/u,generate:e=>`sk_test_${e.string(b,24)}`},{id:"anthropic-key",label:"Anthropic API key",service:"Anthropic",header:"x-api-key",specificity:93,pattern:/^sk-ant-[A-Za-z0-9_-]{20,}$/u,generate:e=>`sk-ant-api03-${e.string(`${b}_-`,40)}`},{id:"openai-key",label:"OpenAI API key",service:"OpenAI",header:"Authorization",specificity:92,pattern:/^sk-(?:proj-|svcacct-|admin-)?[A-Za-z0-9_-]{32,}$/u,generate:e=>`sk-proj-${e.string(`${b}_-`,48)}`},{id:"google-api-key",label:"Google API key",service:"Google",header:"x-goog-api-key",specificity:91,pattern:/^AIza[0-9A-Za-z_-]{35}$/u,generate:e=>`AIza${e.string(`${b}_-`,35)}`},{id:"npm-token",label:"npm access token",service:"npm",header:"Authorization",specificity:90,pattern:/^npm_[A-Za-z0-9]{36}$/u,generate:e=>`npm_${e.string(b,36)}`},{id:"hugging-face-token",label:"Hugging Face token",service:"Hugging Face",header:"Authorization",specificity:89,pattern:/^hf_[A-Za-z0-9]{34,}$/u,generate:e=>`hf_${e.string(b,34)}`},{id:"replicate-token",label:"Replicate token",service:"Replicate",header:"Authorization",specificity:88,pattern:/^r8_[A-Za-z0-9]{32,}$/u,generate:e=>`r8_${e.string(b,37)}`},{id:"groq-key",label:"Groq API key",service:"Groq",header:"Authorization",specificity:87,pattern:/^gsk_[A-Za-z0-9]{40,}$/u,generate:e=>`gsk_${e.string(b,52)}`},{id:"perplexity-key",label:"Perplexity API key",service:"Perplexity",header:"Authorization",specificity:86,pattern:/^pplx-[A-Za-z0-9]{32,}$/u,generate:e=>`pplx-${e.string(b,32)}`},{id:"xai-key",label:"xAI API key",service:"xAI",header:"Authorization",specificity:85,pattern:/^xai-[A-Za-z0-9]{32,}$/u,generate:e=>`xai-${e.string(b,64)}`},{id:"linear-key",label:"Linear API key",service:"Linear",header:"Authorization",specificity:84,pattern:/^lin_api_[A-Za-z0-9]{40,}$/u,generate:e=>`lin_api_${e.string(b,40)}`},{id:"notion-token",label:"Notion token",service:"Notion",header:"Authorization",specificity:83,pattern:/^(?:secret_[A-Za-z0-9]{43}|ntn_[A-Za-z0-9]{46})$/u,generate:e=>`ntn_${e.string(b,46)}`},{id:"airtable-token",label:"Airtable personal access token",service:"Airtable",header:"Authorization",specificity:82,pattern:/^pat[A-Za-z0-9]{14}\.[a-f0-9]{64}$/u,generate:e=>`pat${e.string(b,14)}.${e.hex(64)}`},{id:"figma-token",label:"Figma personal access token",service:"Figma",header:"X-Figma-Token",specificity:81,pattern:/^figd_[A-Za-z0-9_-]{40,}$/u,generate:e=>`figd_${e.string(`${b}_-`,43)}`},{id:"shopify-token",label:"Shopify access token",service:"Shopify",header:"X-Shopify-Access-Token",specificity:80,pattern:/^shp(?:at|ss)_[a-f0-9]{32}$/u,generate:e=>`shpat_${e.hex(32)}`},{id:"digitalocean-token",label:"DigitalOcean token",service:"DigitalOcean",header:"Authorization",specificity:79,pattern:/^dop_v1_[a-f0-9]{64}$/u,generate:e=>`dop_v1_${e.hex(64)}`},{id:"sendgrid-key",label:"SendGrid API key",service:"SendGrid",header:"Authorization",specificity:78,pattern:/^SG\.[A-Za-z0-9_-]{22}\.[A-Za-z0-9_-]{43}$/u,generate:e=>`SG.${e.string(`${b}_-`,22)}.${e.string(`${b}_-`,43)}`},{id:"mailgun-key",label:"Mailgun API key",service:"Mailgun",header:"Authorization",specificity:77,pattern:/^key-[a-f0-9]{32}$/u,generate:e=>`key-${e.hex(32)}`},{id:"pypi-token",label:"PyPI API token",service:"PyPI",header:"Authorization",specificity:76,pattern:/^pypi-[A-Za-z0-9_-]{40,}$/u,generate:e=>`pypi-${e.string(`${b}_-`,60)}`},{id:"sentry-token",label:"Sentry token",service:"Sentry",header:"Authorization",specificity:75,pattern:/^sntrys_[A-Za-z0-9_-]{40,}$/u,generate:e=>`sntrys_${e.string(`${b}_-`,64)}`},{id:"twilio-api-key",label:"Twilio API key SID",service:"Twilio",header:"Authorization",specificity:74,pattern:/^SK[a-f0-9]{32}$/u,generate:e=>`SK${e.hex(32)}`},{id:"posthog-key",label:"PostHog personal API key",service:"PostHog",header:"Authorization",specificity:73,pattern:/^phx_[A-Za-z0-9]{40,}$/u,generate:e=>`phx_${e.string(b,40)}`},{id:"planetscale-token",label:"PlanetScale token",service:"PlanetScale",header:"Authorization",specificity:72,pattern:/^pscale_tkn_[A-Za-z0-9_-]{32,}$/u,generate:e=>`pscale_tkn_${e.string(`${b}_-`,43)}`},{id:"resend-key",label:"Resend API key",service:"Resend",header:"Authorization",specificity:71,pattern:/^re_[A-Za-z0-9]{32}$/u,generate:e=>`re_${e.string(b,32)}`},{id:"doppler-token",label:"Doppler token",service:"Doppler",header:"Authorization",specificity:70,pattern:/^dp\.pt\.[A-Za-z0-9]{40,}$/u,generate:e=>`dp.pt.${e.string(b,43)}`},{id:"onepassword-token",label:"1Password service account token",service:"1Password",header:"Authorization",specificity:69,pattern:/^ops_[A-Za-z0-9_-]{40,}$/u,generate:e=>`ops_${e.string(`${b}_-`,43)}`},{id:"hashicorp-vault-token",label:"HashiCorp Vault token",service:"HashiCorp Vault",header:"X-Vault-Token",specificity:68,pattern:/^hvs\.[A-Za-z0-9_-]{20,}$/u,generate:e=>`hvs.${e.string(`${b}_-`,40)}`},{id:"pulumi-token",label:"Pulumi access token",service:"Pulumi",header:"Authorization",specificity:67,pattern:/^pul-[a-f0-9]{40}$/u,generate:e=>`pul-${e.hex(40)}`},{id:"generic-api-key",label:"Synthetic API key",service:"OpenSesame test service",header:"Authorization",specificity:20,pattern:/^opensesame_test_[A-Za-z0-9_-]{32,}$/u,generate:e=>`opensesame_test_${e.string(`${b}_-`,32)}`}];function k(e){return A.map(t=>({id:`${e}:${t.id}`,typeId:e,label:t.label,specificity:t.specificity,parse(n){const r=n.trim();return t.pattern.test(r)?"api-credential"===e?{service:t.service,apiKey:r}:{apiKey:r,header:t.header}:null},generate({random:n}){const r=t.generate(n);return"api-credential"===e?{service:t.service,apiKey:r}:{apiKey:r,header:t.header}},canonical:e=>function(e){const t=e.trim();return""===t?null:t}(function(e){const t=e.apiKey;return n(t)?t:""}(e))}))}const v=[7,3,1],S=/^[A-Z]{3}$/u,I=/^[A-Z0-9<]+$/u;function w(e,t){const r=e[t];return n(r)?r:""}function P(e){let t=0;for(let n=0;n<e.length;n+=1){const r=e[n]??"<";t+=("<"===r?0:r>="0"&&r<="9"?Number(r):r>="A"&&r<="Z"?r.charCodeAt(0)-55:0)*(v[n%3]??1)}return String(t%10)}function x(e,t){if(!/^\d{6}$/u.test(e))return null;const n=Number(e.slice(0,2)),r=t?n<=(new Date).getUTCFullYear()%100?2e3+n:1900+n:2e3+n,i=e.slice(2,4),s=e.slice(4,6),a=new Date(Date.UTC(r,Number(i)-1,Number(s)));return a.getUTCFullYear()!==r||a.getUTCMonth()!==Number(i)-1||a.getUTCDate()!==Number(s)?null:`${r}-${i}-${s}`}function _(e){const t=/^(\d{4})-(\d{2})-(\d{2})$/u.exec(e);return t?`${t[1]?.slice(2)}${t[2]}${t[3]}`:null}function T(e){return e.replaceAll("<"," ").replaceAll(/\s+/gu," ").trim()}const C={id:"identity-document:mrz-td1",typeId:"identity-document",label:"Identity card MRZ",specificity:99,parse:function(e){const t=function(e){const t=e.trim().split(/\r?\n/u);if(3!==t.length)return null;const[n="",r="",i=""]=t;return 30!==n.length||30!==r.length||30!==i.length?null:I.test(n)&&I.test(r)&&I.test(i)?[n,r,i]:null}(e);if(!t)return null;const[n,r,i]=t;if("I"!==n.slice(0,1))return null;const s=n.slice(2,5);if(!S.test(s))return null;const a=n.slice(5,14);if(P(a)!==n[14])return null;if(!function(e){return P(e.slice(0,6))===e[6]&&P(e.slice(8,14))===e[14]}(r)||!function(e,t){return P(`${e.slice(5,15)}${t.slice(0,7)}${t.slice(8,15)}${t.slice(18,29)}`)===t[29]}(n,r))return null;const o=function(e){const t=x(e.slice(0,6),!0),n=x(e.slice(8,14),!1);return t&&n?{dateOfBirth:t,expiresAt:n}:null}(r);return o?{documentKind:"identity card",documentNumber:a.replaceAll("<",""),issuingCountry:s,fullName:T(i),dateOfBirth:o.dateOfBirth,expiresAt:o.expiresAt}:null},generate:function({random:e,now:t}){const n=new Date(t.getTime());return n.setUTCFullYear(n.getUTCFullYear()+5),{documentKind:"identity card",documentNumber:e.string("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",9),issuingCountry:"GBR",fullName:"SPECIMEN TEST",dateOfBirth:"1990-01-01",expiresAt:n.toISOString().slice(0,10)}},canonical:function(e){const t=function(e){const t=w(e,"issuingCountry").toUpperCase();if(!S.test(t))return null;const n=w(e,"documentNumber").toUpperCase().replaceAll(/[^A-Z0-9]/gu,"");return n?`ID${t}${n.padEnd(9,"<").slice(0,9)}${P(n.padEnd(9,"<").slice(0,9))}${"<".repeat(15)}`:null}(e),n=function(e){const t=_(w(e,"dateOfBirth")),n=_(w(e,"expiresAt"));if(!t||!n)return null;const r="<".repeat(11),i=w(e,"documentNumber").toUpperCase().replaceAll(/[^A-Z0-9]/gu,"").padEnd(9,"<").slice(0,9),s=P(`${i}${P(i)}${t}${P(t)}${n}${P(n)}${r}`);return`${t}${P(t)}${"M"===w(e,"sex")||"F"===w(e,"sex")?w(e,"sex"):"<"}${n}${P(n)}${w(e,"issuingCountry").toUpperCase()}${r}${s}`}(e);return t&&n?`${t}\n${n}\n${function(e){const t=e.toUpperCase().replaceAll(/[^A-Z ]/gu," ").trim().split(/\s+/u).filter(Boolean);if(0===t.length)return"";const[n,...r]=t;return`${n}${r.length>0?`<<${r.join("<")}`:"<<"}`}(w(e,"fullName")).padEnd(30,"<").slice(0,30)}`:null}},N=[7,3,1],z=/^[A-Z]{3}$/u,E=/^[A-Z0-9<]+$/u,Z=new Map([["P<","ordinary"],["PO","official"],["PD","diplomatic"],["PS","service"],["PE","emergency"]]);function U(e,t){const r=e[t];return n(r)?r:""}function O(e){let t=0;for(let n=0;n<e.length;n+=1){const r=e[n]??"<";t+=("<"===r?0:r>="0"&&r<="9"?Number(r):r>="A"&&r<="Z"?r.charCodeAt(0)-55:0)*(N[n%3]??1)}return String(t%10)}function R(e,t){if(!/^\d{6}$/u.test(e))return null;const n=Number(e.slice(0,2)),r=t?n<=(new Date).getUTCFullYear()%100?2e3+n:1900+n:2e3+n,i=e.slice(2,4),s=e.slice(4,6),a=new Date(Date.UTC(r,Number(i)-1,Number(s)));return a.getUTCFullYear()!==r||a.getUTCMonth()!==Number(i)-1||a.getUTCDate()!==Number(s)?null:`${r}-${i}-${s}`}function K(e){const t=/^(\d{4})-(\d{2})-(\d{2})$/u.exec(e);return t?`${t[1]?.slice(2)}${t[2]}${t[3]}`:null}function D(e){return e.replaceAll("<"," ").replaceAll(/\s+/gu," ").trim()}function B(e){return"M"===e||"F"===e?e:""}const j={id:"passport:mrz-td3",typeId:"passport",label:"Passport MRZ",specificity:100,parse:function(e){const t=function(e){const t=e.trim().split(/\r?\n/u);if(2!==t.length)return null;const[n="",r=""]=t;return 44!==n.length||44!==r.length?null:E.test(n)&&E.test(r)?[n,r]:null}(e);if(!t)return null;const[n,r]=t,i=Z.get(n.slice(0,2));if(!i)return null;const s=n.slice(2,5);if(!z.test(s)||!function(e){return[[e.slice(0,9),e[9]],[e.slice(13,19),e[19]],[e.slice(21,27),e[27]]].every(([e,t])=>O(e)===t)}(r))return null;if(O(`${r.slice(0,10)}${r.slice(13,20)}${r.slice(21,28)}${r.slice(28,43)}`)!==r[43])return null;const a=function(e){const t=R(e.slice(13,19),!0),n=R(e.slice(21,27),!1);return t&&n?{dateOfBirth:t,expiresAt:n}:null}(r);return a?{issuingCountry:s,documentNumber:r.slice(0,9).replaceAll("<",""),documentType:i,fullName:D(n.slice(5)),nationality:r.slice(10,13),dateOfBirth:a.dateOfBirth,sex:B(r[20]??"<"),expiresAt:a.expiresAt}:null},generate:function({random:e,now:t}){const n=new Date(t.getTime());n.setUTCFullYear(n.getUTCFullYear()+5);const r=n.toISOString().slice(0,10);return{issuingCountry:"GBR",documentNumber:e.string("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",9),documentType:"ordinary",fullName:"SPECIMEN TEST",nationality:"GBR",dateOfBirth:"1990-01-01",sex:"",expiresAt:r}},canonical:function(e){const t=function(e){const t=U(e,"issuingCountry").toUpperCase();return z.test(t)?`${[...Z].find(([,t])=>t===U(e,"documentType"))?.[0]??"P<"}${t}${function(e){const t=e.toUpperCase().replaceAll(/[^A-Z ]/gu," ").trim().split(/\s+/u).filter(Boolean);if(0===t.length)return"";const[n,...r]=t;return`${n}${r.length>0?`<<${r.join("<")}`:"<<"}`}(U(e,"fullName")).padEnd(39,"<").slice(0,39)}`:null}(e),n=function(e){const t=U(e,"documentNumber").toUpperCase().replaceAll(/[^A-Z0-9]/gu,""),n=K(U(e,"dateOfBirth")),r=K(U(e,"expiresAt")),i=U(e,"nationality").toUpperCase();if(!(t&&n&&r&&z.test(i)))return null;const s=t.padEnd(9,"<").slice(0,9),a="<".repeat(14);var o;return`${s}${O(s)}${i}${n}${O(n)}${o=U(e,"sex"),"M"===o||"F"===o?o:"<"}${r}${O(r)}${a}${O(a)}${O(`${s}${O(s)}${n}${O(n)}${r}${O(r)}${a}${O(a)}`)}`}(e);return t&&n?`${t}\n${n}`:null}},W=new Map([["1.2.840.10045.3.1.7",256],["1.3.132.0.34",384],["1.3.132.0.35",521],["1.2.840.10045.3.1.2",192],["1.3.132.0.10",256],["1.3.132.0.33",224]]);class F extends Error{constructor(e){super(e),this.name="KeyError"}}function M(e){const t=f(e,"AlgorithmIdentifier")[0];if(void 0===t)throw new F("missing algorithm OID");return h(t)}function Y(e){return"1.2.840.113549.1.1.1"===e||"1.2.840.113549.1.1.10"===e?"rsa":"1.2.840.10045.2.1"===e?"ec":"1.3.101.112"===e?"ed25519":"1.3.101.113"===e?"ed448":"1.2.840.10040.4.1"===e?"dsa":"unknown"}function G(e){let t=0;for(;t<e.length&&0===e[t];)t+=1;const n=e[t];return void 0===n?0:8*(e.length-t)-Math.clz32(n)+24}function H(e){try{const t=f(e,"RSAPrivateKey")[1];return void 0===t?null:G(y(t))}catch{return null}}function V(e){const t=e.find(e=>160===e.tag);if(void 0===t)return null;const n=m(t.content);return 6!==n.node.tag?null:W.get(h(n.node))??null}function L(e){const t=e[1];return void 0===t?null:G(y(t))}function q(e){return e.startsWith("RSA")?"rsa":e.startsWith("EC")?"ec":e.startsWith("DSA")?"dsa":"unknown"}const J=/^(ssh-ed25519|ssh-rsa|ecdsa-sha2-nistp256|ecdsa-sha2-nistp384|ecdsa-sha2-nistp521|sk-ssh-ed25519@openssh\.com|sk-ecdsa-sha2-nistp256@openssh\.com) ([A-Za-z0-9+/=]+)(?: (.+))?$/u,X=/^-----BEGIN ((?:OPENSSH|RSA|EC|DSA|ENCRYPTED)? ?PRIVATE KEY)-----[\s\S]+-----END \1-----$/u;function Q(e){return"ssh-rsa"===e?"rsa":"sk-ssh-ed25519@openssh.com"===e?"ed25519-sk":"sk-ecdsa-sha2-nistp256@openssh.com"===e?"ecdsa-sk":e.startsWith("ecdsa-sha2-")?"ecdsa":"ed25519"}function ee(e,t){if(t+4>e.length)return null;const n=(e[t]??0)<<24|(e[t+1]??0)<<16|(e[t+2]??0)<<8|(e[t+3]??0),r=t+4,i=r+n;return n<0||i>e.length?null:{value:e.slice(r,i),next:i}}function te(e){return void 0!==e&&e.length>0}function ne(e){const t=new Uint8Array(4+e.length);return new DataView(t.buffer).setUint32(0,e.length),t.set(e,4),t}const re={id:"ssh-key",typeId:"ssh-key",label:"SSH key",specificity:100,parse(e){const t=e.trim(),n=J.exec(t);if(n){const e=n[1]??"",t=n[2]??"";return function(e,t){let n;try{n=a(t)}catch{return!1}const r=ee(n,0);return!(!r||(new TextDecoder).decode(r.value)!==e)&&("ssh-rsa"===e?function(e,t){const n=ee(e,t),r=ee(e,n?.next??e.length);return te(n?.value)&&te(r?.value)&&r?.next===e.length}(n,r.next):e.startsWith("ecdsa-sha2-")?function(e,t){const n=ee(e,t),r=ee(e,n?.next??e.length);return te(n?.value)&&te(r?.value)&&r?.next===e.length}(n,r.next):e.startsWith("sk-")?function(e,t){const n=ee(e,t),r=ee(e,n?.next??e.length);return te(n?.value)&&te(r?.value)&&r?.next===e.length}(n,r.next):function(e,t){const n=ee(e,t);return 32===n?.value.length&&n.next===e.length}(n,r.next))}(e,t)?{keyType:Q(e),keyPair:{publicKey:`${e} ${t}`,privateKey:""},comment:n[3]??""}:null}if(!X.exec(t))return null;const r=function(e){let t;try{t=d(e)}catch{return null}if(1!==t.length)return null;const n=t[0];return void 0===n?null:function(e){const t=e.label;if((e.headers["Proc-Type"]??"").toUpperCase().includes("ENCRYPTED"))return{label:t,algorithm:q(t),bits:null,encrypted:!0};if("OPENSSH PRIVATE KEY"===t)return{label:t,algorithm:"openssh",bits:null,encrypted:!1};try{const n=m(e.der);if(n.next!==e.der.length||48!==n.node.tag)return null;const r=g(n.node);if("ENCRYPTED PRIVATE KEY"===t)return void 0===r[0]?null:(M(r[0]),{label:t,algorithm:"unknown",bits:null,encrypted:!0});if("PRIVATE KEY"===t){const e=function(e){const t=e[1],n=e[2];if(void 0===t||void 0===n||4!==n.tag)throw new F("bad PKCS#8");const r=M(t);if("rsa"!==Y(r))return{algorithm:r,bits:null};const i=m(n.content);return i.next!==n.content.length?{algorithm:r,bits:null}:{algorithm:r,bits:H(i.node)}}(r);return{label:t,algorithm:Y(e.algorithm),bits:e.bits,encrypted:!1}}return"RSA PRIVATE KEY"===t?{label:t,algorithm:"rsa",bits:L(r),encrypted:!1}:"EC PRIVATE KEY"===t?{label:t,algorithm:"ec",bits:V(r),encrypted:!1}:"DSA PRIVATE KEY"===t?{label:t,algorithm:"dsa",bits:null,encrypted:!1}:null}catch{return null}}(n)}(t);return null===r?null:{keyType:"ec"===r.algorithm?"ecdsa":"openssh"===r.algorithm||"unknown"===r.algorithm?"":r.algorithm,keyPair:{publicKey:"",privateKey:t},comment:""}},generate({random:e}){const t=`ssh-ed25519 ${s(function(e){const t=(new TextEncoder).encode("ssh-ed25519"),n=e.bytes(32),r=ne(t),i=ne(n),s=new Uint8Array(r.length+i.length);return s.set(r),s.set(i,r.length),s}(e))} synthetic@example.test`;return{keyType:"ed25519",keyPair:{publicKey:t,privateKey:""},comment:"synthetic@example.test"}},canonical:e=>{const t=function(e){const t=e.keyPair;return void 0===t||n(t)||Array.isArray(t)?{}:t}(e);return function(e){const t=e.trim();return""===t?null:t}(t.privateKey||t.publicKey||"")}},ie="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",se="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";function ae(e,t){const r=e[t];return n(r)?r:""}function oe(e){try{return decodeURIComponent(e)}catch{return e}}function ce(e){const t=e.trim();return""===t?null:t}function le(e){return o((t=JSON.stringify(e),(new TextEncoder).encode(t)));var t}function ue(e){const t=e+"=".repeat((4-e.length%4)%4),n=(new TextDecoder).decode(c(t));return i(JSON.parse(n))}function pe(e){return[...e].map(e=>e.toString(16).padStart(2,"0")).join("")}const de=["4242424242424242","5555555555554444","378282246310005","6011111111111117"],me={id:"payment-card",typeId:"card",label:"Payment card",specificity:100,parse(e){const t=e.replaceAll(/[ -]/gu,"");if(!/^\d{12,19}$/u.test(t)||!u(t))return null;const n=l(t);return n?{number:t,brand:n.name}:null},generate({random:e,now:t}){const n=function(e){return de[e.int(de.length)]??de[0]}(e),r=l(n),i=function(e){const t=new Date(e.getTime());return t.setUTCFullYear(t.getUTCFullYear()+2),{month:String(t.getUTCMonth()+1).padStart(2,"0"),year:String(t.getUTCFullYear())}}(t);return{cardholder:"OpenSesame Test",brand:r?.name??"Visa",number:n,expMonth:i.month,expYear:i.year,code:e.digits(r?.securityCodeLength??3)}},canonical:e=>ce(ae(e,"number"))};function ge(e){let t=0;for(const n of e)t=n>="0"&&n<="9"?(10*t+Number(n))%97:(100*t+(n.charCodeAt(0)-55))%97;return t}function fe(e,t){const n=98-ge(`${t}${e}00`);return String(n).padStart(2,"0")}function he(e){const t=`01${e.digits(6)}`,n=[3,7,1,3,7,1,3,7].reduce((e,n,r)=>e+n*Number(t.charAt(r)),0);return`${t}${(10-n%10)%10}`}const ye={id:"iban",typeId:"bank-account",label:"IBAN",specificity:95,parse(e){const t=e.replaceAll(/\s/gu,"").toUpperCase();return function(e){return/^[A-Z]{2}\d{2}[A-Z0-9]{11,30}$/u.test(e)&&1===ge(`${e.slice(4)}${e.slice(0,4)}`)}(t)?{iban:t}:null},generate({random:e}){const t=`${e.string("ABCDEFGHIJKLMNOPQRSTUVWXYZ",4)}${e.digits(14)}`;return{bank:"OpenSesame Test Bank",iban:`GB${fe("GB",t)}${t}`}},canonical:e=>ce(ae(e,"iban"))},$e={id:"aba-routing-number",typeId:"bank-account",label:"ABA routing number",specificity:45,parse(e){const t=e.replaceAll(/[\s-]/gu,"");return function(e){return!!/^\d{9}$/u.test(e)&&(10-[3,7,1,3,7,1,3,7].reduce((t,n,r)=>t+n*Number(e.charAt(r)),0)%10)%10===Number(e.charAt(8))}(t)?{routingNumber:t}:null},generate:({random:e})=>({bank:"OpenSesame Test Bank",routingNumber:he(e)}),canonical:e=>ce(ae(e,"routingNumber"))},be={id:"totp",typeId:"authenticator",label:"TOTP authenticator",specificity:60,parse(e){const t=e.trim(),n=t.replaceAll(/\s/gu,"");if(!t.startsWith("otpauth://")&&!/^[A-Z2-7]{8,}=*$/u.test(n))return null;try{return p(t),{totp:t}}catch{return null}},generate:({random:e})=>({totp:`otpauth://totp/OpenSesame:test?secret=${function(e){let t=0,n=0,r="";for(const i of e)for(n=n<<8|i,t+=8;t>=5;)t-=5,r+=se.charAt(n>>>t&31);return t>0&&(r+=se.charAt(n<<5-t&31)),r}(e.bytes(20))}&issuer=OpenSesame&algorithm=SHA1&digits=6&period=30`}),canonical:e=>ce(ae(e,"totp"))},Ae={id:"jwt",typeId:"token",label:"JWT bearer token",specificity:90,parse(e){const t=e.trim();return function(e){const t=e.split(".");if(3!==t.length||t.some(e=>""===e))return!1;try{return r(ue(t[0]??""))&&r(ue(t[1]??""))}catch{return!1}}(t)?{token:t}:null},generate:({now:e})=>({token:`${le({alg:"none",typ:"JWT"})}.${le({sub:"opensesame-test",iat:Math.floor(e.getTime()/1e3)})}.${le({synthetic:!0})}`}),canonical:e=>ce(ae(e,"token"))},ke=new Map([["postgres","postgresql"],["postgresql","postgresql"],["mysql","mysql"],["mariadb","mariadb"],["mongodb","mongodb"],["mongodb+srv","mongodb"],["redis","redis"],["rediss","redis"],["sqlserver","sqlserver"]]),ve=new Map([["postgresql","5432"],["mysql","3306"],["mariadb","3306"],["mongodb","27017"],["redis","6379"],["sqlserver","1433"]]),Se={id:"database-url",typeId:"database",label:"Database connection URL",specificity:85,parse(e){const t=e.trim();let n;try{n=new URL(t)}catch{return null}const r=n.protocol.replace(/:$/u,""),i=ke.get(r);if(!i)return null;const s=n.pathname.replace(/^\//u,"");return{engine:i,endpoint:{host:n.hostname,port:n.port||(ve.get(i)??"")},databaseName:s,username:oe(n.username),password:oe(n.password),connectionString:t}},generate({random:e}){const t=e.string(ie,20);return{engine:"postgresql",endpoint:{host:"db.example.test",port:"5432"},databaseName:"app",username:"demo",password:t,connectionString:`postgresql://demo:${t}@db.example.test:5432/app`}},canonical:e=>ce(ae(e,"connectionString"))},Ie={id:"ssh-url",typeId:"server",label:"SSH server URL",specificity:70,parse(e){let t;try{t=new URL(e.trim())}catch{return null}return"ssh:"!==t.protocol||""===t.hostname?null:{endpoint:{host:t.hostname,port:t.port||"22"},username:oe(t.username),password:oe(t.password),protocol:"ssh"}},generate:({random:e})=>({endpoint:{host:"server.example.test",port:"22"},username:`demo${e.string("0123456789",3)}`,protocol:"ssh",password:e.string(ie,24)}),canonical:e=>{const t=function(e){const t=e.endpoint;return void 0===t||n(t)||Array.isArray(t)?{}:t}(e),r=t.host?.trim();if(!r)return null;const i=ae(e,"username").trim(),s=ae(e,"password").trim();return`ssh://${i?`${encodeURIComponent(i)}${s?`:${encodeURIComponent(s)}`:""}@`:""}${r}:${t.port?.trim()||"22"}`}},we=[8,7,6,5,4,3,2,10,0,9,8,7,6,5,4,3,2],Pe=new Map([["A",1],["B",2],["C",3],["D",4],["E",5],["F",6],["G",7],["H",8],["J",1],["K",2],["L",3],["M",4],["N",5],["P",7],["R",9],["S",2],["T",3],["U",4],["V",5],["W",6],["X",7],["Y",8],["Z",9]]),xe={id:"vin",typeId:"vehicle",label:"Vehicle identification number",specificity:70,parse(e){const t=e.trim().toUpperCase();return function(e){if(!/^[A-HJ-NPR-Z0-9]{17}$/u.test(e))return!1;const t=[...e].reduce((e,t,n)=>e+(we[n]??0)*(/\d/u.test(t)?Number(t):Pe.get(t)??0),0),n=t%11==10?"X":String(t%11);return e.charAt(8)===n}(t)?{vin:t}:null},generate({random:e,now:t}){const n=e.string("0123456789ABCDEFGHJKLMNPRSTUVWXYZ",17),r=`${n.slice(0,8)}0${n.slice(9)}`,i=[...r].reduce((e,t,n)=>e+(we[n]??0)*(/\d/u.test(t)?Number(t):Pe.get(t)??0),0),s=i%11==10?"X":String(i%11);return{make:"OpenSesame Test",model:"Synthetic",year:String(t.getUTCFullYear()),vin:`${r.slice(0,8)}${s}${r.slice(9)}`}},canonical:e=>ce(ae(e,"vin"))};function _e(e){const n=pe(t((new TextEncoder).encode(e)));let r="0x";for(let t=0;t<e.length;t+=1){const i=e.charAt(t);r+=/[a-f]/u.test(i)&&Number.parseInt(n.charAt(t),16)>=8?i.toUpperCase():i}return r}const Te={id:"evm-address",typeId:"crypto-wallet",label:"Ethereum address",specificity:70,parse(e){const t=e.trim();return function(e){if(!/^0x[0-9a-fA-F]{40}$/u.test(e))return!1;const t=e.slice(2);return t===t.toLowerCase()||t===t.toUpperCase()||_e(t.toLowerCase())===e}(t)?{addresses:[t],network:"ethereum"}:null},generate:({random:e})=>({walletName:"OpenSesame Test Wallet",network:"ethereum",addresses:[_e(`0x${pe(e.bytes(20))}`.slice(2))]}),canonical:e=>function(e){const t=e.addresses;return Array.isArray(t)?t.filter(n):[]}(e)[0]??null},Ce={id:"passkey-credential-id",typeId:"passkey",label:"WebAuthn credential id",specificity:15,parse(e){const t=e.trim();return/^[A-Za-z0-9_-]{22,1024}$/u.test(t)?{credentialIdB64:t}:null},generate:({random:e})=>({rpId:"example.test",username:"demo@example.test",credentialIdB64:o(e.bytes(32)),publicKeyB64:o(e.bytes(64)),authenticator:"platform"}),canonical:e=>ce(ae(e,"credentialIdB64"))};function Ne(e){const t=e.bytes(16);t[6]=15&(t[6]??0)|64,t[8]=63&(t[8]??0)|128;const n=e=>(t[e]??0).toString(16).padStart(2,"0");return`${n(0)}${n(1)}${n(2)}${n(3)}-${n(4)}${n(5)}-${n(6)}${n(7)}-${n(8)}${n(9)}-${n(10)}${n(11)}${n(12)}${n(13)}${n(14)}${n(15)}`}const ze={id:"uuid-license-key",typeId:"software-license",label:"UUID licence key",specificity:30,parse(e){const t=e.trim();return/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu.test(t)?{licenseKey:t,product:"OpenSesame Test"}:null},generate:({random:e})=>({product:"OpenSesame Test",licenseKey:Ne(e)}),canonical:e=>ce(ae(e,"licenseKey"))},Ee=/^[^@\s]+@[^@\s]+\.[^@\s]+$/u,Ze={id:"email-address",typeId:"email-account",label:"Email address",specificity:10,parse(e){const t=e.trim();return Ee.test(t)?{address:t,username:t}:null},generate({random:e}){const t=`demo+${e.hex(8)}@example.test`;return{address:t,username:t,incoming:{host:"imap.example.test",port:"993"},incomingProtocol:"imap",outgoing:{host:"smtp.example.test",port:"465"},security:"tls",password:e.string(ie,24)}},canonical:e=>ce(ae(e,"address"))};function Ue(e){return e.replaceAll(/\\([\\;,:"])/gu,"$1")}function Oe(e){return e.replaceAll(/([\\;,:"])/gu,"\\$1")}const Re=new Map([["WPA3","wpa3"],["WPA2","wpa2"],["WPA","wpa"],["WEP","wep"],["nopass","open"]]),Ke={id:"wifi-qr",typeId:"wifi",label:"Wi-Fi QR payload",specificity:95,parse(e){const t=e.trim();if(!t.startsWith("WIFI:"))return null;const n=new Map,r=t.slice(5).replace(/;$/u,"");for(const a of function(e){const t=[];let n="",r=!1;for(const i of e)r?(n+=`\\${i}`,r=!1):"\\"===i?r=!0:";"===i?(t.push(n),n=""):n+=i;return r&&(n+="\\"),t.push(n),t}(r)){if(""===a)continue;const e=a.indexOf(":");e<=0||n.set(a.slice(0,e),Ue(a.slice(e+1)))}const i=n.get("S"),s=Re.get(n.get("T")??"");return i&&s?{ssid:i,passphrase:n.get("P")??"",security:s,hidden:"true"===n.get("H")?"true":""}:null},generate:({random:e})=>({ssid:"OpenSesame Test",passphrase:e.string(ie,24),security:"wpa2",hidden:"",adminPassword:e.string(ie,20)}),canonical:e=>{const t=ae(e,"ssid");if(!t)return null;const n=ae(e,"security");return`WIFI:T:${"open"===n?"nopass":"wpa3"===n?"WPA3":"wpa2"===n?"WPA2":"wep"===n?"WEP":"WPA"};S:${Oe(t)};P:${Oe(ae(e,"passphrase"))};${"true"===ae(e,"hidden")?"H:true;":""};`}},De={id:"gift-card-number",typeId:"gift-card",label:"Gift-card number",specificity:20,parse(e){const t=e.replaceAll(/[\s-]/gu,"");return/^\d{12,19}$/u.test(t)?{cardNumber:t}:null},generate:({random:e})=>({merchant:"OpenSesame Test Store",cardNumber:e.digits(16),pin:e.digits(4)}),canonical:e=>ce(ae(e,"cardNumber"))},Be={id:"backup-codes",typeId:"backup-codes",label:"Backup code list",specificity:25,parse(e){const t=e.split(/\r?\n/u).map(e=>e.trim()).filter(Boolean);return t.length>=4&&t.length<=32&&t.every(e=>/^[A-Za-z0-9_-]{6,32}$/u.test(e))?{codes:t.join("\n")}:null},generate:({random:e})=>({service:"OpenSesame Test",account:"demo@example.test",codes:Array.from({length:10},()=>`${e.string("ABCDEFGHJKLMNPQRSTUVWXYZ23456789",4)}-${e.string("ABCDEFGHJKLMNPQRSTUVWXYZ23456789",4)}`).join("\n")}),canonical:e=>ce(ae(e,"codes"))},je={id:"pem-certificate",typeId:"certificate",label:"PEM certificate",specificity:100,parse(e){const t=$(e.trim());if(null===t||0===t.pem.length)return null;const n=t.certificates[0];return void 0===n?null:{certificatePem:t.pem[0]??"",caPem:t.pem.slice(1).join("\n"),commonName:n.subjectCommonName,dnsNames:n.dnsNames.join(", "),ipAddrs:n.ipAddrs.join(", "),serial:n.serial,notAfter:n.notAfter}},canonical:e=>ce(ae(e,"certificatePem"))},We={id:"opaque-secret",typeId:"secret",label:"Opaque secret",specificity:0,parse:e=>""===e?null:{value:e},generate:({random:e})=>({value:e.string(`${ie}_-`,32)}),canonical:e=>ce(ae(e,"value"))},Fe={id:"password",typeId:"password",label:"Password",specificity:0,parse(e){const t=e;return""===t.trim()?null:{password:t}},generate:({random:e})=>({password:e.string(`${ie}!@#$%^&*`,24)}),canonical:e=>ce(ae(e,"password"))},Me=[j,C,je,re,Ke,me,ye,be,Ae,...k("api-key"),Se,Ie,xe,Te,$e,ze,Be,De,Ze],Ye=[...Me,...k("api-credential"),Ce,We,Fe];function Ge(e,t){try{const n=e.parse(t);return null===n?null:{formatId:e.id,typeId:e.typeId,label:e.label,specificity:e.specificity,values:n,canonical:t}}catch{return null}}function He({typeId:t,value:n}){if(""===n.trim())return null;const r=t?function(e,t){if(""===t.trim())return null;const n=function(e){return Ye.filter(t=>t.typeId===e)}(e).filter(e=>!0);for(const r of n){const e=Ge(r,t);if(e)return e}return null}(t,n):null,i=null!==r&&"password"!==r.formatId&&"opaque-secret"!==r.formatId,s=i||"password"===t?r:function(e){return function(e){const t=function(e){return e.trim()}(e);if(""===t)return[];const n=new Set,r=[];for(const i of Me){if(n.has(`${i.typeId}:${i.id}`))continue;const e=Ge(i,t);e&&(n.add(`${i.typeId}:${i.id}`),r.push(e))}return r.sort((e,t)=>t.specificity-e.specificity)}(e)[0]??null}(n);return s&&(i||s.specificity>=50)?e.jsxs("span",{className:"hint",children:["Recognised format: ",s.label]}):null}["account","address","api-credential","api-key","authenticator","backup-codes","bank-account","card","certificate","combination-lock","contact","crypto-wallet","database","drivers-license","drop","email-account","environment","file","gift-card","guardian-share","health-insurance","identity-document","membership","note","oauth-client","passkey","passport","password","secret","server","software-license","ssh-key","token","trusted-circle","vehicle","wifi"].sort((e,t)=>e.localeCompare(t));export{He as FormatHintMatch};
@@ -0,0 +1 @@
1
+ import{r as e,j as s}from"./react-dom-BwC4eQlG.js";import{v as a,ab as t,$ as i,a0 as n,ac as l,ad as r}from"./drop-open-BjgdLxWM.js";import{L as o}from"./react-router-XsJY84ug.js";import{E as c}from"./EmptyTip-DnxQjLsP.js";import{K as d,aA as h,v as m,y as u,bF as p}from"./main-BrkS-iow.js";import{S as j,s as x}from"./InvokeScreen-C-kFFYVF.js";import{u as f}from"./wake-lock-C_y0fQco.js";import{u as g}from"./idp-presets-B1M-P0Ek.js";import{p as w}from"./password-workflows-Cmir8qky.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"./seams-DJ_lslby.js";import"./identity-view-paths-Bi1yigZk.js";const _={review:w},v={label:"Duplicate title",why:"Another item has this title."},b={label:"Unfiled",why:"A key or token outside any folder."},N={label:"Old login",why:"Last changed over a year ago."},k={label:"Address to review",why:"A saved address may carry a credential."};function y(){const t=f(),[i,n]=e.useState(null),l=null!==i&&i.tomb===t.tomb&&i.items===t.items?i.report:null,[r,c]=e.useState("");e.useEffect(()=>{let e=!0;if(n(null),c(""),"unlocked"===t.status&&!t.awaitingSecondStep)return _.review().then(s=>{e&&a.getSnapshot().tomb===t.tomb&&n({report:s,tomb:t.tomb,items:t.items})},()=>{e&&c("Organization review unavailable.")}),()=>{e=!1}},[t.status,t.awaitingSecondStep,t.tomb,t.items]);const h=e.useMemo(()=>l?function(e){const s=new Map,a=(e,a)=>{const t=s.get(e.id)??{id:e.id,title:e.title,reasons:[]};t.reasons.includes(a)||t.reasons.push(a),s.set(e.id,t)};for(const t of e.duplicateTitles)for(const e of t.items)a(e,v);for(const t of e.untaggedMachineCredentials)a(t,b);for(const t of e.oldLogins)a(t,N);for(const t of e.urlsToReview)a(t,k);return[...s.values()]}(l):[],[l]);return"unlocked"!==t.status||t.awaitingSecondStep?null:s.jsxs(s.Fragment,{children:[s.jsx(d,{id:"vault:organization-audit",title:"Organization review",message:r}),h.length>0?s.jsxs("section",{className:"detail__group","aria-label":"Organization",children:[s.jsxs("h2",{className:"detail__grouphead",children:[h.length," ",1===h.length?"item":"items"," to file or rename"]}),h.map(e=>s.jsxs("article",{className:"health__finding",children:[s.jsx("div",{className:"health__findinghead",children:s.jsx(o,{to:`/vault/${e.id}`,children:s.jsx("strong",{children:e.title||"Untitled"})})}),s.jsx("ul",{className:"health__issues",children:e.reasons.map(e=>s.jsxs("li",{children:[s.jsx(j,{tone:"warn",label:e.label}),s.jsx("span",{className:"health__why",children:e.why})]},e.label))})]},e.id))]}):null]})}const S={weak:"chip--err",reused:"chip--err",old:"chip--warn","no-2fa":"chip--warn"};function z({watch:e}){return s.jsxs("section",{className:"detail__group","aria-label":"Breach and two-step checks",children:[s.jsx("h2",{className:"detail__grouphead",children:"Breach and two-step checks"}),s.jsx("p",{className:"health__line",children:e.label}),"checked"===e.phase?e.lines.map(e=>s.jsxs("article",{className:"health__finding",children:[s.jsxs("div",{className:"health__findinghead",children:[s.jsx(o,{to:`/vault/${e.id}`,children:s.jsx("strong",{children:e.name||e.site||"Untitled"})}),e.site?s.jsx("span",{className:"hint",children:e.site}):null]}),e.sentences.map(e=>s.jsx("p",{className:"health__why",children:e},e))]},e.id)):null,s.jsx("p",{children:s.jsx(o,{to:p("security-checks"),children:"Open breach and two-step checks"})})]})}function O(){const{items:a}=f(),d=e.useMemo(()=>t(a),[a]),p=e.useSyncExternalStore(i,n,n),w=g("vault.health.summary"),_=g("vault.health.findings");return s.jsxs("div",{className:"detail",children:[s.jsxs("div",{className:"detail__head",children:[s.jsx(o,{className:"icon-btn detail__backbtn","aria-label":"Back to all items",title:"Back to all items",to:"/vault",children:s.jsx(h,{size:17})}),s.jsx("div",{className:"detail__heading",children:s.jsx("h1",{children:"Password health"})})]}),s.jsxs("div",0===d.scored?{className:"empty",ref:_,children:[s.jsx("h2",{ref:w,children:"No passwords to review"}),s.jsx(c,{tip:"vaultEmpty"}),s.jsx(o,{className:"icon-btn",to:"/vault/new/account","aria-label":"New account",title:"New account",children:s.jsx(m,{size:17})})]}:{className:"health",children:[s.jsxs("p",{className:"health__line",ref:w,children:[d.scored," reviewed · ",d.clean," clean",d.counts.weak>0?s.jsxs("span",{className:"health__bad",children:[" · ",d.counts.weak," weak"]}):null,d.counts.reused>0?s.jsxs("span",{className:"health__bad",children:[" ","· ",d.counts.reused," reused"]}):null,d.counts.old>0?s.jsxs("span",{children:[" · ",d.counts.old," old"]}):null,d.unchecked>0?s.jsxs("span",{children:[" · ",d.unchecked," unchecked"]}):null]}),0===d.findings.length?s.jsx("div",{className:"note note--ok",ref:_,children:s.jsx("span",{children:"Every password here is strong, unique, and under a year old. Nothing to do."})}):s.jsxs("section",{className:"detail__group",ref:_,children:[s.jsxs("h2",{className:"detail__grouphead",children:[d.findings.length," ",1===d.findings.length?"item needs":"items need"," ","attention"]}),d.findings.map(e=>s.jsxs("article",{className:"health__finding",children:[s.jsxs("div",{className:"health__findinghead",children:[s.jsx(o,{to:`/vault/${e.item.id}`,children:s.jsx("strong",{children:e.item.name||"Untitled"})}),s.jsxs("span",{className:"hint",children:["≈",e.bits," bits"]})]}),s.jsx("ul",{className:"health__issues",children:e.issues.map(a=>s.jsxs("li",{children:[s.jsx(j,{tone:x(S[a]),label:l[a]}),s.jsx("span",{className:"health__why",children:"reused"===a&&e.sharedWith.length>0?`Also used for ${e.sharedWith.join(", ")}. One breach there unlocks this too.`:r[a]})]},a))}),s.jsx("div",{className:"actions",children:s.jsx(o,{className:"icon-btn","aria-label":`Fix ${e.item.name||"this item"}`,title:"Fix — edit this item",to:`/vault/${e.item.id}/edit`,children:s.jsx(u,{size:16})})})]},e.item.id))]})]}),"off"===p.phase?null:s.jsx(z,{watch:p}),s.jsx(y,{})]})}export{O as HealthPanel};
@@ -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/gate-seat-D6oRkKUH.css","assets/scroll-renderer-CPup0pR-.css","assets/byo-CDLRauwG.css","assets/iam-0IMZ11b6.css","assets/use-password-reset-generate-D7yK7QdU.css"])))=>i.map(i=>d[i]);
2
+ import{c as e,i as t,a6 as r,n,ao as i,F as s,k as a,a4 as o,y as c,C as l}from"./vault-ui-seam-BQGS7RR6.js";import{e1 as d,e2 as u,v as h,q as p}from"./drop-open-BjgdLxWM.js";import{r as f,V as g,w,d as m}from"./model-provider-B6oAnQX9.js";import{j as y,r as b}from"./react-dom-BwC4eQlG.js";import{_ as v}from"./hosted-model-authority-CcNPE44H.js";import{I as k,i as I,a as S,n as C,b as A,g as E,r as O,c as j,d as _,e as P,f as T,w as x,h as N,j as U,k as L,u as D,s as z,l as R,m as J,o as q,p as K,q as B,t as F}from"./federation-configured-restoration-DWAXgzcz.js";import{a2 as M,r as V,s as H,L as $,d as W,a3 as G,B as Y,l as Q,a4 as X,a5 as Z}from"./identity-BVf8yWa4.js";import{cp as ee,cQ as te,dO as re,W as ne,dP as ie,dQ as se,ct as ae,cx as oe,V as ce,cg as le,dR as de,cs as ue,M as he,O as pe,X as fe,S as ge,f as we}from"./main-BrkS-iow.js";import{s as me}from"./bucket-saved-vQCiVvN_.js";import{u as ye,v as be,x as ve}from"./tailscale-artifacts-FyY85j_Y.js";import{J as ke,P as Ie}from"./certs-CDCfMuEi.js";import{p as Se,n as Ce,a as Ae,b as Ee,c as Oe}from"./native-auth-return-BTXjvSvx.js";import{s as je}from"./entra-instances-NyEKYI5c.js";import{c as _e,a as Pe}from"./vaults-B043odav.js";import{S as Te}from"./InvokeScreen-C-kFFYVF.js";const xe="config/aws-kms",Ne={keyArn:"",region:"",accessKeyId:"",secretAccessKey:"",sessionToken:null,label:null,configVersion:"0"};function Ue(e){const t=e.trim();return!(t.length<16||t.length>128)&&/^[A-Z0-9]+$/i.test(t)}function Le(r,n){if(!e(r))return null;const i=r[n];if(!t(i))return null;const s=i.trim();return s.length>0?s:null}function De(e,t){return Le(e,t)??""}function ze(e){return{keyArn:e.keyArn,region:e.region,accessKeyId:e.accessKeyId,hasSecret:e.secretAccessKey.length>0,hasSessionToken:Boolean(e.sessionToken),label:e.label,configVersion:e.configVersion}}async function Re(r){try{const n=await f(r,xe);return function(r){if(!e(r))return Ne;const n=De(r,"keyArn"),i=De(r,"accessKeyId"),s=t(r.secretAccessKey)?r.secretAccessKey:"";if(!n||!i||!s)return Ne;if(!Ue(i))return Ne;let a;try{a=d(n)}catch{return Ne}return{keyArn:a.keyArn,region:Le(r,"region")??a.region,accessKeyId:i,secretAccessKey:s,sessionToken:Le(r,"sessionToken"),label:Le(r,"label"),configVersion:Le(r,"configVersion")??"1"}}(JSON.parse((new TextDecoder).decode(n)))}catch(n){if(n instanceof g&&"not-found"===n.code)return Ne;throw n}}async function Je(e,t){const r=await Re(e),n=t.keyArn.trim(),i=d(n),s=t.accessKeyId.trim();if(!Ue(s))throw new Error("Paste an AWS access key ID (AKIA… or ASIA…).");let a=t.secretAccessKey;if(!a.trim()){if(!t.keepExistingSecret||!r.secretAccessKey)throw new Error("Paste the AWS secret access key once.");a=r.secretAccessKey}const o=t.region?.trim()||i.region;if(o!==i.region)throw new Error("Region must match the key ARN.");const c={keyArn:i.keyArn,region:o,accessKeyId:s,secretAccessKey:a,sessionToken:t.sessionToken?.trim()?t.sessionToken.trim():null,label:t.label?.trim()?t.label.trim():null,configVersion:String(Number(r.configVersion||"0")+1)};return await w(e,xe,(new TextEncoder).encode(JSON.stringify(c))),c}async function qe(e){try{await m(e,xe)}catch(t){if(t instanceof g&&"not-found"===t.code)return;throw t}}const Ke="config/gcp-kms",Be={keyName:"",projectId:"",serviceAccountJson:"",label:null,configVersion:"0"},Fe=/^projects\/([a-z0-9-]+)\/locations\//i;function Me(e){const t=Fe.exec(e.trim());return t?.[1]??null}function Ve(r){let n;try{n=JSON.parse(r)}catch{throw new Error("Paste a complete service-account JSON credential.")}if(!e(n)||!t(n.client_email))throw new Error("Service-account JSON must include client_email.");return r.trim()}function He(r,n){if(!e(r))return null;const i=r[n];if(!t(i))return null;const s=i.trim();return s.length>0?s:null}function $e(e){return{keyName:e.keyName,projectId:e.projectId,hasSecret:e.serviceAccountJson.length>0,label:e.label,configVersion:e.configVersion}}async function We(r){try{const n=await f(r,Ke);return function(r){if(!e(r))return Be;const n=function(e){return He(e,"keyName")??""}(r),i=t(r.serviceAccountJson)?r.serviceAccountJson:"";if(!n||!i)return Be;try{u(n),Ve(i)}catch{return Be}const s=Me(n)??"",a=He(r,"projectId")??s;return!a||s&&a!==s?Be:{keyName:n,projectId:a,serviceAccountJson:i,label:He(r,"label"),configVersion:He(r,"configVersion")??"1"}}(JSON.parse((new TextDecoder).decode(n)))}catch(n){if(n instanceof g&&"not-found"===n.code)return Be;throw n}}async function Ge(e,t){const r=await We(e),n=t.keyName.trim();u(n);const i=Me(n);if(!i)throw new Error("Paste a full projects/…/cryptoKeys/… key name.");const s=t.projectId?.trim()||i;if(s!==i)throw new Error("Project ID must match the crypto key name.");let a=t.serviceAccountJson;if(!a.trim()){if(!t.keepExistingSecret||!r.serviceAccountJson)throw new Error("Paste the service-account JSON once.");a=r.serviceAccountJson}a=Ve(a);const o={keyName:n,projectId:s,serviceAccountJson:a,label:t.label?.trim()?t.label.trim():null,configVersion:String(Number(r.configVersion||"0")+1)};return await w(e,Ke,(new TextEncoder).encode(JSON.stringify(o))),o}async function Ye(e){try{await m(e,Ke)}catch(t){if(t instanceof g&&"not-found"===t.code)return;throw t}}const Qe=new Map(Object.entries({recipients:{help:"One or more age recipients, such as age1… or an SSH public key. Secrets are encrypted so only these recipients can decrypt them.",placeholder:"age1… or ssh-ed25519 …"},identity:{help:"The private age identity that matches a recipient. Paste it once; OpenSesame seals it immediately.",placeholder:"AGE-SECRET-KEY-…"},credential_id:{help:"The credential identifier for this WebAuthn / passkey protector. Prefer enrolling under Vault key protection rather than as a connector.",placeholder:"Credential ID"},recipient:{help:"The public recipient produced for this YubiKey. It is safe to identify the key; the private key stays on the device.",placeholder:"age1yubikey…"},slot:{help:"The YubiKey PIV slot holding the key. Leave blank to use the provider default.",placeholder:"9a"},pin:{help:"The device PIN, only when your key requires one for this operation.",placeholder:"Paste PIN once"},region:{help:"The provider region containing the resource, for example us-east-1.",placeholder:"us-east-1"},access_key_id:{help:"An access-key ID for a dedicated, least-privilege service identity.",placeholder:"AKIA…"},secret_access_key:{help:"The matching secret access key. OpenSesame seals it and never returns it to the browser.",placeholder:"Paste secret access key once"},session_token:{help:"A temporary session token when the credential was issued by STS or a password-manager login. Leave blank for long-lived credentials.",placeholder:"Optional temporary token"},endpoint:{help:"The full service or vault URL shown in the provider console.",placeholder:"https://example.vault.azure.net"},api_key_header:{help:"The request header configured by the Better Auth API Key plugin. Its default is x-api-key.",placeholder:"x-api-key"},config_id:{help:"The Better Auth API Key plugin configuration ID. Keep default unless the server defines multiple key configurations.",placeholder:"default"},domain:{help:"Your Auth0 tenant or custom domain without a path. OpenSesame derives the Management API audience from it when Audience is blank.",placeholder:"tenant.us.auth0.com"},audience:{help:"The Auth0 API identifier. Leave blank to use https://<tenant-domain>/api/v2/ for the Management API.",placeholder:"Derived from tenant domain"},tenant_id:{help:"The directory or tenant ID that owns the application registration.",placeholder:"00000000-0000-0000-0000-000000000000"},client_id:{help:"The application or client ID from the provider app registration.",placeholder:"Application client ID"},client_secret:{help:"The client secret value, not its name or secret ID. It is sealed immediately.",placeholder:"Paste client secret value once"},project_id:{help:"The cloud project that owns the secret or service account.",placeholder:"my-project-id"},service_account_json:{help:"The complete service-account JSON credential with only the permissions this connection needs.",placeholder:"Paste service-account JSON once"},service_account_token:{help:"A dedicated 1Password service-account token with access only to the vaults this connection needs.",placeholder:"Paste service-account token once"},access_token:{help:"A provider access token scoped to the organization or project this connection should use.",placeholder:"Paste access token once"},organization_id:{help:"The provider organization identifier. Leave blank when the access token already selects it.",placeholder:"Optional organization ID"},token:{help:"A restricted provider token created for this connection. OpenSesame seals it immediately.",placeholder:"Paste token once"},host:{help:"The self-hosted service address. Leave blank to use the provider's hosted default.",placeholder:"https://secrets.example.com"},server_url:{help:"Your Bitwarden or Vaultwarden server URL. Leave blank for Bitwarden Cloud.",placeholder:"https://vault.example.com"},vault:{help:"The vault name or identifier to use by default. Leave blank to choose it per secret reference.",placeholder:"Engineering"},service:{help:"The service name used to namespace entries in the operating-system keychain.",placeholder:"opensesame"},database_path:{help:"An absolute path on this machine to the KeePass .kdbx database.",placeholder:"/home/user/secrets.kdbx"},password:{help:"The database password. OpenSesame seals it and never returns it to the browser.",placeholder:"Paste database password once"},store_dir:{help:"An absolute path on this machine to the password-store directory.",placeholder:"/home/user/.password-store"},remote_url:{help:"HTTPS or SSH clone URL for any git forge or bare host.",placeholder:"https://git.example.com/org/store.git"},auth_mode:{help:"How OpenSesame authenticates: https_token, https_basic, ssh_key, or ssh_agent.",placeholder:"https_token"},ssh_private_key:{help:"OpenSSH private key for this remote. Sealed immediately.",placeholder:"-----BEGIN OPENSSH PRIVATE KEY-----"},ssh_passphrase:{help:"Optional passphrase for the sealed SSH private key.",placeholder:"Passphrase if the key has one"},namespace:{help:"An optional namespace that keeps this connection's entries separate from others.",placeholder:"team-name"},location:{help:"The path or remote location where encrypted values are stored.",placeholder:"/absolute/path or provider location"},key:{help:"The encryption key used for this location. Paste it once; it is sealed immediately.",placeholder:"Paste encryption key once"},address:{help:"The full HTTPS address of the Vault or OpenBao server.",placeholder:"https://vault.example.com"},base_url:{help:"The full HTTPS base URL of your provider instance, including any API mount path.",placeholder:"https://service.example.com/api"},api_key:{help:"A restricted API key created for this connection. It is sealed immediately.",placeholder:"Paste API key once"}}));function Xe(e){if(e.required&&"session_token"===e.name)return{help:"The session token required by this provider. Paste it once; OpenSesame seals it immediately.",placeholder:"Paste session token once"};if(e.required&&"namespace"===e.name)return{help:"The namespace used to keep this connection's entries separate from others.",placeholder:"team-name"};if(!e.required){const t=new Map(Object.entries({region:{help:"Leave blank to use the region from this machine’s AWS profile, environment, container, or instance identity.",placeholder:"Auto-detect on this device"},access_key_id:{help:"Leave blank to use this machine’s AWS default credential chain. Supply this only with a matching secret access key.",placeholder:"Use this device’s identity"},secret_access_key:{help:"Leave blank to use this machine’s AWS default credential chain. A manual override is sealed immediately.",placeholder:"Use this device’s identity"},tenant_id:{help:"Leave blank to let Azure DefaultAzureCredential select this machine’s tenant. Override only for a service principal.",placeholder:"Auto-detect on this device"},client_id:{help:"Leave blank to use this machine’s managed identity or signed-in Azure CLI session.",placeholder:"Use this device’s identity"},client_secret:{help:"Leave blank to use delegated Azure credentials. A service-principal secret override is sealed immediately.",placeholder:"Use this device’s identity"},project_id:{help:"Leave blank to use the project discovered by Google Application Default Credentials.",placeholder:"Auto-detect on this device"},service_account_json:{help:"Leave blank to use Google Application Default Credentials from this machine. A JSON override is sealed immediately.",placeholder:"Use this device’s identity"},service_account_token:{help:"Leave blank to reuse the signed-in 1Password CLI session on this device. A service-account override is sealed immediately.",placeholder:"Use this device’s session"},session_token:{help:"Leave blank to reuse the unlocked Bitwarden CLI session on this device. A session-token override is sealed immediately.",placeholder:"Use this device’s session"}})).get(e.name);if(t)return t}return Qe.get(e.name)??{help:`Enter the ${e.label.toLowerCase()} described in the provider setup guide.`,placeholder:e.secret?`Paste ${e.label.toLowerCase()} once`:e.label}}function Ze(){return{keyArn:"",region:"",accessKeyId:"",secretAccessKey:"",sessionToken:"",label:""}}function et({form:e,locked:t,onChange:r}){const n=b.useId(),i=b.useId(),s=Xe({name:"key_arn",label:"Key ARN",secret:!1,required:!0}),a=Xe({name:"region",label:"Region",secret:!1,required:!0});return y.jsxs(y.Fragment,{children:[y.jsxs("div",{className:"field",children:[y.jsx("label",{className:"label conn-field-label",htmlFor:n,children:"Key ARN (required)"}),y.jsx("input",{id:n,name:"key_arn",type:"text",autoComplete:"off",required:!0,spellCheck:!1,placeholder:s.placeholder,title:s.help,value:e.keyArn,readOnly:t,onChange:e=>r("keyArn",e.target.value)})]}),y.jsxs("div",{className:"field",children:[y.jsx("label",{className:"label conn-field-label",htmlFor:i,children:"Region (required)"}),y.jsx("input",{id:i,name:"region",type:"text",autoComplete:"off",required:!0,spellCheck:!1,placeholder:a.placeholder,title:a.help,value:e.region,readOnly:t,onChange:e=>r("region",e.target.value)})]})]})}function tt({form:e,configured:t,onChange:r}){const n=b.useId(),i=b.useId(),s=Xe({name:"access_key_id",label:"Access key ID",secret:!1,required:!0}),a=Xe({name:"secret_access_key",label:"Secret access key",secret:!0,required:!0});return y.jsxs(y.Fragment,{children:[y.jsxs("div",{className:"field",children:[y.jsx("label",{className:"label conn-field-label",htmlFor:n,children:"Access key ID (required)"}),y.jsx("input",{id:n,name:"access_key_id",type:"text",autoComplete:"off",required:!0,spellCheck:!1,placeholder:s.placeholder,title:s.help,value:e.accessKeyId,onChange:e=>r("accessKeyId",e.target.value)})]}),y.jsxs("div",{className:"field",children:[y.jsxs("label",{className:"label conn-field-label",htmlFor:i,children:["Secret access key",t?" (leave blank to keep)":" (required)"]}),y.jsx("input",{id:i,name:"secret_access_key",type:"password",autoComplete:"new-password",required:!t,spellCheck:!1,placeholder:t?"Leave blank to keep sealed secret":a.placeholder,title:a.help,value:e.secretAccessKey,onChange:e=>r("secretAccessKey",e.target.value)})]})]})}function rt({form:e,onChange:t}){const r=b.useId(),n=b.useId(),i=Xe({name:"session_token",label:"Session token",secret:!0,required:!1});return y.jsxs("details",{className:"conn-client-alt",children:[y.jsx("summary",{children:"Optional settings"}),y.jsxs("div",{className:"field",children:[y.jsx("label",{className:"label",htmlFor:n,children:"Name"}),y.jsx("input",{id:n,value:e.label,onChange:e=>t("label",e.target.value)})]}),y.jsxs("div",{className:"field",children:[y.jsx("label",{className:"label",htmlFor:r,children:"Session token"}),y.jsx("input",{id:r,name:"session_token",type:"password",autoComplete:"off",spellCheck:!1,placeholder:i.placeholder,title:i.help,value:e.sessionToken,onChange:e=>t("sessionToken",e.target.value)})]})]})}function nt({form:e,configured:t,identityLocked:r=!1,onChange:n}){return y.jsxs(y.Fragment,{children:[y.jsx(et,{form:e,locked:r,onChange:n}),y.jsx(tt,{form:e,configured:t,onChange:n}),y.jsx(rt,{form:e,onChange:n})]})}function it(){return{keyName:"",projectId:"",serviceAccountJson:"",label:""}}function st({form:e,locked:t,onChange:r}){const n=b.useId();return y.jsxs("div",{className:"field",children:[y.jsx("label",{className:"label conn-field-label",htmlFor:n,children:"Crypto key (required)"}),y.jsx("input",{id:n,name:"crypto_key_name",type:"text",autoComplete:"off",required:!0,spellCheck:!1,placeholder:"projects/…/locations/…/keyRings/…/cryptoKeys/…",title:"Full crypto key resource name (projects/…/locations/…/keyRings/…/cryptoKeys/…).",value:e.keyName,readOnly:t,onChange:e=>r("keyName",e.target.value)})]})}function at({form:e,configured:t,locked:r,onChange:n}){const i=b.useId(),s=b.useId(),a=Xe({name:"project_id",label:"Project ID",secret:!1,required:!0}),o=Xe({name:"service_account_json",label:"Service account JSON",secret:!0,required:!0});return y.jsxs(y.Fragment,{children:[y.jsxs("div",{className:"field",children:[y.jsx("label",{className:"label conn-field-label",htmlFor:i,children:"Project ID (required)"}),y.jsx("input",{id:i,name:"project_id",type:"text",autoComplete:"off",required:!0,spellCheck:!1,placeholder:a.placeholder,title:a.help,value:e.projectId,readOnly:r,onChange:e=>n("projectId",e.target.value)})]}),y.jsxs("div",{className:"field",children:[y.jsxs("label",{className:"label conn-field-label",htmlFor:s,children:["Service account JSON",t?" (leave blank to keep)":" (required)"]}),y.jsx("textarea",{id:s,name:"service_account_json",autoComplete:"off",required:!t,spellCheck:!1,rows:4,placeholder:t?"Leave blank to keep sealed credential":o.placeholder,title:o.help,value:e.serviceAccountJson,onChange:e=>n("serviceAccountJson",e.target.value)})]})]})}function ot({form:e,onChange:t}){const r=b.useId();return y.jsxs("details",{className:"conn-client-alt",children:[y.jsx("summary",{children:"Optional settings"}),y.jsxs("div",{className:"field",children:[y.jsx("label",{className:"label",htmlFor:r,children:"Name"}),y.jsx("input",{id:r,value:e.label,onChange:e=>t("label",e.target.value)})]})]})}function ct({form:e,configured:t,identityLocked:r=!1,onChange:n}){return y.jsxs(y.Fragment,{children:[y.jsx(st,{form:e,locked:r,onChange:n}),y.jsx(at,{form:e,configured:t,locked:r,onChange:n}),y.jsx(ot,{form:e,onChange:n})]})}const lt=[{id:"byo-identity",label:"BYO Identity",protocols:["oidc","saml","ldap","better-auth","supabase"],issuerPlaceholder:"https://identity.example.com",baseUrlPlaceholder:"https://identity.example.com/api/auth",setup:"Register this app as a public client with authorization code and S256 PKCE. Allow its redirect URI and browser origin. The issuer must publish OpenID Connect discovery.",docsUrl:"https://openid.net/specs/openid-connect-core-1_0.html"},{id:"better-auth",label:"Better Auth",protocols:["better-auth","oidc"],issuerPlaceholder:"https://identity.example.com/api/auth",baseUrlPlaceholder:"https://identity.example.com/api/auth",setup:"Use your Better Auth API base URL. Enable email/password and the JWT plugin, and add this app to trustedOrigins with credentialed CORS. For OIDC, install the OAuth Provider plugin and register a public client.",docsUrl:"https://www.better-auth.com/docs/plugins/jwt"},{id:"supabase",label:"Supabase Auth",protocols:["supabase","oidc"],issuerPlaceholder:"https://project.supabase.co/auth/v1",baseUrlPlaceholder:"https://project.supabase.co",setup:"Use your Supabase project URL and publishable or anon key, with Email provider enabled. For OIDC, enable Supabase OAuth Server and register a public application with this redirect URI.",docsUrl:"https://supabase.com/docs/guides/auth"},{id:"neon-auth",label:"Neon Auth",protocols:["better-auth"],issuerPlaceholder:"https://branch.neonauth.us-east-1.aws.neon.tech/neondb/auth",baseUrlPlaceholder:"https://branch.neonauth.us-east-1.aws.neon.tech/neondb/auth",setup:"Copy this branch's Neon Auth URL from the dashboard and register this app as a trusted origin. Neon Auth uses the Better Auth session API and JWT signing keys.",docsUrl:"https://neon.com/docs/auth/overview"},{id:"clerk",label:"Clerk",protocols:["oidc"],issuerPlaceholder:"https://clerk.example.com",baseUrlPlaceholder:"",setup:"Create a Clerk OAuth application, enable OpenID Connect, and use its issuer and client ID. Register a public client with PKCE and this redirect URI.",docsUrl:"https://clerk.com/docs/guides/configure/auth-strategies/oauth/how-clerk-implements-oauth"},{id:"auth0",label:"Auth0",protocols:["oidc","saml"],issuerPlaceholder:"https://acme.us.auth0.com",baseUrlPlaceholder:"",setup:"Create an Auth0 Single Page Application. Register the callback and Allowed Web Origins, select token endpoint authentication None, and use the tenant domain as issuer.",docsUrl:"https://auth0.com/docs/get-started/applications/application-settings"},{id:"workos",label:"WorkOS",protocols:["oidc","saml"],issuerPlaceholder:"https://signin.workos.com",baseUrlPlaceholder:"",setup:"Use your AuthKit Connect issuer and register a public OAuth application with PKCE and this redirect URI. Confidential applications and SAML use your organization sign-in service.",docsUrl:"https://workos.com/docs/authkit/connect/oauth"},{id:"okta",label:"Okta",protocols:["oidc","saml"],issuerPlaceholder:"https://acme.okta.com/oauth2/default",baseUrlPlaceholder:"",setup:"Create an OIDC Single-Page Application with authorization code and PKCE. Register the callback and Trusted Origin. Use the authorization server's issuer URI.",docsUrl:"https://developer.okta.com/docs/guides/sign-into-spa-redirect/"}];function dt(e){return lt.find(t=>t.id===e)??null}function ut(e){const t=dt(e);if(!t)throw new Error("Unknown identity integration");return k.parse({providerId:e,name:t.label,protocol:t.protocols[0]??"oidc",issuer:"",clientId:"",audience:"",jwksUri:"",clientSecret:"",scope:"openid profile email",baseUrl:"",publicKey:"",brokerUrl:"",organizationId:"",organizationSlug:"",samlMetadataUrl:"",samlMetadataXml:"",samlEntityId:"",ldapUrl:"",ldapBaseDn:"",ldapBindDn:"",ldapBindPassword:"",ldapBindMode:"bind_template",ldapBindTemplate:"",ldapSearchFilter:"(uid={username})",ldapSubjectAttribute:"entryUUID",ldapEmailAttribute:"mail",ldapNameAttribute:"cn"})}function ht(e){const t=[];return S(e.baseUrl)||t.push("Enter an HTTPS identity API base URL"),e.issuer&&!S(e.issuer)&&t.push("JWT issuer must be an HTTPS URL"),e.jwksUri&&!S(e.jwksUri)&&t.push("JWT signing keys must use an HTTPS URL"),"supabase"!==e.protocol||e.publicKey.trim()||t.push("Enter the Supabase publishable or anon key"),e.clientSecret&&t.push("A native identity session does not use an OAuth client secret"),t}const pt={oidc:function(e){const t=[];return S(e.issuer)||t.push("Enter an HTTPS OIDC issuer URL"),e.clientId.trim()||t.push("Enter your registered OIDC client ID"),e.scope.split(/\s+/).includes("openid")||t.push("OIDC scopes must include openid"),"confidential"!==e.oidcClientType||e.clientSecret||t.push("Enter the confidential OIDC client secret"),t.push(...C(e)),t},saml:M,ldap:function(e){const t=function(e){try{const t=new URL(e);if(!("ldaps:"!==t.protocol||t.username||t.password||t.search||t.hash))return[]}catch{}return["Enter a directory URL using ldaps://"]}(e.ldapUrl);return"bind_template"!==e.ldapBindMode||e.ldapBindTemplate.includes("{username}")||t.push("The LDAP bind template must include {username}"),"search_then_bind"===e.ldapBindMode&&(e.ldapBaseDn.trim()||t.push("Enter the LDAP search base DN"),e.ldapSearchFilter.includes("{username}")||t.push("The LDAP search filter must include {username}"),e.ldapBindDn.trim()||t.push("Enter the LDAP service bind DN")),e.ldapSubjectAttribute.trim()||t.push("Enter the LDAP stable subject attribute"),t},"better-auth":ht,supabase:ht};function ft(e){const t=function(e){if(!k.safeParse(e).success)return["Invalid identity configuration"];const t=[];return dt(e.providerId)?.protocols.includes(e.protocol)||t.push("Select a supported identity protocol"),e.name.trim()||t.push("Enter a connection name"),t.push(...pt[e.protocol](e)),I(e)&&t.push(...function(e){const t=[];return S(e.brokerUrl)?e.brokerUrl.replace(/\/+$/,"")!==V()&&t.push("Connect this sign-in service in Settings before configuring organization identity"):t.push("Enter your organization sign-in service URL"),e.organizationId.trim()||t.push("Select an organization you own"),t}(e)),t}(e);if(t.length)throw new Error(t.join(". "))}function gt(e){return JSON.stringify(e&&{v:e.v,createdAt:e.createdAt,kdf:e.kdf,wrap:e.wrap,unlocks:e.unlocks})}function wt(e,t){const r=Y().providers.find(t=>t.connectionId===e);if(!r||r.protocol!==t)throw new Error("This native identity connection is not enabled for sign-in");return{bytes:JSON.stringify(r),issuer:r.issuer,audience:r.clientId}}class mt{constructor(e,t,r){this.connectionId=e,this.protocol=t,this.resolveTarget=r,this.originalRevision=A(e),this.target=wt(e,t),this.subscriptions.push(h.onLock(this.release),me(this.observe),H(this.observe),$(this.observe))}connectionId;protocol;resolveTarget;stop=new AbortController;authGeneration=ee();identitySession=W();identityRealm=G();original=h.getSnapshot();originalHeader=JSON.stringify(this.original.header);target;subscriptions=[];originalRevision;generation=te();material=gt(this.original.header);configuration=null;installed=!1;released=!1;release=()=>{if(!this.released){this.released=!0,this.stop.abort();for(const e of this.subscriptions.splice(0))e()}};observe=()=>{try{this.assertLocal(),this.assertConfiguration()}catch{this.release()}};assertLocal(){if(this.stop.signal.throwIfAborted(),ee()!==this.authGeneration||W()!==this.identitySession||G()!==this.identityRealm||wt(this.connectionId,this.protocol).bytes!==this.target.bytes||h.getSnapshot().tomb!==this.original.tomb)throw new Error("Original identity user, vault or configured target changed")}assertConfiguration(){const e=this.configuration;if(e){if(A(this.connectionId)!==e.revision||JSON.stringify(E(this.connectionId))!==e.bytes)throw new Error("Saved identity configuration changed during sign-in")}else if(null!==this.originalRevision&&A(this.connectionId)!==this.originalRevision)throw new Error("Saved identity configuration changed before hydration")}assertPending=()=>{this.assertLocal(),this.assertConfiguration();const e=h.getSnapshot();if(this.generation!==te()||e.status!==this.original.status||e.guest!==this.original.guest||e.awaitingSecondStep!==this.original.awaitingSecondStep||JSON.stringify(e.header)!==this.originalHeader)throw new Error("Original pending identity ceremony changed")};bindConfiguration=e=>{if(this.assertPending(),this.configuration||e.protocol!==this.protocol)throw new Error("Capture the original native identity configuration once");const t=A(this.connectionId);if(!t||JSON.stringify(E(this.connectionId))!==JSON.stringify(e))throw new Error("Saved identity configuration is unavailable or changed");const r=this.resolveTarget(e);if(this.target.issuer!==r.issuer||this.target.audience!==r.audience)throw new Error("Configured native identity trust does not match the saved adapter");this.configuration=Object.freeze({bytes:JSON.stringify(e),revision:t,issuer:r.issuer,audience:r.audience})};prepareRuntime=e=>{if(this.assertPending(),this.installed)throw new Error("Native identity runtime was already prepared");this.installed=!0,e(),this.assertLocal(),this.assertConfiguration(),this.generation=te(),this.assertPending()};assertSessionCurrent=(e,t)=>{this.assertLocal(),this.assertConfiguration();const r=this.configuration,n=h.getSnapshot();if(!r||e!==r.issuer||t!==r.audience)throw new Error("Verified native identity does not match its saved issuer and audience");if(null!==this.original.header||"null"!==this.material||null===n.header||n.guest||(this.material=gt(n.header)),gt(n.header)!==this.material||n.guest!==this.original.guest)throw new Error("Original vault credential lineage changed")}}function yt(e,t="saml",r){if("ldap"===t)throw new Error("LDAP requires its exact configured realm and audience");const n=new mt(e,t,e=>({issuer:"saml"===t?e.samlEntityId:e.issuer,audience:e.clientId}));return Object.freeze({signal:n.stop.signal,assertPending:n.assertPending,bindConfiguration:n.bindConfiguration,prepareRuntime:n.prepareRuntime,assertSessionCurrent:n.assertSessionCurrent,release:n.release})}function bt(e){return Y().providers.filter(t=>!(t.providerId!==e||t.connectionId||t.providerHint||t.protocol&&"oidc"!==t.protocol))}function vt(e,t){const r=t?O(t):null;if(r?.providerId===e)return r;const n=ut(e);if("oidc"!==n.protocol)return n;const i=bt(e),s=1===i.length?i[0]:null;return s?{...n,name:s.label,issuer:s.issuer,clientId:s.clientId,scope:s.scope??n.scope}:n}function kt(e,t){if("saml"===e.protocol)return{providerId:e.providerId,label:e.name,connectionId:t,protocol:"saml",issuer:e.samlEntityId,clientId:e.clientId};if(j(e))return{providerId:e.providerId,issuer:e.issuer,clientId:e.clientId,label:e.name,connectionId:t,protocol:"oidc",nativeIdentity:!0,scope:e.scope};if(I(e))return{providerId:e.providerId,label:e.name,connectionId:t,protocol:"oidc",issuer:e.brokerUrl,clientId:re(),scope:"openid",providerHint:`org:${e.organizationSlug}`};const r="better-auth"===e.protocol||"supabase"===e.protocol,n={providerId:e.providerId,label:e.name,connectionId:t,protocol:"better-auth"===e.protocol||"supabase"===e.protocol?e.protocol:"oidc",issuer:r?P(e):e.issuer,clientId:r?_(e):e.clientId,scope:e.scope};return r&&(n.jwksUri=T(e)),n}function It(e,t,r){const n=e=>Boolean(r&&JSON.stringify(e)===JSON.stringify(r));if(r&&!e.some(n))throw new Error("Legacy identity configuration changed; reload before saving");return e.filter(e=>e.connectionId!==t&&!n(e))}function St(e,t,r){if(!I(e)&&r.some(e=>!(e.providerHint||!0===e.nativeIdentity&&!0===t.nativeIdentity||("saml"===e.protocol||"saml"===t.protocol?e.issuer!==t.issuer:e.issuer.replace(/\/+$/,"")!==t.issuer.replace(/\/+$/,"")))))throw new Error("This identity issuer is already configured as a sign-in method")}function Ct(e,t,r){const n=It(Y().providers,t,r);St(e,kt(e,t),n)}async function At(e,t,r=null,n){n?.();const i=Q(),s=Y(i),a=It(s.providers,t,r);if(e){const r=kt(e,t);St(e,r,a),a.push(r)}await X({...i,signIn:{...s,providers:a}},n)}function Et(e,t="metadata"){const r=h.getSnapshot(),n=JSON.stringify(r.header),i=ee(),s=W(),a=G();let o=te();const c=e?A(e):null,l=new AbortController,d=AbortSignal.any([l.signal,AbortSignal.timeout("metadata"===t?15e3:6e5)]),u=()=>{d.throwIfAborted();const e=h.getSnapshot();if(e.tomb!==r.tomb||e.status!==r.status||e.guest!==r.guest||e.awaitingSecondStep!==r.awaitingSecondStep||JSON.stringify(e.header)!==n||ee()!==i||W()!==s||G()!==a)throw new Error("Original identity configuration authority changed")},p=()=>{if(u(),te()!==o)throw new Error("Original identity configuration authority changed")};return Object.freeze({signal:d,assertCurrent:()=>{if(p(),e&&A(e)!==c)throw new Error("Original identity configuration authority changed")},assertActor:p,clearOwnSession:e=>{p();const t=ie(o,()=>{u(),e?.(),u()});if(null!==ne()||te()!==t)throw new Error("Original identity session changed during configuration");o=t,p()},release:()=>l.abort()})}function Ot(e){return Y().providers.find(t=>t.connectionId===e)}function jt(e,t){if(JSON.stringify(Ot(e))!==JSON.stringify(t))throw new Error("Original public identity trust changed")}async function _t(e,t,r,n=null){r.assertCurrent();const i=t?E(t):null,s=t?Ot(t):void 0,a=t?Y().providers.findIndex(e=>e.connectionId===t):0;Ct(e,t??"",n),await r.check(e),r.assertCurrent();const o=ne();r.assertCurrent(),function(e,t,r){return e?r?.upstreamId===`identity:${e}`:Boolean(t&&r?.upstreamId===`operator:${t.issuer}`)}(t,n,o)&&r.clearOwnSession(),r.assertCurrent();const c={current:null};let l=t,d=null;try{const i=await x(e,t,r.assertCurrent,e=>{c.current=e});l=i.connectionId;const a=c.current;if(!a)throw new Error("Original identity publication was not prepared");const o=l,u=()=>{r.assertActor(),N(o,a)};u(),jt(o,s),d=function(e,t){const r=Z(JSON.parse(JSON.stringify(kt(e,t))));if(!r)throw new Error("Configured identity public trust is invalid");return r}(e,o),await At(e,o,n,()=>{u(),jt(o,s)}),u(),jt(o,d);const h=ke(o)??i;return u(),jt(o,d),h}catch(u){const e=c.current;throw e&&await U(l,e,i,async t=>{d&&await async function(e,t,r,n,i){if(JSON.stringify(Ot(e))!==JSON.stringify(t))return;const s=Q(),a=Y(s),o=a.providers.filter(t=>t.connectionId!==e);r&&o.splice(Math.min(n,o.length),0,r),await X({...s,signIn:{...a,providers:o}},()=>{N(e,i),jt(e,t)})}(t,d,s,a,e)}),u}}function Pt(e,t){return Math.min(e.expiresAt-Date.now(),t)}function Tt(e){if(e.isolated)try{const t=e.popup.location.href;if("about:blank"!==t&&new URL(t).origin!==window.location.origin)return}catch{return}e.popup.close()}function xt(e){e.cancelled=!0,e.cancelWait?.(),Tt(e)}function Nt(e,t,r=6e5){if(e.started||e.cancelled)throw new Error("This provider authorization window was already used");if(e.started=!0,function(e,t=6e5){let r;Oe(e.state);try{r=new URL(e.authorizationUrl)}catch{throw new Error("Invalid provider authorization URL")}const n=["localhost","127.0.0.1","[::1]"].includes(r.hostname);if("https:"!==r.protocol&&("http:"!==r.protocol||!n)||r.username||r.password||!Number.isFinite(e.expiresAt))throw new Error("Invalid provider authorization URL");const i=Date.now();if(e.expiresAt<=i)throw new Error("Provider authorization request expired");if(e.expiresAt>i+t+3e4)throw new Error("Provider authorization request exceeds allowed lifetime")}(t,r),t.signal?.aborted)throw new Error("Provider authorization was cancelled")}function Ut(e,t,r){return new Promise((n,i)=>{let s=!1,a=()=>{};const o=r=>{s||(s=!0,clearTimeout(l),a(),t.signal?.removeEventListener("abort",c),e.cancelWait=null,Tt(e),r?n(r):i(new Error("Provider authorization was cancelled or expired")))},c=()=>o(),l=setTimeout(c,Pt(t,6e5));e.cancelWait=c,t.signal?.addEventListener("abort",c,{once:!0}),a=r(e=>{e.state===t.state&&Date.now()<t.expiresAt&&o(e)});try{e.popup.location.replace(t.authorizationUrl)}catch{o()}})}function Lt(e,t){try{Nt(e,t,18e5);const r=new URL(t.authorizationUrl);if("https:"!==r.protocol)throw new Error("Invalid provider consent request; use HTTPS");const n=new AbortController,i=()=>{clearTimeout(a),Tt(e)},s=()=>{n.abort(),i()},a=setTimeout(s,Pt(t,18e5));return e.cancelWait=s,e.popup.opener=null,e.isolated=!0,e.popup.location.replace(r.href),{signal:n.signal,close:i}}catch(r){throw xt(e),r}}function Dt(e){const r={popup:e,isolated:!1,started:!1,cancelled:!1,cancelWait:null};return{cancel:()=>xt(r),wait:e=>async function(e,t){try{Nt(e,t);const r=Ce(t.redirectUri);if(!globalThis.BroadcastChannel)throw new Error("This browser cannot return provider authorization");const n=new BroadcastChannel(await Ae(t.state));if(e.cancelled||t.signal?.aborted)throw n.close(),new Error("Provider authorization was cancelled");return e.popup.opener=null,e.isolated=!0,await Ut(e,t,e=>function(e,t,r,n){return e.onmessage=i=>{const s=Ee(i.data);if(!s||s.redirectUri!==r)return;const a=Se(s);!a||a.state!==t.state||Date.now()>=t.expiresAt||(e.postMessage({kind:"accepted",receipt:s.receipt}),n(a))},()=>e.close()}(n,t,r,e))}catch(r){throw Tt(e),r}}(r,e),waitWebMessage:e=>async function(e,t){try{Nt(e,t);const r=new URL(t.expectedOrigin);if(r.href!==`${r.origin}/`||"https:"!==r.protocol)throw new Error("Use the exact provider message origin");if(globalThis.crossOriginIsolated)throw new Error("Use the static callback with browser isolation");return await Ut(e,t,n=>{const i=i=>{if(i.origin!==r.origin||i.source!==e.popup)return;const s=(t.parse??Se)(i.data);s&&n(s)};return window.addEventListener("message",i),()=>window.removeEventListener("message",i)})}catch(r){throw Tt(e),r}}(r,e),showDeviceConsent:e=>function(e,t){try{const r=new URL(t.verificationUri);if("https:"!==r.protocol||r.hash||!/^[!-~]{1,256}$/.test(t.userCode))throw new Error("Invalid provider device authorization request");return Lt(e,{authorizationUrl:t.verificationUri,state:t.state,expiresAt:t.expiresAt})}catch(r){throw xt(e),r}}(r,e),showRedirectConsent:e=>Lt(r,e),showFormConsent:e=>function(e,r){try{const n={authorizationUrl:r.authorizationUrl,state:r.state,expiresAt:r.expiresAt,signal:r.signal};Nt(e,n,3e5);const i=()=>{if(e.cancelled||n.signal?.aborted)throw new Error("Provider authorization was cancelled");if(Date.now()>=n.expiresAt)throw new Error("Provider authorization request expired")},s=function(e,r){const n=Object.entries(e);let i=0;if(!n.length||n.length>8)throw new Error("Invalid provider form fields");for(const[s,a]of n){if(!/^[A-Za-z][A-Za-z0-9_]{0,63}$/.test(s)||!t(a)||a.length>393216)throw new Error("Invalid provider form field");i+=(new TextEncoder).encode(a).byteLength}if(i>524288||new URL(r).hash)throw new Error("Provider form request exceeds its bounds");return n}(r.fields,n.authorizationUrl);i();const a=new AbortController,o=()=>{clearTimeout(l),n.signal?.removeEventListener("abort",c),e.cancelWait=null,Tt(e)},c=()=>{a.abort(),o()},l=setTimeout(c,Math.max(0,n.expiresAt-Date.now()));return e.cancelWait=c,n.signal?.addEventListener("abort",c,{once:!0}),e.popup.opener=null,e.isolated=!0,i(),function(e,t,r){if(e.closed)throw new Error("Provider sign-in window was closed");const n=e.document,i=n.createElement("meta");i.name="referrer",i.content="no-referrer",n.head.append(i);const s=n.createElement("form");s.method="POST",s.action=t,s.target="_self";for(const[a,o]of r){const e=n.createElement("input");e.type="hidden",e.name=a,e.value=o,s.append(e)}n.body.replaceChildren(s),HTMLFormElement.prototype.submit.call(s)}(e.popup,n.authorizationUrl,s),{signal:a.signal,close:o}}catch(n){throw xt(e),n}}(r,e)}}const zt=new WeakSet;function Rt(e){if(zt.has(e)||e.closed||e.opener!==window||"about:blank"!==e.location.href)throw new Error("Provider sign-in requires its original unused browser window");return zt.add(e),Dt(e)}function Jt(){const e=window.open("about:blank","_blank","popup,width=600,height=720");if(!e)throw new Error("Allow the provider sign-in window and try again");return Dt(e)}class qt{constructor(e){this.owner=e,this.ownerSignal=e.signal,this.assertOwner=e.assertCurrent,this.signal=AbortSignal.any([this.ownerSignal,this.stop.signal])}owner;stop=new AbortController;originalFetch=globalThis.fetch;ownerSignal;assertOwner;signal;requests=new Set;readers=new Set;draining=null;retired=!1;check(){if(this.signal.throwIfAborted(),this.retired||globalThis.fetch!==this.originalFetch||this.owner.signal!==this.ownerSignal||this.owner.assertCurrent!==this.assertOwner)throw new Error("Original browser OIDC HTTP owner changed.");if(this.assertOwner.call(this.owner),this.signal.throwIfAborted(),globalThis.fetch!==this.originalFetch)throw new Error("Original browser OIDC fetch changed.")}assertCurrent=()=>{try{this.check()}catch(e){throw this.retired=!0,this.stop.abort(e),e}};adoptReader(e){let t=null;const r=()=>{this.readers.delete(n)&&e.releaseLock()},n={cancel:n=>{if(t)return t;let i=()=>{};return t=new Promise((t,s)=>{i=()=>{(async()=>{try{await e.cancel(n)}finally{r()}})().then(t,s)}}),i(),t}};return this.readers.add(n),{finish:()=>{t||r()},cancel:n.cancel}}response(e){if(e.redirected||["opaque","opaqueredirect"].includes(e.type))throw new Error("Browser OIDC response bypassed CORS or redirect refusal.");const t=e.body?.getReader();if(!t)return e;const{finish:r,cancel:n}=this.adoptReader(t),i=new ReadableStream({pull:async e=>{try{this.assertCurrent();const n=await t.read();this.assertCurrent(),n.done?(r(),e.close()):e.enqueue(n.value)}catch(i){try{await n(i)}finally{r(),e.error(i)}}},cancel:async e=>{try{await n(e)}finally{r()}}});return new Response(i,{status:e.status,statusText:e.statusText,headers:e.headers})}fetch=(e,t)=>{let r=()=>{};const n=new Promise(e=>{r=e});this.requests.add(n);const i=this.performFetch(e,t),s=()=>{this.requests.delete(n),r()};return i.then(s,s),i};async performFetch(e,t){this.assertCurrent();const s=new Request(e,t);if(!S(s.url)||!["GET","POST"].includes(s.method))throw new Error("Invalid browser OIDC HTTP target or method.");if(r(s.url)&&!n.eligible()||s.headers.has("X-OpenSesame-Operator"))throw new DOMException("This browser deployment cannot use local operator authority.","SecurityError");const a=this.originalFetch.call(globalThis,s,i(s.url,{signal:AbortSignal.any([s.signal,this.signal]),mode:"cors",credentials:"omit",redirect:"error",cache:"no-store",referrerPolicy:"no-referrer"})),o=await a;try{return this.assertCurrent(),this.response(o)}catch(c){try{await(o.body?.cancel())}catch{}throw c}}retire=()=>{if(this.draining)return this.draining;this.retired=!0;let e=()=>{};return this.draining=new Promise((t,r)=>{e=()=>{(async()=>{const e=[...this.readers].map(e=>e.cancel());this.stop.abort();const t=await Promise.allSettled(e);await Promise.allSettled([...this.requests]);const r=t.find(e=>"rejected"===e.status);if("rejected"===r?.status)throw r.reason})().then(t,r)}}),e(),this.draining}}function Kt(e){const t=ye(e);let r=null,n=null,i=!1;return Object.freeze({snapshot:()=>r?.snapshot(),connect:async s=>{if(e.assertCurrent(),i)throw new Error("Original OIDC HTTP carrier was already opened");return i=!0,D(s)?(r=t(),(await ve(r,e,s.name)).captureNativeHTTP(e.signal)):(n=function(e){const t=new qt(e);t.assertCurrent();const r=Object.freeze({signal:t.signal,assertCurrent:t.assertCurrent,fetch:t.fetch,supportsNativeOrigin:e=>(t.assertCurrent(),null!==S(e)&&new URL(e).origin===e)});return Object.freeze({transport:r,retire:t.retire})}(e),n.transport)},retire:async()=>{n?await n.retire():await be(r)}})}function Bt(e){const t=Et(e,"enrollment"),r=Kt(Object.freeze({signal:t.signal,assertCurrent:t.assertActor}));let n=!1;const i=()=>{t.assertActor(),r.snapshot()},s=Object.freeze({signal:t.signal,assertActor:i,assertCurrent:()=>{t.assertCurrent(),r.snapshot()},clearOwnSession:()=>{i(),t.clearOwnSession(),r.snapshot()},check:async e=>{if(t.assertCurrent(),n)throw new Error("Original identity configuration was already checked");n=!0,await L(),t.assertCurrent();const i=await r.connect(e);t.assertCurrent();const{testConfiguredNativeOidc:a}=await v(async()=>{const{testConfiguredNativeOidc:e}=await import("./use-password-reset-generate-B11XaeM6.js").then(e=>e.a5);return{testConfiguredNativeOidc:e}},__vite__mapDeps([0,1,2,3,4,5,6]));t.assertCurrent();const o=await a(e,{signal:t.signal,assertCurrent:s.assertCurrent},i);return t.assertCurrent(),await r.retire(),t.assertCurrent(),o},release:async()=>{try{await r.retire()}finally{t.release()}}});return s}const Ft=_t;async function Mt(e){const t=yt(e,"oidc"),r=Kt(Object.freeze({signal:t.signal,assertCurrent:t.assertPending}));let n=null,i=!1;try{const i=s().open("about:blank","_blank","popup,width=600,height=720");if(!i)throw new Error("Allow the identity sign-in window and try again");n=function(e){const t=e.wait,r=e.cancel,n=()=>{if(e.wait!==t||e.cancel!==r)throw new Error("Original OIDC window changed")};return Object.freeze({wait:r=>{n();const i=t.call(e,r);return n(),i},cancel:()=>r.call(e)})}(Rt(i)),t.assertPending(),await L(),t.assertPending();const a=E(e);if(!a||!j(a))throw new Error("Saved native OIDC configuration changed");ft(a),t.bindConfiguration(a);const o=await r.connect(a);t.assertPending();const{signInConfiguredNativeOidc:c}=await v(async()=>{const{signInConfiguredNativeOidc:e}=await import("./use-password-reset-generate-B11XaeM6.js").then(e=>e.a5);return{signInConfiguredNativeOidc:e}},__vite__mapDeps([0,1,2,3,4,5,6]));t.assertPending(),await c(e,a,t,n,o,r.retire)}catch(a){i=!0;try{await r.retire()}catch(o){if(a===o||a instanceof AggregateError&&a.errors.includes(o))throw a;throw new AggregateError([a,o],"OIDC failed and its original carrier retirement also failed",{cause:a})}finally{t.release(),n?.cancel()}throw a}finally{i||await r.retire()}}function Vt(e,t){const r=function(e){if(""!==e)try{return p().capture()}catch(t){if(null!==e)throw t;return}}(e),n=new AbortController,i=new Set;let s=!1;const a=()=>{t.signal.throwIfAborted(),r?.assertCurrent()},o=()=>{t.assertCurrent(),a()};return o(),Object.freeze({assertCurrent:o,assertAuthority:a,transport:r&&Object.freeze({signal:AbortSignal.any([t.signal,n.signal,...r.signal?[r.signal]:[]]),assertCurrent:o,fetch:(e,a)=>{if(o(),s)throw new Error("The original SAML metadata route retired");const c=r.fetch(e,{...a,signal:AbortSignal.any([t.signal,n.signal,...a?.signal?[a.signal]:[],...r.signal?[r.signal]:[]])});return i.add(c),c.then(()=>i.delete(c),()=>i.delete(c)),c}}),retire:async()=>{s=!0,n.abort(),await Promise.allSettled([...i])}})}function Ht(e,t){const r=Et(t),n={signal:r.signal,assertCurrent:r.assertCurrent},i=Vt(e,n),s=()=>{r.assertActor(),i.assertAuthority(),r.assertActor()};return Object.freeze({assertCurrent:i.assertCurrent,assertActor:s,clearOwnSession:()=>{s(),r.clearOwnSession(i.assertAuthority),s()},check:async t=>{if(i.assertCurrent(),t.samlMetadataUrl!==e)throw new Error("Original SAML metadata target changed");const{testNativeSamlConfiguration:r}=await v(async()=>{const{testNativeSamlConfiguration:e}=await(import("./configured-runtime-qg0cjMOO.js"));return{testNativeSamlConfiguration:e}},__vite__mapDeps([0,1]));return i.assertCurrent(),r(t,n,i.transport)},release:async()=>{r.release(),await i.retire()}})}async function $t(e){const t=yt(e);let r=null,n=null;try{const i=O(e);if(i&&"saml"!==i.protocol)throw new Error("Saved SAML configuration is unavailable");n=Vt(i?.samlMetadataUrl??null,{signal:t.signal,assertCurrent:t.assertPending});const a=s().open("about:blank","_blank","popup,width=600,height=720");if(!a)throw new Error("Allow the identity sign-in window and try again");r=function(e){const t=e.showFormConsent,r=e.cancel,n=()=>{if(e.showFormConsent!==t||e.cancel!==r)throw new Error("Original SAML consent window changed")};return Object.freeze({showFormConsent:r=>{n();const i=t.call(e,r);return n(),i},cancel:()=>r.call(e)})}(Rt(a)),n.assertCurrent(),await L(),n.assertCurrent();const o=E(e);if(!o||"saml"!==o.protocol)throw new Error("Saved native SAML connection changed");ft(o),t.bindConfiguration(o);const{signInConfiguredNativeSaml:c}=await v(async()=>{const{signInConfiguredNativeSaml:e}=await(import("./configured-runtime-qg0cjMOO.js"));return{signInConfiguredNativeSaml:e}},__vite__mapDeps([0,1]));n.assertCurrent();const l=n,d=Object.freeze({...t,assertPending:()=>{t.assertPending(),l.assertAuthority()},prepareRuntime:e=>{l.assertAuthority(),t.prepareRuntime(e),l.assertAuthority()},assertSessionCurrent:(e,r)=>{t.assertSessionCurrent(e,r),l.assertAuthority()}});await c(e,o,d,r,n.retire,n.transport)}catch(i){throw t.release(),r?.cancel(),i}finally{await(n?.retire())}}class Wt{constructor(e){this.connectionId=e,this.revision=A(e),this.subscriptions.push(h.onLock(this.release),h.subscribe(this.observe),$(this.observe),me(this.observe))}connectionId;generation=te();authGeneration=ee();actor=W();realm=G();vault=this.vaultContext();revision;subscriptions=[];retired=!1;vaultContext(){const{tomb:e,status:t,guest:r,header:n,awaitingSecondStep:i}=h.getSnapshot();return JSON.stringify({tomb:e,status:t,guest:r,header:n,awaitingSecondStep:i})}assertCurrent=()=>{if(this.vaultContext()!==this.vault||A(this.connectionId)!==this.revision)throw new Error("The original vault or identity configuration changed. Start again.");if(this.retired||te()!==this.generation||ee()!==this.authGeneration||W()!==this.actor||G()!==this.realm)throw new Error("The original identity sign-in owner changed. Start again.")};observe=()=>{try{this.assertCurrent()}catch{this.release()}};release=()=>{this.retired=!0;for(const e of this.subscriptions.splice(0))e()}}async function Gt(r){const n=S(r);if(!n)throw new Error("Enter an HTTPS OpenID Connect issuer");const i=await a(`${n}/.well-known/openid-configuration`,{credentials:"omit",timeoutMs:8e3});if(!i.ok)throw new Error(`OIDC discovery was refused (${i.status})`);const s=await i.json();if(!e(s)||!t(s.issuer)||s.issuer.replace(/\/+$/,"")!==n)throw new Error("OIDC discovery does not match the configured issuer");for(const e of["authorization_endpoint","token_endpoint","jwks_uri"]){const r=s[e];if(!t(r)||!S(r)||!o(r,n))throw new Error(`OIDC ${e} must belong to the configured issuer`)}if(Array.isArray(s.response_types_supported)&&!s.response_types_supported.includes("code"))throw new Error("This provider does not support the authorization code flow");if(Array.isArray(s.code_challenge_methods_supported)&&!s.code_challenge_methods_supported.includes("S256"))throw new Error("This provider does not support S256 PKCE");return{message:"OpenID Connect discovery is reachable and matches the issuer. Complete sign-in to verify your client registration."}}function Yt(e){if(!V()||e&&e.replace(/\/+$/,"")!==V())throw new Error("Connect this organization sign-in service in Settings first")}async function Qt(e){Yt(e);const{identityEnterpriseClient:t}=await v(async()=>{const{identityEnterpriseClient:e}=await import("./use-password-reset-generate-B11XaeM6.js").then(e=>e.a6);return{identityEnterpriseClient:e}},__vite__mapDeps([0,1,2,3,4,5,6]));return(await t().listOrganizations()).filter(e=>e.owner)}async function Xt(e){const t=(await Qt(e.brokerUrl)).find(t=>t.id===e.organizationId);if(!t)throw new Error("Sign in as an owner of this organization to configure identity");return t}async function Zt(e,t){const r="oidc"===e.protocol?Bt(t):null,n="saml"===e.protocol?Ht(e.samlMetadataUrl,t):null;try{const i=K(B(e),t);if(ft(i),r&&j(i))return await r.check(i);if(n){const e=await n.check(i);return n.assertCurrent(),e}if("better-auth"===i.protocol||"supabase"===i.protocol)return F(i);if(I(i)){const e=await Xt(i);if("oidc"===i.protocol)return Gt(i.issuer);const{identityEnterpriseClient:t}=await v(async()=>{const{identityEnterpriseClient:e}=await import("./use-password-reset-generate-B11XaeM6.js").then(e=>e.a6);return{identityEnterpriseClient:e}},__vite__mapDeps([0,1,2,3,4,5,6]));return{message:await t().check(e,i.protocol)}}return Gt(i.issuer)}finally{await(n?.release()),await(r?.release())}}async function er(e,t){const r="oidc"===e.protocol?Bt(t):null,n="saml"===e.protocol?Ht(e.samlMetadataUrl,t):null;try{const s=K(B(e),t);if(ft(s),t&&!O(t))throw new Error("Saved identity connection not found");const a=function(e,t){if(t||"oidc"!==e.protocol||I(e))return null;const r=bt(e.providerId);if(r.length>1)throw new Error("Multiple legacy identity methods exist; select one in sign-in settings first");return r[0]??null}(s,t);if(n)return await _t(s,t,n);if(r&&j(s))return await Ft(s,t,r,a);Ct(s,t??"",a);const o=t?E(t):null;await async function(e,t){t?(await t.check(e),t.assertCurrent()):I(e)?await async function(e){const t=await Xt(e),{identityEnterpriseClient:r}=await v(async()=>{const{identityEnterpriseClient:e}=await import("./use-password-reset-generate-B11XaeM6.js").then(e=>e.a6);return{identityEnterpriseClient:e}},__vite__mapDeps([0,1,2,3,4,5,6])),n=r();e.organizationSlug=t.slug,"oidc"===e.protocol?await n.saveOidc(t,{issuer:e.issuer,clientId:e.clientId,clientSecret:e.clientSecret}):"ldap"===e.protocol&&await n.saveLdap(t,{url:e.ldapUrl,bindMode:"search_then_bind"===e.ldapBindMode?"search_bind":"bind_template",bindTemplate:e.ldapBindTemplate,searchBaseDn:e.ldapBaseDn,searchFilter:e.ldapSearchFilter,serviceBindDn:e.ldapBindDn,serviceBindSecret:e.ldapBindPassword,subjectAttribute:e.ldapSubjectAttribute,emailAttribute:e.ldapEmailAttribute,nameAttribute:e.ldapNameAttribute})}(e):"oidc"===e.protocol?await Gt(e.issuer):await F(e)}(s,n);const c=await x(s,t);try{await At(s,c.connectionId,a)}catch(i){throw o?await x(o,c.connectionId):await q(c.connectionId),i}return function(e,t){const r=ne();(r?.upstreamId===`identity:${e}`||t&&r?.upstreamId===`operator:${t.issuer}`)&&ue()}(c.connectionId,a),ke(c.connectionId)??c}finally{await(n?.release()),await(r?.release())}}async function tr(e,t={}){const r=function(e){const t=e.returnTo?de(e.returnTo,l(),c().BASE_URL||"/"):void 0;if(e.returnTo&&!t)throw new Error("That return address is not part of this app.");return t}(t);if(Y().providers.some(t=>t.connectionId===e&&"oidc"===t.protocol&&!0===t.nativeIdentity))return Mt(e);if(Y().providers.some(t=>t.connectionId===e&&"saml"===t.protocol))return $t(e);await L();const n=E(e);if(!n)throw new Error("Saved identity connection not found");if(ft(n),j(n))throw new Error("Re-save this identity connection to enable its native sign-in method");if(I(n)){if(Yt(n.brokerUrl),!n.organizationSlug)throw new Error("Saved organization identity has no organization slug");const t=Y().providers.find(t=>t.connectionId===e);if(!t)throw new Error("This identity connection is not enabled for sign-in");return ce(le(t),{providerHint:`org:${n.organizationSlug}`,prompt:"login",returnTo:r})}if("better-auth"===n.protocol||"supabase"===n.protocol){if(!t.credentials)throw new Error("Enter your account email and password to sign in");const r=function(e){const t=new Wt(e);return Object.freeze({generation:t.generation,assertCurrent:t.assertCurrent,release:t.release})}(e);try{const i=await z(n,t.credentials);r.assertCurrent(),await R(e,n),i.upstreamId=`identity:${e}`,await async function(e,t){se(e),t.assertCurrent(),ae(e,t.generation),t.release();const r=await _e(e.idToken);await Pe()||"pending_link"===r.kind||je("linked"===r.kind||"local"===r.kind?{kind:"linked",who:oe(e)}:{kind:"link_failed",who:oe(e),detail:r.reason})}(i,r)}finally{r.release()}return}const i=Y().providers.find(t=>t.connectionId===e);if(!i)throw new Error("This identity connection is not enabled for sign-in");return ce(le(i),{scope:n.scope,returnTo:r})}async function rr(e){const t=E(e);if(!t)throw new Error("Saved identity connection not found");const r=ne();if("better-auth"!==t.protocol&&"supabase"!==t.protocol||r?.upstreamId!==`identity:${e}`||await J(t,r.idToken),await At(null,e),r?.upstreamId===`identity:${e}`&&ue(),!(await q(e)))throw new Error("Saved identity connection not found")}function nr({draft:e,busy:t,online:r,onSignIn:n,failure:i,autoFocus:s=!1,className:a="unlock__form"}){const o=b.useRef(null),c=b.useRef(null),[l,d]=b.useState(""),[u,h]=b.useState(""),p="better-auth"===e.protocol||"supabase"===e.protocol;return b.useLayoutEffect(()=>{s&&he()&&pe(o.current)},[s]),b.useLayoutEffect(()=>{i&&!t&&he()&&pe(c.current)},[i,t]),y.jsxs("form",{className:a,onSubmit:e=>{!async function(e){e.preventDefault();const t=p?{email:l.trim(),password:u}:void 0;h(""),await n(t)}(e)},children:[p?y.jsxs(y.Fragment,{children:[y.jsx(fe,{inputRef:o,label:"Email address",type:"email",autoComplete:"username",value:l,disabled:t,onValueChange:d}),y.jsx(fe,{inputRef:c,label:"Password",type:"password",autoComplete:"current-password",value:u,disabled:t,onValueChange:h})]}):null,y.jsx(ge,{label:`Sign in to ${e.name}`,icon:y.jsx(we,{size:18}),disabled:t||!r||p&&(!l.trim()||!u),busy:t,children:i?y.jsx(Te,{tone:"err",label:i}):null})]})}Ie.revoke=rr,Ie.authorization=e=>{if(!O(e))return null;const t=ne(),r=t?.upstreamId===`identity:${e}`;return{status:r?"active":"pending",statusDetail:r?"Identity sign-in verified":"Configured; sign in to verify identity",grantedScopes:[],accountLabel:r?t.name??t.email??t.pairwiseSub:null,expiresAt:r?new Date(t.expiresAt).toISOString():null,refreshable:!1}};export{nt as A,ct as G,nr as I,Re as a,$e as b,qe as c,it as d,Ze as e,Xe as f,We as g,Ye as h,dt as i,Ge as j,Zt as k,rr as l,vt as m,Qt as n,ut as o,tr as p,$t as q,Jt as r,er as s,ze as t,Mt as u,Je as w};
@@ -0,0 +1 @@
1
+ import{r as e,j as s}from"./react-dom-BwC4eQlG.js";import{g as n,a as i,u as a,bC as t,bD as r,bE as o,M as l,O as d,Q as c,e as u,m,S as h,o as p,T as j}from"./main-BrkS-iow.js";import{m as f}from"./signals-DdOHdr--.js";import{a6 as x,a7 as v,a8 as b,a9 as k,s as y,d as _,aa as g}from"./drop-open-BjgdLxWM.js";import{u as w}from"./react-router-XsJY84ug.js";import{i as N,S}from"./InvokeScreen-C-kFFYVF.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"./seams-DJ_lslby.js";import"./hosted-model-authority-CcNPE44H.js";import"./native-worker-zod-jitless-ba55e4a3-DZHC6DC7.js";import"./model-provider-B6oAnQX9.js";import"./identity-BVf8yWa4.js";import"./native-worker-zod-5c0ed887-B342B6ko.js";const E=x.approval_required,R="identity.interaction",z={approved:null,denied:null,consumed:x.interaction_consumed,expired:x.interaction_expired,revoked:x.interaction_revoked,missing:x.interaction_not_found,refused:v.linkRefused},C={phase:{kind:"loading"},message:null};function I({outcome:n,words:i}){const a=e.useRef(null),t=function(e){return{tone:k[e]?"err":"ok",label:b[e],words:z[e]??b[e]}}(n);return e.useEffect(()=>{a.current?.focus()},[]),s.jsx("section",{className:"panel","aria-label":t.label,ref:a,tabIndex:-1,children:s.jsx("div",{className:"panel__head",children:s.jsxs("h2",{children:[t.label," ",s.jsx(S,{tone:t.tone,label:i??t.words})]})})})}function A({message:e}){return s.jsx("output",{"aria-live":"polite",children:e?s.jsx(S,{tone:"err",label:e}):null})}function q({phase:e,view:n,online:i}){const{view:a,mechanism:t}=e,{busy:r}=n;return s.jsxs("section",{className:"panel","aria-label":a.title,children:[s.jsx("div",{className:"panel__head",children:s.jsx("h2",{children:a.title})}),s.jsxs("div",{className:"panel__body",children:[s.jsx("dl",{className:"kv",children:void 0===a.match?null:s.jsxs("div",{children:[s.jsx("dt",{children:g.match}),s.jsx("dd",{children:s.jsx("strong",{children:a.match})})]})}),s.jsx("ul",{children:a.facts.map(e=>s.jsx("li",{children:e},e))}),s.jsxs(h,{label:g.approve,icon:s.jsx(j,{size:18}),disabled:r||!i||void 0===t,busy:r,onClick:n.approve,children:[s.jsx(u,{label:g.deny,disabled:r||!i,onClick:n.deny,children:s.jsx(p,{size:16})}),s.jsx(A,{message:n.step.message})]})]})]})}function L({ceremonyRef:a}){const r=i(),o=function(s){const[i]=e.useState(()=>(e=>N(e))(s)),a=n(),[t,r]=e.useState(C),[o,l]=e.useState(!1),d=e.useRef(!0);e.useEffect(()=>(d.current=!0,()=>{d.current=!1}),[]);const c=e.useCallback(async e=>{l(!0);try{const s=await e();if(!s||!d.current)return;r(s);const n=function(e){return e.message?e.message:"done"===e.phase.kind?z[e.phase.outcome]:null}(s);n?function(e){y({id:R,tone:"err",title:"Approval",body:e})}(n):_(R)}finally{d.current&&l(!1)}},[]);return e.useEffect(()=>{c(()=>i.load())},[i]),e.useEffect(()=>{a&&"signin"===i.phase().kind&&c(()=>i.read())},[a]),e.useEffect(()=>{const e=()=>{"hidden"!==document.visibilityState&&"review"===i.phase().kind&&c(()=>i.read())};return document.addEventListener("visibilitychange",e),()=>document.removeEventListener("visibilitychange",e)},[i,c]),{step:t,busy:o,load:()=>{c(()=>i.load())},read:()=>{c(()=>i.read())},approve:()=>{c(()=>i.approve())},deny:()=>{c(()=>i.deny())}}}(a),h=e.useRef(null),{phase:p,message:j}=o.step;e.useEffect(()=>{const e=document.activeElement===h.current?.closest("main");(l()||e)&&d(c(h.current))},[p.kind]);let f=null;return"done"===p.kind?f=s.jsx(I,{outcome:p.outcome}):"review"===p.kind?f=s.jsx(q,{phase:p,view:o,online:r}):"stalled"===p.kind?f=s.jsx("section",{className:"panel","aria-label":g.retry,children:s.jsx("div",{className:"panel__body",children:s.jsxs("div",{className:"actions",children:[s.jsx(u,{label:g.retry,disabled:o.busy||!r,onClick:o.load,children:s.jsx(m,{size:16})}),s.jsx(A,{message:j})]})})}):"signin"===p.kind&&(f=s.jsxs(s.Fragment,{children:[s.jsxs("section",{className:"panel","aria-label":g.read,children:[s.jsx("div",{className:"panel__head",children:s.jsxs("h2",{children:[g.read," ",s.jsx(S,{tone:"warn",label:j??E})]})}),p.expiresAt?s.jsx("div",{className:"panel__body",children:s.jsx("p",{className:"hint",children:s.jsx("time",{dateTime:p.expiresAt.toISOString(),children:p.expiresAt.toLocaleString()})})}):null]}),s.jsx(t,{online:r,what:"the requests sent to you",lockIssuer:!0})]})),s.jsx("div",{ref:h,children:f})}function O(){const n=i(),l=a(),d=function(){const{pathname:s}=w(),[n]=e.useState(()=>(r(),o()));return function(e,s){const n=f("interaction",s)?.ref;return"interaction"===e.kind&&e.ref===n?{kind:"ceremony",ref:e.ref}:"refused"===e.kind?{kind:"ended",outcome:"refused",words:v.linkRefused}:{kind:"ended",outcome:"missing",words:x.interaction_not_found}}(n,s)}();return s.jsxs("div",{className:"section__inner",children:[s.jsx("div",{className:"section__head",children:s.jsx("h1",{children:g.title})}),"ended"===d.kind?s.jsx(I,{outcome:d.outcome,words:d.words}):l?s.jsx(L,{ceremonyRef:d.ref}):s.jsx(t,{online:n,what:"the requests sent to you",lockIssuer:!0})]})}export{O as InteractionScreen};
@@ -0,0 +1 @@
1
+ import{o as e,c as t,A as n,b as r,q as a,u as i,h as s,ae as o,ak as c}from"./vault-ui-seam-BQGS7RR6.js";import{d as l,c as d}from"./native-worker-bytes-a0e18d71-DFmKzL3P.js";import{L as u,K as f,h,g as p}from"./model-provider-B6oAnQX9.js";import{j as m,r as v,a as y}from"./react-dom-BwC4eQlG.js";import{n as w,bY as b,b8 as j,z as x,o as g,dx as k,bW as E,dy as N,dz as _,d2 as I,S as z,dA as A,dB as D,dC as T,dD as S,dE as L,ai as C,c2 as R,M as O,O as $}from"./main-BrkS-iow.js";import{a1 as q,G as F,I as M,E as B,z as U}from"./signals-DdOHdr--.js";import{dB as J,dC as P,dD as W,dE as H,dF as G,dG as K,s as Q,d as V,dH as Y}from"./drop-open-BjgdLxWM.js";import{d as Z,W as X,e as ee}from"./identity-BVf8yWa4.js";import{u as te,c as ne,L as re}from"./react-router-XsJY84ug.js";const ae=1073741824,ie="file part is missing";function se(a){let i;try{i=e(JSON.parse(a))}catch{return}if(!t(i)||1!==i.v||!Array.isArray(i.parts))return;const s=n(i.name),o=n(i.mediaType),c=n(i.key),l=r(d=i.size)&&Number.isInteger(d)&&d>=0?d:void 0;var d;if(void 0===s||void 0===o||void 0===c||void 0===l)return;const u=[];for(const e of i.parts){if(!t(e))return;const r=n(e.key),a=n(e.nonce);if(void 0===r||void 0===a)return;u.push({key:r,nonce:a})}return{v:1,name:s,mediaType:o,size:l,key:c,parts:u}}function oe(e){const t=se(e);return void 0===t?null:{name:t.name,mediaType:t.mediaType,size:t.size}}function ce(e){return l(e).replaceAll("+","-").replaceAll("/","_")}async function le(e,t,n){for(const r of e)await r.putObject(t,n)}async function de(e,t,n,r,a){const i=n*a,s=t.subarray(i,Math.min(i+a,t.byteLength)),o=u(12),c=await h(e,s,o,(new TextEncoder).encode(`${n}:${r}`));return{ref:{key:ce(o),nonce:l(o)},body:c}}async function ue(e){if(0===e.stores.length)throw new Error("file needs a store");const t=e.partBytes??1048576,n=e.maxBytes??ae;if(t<1)throw new Error(ie);if(e.bytes.byteLength>n)throw new Error("file exceeds the size limit");const{key:r,encoded:a}=await async function(){const e=u(32);try{return{key:await f(e),encoded:l(e)}}finally{e.fill(0)}}(),i=function(e,t){return 0===e?0:Math.ceil(e/t)}(e.bytes.byteLength,t),s=[];for(let o=0;o<i;o+=1){const n=await de(r,e.bytes,o,i,t);await le(e.stores,n.ref.key,n.body),s.push(n.ref)}return JSON.stringify({v:1,name:e.name,mediaType:e.mediaType,size:e.bytes.byteLength,key:a,parts:s})}async function fe(e,t,n,r,a){const i=await async function(e,t){for(const n of e){const e=await n.getObject(t);if(null!==e)return e}throw new Error(ie)}(a,t.key);try{return await p(e,d(t.nonce),i,(new TextEncoder).encode(`${n}:${r}`))}catch(s){if(s instanceof Error)throw new Error(ie);throw s}}function he(e,t){const n=new Uint8Array(t);let r=0;for(const a of e)n.set(a,r),r+=a.byteLength;if(r!==t)throw new Error(ie);return n}async function pe(e,t){const n=se(e);if(void 0===n)throw new Error(ie);const r=await async function(e){const t=d(e);try{return await f(t)}finally{t.fill(0)}}(n.key),a=n.parts.length,i=[];for(let s=0;s<a;s+=1){const e=n.parts[s];if(void 0===e)throw new Error(ie);i.push(await fe(r,e,s,a,t))}return{name:n.name,mediaType:n.mediaType,bytes:he(i,n.size)}}function me(e){const t=n(e);if(void 0===t)return;const r=new Date(t);return Number.isNaN(r.getTime())?void 0:r}function ve(e){const t=n(e.kind),r=n(e.status),a=me(e.expiresAt);if(void 0===t||void 0===r||void 0===a)throw J();return{kind:t,status:r,expiresAt:a,requiresApprover:!0===e.requiresApprover}}function ye(e){const r=ve(e),a=n(e.id),i=me(e.createdAt);if(void 0===a||void 0===i)throw J();const s=n(e.requesterRef),o=n(e.bindingMessage),c=n(e.requestDigest),l=n(e.resourceRef),d=me(e.decidedAt);return{...r,id:a,createdAt:i,authorizationDetails:(u=e.authorizationDetails,Array.isArray(u)?u.filter(e=>t(e)):[]),...void 0===s?void 0:{requesterRef:s},...void 0===o?void 0:{bindingMessage:o},...void 0===c?void 0:{requestDigest:c},...void 0===l?void 0:{resourceRef:l},...void 0===d?void 0:{decidedAt:d}};var u}function we({ok:e=!0,top:t,name:n,facts:r,primary:a,secondary:i,alts:s=[],children:o}){return m.jsxs(m.Fragment,{children:[m.jsxs("div",{className:"found"+("danger"===a?.tone?" found--ask":e?"":" found--attn"),children:[t?m.jsxs("p",{className:"found__top",children:[m.jsx(e?w:b,{size:15}),t]}):null,m.jsx("p",{className:"found__name",children:n}),r&&r.length>0?m.jsx("dl",{children:r.map(e=>m.jsxs(v.Fragment,{children:[m.jsx("dt",{children:e.key}),m.jsx("dd",{children:e.value})]},e.key))}):null,o,a||i?m.jsx(be,{primary:a,secondary:i}):null]}),m.jsx(ke,{alts:s})]})}function be({primary:e,secondary:t}){return m.jsxs("div",{className:"go-row found__do",children:[e?m.jsx(je,{primary:e}):null,t?m.jsx(xe,{secondary:t}):null]})}function je({primary:e}){return e.choice?m.jsx(ge,{entry:e,primary:!0}):m.jsxs(m.Fragment,{children:[m.jsx("button",{ref:e.keyRef,type:e.submit?"submit":"button",className:"go",disabled:e.disabled||e.busy,"aria-busy":e.busy||void 0,"aria-label":e.label,title:e.label,onClick:e.submit?void 0:e.onClick,children:e.icon??m.jsx("danger"===e.tone?x:w,{size:18})}),m.jsx("span",{className:"go-verb","aria-hidden":"true",children:e.label})]})}function xe({secondary:e}){return e.choice?m.jsx(ge,{entry:e}):m.jsx("button",{ref:e.keyRef,type:"button",className:"icon-btn",disabled:e.disabled||e.busy,"aria-busy":e.busy||void 0,"aria-label":e.label,title:e.label,onClick:e.onClick,children:e.icon??m.jsx(g,{size:18})})}function ge({entry:e,primary:t=!1}){return m.jsx("button",{ref:e.keyRef,type:e.submit?"submit":"button",className:t?"btn btn--primary choice":"btn choice",disabled:e.disabled||e.busy,"aria-busy":e.busy||void 0,onClick:e.submit?void 0:e.onClick,children:e.label})}function ke({alts:e}){const[t,n]=v.useState(null);return 0===e.length?null:m.jsxs(m.Fragment,{children:[m.jsx("p",{className:"or",children:m.jsx("span",{children:"or"})}),m.jsx("div",{className:"alt",children:e.map(e=>{const r=t===e.id;return m.jsxs("div",{className:"alt__item",children:[m.jsxs("button",{type:"button",className:"alt__btn","aria-expanded":r,"aria-controls":`alt-${e.id}`,onClick:()=>n(r?null:e.id),children:[m.jsx("span",{className:"alt__mark","aria-hidden":"true",children:e.icon}),m.jsx("span",{className:"alt__grow",children:e.label}),m.jsx("span",{className:"alt__chev"+(r?" is-open":""),"aria-hidden":"true",children:m.jsx(j,{size:16})})]}),r?m.jsx("div",{className:"alt__body",id:`alt-${e.id}`,children:e.render()}):null]},e.id)})})]})}const Ee=["a[href]","button","input","select","textarea","label","summary","[role=button]","[role=link]","[role=tab]","[role=tree]","[role=treeitem]","[role=menuitem]","[role=option]","[role=switch]","[role=checkbox]","[role=radio]"].join(",");function Ne(e){return e.includes("ok")||"live"===e?"ok":e.includes("warn")||"attn"===e?"warn":e.includes("err")||"down"===e?"err":"idle"}function _e({tone:e,size:t}){return m.jsx("ok"===e?w:"warn"===e?b:"err"===e?g:E,{size:t})}function Ie({anchor:e,label:t}){const n=v.useRef(null);return v.useLayoutEffect(()=>{const t=n.current;if(!t)return;const{left:r,top:a}=function(e,t,n){const r=Math.min(Math.max(e.left+e.width/2-t.width/2,8),Math.max(8,n.width-t.width-8)),a=e.top-t.height-6;return{left:r,top:a>=8?a:e.bottom+6}}(e.getBoundingClientRect(),t.getBoundingClientRect(),{width:document.documentElement.clientWidth});t.style.left=`${r}px`,t.style.top=`${a}px`},[e]),y.createPortal(m.jsx("span",{ref:n,className:"status-bubble","aria-hidden":"true",children:t}),document.body)}function ze({tone:e,label:t}){const n=v.useRef(null),{open:r,tappable:a}=function(e){const[t,n]=v.useState(!1),[r,a]=v.useState(!1);return v.useEffect(()=>{const t=e.current;if(!t||function(e){return null!=e.parentElement?.closest(Ee)}(t))return;let r;a(!0);let i=!1,s=!1;const o=()=>{i=!1,n(!1)},c=()=>{window.clearTimeout(r),r=window.setTimeout(o,3200)},l=()=>{i=!0,n(!0),c()},d=e=>{s=function(e){return"touch"===e.pointerType||"pen"===e.pointerType}(e)},u=()=>{i&&c()},f=e=>{s&&e.preventDefault()},h=k(t,l);return t.addEventListener("click",l),t.addEventListener("pointerdown",d),t.addEventListener("pointerup",u),t.addEventListener("contextmenu",f),()=>{window.clearTimeout(r),h(),t.removeEventListener("click",l),t.removeEventListener("pointerdown",d),t.removeEventListener("pointerup",u),t.removeEventListener("contextmenu",f)}},[e]),v.useEffect(()=>{if(!t)return;const r=()=>n(!1),a=t=>{const n=t.target;n instanceof Node&&e.current?.contains(n)||r()},i=e=>{"Escape"===e.key&&(e.preventDefault(),e.stopImmediatePropagation(),r())};return document.addEventListener("pointerdown",a,!0),window.addEventListener("keydown",i,!0),window.addEventListener("scroll",r,!0),window.addEventListener("resize",r),()=>{document.removeEventListener("pointerdown",a,!0),window.removeEventListener("keydown",i,!0),window.removeEventListener("scroll",r,!0),window.removeEventListener("resize",r)}},[t,e]),{open:t,tappable:r}}(n);return m.jsxs("span",{ref:n,className:`status-mark status-mark--${e}`,role:"img","aria-label":t,title:t,"data-touch-twin":a?"":void 0,children:[m.jsx(_e,{tone:e,size:14}),r&&n.current?m.jsx(Ie,{anchor:n.current,label:t}):null]})}function Ae(e){return De(e.map(e=>({...e,keepEmpty:!0})))}function De(e){const t=[];for(const n of e){const e=(n.items??[]).map(e=>({...e,children:[],branch:!1})),r=[...e.filter(e=>e.first),...De(n.sections??[]),...e.filter(e=>!e.first)];(0!==r.length||n.keepEmpty)&&t.push({id:n.id,label:n.label,href:n.href,selectTo:n.selectTo,dir:n.dir,count:n.count,config:n.config,guide:n.guide,children:r,branch:!0,collection:void 0!==n.items})}return t}function Te(e,t){return!!e&&(t===e||!!t.startsWith(e)&&"/?#&-".includes(t.charAt(e.length)))}function Se(e){if(void 0!==e.count)return e.count;if(!e.branch)return 1;let t=0;for(const n of e.children)t+=Se(n);return t}function Le({icon:e,label:t,mark:n,sub:r,action:a}){return m.jsxs("div",{className:"sw sw--method",children:[m.jsxs("div",{children:[m.jsxs("div",{className:"sw__name",children:[e,t,n?m.jsx(ze,{tone:n.tone,label:n.label}):null]}),r?m.jsx("p",{className:"sw__sub",children:r}):null]}),a]})}const Ce={fetch:(e,t)=>ee(e,t),anonymous:(e,t)=>X(e,{...t,credentials:"omit"}),signedIn:()=>null!==Z()};function Re(e=Ce){return function({baseUrl:e,fetchImpl:r,bearer:a,resolveFetch:i=r}){const s=function(e){let t=e.length;for(;t>0&&47===e.charCodeAt(t-1);)t-=1;return e.slice(0,t)}(e);function o(e,t=""){if(!q(e))throw new H(0,"interaction_not_found");return`${s}/v1/interactions/${encodeURIComponent(e)}${t}`}function c(){const e=a?.()??null;return null===e||0===e.length?{}:{authorization:`Bearer ${e}`}}async function l(e,t,n=r){let a;try{a=await n(e,t)}catch{throw J()}if(!a.ok)throw await P(a);const i=await W(a);if(null===i)throw J();return i}async function d(e,t,n){return ye(await l(o(e,t),{method:"POST",headers:{"content-type":"application/json",...c()},body:JSON.stringify(n)}))}return{resolveInteraction:async e=>ve(await l(function(e){if(!q(e))throw new H(0,"interaction_not_found");return`${s}/i/${encodeURIComponent(e)}`}(e),{method:"GET",headers:{accept:"application/json"}},i)),readInteraction:async e=>ye(await l(o(e),{method:"GET",headers:c()})),async beginInteractionActivation(e,{requestDigest:r}){const a=await l(o(e,"/activation"),{method:"POST",headers:{"content-type":"application/json",...c()},body:JSON.stringify({requestDigest:r,decision:"approved"})}),i=n(a.activationId),s=me(a.expiresAt),d=a.options;if(void 0===i||void 0===s||!t(d))throw J();return{activationId:i,options:d,expiresAt:s}},async completeInteractionActivation(e,t){const r=await l(o(e,"/activation/complete"),{method:"POST",headers:{"content-type":"application/json",...c()},body:JSON.stringify({activationId:t.activationId,credentialId:t.credentialId,clientDataJSON:t.clientDataJSON,authenticatorData:t.authenticatorData,signature:t.signature})}),a=n(r.activationId),i=n(r.state);if(void 0===a||void 0===i)throw J();return{activationId:a,state:i}},async approveInteraction(e,{requestDigest:t,activationId:n}){const r={requestDigest:t};return void 0!==n&&(r.activationId=n),d(e,"/approve",r)},denyInteraction:async(e,{requestDigest:t})=>d(e,"/deny",{requestDigest:t})}}({baseUrl:"",fetchImpl:(t,n)=>e.fetch(String(t),n??{}),resolveFetch:(t,n)=>e.anonymous(String(t),n??{})})}const Oe={available:()=>void 0!==a()&&void 0!==i(),async assert(e){const t=F(e);if(!t)throw new G("invalid_options");return function(e){if(!e)throw new G("cancelled");if(!B(e))throw new G("invalid_credential");try{return U(e)}catch{throw new G("invalid_credential")}}(await async function(e){const t=i();if(!t)throw new G("unavailable");try{return await t.get(e)}catch{throw new G("cancelled")}}(M(t)))}};function $e(e,t={transport:Ce,authenticator:Oe}){return K({client:Re(t.transport),authenticator:t.authenticator,signedIn:()=>t.transport.signedIn()},e)}const qe="identity.device-approval",Fe="That link carried more than a user code, so it was not used. Enter the code the device shows.",Me="The approval did not complete. Try again.";function Be(e){return Q({id:qe,tone:"err",title:"Device approval",body:e}),{tone:"err",words:e}}function Ue(){return Be(Fe)}function Je({online:e,arrivedCode:t=null,initialResult:n=null,id:r="device-approval-code"}){const[a,i]=v.useState(t??""),[s,o]=v.useState(!1),[c,l]=v.useState(n),d=v.useRef(null),u=v.useRef(null);return v.useEffect(()=>{t&&e?u.current?.focus():d.current?.focus()},[t,e]),m.jsxs("form",{className:"device-approval",onSubmit:e=>{!async function(e){if(e.preventDefault(),!a.trim()||s)return;o(!0),l(null);const t=await async function(e){const t=N(e);try{const e=await _(t);return e.ok?(V(qe),I(),{tone:"ok",userCode:t}):Be(Y("host_approval_failed",e.status)??Me)}catch(n){return Be(n instanceof Error?n.message:Me)}}(a);o(!1),l(t),"ok"===t.tone?i(t.userCode):d.current?.focus()}(e)},noValidate:!0,children:[m.jsxs("div",{className:"field",children:[m.jsx("label",{htmlFor:r,children:"User code"}),m.jsxs("div",{className:"field-inline",children:[m.jsx("input",{id:r,ref:d,type:"text",className:"mono",autoComplete:"off",autoCapitalize:"characters",spellCheck:!1,placeholder:"WORD-WORD",value:a,disabled:s,"aria-describedby":c?`${r}-mark`:void 0,onChange:e=>{i(e.target.value),c&&(l(null),V(qe))}}),m.jsx("output",{id:`${r}-mark`,"aria-live":"polite",children:c?m.jsx(ze,{tone:c.tone,label:"ok"===c.tone?"Device approved":c.words}):null})]})]}),m.jsx(z,{label:s?"Approving…":"Approve device",buttonRef:u,disabled:s||!e||!a.trim(),busy:s})]})}function Pe(e){if(!/^[A-Za-z0-9_-]{16}$/.test(e))throw new Error("file part is missing");return e}const We=new Set;function He(e){return We.add(e),()=>We.delete(e)}async function Ge(){const e=await Ke();return[e,...[...We].flatMap(t=>t(e))]}async function Ke(){const e=await async function(){const e=o();if(void 0===e)throw new Error("file needs a store");return(await e()).getDirectoryHandle(c,{create:!0})}();return{async putObject(t,n){const r=await e.getFileHandle(Pe(t),{create:!0}),a=await r.createWritable();await a.write(s(n)),await a.close()},async getObject(t){try{const n=await e.getFileHandle(Pe(t)),r=await n.getFile();return new Uint8Array(await r.arrayBuffer())}catch(n){if(n instanceof DOMException&&"NotFoundError"===n.name)return null;throw n}}}}const Qe="identity.invocation";function Ve(e){v.useEffect(()=>{const t=document.activeElement===document.getElementById("main");(O()||t)&&$(e.current)},[])}function Ye({invocation:e}){const t=v.useRef(null);Ve(t);const n=e.requestHost??e.handle;return m.jsx("section",{className:"panel","aria-label":T.title[e.kind],children:m.jsxs("div",{className:"panel__body",children:[m.jsx("dl",{className:"kv",children:m.jsxs("div",{children:[m.jsx("dt",{children:T.handle[e.handleName]}),m.jsx("dd",{children:m.jsx("code",{children:n})})]})}),m.jsxs("div",{className:"go-row",children:[m.jsx("a",{ref:t,className:"go",href:e.appUrl,"aria-label":T.open,title:T.open,children:m.jsx(C,{size:18})}),m.jsx("span",{className:"go-verb","aria-hidden":"true",children:T.open}),e.browserFallback?m.jsx(re,{className:"icon-btn",to:e.browserFallback,"aria-label":T.fallback,title:T.fallback,children:m.jsx(R,{size:16})}):null]})]})})}function Ze({words:e}){const t=v.useRef(null);return Ve(t),m.jsx("section",{className:"panel","aria-label":T.refused,ref:t,tabIndex:-1,children:m.jsx("div",{className:"panel__head",children:m.jsxs("h2",{children:[T.refused," ",m.jsx(ze,{tone:"err",label:e})]})})})}const Xe=Object.freeze(Object.defineProperty({__proto__:null,InvokeScreen:function(){const e=function(){const e=te(),t=ne(),[n]=v.useState(()=>(S(),function(e,t){const n=A(t);return"none"!==e.arrival.kind&&null!==n&&A(e.at)===n?e.arrival:{kind:"refused",words:D.tooLong}}(L(),e.pathname)));return v.useEffect(()=>{"refused"===n.kind?Q({id:Qe,tone:"err",title:T.refused,body:n.words}):V(Qe),(e.search||e.hash)&&t(e.pathname,{replace:!0})},[]),n}();return m.jsxs("div",{className:"section__inner",children:[m.jsx("div",{className:"section__head",children:m.jsx("h1",{children:"handoff"===e.kind?T.title[e.invocation.kind]:T.heading})}),"handoff"===e.kind?m.jsx(Ye,{invocation:e.invocation}):m.jsx(Ze,{words:e.words})]})}},Symbol.toStringTag,{value:"Module"}));export{we as C,Je as D,Xe as I,ae as M,ze as S,Le as a,Se as b,ue as c,Ge as d,Fe as e,oe as f,Oe as g,Te as h,$e as i,se as j,He as k,Ke as l,ke as m,De as n,pe as o,Ae as p,Ue as r,Ne as s};
@@ -0,0 +1 @@
1
+ .status-bubble{position:fixed;z-index:70;max-width:min(20rem,calc(100vw - 16px));padding:.35rem .55rem;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);box-shadow:var(--shadow);font:.8125rem var(--mono);overflow-wrap:anywhere;pointer-events:none}
@@ -0,0 +1 @@
1
+ import{j as e,r as t}from"./react-dom-BwC4eQlG.js";import{c as s,u as a,a as i,L as n}from"./react-router-XsJY84ug.js";import{u as r,b as o,F as l,C as d,R as c,c as m,d as u}from"./wake-lock-C_y0fQco.js";import{bL as p,bM as h,D as j,bN as f,bO as v,bP as g,bQ as b,bR as x,bS as y,bT as w,K as N,e as _,m as S,bU as k,aA as P}from"./main-BrkS-iow.js";import{S as R}from"./InvokeScreen-C-kFFYVF.js";import{U as T}from"./vault-menu-CqO_AStq.js";import{u as E}from"./vault-list-path-Bh2_KZkq.js";import{I as O,a as I,u as C}from"./item-secret-update-BGxSkyWF.js";import{E as U}from"./EmptyTip-DnxQjLsP.js";import{n as A,p as F}from"./identity-view-paths-Bi1yigZk.js";import{u as q,S as L}from"./item-contributions-BNmtlrGT.js";import{M as $}from"./vault-ui-seam-BQGS7RR6.js";import{p as D}from"./rotation-relay-DCS7Aa59.js";import{u as z}from"./use-password-reset-generate-B11XaeM6.js";import{ae as H,af as M}from"./drop-open-BjgdLxWM.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"./signals-DdOHdr--.js";import"./seams-DJ_lslby.js";import"./native-worker-noble-hashes-b1a58353-IgGIMWEC.js";import"./pane-trail-dW-2RSUm.js";import"./MethodPicker-CqQTyAaT.js";import"./idp-presets-B1M-P0Ek.js";import"./password-workflows-Cmir8qky.js";import"./context-CL4-cwvA.js";import"./noble-crypto-Mv8l2A7D.js";import"./listing-page-B-c8QQVp.js";import"./section-nav-goals-B_N-ZW2I.js";import"./native-worker-noble-ciphers-708367a7-BPuD3lXB.js";import"./payload-CVz3G9cA.js";import"./compartment-guard-D3FuKM8N.js";import"./support-context-DrcseTKK.js";import"./vaults-B043odav.js";import"./connectivity-monitor-B0ueE5HQ.js";import"./IdentityConnectionSignIn-Bg53RjtJ.js";import"./federation-configured-restoration-DWAXgzcz.js";import"./entra-instances-NyEKYI5c.js";import"./bucket-saved-vQCiVvN_.js";import"./certs-CDCfMuEi.js";import"./tailscale-artifacts-FyY85j_Y.js";import"./vault-credential-custody-DpnBb4qo.js";import"./native-auth-return-BTXjvSvx.js";import"./gate-seat-DHBrLaMG.js";import"./consent-CcqmRPoB.js";import"./scroll-renderer-CPxIcBzQ.js";import"./features-9FeW22VH.js";import"./native-identity-admission-C4ZFillF.js";import"./byo-B-SNpHiS.js";import"./FeatureSections-BG-JsWID.js";import"./iam-zBfzStfy.js";import"./directory-signin-model-BfxENbC3.js";function Q({listPath:t}){return e.jsx("div",{className:"detail",children:e.jsxs("div",{className:"empty",children:[e.jsx("h2",{children:"That item is not in this vault"}),e.jsx(U,{tip:"escBack"}),e.jsx(T,{pane:"list",className:"btn btn--sm",to:t,children:"Back to the vault"})]})})}function B({schedule:t,onToggle:s}){return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"frow",children:[e.jsxs("div",{children:[e.jsx("div",{className:"label",children:"Automatic rotation"}),e.jsxs("p",{className:"frow__value",children:[t.enabled?"On":"Off"," · ",(i=t.intervalDays,1===i?"every day":`every ${i} days`)]})]}),e.jsx("button",{type:"button",className:"btn btn--sm","aria-label":"Automatic rotation","aria-pressed":t.enabled,onClick:s,children:t.enabled?"On":"Off"})]}),e.jsx("output",{className:"hint",children:t.enabled?`Next due ${a=t.nextDueAt,new Date(a).toLocaleDateString(void 0,{dateStyle:"medium"})}`:"Off"})]});var a,i}function G({warning:t,event:s,runHint:a}){return t||s||a?e.jsxs(e.Fragment,{children:[t?e.jsx("output",{className:"hint",children:t}):null,a?e.jsx("output",{className:"hint",children:a}):null,s?e.jsx("output",{className:"hint",children:"out-of-sync"===s.state?"Out of sync — the rotation is queued, but no relay is configured to verify it.":"Rotation queued; waiting for the vault relay."}):null]}):null}function K({item:s,scope:a}){const{mode:i,warning:n,schedule:r,event:o,runHint:l,busy:d,error:c,toggle:m,rotate:u}=function(e,s){const a=H(e),i=h(a),n="automatic"===i?j(e):null,r="automatic"!==i||n?f(a):"Automatic rotation couldn't verify this account: it has no https site to rotate.",[o,l]=t.useState(0),[d,c]=t.useState(!1),[m,u]=t.useState(null),{eligible:p,generate:N}=z(e,s);t.useEffect(()=>v(()=>l(e=>e+1)),[]),t.useEffect(()=>$.subscribeRuns(()=>l(e=>e+1)),[]),t.useEffect(()=>{"automatic"===i&&n&&s&&g(e,s)},[e,i,n,s]);const _="automatic"===i?b(s,e.id):null,S=x(s,e.id),k=function(e){switch(e){case"queued":return"Password reset queued.";case"in-progress":return"Password reset in progress.";case"needs-you":return"Password reset needs you on the provider site.";case"failed":return"Password reset could not finish.";default:return null}}($.runPhaseFor(s,e.id));return{mode:i,warning:r,schedule:_,event:S,runHint:k,busy:d,error:m,toggle:()=>{_&&(u(null),w(s,e.id,!_.enabled))},rotate:async()=>{c(!0),u(null);try{if(!p){if(!s)throw new Error("The vault is not open.");if(!y(e,s))throw new Error("This item type has no generator.");return void(await D(s))}const t=await N();if("no-scope"===t)throw new Error("The vault is not open.");if("ineligible"===t)throw new Error("This item type has no generator.")}catch{u("The rotation could not be queued.")}finally{c(!1)}}}}(s,a);return"none"===i?null:e.jsxs("section",{className:"detail__group","aria-label":"Rotation",children:[e.jsx("h2",{className:"detail__grouphead",children:"Rotation"}),r?e.jsx(B,{schedule:r,onToggle:m}):null,e.jsx(G,{warning:n,event:o,runHint:l}),e.jsx(N,{id:`rotation:${s.id}`,title:"Rotation",message:c}),e.jsx(_,{label:"Generate new password",disabled:d,"aria-busy":d,onClick:()=>{u()},children:e.jsx(S,{size:16})})]})}function Y(){const{itemId:h}=i(),j=a(),{listPath:f,backLabel:v}=E(j.search),{items:g,folders:b,guest:x}=r(),y=u(),w=y.activeTomb?.()??"",N=k(w,g),{copied:_,failed:S,copy:U}=o(),[$,D]=t.useState(new Set),[z,B]=t.useState(!1),G=g.find(e=>e.id===h),{tool:Y,ceremony:J}=function(i,n){const r=()=>"drop"===new URLSearchParams(n).get("share"),[o,l]=t.useState(r),d=t.useRef(null),c=s(),m=a(),u=A("/access"),h=q(),j=i?.id;return t.useEffect(()=>{r()&&l(!0)},[j,n]),void 0!==i&&h&&null===i.deletedAt&&"drop"!==i.kind&&null!==p(i)?{tool:{open:o,onOpen:()=>l(!0),onGrant:u?()=>c(F(i.id)):void 0,onShare:navigator.share instanceof Function?()=>{navigator.share({title:i.name,text:i.name}).catch(()=>{})}:void 0,keyRef:d},ceremony:e.jsx(L,{item:i,open:o,onClose:()=>{l(!1),d.current?.focus();const e=new URLSearchParams(m.search);if("drop"===e.get("share")){e.delete("share");const t=e.toString();c({pathname:m.pathname,search:t?`?${t}`:""},{replace:!0})}}})}:{tool:void 0,ceremony:null}}(G,j.search);if(t.useEffect(()=>{D(new Set),B(!1)},[h]),!G)return e.jsx(Q,{listPath:f});const X=N.get(G.id)?.incoming??[],Z=e=>D(t=>{const s=new Set(t);return s.has(e)?s.delete(e):s.add(e),s}),V=b.find(e=>e.id===G.folderId),W=null!==G.deletedAt;return e.jsxs("div",{className:"detail",children:[e.jsxs("div",{className:"detail__head",children:[e.jsx(T,{pane:"list","data-pane-close":"",className:"icon-btn detail__backbtn","aria-label":v,title:v,to:f,children:e.jsx(P,{size:17})}),e.jsxs("div",{className:"detail__heading",children:[e.jsx("h1",{children:G.name||"Untitled"}),e.jsxs("div",{className:"detail__meta",children:[e.jsx("span",{children:M(H(G))}),V?e.jsx(n,{to:`/vault?folder=${encodeURIComponent(V.id)}`,children:V.name}):null,e.jsxs("span",{children:["Updated ",(ee=G.updatedAt,new Date(ee).toLocaleString(void 0,{dateStyle:"medium",timeStyle:"short"}))]}),X.length>0?e.jsxs("span",{className:"detail__sharedby",children:["Shared by ",X.map(e=>e.name).join(", ")]}):null,W?e.jsx(R,{tone:"warn",label:"In trash"}):null]})]}),e.jsx(O,{item:G,listPath:f,confirmPurge:z,onConfirmPurge:B,share:Y})]}),e.jsx(I,{item:G,revealed:$,toggle:Z,copied:_,failed:S,copy:U,onUpdateSecret:e=>C(G,e,y.saveItem)}),e.jsx(K,{item:G,scope:x?"":w}),J,G.fields.length>0?e.jsxs("section",{className:"detail__group",children:[e.jsx("h2",{className:"detail__grouphead",children:"Custom fields"}),G.fields.map(t=>e.jsx(l,{label:t.name||"Field",actions:e.jsxs(e.Fragment,{children:[t.hidden?e.jsx(c,{revealed:$.has(t.id),label:t.name,onToggle:()=>Z(t.id)}):null,e.jsx(m,{value:t.value,label:t.name,fieldKey:t.id,copied:_,failed:S,onCopy:U})]}),children:t.hidden?e.jsx(d,{value:t.value,label:t.name,revealed:$.has(t.id)}):e.jsx("span",{className:"frow__value",children:t.value})},t.id))]}):null,G.notes&&"note"!==G.kind?e.jsxs("section",{className:"detail__group",children:[e.jsx("h2",{className:"detail__grouphead",children:"Notes"}),e.jsx("div",{className:"frow",children:e.jsx("p",{className:"frow__notes",children:G.notes})})]}):null,z?e.jsx("p",{className:"visually-hidden",role:"alert",children:"Purging deletes the encrypted record permanently. Press the trash key again to confirm — this cannot be undone."}):null]});var ee}export{Y as ItemDetail};
@@ -0,0 +1 @@
1
+ import{r as e,j as t}from"./react-dom-BwC4eQlG.js";import{e as n,aE as a,aF as s,dJ as i,dK as r,dL as o,m as l,b3 as d,v as c,dj as u,dM as m,o as h,n as p,A as f,dI as x,cl as v,dN as j,K as g}from"./main-BrkS-iow.js";import{F as b,dI as k,X as y,Z as C,Y as w,v as N,dJ as _,ct as I,dK as $,aX as S,dL as F,dM as R,dy as L,i as A,dN as P,ai as E,bx as M,dO as D,aI as T,dP as B,ae as z}from"./drop-open-BjgdLxWM.js";import{h as U,i as K,j as O,l as H,k as W,m as q,o as Y,p as G,G as X,q as J,n as Q,e as V,t as Z}from"./context-CL4-cwvA.js";import{o as ee,i as te}from"./vault-ui-seam-BQGS7RR6.js";import{L as ne,a as ae,b as se,c as ie}from"./react-router-XsJY84ug.js";import{E as re}from"./EmptyTip-DnxQjLsP.js";import{b as oe}from"./vault-list-path-Bh2_KZkq.js";import{u as le,d as de}from"./wake-lock-C_y0fQco.js";import{k as ce,j as ue,l as me}from"./listing-page-B-c8QQVp.js";import{a as he,n as pe,m as fe}from"./MethodPicker-CqQTyAaT.js";import{a as xe,C as ve,F as je,i as ge,L as be,t as ke,O as ye,E as Ce,r as we,v as Ne,b as _e,c as Ie,d as $e}from"./item-contributions-BNmtlrGT.js";import{S as Se}from"./InvokeScreen-C-kFFYVF.js";import{u as Fe}from"./use-password-reset-generate-B11XaeM6.js";import{u as Re}from"./features-9FeW22VH.js";import{E as Le,F as Ae}from"./certs-CDCfMuEi.js";import"./signals-DdOHdr--.js";import"./model-provider-B6oAnQX9.js";import"./native-worker-bytes-a0e18d71-DFmKzL3P.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"./seams-DJ_lslby.js";import"./native-worker-noble-hashes-b1a58353-IgGIMWEC.js";import"./noble-crypto-Mv8l2A7D.js";import"./native-worker-noble-ciphers-708367a7-BPuD3lXB.js";import"./idp-presets-B1M-P0Ek.js";import"./identity-view-paths-Bi1yigZk.js";import"./section-nav-goals-B_N-ZW2I.js";import"./pane-trail-dW-2RSUm.js";import"./vault-menu-CqO_AStq.js";import"./payload-CVz3G9cA.js";import"./compartment-guard-D3FuKM8N.js";import"./support-context-DrcseTKK.js";import"./vaults-B043odav.js";import"./connectivity-monitor-B0ueE5HQ.js";import"./IdentityConnectionSignIn-Bg53RjtJ.js";import"./federation-configured-restoration-DWAXgzcz.js";import"./entra-instances-NyEKYI5c.js";import"./bucket-saved-vQCiVvN_.js";import"./tailscale-artifacts-FyY85j_Y.js";import"./vault-credential-custody-DpnBb4qo.js";import"./native-auth-return-BTXjvSvx.js";import"./gate-seat-DHBrLaMG.js";import"./consent-CcqmRPoB.js";import"./scroll-renderer-CPxIcBzQ.js";import"./rotation-relay-DCS7Aa59.js";import"./native-identity-admission-C4ZFillF.js";import"./byo-B-SNpHiS.js";import"./FeatureSections-BG-JsWID.js";import"./iam-zBfzStfy.js";import"./directory-signin-model-BfxENbC3.js";function Pe({id:i,label:r,value:o,placeholder:l,onChange:d}){const[c,u]=e.useState(!1),m=r.toLowerCase();return t.jsxs("div",{className:"editor__inline editor__inline--adorned",children:[t.jsx("input",{id:i,type:c?"text":"password",autoComplete:"off",spellCheck:!1,maxLength:b.secret,placeholder:l,value:o,onChange:e=>d(e.target.value)}),t.jsx(n,{label:c?`Hide ${m}`:`Show ${m}`,"aria-pressed":c,onClick:()=>u(e=>!e),children:t.jsx(c?a:s,{size:17})})]})}function Ee({id:e,value:n,placeholder:a,onChange:s}){return t.jsx("input",{id:e,autoComplete:"off",spellCheck:!1,maxLength:b.line,placeholder:a,value:n,onChange:e=>s(e.target.value)})}const Me=(e,t)=>void 0===t?void 0:{label:`Remove ${e.toLowerCase()}`,onRemove:t};function De({method:e,methods:n,title:a,onChange:s,onRemove:i}){const r=xe(n,e);return t.jsxs(t.Fragment,{children:[t.jsx(ve,{label:r.header,htmlFor:`${e.id}-header`,remove:Me(a,i),field:t.jsx(Ee,{id:`${e.id}-header`,value:e.header,placeholder:"X-Api-Key",onChange:t=>s({...e,header:t})})}),t.jsx(ve,{label:r.value,htmlFor:`${e.id}-key`,field:t.jsx(Pe,{id:`${e.id}-key`,label:r.value,value:e.key,onChange:t=>s({...e,key:t})}),hint:t.jsx(je,{typeId:"api-key",value:e.key})})]})}function Te({method:e,title:n,onChange:a,onRemove:s}){return t.jsxs(t.Fragment,{children:[t.jsx(ve,{label:n,htmlFor:`${e.id}-token`,remove:Me(n,s),field:t.jsx(Pe,{id:`${e.id}-token`,label:n,value:e.token,onChange:t=>a({...e,token:t})}),hint:t.jsx(je,{typeId:"token",value:e.token})}),t.jsx(ve,{label:"Expires",htmlFor:`${e.id}-expires`,field:t.jsx(Ee,{id:`${e.id}-expires`,value:e.expiresAt,placeholder:"2027-01-31T00:00:00Z",onChange:t=>a({...e,expiresAt:t})})})]})}function Be({method:e,title:n,onChange:a,onRemove:s}){return t.jsxs(t.Fragment,{children:[t.jsx(ve,{label:"Client id",htmlFor:`${e.id}-client`,remove:Me(n,s),field:t.jsx(Ee,{id:`${e.id}-client`,value:e.clientId,onChange:t=>a({...e,clientId:t})})}),t.jsx(ve,{label:"Client secret",htmlFor:`${e.id}-secret`,field:t.jsx(Pe,{id:`${e.id}-secret`,label:"Client secret",value:e.clientSecret,onChange:t=>a({...e,clientSecret:t})})}),t.jsx(ve,{label:"Token URL",htmlFor:`${e.id}-url`,field:t.jsx(Ee,{id:`${e.id}-url`,value:e.tokenUrl,placeholder:"https://example.com/oauth/token",onChange:t=>a({...e,tokenUrl:t})})}),t.jsx(ve,{label:"Scopes",htmlFor:`${e.id}-scopes`,field:t.jsx(Ee,{id:`${e.id}-scopes`,value:e.scopes,placeholder:"read write",onChange:t=>a({...e,scopes:t})})}),t.jsx(ve,{label:"Refresh token",htmlFor:`${e.id}-refresh`,field:t.jsx(Pe,{id:`${e.id}-refresh`,label:"Refresh token",value:e.refreshToken,onChange:t=>a({...e,refreshToken:t})})})]})}function ze({method:e,title:n,onChange:a,onRemove:s}){return t.jsx(ve,{label:"Authenticator secret",htmlFor:`${e.id}-seed`,remove:Me(n,s),field:t.jsx(Pe,{id:`${e.id}-seed`,label:"Authenticator secret",value:e.secret,placeholder:"Base32 seed or otpauth:// URI",onChange:t=>a({...e,secret:t})})})}function Ue({label:e,hint:n,checked:a,onChange:s}){return t.jsxs("label",{className:"check",title:n,children:[t.jsx("input",{type:"checkbox",checked:a,onChange:e=>s(e.target.checked)}),t.jsx("span",{children:e})]})}function Ke({label:e,min:n,max:a,value:s,onChange:i}){return t.jsxs("div",{className:"gen__slider",children:[t.jsx("input",{type:"range","aria-label":e,min:n,max:a,value:s,onChange:e=>i(Number(e.target.value))}),t.jsx("span",{className:"gen__num",children:s})]})}function Oe({label:e,value:n,max:a,onChange:s}){return t.jsxs("label",{className:"check gen__count",children:[t.jsx("span",{children:e}),t.jsx("input",{type:"number",inputMode:"numeric",min:0,max:a,value:n,onChange:e=>{const t=Math.floor(Number(e.target.value));s(Number.isFinite(t)?Math.min(a,Math.max(0,t)):0)}})]})}function He({rules:e,onChange:n}){const a=t=>n({...e,...t});return t.jsxs(t.Fragment,{children:[t.jsx(Ke,{label:"Length",min:8,max:64,value:e.length,onChange:e=>a({length:e})}),t.jsxs("div",{className:"gen__checks",children:[t.jsx(Ue,{label:"Capital letters",checked:e.upper,onChange:e=>a({upper:e})}),t.jsx(Ue,{label:"Lowercase letters",checked:e.lower,onChange:e=>a({lower:e})}),t.jsx(Ue,{label:"Numbers",checked:e.digits,onChange:e=>a({digits:e})}),t.jsx(Ue,{label:"Symbols",checked:e.symbols,onChange:e=>a({symbols:e})}),t.jsx(Ue,{label:"Avoid look-alike characters",hint:"Leaves out characters that are easy to mix up, such as the letter l and the number 1",checked:e.avoidAmbiguous,onChange:e=>a({avoidAmbiguous:e})})]}),t.jsxs("div",{className:"gen__checks",children:[e.digits?t.jsx(Oe,{label:"Fewest numbers",value:e.minDigits,max:64,onChange:e=>a({minDigits:e})}):null,e.symbols?t.jsx(Oe,{label:"Fewest symbols",value:e.minSymbols,max:64,onChange:e=>a({minSymbols:e})}):null]})]})}function We({generator:e,onChange:n}){const a=t=>n({...e,...t});return t.jsxs(t.Fragment,{children:[t.jsx(Ke,{label:"Word count",min:3,max:10,value:e.words,onChange:e=>a({words:e})}),t.jsxs("div",{className:"gen__checks",children:[t.jsx(Ue,{label:"Capitalise",checked:e.capitalize,onChange:e=>a({capitalize:e})}),t.jsx(Ue,{label:"Add a number",checked:e.includeNumber,onChange:e=>a({includeNumber:e})}),t.jsxs("label",{className:"check gen__count",children:[t.jsx("span",{children:"Separator"}),t.jsx("input",{type:"text",autoComplete:"off",spellCheck:!1,value:e.separator,maxLength:1,onChange:e=>a({separator:e.target.value})})]})]})]})}function qe({generator:e,onChange:n}){if("manual"===e.id)return null;const a=function(e){let t;try{t=W(e)}catch{return null}if(null===t)return null;const n=Math.round(t);return n>=100?{word:"Excellent",bits:n}:n>=70?{word:"Strong",bits:n}:n>=50?{word:"Fair",bits:n}:{word:"Weak",bits:n}}(e);return t.jsxs(t.Fragment,{children:["rules"===e.id?t.jsx(He,{rules:e,onChange:e=>n({id:"rules",...e})}):null,"derived"===e.id?t.jsx(He,{rules:e.rules,onChange:t=>n({...e,rules:t})}):null,"passphrase"===e.id?t.jsx(We,{generator:e,onChange:n}):null,"sphinx"===e.id?t.jsxs(t.Fragment,{children:[t.jsx(He,{rules:e.rules,onChange:t=>n({...e,rules:t})}),t.jsx("div",{className:"gen__checks",children:t.jsx(Oe,{label:"Counter",value:e.counter,max:9999,onChange:t=>n({...e,counter:t})})})]}):null,null===a?null:t.jsx("output",{className:"gen__bits",title:`About ${a.bits} bits of guesswork`,children:a.word})]})}function Ye(e){const t=C(e);return"ok"===t.status?t.password:"slotted"===t.status?`${t.head}${t.tail}`:""}function Ge(e){const{generator:t}=e;if("rules"!==t.id&&"passphrase"!==t.id)return null;try{return{...e,secret:Y(t)}}catch{return null}}function Xe(e){const t=C(e);return`${t.status}\0${w(t)??Ye(e)}`}function Je(e,t){const n=(new Date).toISOString();return e.map(e=>{if("password"!==e.type)return e;const a=t.find(t=>"password"===t.type&&t.id===e.id);return void 0===a||Xe(a)!==Xe(e)?{...e,changedAt:n}:e})}const Qe=new Set(["rules","passphrase","derived"]);function Ve({method:i,onEdit:r,options:o,onGenerate:c}){const[u,m]=e.useState(!1),{generator:h}=i;return t.jsxs("div",{className:"editor__inline editor__inline--adorned",children:[t.jsx("input",{id:`${i.id}-password`,type:u?"text":"password",autoComplete:"new-password",spellCheck:!1,maxLength:b.secret,value:Ye(i),onChange:e=>r(function(e,t){const{sealed:n,...a}=e;return{...a,generator:{id:"manual"},secret:t}}(i,e.target.value))}),t.jsx(n,{label:u?"Hide password":"Show password","aria-pressed":u,onClick:()=>m(e=>!e),children:t.jsx(u?a:s,{size:17})}),Qe.has(h.id)?t.jsx(n,{label:"Generate another password",onClick:()=>{(async()=>{if(c&&await c())return;const e="derived"===h.id?function(e){const{generator:t}=e;return"derived"!==t.id?null:{...e,generator:{...t,counter:t.counter+1}}}(i):Ge(i);e&&(r(e),m(!0))})()},children:t.jsx(l,{size:17})}):null,t.jsx(n,{label:"Password options","aria-expanded":o.open,"aria-controls":o.controls,onClick:o.onToggle,children:t.jsx(d,{size:17})})]})}function Ze({method:n,onEdit:a}){const[s,i]=e.useState(n.pepperAt??""),[r,o]=e.useState(!1);return t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"field",children:t.jsxs("label",{className:"check",children:[t.jsx("input",{type:"checkbox",checked:n.pepper,onChange:e=>{o(!1),a(function(e,t){const{pepperAt:n,...a}=e;return t?{...e,pepper:!0}:{...a,pepper:!1}}(n,e.target.checked))}}),t.jsx("span",{children:"Include pepper"})]})}),n.pepper?t.jsxs("div",{className:"field",children:[t.jsx("label",{htmlFor:`${n.id}-pepper-at`,children:"Pepper goes"}),t.jsxs("div",{className:"editor__inline",children:[t.jsx("input",{id:`${n.id}-pepper-at`,autoComplete:"off",spellCheck:!1,placeholder:"end",title:"Where your pepper goes, like a Python index: end, 0 for the start, -2 for before the last two characters, 2:5 to replace characters 3 to 5",value:s,onChange:e=>{i(e.target.value);const t=function(e,t){if(!_(t))return null;const{pepperAt:n,...a}=e;return""===t.trim()?a:{...a,pepperAt:t.trim()}}(n,e.target.value);o(null===t),null!==t&&a(t)}}),r?t.jsx(Se,{tone:"err",label:"Not a position: try end, 3, -2 or 2:5"}):null]})]}):null]})}function et({account:n,method:a,liveRoll:s,onEdit:i,onRemove:r,onGenerate:o}){const[l,d]=e.useState(!1);if(ge(a))return t.jsx(be,{account:n,method:a,onConvert:i,onRemove:r});const c=`${a.id}-options`,{generator:u}=a,m=G(u.id);return t.jsxs(t.Fragment,{children:[t.jsx(ve,{label:"Password",htmlFor:`${a.id}-password`,remove:void 0===r?void 0:{label:"Remove password",onRemove:r},field:t.jsx(Ve,{method:a,onEdit:i,onGenerate:o,options:{open:l,controls:c,onToggle:()=>d(e=>!e)}})}),l?t.jsxs("div",{id:c,className:"gen__opts",children:[t.jsxs("div",{className:"field",children:[t.jsx("label",{htmlFor:`${a.id}-generator`,children:"Generator"}),t.jsx("div",{className:"editor__inline",children:t.jsx("select",{id:`${a.id}-generator`,"aria-label":"Password generator",value:u.id,onChange:e=>{const t=function(e){const t=X.find(t=>t.id===e)?.id;return"sphinx"===t?void 0:t}(e.target.value);t&&i(function(e,t){const{sealed:n,...a}=e,s=q(t);return{...a,generator:s,secret:"manual"===t?Ye(e):Y(s)}}(a,t))},children:m.map(e=>t.jsx("option",{value:e.id,children:e.label},e.id))})})]}),t.jsx(qe,{generator:u,onChange:e=>{const t={...a,generator:e};i((s?Ge(t):null)??t)}}),t.jsx(Ze,{method:a,onEdit:i})]}):null]})}function tt({account:e,method:n,liveRoll:a,onReplace:s,onRemove:i}){const{guest:r}=le(),o=de(),l=r?"":o.activeTomb?.()??"",d=Fe(e,l),c=!a&&d.eligible?async()=>{const e=await d.generate();return"queued"===e||"prompted"===e}:void 0,u=fe(e.methods,n),m={methods:e.methods,title:u,onRemove:()=>i(n)};return t.jsx("fieldset",{className:"method","aria-label":`${u} method`,"data-method":n.id,children:"password"===n.type?t.jsx(et,{account:e,method:n,liveRoll:a,onEdit:s,onRemove:m.onRemove,onGenerate:c}):t.jsx("api-key"===n.type?De:"token"===n.type?Te:"oauth"===n.type?Be:ze,{...m,method:n,onChange:s})})}function nt({account:n,liveRoll:a,onMethods:s}){const[l,d]=e.useState(!1),[h,p]=e.useState(null),f=ce(),{items:x}=le(),{methods:v}=n,j=function(e,t){const n=new Set(t.map(e=>e.id));return y(e).filter(e=>!(null!==e.deletedAt||n.has(e.id)||"password"===e.method.type&&e.method.sealed))}(x,v),g=e.useRef(null),b=e.useRef(null),k=function(t){const n=e.useRef(new Set);return e.useEffect(()=>{const e=n.current;return()=>{(async e=>{const t=i(N.getSnapshot().items);for(const n of e)t.has(n)||await r(n)})([...e].reverse())}},[]),e=>{if(!u(e,t)){for(const a of[e,...m(e)])u(a,t)||n.current.add(a);(e=>{o(e,{keep:!1})})(e)}}}(f);e.useEffect(()=>{if(null===h)return;const e=b.current?.querySelectorAll("[data-method]");for(const t of e??[])t.dataset.method===h&&t.querySelector("input, select")?.focus();p(null)},[h]);const C=e=>s(v.map(t=>t.id===e.id?e:t)),w=e=>{s(v.filter(t=>t.id!==e.id))};return t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"field method__group",children:[t.jsxs("span",{className:"label editor__grouplabel",children:["Login methods",t.jsx("button",{ref:g,type:"button",className:"icon-btn icon-btn--sm","aria-label":"Add login method",title:"Add login method","aria-expanded":l,onClick:()=>d(e=>!e),children:t.jsx(c,{size:15})})]}),l?t.jsx(he,{opener:g,types:I,existing:j,onPick:e=>{k($(e));const t=pe(n,e);s([...v,t]),d(!1),p(t.id)},onBind:e=>{s([...v,e.method]),d(!1),p(e.method.id)},onClose:()=>d(!1)}):null]}),t.jsx("div",{ref:b,className:"method__list",children:v.map(e=>t.jsx(tt,{account:n,method:e,liveRoll:a,onReplace:C,onRemove:w},e.id))})]})}const at=["domain","host","exact","wildcard","regex","never"],st={wildcard:"Whole hostname, case-insensitive. *.example.com matches subdomains; * matches any characters, ? matches one.",regex:"Whole hostname, case-insensitive. Use example\\.com or (.*\\.)?example\\.com, without / delimiters or flags."};function it({uri:a}){const[s,i]=e.useState(""),[r,o]=e.useState(""),[l,d]=e.useState(!1);return t.jsxs("div",{children:[t.jsxs("div",{className:"editor__inline",children:[t.jsx("input",{"aria-label":"Test website",maxLength:b.uri,value:s,placeholder:"https://app.example.com",onChange:e=>{i(e.target.value),o("")},disabled:l}),t.jsx(n,{label:"Test match",disabled:l||!s.trim(),onClick:async()=>{d(!0),o(await ke(a,s)),d(!1)},children:t.jsx(p,{size:16})})]}),t.jsx("output",{"aria-live":"polite",children:r})]})}function rt({uris:e,onChange:a}){function s(t,n){a(e.map(e=>e.id===t?{...e,...n}:e))}return t.jsxs("div",{className:"field",children:[t.jsxs("span",{className:"label editor__grouplabel",children:["Websites",t.jsx(n,{label:"Add address",small:!0,onClick:()=>a([...e,S()]),children:t.jsx(c,{size:15})})]}),e.map((n,i)=>t.jsxs("div",{children:[t.jsxs("div",{className:"editor__uri",children:[t.jsx("input",{value:n.uri,"aria-label":`Address ${i+1}`,maxLength:b.uri,placeholder:"wildcard"===n.match?"*.example.com":"regex"===n.match?"(.*\\.)?example\\.com":"https://example.com",autoComplete:"off",spellCheck:!1,onChange:e=>s(n.id,{uri:e.target.value})}),t.jsx("select",{value:n.match,"aria-label":`Match rule ${i+1}`,title:"wildcard"===n.match||"regex"===n.match?st[n.match]:void 0,onChange:e=>{const t=at.find(t=>t===e.target.value);t&&s(n.id,{match:t})},children:at.map(e=>t.jsx("option",{value:e,children:e},e))}),t.jsx("button",{type:"button",className:"icon-btn","aria-label":`Remove address ${i+1}`,onClick:()=>a(e.filter(e=>e.id!==n.id)),children:t.jsx(h,{size:17})})]}),"wildcard"===n.match||"regex"===n.match?t.jsx(it,{uri:n},`${n.uri}:${n.match}`):null]},n.id))]})}function ot(){return N.getSnapshot().items}function lt(e){return e.name===e.address?e.address:`${e.name} (${e.address})`}function dt({emailId:n,onChange:a}){const{plan:s}=Re(),i=e.useSyncExternalStore(N.subscribe,ot,ot),r=e.useMemo(()=>f(i),[i]);if(!0!==s?.approvedCapabilities.includes("ai.password-reset")||0===r.length&&!n)return null;const o=r.some(e=>e.id===n)?n:"";return t.jsxs("div",{className:"field",children:[t.jsx("label",{htmlFor:"reset-email",children:"Reset email"}),t.jsxs("select",{id:"reset-email",value:o,onChange:e=>a(e.target.value||void 0),children:[t.jsx("option",{value:"",children:"None"}),r.map(e=>t.jsx("option",{value:e.id,children:lt(e)},e.id))]})]})}function ct({draft:e,liveRoll:n,onPatch:a}){return t.jsxs("div",{className:"editor__grid",children:[t.jsx(rt,{uris:e.uris,onChange:e=>a({uris:e})}),t.jsxs("div",{className:"field",children:[t.jsx("label",{htmlFor:"username",children:"Username / ID"}),t.jsx("input",{id:"username",autoComplete:"off",maxLength:b.line,value:e.username,onChange:e=>a({username:e.target.value})})]}),t.jsx(nt,{account:e,liveRoll:n,onMethods:e=>a({methods:e})}),t.jsx(dt,{emailId:e.resetEmailId,onChange:e=>a({resetEmailId:e})})]})}function ut({draft:e,accounts:n,liveRoll:a,onPatch:s}){const{method:i}=e,r=n.find(t=>t.id===e.accountId),o={methods:[i],title:fe([i],i),onChange:e=>s({method:e})};return t.jsxs(t.Fragment,{children:[t.jsx("fieldset",{className:"method","aria-label":`${o.title} method`,"data-method":i.id,children:"password"===i.type?t.jsx(et,{account:{id:e.accountId??"",username:r?.username??""},method:i,liveRoll:a,onEdit:o.onChange}):t.jsx("api-key"===i.type?De:"token"===i.type?Te:"oauth"===i.type?Be:ze,{...o,method:i})}),"password"===i.type?null:t.jsxs("div",{className:"field",children:[t.jsx("label",{htmlFor:"credential-account",children:"Account"}),t.jsx("div",{className:"editor__inline",children:t.jsxs("select",{id:"credential-account",value:r?.id??"",onChange:e=>s({accountId:e.target.value||null}),children:[t.jsx("option",{value:"",children:"None"}),n.map(e=>t.jsx("option",{value:e.id,children:e.name||"Untitled"},e.id))]})})]})]})}function mt({busy:e,label:n,closeTo:a,saveRef:s}){return t.jsxs("div",{className:"editor__actions go-row",children:[t.jsx("button",{ref:s,type:"submit",className:"go",disabled:e,"aria-busy":e,"aria-label":n,title:n,children:t.jsx(p,{size:18})}),t.jsx("span",{className:"go-verb","aria-hidden":"true",children:n}),t.jsx(ne,{"data-pane-close":e?void 0:"",className:"icon-btn","aria-label":"Cancel",title:"Cancel",to:a,children:t.jsx(h,{size:17})})]})}const ht="root",pt="folder:",ft="new:",xt=e=>`${pt}${e}`;function vt(e){return e.trim().replace(/^\.?\/+/,"").replace(/^\.$/,"").replace(/\/+$/,"")}function jt(e,t,n){return""===t?[...e]:e.map((e,a)=>({item:e,order:a,score:Math.min(...n(e).map(e=>function(e,t){const n=e.toLowerCase(),a=t.toLowerCase();return n.startsWith(a)?0:n.split("/").some(e=>e.startsWith(a))?1:n.includes(a)?2:-1}(e,t)).filter(e=>e>=0),99)})).filter(e=>e.score<99).sort((e,t)=>e.score-t.score||e.order-t.order).map(e=>e.item)}function gt(e){return e.trim().replace(/^\.+/,"").toLowerCase()}function bt(e,t){if(e.preventDefault(),!t.open)return t.show();const n="ArrowDown"===e.key?1:-1,a=Math.max(t.options.length-1,0);t.highlight(Math.min(Math.max(t.at+n,0),a))}const kt=new Map([["ArrowDown",bt],["ArrowUp",bt],["Enter",function(e,t){e.preventDefault(),t.expanded&&t.pick?t.take(t.pick):t.show()}],["Escape",function(e,t){t.open&&(e.preventDefault(),e.stopPropagation(),t.close())}],["Tab",function(e,t){null!==t.query&&t.expanded&&t.pick&&t.pick.label!==t.text&&t.take(t.pick,!0)}]]);function yt({label:n,tone:a,maxLength:s,onPicked:i,...r}){const o=function(t){const{text:n,suggest:a,exact:s,onPick:i,onPicked:r}=t,o=e.useId(),[l,d]=e.useState(null),[c,u]=e.useState(!1),[m,h]=e.useState(0),p=e.useRef(!1),f=e.useRef(!1),x=c?a(l??""):[],v=Math.min(m,Math.max(x.length-1,0)),j=c&&x.length>0,g=j?`${o}-${v}`:void 0,b=x[v];function k(){if(null===l){const e=a("").findIndex(e=>e.label===n);h(Math.max(e,0))}u(!0)}function y(){u(!1),d(null)}function C(e,t=!1){f.current=t,d(null),u(!1),i(e.key),t||r?.()}return e.useEffect(()=>{g&&document.getElementById(g)?.scrollIntoView?.({block:"nearest"})},[g]),{listId:o,shown:l??n,options:x,at:v,expanded:j,activeId:g,setActive:h,take:C,input:{onFocus:e=>{p.current=!0,e.currentTarget.select()},onMouseUp:e=>{p.current&&(p.current=!1,e.preventDefault())},onClick:k,onChange:e=>{d(e.target.value),h(0),u(!0)},onKeyDown:e=>function(e,t){e.altKey||e.ctrlKey||e.metaKey||kt.get(e.key)?.(e,t)}(e,{open:c,expanded:j,options:x,at:v,pick:b,query:l,text:n,show:k,close:y,highlight:h,take:C}),onBlur:function(){p.current=!1,u(!1);const e=l;if(d(null),f.current)return void(f.current=!1);const t=null===e?void 0:s(e);t&&t.label!==n&&i(t.key)}}}}({...r,onPicked:i});return t.jsxs("span",{className:`pathfield__seg pathfield__seg--${a}`,children:[t.jsx("input",{className:"pathfield__input",role:"combobox","aria-label":n,"aria-autocomplete":"list","aria-expanded":o.expanded,"aria-controls":o.listId,"aria-activedescendant":o.activeId,autoComplete:"off",autoCapitalize:"off",autoCorrect:"off",spellCheck:!1,maxLength:s,value:o.shown,title:o.shown,style:{width:`calc(${Math.max(o.shown.length,1)}ch + 1.25rem)`},...o.input}),o.expanded?t.jsx(Ct,{label:n,tone:a,listId:o.listId,options:o.options,at:o.at,onHover:o.setActive,onTake:o.take}):null]})}function Ct({label:e,tone:n,listId:a,options:s,at:i,onHover:r,onTake:o}){return t.jsx("div",{role:"listbox",id:a,"aria-label":`${e} choices`,className:`pathfield__list pathfield__list--${n}`,onMouseDown:e=>e.preventDefault(),children:s.map((e,n)=>t.jsxs("div",{role:"option",id:`${a}-${n}`,"data-key":e.key,className:"pathfield__option"+(n===i?" is-active":""),"aria-selected":n===i,"aria-label":e.adding?`New folder ${e.label}`:void 0,onMouseDown:()=>o(e),onMouseEnter:()=>r(n),children:[e.adding?t.jsx(c,{size:13}):null,t.jsx("span",{className:"pathfield__label",children:e.label}),e.detail?t.jsx("span",{className:"pathfield__detail",children:e.detail}):null]},e.key))})}function wt({value:e,folders:n,onChange:a,onPicked:s}){const i=n.find(t=>t.id===e);return t.jsx(yt,{label:"Folder",tone:"folder",text:i?`${i.name}/`:"./",suggest:e=>function(e,t){const n=vt(t),a=jt([...e].sort((e,t)=>e.name.localeCompare(t.name)),n,e=>[e.name]).map(e=>({key:xt(e.id),label:`${e.name}/`})),s=""===n?[{key:ht,label:"./"},...a]:a,i=e.some(e=>e.name.toLowerCase()===n.toLowerCase());var r;return""!==n&&!i&&F(n)&&s.push({key:(r=n,`${ft}${r}`),label:`${n}/`,adding:!0}),s}(n,e),exact:e=>function(e,t){const n=vt(t);if(""===n)return{key:ht,label:"./"};const a=e.find(e=>e.name.toLowerCase()===n.toLowerCase());return a?{key:xt(a.id),label:`${a.name}/`}:void 0}(n,e),onPick:e=>{const t=function(e){return e===ht?{kind:"root"}:e.startsWith(pt)?{kind:"folder",id:e.slice(7)}:e.startsWith(ft)?{kind:"new",path:e.slice(4)}:void 0}(e);"root"===t?.kind?a(null):"folder"===t?.kind?a(n.find(e=>e.id===t.id)??null):"new"===t?.kind&&a(R(`/${t.path}/_`,null,n).folder??null)},...s?{onPicked:s}:{},maxLength:b.folder})}function Nt(){return t.jsx("div",{className:"detail",children:t.jsxs("div",{className:"empty",children:[t.jsx("h2",{children:"Unknown item type"}),t.jsx("p",{children:"This type is not installed on this device."}),t.jsx(re,{tip:"keymap"}),t.jsx(ne,{className:"btn btn--sm",to:"/vault/new",children:"Choose an item type"})]})})}function _t({typeId:e,onChange:n}){if(!n)return t.jsx("span",{className:"editor__ext pathfield__ext",children:L(e)});const a=A().list().filter(({definition:e})=>ue(e.metadata.id)).map(({definition:e})=>({id:e.metadata.id,extension:e.spec.extension,title:e.spec.title}));return t.jsx(yt,{label:"Type",tone:"type",text:L(e),suggest:e=>function(e,t){return jt(e,gt(t),e=>[gt(e.extension),e.id,e.title]).map(e=>({key:e.id,label:e.extension,detail:e.title}))}(a,e),exact:e=>function(e,t){const n=gt(t),a=e.find(e=>gt(e.extension)===n);return a?{key:a.id,label:a.extension,detail:a.title}:void 0}(a,e),onPick:e=>{A().has(e)&&ue(e)&&n(e)},maxLength:b.extension})}function It({value:a,folders:s,onName:i,onFolder:r,onBlur:o,typeId:l,onTypeChange:d,placeholder:c="Untitled",focusName:u=!1,onPin:m}){const h=e.useRef(null),p=e.useRef(null);return t.jsxs("div",{className:"editor__titlerow",children:[t.jsxs("div",{className:"pathfield",ref:p,onKeyDown:function(e){const{key:t,target:n}=e;if(e.defaultPrevented||e.shiftKey)return;if("ArrowLeft"!==t&&"ArrowRight"!==t)return;if(!(n instanceof HTMLInputElement))return;if(n.selectionStart!==n.selectionEnd)return;const a=[...p.current?.querySelectorAll("input")??[]],s=a.indexOf(n),i=a[s+("ArrowLeft"===t?-1:1)];i&&n.selectionStart===("ArrowLeft"===t?0:n.value.length)&&(e.preventDefault(),i.focus())},children:[t.jsx(wt,{value:a.folderId,folders:s,onChange:r,onPicked:()=>{const e=h.current;e&&(e.focus(),e.setSelectionRange(e.value.length,e.value.length))}}),t.jsx("input",{ref:h,className:"editor__name pathfield__name","aria-label":"Name",autoComplete:"off",maxLength:b.folder+b.name,value:a.name,placeholder:c,onChange:e=>{const t=e.target.value;i(t.length<a.name.length?t:P(t))},onBlur:o,autoFocus:u&&!x()}),t.jsx(_t,{typeId:l,onChange:d})]}),m?t.jsx(n,{label:a.favorite?"Unpin item":"Pin item",small:!0,"aria-pressed":Boolean(a.favorite),onClick:()=>m(!a.favorite),children:t.jsx(v,{size:16,filled:Boolean(a.favorite)})}):null]})}function $t({draft:e,onChange:n}){return"passkey"!==e.kind?null:t.jsxs("div",{className:"editor__grid",children:[t.jsxs("div",{className:"editor__row",children:[t.jsxs("div",{className:"field",children:[t.jsx("label",{htmlFor:"rpid",children:"Relying party"}),t.jsx("input",{id:"rpid",maxLength:b.line,placeholder:"example.com",value:e.rpId,onChange:e=>n({rpId:e.target.value})})]}),t.jsxs("div",{className:"field",children:[t.jsx("label",{htmlFor:"pk-user",children:"Account"}),t.jsx("input",{id:"pk-user",maxLength:b.line,value:e.username,onChange:e=>n({username:e.target.value})})]})]}),t.jsxs("div",{className:"field",children:[t.jsx("label",{htmlFor:"authenticator",children:"Authenticator"}),t.jsxs("select",{id:"authenticator",value:e.authenticator,onChange:e=>n({authenticator:ee(e.target.value)}),children:[t.jsx("option",{value:"platform",children:"This device"}),t.jsx("option",{value:"cross-platform",children:"Security key or another device"})]})]}),t.jsxs("div",{className:"field",children:[t.jsx("label",{htmlFor:"credid",children:"Credential id"}),t.jsx("input",{id:"credid",maxLength:b.list,spellCheck:!1,value:e.credentialIdB64,onChange:e=>n({credentialIdB64:e.target.value})})]}),t.jsx("p",{className:"note",children:t.jsx("span",{children:"This records a credential; it does not create one. The private key stays in the authenticator and never enters the vault."})})]})}function St({draft:e,onChange:n}){return"card"!==e.kind?null:t.jsx(Ft,{draft:e,onPatch:n})}function Ft({draft:n,onPatch:a}){const s=E(n.number),i=e.useRef(Boolean(n.brand.trim())&&n.brand!==s?.name),r=E(n.number),o=r?`Detected from the number: ${r.name}.`:n.number.length>=12&&!i.current?"Card type not recognized. Enter the brand manually.":"";return t.jsxs("div",{className:"editor__grid",children:[t.jsxs("div",{className:"editor__row",children:[t.jsxs("div",{className:"field",children:[t.jsx("label",{htmlFor:"cardholder",children:"Cardholder"}),t.jsx("input",{id:"cardholder",autoComplete:"off",maxLength:b.line,value:n.cardholder,onChange:e=>a({cardholder:e.target.value})})]}),t.jsxs("div",{className:"field",children:[t.jsx("label",{htmlFor:"brand",children:"Brand"}),t.jsx("input",{id:"brand",autoComplete:"off",maxLength:b.label,placeholder:"Detected from the number",value:n.brand,onChange:e=>{const t=e.target.value;i.current=t.trim().length>0,a({brand:t})}})]})]}),o?t.jsx("p",{className:"hint",children:o}):null,t.jsxs("div",{className:"field",children:[t.jsx("label",{htmlFor:"number",children:"Number"}),t.jsx("input",{id:"number",inputMode:"numeric",autoComplete:"off",value:M(n.number,n.brand),onChange:e=>function(e){const t=D(e),s=E(t);a({number:t,brand:i.current?n.brand:s?.name??""})}(e.target.value)})]}),t.jsx(Rt,{draft:n,onPatch:a})]})}function Rt({draft:e,onPatch:n}){return t.jsxs("div",{className:"editor__row",children:[t.jsxs("div",{className:"field",children:[t.jsx("label",{htmlFor:"exp",children:"Expires"}),t.jsxs("div",{className:"editor__inline",children:[t.jsx("input",{id:"exp",inputMode:"numeric",placeholder:"MM",maxLength:2,value:e.expMonth,onChange:e=>n({expMonth:e.target.value.replace(/\D/g,"")})}),t.jsx("input",{inputMode:"numeric",placeholder:"YYYY",maxLength:4,"aria-label":"Expiry year",value:e.expYear,onChange:e=>n({expYear:e.target.value.replace(/\D/g,"")})})]})]}),t.jsxs("div",{className:"field",children:[t.jsx("label",{htmlFor:"cvc",children:"Security code (optional)"}),t.jsx("input",{id:"cvc",inputMode:"numeric",autoComplete:"off",maxLength:4,placeholder:"CVV",value:e.code,onChange:e=>n({code:e.target.value.replace(/\D/g,"")})})]})]})}function Lt({draft:e,onChange:n}){return"certificate"!==e.kind?null:t.jsxs("div",{className:"editor__grid",children:[t.jsxs("div",{className:"field",children:[t.jsx("label",{htmlFor:"cert-cn",children:"Common name"}),t.jsx("input",{id:"cert-cn",maxLength:b.line,value:e.commonName,readOnly:Boolean(e.certificatePem),onChange:e=>n({commonName:e.target.value})})]}),t.jsx(ye,{present:Boolean(e.dnsNames),command:"Add DNS names",children:t.jsxs("div",{className:"field",children:[t.jsx("label",{htmlFor:"cert-dns",children:"DNS names"}),t.jsx("input",{id:"cert-dns",maxLength:b.list,value:e.dnsNames,placeholder:"localhost, *.local",readOnly:Boolean(e.certificatePem),onChange:e=>n({dnsNames:e.target.value})})]})}),t.jsxs("div",{className:"editor__row",children:[t.jsx(ye,{present:Boolean(e.ipAddrs),command:"Add IP addresses",children:t.jsxs("div",{className:"field",children:[t.jsx("label",{htmlFor:"cert-ip",children:"IP addresses"}),t.jsx("input",{id:"cert-ip",maxLength:b.list,value:e.ipAddrs,placeholder:"127.0.0.1",readOnly:Boolean(e.certificatePem),onChange:e=>n({ipAddrs:e.target.value})})]})}),t.jsxs("div",{className:"field",children:[t.jsx("label",{htmlFor:"cert-ttl",children:"TTL (hours)"}),t.jsx("input",{id:"cert-ttl",maxLength:b.hours,inputMode:"numeric",value:e.ttlHours,readOnly:Boolean(e.certificatePem),onChange:e=>n({ttlHours:e.target.value})})]})]})]})}function At(e){return t.jsxs(t.Fragment,{children:[t.jsx($t,{...e}),t.jsx(St,{...e}),t.jsx(Lt,{...e})]})}function Pt(e){if(!e.name.trim()&&"certificate"!==e.kind)return"Give this item a name so you can find it again.";if("certificate"===e.kind&&!e.certificatePem&&!e.commonName.trim())return"Enter the certificate's common name before issuing it.";if("typed"===e.kind){const t=T(e);if(void 0!==t){const n=B(t,e.values);if(n.length>0)return`Fill in ${n.map(e=>e.label).join(", ")} before saving.`;if(t.metadata.id===Ce){const t=t=>{const n=e.values[t];return te(n)?n:""},n=we(e.name,{environment:t("environment"),schema:t("schema"),aliases:t("aliases")});if(n.problems[0])return n.problems[0].message}}}return null}function Et(e){return e.split(/[,\s]+/).map(e=>e.trim()).filter(Boolean)}function Mt({mode:e}){const{kind:n,itemId:a}=ae();return"new"!==e||void 0===n||A().has(n)?t.jsx(Dt,{mode:e},`${e}:${n??""}:${a??""}`):t.jsx(Nt,{})}function Dt({mode:i}){const{kind:r,itemId:o}=ae(),[l]=se(),d=oe(),c=ie(),{items:u,folders:m}=le(),h=de(),p=u.find(e=>e.id===o),f=e.useMemo(()=>u.filter(e=>"account"===e.kind&&null===e.deletedAt),[u]),x=e.useMemo(()=>function(e,t,n,a){if("edit"===e)return{item:t??null,error:null};const s=n??me();try{return{item:J(s,a),error:null}}catch{return{item:Q(s),error:"Link values were refused. Use public metadata parameters or supported field.<id> values; never put secrets in links."}}}(i,p,r,l),[i,p,r,l]),[v,y]=e.useState(x.item),[C,w]=e.useState(!1),[N,_]=e.useState(!1),[I,$]=e.useState(x.error),[S,F]=e.useState(),[L,A]=e.useState(()=>crypto.randomUUID());e.useEffect(()=>{y(x.item),$(x.error),w(!1),F(void 0),A(crypto.randomUUID())},[x]);const P=function(t){const n=e.useRef(t);return n.current=t,n}(v),E=e.useRef(null),M=e.useRef(async()=>({ok:!1,message:"Nothing to edit"}));e.useEffect(()=>j("vault-item-editor",async()=>!!(await M.current()).ok&&(E.current?.dispatchEvent(new Event("os-edit-committed",{bubbles:!0})),!0)),[]);const D=e=>y(t=>t?ee({...t,...e}):t),B=function(t,n,a,s){const[i,r]=e.useState(void 0),o=i&&!n.some(e=>e.id===i.id)?[...n,i]:n,l=()=>R(t.name,t.folderId,o);return{choices:o,resolve:l,blur:()=>{try{const e=l();return r(e.folder),a({name:e.name,folderId:e.folderId}),s(null),e}catch(I){s(I instanceof Error?I.message:"The item path is invalid.")}},select:e=>{r(e),a({name:t.name,folderId:e?.id??null}),s(null)},typed:e=>{const n=e.lastIndexOf("/")+1;if(n>0)try{const i=R(`${e.slice(0,n)}_`,t.folderId,o);return r(i.folder),a({name:e.slice(n),folderId:i.folderId}),void s(null)}catch{}a({name:e,folderId:t.folderId})},stage:r}}(v??{name:"",folderId:null},m,D,$);!function(t,n,a){const s=e.useRef(t),i=e.useRef(n),r=e.useRef(a);s.current=t,i.current=n,r.current=a,e.useEffect(()=>{if(U(t?.kind??null),"account"!==t?.kind)return()=>U(null);const e=K({read:()=>{const e=s.current;if(!e)throw new Error("login_form_unavailable");return H(e,i.current)},patch:e=>{const t=s.current;if(!t)throw new Error("login_form_unavailable");const n=O(t,e);return r.current(n),H({...t,...n},i.current)}});return()=>{e(),U(null)}},[t?.kind])}(v,m,D);const{Create:W,Suggestions:q}=_e(v?.kind);if(!v)return t.jsx("div",{className:"detail",children:t.jsxs("div",{className:"empty",children:[t.jsx("h2",{children:"Nothing to edit"}),t.jsx(re,{tip:"escBack"}),t.jsx(ne,{className:"btn btn--sm",to:"/vault",children:"Back to the vault"})]})});const Y=B.choices.find(e=>e.id===v.folderId),G="new"===i&&void 0===r?(e,t,n=Y??null)=>{B.stage(n??void 0);const a=t??(Z(v.name,z(v))?void 0:v.name);y({...Q(e,a),folderId:n?.id??null,notes:v.notes}),$(null),w(!1)}:void 0;if("drop"===v.kind)return"new"===i&&W?t.jsx(W,{initialName:v.name,initialFolder:Y,onTypeChange:G}):t.jsx("div",{className:"detail",children:t.jsxs("div",{className:"empty",children:[t.jsx("h2",{children:"Drops cannot be edited"}),t.jsx(re,{tip:"escBack"}),t.jsx(ne,{className:"btn btn--sm",to:`/vault/${v.id}`,children:"Back to the drop"})]})});const X=z(v),te="typed"===v.kind?T(v):void 0,ce=(e,t)=>y(n=>null===n||"typed"!==n.kind?n:{...n,values:{...n.values,[e]:t}});M.current=()=>{const e=P.current;return e&&"drop"!==e.kind?async function(e){const t=Pt(e.draft);if(t)return{ok:!1,message:t};try{const t=e.locate(),n=await async function(e,t){let n=e,a=t.pendingDeliveryId;if("account"===n.kind&&await Ne(n.uris),"certificate"===n.kind&&!n.certificatePem){const e=await Ae({commonName:n.commonName.trim(),dnsNames:Et(n.dnsNames),ipAddrs:Et(n.ipAddrs),ttlHours:Number(n.ttlHours)||24,idempotencyKey:t.issuanceKey});a=e.deliveryId,n={...n,name:n.name.trim()||e.commonName,commonName:e.commonName,dnsNames:e.dnsNames.join(", "),certificatePem:e.certificate,privateKeyPem:e.privateKey,caPem:e.caCertificate,serial:e.serial,notAfter:e.notAfter},t.rememberIssued(n,a)}var s,i;if("account"===n.kind&&(s=n,i="account"===t.existing?.kind?t.existing:void 0,n={...s,methods:Je(s.methods,i?.methods??[])}),"credential"===n.kind){const[e=n.method]=Je([n.method],"credential"===t.existing?.kind?[t.existing.method]:[]);n={...n,method:e}}return{next:n,deliveryId:a}}({...e.draft,name:t.name,folderId:t.folderId},e);return await async function(e,t,n,a){if("account"!==n.kind)return e.saveItem(n,a);const s=function(e,t){const n=[],a=[];for(const s of t.methods){const i=e.find(e=>k(e)&&e.id===s.id&&null===e.deletedAt&&e.accountId!==t.id);void 0===i?a.push(s):n.push({...i,method:s,accountId:t.id})}return{account:{...t,methods:a},adopted:n}}(t,n);return 0===s.adopted.length?e.saveItem(n,a):e.saveItems([s.account,...s.adopted],a)}(e.writer,e.items,n.next,t.folder),n.deliveryId&&(await Le(n.deliveryId),e.clearDelivery()),{ok:!0,id:n.next.id}}catch(n){return{ok:!1,message:n instanceof Error?n.message:"Could not save this item."}}}({draft:e,existing:p,items:u,writer:h,locate:()=>{const e=B.resolve();return{name:e.name,folderId:e.folderId,folder:e.folder}},pendingDeliveryId:S,issuanceKey:L,rememberIssued:(e,t)=>{F(t),y(e)},clearDelivery:()=>F(void 0)}):Promise.resolve({ok:!1,message:"Nothing to edit"})};const ue="edit"===i?`/vault/${v.id}`:d,he=N?"certificate"!==v.kind||v.certificatePem?"Sealing…":"Issuing…":"certificate"!==v.kind||v.certificatePem?"Save item":"new"===i?"Create certificate":"Issue now";return t.jsx("div",{className:"detail",children:t.jsxs("form",{ref:E,className:"editor",onSubmit:e=>{!async function(e){e.preventDefault();const t=P.current;if(!t)return;const n=Pt(t);if(n)$(n);else{_(!0),$(null);try{const e=await M.current();if(!e.ok)return void $(e.message);E.current?.dispatchEvent(new Event("os-edit-committed",{bubbles:!0})),c(`/vault/${e.id}`)}finally{_(!1)}}}(e)},children:[t.jsx(It,{value:v,folders:B.choices,onName:B.typed,onFolder:e=>B.select(e??void 0),onBlur:B.blur,typeId:X,onTypeChange:G,focusName:!0,onPin:e=>D({favorite:e})}),"new"===i&&q?t.jsx(q,{typeId:X,website:"account"===v.kind?v.uris[0]?.uri:void 0,onApply:e=>{D({name:e.name}),"account"!==v.kind&&"passkey"!==v.kind||D({username:e.username}),"typed"===v.kind&&V(X)&&ce("username",e.username)}},`${X}:${"account"===v.kind?v.uris[0]?.uri:""}`):null,"account"===v.kind?t.jsx(ct,{draft:v,liveRoll:"new"===i,onPatch:D}):null,"credential"===v.kind?t.jsx(ut,{draft:v,accounts:f,liveRoll:"new"===i,onPatch:D}):null,"secret"===v.kind?t.jsx("div",{className:"editor__grid",children:t.jsxs("div",{className:"field",children:[t.jsx("label",{htmlFor:"secret-value",children:"Secret value"}),t.jsxs("div",{className:"editor__inline editor__inline--adorned",children:[t.jsx("input",{id:"secret-value",type:C?"text":"password",autoComplete:"off",spellCheck:!1,maxLength:b.secret,value:v.value,onChange:e=>D({value:e.target.value})}),t.jsx(n,{label:C?"Hide secret":"Show secret",onClick:()=>w(e=>!e),children:t.jsx(C?a:s,{size:17})})]})]})}):null,t.jsx(At,{draft:v,onChange:D},`native:${v.id}`),void 0!==te&&"typed"===v.kind?t.jsx(Ie,{definition:te,itemName:v.name,values:v.values,onChange:ce}):null,"typed"===v.kind&&void 0===te?t.jsx("p",{className:"hint",children:"Definition not installed."}):null,t.jsx($e,{draft:v,onChange:D},v.id),t.jsx(g,{id:`vault:item-editor:${v.id}`,title:"Item",message:I}),t.jsx(mt,{busy:N,label:he,closeTo:ue})]})})}export{Mt as ItemEditor};
@@ -0,0 +1 @@
1
+ .kb .panel__body{gap:.75rem}.kb-find__keys{font-family:var(--mono);caret-color:transparent;background:var(--accent-wash)}.kb-count{font-family:var(--mono);font-size:.75rem;color:var(--ink-3);font-variant-numeric:tabular-nums}.kb-single{max-width:var(--text-max)}.kb-group+.kb-group{margin-top:.5rem}.kb-group__label{display:flex;align-items:center;gap:.4rem;margin:0 0 .2rem;font-family:var(--mono);font-size:.75rem;font-weight:600;color:var(--ink-2)}.kb-rows{list-style:none;margin:0;padding:0;min-width:0}.kb-row{display:grid;grid-template-columns:minmax(0,14rem) minmax(0,1fr) auto;align-items:center;gap:.35rem 1rem;padding:.4rem 0 .4rem .6rem;border-bottom:1px solid var(--line);min-width:0}.kb-row:last-child{border-bottom:0}.kb-row[data-changed]{box-shadow:inset 2px 0 0 var(--accent)}.kb-row__name{display:grid;min-width:0}.kb-row__label{font-size:.875rem;overflow-wrap:anywhere}.kb-row__id{font-size:.75rem;color:var(--ink-3);background:none;padding:0;overflow-wrap:anywhere}.kb-row__end{display:flex;align-items:center;justify-content:flex-end;gap:.35rem;min-width:1.5rem}.kb-keys{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem .6rem;min-width:0}.keycap-btn{display:inline-flex;align-items:center;gap:2px;padding:1px;border:0;border-radius:var(--radius);background:none;color:inherit;font:inherit;cursor:pointer;touch-action:manipulation}.keycap{display:inline-block;min-width:1.5rem;padding:.05rem .4rem;font-family:var(--mono);font-size:.75rem;line-height:1.4;text-align:center;white-space:nowrap;color:var(--ink);background:var(--surface);border:1px solid var(--line-strong);border-bottom-width:2px;border-radius:var(--radius);transition:transform 80ms var(--ease),border-color .12s var(--ease)}.keycap-btn:hover .keycap{border-color:var(--ink-3)}.keycap-btn:active .keycap{transform:translateY(1px)}.keycap-btn--user .keycap{border-bottom-color:var(--accent)}.keycap-btn--scoped .keycap{background:var(--accent-wash);border-bottom-color:var(--accent)}.keycap-btn--waits .keycap{border-bottom-style:dashed}.keycap-btn--off .keycap{color:var(--ink-3);background:var(--surface-2)}.keycap-btn--removed .keycap{color:var(--ink-3);background:transparent;border-style:dashed;text-decoration:line-through}.keycap-btn--fixed{cursor:default}.keycap-btn--fixed .keycap{color:var(--ink-2);background:var(--surface-2)}.keycap-btn--fixed:hover .keycap{border-color:var(--line-strong)}.keycap-btn--fixed.keycap-btn--removed .keycap{color:var(--ink-3);background:transparent}.kb-capture{display:inline-flex;align-items:center;gap:.3rem}.kb-capture__field{position:relative;display:inline-flex}.kb-capture__input{width:9rem;max-width:var(--field-max);padding:.1rem .4rem;font-family:var(--mono);font-size:max(.75rem,var(--field-min));color:var(--ink);background:var(--accent-wash);border:1px solid var(--accent);border-radius:var(--radius);caret-color:var(--accent)}.kb-capture__input::placeholder,.kb-steps__recorder::placeholder{color:var(--ink-3)}.kb-capture__drain{position:absolute;inset:auto 1px 1px;height:2px;background:var(--accent);transform-origin:left center;animation:kb-drain var(--kb-drain-ms, 1s) linear forwards}@keyframes kb-drain{0%{transform:scaleX(1)}to{transform:scaleX(0)}}@media(prefers-reduced-motion:reduce){.kb-capture__drain{animation-duration:var(--kb-drain-ms, 1s)!important;animation-timing-function:steps(4,end)}.keycap{transition:none}}.kb-conflict{flex-basis:100%;display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;margin:0;padding:.3rem .5rem;min-width:0;border:1px solid var(--warn);border-radius:var(--radius);background:var(--warn-wash)}.kb-conflict__what{display:inline-flex;align-items:center;flex-wrap:wrap;gap:3px .4rem;min-width:0;font-family:var(--mono);font-size:.8125rem}.kb-conflict__holder{overflow-wrap:anywhere}.kb-conflict__holder:before{content:"→ ";color:var(--ink-3)}.kb-conflict .actions{margin-left:auto;flex-wrap:nowrap}.kb-macro__steps{display:flex;flex-wrap:wrap;gap:0 .3rem;font-family:var(--mono);font-size:.75rem;color:var(--ink-2);min-width:0}.kb-macro__then{margin-right:.3rem;color:var(--ink-3)}.kb-macro__on{display:inline-flex;align-items:center;gap:.3rem;font-family:var(--mono);font-size:.75rem;color:var(--ink-2);white-space:nowrap}.kb-editor{grid-column:1 / -1;display:grid;gap:.6rem;margin:.4rem 0 .2rem;padding:.75rem;min-width:0;border:1px solid var(--line);border-radius:var(--radius);background:var(--canvas)}.panel__body>.kb-editor{margin:0}.kb-editor__row{display:grid;grid-template-columns:6.5rem minmax(0,1fr);align-items:center;gap:.75rem;min-width:0}.kb-editor__row--steps{align-items:start}.kb-editor__row>label,.kb-editor__label{font-family:var(--mono);font-size:.75rem;font-weight:600;color:var(--ink-2)}.kb-editor__row--steps .kb-editor__label{padding-top:.4rem}.kb-editor__value{display:flex;align-items:center;gap:.3rem;min-width:0;max-width:var(--field-max)}.kb-editor__value input{flex:1 1 auto;min-width:0;max-width:none;font-family:var(--mono)}.kb-editor__at{font-family:var(--mono);color:var(--ink-3)}.kb-editor select{max-width:var(--field-max)}.kb-steps__list{list-style:none;margin:0;padding:0;counter-reset:kb-step;min-width:0}.kb-step{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem;padding:.2rem 0;min-width:0;counter-increment:kb-step}.kb-step:before{content:counter(kb-step,decimal-leading-zero);min-width:1.4rem;font-family:var(--mono);font-size:.75rem;color:var(--ink-3);font-variant-numeric:tabular-nums}.kb-step__count{width:3.5rem;max-width:3.5rem;font-family:var(--mono);text-align:right;font-variant-numeric:tabular-nums}.kb-step__times{color:var(--ink-3)}.kb-step__command{flex:1 1 11rem;min-width:0;max-width:var(--field-max)}.kb-step .actions{flex-wrap:nowrap}.kb-steps__foot{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem;margin-top:.3rem;min-width:0}.kb-steps__recorder{flex:1 1 10rem;min-width:0;max-width:var(--field-max);font-family:var(--mono);font-size:max(.75rem,var(--field-min));caret-color:transparent;background:var(--accent-wash);border-color:var(--accent)}@media(max-width:640px){.kb-row{grid-template-columns:minmax(0,1fr) auto}.kb-row__name{grid-column:1 / -1}.kb-editor__row{grid-template-columns:minmax(0,1fr);gap:.3rem}}@media(pointer:coarse),(max-width:900px){.keycap-btn{min-width:2.75rem;min-height:2.75rem;align-items:stretch}.keycap-btn .keycap{flex:1 1 auto;display:inline-flex;align-items:center;justify-content:center;min-width:2.25rem;font-size:.8125rem}.kb-capture__input{min-height:2.75rem}}.kb-tabs{display:flex;gap:1.1rem;border-bottom:1px solid var(--line)}.kb-tab{display:inline-flex;align-items:center;padding:.3rem 0 .55rem;margin-bottom:-1px;border:0;border-bottom:2px solid transparent;background:transparent;color:var(--ink-2);font:inherit;font-family:var(--mono);font-size:.875rem;cursor:pointer;touch-action:manipulation}.kb-tab:hover{color:var(--ink)}.kb-tab.is-active{border-bottom-color:var(--ink);color:var(--ink);font-weight:600}.kb-loadout{display:grid;gap:1.25rem;min-width:0}.kb-gesture{display:flex;align-items:center;gap:.6rem;min-width:0}.kb-gesture__glyph{display:inline-grid;place-items:center;flex:none;color:var(--ink-2)}.kb-target{width:100%;max-width:20rem;min-width:0}.kb-single__end{display:inline-flex;align-items:center;gap:.5rem}@media(pointer:coarse),(max-width:900px){.kb-tab{min-height:2.75rem}.kb-row--gesture{grid-template-columns:minmax(0,1fr) auto}.kb-row--gesture .kb-target{grid-column:1 / -1;grid-row:2;max-width:none}.kb-row--gesture .kb-row__end{grid-column:2;grid-row:1}}