permdock 0.4.0 → 0.5.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 (514) hide show
  1. package/README.md +37 -35
  2. package/dist/{schema-Bol6gqXA.js → 2020-C9VN-x8c.js} +5 -130
  3. package/dist/a2a/index.d.ts +6 -6
  4. package/dist/a2a/index.js +14 -17
  5. package/dist/{adapter-context-mlWsVGGg.js → adapter-context-CRhqyzCk.js} +1 -1
  6. package/dist/adoption-scan-B4R5fnMU.js +107 -0
  7. package/dist/agent/index.d.ts +3 -0
  8. package/dist/agent/index.js +1 -0
  9. package/dist/ai-sdk/index.d.ts +18 -35
  10. package/dist/ai-sdk/index.js +37 -23
  11. package/dist/{app-data-CV8pqqMi.js → app-data-MuyzVqX8.js} +2 -1
  12. package/dist/approval-header-CJACtHkv.js +23 -0
  13. package/dist/approval-prompt-Dg5LeAcT.js +62 -0
  14. package/dist/approval-prompt-Djo_PyZc.d.ts +57 -0
  15. package/dist/approvals/index.d.ts +5 -3
  16. package/dist/approvals/index.js +8 -5
  17. package/dist/approvals-DJ6Yd5z1.js +995 -0
  18. package/dist/arazzo-B6lebmiQ.js +36 -0
  19. package/dist/{arazzo-C4BcskbX.js → arazzo-BWhNF-k0.js} +20 -14
  20. package/dist/args-IIolxxKA.js +197 -0
  21. package/dist/astro/index.d.ts +43 -0
  22. package/dist/astro/index.js +27 -0
  23. package/dist/audience-Dg8XsRaO.js +55 -0
  24. package/dist/auth-DRLEizbL.js +178 -0
  25. package/dist/authzen/index.d.ts +26 -6
  26. package/dist/authzen/index.js +94 -79
  27. package/dist/automation-BMZPIVUM.d.ts +114 -0
  28. package/dist/automation-DVjOckjV.js +157 -0
  29. package/dist/better-auth/index.d.ts +8 -6
  30. package/dist/better-auth/index.js +9 -8
  31. package/dist/better-supabase/index.d.ts +357 -30
  32. package/dist/better-supabase/index.js +936 -194
  33. package/dist/{bind-BzqG8SMb.d.ts → bind--9EFVYWF.d.ts} +12 -10
  34. package/dist/{bind-kk-uyCwH.js → bind-CZzhx-Vj.js} +14 -10
  35. package/dist/body-CH5of8Ne.js +10 -0
  36. package/dist/body-text-QcXok_SI.js +52 -0
  37. package/dist/{build-instance-DIIV9DbC.js → build-instance-BMnAudHn.js} +4 -3
  38. package/dist/{canonical-json-CFKyFOke.js → canonical-json-BC8_nMTw.js} +5 -3
  39. package/dist/{capability-CksyCWDH.d.ts → capability-BSslw1QV.d.ts} +44 -25
  40. package/dist/{capability-txATtKV4.js → capability-N1K9IpqS.js} +68 -42
  41. package/dist/casbin-Cr7RLtA3.js +30 -0
  42. package/dist/casbin-Dyu2gnUD.js +234 -0
  43. package/dist/casl-64gpT-8x.js +24 -0
  44. package/dist/casl-DjEDhTCP.js +299 -0
  45. package/dist/catalog/index.d.ts +74 -2
  46. package/dist/catalog/index.js +51 -2
  47. package/dist/{catalog-tZUyOfOv.js → catalog-BECMPrwc.js} +51 -6
  48. package/dist/catalog-DjhMYYCq.js +1 -0
  49. package/dist/catalog-R_A__RsH.js +52 -0
  50. package/dist/{catalog-doc-DWtg0gGR.js → catalog-doc-C9wjsfNY.js} +45 -23
  51. package/dist/catalog-fingerprint-CCP0-yQS.js +153 -0
  52. package/dist/chat/index.d.ts +2 -0
  53. package/dist/chat/index.js +224 -0
  54. package/dist/chat-sdk/index.d.ts +87 -0
  55. package/dist/chat-sdk/index.js +197 -0
  56. package/dist/claims-map-7oQ3ue4X.js +13 -0
  57. package/dist/claims-map-Ca-QX8C6.d.ts +32 -0
  58. package/dist/claude-agent/index.d.ts +7 -14
  59. package/dist/claude-agent/index.js +24 -27
  60. package/dist/clerk/index.d.ts +9 -8
  61. package/dist/clerk/index.js +9 -14
  62. package/dist/cli/bin.js +36 -17
  63. package/dist/cli/index.d.ts +19 -5
  64. package/dist/cli/index.js +164 -4
  65. package/dist/cloud/index.d.ts +102 -63
  66. package/dist/cloud/index.js +239 -340
  67. package/dist/cloud-CIoHNevm.js +87 -0
  68. package/dist/codemod-Bmj9dWMH.js +37 -0
  69. package/dist/codemod-Cxvvc70T.js +2084 -0
  70. package/dist/{collect-2SrB7lfk.js → collect-CrZJJnEF.js} +75 -11
  71. package/dist/collect-DloHbDVa.js +55 -0
  72. package/dist/collect-FlXJlhus.js +1 -0
  73. package/dist/command-L8EstFNm.js +6 -0
  74. package/dist/compile/index.d.ts +1 -1
  75. package/dist/compile/index.js +1 -2
  76. package/dist/{compile-CcEu2ZQ1.js → compile-CMqMx_IN.js} +11 -8
  77. package/dist/{compile-CtTP7eur.d.ts → compile-Ckm2HqBZ.d.ts} +5 -3
  78. package/dist/completion-BqhRBJD8.js +143 -0
  79. package/dist/config-B46rm9sc.js +26 -0
  80. package/dist/{config-BIjREpyE.js → config-bs_kZeYq.js} +12 -7
  81. package/dist/{config-report--Xb9APJS.js → config-report-DUgj62Ai.js} +15 -5
  82. package/dist/{connection-DUsczpB5.js → connection-DjhIJSs2.js} +6 -5
  83. package/dist/{context-DieZVJXu.js → context-bbFHR-0D.js} +2 -2
  84. package/dist/convex/index.d.ts +11 -10
  85. package/dist/convex/index.js +6 -4
  86. package/dist/create-0VZ7Pdiu.d.ts +107 -0
  87. package/dist/create-BDS7wc3y.d.ts +138 -0
  88. package/dist/create-BFfm17UA.d.ts +110 -0
  89. package/dist/create-BWRSXgOF.js +403 -0
  90. package/dist/create-C3b4B5eF.js +130 -0
  91. package/dist/{create-BBO24vj6.js → create-DnrmLnLW.js} +31 -32
  92. package/dist/{credential-kue0qpbm.js → credential-DM2um3ha.js} +152 -31
  93. package/dist/credentials-DPyHmYz5.js +74 -0
  94. package/dist/delegation-DaXVdDhM.js +286 -0
  95. package/dist/delivery/index.d.ts +5 -0
  96. package/dist/delivery/index.js +5 -0
  97. package/dist/delivery-DCAgNyCn.js +499 -0
  98. package/dist/delivery-event-xX4obB8F.js +40 -0
  99. package/dist/{denied-text-DfRk15uw.d.ts → denied-text-D8jDHgsl.d.ts} +5 -5
  100. package/dist/{describe-C3ldA9os.d.ts → describe-BZUsixiL.d.ts} +2 -2
  101. package/dist/{describe-Cgkp7eP0.js → describe-BybMRY7A.js} +6 -2
  102. package/dist/device-BARQ8eYG.js +193 -0
  103. package/dist/diff-CxZo9pTq.js +37 -0
  104. package/dist/{diff-rpqoe7Ag.js → diff-DCePiN6M.js} +60 -54
  105. package/dist/doctor-CxiwSfqH.js +44 -0
  106. package/dist/{doctor-owlv6ddh.js → doctor-DFjUxf2f.js} +245 -50
  107. package/dist/drizzle/index.d.ts +5 -3
  108. package/dist/drizzle/index.js +2 -2
  109. package/dist/elysia/index.d.ts +16 -13
  110. package/dist/elysia/index.js +13 -12
  111. package/dist/env-DJZrPjRi.js +8 -0
  112. package/dist/errors-BDUwg2qC.js +27 -0
  113. package/dist/{errors-drnfxYtm.js → errors-BKy0EfhN.js} +5 -9
  114. package/dist/errors-BWXBMaKK.d.ts +11 -0
  115. package/dist/{errors-OD_4c__H.d.ts → errors-C2PXIv4c.d.ts} +2 -2
  116. package/dist/errors-CWTY6uih.js +143 -0
  117. package/dist/evaluate-_R8QkWaf.js +1732 -0
  118. package/dist/evaluations-16UqqQ6W.d.ts +32 -0
  119. package/dist/{evaluations-C9YJsv3H.js → evaluations-DZ2CbV5k.js} +145 -34
  120. package/dist/eve/index.d.ts +12 -16
  121. package/dist/eve/index.js +22 -28
  122. package/dist/event-time-CsegxXxB.js +23 -0
  123. package/dist/expiry-D4_YKRKD.js +52 -0
  124. package/dist/express/index.d.ts +13 -10
  125. package/dist/express/index.js +12 -11
  126. package/dist/fastify/index.d.ts +25 -22
  127. package/dist/fastify/index.js +13 -12
  128. package/dist/fetch-adapter-g0ypLkID.js +120 -0
  129. package/dist/fetch-adapter-qKJBuRqy.d.ts +31 -0
  130. package/dist/fields-D9tPVUUS.js +203 -0
  131. package/dist/files-C5ZI27eV.js +124 -0
  132. package/dist/{fixtures-h2eG2OZV.js → fixtures-B7XrLeY7.js} +8 -7
  133. package/dist/flags-C3DktBDY.js +86 -0
  134. package/dist/{from-snapshot-7REQZe0H.js → from-snapshot-D2lZt4Dd.js} +55 -52
  135. package/dist/{grantee-CXY-0C87.js → grantee-Cn1HyUsI.js} +3 -3
  136. package/dist/{grantee-conditions-MQs5NIuX.js → grantee-conditions-CcXf8hMM.js} +4 -3
  137. package/dist/{grantee-match-fxYp9Nmt.js → grantee-match-DHArqY82.js} +5 -4
  138. package/dist/h3/index.d.ts +37 -0
  139. package/dist/h3/index.js +35 -0
  140. package/dist/headers-BIjfMaoC.js +8 -0
  141. package/dist/headers-CIbDTUTK.d.ts +7 -0
  142. package/dist/{helpers-C9YmyBIa.js → helpers-DTcZOzhF.js} +45 -38
  143. package/dist/hono/index.d.ts +12 -9
  144. package/dist/hono/index.js +13 -12
  145. package/dist/hosted-BZIAYvon.js +315 -0
  146. package/dist/hosted-DBDX0M-P.d.ts +78 -0
  147. package/dist/{http-DPuDaChb.d.ts → http-B_LphE5Y.d.ts} +1 -2
  148. package/dist/http-DXJ37RDA.js +46 -0
  149. package/dist/{http-BEbdMZ05.js → http-ujKm0JXE.js} +1 -2
  150. package/dist/{import-UHk1N7vH.js → import-CNV7I2Dw.js} +25 -20
  151. package/dist/{import-BFIlhetD.js → import-DMmOG27O.js} +190 -53
  152. package/dist/index-BcHcPyIo.d.ts +110 -0
  153. package/dist/index-CaxrMD1A.d.ts +1 -0
  154. package/dist/index-Chrs5fQ-.d.ts +210 -0
  155. package/dist/index-CxGUswIC.d.ts +431 -0
  156. package/dist/index-D8EovfsP.d.ts +91 -0
  157. package/dist/{index-UdVQgq48.d.ts → index-DOVf7RJv.d.ts} +431 -81
  158. package/dist/{index-BwMe94Xq.d.ts → index-SGdIQyzc.d.ts} +34 -16
  159. package/dist/index.d.ts +19 -15
  160. package/dist/index.js +31 -21
  161. package/dist/init-DeMYsnYJ.js +96 -0
  162. package/dist/init-GG6Jh8HD.js +95 -0
  163. package/dist/{instance-options-plkrsAog.d.ts → instance-options-Omfd793B.d.ts} +2 -2
  164. package/dist/instance-snapshot-Cxq4ygFc.js +600 -0
  165. package/dist/instant-BluqDvyS.js +19 -0
  166. package/dist/internals-Dk8A8fX3.js +17 -0
  167. package/dist/{json-schema-DBkdUuCO.js → json-schema-B-vAwlde.js} +45 -6
  168. package/dist/json-schema-CN_iLFH2.d.ts +40 -0
  169. package/dist/jwt/index.d.ts +18 -11
  170. package/dist/jwt/index.js +156 -135
  171. package/dist/{kernel-CB3LrIJM.js → kernel-5JatXyND.js} +52 -24
  172. package/dist/kysely/index.d.ts +5 -3
  173. package/dist/kysely/index.js +2 -2
  174. package/dist/load-BxEtwlBS.js +1 -0
  175. package/dist/{load-C3_oTHyO.js → load-DFS_ry0W.js} +22 -6
  176. package/dist/{load-jose-BL6LH4bL.js → load-jose-DZ4dnjri.js} +1 -4
  177. package/dist/login-Dfe5RlYk.js +68 -0
  178. package/dist/login-imhuwvn3.js +254 -0
  179. package/dist/manifest-C8IzW3Do.js +42 -0
  180. package/dist/manifest-CtKR3GXL.js +370 -0
  181. package/dist/manifest-json-CAGzls-C.js +9 -0
  182. package/dist/{manifest-uDS9y5de.d.ts → manifest-mx5ghSFM.d.ts} +9 -2
  183. package/dist/manifest-schema-C0kK_8V0.js +399 -0
  184. package/dist/{map-claims-AVlBaJoa.js → map-claims-D3oRmTk0.js} +13 -10
  185. package/dist/{map-error-BE27PYkE.js → map-error-TCAdw-eW.js} +3 -3
  186. package/dist/{markers-CiwAOZtO.js → markers-C6joDI3o.js} +2 -1
  187. package/dist/mcp/index.d.ts +22 -12
  188. package/dist/mcp/index.js +57 -39
  189. package/dist/{migrate-BwlB5-Wk.js → migrate-BShP7Vf4.js} +53 -14
  190. package/dist/nest/index.d.ts +12 -9
  191. package/dist/nest/index.js +15 -14
  192. package/dist/next/index.d.ts +18 -21
  193. package/dist/next/index.js +13 -11
  194. package/dist/next/plugin.d.ts +1 -1
  195. package/dist/next/plugin.js +2 -2
  196. package/dist/node/index.d.ts +10 -10
  197. package/dist/node/index.js +7 -9
  198. package/dist/{ocsf-uYFXGVw2.js → ocsf-BFp-PZZA.js} +22 -11
  199. package/dist/openai/index.d.ts +9 -16
  200. package/dist/openai/index.js +17 -24
  201. package/dist/openapi/index.d.ts +3 -3
  202. package/dist/openapi/index.js +1 -1
  203. package/dist/{openapi-DBzHQbov.js → openapi-B7HZ0f-r.js} +8 -8
  204. package/dist/{openapi-BJdBmYDG.js → openapi-DTaEmTSW.js} +10 -9
  205. package/dist/openapi-ahr8rHu3.js +138 -0
  206. package/dist/operation-findings-DgATDpvh.js +36 -0
  207. package/dist/operations-CxybZErY.d.ts +59 -0
  208. package/dist/orpc/index.d.ts +13 -10
  209. package/dist/orpc/index.js +20 -15
  210. package/dist/otel/index.d.ts +3 -2
  211. package/dist/otel/index.js +30 -7
  212. package/dist/output-Dyw8fyPF.js +88 -0
  213. package/dist/output-files-B3IZJksC.js +1 -0
  214. package/dist/{output-files-CgIsvdSa.js → output-files-DhRBBE4n.js} +24 -26
  215. package/dist/{permission-keys-B26jeyUv.js → ownership-BatFgAA4.js} +1698 -869
  216. package/dist/{package-root-DtNnpmUd.js → package-root-Dk_ETdkp.js} +1 -1
  217. package/dist/{parse-CVFQHk6c.js → parse-Cxq0WxrA.js} +2 -2
  218. package/dist/{parse-local-manifest-C-q02Pal.js → parse-local-manifest-CVSs6J9I.js} +1 -1
  219. package/dist/{parse-local-manifest-DvYUR0QL.d.ts → parse-local-manifest-DgqtruPn.d.ts} +1 -1
  220. package/dist/parse-request-D_tUXG6M.js +26 -0
  221. package/dist/paths-DXSHAMIa.js +42 -0
  222. package/dist/pdp/index.d.ts +7 -3
  223. package/dist/pdp/index.js +45 -26
  224. package/dist/{peer-BOr_kJE1.js → peer-C8swJ2GH.js} +23 -4
  225. package/dist/peer-CRvC7Hg1.js +1 -0
  226. package/dist/permdock-B9JxkBwC.js +868 -0
  227. package/dist/permdock-D7eeLJER.d.ts +502 -0
  228. package/dist/{permission-registry-BsblpB-z.js → permission-registry-Br4jSNVi.js} +3 -3
  229. package/dist/permissions-B-wCP5ZC.js +30 -0
  230. package/dist/{permissions-CCJ6lmxB.js → permissions-CZKiUfFM.js} +4 -3
  231. package/dist/{permissions-COH-KRgT.d.ts → permissions-oEWfl-kl.d.ts} +1 -2
  232. package/dist/policies-CO1oOymN.js +295 -0
  233. package/dist/{policy-ur0BBK_e.d.ts → policy-Czo4n3Hs.d.ts} +2 -2
  234. package/dist/{hosted-CBHgkzDl.js → policy-DLZJ5gAp.js} +17 -273
  235. package/dist/policy-from-catalog-DzhEc3Y9.js +450 -0
  236. package/dist/policy-module-CTlwMvLI.js +89 -0
  237. package/dist/{policy-types-sp9P1iIV.d.ts → policy-types-DzwivBgR.d.ts} +434 -631
  238. package/dist/postgrest-CW0IqC-U.js +566 -0
  239. package/dist/postgrest-NUqZT-RB.d.ts +100 -0
  240. package/dist/powersync-BHfuehf3.js +62 -0
  241. package/dist/powersync-CbzkqL_M.js +1 -0
  242. package/dist/{powersync-cZe4kzhL.js → powersync-bYUDLOAO.js} +23 -24
  243. package/dist/preset/index.d.ts +146 -0
  244. package/dist/preset/index.js +1 -0
  245. package/dist/preset-DZdU0tne.js +1768 -0
  246. package/dist/principal-source-pHneukrx.js +103 -0
  247. package/dist/prisma/index.d.ts +6 -3
  248. package/dist/prisma/index.js +2 -2
  249. package/dist/{problem-CnWraVhC.js → problem-CTviyH5L.js} +13 -23
  250. package/dist/{problem-details-rIIo8B2C.d.ts → problem-details-DXlt-vks.d.ts} +1 -1
  251. package/dist/{problem-details-DECUnXAn.js → problem-details-cn5X30gZ.js} +43 -40
  252. package/dist/problem-types-CJ2325SZ.js +5 -0
  253. package/dist/{prompt-CXYhLfsS.js → prompt-DfZLJLIn.js} +2 -2
  254. package/dist/{protected-B3_P7xuw.d.ts → protected-DEPHc2xV.d.ts} +16 -8
  255. package/dist/{protected-BN7BUdY1.js → protected-DfjY5mLA.js} +21 -4
  256. package/dist/{provider-Bi-0HNL3.js → provider-CC-u3bYP.js} +2 -2
  257. package/dist/{provider-kwHC9CZD.d.ts → provider-DMVt6yYn.d.ts} +1 -1
  258. package/dist/{provider-store-Ctt-81Ni.js → provider-store-B5Yrkhzr.js} +2 -2
  259. package/dist/pull-BgIfno6w.js +256 -0
  260. package/dist/pull-ByOks_Tg.js +1 -0
  261. package/dist/push-CmFVBOeI.js +116 -0
  262. package/dist/pushed-policy-BImMTTIM.d.ts +57 -0
  263. package/dist/pushed-policy-DobP7AHI.js +238 -0
  264. package/dist/react/index.d.ts +8 -8
  265. package/dist/react/index.js +6 -6
  266. package/dist/react/provider-client.d.ts +1 -1
  267. package/dist/react/provider-client.js +1 -2
  268. package/dist/react-native/index.d.ts +24 -72
  269. package/dist/react-native/index.js +24 -22
  270. package/dist/{refs-f3imMjNW.js → refs-K6eWUJ0H.js} +1 -1
  271. package/dist/{relation-walk-BXnlLtg2.js → relation-walk-3OyDBF0S.js} +2 -2
  272. package/dist/{relations-CvmSpG67.js → relations-BnCWnJGI.js} +3 -3
  273. package/dist/renames-CGj7YwcQ.js +175 -0
  274. package/dist/{replay-COpmZUfx.d.ts → replay-D7iKcLFe.d.ts} +1 -1
  275. package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
  276. package/dist/{request-context-BVM7aWNs.js → request-context-BTRTG7OT.js} +3 -3
  277. package/dist/request-schema-CMreVuFM.js +148 -0
  278. package/dist/resend/index.d.ts +126 -0
  279. package/dist/resend/index.js +379 -0
  280. package/dist/{resource-relations-D1Un3pcz.js → resource-relations-D_jw0BFx.js} +1 -1
  281. package/dist/{retire-BFcxL6un.js → retire-CALjIQ7e.js} +2 -2
  282. package/dist/{revocations-Cy06JNx2.d.ts → revocations-R07lFBnX.d.ts} +2 -0
  283. package/dist/rls-BA8an5Ap.js +336 -0
  284. package/dist/{rls-BEktUaqg.js → rls-j6t43t7n.js} +287 -689
  285. package/dist/{role-builder-B4GbKM-i.js → role-builder-CXbis5-X.js} +14 -207
  286. package/dist/{rpc-nYC3cR_u.js → rpc-aPyNi6tA.js} +7 -7
  287. package/dist/run-CNsApDpd.js +1 -0
  288. package/dist/run-DOfMtc9V.js +723 -0
  289. package/dist/run-ticket-BjhTOi6u.d.ts +124 -0
  290. package/dist/run-ticket-sxFI6LAk.js +337 -0
  291. package/dist/{runtime-D_tMXnsq.js → runtime-D3VTAiCA.js} +1 -1
  292. package/dist/{saas-DtaA4JuW.js → saas-FO-Q8oj0.js} +16 -14
  293. package/dist/scan-BOI5tJ-6.js +29 -0
  294. package/dist/{schema-DjQBcAP9.js → schema-B4v0Qrac.js} +102 -8
  295. package/dist/schema-yLuBWWsh.js +130 -0
  296. package/dist/scim/index.d.ts +2 -2
  297. package/dist/scim/index.js +1 -2
  298. package/dist/{scim-vFR1O5oG.js → scim-ClHtpyV3.js} +208 -76
  299. package/dist/{scopes-tvpa34ep.js → scopes-CUPSjo9q.js} +12 -7
  300. package/dist/server/index.d.ts +12 -143
  301. package/dist/server/index.js +12 -9
  302. package/dist/server-DqCT4CgZ.js +453 -0
  303. package/dist/{server-types-DdqBwZN_.d.ts → server-types-BLd4MnBX.d.ts} +51 -68
  304. package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
  305. package/dist/{shared-1uhI-e-b.js → shared-CD11nBbC.js} +18 -8
  306. package/dist/{shared-JhMeOsDF.js → shared-DvvFzYXe.js} +8 -9
  307. package/dist/signals-D3NcTKUS.js +32 -0
  308. package/dist/sink-BEZSlMS_.js +957 -0
  309. package/dist/sink-Bj_lDUDq.d.ts +225 -0
  310. package/dist/{skills-BZdRQkxs.js → skills-B6lVdD_W.js} +13 -6
  311. package/dist/skills-CTYwkl44.js +51 -0
  312. package/dist/snapshot-CXUWfsNy.js +269 -0
  313. package/dist/{snapshot-cache-Cod40D-X.js → snapshot-cache-DZHQ0KF6.js} +11 -5
  314. package/dist/{snapshot-cache-J5T7t_vD.d.ts → snapshot-cache-DqK9eDmM.d.ts} +7 -5
  315. package/dist/solid/index.d.ts +11 -12
  316. package/dist/solid/index.js +7 -7
  317. package/dist/solid-start/index.d.ts +52 -0
  318. package/dist/solid-start/index.js +49 -0
  319. package/dist/{sources-Dljy06zL.d.ts → sources-BV9j0DeZ.d.ts} +7 -13
  320. package/dist/{sources-B1-b-R0t.js → sources-vs5dGOsS.js} +125 -119
  321. package/dist/{sql-t8teWOfo.js → sql-B5T1IL83.js} +13 -1
  322. package/dist/src-DLfUWFAI.js +1851 -0
  323. package/dist/ssf/index.d.ts +4 -4
  324. package/dist/ssf/index.js +384 -47
  325. package/dist/standard-webhooks-6lg8v_is.d.ts +88 -0
  326. package/dist/standard-webhooks-DgFFD-Ga.js +228 -0
  327. package/dist/storage-C2bWdvJH.js +132 -0
  328. package/dist/{store-ILkLUj_o.js → store-4u_hxjWa.js} +40 -53
  329. package/dist/{store-options-CbUHDoSe.js → store-options-BqEakYRa.js} +26 -21
  330. package/dist/{stores-BHXdSbw9.js → stores-BbsD4fAR.js} +2 -2
  331. package/dist/{stores-Cxz_80g-.d.ts → stores-ClZUgeoP.d.ts} +7 -8
  332. package/dist/{stream-Dwsg6WwE.d.ts → stream-7-xmnf3U.d.ts} +2 -2
  333. package/dist/{stream-BMui98KK.js → stream-CvdUS9V1.js} +9 -2
  334. package/dist/style-DiKWnAvn.js +1 -0
  335. package/dist/{style-CTm1AXDT.js → style-Uao76wO7.js} +3 -2
  336. package/dist/subject-BGoM5o8B.js +17 -0
  337. package/dist/supabase/index.d.ts +23 -106
  338. package/dist/supabase/index.js +5 -4
  339. package/dist/supabase/middleware.d.ts +7 -6
  340. package/dist/supabase/middleware.js +13 -11
  341. package/dist/supabase-9pqI57pW.js +92 -0
  342. package/dist/{supabase-C1TWlnYt.js → supabase-Dxlp8A94.js} +98 -205
  343. package/dist/supabase-hook-CXcGpHqq.js +1 -0
  344. package/dist/{supabase-hook-Cva3ikXz.js → supabase-hook-DdDQhMlw.js} +951 -60
  345. package/dist/support-session-C6xJQYut.js +158 -0
  346. package/dist/svelte/Protected.svelte +4 -4
  347. package/dist/svelte/index.d.ts +7 -7
  348. package/dist/svelte/index.js +10 -10
  349. package/dist/svelte/runtime.d.ts +3 -3
  350. package/dist/svelte/runtime.js +3 -3
  351. package/dist/svelte/source.d.ts +7 -7
  352. package/dist/svelte/source.js +4 -4
  353. package/dist/sveltekit/index.d.ts +51 -0
  354. package/dist/sveltekit/index.js +27 -0
  355. package/dist/tanstack-start/index.d.ts +51 -0
  356. package/dist/tanstack-start/index.js +40 -0
  357. package/dist/target-Bw37TFNA.js +51 -0
  358. package/dist/{tenancy-DshjqY0n.js → tenancy-DN2QAx9z.js} +5 -5
  359. package/dist/terminal/index.d.ts +11 -9
  360. package/dist/terminal/index.js +23 -287
  361. package/dist/testing/index.d.ts +311 -38
  362. package/dist/testing/index.js +3475 -201
  363. package/dist/testing/saas/index.d.ts +9 -8
  364. package/dist/testing/saas/index.js +2 -2
  365. package/dist/testing/saas/permissions.d.ts +1 -1
  366. package/dist/testing/saas/permissions.js +1 -2
  367. package/dist/text-BMFRfBqc.js +8 -0
  368. package/dist/{text-diff-BdkkYSbi.js → text-diff-BQcUapOb.js} +1 -1
  369. package/dist/thenable-yD7SabqG.js +31 -0
  370. package/dist/time-DkWjdL98.js +71 -0
  371. package/dist/{token-Bx9qy30p.js → token-BLZcjQgt.js} +15 -6
  372. package/dist/{tool-refusal-CQ7OEia9.js → tool-refusal-CMLN5xhn.js} +2 -2
  373. package/dist/trpc/index.d.ts +12 -9
  374. package/dist/trpc/index.js +16 -14
  375. package/dist/{types-7rJVLWe5.d.ts → types-5Ut_pbKy.d.ts} +61 -11
  376. package/dist/{store-9KO4BlkB.d.ts → types-BNORmDM8.d.ts} +100 -75
  377. package/dist/types-BjV-fqcA.d.ts +57 -0
  378. package/dist/{types-CUcFZfpU.d.ts → types-BqAKcRNW.d.ts} +2 -1
  379. package/dist/types-C8-KNsFf.d.ts +107 -0
  380. package/dist/{types-Br9IXUBG.d.ts → types-CCpc2Dcv.d.ts} +77 -17
  381. package/dist/{types-DpWfQdSh.d.ts → types-CZTnPFzM.d.ts} +46 -11
  382. package/dist/{types-CqrjB9o6.d.ts → types-CdlxsYQh.d.ts} +23 -11
  383. package/dist/{types-CIlTojhq.d.ts → types-ClZaWzfb.d.ts} +9 -6
  384. package/dist/types-DX0LaKTb.d.ts +157 -0
  385. package/dist/types-DiQjupG2.d.ts +332 -0
  386. package/dist/types-DqzsnlSA.js +67 -0
  387. package/dist/types-_sHy8BQf.d.ts +65 -0
  388. package/dist/{types-ByUo56un.d.ts → types-fbZ7JEXr.d.ts} +23 -22
  389. package/dist/{types-DHrmBJLH.d.ts → types-tIgIeIKJ.d.ts} +7 -7
  390. package/dist/unplugin/index.d.ts +1 -1
  391. package/dist/unplugin/index.js +2 -2
  392. package/dist/usage-CHOtwL19.js +1 -0
  393. package/dist/usage-DHtE8j4E.js +32 -0
  394. package/dist/{usage-CG9nOYZw.js → usage-T5mXq98v.js} +54 -11
  395. package/dist/{validation-error-BSSw0l_8.d.ts → validation-error-Bg5Tpluk.d.ts} +1 -1
  396. package/dist/{validity-dVrUEPJt.js → validity-CZ7-y0Cj.js} +32 -15
  397. package/dist/{verifier-DMr_Zmb_.js → verifier-DHuh-okk.js} +18 -7
  398. package/dist/{verify-BztUB3GX.js → verify-DbCL9bnB.js} +645 -50
  399. package/dist/{version-BEogC-rB.js → version-CEbQ5UeM.js} +4 -3
  400. package/dist/version-DXkYUISx.js +1 -0
  401. package/dist/{views-CJsrBS1f.js → views-DTIIO-oQ.js} +22 -5
  402. package/dist/{permission-types-Dg39z9Kv.d.ts → vocabulary-D6lPdb4Z.d.ts} +65 -2
  403. package/dist/vue/index.d.ts +9 -10
  404. package/dist/vue/index.js +8 -8
  405. package/dist/waiter-BGUtGYoU.js +67 -0
  406. package/dist/waiter-CKy4MQSY.d.ts +36 -0
  407. package/dist/watch-Cb-NcaUw.js +1 -0
  408. package/dist/{watch-zeucB7eF.js → watch-CszoTJMq.js} +44 -5
  409. package/dist/webmcp/index.d.ts +2 -2
  410. package/dist/webmcp/index.js +3 -3
  411. package/dist/where-scope-Dv-WTP-w.js +306 -0
  412. package/dist/who-can-D0QoYbEb.js +364 -0
  413. package/dist/wire-delegation-Cv3W2eaM.js +36 -0
  414. package/dist/wire-denial-C7PaVYEM.js +27 -0
  415. package/dist/workflow/index.d.ts +5 -0
  416. package/dist/workflow/index.js +223 -0
  417. package/dist/workflow-sdk/index.d.ts +56 -0
  418. package/dist/workflow-sdk/index.js +78 -0
  419. package/dist/{wrap-Cr93qqdP.d.ts → wrap-Bd1Tejur.d.ts} +2 -1
  420. package/dist/{wrap-DWsU_5Bd.js → wrap-gX61EtpB.js} +7 -6
  421. package/package.json +136 -37
  422. package/schemas/access-event-v1.json +118 -0
  423. package/schemas/approval-request-v1.json +34 -1
  424. package/schemas/approval-signature-v1.json +94 -0
  425. package/schemas/automation-event-v1.json +113 -0
  426. package/schemas/capability-v1.json +84 -0
  427. package/schemas/catalog-event-v1.json +87 -0
  428. package/schemas/catalog-v1.json +123 -12
  429. package/schemas/cli-commands-v1.json +164 -0
  430. package/schemas/cli-result-v1.json +96 -0
  431. package/schemas/cloud-api-v1.json +5407 -0
  432. package/schemas/connector-v1.json +408 -0
  433. package/schemas/credential-event-v1.json +81 -0
  434. package/schemas/credential-v1.json +134 -0
  435. package/schemas/decision-event-v1.json +288 -0
  436. package/schemas/delivery-event-v1.json +117 -0
  437. package/schemas/directory-event-v1.json +85 -0
  438. package/schemas/evidence-export-v1.json +54 -0
  439. package/schemas/membership-event-v1.json +93 -0
  440. package/schemas/policy-v1.json +68 -0
  441. package/schemas/pushed-policy-v1.json +236 -0
  442. package/schemas/run-v1.json +162 -0
  443. package/schemas/snapshot-v1.json +138 -0
  444. package/schemas/supabase-claims-v1.json +4 -4
  445. package/schemas/supabase-manifest-v1.json +5 -1
  446. package/schemas/support-session-v1.json +111 -0
  447. package/skills/permdock/SKILL.md +16 -12
  448. package/skills/permdock-agents/SKILL.md +40 -23
  449. package/skills/permdock-agents/references/operations-automations-chat.md +221 -0
  450. package/skills/permdock-agents/references/runtimes.md +22 -18
  451. package/skills/permdock-approvals/SKILL.md +29 -13
  452. package/skills/permdock-approvals/references/delivery-and-waiters.md +172 -0
  453. package/skills/permdock-approvals/references/stores-and-resume.md +21 -7
  454. package/skills/permdock-audit/SKILL.md +3 -3
  455. package/skills/permdock-credentials/SKILL.md +5 -5
  456. package/skills/permdock-credentials/references/tokens-keys-links.md +14 -10
  457. package/skills/permdock-data/SKILL.md +6 -6
  458. package/skills/permdock-data/references/queries-and-rls.md +9 -8
  459. package/skills/permdock-data/references/relationships.md +3 -3
  460. package/skills/permdock-tenancy/SKILL.md +20 -7
  461. package/skills/permdock-tenancy/references/contacts-and-support-sessions.md +122 -0
  462. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +5 -4
  463. package/skills/permdock-wire/SKILL.md +17 -11
  464. package/skills/permdock-wire/references/adapters.md +139 -51
  465. package/skills/permdock-wire/references/policy-options.md +5 -5
  466. package/skills/permdock-wire/references/presets-and-recipes.md +58 -0
  467. package/dist/approvals-DZL76lKW.js +0 -240
  468. package/dist/arazzo-CD8d0WLb.js +0 -54
  469. package/dist/catalog-6yWAX6Ps.js +0 -2
  470. package/dist/catalog-WHG4kBq7.js +0 -48
  471. package/dist/cloud-C7bSDgX4.js +0 -50
  472. package/dist/cloud-PeBN3IEn.js +0 -118
  473. package/dist/collect-Bw2Jdq1q.js +0 -2
  474. package/dist/collect-CQx4hX4N.js +0 -83
  475. package/dist/commands-Cpip4ULx.js +0 -97
  476. package/dist/config-DLt6BvV7.js +0 -36
  477. package/dist/diff-Cnghh_Ip.js +0 -48
  478. package/dist/doctor-CuVJvhV_.js +0 -53
  479. package/dist/duration-xK2jGFVc.js +0 -25
  480. package/dist/errors-CWfoNg9N.js +0 -47
  481. package/dist/errors-DRnGZHzF.js +0 -30
  482. package/dist/expiry-BoBJ8Tvc.js +0 -7
  483. package/dist/fields-fwfXN01n.js +0 -1016
  484. package/dist/headers-BZSDieNT.js +0 -6
  485. package/dist/headers-Cf-zWvsO.d.ts +0 -6
  486. package/dist/ids-DC4V4CFu.js +0 -18
  487. package/dist/index-DgM7w96K.d.ts +0 -6
  488. package/dist/index-Dz7didpC.d.ts +0 -201
  489. package/dist/load-B_shHrmd.js +0 -2
  490. package/dist/manifest-BngWKryL.js +0 -770
  491. package/dist/may-use-BOn_dR_w.js +0 -78
  492. package/dist/openapi-DcQ1Kg40.js +0 -164
  493. package/dist/ownership-BgnbOJFT.js +0 -851
  494. package/dist/permdock-L26udHSk.js +0 -3646
  495. package/dist/powersync-BFSbSElQ.js +0 -62
  496. package/dist/powersync-DCDgZgfZ.js +0 -2
  497. package/dist/rls-55DQTuf5.js +0 -250
  498. package/dist/run-DMcNW_8T.js +0 -174
  499. package/dist/server-ZYEHtNHS.js +0 -268
  500. package/dist/sink-BTtmfPnE.js +0 -141
  501. package/dist/sink-CPN4zLfs.d.ts +0 -104
  502. package/dist/skills-Dle4ZoLF.js +0 -56
  503. package/dist/snapshot-Dc9CHPME.js +0 -1078
  504. package/dist/src-Bb7no-hS.js +0 -639
  505. package/dist/subject-C6dLxqHU.js +0 -24
  506. package/dist/supabase-Dbqr141s.js +0 -83
  507. package/dist/supabase-hook-BULg7Ut_.js +0 -2
  508. package/dist/thenable-QSmvt-vZ.js +0 -65
  509. package/dist/types-C0dee0Qf.d.ts +0 -197
  510. package/dist/types-DvupZE0w.d.ts +0 -9
  511. package/dist/usage-4G6t643F.js +0 -42
  512. package/dist/usage-iFLJ0-rr.js +0 -2
  513. package/dist/vocabulary-hhEFLFoL.d.ts +0 -65
  514. package/dist/watch-C8TpsAl4.js +0 -2
@@ -1,144 +1,13 @@
1
- import { E as Policy, H as CredentialVerifier, Or as Principal, W as DecisionSink, ir as Decision, it as SettingsSource, j as PolicyVocabulary, kr as Subject, mt as Credential, ot as SubjectResolver, xt as CredentialPrincipal, yn as AuthEvent } from "../policy-types-sp9P1iIV.js";
2
- import { d as Permission, p as PermissionTree } from "../permission-types-Dg39z9Kv.js";
3
- import { n as PermDockValidationError, t as PROBLEM_BASE } from "../validation-error-BSSw0l_8.js";
4
- import { t as Disclosure } from "../problem-details-rIIo8B2C.js";
5
- import { a as ProblemDetails, i as PermDockRevokedError, n as PermDockApprovalRequiredError, r as PermDockDeniedError, t as ApprovalHint } from "../errors-OD_4c__H.js";
1
+ import { n as PermDockValidationError, t as PROBLEM_BASE } from "../validation-error-Bg5Tpluk.js";
2
+ import { i as PermDockRevokedError, n as PermDockApprovalRequiredError, r as PermDockDeniedError, t as ApprovalHint } from "../errors-C2PXIv4c.js";
6
3
  import { t as RequestContext } from "../request-context-C2_1lchh.js";
7
- import { i as memoryRevocationFeed, n as RevocationFeed, t as RevocationEvent } from "../revocations-Cy06JNx2.js";
8
- import { A as ConnectionOptions, C as verifyWebBotAuth, D as tenantScope, E as TenantScope, O as Connection, S as invalidSignatureResponse, T as TenantOption, _ as WebBotAuthKeys, a as OperationScopes, b as discoverViaSignatureAgent, c as ServerKernel, d as ServerPermDockOptions, f as SnapshotQuery, g as WebBotAuthKeyLookup, h as WebBotAuthJwk, i as OpenApiHooks, k as ConnectionData, l as ServerKernelOptions, m as InvalidSignatureError, n as OnDenied, o as ProtectOptions, p as DiscoverViaSignatureAgentOptions, r as OnDeniedEvent, s as ScopeGuard, t as Guard, u as ServerPermDock, v as WebBotAuthOptions, w as createEvaluationsHandler, x as invalidSignatureProblem, y as WebBotAuthVerifier } from "../server-types-DdqBwZN_.js";
9
- import { a as snapshotHeaders, i as cacheLifeFor, n as SnapshotHeaders, o as snapshotTag, r as SnapshotHeadersOptions, t as CacheLifeForOptions } from "../snapshot-cache-J5T7t_vD.js";
10
- //#region src/server/create.d.ts
11
- export declare function createPermDock<TUser, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, options: ServerPermDockOptions<TUser>): ServerPermDock<V>;
12
- /**
13
- * The kernel behind every HTTP adapter. The subject and actor are resolved
14
- * once per `Request`; one instance is cached per `(Request, tenant)`, so a
15
- * global middleware and a later tenant-scoped `protect` never share a tenant.
16
- */
17
- export declare function createServerKernel<TUser, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, options: ServerKernelOptions<TUser, V>): ServerKernel<V>;
18
- //#endregion
19
- //#region src/server/credentials.d.ts
20
- /** `on('auth')` causes for an API key that resolves to the anonymous subject. */
21
- type ApiKeyFailureCause = "malformed" | "unknown-credential" | "invalid-claims" | "expired" | "credential-policy" | "credential-revoked" | "owner-unavailable";
22
- /** An opaque key split at its last `_`: `pdk_<id>_<secret><checksum>`. */
23
- type ApiKeyParts = {
24
- readonly id: string;
25
- readonly secret: string;
26
- };
27
- /** What an application stores per key: the credential and the key's hash, never the key. */
28
- type StoredCredential = {
29
- readonly credential: Credential;
30
- readonly hash: string;
31
- };
32
- /**
33
- * Splits `pdk_<id>_<secret><checksum>`: `id` is 1 to 128 of `A-Z a-z 0-9 _ -`,
34
- * the secret 43 base62 characters and the checksum the 6 base62 characters of
35
- * the CRC-32 of everything before it. Anything else, including a checksum
36
- * that does not match, is `undefined`.
37
- */
38
- export declare function parseApiKey(key: unknown): ApiKeyParts | undefined;
39
- /**
40
- * A fresh `pdk_<id>_<secret><checksum>`: a 43-character base62 secret (about
41
- * 256 bits) and a 6-character CRC-32 checksum, so a secret scanner can tell a
42
- * real key from a lookalike without calling the issuer.
43
- */
44
- export declare function generateApiKey(id: string): string;
45
- /** base64url SHA-256 of the whole key, the value to store and compare. */
46
- export declare function hashApiKey(key: string): Promise<string>;
47
- /**
48
- * A `CredentialVerifier` over the application's own table: `find` looks a
49
- * key up by the id in it, and the key's hash is compared in constant time.
50
- * A record that is not a valid v1 credential, or whose id is not the key's,
51
- * verifies to `null`. A throwing `find` propagates, so the resolver denies
52
- * with `source-threw`.
53
- */
54
- export declare function apiKeyVerifier(options: {
55
- readonly find: (id: string) => StoredCredential | null | undefined | Promise<StoredCredential | null | undefined>;
56
- /** Passed through as the verifier's `touch`, for a `lastUsedAt` column. */
57
- readonly touch?: CredentialVerifier["touch"];
58
- }): CredentialVerifier;
59
- type MemoryCredentials = CredentialVerifier & {
60
- /** Stores `credential` and returns its key; the key is never stored. */
61
- issue(credential: Credential): Promise<string>;
62
- /** A new secret for the same id; the old key stops verifying at once. */
63
- rotate(id: string): Promise<string | undefined>;
64
- /** `true` when a credential was removed. */
65
- revoke(id: string): boolean;
66
- list(): readonly Credential[];
67
- /** When `touch` last recorded a use of `id`, in Unix seconds. */
68
- lastUsedAt(id: string): number | undefined;
69
- };
70
- /**
71
- * In-process credentials for tests and single-replica apps. `issue`, `rotate`
72
- * and `revoke` write `credential` events to `sink` when one is given.
73
- */
74
- export declare function memoryCredentials(options?: {
75
- readonly sink?: DecisionSink;
76
- readonly source?: string;
77
- }): MemoryCredentials;
78
- type ApiKeySubjectOptions = {
79
- readonly verifier: CredentialVerifier;
80
- /** The definitions, to turn the credential's permission keys into its delegation. */
81
- readonly permissions: PermissionTree;
82
- /**
83
- * The live owner of a user-bound key: roles and memberships as of this
84
- * request. `null` (a deleted or suspended user) is anonymous. Without it
85
- * the owner is `{ id, kind: 'user' }` and its rights come from the
86
- * `memberships` source passed to `createPermDock`.
87
- */
88
- readonly owner?: (id: string) => Principal | null | undefined | Promise<Principal | null | undefined>;
89
- /** `true` when the application revoked the credential id; a throw denies. */
90
- readonly revoked?: (id: string) => boolean | Promise<boolean>;
91
- /**
92
- * The tenant `credentials` policy, checked on every use so a tightened
93
- * policy reaches existing keys: a service key's own tenant, a user key's
94
- * the `tenant` the resolver is called with. A throw denies.
95
- */
96
- readonly settings?: SettingsSource;
97
- /** Receives a `credential` event with operation `used` for sampled uses. */
98
- readonly sink?: DecisionSink;
99
- /** Fraction of uses reported to `sink`, in `(0, 1]`; defaults to 1. */
100
- readonly sample?: number;
101
- /** The `source` of `used` events; defaults to `permdock`. */
102
- readonly source?: string;
103
- readonly onAuth?: (event: AuthEvent) => void;
104
- readonly requestId?: string;
105
- };
106
- /**
107
- * A `SubjectResolver` for opaque API keys (`pdk_<id>_<secret>`): each call
108
- * resolves a key into the subject its credential acts as. Every failure (a
109
- * malformed or unknown key, a record that is not a valid credential, expiry,
110
- * a tenant policy the key breaks, a revoked id, a missing owner, a throwing
111
- * verifier or callback) is the anonymous subject, never a throw.
112
- */
113
- export declare function subjectFromApiKey(options: ApiKeySubjectOptions): SubjectResolver<string | undefined | null, CredentialPrincipal>;
114
- //#endregion
115
- //#region src/server/map-error.d.ts
116
- type ProblemFromErrorOptions = {
117
- readonly instance?: string;
118
- /** Whether the request carried credentials, which picks the `401` challenge. */
119
- readonly credentials?: boolean;
120
- };
121
- /**
122
- * Turns a thrown PermDock error into its Problem Details response, with the
123
- * status, `WWW-Authenticate` and rate-limit fields `protect` sends for the
124
- * same decision. Returns `undefined` for anything else so the framework's own
125
- * error path takes over.
126
- */
127
- export declare function problemFromError(error: unknown, options?: ProblemFromErrorOptions): Response | undefined;
128
- //#endregion
129
- //#region src/server/problem.d.ts
130
- export declare function wwwAuthenticate(decision: Decision, permission: Permission | undefined, credentials?: boolean): string | undefined;
131
- export declare function problemResponse(details: ProblemDetails, permission?: Permission, decision?: Decision, extra?: Readonly<Record<string, string>>, credentials?: boolean): Response;
132
- export declare function validationProblem(detail: string): Response;
133
- export declare function problemFromDecision(decision: Decision, permission: Permission, subject: Subject | undefined, options?: {
134
- readonly instance?: string;
135
- readonly approval?: ApprovalHint;
136
- /** `'hide'` on a loaded row: a denial answers as `404` `/not-found`. */
137
- readonly disclosure?: Disclosure;
138
- /** Whether the request carried credentials, which picks the `401` challenge. */
139
- readonly credentials?: boolean;
140
- /** The scope an `insufficient_scope` challenge names; the permission's own scope when absent. */
141
- readonly scope?: string;
142
- }): Response;
143
- //#endregion
144
- export { type ApiKeyFailureCause, type ApiKeyParts, type ApiKeySubjectOptions, type ApprovalHint, type CacheLifeForOptions, type Connection, type ConnectionData, type ConnectionOptions, type DiscoverViaSignatureAgentOptions, type Guard, InvalidSignatureError, type MemoryCredentials, type OnDenied, type OnDeniedEvent, type OpenApiHooks, type OperationScopes, PROBLEM_BASE, PermDockApprovalRequiredError, PermDockDeniedError, PermDockRevokedError, PermDockValidationError, type ProblemFromErrorOptions, type ProtectOptions, type RequestContext, type RevocationEvent, type RevocationFeed, type ScopeGuard, type ServerKernel, type ServerKernelOptions, type ServerPermDock, type ServerPermDockOptions, type SnapshotHeaders, type SnapshotHeadersOptions, type SnapshotQuery, type StoredCredential, type TenantOption, type TenantScope, type WebBotAuthJwk, type WebBotAuthKeyLookup, type WebBotAuthKeys, type WebBotAuthOptions, type WebBotAuthVerifier, cacheLifeFor, createEvaluationsHandler, discoverViaSignatureAgent, invalidSignatureProblem, invalidSignatureResponse, memoryRevocationFeed, snapshotHeaders, snapshotTag, tenantScope, verifyWebBotAuth };
4
+ import { i as memoryRevocationFeed, n as RevocationFeed, t as RevocationEvent } from "../revocations-R07lFBnX.js";
5
+ import { C as TenantScope, D as ConnectionOptions, E as ConnectionData, S as TenantOption, T as Connection, _ as WebBotAuthVerifier, a as OperationScopes, b as invalidSignatureResponse, c as ServerPermDock, d as DiscoverViaSignatureAgentOptions, f as InvalidSignatureError, g as WebBotAuthOptions, h as WebBotAuthKeys, i as OpenApiHooks, l as ServerPermDockOptions, m as WebBotAuthKeyLookup, n as DeniedResponseEvent, o as ProtectOptions, p as WebBotAuthJwk, r as Guard, s as ScopeGuard, t as DeniedResponse, u as SnapshotQuery, v as discoverViaSignatureAgent, w as tenantScope, x as webBotAuthVerifier, y as invalidSignatureProblem } from "../server-types-BLd4MnBX.js";
6
+ import { i as evaluationsHandler } from "../evaluations-16UqqQ6W.js";
7
+ import { C as subjectFromApiKey, E as createPermDock, S as parseFeedKey, T as problemFromError, _ as generateApiKey, a as SupportSessionContext, b as memoryCredentialStore, c as SupportSessionSubjectOptions, d as ApiKeyFailureCause, f as ApiKeyParts, g as apiKeyVerifier, h as StoredCredential, i as wwwAuthenticate, l as signSupportSession, m as MemoryCredentialStore, n as problemResponse, o as SupportSessionFailureCause, p as ApiKeySubjectOptions, r as validationProblem, s as SupportSessionSource, t as problemFromDecision, u as subjectFromSupportSession, v as generateFeedKey, w as ProblemFromErrorOptions, x as parseApiKey, y as hashApiKey } from "../index-Chrs5fQ-.js";
8
+ import { l as ReplayStore } from "../types-DiQjupG2.js";
9
+ import { a as WebhookInput, c as WebhookMessage, d as WebhookSigningKey, f as WebhookVerifier, h as webhookVerifier, i as WebhookHeaders, l as WebhookSigner, m as webhookSigner, n as WebhookAlgorithm, o as WebhookJwk, p as WebhookVerifierOptions, r as WebhookFailureCause, s as WebhookJwks, t as VerifiedWebhookMessage, u as WebhookSignerOptions } from "../standard-webhooks-6lg8v_is.js";
10
+ import { t as memoryReplayStore } from "../replay-D7iKcLFe.js";
11
+ import { a as snapshotHeaders, i as cacheLifeFor, n as SnapshotHeaders, o as snapshotTag, r as SnapshotHeadersOptions, t as CacheLifeForOptions } from "../snapshot-cache-DqK9eDmM.js";
12
+ import { a as RunKind, c as RunTicketAutomations, d as RunTicketOptions, f as RunTicketSubjectOptions, h as subjectFromRunTicket, i as RunContext, l as RunTicketFailureCause, m as signRunTicket, n as RunAutomation, o as RunPrincipal, p as parseRunTicket, r as RunBinding, s as RunTicket, t as RunActClaim, u as RunTicketInput } from "../run-ticket-BjhTOi6u.js";
13
+ export { type ApiKeyFailureCause, type ApiKeyParts, type ApiKeySubjectOptions, type ApprovalHint, type CacheLifeForOptions, type Connection, type ConnectionData, type ConnectionOptions, type DeniedResponse, type DeniedResponseEvent, type DiscoverViaSignatureAgentOptions, type Guard, InvalidSignatureError, type MemoryCredentialStore, type OpenApiHooks, type OperationScopes, PROBLEM_BASE, PermDockApprovalRequiredError, PermDockDeniedError, PermDockRevokedError, PermDockValidationError, type ProblemFromErrorOptions, type ProtectOptions, type ReplayStore, type RequestContext, type RevocationEvent, type RevocationFeed, type RunActClaim, type RunAutomation, type RunBinding, type RunContext, type RunKind, type RunPrincipal, type RunTicket, type RunTicketAutomations, type RunTicketFailureCause, type RunTicketInput, type RunTicketOptions, type RunTicketSubjectOptions, type ScopeGuard, type ServerPermDock, type ServerPermDockOptions, type SnapshotHeaders, type SnapshotHeadersOptions, type SnapshotQuery, type StoredCredential, type SupportSessionContext, type SupportSessionFailureCause, type SupportSessionSource, type SupportSessionSubjectOptions, type TenantOption, type TenantScope, type VerifiedWebhookMessage, type WebBotAuthJwk, type WebBotAuthKeyLookup, type WebBotAuthKeys, type WebBotAuthOptions, type WebBotAuthVerifier, type WebhookAlgorithm, type WebhookFailureCause, type WebhookHeaders, type WebhookInput, type WebhookJwk, type WebhookJwks, type WebhookMessage, type WebhookSigner, type WebhookSignerOptions, type WebhookSigningKey, type WebhookVerifier, type WebhookVerifierOptions, apiKeyVerifier, cacheLifeFor, createPermDock, discoverViaSignatureAgent, evaluationsHandler, generateApiKey, generateFeedKey, hashApiKey, invalidSignatureProblem, invalidSignatureResponse, memoryCredentialStore, memoryReplayStore, memoryRevocationFeed, parseApiKey, parseFeedKey, parseRunTicket, problemFromDecision, problemFromError, problemResponse, signRunTicket, signSupportSession, snapshotHeaders, snapshotTag, subjectFromApiKey, subjectFromRunTicket, subjectFromSupportSession, tenantScope, validationProblem, webBotAuthVerifier, webhookSigner, webhookVerifier, wwwAuthenticate };
@@ -1,11 +1,14 @@
1
1
  import { n as PermDockValidationError, t as PROBLEM_BASE } from "../validation-error-ZfUHbKvf.js";
2
- import { n as PermDockDeniedError, r as PermDockRevokedError, t as PermDockApprovalRequiredError } from "../errors-drnfxYtm.js";
2
+ import { n as PermDockDeniedError, r as PermDockRevokedError, t as PermDockApprovalRequiredError } from "../errors-BKy0EfhN.js";
3
3
  import { t as memoryRevocationFeed } from "../revocations-Bhr0aMIC.js";
4
- import { c as problemResponse, d as validationProblem, f as wwwAuthenticate, s as problemFromDecision } from "../problem-CnWraVhC.js";
5
- import { n as snapshotHeaders, r as snapshotTag, t as cacheLifeFor } from "../snapshot-cache-Cod40D-X.js";
6
- import { a as invalidSignatureProblem, i as discoverViaSignatureAgent, n as createEvaluationsHandler, o as invalidSignatureResponse, r as InvalidSignatureError, s as verifyWebBotAuth } from "../evaluations-C9YJsv3H.js";
7
- import { n as tenantScope } from "../adapter-context-mlWsVGGg.js";
8
- import { n as createServerKernel, t as createPermDock } from "../create-BBO24vj6.js";
9
- import { a as parseApiKey, i as memoryCredentials, n as generateApiKey, o as subjectFromApiKey, r as hashApiKey, t as apiKeyVerifier } from "../server-ZYEHtNHS.js";
10
- import { t as problemFromError } from "../map-error-BE27PYkE.js";
11
- export { InvalidSignatureError, PROBLEM_BASE, PermDockApprovalRequiredError, PermDockDeniedError, PermDockRevokedError, PermDockValidationError, apiKeyVerifier, cacheLifeFor, createEvaluationsHandler, createPermDock, createServerKernel, discoverViaSignatureAgent, generateApiKey, hashApiKey, invalidSignatureProblem, invalidSignatureResponse, memoryCredentials, memoryRevocationFeed, parseApiKey, problemFromDecision, problemFromError, problemResponse, snapshotHeaders, snapshotTag, subjectFromApiKey, tenantScope, validationProblem, verifyWebBotAuth, wwwAuthenticate };
4
+ import { c as problemResponse, d as validationProblem, f as wwwAuthenticate, s as problemFromDecision } from "../problem-CTviyH5L.js";
5
+ import { t as memoryReplayStore } from "../replay-Du1tJjG7.js";
6
+ import { n as snapshotHeaders, r as snapshotTag, t as cacheLifeFor } from "../snapshot-cache-DZHQ0KF6.js";
7
+ import { d as discoverViaSignatureAgent, f as invalidSignatureProblem, m as webBotAuthVerifier, o as evaluationsHandler, p as invalidSignatureResponse, u as InvalidSignatureError } from "../evaluations-DZ2CbV5k.js";
8
+ import { n as tenantScope } from "../adapter-context-CRhqyzCk.js";
9
+ import { t as createPermDock } from "../create-DnrmLnLW.js";
10
+ import { a as generateFeedKey, c as parseApiKey, i as generateApiKey, l as parseFeedKey, n as subjectFromSupportSession, o as hashApiKey, r as apiKeyVerifier, s as memoryCredentialStore, t as signSupportSession, u as subjectFromApiKey } from "../server-DqCT4CgZ.js";
11
+ import { n as signRunTicket, r as subjectFromRunTicket, t as parseRunTicket } from "../run-ticket-sxFI6LAk.js";
12
+ import { t as problemFromError } from "../map-error-TCAdw-eW.js";
13
+ import { n as webhookVerifier, t as webhookSigner } from "../standard-webhooks-DgFFD-Ga.js";
14
+ export { InvalidSignatureError, PROBLEM_BASE, PermDockApprovalRequiredError, PermDockDeniedError, PermDockRevokedError, PermDockValidationError, apiKeyVerifier, cacheLifeFor, createPermDock, discoverViaSignatureAgent, evaluationsHandler, generateApiKey, generateFeedKey, hashApiKey, invalidSignatureProblem, invalidSignatureResponse, memoryCredentialStore, memoryReplayStore, memoryRevocationFeed, parseApiKey, parseFeedKey, parseRunTicket, problemFromDecision, problemFromError, problemResponse, signRunTicket, signSupportSession, snapshotHeaders, snapshotTag, subjectFromApiKey, subjectFromRunTicket, subjectFromSupportSession, tenantScope, validationProblem, webBotAuthVerifier, webhookSigner, webhookVerifier, wwwAuthenticate };
@@ -0,0 +1,453 @@
1
+ import { t as compact } from "./compact-CAf557ZB.js";
2
+ import { a as ownRecord } from "./paths-DXSHAMIa.js";
3
+ import { m as annotationsFor, n as findPermission } from "./permission-registry-Br4jSNVi.js";
4
+ import { n as isThenable } from "./thenable-yD7SabqG.js";
5
+ import { f as nowMillis, g as secondsOf, m as rfc3339, o as epochSeconds, u as isoAt } from "./time-DkWjdL98.js";
6
+ import { t as bytesToBase64Url } from "./sha256-D9ihqmvd.js";
7
+ import { n as parseSupportSession } from "./support-session-C6xJQYut.js";
8
+ import { t as anonymousSubject } from "./subject-BGoM5o8B.js";
9
+ import { c as credentialEvent } from "./sink-BEZSlMS_.js";
10
+ import { i as credentialTenant, n as credentialPolicyViolation, o as isFeedId, r as credentialSubject, s as parseCredential } from "./credential-DM2um3ha.js";
11
+ //#region src/server/credentials.ts
12
+ const PREFIX = "pdk_";
13
+ const ID = /^[\w-]{1,128}$/u;
14
+ const TAIL = /^[A-Za-z\d]{49}$/u;
15
+ const ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
16
+ const SECRET_LENGTH = 43;
17
+ const CHECKSUM_LENGTH = 6;
18
+ const MAX_KEY = 182;
19
+ const CRC_TABLE = (() => {
20
+ const table = /* @__PURE__ */ new Uint32Array(256);
21
+ for (let index = 0; index < 256; index += 1) {
22
+ let value = index;
23
+ for (let bit = 0; bit < 8; bit += 1) value = value & 1 ? 3988292384 ^ value >>> 1 : value >>> 1;
24
+ table[index] = value >>> 0;
25
+ }
26
+ return table;
27
+ })();
28
+ /** CRC-32 (IEEE 802.3) of the key's ASCII bytes, as 6 characters of `alphabet`. */
29
+ function checksum(text, alphabet) {
30
+ let crc = 4294967295;
31
+ for (let index = 0; index < text.length; index += 1) crc = (CRC_TABLE[(crc ^ (text.codePointAt(index) ?? 0)) & 255] ?? 0) ^ crc >>> 8;
32
+ let value = (crc ^ 4294967295) >>> 0;
33
+ let out = "";
34
+ const base = alphabet.length;
35
+ for (let index = 0; index < CHECKSUM_LENGTH; index += 1) {
36
+ out = (alphabet[value % base] ?? "") + out;
37
+ value = Math.floor(value / base);
38
+ }
39
+ return out;
40
+ }
41
+ /**
42
+ * Splits `pdk_<id>_<secret><checksum>`: `id` is 1 to 128 of `A-Z a-z 0-9 _ -`,
43
+ * the secret 43 base62 characters and the checksum the 6 base62 characters of
44
+ * the CRC-32 of everything before it. Anything else, including a checksum
45
+ * that does not match, is `undefined`.
46
+ */
47
+ function parseApiKey(key) {
48
+ if (typeof key !== "string" || key.length > MAX_KEY || !key.startsWith(PREFIX)) return;
49
+ const body = key.slice(4);
50
+ const cut = body.lastIndexOf("_");
51
+ if (cut <= 0) return;
52
+ const id = body.slice(0, cut);
53
+ const tail = body.slice(cut + 1);
54
+ if (!ID.test(id) || !TAIL.test(tail)) return;
55
+ const secret = tail.slice(0, SECRET_LENGTH);
56
+ return tail.slice(SECRET_LENGTH) === checksum(`${PREFIX}${id}_${secret}`, ALPHABET) ? {
57
+ id,
58
+ secret
59
+ } : void 0;
60
+ }
61
+ const FEED_PREFIX = "pdfeed_";
62
+ const FEED_ALPHABET = "abcdefghijklmnopqrstuvwxyz234567";
63
+ const FEED_SECRET_LENGTH = 26;
64
+ const FEED_TAIL = /* @__PURE__ */ new RegExp(`^[a-z2-7]{${String(32)}}$`, "u");
65
+ /**
66
+ * Splits `pdfeed_<id>_<secret><checksum>`. `id` is `isFeedId`, the secret is
67
+ * 26 lowercase base32 characters and the checksum is 6 more. A checksum that
68
+ * does not match is `undefined`.
69
+ */
70
+ function parseFeedKey(key) {
71
+ if (typeof key !== "string" || key.length > 56 || !key.startsWith(FEED_PREFIX)) return;
72
+ const body = key.slice(7);
73
+ const cut = body.lastIndexOf("_");
74
+ if (cut <= 0) return;
75
+ const id = body.slice(0, cut);
76
+ const tail = body.slice(cut + 1);
77
+ if (!isFeedId(id) || !FEED_TAIL.test(tail)) return;
78
+ const secret = tail.slice(0, FEED_SECRET_LENGTH);
79
+ return tail.slice(FEED_SECRET_LENGTH) === checksum(`${FEED_PREFIX}${id}_${secret}`, FEED_ALPHABET) ? {
80
+ id,
81
+ secret
82
+ } : void 0;
83
+ }
84
+ /**
85
+ * A fresh `pdfeed_<id>_<secret><checksum>`: 26 lowercase base32 characters
86
+ * (130 bits) and a 6-character CRC-32 checksum. The whole key is lowercase.
87
+ */
88
+ function generateFeedKey(id) {
89
+ if (!isFeedId(id)) throw new TypeError("PermDock: a feed id is 1 to 16 of a-z, 0-9 and -");
90
+ let secret = "";
91
+ const bytes = /* @__PURE__ */ new Uint8Array(64);
92
+ while (secret.length < FEED_SECRET_LENGTH) {
93
+ globalThis.crypto.getRandomValues(bytes);
94
+ for (const byte of bytes) if (secret.length < FEED_SECRET_LENGTH) secret += FEED_ALPHABET[byte % 32];
95
+ }
96
+ const key = `${FEED_PREFIX}${id}_${secret}`;
97
+ return `${key}${checksum(key, FEED_ALPHABET)}`;
98
+ }
99
+ /**
100
+ * A fresh `pdk_<id>_<secret><checksum>`: a 43-character base62 secret (about
101
+ * 256 bits) and a 6-character CRC-32 checksum, so a secret scanner can tell a
102
+ * real key from a lookalike without calling the issuer.
103
+ */
104
+ function generateApiKey(id) {
105
+ if (!ID.test(id)) throw new TypeError("PermDock: an API key id is 1 to 128 of A-Z, a-z, 0-9, _ and -");
106
+ let secret = "";
107
+ const bytes = /* @__PURE__ */ new Uint8Array(64);
108
+ while (secret.length < SECRET_LENGTH) {
109
+ globalThis.crypto.getRandomValues(bytes);
110
+ for (const byte of bytes) if (byte < 248 && secret.length < SECRET_LENGTH) secret += ALPHABET[byte % 62];
111
+ }
112
+ const key = `${PREFIX}${id}_${secret}`;
113
+ return `${key}${checksum(key, ALPHABET)}`;
114
+ }
115
+ /** base64url SHA-256 of the whole key, the value to store and compare. */
116
+ async function hashApiKey(key) {
117
+ const digest = await globalThis.crypto.subtle.digest("SHA-256", new TextEncoder().encode(key));
118
+ return bytesToBase64Url(new Uint8Array(digest));
119
+ }
120
+ function sameHash(left, right) {
121
+ if (left.length !== right.length) return false;
122
+ let difference = 0;
123
+ for (let index = 0; index < left.length; index += 1) difference |= (left.codePointAt(index) ?? 0) ^ (right.codePointAt(index) ?? 0);
124
+ return difference === 0;
125
+ }
126
+ /**
127
+ * A `CredentialVerifier` over the application's own table: `find` looks a
128
+ * key up by the id in it, and the key's hash is compared in constant time.
129
+ * A record that is not a valid v1 credential, or whose id is not the key's,
130
+ * verifies to `null`. A throwing `find` propagates, so the resolver denies
131
+ * with `source-threw`.
132
+ */
133
+ function apiKeyVerifier(options) {
134
+ return Object.freeze({
135
+ ...options.touch === void 0 ? {} : { touch: options.touch },
136
+ async verify(secret) {
137
+ const parts = secret.startsWith(FEED_PREFIX) ? parseFeedKey(secret) : parseApiKey(secret);
138
+ if (parts === void 0) return null;
139
+ const stored = await options.find(parts.id);
140
+ if (stored === null || stored === void 0) return null;
141
+ const credential = parseCredential(stored.credential);
142
+ if (credential === void 0 || credential.id !== parts.id || typeof stored.hash !== "string" || !sameHash(await hashApiKey(secret), stored.hash)) return null;
143
+ return credential;
144
+ }
145
+ });
146
+ }
147
+ function write(sink, event) {
148
+ try {
149
+ const written = sink.write(event);
150
+ if (isThenable(written)) Promise.resolve(written).catch(() => void 0);
151
+ } catch {}
152
+ }
153
+ /**
154
+ * In-process credentials for tests and single-replica apps. `issue`, `rotate`
155
+ * and `revoke` write `credential` events to `sink` when one is given.
156
+ */
157
+ function memoryCredentialStore(options = {}) {
158
+ const records = /* @__PURE__ */ new Map();
159
+ const used = /* @__PURE__ */ new Map();
160
+ const verifier = apiKeyVerifier({ find: (id) => records.get(id) });
161
+ const emit = (operation, credential) => {
162
+ if (options.sink !== void 0) write(options.sink, [credentialEvent(compact({
163
+ operation,
164
+ credential,
165
+ source: options.source
166
+ }))]);
167
+ };
168
+ const store = async (credential) => {
169
+ const key = credential.kind === "feed" ? generateFeedKey(credential.id) : generateApiKey(credential.id);
170
+ records.set(credential.id, {
171
+ credential,
172
+ hash: await hashApiKey(key)
173
+ });
174
+ return key;
175
+ };
176
+ return Object.freeze({
177
+ verify: (secret) => verifier.verify(secret),
178
+ touch(id, at) {
179
+ if (records.has(id)) used.set(id, isoAt(at.epochMilliseconds));
180
+ },
181
+ lastUsedAt(id) {
182
+ return used.get(id);
183
+ },
184
+ async issue(input) {
185
+ const credential = parseCredential(input);
186
+ if (credential === void 0) throw new TypeError("PermDock: not a valid v1 credential");
187
+ if (records.has(credential.id)) throw new Error(`PermDock: credential '${credential.id}' exists`);
188
+ const key = await store(credential);
189
+ emit("created", credential);
190
+ return key;
191
+ },
192
+ async rotate(id) {
193
+ const current = records.get(id);
194
+ if (current === void 0) return;
195
+ const key = await store(current.credential);
196
+ emit("rotated", current.credential);
197
+ return key;
198
+ },
199
+ revoke(id) {
200
+ const current = records.get(id);
201
+ if (current === void 0) return false;
202
+ records.delete(id);
203
+ used.delete(id);
204
+ emit("revoked", current.credential);
205
+ return true;
206
+ },
207
+ list() {
208
+ return [...records.values()].map((record) => record.credential);
209
+ }
210
+ });
211
+ }
212
+ function isPrincipalRecord(value) {
213
+ return value !== null && typeof value === "object" && !Array.isArray(value) && Object.hasOwn(value, "id") && "id" in value && typeof value.id === "string";
214
+ }
215
+ async function checkStores(options, credential, active) {
216
+ try {
217
+ const tenant = credentialTenant(credential, active);
218
+ const policy = options.settings === void 0 || tenant === void 0 ? void 0 : (await options.settings.settingsFor(tenant))?.credentials;
219
+ if (policy !== void 0 && credentialPolicyViolation(credential, policy) !== void 0) return {
220
+ ok: false,
221
+ cause: "credential-policy"
222
+ };
223
+ if (options.revoked !== void 0 && await options.revoked(credential.id)) return {
224
+ ok: false,
225
+ cause: "credential-revoked"
226
+ };
227
+ if (credential.kind !== "user" || options.principals === void 0) return { ok: true };
228
+ const owner = await options.principals.principal(credential.principal, tenant === void 0 ? {} : { tenant });
229
+ if (!isPrincipalRecord(owner)) return {
230
+ ok: false,
231
+ cause: "owner-unavailable"
232
+ };
233
+ return {
234
+ ok: true,
235
+ owner
236
+ };
237
+ } catch {
238
+ return { ok: false };
239
+ }
240
+ }
241
+ function touch(verifier, id) {
242
+ if (verifier.touch === void 0) return;
243
+ try {
244
+ const touched = verifier.touch(id, { epochMilliseconds: nowMillis() });
245
+ if (isThenable(touched)) Promise.resolve(touched).catch(() => void 0);
246
+ } catch {}
247
+ }
248
+ function sampled(sample) {
249
+ if (sample === 1) return true;
250
+ const draw = /* @__PURE__ */ new Uint32Array(1);
251
+ globalThis.crypto.getRandomValues(draw);
252
+ return (draw[0] ?? 0) / 4294967296 < sample;
253
+ }
254
+ function reportUse(options, credential) {
255
+ const sample = options.sample ?? 1;
256
+ if (options.sink === void 0 || !Number.isFinite(sample) || sample <= 0 || sample > 1 || !sampled(sample)) return;
257
+ write(options.sink, [credentialEvent(compact({
258
+ operation: "used",
259
+ credential,
260
+ source: options.source,
261
+ sample
262
+ }))]);
263
+ }
264
+ function anonymous() {
265
+ return anonymousSubject();
266
+ }
267
+ /**
268
+ * Resolves an opaque API key (`pdk_<id>_<secret>`) into the subject its
269
+ * credential acts as. Every failure (a malformed or unknown key, a record
270
+ * that is not a valid credential, expiry, a tenant policy the key breaks, a
271
+ * revoked id, a missing owner, a throwing verifier, source or callback) is
272
+ * the anonymous subject, never a throw.
273
+ */
274
+ async function subjectFromApiKey(key, options) {
275
+ const tenant = options.tenant;
276
+ if (typeof key !== "string" || key.length === 0) return anonymous();
277
+ const deny = (cause, reason = "invalid-token") => {
278
+ try {
279
+ options.onAuth?.(compact({
280
+ reason,
281
+ cause,
282
+ source: "api-key",
283
+ requestId: options.requestId
284
+ }));
285
+ } catch {}
286
+ return anonymous();
287
+ };
288
+ const feedKey = key.startsWith(FEED_PREFIX);
289
+ const parts = feedKey ? parseFeedKey(key) : parseApiKey(key);
290
+ if (parts === void 0) return deny("malformed");
291
+ let verified;
292
+ try {
293
+ verified = await options.verifier.verify(key);
294
+ } catch {
295
+ return deny(void 0, "source-threw");
296
+ }
297
+ if (verified === null || verified === void 0) return deny("unknown-credential");
298
+ const credential = parseCredential(verified);
299
+ if (credential === void 0 || credential.id !== parts.id || feedKey !== (credential.kind === "feed") || options.kinds !== void 0 && !options.kinds.includes(credential.kind)) return deny("invalid-claims");
300
+ if (credential.expiresAt !== void 0 && Date.parse(credential.expiresAt) <= nowMillis()) return deny("expired");
301
+ const checked = await checkStores(options, credential, tenant);
302
+ if (!checked.ok) return checked.cause === void 0 ? deny(void 0, "source-threw") : deny(checked.cause);
303
+ const subject = credentialSubject(credential, compact({
304
+ permissions: options.permissions,
305
+ owner: checked.owner
306
+ }));
307
+ if (subject.principal === null) return deny("owner-unavailable");
308
+ reportUse(options, credential);
309
+ touch(options.verifier, credential.id);
310
+ return subject;
311
+ }
312
+ //#endregion
313
+ //#region src/server/support-session.ts
314
+ const SUPPORT_SESSION_TYP = "vnd.permdock.support-session+jwt";
315
+ /**
316
+ * Signs a granted `SupportSession` as a `vnd.permdock.support-session+jwt`
317
+ * (`sub` the viewed principal, `act` the support actor, `jti` the session
318
+ * id) that expires with the session. Throws a `TypeError` for a record
319
+ * `parseSupportSession` refuses.
320
+ */
321
+ function signSupportSession(session, signer, options = {}) {
322
+ const parsed = parseSupportSession(session);
323
+ if (parsed === void 0) throw new TypeError("PermDock: invalid support session");
324
+ return signer.sign(compact({
325
+ v: 1,
326
+ sub: parsed.principal,
327
+ act: {
328
+ sub: parsed.actor,
329
+ kind: "support"
330
+ },
331
+ tenant: parsed.tenant,
332
+ reason: parsed.reason,
333
+ permissions: parsed.permissions,
334
+ approved_by: parsed.approvedBy,
335
+ reference: parsed.reference
336
+ }), compact({
337
+ typ: SUPPORT_SESSION_TYP,
338
+ audience: options.audience,
339
+ expiresAt: secondsOf(parsed.expiresAt),
340
+ issuedAt: secondsOf(parsed.startedAt),
341
+ jti: parsed.id
342
+ }));
343
+ }
344
+ function sessionOf(claims) {
345
+ const record = ownRecord(claims);
346
+ const act = ownRecord(record?.["act"]);
347
+ const { iat, exp } = record ?? {};
348
+ if (record === void 0 || act === void 0 || act["kind"] !== "support" || act["act"] !== void 0 || typeof iat !== "number" || typeof exp !== "number" || !Number.isSafeInteger(iat) || !Number.isSafeInteger(exp)) return;
349
+ return parseSupportSession({
350
+ v: record["v"],
351
+ id: record["jti"],
352
+ principal: record["sub"],
353
+ actor: act["sub"],
354
+ tenant: record["tenant"],
355
+ reason: record["reason"],
356
+ permissions: record["permissions"],
357
+ startedAt: rfc3339(iat),
358
+ expiresAt: rfc3339(exp),
359
+ approvedBy: record["approved_by"],
360
+ reference: record["reference"]
361
+ });
362
+ }
363
+ async function load(principals, id, tenant) {
364
+ try {
365
+ const loaded = await principals.principal(id, { tenant });
366
+ const record = ownRecord(loaded);
367
+ if (record === void 0 || record["id"] !== id) return;
368
+ return loaded;
369
+ } catch {
370
+ return;
371
+ }
372
+ }
373
+ async function ended(sessions, id) {
374
+ if (sessions === void 0) return false;
375
+ try {
376
+ const live = ownRecord(await sessions.session(id));
377
+ return live === void 0 || live["id"] !== id || live["ended"] === true;
378
+ } catch {
379
+ return true;
380
+ }
381
+ }
382
+ /**
383
+ * Resolves a `vnd.permdock.support-session+jwt` into the subject each
384
+ * request of the session acts as: the viewed principal loaded live, a
385
+ * `support` actor, the session's permissions as the delegation and
386
+ * `context.supportSession`. The actor must still exist. Every failure is the
387
+ * anonymous subject, never a throw.
388
+ */
389
+ async function subjectFromSupportSession(token, options) {
390
+ if (typeof token !== "string" || token.length === 0) return anonymousSubject();
391
+ const deny = (cause) => {
392
+ try {
393
+ options.onAuth?.(compact({
394
+ reason: "invalid-token",
395
+ cause,
396
+ source: "support-session",
397
+ typ: SUPPORT_SESSION_TYP,
398
+ issuer: options.issuer,
399
+ requestId: options.requestId
400
+ }));
401
+ } catch {}
402
+ return anonymousSubject();
403
+ };
404
+ let session;
405
+ try {
406
+ const verified = await options.verifier.verify(token, compact({
407
+ typ: SUPPORT_SESSION_TYP,
408
+ audience: options.audience,
409
+ issuer: options.issuer,
410
+ clockTolerance: options.clockTolerance
411
+ }));
412
+ if (!verified.ok) return deny(verified.cause);
413
+ if (verified.header.typ?.toLowerCase().replace(/^application\//u, "") !== SUPPORT_SESSION_TYP) return deny("wrong-token-type");
414
+ session = sessionOf(verified.claims);
415
+ } catch {
416
+ return deny("malformed");
417
+ }
418
+ if (session === void 0) return deny("invalid-claims");
419
+ if ((secondsOf(session.expiresAt) ?? 0) <= epochSeconds()) return deny("expired");
420
+ if (await ended(options.sessions, session.id)) return deny("session-ended");
421
+ if (await load(options.principals, session.actor, session.tenant) === void 0) return deny("actor-unavailable");
422
+ const principal = await load(options.principals, session.principal, session.tenant);
423
+ if (principal === void 0) return deny("principal-unavailable");
424
+ const scopes = [];
425
+ let readOnly = true;
426
+ for (const key of session.permissions) {
427
+ const leaf = findPermission(options.permissions, key);
428
+ if (leaf === void 0) return deny("invalid-claims");
429
+ scopes.push(leaf.scope);
430
+ readOnly &&= annotationsFor(leaf).readOnlyHint;
431
+ }
432
+ return Object.freeze(compact({
433
+ principal: Object.freeze({
434
+ ...principal,
435
+ tenant: session.tenant
436
+ }),
437
+ actor: Object.freeze(compact({
438
+ id: session.actor,
439
+ kind: "support",
440
+ readOnly: readOnly || void 0
441
+ })),
442
+ delegation: Object.freeze({ scopes }),
443
+ context: Object.freeze({ supportSession: Object.freeze(compact({
444
+ id: session.id,
445
+ reason: session.reason,
446
+ approvedBy: session.approvedBy,
447
+ reference: session.reference
448
+ })) }),
449
+ expiresAt: secondsOf(session.expiresAt)
450
+ }));
451
+ }
452
+ //#endregion
453
+ export { generateFeedKey as a, parseApiKey as c, generateApiKey as i, parseFeedKey as l, subjectFromSupportSession as n, hashApiKey as o, apiKeyVerifier as r, memoryCredentialStore as s, signSupportSession as t, subjectFromApiKey as u };