permdock 0.4.0 → 0.6.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 (515) 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-DCYe60Pi.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-DvSSPQJX.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-p1PGoVjb.js +995 -0
  18. package/dist/arazzo-41WuzHou.js +36 -0
  19. package/dist/{arazzo-C4BcskbX.js → arazzo-CaUVBn7D.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-DabClFLQ.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-BNM3TtDo.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-kk-uyCwH.js → bind-CAvgUuKs.js} +14 -10
  34. package/dist/{bind-BzqG8SMb.d.ts → bind-DOyrv6zi.d.ts} +12 -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-Bu_eDqYw.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-Drg-1YhL.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-BoWglDPI.js +1 -0
  48. package/dist/catalog-DZVbrF-z.js +52 -0
  49. package/dist/{catalog-tZUyOfOv.js → catalog-HD2gf5mY.js} +51 -6
  50. package/dist/{catalog-doc-DWtg0gGR.js → catalog-doc-Cdn7-0pQ.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-ytQ3uviA.js +87 -0
  68. package/dist/codemod-5mpSpnUY.js +37 -0
  69. package/dist/codemod-ua2hHy7w.js +2084 -0
  70. package/dist/collect-Ci6akVwH.js +55 -0
  71. package/dist/collect-D7eQDffE.js +1 -0
  72. package/dist/{collect-2SrB7lfk.js → collect-mLTY4nwb.js} +75 -11
  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-CtTP7eur.d.ts → compile-1bsAezL0.d.ts} +5 -3
  77. package/dist/{compile-CcEu2ZQ1.js → compile-CMqMx_IN.js} +11 -8
  78. package/dist/completion-BTFrHZhX.js +143 -0
  79. package/dist/config-Bj2Ixq3d.js +26 -0
  80. package/dist/{config-BIjREpyE.js → config-bs_kZeYq.js} +12 -7
  81. package/dist/{config-report--Xb9APJS.js → config-report-DSpsLpCE.js} +15 -5
  82. package/dist/{connection-DUsczpB5.js → connection-DjhIJSs2.js} +6 -5
  83. package/dist/{context-DieZVJXu.js → context-B_u3_bDJ.js} +2 -2
  84. package/dist/convex/index.d.ts +11 -10
  85. package/dist/convex/index.js +6 -4
  86. package/dist/create-B30OMUOJ.d.ts +107 -0
  87. package/dist/create-CBMmFie-.d.ts +138 -0
  88. package/dist/create-CGm28gyI.js +130 -0
  89. package/dist/create-CQWIpUG-.js +403 -0
  90. package/dist/{create-BBO24vj6.js → create-DCF2SvoT.js} +31 -32
  91. package/dist/create-D_NmPOdH.d.ts +110 -0
  92. package/dist/{credential-kue0qpbm.js → credential-BcoiejpY.js} +152 -31
  93. package/dist/credentials-DPyHmYz5.js +74 -0
  94. package/dist/delegation-j6-rc37o.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-CiFQNuMV.d.ts} +5 -5
  100. package/dist/{describe-C3ldA9os.d.ts → describe-B5qgDvEW.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-rpqoe7Ag.js → diff-3jbx6Rm4.js} +60 -54
  104. package/dist/diff-CmuSD3vc.js +37 -0
  105. package/dist/doctor-3ZqNHX_G.js +44 -0
  106. package/dist/{doctor-owlv6ddh.js → doctor-BdZw53-k.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-CWTY6uih.js +143 -0
  116. package/dist/{errors-OD_4c__H.d.ts → errors-DH5QEGXh.d.ts} +2 -2
  117. package/dist/evaluate-CNClBvcj.js +1785 -0
  118. package/dist/evaluations-C_1vdSZc.d.ts +32 -0
  119. package/dist/{evaluations-C9YJsv3H.js → evaluations-beAooV0n.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-DD_gfmrC.js +120 -0
  129. package/dist/fetch-adapter-Dw0MTS3D.d.ts +31 -0
  130. package/dist/fields-OYG_JR78.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-CTCMsFZk.js} +55 -52
  135. package/dist/{grantee-conditions-MQs5NIuX.js → grantee-conditions-CcXf8hMM.js} +4 -3
  136. package/dist/{grantee-CXY-0C87.js → grantee-hxrUsbpM.js} +16 -6
  137. package/dist/{grantee-match-fxYp9Nmt.js → grantee-match-DbENBHLB.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-CBYVMjwh.js} +45 -38
  143. package/dist/hono/index.d.ts +12 -9
  144. package/dist/hono/index.js +13 -12
  145. package/dist/hosted-B46-5LYE.js +315 -0
  146. package/dist/hosted-BPk51-kX.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-wyqXUyjm.js} +190 -53
  152. package/dist/index-B8YjkEZ4.d.ts +210 -0
  153. package/dist/index-C-6Letxg.d.ts +431 -0
  154. package/dist/index-CaxrMD1A.d.ts +1 -0
  155. package/dist/{index-BwMe94Xq.d.ts → index-Ch8LpNDp.d.ts} +34 -16
  156. package/dist/index-Cp_ilKi1.d.ts +91 -0
  157. package/dist/index-CueFnxQc.d.ts +110 -0
  158. package/dist/index-DuWxc5dt.d.ts +909 -0
  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-BsVpyGIk.d.ts} +2 -2
  164. package/dist/instance-snapshot-BOEhcqIF.js +601 -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-D0NVb1cK.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-dvL2XEe1.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-Dr70oA_3.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-CIq4-E9F.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-C4dDTVEd.js +138 -0
  205. package/dist/{openapi-BJdBmYDG.js → openapi-DD1SV-5-.js} +10 -9
  206. package/dist/operation-findings-DgATDpvh.js +36 -0
  207. package/dist/operations-X0VM7F3m.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-1im__-08.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-DqaJNJPn.js} +1045 -153
  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-DvYUR0QL.d.ts → parse-local-manifest-5ODwqu8b.d.ts} +1 -1
  219. package/dist/{parse-local-manifest-C-q02Pal.js → parse-local-manifest-CVSs6J9I.js} +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-BrAscV28.js +868 -0
  227. package/dist/permdock-SV8ZINYT.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-BPxlwVhN.js} +4 -3
  231. package/dist/{permissions-COH-KRgT.d.ts → permissions-u_KHg-sN.d.ts} +1 -2
  232. package/dist/policies-DP2nqRoF.js +295 -0
  233. package/dist/{policy-ur0BBK_e.d.ts → policy-77FSAq_V.d.ts} +2 -2
  234. package/dist/{hosted-CBHgkzDl.js → policy-DbM5YYtV.js} +17 -273
  235. package/dist/policy-from-catalog-C2gMa2Dj.js +450 -0
  236. package/dist/policy-module-CTlwMvLI.js +89 -0
  237. package/dist/{policy-types-sp9P1iIV.d.ts → policy-types-n0uRTsW8.d.ts} +460 -632
  238. package/dist/postgrest-CEgRbefE.d.ts +100 -0
  239. package/dist/postgrest-DAjUkF9w.js +575 -0
  240. package/dist/{powersync-cZe4kzhL.js → powersync-BkWWCS1K.js} +23 -24
  241. package/dist/powersync-DISt6SUe.js +62 -0
  242. package/dist/powersync-MMJ2mI2q.js +1 -0
  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-B45V5d2b.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-BN7BUdY1.js → protected-BlF0F6wL.js} +21 -4
  255. package/dist/{protected-B3_P7xuw.d.ts → protected-RFGpakN9.d.ts} +16 -8
  256. package/dist/{provider-Bi-0HNL3.js → provider-B1al-AZz.js} +2 -2
  257. package/dist/{provider-kwHC9CZD.d.ts → provider-DILL9oPK.d.ts} +1 -1
  258. package/dist/{provider-store-Ctt-81Ni.js → provider-store-DM6DNcta.js} +2 -2
  259. package/dist/pull-CvpINcMK.js +1 -0
  260. package/dist/pull-jEwbf80J.js +256 -0
  261. package/dist/push-BD4f15co.js +116 -0
  262. package/dist/pushed-policy-CqtxkV4G.js +238 -0
  263. package/dist/pushed-policy-DCW91KQU.d.ts +57 -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 +29 -25
  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-Bkm-Ne4l.d.ts} +1 -1
  275. package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
  276. package/dist/{request-context-BVM7aWNs.js → request-context-C81Pip9n.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-BAqP4q66.js +336 -0
  284. package/dist/{rls-BEktUaqg.js → rls-DTvYd-lI.js} +288 -690
  285. package/dist/{role-builder-B4GbKM-i.js → role-builder-uWQZ4v84.js} +14 -207
  286. package/dist/{rpc-nYC3cR_u.js → rpc-VSl5ylaQ.js} +7 -7
  287. package/dist/run-CUKuz0A8.js +723 -0
  288. package/dist/run-DDwUaJDU.js +1 -0
  289. package/dist/run-ticket-DocwaTKn.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-BCXRuXca.js} +16 -14
  293. package/dist/scan-qvOe0hS3.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-C3WXAHZj.js +453 -0
  303. package/dist/{server-types-DdqBwZN_.d.ts → server-types-CKQiCnON.d.ts} +51 -68
  304. package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
  305. package/dist/{shared-1uhI-e-b.js → shared-BAK8t4Uo.js} +20 -9
  306. package/dist/{shared-JhMeOsDF.js → shared-DvvFzYXe.js} +8 -9
  307. package/dist/signals-D3NcTKUS.js +32 -0
  308. package/dist/sink-4-eQIRWf.d.ts +225 -0
  309. package/dist/sink-BEZSlMS_.js +957 -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-B7DkYg6g.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-PXI-vGpY.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-Xc4zkszI.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-Cu2m75uo.js +1860 -0
  323. package/dist/ssf/index.d.ts +4 -4
  324. package/dist/ssf/index.js +384 -47
  325. package/dist/standard-webhooks-DgFFD-Ga.js +228 -0
  326. package/dist/standard-webhooks-rbD7LS6h.d.ts +88 -0
  327. package/dist/storage-C2bWdvJH.js +132 -0
  328. package/dist/{store-ILkLUj_o.js → store-BDutJkDL.js} +40 -53
  329. package/dist/{store-options-CbUHDoSe.js → store-options-u0ycEe8s.js} +26 -21
  330. package/dist/{stores-Cxz_80g-.d.ts → stores-BUGNbJTt.d.ts} +7 -8
  331. package/dist/{stores-BHXdSbw9.js → stores-CGhM8BN_.js} +2 -2
  332. package/dist/{stream-Dwsg6WwE.d.ts → stream-CeCMJmBB.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-By_frk3U.js +92 -0
  342. package/dist/{supabase-hook-Cva3ikXz.js → supabase-hook-BMoEhZir.js} +960 -64
  343. package/dist/supabase-hook-CCw5m35C.js +1 -0
  344. package/dist/{supabase-C1TWlnYt.js → supabase-x5JtR2tc.js} +99 -206
  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-8RnwUAvE.d.ts +107 -0
  376. package/dist/{store-9KO4BlkB.d.ts → types-B3_ooZgZ.d.ts} +100 -75
  377. package/dist/{types-Br9IXUBG.d.ts → types-BdtSDbBO.d.ts} +77 -17
  378. package/dist/types-BtHtcKMr.d.ts +157 -0
  379. package/dist/{types-CqrjB9o6.d.ts → types-BzzaHxt3.d.ts} +23 -11
  380. package/dist/types-C791HFu9.d.ts +332 -0
  381. package/dist/types-C863OQiR.d.ts +57 -0
  382. package/dist/{types-ByUo56un.d.ts → types-CVZSNocA.d.ts} +23 -22
  383. package/dist/{types-DHrmBJLH.d.ts → types-CX7AvRqP.d.ts} +7 -7
  384. package/dist/types-C_IiEs64.d.ts +65 -0
  385. package/dist/{types-7rJVLWe5.d.ts → types-Dfv0aTER.d.ts} +63 -11
  386. package/dist/types-DqzsnlSA.js +67 -0
  387. package/dist/{types-DpWfQdSh.d.ts → types-Druu9wLM.d.ts} +46 -11
  388. package/dist/{types-CIlTojhq.d.ts → types-_WhUP7ud.d.ts} +9 -6
  389. package/dist/{types-CUcFZfpU.d.ts → types-lUlG3TVd.d.ts} +2 -1
  390. package/dist/unplugin/index.d.ts +1 -1
  391. package/dist/unplugin/index.js +2 -2
  392. package/dist/usage-CRVl9V3t.js +32 -0
  393. package/dist/usage-CZpSQP6L.js +1 -0
  394. package/dist/{usage-CG9nOYZw.js → usage-SveTRTyr.js} +54 -11
  395. package/dist/{validation-error-BSSw0l_8.d.ts → validation-error-DHUrAkku.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-BaAKx7t6.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-CN8H_9UF.d.ts} +67 -2
  403. package/dist/vue/index.d.ts +9 -10
  404. package/dist/vue/index.js +8 -8
  405. package/dist/waiter-B986w1oK.d.ts +36 -0
  406. package/dist/waiter-BGUtGYoU.js +67 -0
  407. package/dist/watch--ovlPOc0.js +1 -0
  408. package/dist/{watch-zeucB7eF.js → watch-vea54PRw.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-C9vfEphl.js +306 -0
  412. package/dist/who-can-DWBAcaCQ.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-C5jC6sKI.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 +10 -9
  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 +6 -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/index-UdVQgq48.d.ts +0 -550
  490. package/dist/load-B_shHrmd.js +0 -2
  491. package/dist/manifest-BngWKryL.js +0 -770
  492. package/dist/may-use-BOn_dR_w.js +0 -78
  493. package/dist/openapi-DcQ1Kg40.js +0 -164
  494. package/dist/ownership-BgnbOJFT.js +0 -851
  495. package/dist/permdock-L26udHSk.js +0 -3646
  496. package/dist/powersync-BFSbSElQ.js +0 -62
  497. package/dist/powersync-DCDgZgfZ.js +0 -2
  498. package/dist/rls-55DQTuf5.js +0 -250
  499. package/dist/run-DMcNW_8T.js +0 -174
  500. package/dist/server-ZYEHtNHS.js +0 -268
  501. package/dist/sink-BTtmfPnE.js +0 -141
  502. package/dist/sink-CPN4zLfs.d.ts +0 -104
  503. package/dist/skills-Dle4ZoLF.js +0 -56
  504. package/dist/snapshot-Dc9CHPME.js +0 -1078
  505. package/dist/src-Bb7no-hS.js +0 -639
  506. package/dist/subject-C6dLxqHU.js +0 -24
  507. package/dist/supabase-Dbqr141s.js +0 -83
  508. package/dist/supabase-hook-BULg7Ut_.js +0 -2
  509. package/dist/thenable-QSmvt-vZ.js +0 -65
  510. package/dist/types-C0dee0Qf.d.ts +0 -197
  511. package/dist/types-DvupZE0w.d.ts +0 -9
  512. package/dist/usage-4G6t643F.js +0 -42
  513. package/dist/usage-iFLJ0-rr.js +0 -2
  514. package/dist/vocabulary-hhEFLFoL.d.ts +0 -65
  515. package/dist/watch-C8TpsAl4.js +0 -2
@@ -1,13 +1,14 @@
1
1
  import { t as compact } from "./compact-CAf557ZB.js";
2
- import { t as composeWraps } from "./wrap-DWsU_5Bd.js";
3
- import { r as instanceOptions } from "./build-instance-DIIV9DbC.js";
4
- import { o as invalidSignatureResponse } from "./evaluations-C9YJsv3H.js";
5
- import { n as tenantScope } from "./adapter-context-mlWsVGGg.js";
6
- import { n as createServerKernel } from "./create-BBO24vj6.js";
2
+ import { c as withApp } from "./permdock-BrAscV28.js";
3
+ import { t as composeWraps } from "./wrap-gX61EtpB.js";
4
+ import { r as instanceOptions } from "./build-instance-Bu_eDqYw.js";
5
+ import { p as invalidSignatureResponse } from "./evaluations-beAooV0n.js";
6
+ import { n as tenantScope } from "./adapter-context-CRhqyzCk.js";
7
+ import { t as createPermDock } from "./create-DCF2SvoT.js";
7
8
  //#region src/server/bind.ts
8
9
  /** The server kernel with the subject and actor callbacks reading the context `contextOf` maps a `Request` to. */
9
10
  function adapterKernel(policy, options, adapter, contextOf) {
10
- return createServerKernel(policy, compact({
11
+ return createPermDock(policy, compact({
11
12
  subject: (request) => {
12
13
  const context = contextOf(request);
13
14
  return context === void 0 ? null : options.subject(context);
@@ -27,14 +28,15 @@ function adapterKernel(policy, options, adapter, contextOf) {
27
28
  revocations: options.revocations,
28
29
  adapter,
29
30
  wrap: composeWraps(options.otel, options.wrap),
30
- onDenied: options.onDenied
31
+ deniedResponse: options.deniedResponse
31
32
  }));
32
33
  }
33
34
  /**
34
35
  * The kernel of a framework adapter, with the subject, actor and tenant
35
36
  * callbacks reading the framework context each `Request` was built from.
36
37
  */
37
- function bindKernel(policy, options, adapter, toRequest) {
38
+ function bindKernel(policy, given, adapter, toRequest) {
39
+ const options = withApp(policy, given);
38
40
  const contexts = /* @__PURE__ */ new WeakMap();
39
41
  const bound = /* @__PURE__ */ new WeakMap();
40
42
  const kernel = adapterKernel(policy, options, adapter, (request) => contexts.get(request));
@@ -58,14 +60,16 @@ function bindKernel(policy, options, adapter, toRequest) {
58
60
  const context = contexts.get(request);
59
61
  return context === void 0 ? Promise.resolve({ tenant: void 0 }) : scopeOf(context);
60
62
  };
61
- const attach = (context) => attached(async () => kernel.permdock(bind(context), await scopeOf(context)));
62
- const guard = async (permission, loadData, context, protectOptions) => kernel.protect(permission, loadData === void 0 ? void 0 : () => loadData(context), protectOptions)(bind(context), await scopeOf(context));
63
+ const getPermDock = async (context) => kernel.getPermDock(bind(context), await scopeOf(context));
64
+ const attach = (context) => attached(() => getPermDock(context));
65
+ const guard = async (permission, data, context, protectOptions) => kernel.protect(permission, data === void 0 ? void 0 : () => data(context), protectOptions)(bind(context), await scopeOf(context));
63
66
  return {
64
67
  kernel,
65
68
  bind,
66
69
  rebind,
67
70
  scopeOf,
68
71
  handlerScope,
72
+ getPermDock,
69
73
  attach,
70
74
  guard
71
75
  };
@@ -1,14 +1,16 @@
1
- import { f as ApprovalStore } from "./types-Br9IXUBG.js";
2
- import { t as InstanceOptions } from "./instance-options-plkrsAog.js";
1
+ import { ar as Subject } from "./policy-types-n0uRTsW8.js";
2
+ import { m as ApprovalStore } from "./types-BdtSDbBO.js";
3
+ import { t as InstanceOptions } from "./instance-options-BsVpyGIk.js";
3
4
  import { t as RequestContext } from "./request-context-C2_1lchh.js";
4
- import { n as PermDockWrap } from "./wrap-Cr93qqdP.js";
5
- import { r as PdpFactory } from "./types-CIlTojhq.js";
6
- import { T as TenantOption, n as OnDenied, y as WebBotAuthVerifier } from "./server-types-DdqBwZN_.js";
7
- import { o as OtelWrap } from "./types-CUcFZfpU.js";
5
+ import { n as PermDockWrap } from "./wrap-C5jC6sKI.js";
6
+ import { o as OtelWrap } from "./types-lUlG3TVd.js";
7
+ import { r as PdpFactory } from "./types-_WhUP7ud.js";
8
+ import { S as TenantOption, _ as WebBotAuthVerifier, t as DeniedResponse } from "./server-types-CKQiCnON.js";
8
9
  //#region src/server/bind.d.ts
9
10
  /** The options of every framework adapter; `TContext` is what its callbacks receive. */
10
11
  type ServerAdapterOptions<TContext, TUser = unknown> = InstanceOptions & ServerAdapterServices & {
11
- readonly subject: (context: TContext) => TUser | Promise<TUser>;
12
+ /** The user, or a full `Subject` (core then skips `policy.subject`). */
13
+ readonly subject: (context: TContext) => TUser | Subject | Promise<TUser | Subject>;
12
14
  /** The agent or service acting for the subject; anything but an `Actor` is ignored. */
13
15
  readonly actor?: (context: TContext) => unknown;
14
16
  readonly tenant?: TenantOption<TContext>;
@@ -21,16 +23,16 @@ type ServerAdapterOptions<TContext, TUser = unknown> = InstanceOptions & ServerA
21
23
  /** The services an adapter hands to its kernel unchanged. */
22
24
  type ServerAdapterServices = {
23
25
  readonly store?: ApprovalStore;
24
- /** `createPermDock` from `permdock/pdp`; `protect` then decides delegated permissions remotely. */
26
+ /** `getPermDock` from `permdock/pdp`; `protect` then decides delegated permissions remotely. */
25
27
  readonly pdp?: PdpFactory;
26
28
  /** `(permdock) => withOtel(permdock, options)` from `permdock/otel`. */
27
29
  readonly otel?: OtelWrap;
28
- /** `(request) => verifyWebBotAuth(request, options)`; a verified bot becomes the actor. */
30
+ /** `webBotAuthVerifier(options)`; a verified bot becomes the actor. */
29
31
  readonly webBotAuth?: WebBotAuthVerifier;
30
32
  /** Wraps each instance after `otel`; build it with `wrapPermDock` to cover derived instances. */
31
33
  readonly wrap?: PermDockWrap;
32
34
  /** Replaces the response of a refused guard; it can never turn a refusal into a grant. */
33
- readonly onDenied?: OnDenied;
35
+ readonly deniedResponse?: DeniedResponse;
34
36
  };
35
37
  //#endregion
36
38
  export { ServerAdapterServices as n, ServerAdapterOptions as t };
@@ -0,0 +1,10 @@
1
+ import { o as statusProblem } from "./problem-details-cn5X30gZ.js";
2
+ import { t as MAX_BODY_BYTES } from "./body-text-QcXok_SI.js";
3
+ import { c as problemResponse } from "./problem-CTviyH5L.js";
4
+ //#region src/server/body.ts
5
+ /** The 413 Problem Details for a body over `maxBytes`. */
6
+ function bodyTooLarge(maxBytes = MAX_BODY_BYTES) {
7
+ return problemResponse(statusProblem(413, `request body exceeds ${String(maxBytes)} bytes`));
8
+ }
9
+ //#endregion
10
+ export { bodyTooLarge as t };
@@ -0,0 +1,52 @@
1
+ //#region src/server/body-text.ts
2
+ /** The largest request body PermDock reads when a handler sets no smaller cap: 1 MiB. */
3
+ const MAX_BODY_BYTES = 1048576;
4
+ /**
5
+ * The request or response body as UTF-8 text, read until `maxBytes` and no further. A
6
+ * `Content-Length` above the cap is refused before the body is touched; a body
7
+ * that runs past the cap whatever its header says is cancelled mid-stream.
8
+ */
9
+ async function readBodyText(request, maxBytes = MAX_BODY_BYTES) {
10
+ const declared = request.headers.get("content-length");
11
+ if (declared !== null && Number(declared) > maxBytes) return {
12
+ ok: false,
13
+ cause: "too-large"
14
+ };
15
+ if (request.bodyUsed) return {
16
+ ok: false,
17
+ cause: "unreadable"
18
+ };
19
+ if (request.body === null) return {
20
+ ok: true,
21
+ text: ""
22
+ };
23
+ const decoder = new TextDecoder();
24
+ let size = 0;
25
+ let text = "";
26
+ try {
27
+ const reader = request.body.getReader();
28
+ for (;;) {
29
+ const chunk = await reader.read();
30
+ if (chunk.done) return {
31
+ ok: true,
32
+ text: text + decoder.decode()
33
+ };
34
+ size += chunk.value.byteLength;
35
+ if (size > maxBytes) {
36
+ await reader.cancel();
37
+ return {
38
+ ok: false,
39
+ cause: "too-large"
40
+ };
41
+ }
42
+ text += decoder.decode(chunk.value, { stream: true });
43
+ }
44
+ } catch {
45
+ return {
46
+ ok: false,
47
+ cause: "unreadable"
48
+ };
49
+ }
50
+ }
51
+ //#endregion
52
+ export { readBodyText as n, MAX_BODY_BYTES as t };
@@ -1,5 +1,5 @@
1
1
  import { t as compact } from "./compact-CAf557ZB.js";
2
- import { t as createPermDock } from "./permdock-L26udHSk.js";
2
+ import { t as getPermDock } from "./permdock-BrAscV28.js";
3
3
  //#region src/core/instance-options.ts
4
4
  const INSTANCE_KEYS = {
5
5
  memberships: true,
@@ -9,7 +9,8 @@ const INSTANCE_KEYS = {
9
9
  policies: true,
10
10
  approvalPolicies: true,
11
11
  sink: true,
12
- limits: true
12
+ limits: true,
13
+ principals: true
13
14
  };
14
15
  /** The `InstanceOptions` set on `options`, without the adapter's own keys. */
15
16
  function instanceOptions(options) {
@@ -41,7 +42,7 @@ async function buildInstance(input) {
41
42
  ...instanceOptions(input.sources),
42
43
  ...input.scope
43
44
  });
44
- const created = await createPermDock(input.policy, input.user, options);
45
+ const created = await getPermDock(input.policy, input.user, options);
45
46
  return {
46
47
  permdock: input.wrap === void 0 ? created : input.wrap(created),
47
48
  options
@@ -1,9 +1,11 @@
1
1
  import { r as isRecord } from "./compact-CAf557ZB.js";
2
2
  //#region src/core/canonical-json.ts
3
3
  /**
4
- * JSON with sorted keys and `undefined` members dropped, so equal values hash
5
- * equally. Dates become ISO strings, bigints `"<n>n"`, and a repeated object
6
- * on the current path `"[Circular]"`, so any validated row serialises.
4
+ * RFC 8785 (JCS) output for I-JSON input: keys sorted by UTF-16 code units,
5
+ * ECMAScript number and string serialisation, no whitespace. `undefined`
6
+ * members are dropped. Outside I-JSON, Dates become ISO strings, bigints
7
+ * `"<n>n"`, and a repeated object on the current path `"[Circular]"`, so any
8
+ * validated row serialises.
7
9
  */
8
10
  function canonicalJson(value, path = /* @__PURE__ */ new Set()) {
9
11
  if (typeof value === "bigint") return JSON.stringify(`${value}n`);
@@ -1,5 +1,5 @@
1
- import { Or as Principal, kr as Subject, lt as TokenSigner } from "./policy-types-sp9P1iIV.js";
2
- import { d as Permission, p as PermissionTree } from "./permission-types-Dg39z9Kv.js";
1
+ import { Rt as Instant, rr as Principal, ut as TokenSigner } from "./policy-types-n0uRTsW8.js";
2
+ import { E as PermissionTree, w as Permission } from "./vocabulary-CN8H_9UF.js";
3
3
  //#region src/core/capability.d.ts
4
4
  /**
5
5
  * Who may redeem a capability: anyone holding it, any signed-in principal,
@@ -12,15 +12,18 @@ type CapabilityRedeemer = "anyone" | "signed-in" | {
12
12
  readonly scope: string;
13
13
  readonly id: string;
14
14
  };
15
+ /** RFC 7800 confirmation: the SHA-256 JWK thumbprint (RFC 7638) of the key that must redeem it. */
16
+ type CapabilityConfirmation = {
17
+ readonly jkt: string;
18
+ };
15
19
  /**
16
- * Capability v1: the `capability` claim of a `permdock-capability+jwt`. It
17
- * holds `roles` on one resource instance (`on`, the `Membership.on` shape),
18
- * optionally narrowed to `permissions` (keys). `id` is the link id: the
19
- * token's `sub` and the handle an application revokes.
20
+ * Capability v1: the `capability` claim of a `vnd.permdock.capability+jwt`.
21
+ * It holds `roles` on one resource instance (`on`, the `Membership.on`
22
+ * shape), optionally narrowed to `permissions` (keys). The link id is the
23
+ * token's `sub` and its expiry the token's `exp`; neither repeats here.
20
24
  */
21
- type Capability = {
25
+ type CapabilityClaim = {
22
26
  readonly v: 1;
23
- readonly id: string;
24
27
  /** `key` is reserved for user-bound credentials and resolves to no subject. */
25
28
  readonly holder: "link" | "key";
26
29
  readonly on: {
@@ -32,10 +35,18 @@ type Capability = {
32
35
  readonly redeemer?: CapabilityRedeemer;
33
36
  /** One request per token: the resolver claims the token's `jti` in a `ReplayStore`. */
34
37
  readonly once?: true;
35
- /** Seconds since the epoch; also the token's `exp` and the membership's `expiresAt`. */
38
+ };
39
+ /**
40
+ * A verified capability: the claim plus `id` (the token's `sub`, the handle
41
+ * an application revokes), `expiresAt` (its `exp`, Unix seconds, also the
42
+ * membership's `expiresAt`) and `cnf` when the token binds a redeemer key.
43
+ */
44
+ type Capability = CapabilityClaim & {
45
+ readonly id: string;
36
46
  readonly expiresAt: number;
47
+ readonly cnf?: CapabilityConfirmation;
37
48
  };
38
- type LinkPrincipal = Principal & {
49
+ type CapabilityPrincipal = Principal & {
39
50
  readonly kind: "link";
40
51
  readonly capability: Capability;
41
52
  };
@@ -49,7 +60,10 @@ type CapabilityInput = {
49
60
  readonly permissions?: readonly Permission[];
50
61
  readonly redeemer?: CapabilityRedeemer;
51
62
  readonly once?: boolean;
63
+ /** `exp`, Unix seconds. */
52
64
  readonly expiresAt: number;
65
+ /** Binds the link to the key with this RFC 7638 thumbprint; redeeming it then needs a DPoP proof from that key. */
66
+ readonly cnf?: CapabilityConfirmation;
53
67
  };
54
68
  /**
55
69
  * What one scope instance (a tenant, a customer) allows for links on its
@@ -64,8 +78,10 @@ type LinkPolicy = {
64
78
  readonly once?: boolean;
65
79
  };
66
80
  type LinkPolicyViolation = "lifetime" | "redeemer" | "once";
67
- type SignCapabilityOptions = {
81
+ type CapabilityOptions = {
68
82
  readonly audience?: string | readonly string[];
83
+ /** `iat`; the clock when absent. */
84
+ readonly issuedAt?: Instant;
69
85
  /** Refuse to sign a link these policies would refuse at resolution. */
70
86
  readonly linkPolicy?: LinkPolicy | readonly LinkPolicy[];
71
87
  };
@@ -76,24 +92,27 @@ type SignCapabilityOptions = {
76
92
  */
77
93
  declare function linkPolicyViolation(capability: Capability, policy: LinkPolicy | readonly LinkPolicy[], issuedAt: number | undefined): LinkPolicyViolation | undefined;
78
94
  /**
79
- * Validates an untrusted `capability` claim and returns a frozen copy with
80
- * only the v1 fields, or `undefined`. Unknown fields are dropped; a wrong
81
- * type in a known field rejects the whole claim.
95
+ * Validates a verified capability (a claim plus `id`, `expiresAt` and
96
+ * an optional `cnf`) and returns a frozen copy, or `undefined`.
82
97
  */
83
98
  declare function parseCapability(input: unknown): Capability | undefined;
84
99
  /**
85
- * Signs a capability as a `permdock-capability+jwt`: `sub` is the link id,
86
- * `exp` is `expiresAt`, and the signer sets `iss`, `iat` and a fresh `jti`.
100
+ * The capability verified claims carry: the `capability` claim, `sub` as
101
+ * `id`, `exp` as `expiresAt` and the RFC 7800 `cnf`. `undefined` when any
102
+ * of them is missing or malformed.
103
+ */
104
+ declare function capabilityFromClaims(claims: Readonly<Record<string, unknown>>): Capability | undefined;
105
+ /**
106
+ * Validates an untrusted `capability` claim and returns a frozen copy with
107
+ * only the v1 fields, or `undefined`. Unknown fields are dropped; a wrong
108
+ * type in a known field rejects the whole claim.
87
109
  */
88
- declare function signCapability(input: CapabilityInput, signer: TokenSigner, options?: SignCapabilityOptions): Promise<string>;
110
+ declare function parseCapabilityClaim(input: unknown): CapabilityClaim | undefined;
89
111
  /**
90
- * The subject a verified capability acts as: a `link` principal holding
91
- * `roles` on `on` and nothing else, with `delegation.scopes` narrowing it to
92
- * `permissions` when the capability lists them. A `key` holder resolves to
93
- * the anonymous subject until user-bound credentials ship.
112
+ * Signs a capability as a `vnd.permdock.capability+jwt`: `sub` is the link
113
+ * id, `exp` is `expiresAt`, `cnf` binds the redeemer's key, and the signer
114
+ * sets `iss`, `aud`, `iat` (`issuedAt`, else now) and a fresh `jti`.
94
115
  */
95
- declare function capabilitySubject(capability: Capability, options?: {
96
- readonly issuer?: string;
97
- }): Subject<LinkPrincipal> | Subject;
116
+ declare function signCapability(input: CapabilityInput, signer: TokenSigner, options?: CapabilityOptions): Promise<string>;
98
117
  //#endregion
99
- export { LinkPolicyViolation as a, capabilitySubject as c, signCapability as d, LinkPolicy as i, linkPolicyViolation as l, CapabilityInput as n, LinkPrincipal as o, CapabilityRedeemer as r, SignCapabilityOptions as s, Capability as t, parseCapability as u };
118
+ export { CapabilityOptions as a, LinkPolicy as c, linkPolicyViolation as d, parseCapability as f, CapabilityInput as i, LinkPolicyViolation as l, signCapability as m, CapabilityClaim as n, CapabilityPrincipal as o, parseCapabilityClaim as p, CapabilityConfirmation as r, CapabilityRedeemer as s, Capability as t, capabilityFromClaims as u };
@@ -1,10 +1,10 @@
1
1
  import { t as compact } from "./compact-CAf557ZB.js";
2
2
  import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
- import { o as isForbiddenKey } from "./thenable-QSmvt-vZ.js";
4
- import { t as expiredAt } from "./expiry-BoBJ8Tvc.js";
5
- import { n as sameId } from "./ids-DC4V4CFu.js";
6
- import { c as listPermissions } from "./permission-registry-BsblpB-z.js";
7
- import { t as anonymousSubject } from "./subject-C6dLxqHU.js";
3
+ import { a as ownRecord } from "./paths-DXSHAMIa.js";
4
+ import { a as isId, o as sameId, r as idList, t as expiredAt } from "./expiry-D4_YKRKD.js";
5
+ import { c as listPermissions } from "./permission-registry-Br4jSNVi.js";
6
+ import { o as epochSeconds, p as nowSeconds } from "./time-DkWjdL98.js";
7
+ import { t as anonymousSubject } from "./subject-BGoM5o8B.js";
8
8
  //#region src/core/capability.ts
9
9
  function redeemerKind(redeemer) {
10
10
  if (redeemer === void 0 || typeof redeemer === "string") return redeemer ?? "anyone";
@@ -24,22 +24,6 @@ function linkPolicyViolation(capability, policy, issuedAt) {
24
24
  if (item.once === true && capability.once !== true) return "once";
25
25
  }
26
26
  }
27
- const MAX_ID = 256;
28
- const MAX_ENTRIES = 64;
29
- /** A copy holding only own enumerable properties, so a prototype never supplies a field. */
30
- function ownRecord(value) {
31
- if (value === null || typeof value !== "object" || Array.isArray(value)) return;
32
- const record = {};
33
- for (const [key, item] of Object.entries(value)) if (!isForbiddenKey(key)) record[key] = item;
34
- return record;
35
- }
36
- function isId(value) {
37
- return typeof value === "string" && value.length > 0 && value.length <= MAX_ID;
38
- }
39
- function idList(value) {
40
- if (!Array.isArray(value) || value.length === 0 || value.length > MAX_ENTRIES || !value.every(isId)) return;
41
- return [...new Set(value)];
42
- }
43
27
  function parseRedeemer(input) {
44
28
  if (input === "anyone" || input === "signed-in") return input;
45
29
  const value = ownRecord(input);
@@ -51,14 +35,54 @@ function parseRedeemer(input) {
51
35
  id: value["id"]
52
36
  };
53
37
  }
38
+ function parseConfirmation(input) {
39
+ const jkt = ownRecord(input)?.["jkt"];
40
+ return typeof jkt === "string" && /^[\w-]{43}$/u.test(jkt) ? { jkt } : void 0;
41
+ }
42
+ /**
43
+ * Validates a verified capability (a claim plus `id`, `expiresAt` and
44
+ * an optional `cnf`) and returns a frozen copy, or `undefined`.
45
+ */
46
+ function parseCapability(input) {
47
+ const value = ownRecord(input);
48
+ const claim = parseCapabilityClaim(input);
49
+ if (value === void 0 || claim === void 0 || !isId(value["id"])) return;
50
+ const expiresAt = value["expiresAt"];
51
+ if (typeof expiresAt !== "number" || !Number.isFinite(expiresAt)) return;
52
+ const cnf = value["cnf"] === void 0 ? void 0 : parseConfirmation(value["cnf"]);
53
+ if (value["cnf"] !== void 0 && cnf === void 0) return;
54
+ return freezeDeep(compact({
55
+ ...claim,
56
+ id: value["id"],
57
+ expiresAt,
58
+ cnf
59
+ }));
60
+ }
61
+ /**
62
+ * The capability verified claims carry: the `capability` claim, `sub` as
63
+ * `id`, `exp` as `expiresAt` and the RFC 7800 `cnf`. `undefined` when any
64
+ * of them is missing or malformed.
65
+ */
66
+ function capabilityFromClaims(claims) {
67
+ const claim = parseCapabilityClaim(claims["capability"]);
68
+ const sub = claims["sub"];
69
+ const exp = claims["exp"];
70
+ if (claim === void 0 || !isId(sub) || typeof exp !== "number") return;
71
+ return parseCapability({
72
+ ...claim,
73
+ id: sub,
74
+ expiresAt: exp,
75
+ cnf: claims["cnf"]
76
+ });
77
+ }
54
78
  /**
55
79
  * Validates an untrusted `capability` claim and returns a frozen copy with
56
80
  * only the v1 fields, or `undefined`. Unknown fields are dropped; a wrong
57
81
  * type in a known field rejects the whole claim.
58
82
  */
59
- function parseCapability(input) {
83
+ function parseCapabilityClaim(input) {
60
84
  const value = ownRecord(input);
61
- if (value === void 0 || value["v"] !== 1 || !isId(value["id"])) return;
85
+ if (value === void 0 || value["v"] !== 1) return;
62
86
  if (value["holder"] !== "link" && value["holder"] !== "key") return;
63
87
  const on = ownRecord(value["on"]);
64
88
  if (on === void 0 || !isId(on["resource"]) || !isId(on["id"])) return;
@@ -69,11 +93,8 @@ function parseCapability(input) {
69
93
  const redeemer = value["redeemer"] === void 0 ? void 0 : parseRedeemer(value["redeemer"]);
70
94
  if (value["redeemer"] !== void 0 && redeemer === void 0) return;
71
95
  if (value["once"] !== void 0 && value["once"] !== true) return;
72
- const expiresAt = value["expiresAt"];
73
- if (typeof expiresAt !== "number" || !Number.isFinite(expiresAt)) return;
74
96
  return freezeDeep(compact({
75
97
  v: 1,
76
- id: value["id"],
77
98
  holder: value["holder"],
78
99
  on: {
79
100
  resource: on["resource"],
@@ -82,8 +103,7 @@ function parseCapability(input) {
82
103
  roles,
83
104
  permissions,
84
105
  redeemer,
85
- once: value["once"],
86
- expiresAt
106
+ once: value["once"]
87
107
  }));
88
108
  }
89
109
  function resourceName(resource) {
@@ -106,26 +126,32 @@ function capabilityOf(input) {
106
126
  permissions: input.permissions?.map((permission) => permission.key),
107
127
  redeemer: input.redeemer,
108
128
  once: input.once === true ? true : void 0,
109
- expiresAt: Math.floor(input.expiresAt)
129
+ expiresAt: Math.floor(input.expiresAt),
130
+ cnf: input.cnf
110
131
  }));
111
- if (capability === void 0) throw new Error("PermDock: invalid capability (id, on.id and roles are required; roles and permissions hold at most 64 entries)");
132
+ if (capability === void 0) throw new Error("PermDock: invalid capability (id, on.id and roles are required; roles and permissions hold at most 64 entries; cnf.jkt is a base64url SHA-256 thumbprint)");
112
133
  return capability;
113
134
  }
114
135
  /**
115
- * Signs a capability as a `permdock-capability+jwt`: `sub` is the link id,
116
- * `exp` is `expiresAt`, and the signer sets `iss`, `iat` and a fresh `jti`.
136
+ * Signs a capability as a `vnd.permdock.capability+jwt`: `sub` is the link
137
+ * id, `exp` is `expiresAt`, `cnf` binds the redeemer's key, and the signer
138
+ * sets `iss`, `aud`, `iat` (`issuedAt`, else now) and a fresh `jti`.
117
139
  */
118
140
  function signCapability(input, signer, options = {}) {
119
141
  const capability = capabilityOf(input);
120
- const violation = options.linkPolicy === void 0 ? void 0 : linkPolicyViolation(capability, options.linkPolicy, Math.floor(Date.now() / 1e3));
142
+ const issuedAt = nowSeconds(options.issuedAt);
143
+ const violation = options.linkPolicy === void 0 ? void 0 : linkPolicyViolation(capability, options.linkPolicy, issuedAt);
121
144
  if (violation !== void 0) return Promise.reject(/* @__PURE__ */ new Error(`PermDock: capability breaks the link policy (${violation})`));
122
- return signer.sign({
123
- capability,
124
- sub: capability.id
125
- }, compact({
126
- typ: "permdock-capability+jwt",
145
+ const { id, expiresAt, cnf, ...claim } = capability;
146
+ return signer.sign(compact({
147
+ capability: claim,
148
+ sub: id,
149
+ cnf
150
+ }), compact({
151
+ typ: "vnd.permdock.capability+jwt",
127
152
  audience: options.audience,
128
- expiresAt: capability.expiresAt
153
+ expiresAt,
154
+ issuedAt
129
155
  }));
130
156
  }
131
157
  function holdsScope(membership, scope, id, now) {
@@ -134,10 +160,10 @@ function holdsScope(membership, scope, id, now) {
134
160
  return scope === "tenant" && sameId(membership.tenant, id) || scope === "team" && sameId(membership.team, id);
135
161
  }
136
162
  /** Whether `viewer`, the request's own verified subject, may redeem a capability. */
137
- function redeemerAllows(redeemer, viewer, now = Date.now() / 1e3) {
163
+ function redeemerAllows(redeemer, viewer, now = epochSeconds()) {
138
164
  if (redeemer === void 0 || redeemer === "anyone") return true;
139
165
  const principal = viewer?.principal ?? null;
140
- if (principal === null || principal.kind === "link") return false;
166
+ if (principal === null || principal.kind === "link" || principal.kind === "feed") return false;
141
167
  if (redeemer === "signed-in") return true;
142
168
  if ("user" in redeemer) return principal.id === redeemer.user;
143
169
  return (principal.memberships ?? []).some((membership) => holdsScope(membership, redeemer.scope, redeemer.id, now));
@@ -171,4 +197,4 @@ function capabilitySubject(capability, options = {}) {
171
197
  }));
172
198
  }
173
199
  //#endregion
174
- export { ownRecord as a, signCapability as c, linkPolicyViolation as i, idList as n, parseCapability as o, isId as r, redeemerAllows as s, capabilitySubject as t };
200
+ export { parseCapability as a, signCapability as c, linkPolicyViolation as i, capabilityOf as n, parseCapabilityClaim as o, capabilitySubject as r, redeemerAllows as s, capabilityFromClaims as t };
@@ -0,0 +1,30 @@
1
+ import { t as defineLeaf } from "./command-L8EstFNm.js";
2
+ import { c as given, l as outFlag, o as fileOut } from "./flags-C3DktBDY.js";
3
+ //#region src/cli/commands/casbin.ts
4
+ const casbinImport = defineLeaf({
5
+ flags: {
6
+ model: {
7
+ type: "string",
8
+ description: "The Casbin model.conf",
9
+ valueHint: "file"
10
+ },
11
+ policy: {
12
+ type: "string",
13
+ description: "The Casbin policy.csv",
14
+ valueHint: "file"
15
+ },
16
+ ...outFlag
17
+ },
18
+ async run(ctx, { flags }) {
19
+ const { runCasbinImport } = await import("./casbin-Dyu2gnUD.js");
20
+ return runCasbinImport({
21
+ cwd: ctx.cwd,
22
+ model: given(flags.model),
23
+ policy: given(flags.policy),
24
+ out: fileOut("casbin import", flags.out),
25
+ json: ctx.json
26
+ });
27
+ }
28
+ });
29
+ //#endregion
30
+ export { casbinImport };