permdock 0.7.0 → 0.9.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 (483) hide show
  1. package/README.md +1 -3
  2. package/dist/a2a/index.d.ts +7 -7
  3. package/dist/a2a/index.js +8 -8
  4. package/dist/action-result-BcudBQOF.d.ts +19 -0
  5. package/dist/{adapter-context-CRhqyzCk.js → adapter-context-CIQpQxbE.js} +8 -2
  6. package/dist/{adoption-scan-D-feE7BE.js → adoption-scan-Ch07MdxN.js} +5 -5
  7. package/dist/agent/index.d.ts +2 -2
  8. package/dist/agent/index.js +1 -1
  9. package/dist/ai-sdk/index.d.ts +19 -13
  10. package/dist/ai-sdk/index.js +6 -6
  11. package/dist/{app-data-MuyzVqX8.js → app-data-UNNm07jV.js} +10 -7
  12. package/dist/{approval-header-CJACtHkv.js → approval-header-8QV6MU4H.js} +6 -3
  13. package/dist/{approval-prompt-K0faOLFp.d.ts → approval-prompt-3BqWczTt.d.ts} +13 -11
  14. package/dist/{approval-prompt-Dg5LeAcT.js → approval-prompt-B8hQY69x.js} +5 -6
  15. package/dist/approvals/index.d.ts +4 -4
  16. package/dist/approvals/index.js +6 -6
  17. package/dist/{approvals-CMRfsbBh.js → approvals-DnIBTuXE.js} +66 -42
  18. package/dist/{approvers-CqPOLD-o.js → approvers-B4r0N_Uz.js} +8 -2
  19. package/dist/{arazzo-ClrF3PVb.js → arazzo-BpS7LnV0.js} +2 -2
  20. package/dist/{arazzo-rdeJ8n1J.js → arazzo-CmQaGPkM.js} +6 -6
  21. package/dist/{args-CC3OwyHW.js → args-0FrVs5EH.js} +14 -7
  22. package/dist/astro/index.d.ts +30 -12
  23. package/dist/astro/index.js +2 -2
  24. package/dist/{audience-BrMs8c4o.js → audience-DTjR8xet.js} +8 -8
  25. package/dist/{auth-CscUX8Sy.js → auth--yPyZNgr.js} +19 -7
  26. package/dist/authzen/index.d.ts +34 -28
  27. package/dist/authzen/index.js +23 -20
  28. package/dist/{automation-DOtAFWdy.d.ts → automation-C6Jg75xq.d.ts} +42 -32
  29. package/dist/{automation-ySsxp_Yp.js → automation-x3KEUusw.js} +22 -21
  30. package/dist/better-auth/index.d.ts +2 -2
  31. package/dist/better-auth/index.js +13 -7
  32. package/dist/better-supabase/index.d.ts +357 -227
  33. package/dist/better-supabase/index.js +219 -140
  34. package/dist/{bind-D1nO6fiC.js → bind-BNQA9JK9.js} +26 -10
  35. package/dist/{bind-JDuvxjuW.d.ts → bind-YYjvfpB9.d.ts} +32 -12
  36. package/dist/{body-CH5of8Ne.js → body-CJQwYVa8.js} +3 -3
  37. package/dist/{body-text-QcXok_SI.js → body-text-DQhcmqdY.js} +8 -4
  38. package/dist/{boundary-BM8a_P6E.js → boundary-BV3O1eud.js} +8 -2
  39. package/dist/{boundary-BmHxVH1J.d.ts → boundary-C9ck-3uK.d.ts} +13 -4
  40. package/dist/{budget-NbEtbJC_.js → budget-BELja5A9.js} +6 -3
  41. package/dist/{budget-JqcRqyhK.d.ts → budget-hYsPz_yE.d.ts} +6 -3
  42. package/dist/{build-instance-DxE7czo9.js → build-instance-BWXqwQYU.js} +3 -3
  43. package/dist/{capability-L7NnfhiE.js → capability-BqX94r07.js} +31 -25
  44. package/dist/{capability-D4UC9TTW.d.ts → capability-Di9tiUvi.d.ts} +41 -29
  45. package/dist/{casbin-BHijLuHY.js → casbin-B7_yS-oo.js} +2 -2
  46. package/dist/{casbin-BW9pS47J.js → casbin-bHyIxTNQ.js} +16 -8
  47. package/dist/{casl-CmJlgziS.js → casl-C4OINZHI.js} +2 -2
  48. package/dist/{casl-UbI8v-Wq.js → casl-CHHoCldP.js} +19 -10
  49. package/dist/catalog/index.d.ts +51 -30
  50. package/dist/catalog/index.js +18 -15
  51. package/dist/{catalog-D69WhFii.js → catalog-CGlSwU6j.js} +20 -19
  52. package/dist/catalog-D3oS2GH3.js +1 -0
  53. package/dist/{catalog-BaMQfQ6Y.js → catalog-amPDr0JQ.js} +3 -3
  54. package/dist/{catalog-doc-CV9s6B1S.js → catalog-doc-DjMKzJp9.js} +28 -14
  55. package/dist/{catalog-fingerprint-C144oW4M.js → catalog-fingerprint-e6aCWosn.js} +18 -14
  56. package/dist/catalog-operations-DeHTrJSV.js +60 -0
  57. package/dist/{challenge-nGWma08S.js → challenge-DImNcR7B.js} +48 -27
  58. package/dist/chat/index.d.ts +1 -1
  59. package/dist/chat/index.js +13 -10
  60. package/dist/chat-sdk/index.d.ts +44 -26
  61. package/dist/chat-sdk/index.js +17 -17
  62. package/dist/{checks-BC_0mPIq.js → checks-CGkP3Z7A.js} +4 -1
  63. package/dist/{claims-map-7oQ3ue4X.js → claims-map-CKkoAAYF.js} +5 -2
  64. package/dist/{claims-map-Ca-QX8C6.d.ts → claims-map-D1Pb5oRq.d.ts} +8 -5
  65. package/dist/claude-agent/index.d.ts +6 -6
  66. package/dist/claude-agent/index.js +6 -3
  67. package/dist/clerk/index.d.ts +11 -7
  68. package/dist/clerk/index.js +6 -6
  69. package/dist/cli/bin.js +4 -4
  70. package/dist/cli/index.d.ts +82 -7
  71. package/dist/cli/index.js +6 -6
  72. package/dist/{clients-C7zLFuWT.d.ts → clients-C_NOET3z.d.ts} +5 -5
  73. package/dist/{clients-DjU5ABMy.js → clients-DYr3U86j.js} +3 -3
  74. package/dist/cloud/index.d.ts +84 -52
  75. package/dist/cloud/index.js +53 -39
  76. package/dist/{cloud-CO8pYtwr.js → cloud-3kWfjnYy.js} +4 -5
  77. package/dist/{codemod-BP6n8N9L.js → codemod-Bv5i-Mzo.js} +523 -201
  78. package/dist/{codemod-i4N2BhDc.js → codemod-D9Aiii1r.js} +3 -4
  79. package/dist/{collect-DNm3oKOk.js → collect-B80GYEot.js} +4 -5
  80. package/dist/collect-D-eroIfV.js +1 -0
  81. package/dist/{collect-BaWeMjwV.js → collect-WCl8cJQV.js} +26 -63
  82. package/dist/{compare-pfyVnBjE.js → compare-DTfyUunF.js} +2 -2
  83. package/dist/compile/index.d.ts +2 -2
  84. package/dist/compile/index.js +1 -1
  85. package/dist/{compile-COM2VKuN.d.ts → compile-BEklRUYo.d.ts} +36 -12
  86. package/dist/{compile-BAEO5bOk.js → compile-EzEMB-7v.js} +77 -33
  87. package/dist/{completion-BNdVf7X2.js → completion-_bc0OUQ-.js} +17 -8
  88. package/dist/config-BwPBfN0t.js +108 -0
  89. package/dist/{config-DGZzMV1B.js → config-D5XrLWpk.js} +2 -2
  90. package/dist/{config-report-Cm7UITNA.js → config-report-BmWIskD7.js} +9 -6
  91. package/dist/config-shape-ykV0Vm2n.js +134 -0
  92. package/dist/{connection-DjhIJSs2.js → connection-B72dg5Q2.js} +23 -22
  93. package/dist/{connector-schema-_VCSsdtD.js → connector-schema-CYLQNMYq.js} +3 -2
  94. package/dist/{context--uM9V3Ui.js → context-BnIzxTNE.js} +4 -3
  95. package/dist/convex/index.d.ts +13 -7
  96. package/dist/convex/index.js +9 -6
  97. package/dist/{core-CQkE8Esr.d.ts → core-CFepFiDP.d.ts} +49 -22
  98. package/dist/{core-B5-w6Kw9.js → core-DzVINFbU.js} +26 -20
  99. package/dist/{create-Cb86Z8Im.js → create-6EwRQlig.js} +10 -7
  100. package/dist/{create-DJrlhEp9.js → create-BLPKnJKa.js} +35 -25
  101. package/dist/{create-UTnUVETj.d.ts → create-BPUopdfL.d.ts} +70 -37
  102. package/dist/{create-QHuuPw3q.d.ts → create-BamXmeob.d.ts} +37 -29
  103. package/dist/{create-B2-CQqCI.d.ts → create-DBvUsgzK.d.ts} +49 -28
  104. package/dist/{credential-CIM7wHwA.js → credential-CyyyvCsL.js} +41 -38
  105. package/dist/{credentials-BpuTwd7a.js → credentials-CdDxp7jN.js} +6 -6
  106. package/dist/{deciding-columns-DRo2QM6E.js → deciding-columns-NB4wcyBf.js} +2 -2
  107. package/dist/{delegation-C5rOdTp5.js → delegation-CDB6_keF.js} +31 -22
  108. package/dist/delivery/index.d.ts +4 -4
  109. package/dist/delivery/index.js +5 -5
  110. package/dist/{delivery-rwOKLWRm.js → delivery-BupfvJIV.js} +34 -22
  111. package/dist/{delivery-event-xX4obB8F.js → delivery-event-JioK5YbS.js} +6 -6
  112. package/dist/denied-text-DHldhVUv.d.ts +22 -0
  113. package/dist/{describe-DZlnEtLy.js → describe-Bb4hGK5d.js} +5 -5
  114. package/dist/{describe-O0SwYIK8.d.ts → describe-BbFPBSms.d.ts} +5 -5
  115. package/dist/{device-BARQ8eYG.js → device-BwbJNmb2.js} +11 -8
  116. package/dist/{diff-Btr1c1Ow.js → diff-BwR1JdP2.js} +2 -2
  117. package/dist/{diff-DzT-xD13.js → diff-CQegtBAo.js} +22 -13
  118. package/dist/{digest-B3kc_PgQ.d.ts → digest-8Yx2CchM.d.ts} +3 -3
  119. package/dist/{doctor-BU1szn63.js → doctor-ClRVAtXQ.js} +287 -135
  120. package/dist/{doctor-BoK_y0KO.js → doctor-LPMYjSqO.js} +4 -4
  121. package/dist/drizzle/index.d.ts +33 -19
  122. package/dist/drizzle/index.js +17 -9
  123. package/dist/elysia/index.d.ts +17 -11
  124. package/dist/elysia/index.js +5 -5
  125. package/dist/{errors-BKy0EfhN.js → errors-B6R_lg2a.js} +13 -4
  126. package/dist/{errors-B_Qg9D3e.d.ts → errors-BIM4MFsJ.d.ts} +22 -6
  127. package/dist/{errors-BWXBMaKK.d.ts → errors-CHwoRRpB.d.ts} +4 -1
  128. package/dist/{errors-DpP_U6Bf.js → errors-Vpu6rKHl.js} +13 -10
  129. package/dist/{evaluate-B_oqFbWC.js → evaluate-BAmf_AQd.js} +153 -82
  130. package/dist/{evaluations-BCddEOfO.d.ts → evaluations-DOWuBpWv.d.ts} +11 -5
  131. package/dist/{evaluations-DReoiVBw.js → evaluations-IBceAeKT.js} +40 -19
  132. package/dist/eve/index.d.ts +9 -6
  133. package/dist/eve/index.js +4 -4
  134. package/dist/{event-time-CsegxXxB.js → event-time-BGy48400.js} +8 -4
  135. package/dist/{expiry-D4_YKRKD.js → expiry-6XByK0dm.js} +8 -5
  136. package/dist/express/index.d.ts +9 -6
  137. package/dist/express/index.js +9 -6
  138. package/dist/fastify/index.d.ts +16 -10
  139. package/dist/fastify/index.js +8 -5
  140. package/dist/{fetch-adapter-CuhyYwC1.d.ts → fetch-adapter-BIbBAtPZ.d.ts} +9 -6
  141. package/dist/{fetch-adapter-De-u6vhJ.js → fetch-adapter-dPTgJVHd.js} +14 -11
  142. package/dist/fields-D0vUI6dq.js +498 -0
  143. package/dist/{files-acUbNwWt.js → files-B3AA05f1.js} +8 -5
  144. package/dist/{files-D_JIzUrP.js → files-BSjrtIHw.js} +11 -4
  145. package/dist/{fixtures-BTMW6zgU.js → fixtures-A1_sp_tR.js} +15 -6
  146. package/dist/{flags-aaeRAdiD.js → flags-DXjoTVbS.js} +2 -2
  147. package/dist/{freeze-CrU8nQeX.js → freeze-jjan0lCv.js} +4 -1
  148. package/dist/{from-snapshot-Bz469dIh.js → from-snapshot-DCakWRsr.js} +18 -15
  149. package/dist/gen-BFfzZSLH.js +58 -0
  150. package/dist/gen-BtfFWGbz.js +827 -0
  151. package/dist/{generate-3FNO5P5Q.js → generate-CRVV5V7l.js} +14 -8
  152. package/dist/generate-CezbCaTI.js +275 -0
  153. package/dist/{grantee-BrRANrpT.js → grantee-Dke-9rd1.js} +4 -4
  154. package/dist/{grantee-conditions-C6P1Tvol.js → grantee-conditions-BrYPe-w0.js} +12 -12
  155. package/dist/{grantee-match-0RtHWQDx.js → grantee-match-7RZZvoT_.js} +12 -6
  156. package/dist/{graph-sql-B-dsAT6j.d.ts → graph-sql-BwFC4Qjs.d.ts} +3 -3
  157. package/dist/h3/index.d.ts +10 -7
  158. package/dist/h3/index.js +3 -3
  159. package/dist/headers-B9jQxjtW.d.ts +10 -0
  160. package/dist/{helpers-DY3vXuGs.js → helpers-DJicaG6f.js} +40 -28
  161. package/dist/hono/index.d.ts +16 -10
  162. package/dist/hono/index.js +5 -5
  163. package/dist/{hosted-XBgU6RGT.js → hosted-D0IzESu_.js} +42 -21
  164. package/dist/{hosted-BmjzxQhp.d.ts → hosted-DVxlLZMe.d.ts} +33 -21
  165. package/dist/{http-ujKm0JXE.js → http-DH94eh6f.js} +4 -4
  166. package/dist/{http-BBoKefeS.js → http-DKLXrFGk.js} +13 -7
  167. package/dist/{http-Ca3Sr5x1.js → http-DOL33cO0.js} +11 -8
  168. package/dist/{import-DB2EG_iy.js → import-ACkOrv6g.js} +6 -6
  169. package/dist/{import-Bz0GefWg.js → import-CST57XLp.js} +64 -51
  170. package/dist/{index-CMiPH2Tv.d.ts → index-BinlXeU-.d.ts} +64 -37
  171. package/dist/{index-BSfRl0hZ.d.ts → index-CV-7DWeD.d.ts} +64 -52
  172. package/dist/{index-BE8y3moU.d.ts → index-DJwEgYzA.d.ts} +127 -82
  173. package/dist/{index-DH9DUDEM.d.ts → index-Dj2qF9VC.d.ts} +54 -30
  174. package/dist/{index-BTkwrK7v.d.ts → index-vYjMrXyK.d.ts} +336 -173
  175. package/dist/{index-DLwcuCN_.d.ts → index-ymept53A.d.ts} +51 -30
  176. package/dist/index.d.ts +22 -22
  177. package/dist/index.js +34 -34
  178. package/dist/{init-B-4t1NzC.js → init-BjuFDYT1.js} +10 -10
  179. package/dist/{init-5TXNji88.js → init-txYTuW9u.js} +5 -5
  180. package/dist/{instance-options-CU0YQCLH.d.ts → instance-options-CoHn-0e8.d.ts} +4 -4
  181. package/dist/{instance-snapshot-CjcwnEiV.js → instance-snapshot-DuWf1cT3.js} +86 -61
  182. package/dist/{instant-BluqDvyS.js → instant-DK3Iz83e.js} +2 -2
  183. package/dist/{internals-Dk8A8fX3.js → internals-B3IgHrvo.js} +6 -3
  184. package/dist/{json-schema-B-vAwlde.js → json-schema-BPGa-RjQ.js} +9 -3
  185. package/dist/{json-schema-CN_iLFH2.d.ts → json-schema-BfXgnRNT.d.ts} +4 -4
  186. package/dist/jwt/index.d.ts +57 -27
  187. package/dist/jwt/index.js +24 -21
  188. package/dist/{kernel-DVExUwkp.js → kernel-qv4cr9w8.js} +32 -23
  189. package/dist/kysely/index.d.ts +49 -33
  190. package/dist/kysely/index.js +9 -7
  191. package/dist/{live-options-BaAFCIiu.js → live-options-BBIT68le.js} +2 -2
  192. package/dist/{load-DxroEzH1.js → load-DjSU5KXO.js} +6 -6
  193. package/dist/load-Dm0pSYH3.js +1 -0
  194. package/dist/{login-ClSJh5t5.js → login-CfImTJGb.js} +4 -4
  195. package/dist/{login-WC9HPJpU.js → login-CgfCTO3F.js} +16 -9
  196. package/dist/{manifest-Dv6q4i5s.js → manifest-B2QPh19C.js} +49 -38
  197. package/dist/{manifest-BVhExYhw.d.ts → manifest-CzzWtnAb.d.ts} +126 -31
  198. package/dist/{manifest-schema-Cv492Qev.js → manifest-schema-2r37XRhD.js} +44 -3
  199. package/dist/{manifest-B79YuF2T.js → manifest-wg8WkkpD.js} +6 -6
  200. package/dist/{map-claims-etGIS_Dv.js → map-claims-C-nv08_n.js} +16 -9
  201. package/dist/{map-error-BQGyDm_M.js → map-error-pasIGqMT.js} +7 -7
  202. package/dist/{markers-C6joDI3o.js → markers-BeHZ4x9Q.js} +20 -5
  203. package/dist/mcp/index.d.ts +114 -61
  204. package/dist/mcp/index.js +70 -40
  205. package/dist/{migrate-Dodel0IJ.js → migrate-B7oP_sQU.js} +35 -17
  206. package/dist/module-values-BJTBdo6y.js +107 -0
  207. package/dist/nest/index.d.ts +23 -13
  208. package/dist/nest/index.js +18 -11
  209. package/dist/next/client.d.ts +5 -2
  210. package/dist/next/client.js +1 -1
  211. package/dist/next/index.d.ts +79 -26
  212. package/dist/next/index.js +121 -10
  213. package/dist/next/plugin.d.ts +1 -1
  214. package/dist/next/plugin.js +4 -3
  215. package/dist/node/index.d.ts +5 -5
  216. package/dist/node/index.js +3 -3
  217. package/dist/{ocsf-BFp-PZZA.js → ocsf-TcjRBgIs.js} +15 -5
  218. package/dist/openai/index.d.ts +13 -7
  219. package/dist/openai/index.js +3 -3
  220. package/dist/openapi/index.d.ts +51 -30
  221. package/dist/openapi/index.js +2 -2
  222. package/dist/{openapi-ztVaux6j.js → openapi-BGeuunWC.js} +23 -14
  223. package/dist/{openapi-DMocl1bh.js → openapi-BIpw3Mb7.js} +4 -5
  224. package/dist/{openapi-Ddb4628T.js → openapi-BOsx0xn9.js} +33 -18
  225. package/dist/{operation-findings-kRcEp8lE.js → operation-findings-CXtFzlKJ.js} +3 -3
  226. package/dist/{operations-BNLes61x.d.ts → operations-Ci_rT6Uo.d.ts} +10 -7
  227. package/dist/orpc/index.d.ts +68 -14
  228. package/dist/orpc/index.js +62 -13
  229. package/dist/otel/index.d.ts +7 -4
  230. package/dist/otel/index.js +8 -5
  231. package/dist/{output-DgSDLrta.js → output-DV5dwOTs.js} +9 -5
  232. package/dist/output-files-BHOIlrfD.js +1 -0
  233. package/dist/{output-files-CCMdcFWb.js → output-files-BIQ_9pIs.js} +29 -17
  234. package/dist/ownership-DA5YdYTm.js +1059 -0
  235. package/dist/{parse-Ddhz2xf4.js → parse-1_ZheTW5.js} +16 -13
  236. package/dist/parse-local-manifest-CCmbhnxP.d.ts +10 -0
  237. package/dist/{parse-local-manifest-T1Q8X3A2.js → parse-local-manifest-DEiCF4ah.js} +19 -7
  238. package/dist/{parse-request-D_tUXG6M.js → parse-request-CwCZpyjV.js} +7 -8
  239. package/dist/{paths-DXSHAMIa.js → paths-CUvURzHp.js} +4 -1
  240. package/dist/pdp/index.d.ts +9 -6
  241. package/dist/pdp/index.js +20 -13
  242. package/dist/{peer-DOzzMfZL.js → peer-C9LvBCcb.js} +1 -1
  243. package/dist/{peer-12Q5I_RH.js → peer-Q0fuZ6hx.js} +9 -3
  244. package/dist/{permdock-BfWEeMqk.js → permdock-BvjivVb9.js} +200 -140
  245. package/dist/{permdock-Dco6dyCK.d.ts → permdock-CprAPN3w.d.ts} +260 -129
  246. package/dist/{permission-registry-DpPtSKNZ.js → permission-registry-B8tYxPIt.js} +23 -10
  247. package/dist/{permission-types-DhNEmoRG.d.ts → permission-types-CAY-GU7e.d.ts} +127 -41
  248. package/dist/{permissions-CoqCOfJ3.d.ts → permissions-Bx6UI8n1.d.ts} +6 -3
  249. package/dist/{permissions-CyH2MV_B.js → permissions-CVXmRILq.js} +3 -3
  250. package/dist/{permissions-DArULThq.js → permissions-CYcHj_w7.js} +8 -5
  251. package/dist/pg-DQTqRrou.js +60 -0
  252. package/dist/{pins-8ILTftC9.js → pins-nqarl3oE.js} +4 -1
  253. package/dist/{pkce-5h8NgMQJ.js → pkce-CnmmYqUZ.js} +1 -1
  254. package/dist/{policy-B7dg_yzu.d.ts → policy-BycVKnXv.d.ts} +5 -5
  255. package/dist/{policy-DaJy4nK4.js → policy-CLQ8__GF.js} +43 -23
  256. package/dist/{policy-from-catalog-DFWYkNdu.js → policy-from-catalog-CU3An8uP.js} +28 -25
  257. package/dist/{policy-module-CTlwMvLI.js → policy-module-xym9fnSq.js} +12 -6
  258. package/dist/{policy-types-B-F-qAZk.d.ts → policy-types-DGIO_gxq.d.ts} +782 -357
  259. package/dist/{postgres-store-BL9M_CA1.js → postgres-store-DcyrPS-r.js} +43 -16
  260. package/dist/{postgrest-r5faDIzD.js → postgrest-5Dr3W64L.js} +84 -86
  261. package/dist/{postgrest-CYacM_u7.d.ts → postgrest-D5nUGm-c.d.ts} +55 -35
  262. package/dist/powersync-B701tvhE.js +1 -0
  263. package/dist/{powersync-13odBwiM.js → powersync-Bg8u-JcR.js} +3 -3
  264. package/dist/{powersync-53ryOZip.js → powersync-CJrT1DSc.js} +127 -69
  265. package/dist/preset/index.d.ts +38 -28
  266. package/dist/preset/index.js +1 -1
  267. package/dist/{preset-CHTbd-DQ.js → preset-BjLzeFpp.js} +56 -32
  268. package/dist/{principal-source-pHneukrx.js → principal-source-C6N60GtM.js} +10 -10
  269. package/dist/prisma/index.d.ts +69 -41
  270. package/dist/prisma/index.js +21 -17
  271. package/dist/{problem-CTviyH5L.js → problem-BVLHFK33.js} +41 -21
  272. package/dist/{problem-details-cn5X30gZ.js → problem-details-CLDgX1KV.js} +13 -4
  273. package/dist/{problem-types-CJ2325SZ.js → problem-types-DSsRfONQ.js} +4 -1
  274. package/dist/{prompt-DwtVemER.js → prompt-BYc6drYW.js} +4 -1
  275. package/dist/protected-action-D8x73IGm.d.ts +58 -0
  276. package/dist/protected-action-DUYqb-Ma.js +80 -0
  277. package/dist/{protected-DXE3cQYg.js → protected-action-QEA8arRB.js} +48 -14
  278. package/dist/{provider-BQsTYYy0.js → provider-C55OGXJ7.js} +5 -4
  279. package/dist/{provider-Csk-THAn.d.ts → provider-DfLeek9O.d.ts} +1 -1
  280. package/dist/{provider-store-IgqQipCO.js → provider-store-CaTv00tr.js} +13 -9
  281. package/dist/{pull-CN5OLxrF.js → pull-2nJr0qg_.js} +12 -11
  282. package/dist/pull-C3EEGzSw.js +1 -0
  283. package/dist/{push-tVdG8dUL.js → push-Bn-lMEmI.js} +19 -13
  284. package/dist/{pushed-policy-CmYeSQqq.js → pushed-policy-CDuOL2de.js} +10 -7
  285. package/dist/{pushed-policy-BbcY9r_4.d.ts → pushed-policy-CryQheKq.d.ts} +12 -6
  286. package/dist/react/index.d.ts +9 -8
  287. package/dist/react/index.js +7 -6
  288. package/dist/react/provider-client.d.ts +1 -1
  289. package/dist/react/provider-client.js +1 -1
  290. package/dist/react-native/index.d.ts +94 -55
  291. package/dist/react-native/index.js +200 -61
  292. package/dist/{refs-CNJBiTFo.js → refs-C8BKxc_e.js} +2 -2
  293. package/dist/{relation-walk-3OyDBF0S.js → relation-walk-DK_gkgL7.js} +12 -9
  294. package/dist/{relations-BnCWnJGI.js → relations-BxvRvDHK.js} +3 -3
  295. package/dist/{replay-Du1tJjG7.js → replay-BU09ad4L.js} +1 -1
  296. package/dist/{replay-DCDD_ZfL.d.ts → replay-Bs9Df2fQ.d.ts} +1 -1
  297. package/dist/{request-context-BykKLmyE.js → request-context-Duzdf0cd.js} +8 -8
  298. package/dist/{request-schema-CMreVuFM.js → request-schema-DhX7UbfQ.js} +4 -1
  299. package/dist/resend/index.d.ts +34 -28
  300. package/dist/resend/index.js +29 -29
  301. package/dist/resolve-names-ConCSj1y.js +201 -0
  302. package/dist/{resource-relations-D_jw0BFx.js → resource-relations-8-pCScBO.js} +18 -9
  303. package/dist/{retire-Wj6dkyDE.js → retire-B2xffQgY.js} +15 -6
  304. package/dist/{revocations-R07lFBnX.d.ts → revocations-BaUXHM1N.d.ts} +6 -3
  305. package/dist/{rls-Ck_PocSp.js → rls-Ba9wN0SP.js} +13 -6
  306. package/dist/{rls-CxBZb4rZ.js → rls-Cx0dtsB7.js} +310 -128
  307. package/dist/{role-builder-C1VJzvcr.js → role-builder-BK2-T6oD.js} +41 -20
  308. package/dist/{row-conditions-h2HythXQ.js → row-conditions-BAGHOmVq.js} +4 -3
  309. package/dist/{rpc-Bk1bE-ch.js → rpc-vHIwyXCp.js} +8 -5
  310. package/dist/run-Ck22anC2.js +1 -0
  311. package/dist/{run-uLD2aWuO.js → run-PbRlXTfh.js} +26 -23
  312. package/dist/{run-ticket-BpNi7BCi.d.ts → run-ticket-B2o2Kxz8.d.ts} +29 -14
  313. package/dist/{run-ticket-B5d_63Ma.js → run-ticket-Dv7aF7Dk.js} +9 -9
  314. package/dist/{runtime-Vif3_-zf.js → runtime-BGnrOkVH.js} +5 -2
  315. package/dist/{saas-Az_Kz-4D.js → saas-DK4V-3Is.js} +42 -29
  316. package/dist/{scan-DSljDE1Y.js → scan-CRTj6fke.js} +1 -1
  317. package/dist/{schema-B4v0Qrac.js → schema-BOJjqlWL.js} +3 -2
  318. package/dist/{schema-gIcCx7zM.js → schema-BTsE1WRT.js} +8 -4
  319. package/dist/scim/index.d.ts +2 -2
  320. package/dist/scim/index.js +2 -2
  321. package/dist/{scim-C7JYhySg.js → scim-D8YupzX1.js} +2 -2
  322. package/dist/{scim-YNieBO1U.js → scim-jJBJ7g1Z.js} +33 -15
  323. package/dist/{scopes-BHsc-wp-.js → scopes-0Up_UA2t.js} +41 -23
  324. package/dist/server/index.d.ts +11 -11
  325. package/dist/server/index.js +12 -12
  326. package/dist/{server-Bnga6I50.js → server-3cVlTLde.js} +31 -31
  327. package/dist/{server-types-C4gZUEZy.d.ts → server-types-CyRN0-Cd.d.ts} +88 -46
  328. package/dist/{sha256-D9ihqmvd.js → sha256-C-4WXKIu.js} +4 -3
  329. package/dist/{shared-fMKOv8hP.js → shared-Afctg7B0.js} +65 -32
  330. package/dist/{shared-C8LjUdVU.js → shared-l0oGGetg.js} +9 -6
  331. package/dist/{signals-D3NcTKUS.js → signals-B1vHR3fN.js} +2 -2
  332. package/dist/{sink-Cp_Eot9W.d.ts → sink-B5zoUW_O.d.ts} +44 -20
  333. package/dist/{sink-BEZSlMS_.js → sink-D9_vh372.js} +32 -21
  334. package/dist/{skills-g_3BS9NC.js → skills-C9uKfSF5.js} +3 -3
  335. package/dist/{skills-Dcjw9_1C.js → skills-CQQcuGBi.js} +12 -8
  336. package/dist/{snapshot-CbGmYiJx.js → snapshot-CXlzi69u.js} +21 -18
  337. package/dist/{snapshot-cache-Pahd3IYJ.d.ts → snapshot-cache-BjAWkchD.d.ts} +21 -12
  338. package/dist/{snapshot-cache-DT2Kx1F8.js → snapshot-cache-Bx_4xC_6.js} +14 -11
  339. package/dist/solid/index.d.ts +55 -16
  340. package/dist/solid/index.js +46 -12
  341. package/dist/solid-start/index.d.ts +30 -12
  342. package/dist/solid-start/index.js +3 -3
  343. package/dist/{sources-B-zYB4GS.js → sources-CMAM-2A3.js} +46 -27
  344. package/dist/{sources-DEEuGb8S.d.ts → sources-CWG32C0G.d.ts} +126 -53
  345. package/dist/{sql-B96movIM.js → sql-0WjxIp9g.js} +28 -7
  346. package/dist/{sql-CDEPCA0g.d.ts → sql-B80DFdpG.d.ts} +2 -2
  347. package/dist/{src-DLFrtrrC.js → src-C_pi2Rnh.js} +292 -101
  348. package/dist/ssf/index.d.ts +3 -3
  349. package/dist/ssf/index.js +47 -35
  350. package/dist/{standard-webhooks-DgFFD-Ga.js → standard-webhooks-D67a3nzk.js} +5 -5
  351. package/dist/{standard-webhooks-B_qRg0ws.d.ts → standard-webhooks-DOYEuOLx.d.ts} +7 -7
  352. package/dist/{store-DSP9oGvh.js → store-RNFvaJJv.js} +32 -26
  353. package/dist/{store-options-B_poyYvg.js → store-options-Dil3lraY.js} +105 -15
  354. package/dist/stores-DZJvxFIZ.d.ts +59 -0
  355. package/dist/{stores-BqEuHC05.js → stores-DxZWDXCs.js} +42 -5
  356. package/dist/{stream-2Vwhl7Er.d.ts → stream-9y9qw51m.d.ts} +4 -3
  357. package/dist/{stream-CvdUS9V1.js → stream-CDvF0sJm.js} +5 -5
  358. package/dist/{style-Ds1gNm77.js → style-DblOtSga.js} +1 -1
  359. package/dist/{style-Cqo7-73x.js → style-Ds11Hmk4.js} +2 -1
  360. package/dist/{subject-settings-CkEwrw3W.js → subject-settings-8sH5HlII.js} +8 -4
  361. package/dist/{row-check-Dt35czLy.d.ts → subject-settings-vNW8qmUH.d.ts} +30 -18
  362. package/dist/supabase/index.d.ts +48 -38
  363. package/dist/supabase/index.js +5 -5
  364. package/dist/supabase/middleware.d.ts +19 -13
  365. package/dist/supabase/middleware.js +7 -7
  366. package/dist/{supabase--0aJdLEd.js → supabase-DnMMg5Fn.js} +79 -35
  367. package/dist/{supabase-Bqp7iIY2.js → supabase-SBs3MYUE.js} +3 -3
  368. package/dist/supabase-hook-C0FyEACZ.js +1 -0
  369. package/dist/{supabase-hook-Dg0SrQWR.js → supabase-hook-CrgU06WH.js} +175 -196
  370. package/dist/{supautils-MESd81bF.js → supautils-ByezN3b8.js} +385 -219
  371. package/dist/{support-session-Cna49-3f.js → support-session-BsmPCbz8.js} +21 -21
  372. package/dist/svelte/PermissionBoundary.svelte +2 -6
  373. package/dist/svelte/Protected.svelte +2 -8
  374. package/dist/svelte/index.d.ts +9 -8
  375. package/dist/svelte/index.js +10 -9
  376. package/dist/svelte/runtime.d.ts +4 -4
  377. package/dist/svelte/runtime.js +4 -4
  378. package/dist/svelte/source.d.ts +9 -8
  379. package/dist/svelte/source.js +6 -5
  380. package/dist/sveltekit/index.d.ts +30 -12
  381. package/dist/sveltekit/index.js +2 -2
  382. package/dist/{ownership-Z2LpxsGa.js → tables-BqrxBCir.js} +641 -1104
  383. package/dist/tanstack-start/index.d.ts +22 -10
  384. package/dist/tanstack-start/index.js +2 -2
  385. package/dist/{target-Bw37TFNA.js → target-qdEAnnhU.js} +6 -6
  386. package/dist/{tenancy-CmeBQ6Nv.js → tenancy-5d1zVBvK.js} +25 -19
  387. package/dist/terminal/index.d.ts +23 -14
  388. package/dist/terminal/index.js +17 -20
  389. package/dist/testing/core.d.ts +1 -1
  390. package/dist/testing/core.js +1 -1
  391. package/dist/testing/fixtures/index.d.ts +8 -5
  392. package/dist/testing/fixtures/index.js +78 -17
  393. package/dist/testing/index.d.ts +225 -141
  394. package/dist/testing/index.js +352 -234
  395. package/dist/testing/saas/index.d.ts +43 -27
  396. package/dist/testing/saas/index.js +2 -2
  397. package/dist/testing/saas/permissions.d.ts +1 -1
  398. package/dist/testing/saas/permissions.js +1 -1
  399. package/dist/{text-diff-DhITNCnD.js → text-diff-BtfSmdUo.js} +2 -2
  400. package/dist/{thenable-yD7SabqG.js → thenable-BNSM1U2R.js} +12 -3
  401. package/dist/{time-DkWjdL98.js → time-nR1JesoH.js} +32 -8
  402. package/dist/{token-2qYDvXz2.js → token-DC9EQiet.js} +14 -12
  403. package/dist/{tool-refusal-reAhIzdl.js → tool-refusal-Qpjs_W6M.js} +5 -2
  404. package/dist/trpc/index.d.ts +11 -8
  405. package/dist/trpc/index.js +15 -9
  406. package/dist/type-helpers-c7Xo_2Cu.d.ts +50 -0
  407. package/dist/{types-CfiKC5aN.d.ts → types-B2efzoSX.d.ts} +14 -11
  408. package/dist/{types-CIeZcG8v.d.ts → types-B6ExllNo.d.ts} +2 -2
  409. package/dist/{types-DBHftjgS.d.ts → types-BB-zWDcR.d.ts} +45 -33
  410. package/dist/{types-BfVmNJO5.d.ts → types-BMVDHvI0.d.ts} +128 -50
  411. package/dist/{types-DXmwu78Z.d.ts → types-CEinc15V.d.ts} +31 -14
  412. package/dist/{types-g7Oy6Zg4.d.ts → types-CN0LsqbK.d.ts} +47 -24
  413. package/dist/{types-CeIscIKp.d.ts → types-CWBsAwqn.d.ts} +23 -12
  414. package/dist/{types-DqzsnlSA.js → types-CcUXciSj.js} +17 -5
  415. package/dist/{types-BWZybqs9.d.ts → types-CzOeVvcC.d.ts} +384 -203
  416. package/dist/{types-DC44-hqb.d.ts → types-DLvhVm1r.d.ts} +59 -32
  417. package/dist/{types-D3A19w4A.d.ts → types-DlelvQk4.d.ts} +22 -13
  418. package/dist/{types-cTos-H7p.d.ts → types-DsHGPtkR.d.ts} +68 -32
  419. package/dist/{types-BXMYB7BY.d.ts → types-ZzRGoViD.d.ts} +77 -24
  420. package/dist/{types-CQVEQawv.d.ts → types-rCRV4Ge-.d.ts} +24 -14
  421. package/dist/types-tQB2CEnY.d.ts +262 -0
  422. package/dist/unplugin/index.d.ts +1 -1
  423. package/dist/unplugin/index.js +2 -2
  424. package/dist/usage-0hjZPIRX.js +1 -0
  425. package/dist/{usage-Bybmck7f.js → usage-B9EtHWLa.js} +50 -26
  426. package/dist/{usage-CDaLXCfL.js → usage-CBzgwfIs.js} +2 -2
  427. package/dist/{validation-error-ZfUHbKvf.js → validation-error-CYg2kJEw.js} +4 -1
  428. package/dist/{validation-error-CQpoquwj.d.ts → validation-error-uvp-kyfO.d.ts} +5 -2
  429. package/dist/{validity-CZ7-y0Cj.js → validity-Buc7w8E9.js} +13 -10
  430. package/dist/{verifier-DHuh-okk.js → verifier-DUV6pLqZ.js} +10 -4
  431. package/dist/{verify-pe8rL_Qw.js → verify-DlUcTDBz.js} +148 -487
  432. package/dist/version-DMQ0dnN5.js +48 -0
  433. package/dist/version-DizhmD72.js +1 -0
  434. package/dist/{views-BB8E9dTP.js → views-CD8wuL4Z.js} +19 -6
  435. package/dist/{vocabulary-Bg3eeT2H.d.ts → vocabulary-DEJ5j4mR.d.ts} +7 -4
  436. package/dist/vue/index.d.ts +71 -22
  437. package/dist/vue/index.js +50 -13
  438. package/dist/{waiter-DwEyouan.d.ts → waiter-CqUKX6CY.d.ts} +13 -10
  439. package/dist/{waiter-BGUtGYoU.js → waiter-aBLM63_f.js} +1 -1
  440. package/dist/{watch-C-4VmFlL.js → watch-BFDKqmUa.js} +8 -8
  441. package/dist/watch-ClLuO2TL.js +1 -0
  442. package/dist/webmcp/index.d.ts +11 -11
  443. package/dist/webmcp/index.js +8 -5
  444. package/dist/{where-scope-wq2coopv.js → where-scope-DlCdCM_8.js} +24 -18
  445. package/dist/{who-can-BwNsI_Js.js → who-can-BoDJm0Nc.js} +23 -20
  446. package/dist/workflow/index.d.ts +3 -3
  447. package/dist/workflow/index.js +13 -13
  448. package/dist/workflow-sdk/index.d.ts +19 -13
  449. package/dist/workflow-sdk/index.js +6 -6
  450. package/dist/{wrap-CiSc_KCq.js → wrap-B2wziJI_.js} +4 -4
  451. package/dist/{wrap-B6R0cMRL.d.ts → wrap-DxXB54Wu.d.ts} +8 -5
  452. package/package.json +8 -8
  453. package/schemas/catalog-v1.json +3 -0
  454. package/schemas/supabase-manifest-v1.json +33 -1
  455. package/skills/permdock-credentials/references/tokens-keys-links.md +8 -6
  456. package/skills/permdock-data/references/queries-and-rls.md +2 -1
  457. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +2 -2
  458. package/skills/permdock-wire/references/adapters.md +16 -23
  459. package/dist/catalog-BCCjSAdH.js +0 -1
  460. package/dist/collect-k_Dulxr5.js +0 -1
  461. package/dist/config-CoQHDrDi.js +0 -166
  462. package/dist/denied-text-D4qkEtFz.d.ts +0 -19
  463. package/dist/fields-ClcQLrVc.js +0 -238
  464. package/dist/generate-CNU1pIOo.js +0 -171
  465. package/dist/headers-BIjfMaoC.js +0 -8
  466. package/dist/headers-CIbDTUTK.d.ts +0 -7
  467. package/dist/load-DrMHXzgN.js +0 -1
  468. package/dist/output-files-DPAY7-GX.js +0 -1
  469. package/dist/package-root-Dk_ETdkp.js +0 -31
  470. package/dist/parse-local-manifest-e4mdwAKd.d.ts +0 -10
  471. package/dist/policies-B2lZIurj.js +0 -295
  472. package/dist/powersync-CExtTLyA.js +0 -1
  473. package/dist/problem-details-Tcfmj3bV.d.ts +0 -7
  474. package/dist/protected-BwZYL1X_.d.ts +0 -39
  475. package/dist/pull-Cty6Ovyu.js +0 -1
  476. package/dist/run-Bz7DXGEv.js +0 -1
  477. package/dist/stores-BAZwSYZA.d.ts +0 -31
  478. package/dist/supabase-hook-DJxC4PoP.js +0 -1
  479. package/dist/types-CKV71kKh.d.ts +0 -172
  480. package/dist/usage-y-kBNdqs.js +0 -1
  481. package/dist/version-CEbQ5UeM.js +0 -18
  482. package/dist/version-DXkYUISx.js +0 -1
  483. package/dist/watch-Bd9mx3rd.js +0 -1
@@ -1,6 +1,6 @@
1
1
  import { r as isRecord } from "./compact-CAf557ZB.js";
2
- import { t as applyFiles } from "./files-acUbNwWt.js";
3
- import { n as isIdentifier, t as emitPolicyModule } from "./policy-module-CTlwMvLI.js";
2
+ import { t as applyFiles } from "./files-B3AA05f1.js";
3
+ import { n as isIdentifier, t as emitPolicyModule } from "./policy-module-xym9fnSq.js";
4
4
  import { existsSync, readFileSync } from "node:fs";
5
5
  import { resolve } from "node:path";
6
6
  //#region src/cli/importers/casl.ts
@@ -32,7 +32,10 @@ function isStrings(value) {
32
32
  function split(item) {
33
33
  return typeof item === "string" && item.includes(",") ? item.split(",") : item;
34
34
  }
35
- /** A rule in either shape: the object form, or `packRules`' `[action, subject, conditions, inverted, fields]`. */
35
+ /**
36
+ * A rule in either shape: the object form, or `packRules`' `[action, subject,
37
+ * conditions, inverted, fields]`.
38
+ */
36
39
  function readRule(value) {
37
40
  if (Array.isArray(value)) {
38
41
  const [action, subject, conditions, inverted, fields] = value;
@@ -79,7 +82,10 @@ function readValue(value) {
79
82
  }
80
83
  return { unsupported: "a nested object value" };
81
84
  }
82
- /** The Mongo-query subset CASL conditions use, as a `where`; anything else is reported by name. */
85
+ /**
86
+ * The Mongo-query subset CASL conditions use, as a `where`; anything else is
87
+ * reported by name.
88
+ */
83
89
  function readConditions(conditions) {
84
90
  const parts = [];
85
91
  for (const [key, value] of Object.entries(conditions)) {
@@ -143,11 +149,11 @@ function collectActions(rule, subjects, actionsBySubject) {
143
149
  }
144
150
  }
145
151
  /**
146
- * CASL rules per role, as PermDock roles: `inverted` rules are denies,
147
- * `manage` and `all` expand to every action and subject the rules name, and
148
- * conditions in the portable Mongo-query subset become `where`. A deny whose
149
- * condition does not import keeps its effect without the condition, so the
150
- * import can only deny more, never less.
152
+ * CASL rules per role, as PermDock roles: `inverted` rules are denies, `manage`
153
+ * and `all` expand to every action and subject the rules name, and conditions
154
+ * in the portable Mongo-query subset become `where`. A deny whose condition
155
+ * does not import keeps its effect without the condition, so the import can
156
+ * only deny more, never less.
151
157
  */
152
158
  function importCasl(rulesByRole) {
153
159
  const parsed = [];
@@ -249,7 +255,10 @@ function importCasl(rulesByRole) {
249
255
  skipped
250
256
  };
251
257
  }
252
- /** `permdock casl import`: CASL rules per role into a `permissions` and `policy` module. */
258
+ /**
259
+ * `permdock casl import`: CASL rules per role into a `permissions` and `policy`
260
+ * module.
261
+ */
253
262
  function runCaslImport(input) {
254
263
  if (input.rules === void 0 || input.out === void 0) return {
255
264
  code: 2,
@@ -1,8 +1,8 @@
1
- import { T as Policy, a as ApprovalRequirement, sr as Principal } from "../policy-types-B-F-qAZk.js";
2
- import { c as checkHostedGrant, n as HostedGrantCheck, o as PolicyDocument } from "../hosted-BmjzxQhp.js";
3
- import { a as CatalogDocument, c as CatalogOperation, d as CatalogRole, f as CatalogScope, h as CatalogValidity, i as CatalogDelegation, l as CatalogPermission, m as CatalogUsage, n as CatalogApproval, o as CatalogGrant, p as CatalogSupportAccess, r as CatalogBreakGlass, s as CatalogOAuthScope, t as CatalogActivation, u as CatalogResource } from "../types-BXMYB7BY.js";
4
- import { a as CatalogFinding, i as CatalogEventData } from "../sink-Cp_Eot9W.js";
5
- import { a as pushedPolicy, i as parsePushedPolicy, n as PushedGrant, r as PushedPolicy, t as PUSHED_POLICY_SCHEMA } from "../pushed-policy-BbcY9r_4.js";
1
+ import { T as Policy, a as ApprovalRequirement, pr as Principal } from "../policy-types-DGIO_gxq.js";
2
+ import { c as checkHostedGrant, n as HostedGrantCheck, o as PolicyDocument } from "../hosted-DVxlLZMe.js";
3
+ import { a as CatalogDocument, c as CatalogOperation, d as CatalogRole, f as CatalogScope, h as CatalogValidity, i as CatalogDelegation, l as CatalogPermission, m as CatalogUsage, n as CatalogApproval, o as CatalogGrant, p as CatalogSupportAccess, r as CatalogBreakGlass, s as CatalogOAuthScope, t as CatalogActivation, u as CatalogResource } from "../types-ZzRGoViD.js";
4
+ import { a as CatalogFinding, i as CatalogEventData } from "../sink-B5zoUW_O.js";
5
+ import { a as pushedPolicy, i as parsePushedPolicy, n as PushedGrant, r as PushedPolicy, t as PUSHED_POLICY_SCHEMA } from "../pushed-policy-CryQheKq.js";
6
6
  import { StandardSchemaV1 } from "@standard-schema/spec";
7
7
  //#region src/catalog/drift.d.ts
8
8
  /**
@@ -14,7 +14,10 @@ export declare function hostedGrantFindings(policy: Policy, document: PolicyDocu
14
14
  type CatalogDriftInput = {
15
15
  readonly previous: CatalogDocument;
16
16
  readonly next: CatalogDocument;
17
- /** The policy rebuilt from `next` (`policyFromCatalog`), which live hosted grants must still pass. */
17
+ /**
18
+ * The policy rebuilt from `next` (`policyFromCatalog`), which live hosted
19
+ * grants must still pass.
20
+ */
18
21
  readonly policy: Policy;
19
22
  /** The live hosted grants; absent or `null` when the environment has none. */
20
23
  readonly document?: PolicyDocument | null;
@@ -27,7 +30,10 @@ type CatalogDriftInput = {
27
30
  export declare function catalogDrift(input: CatalogDriftInput): CatalogEventData;
28
31
  //#endregion
29
32
  //#region src/catalog/hosted-options.d.ts
30
- /** The declared roles held at one scope: a scope name as declared, `resource`, or `global` for a role with no `on`. */
33
+ /**
34
+ * The declared roles held at one scope: a scope name as declared, `resource`,
35
+ * or `global` for a role with no `on`.
36
+ */
31
37
  type HostedGrantRoleOption = {
32
38
  readonly scope: string;
33
39
  readonly roles: readonly string[];
@@ -37,7 +43,10 @@ type HostedGrantRelationOption = {
37
43
  /** Present when the grant may walk the resource's own parent chain. */
38
44
  readonly through?: "parent";
39
45
  };
40
- /** What a hosted grant on one hostable permission may say; any other value is dropped by `mergeHostedGrants`. */
46
+ /**
47
+ * What a hosted grant on one hostable permission may say; any other value is
48
+ * dropped by `mergeHostedGrants`.
49
+ */
41
50
  type HostedGrantOption = {
42
51
  readonly permission: string;
43
52
  readonly resource: string;
@@ -49,11 +58,17 @@ type HostedGrantOption = {
49
58
  readonly relations: readonly HostedGrantRelationOption[];
50
59
  };
51
60
  readonly approval: {
52
- /** `true` when a code allow carries an approval: a hosted allow without one at least as strict is dropped (`weaker-approval`). */
61
+ /**
62
+ * `true` when a code allow carries an approval: a hosted allow without one
63
+ * at least as strict is dropped (`weaker-approval`).
64
+ */
53
65
  readonly required: boolean;
54
66
  /** The approvals code allows carry; a hosted allow must meet each. */
55
67
  readonly meets: readonly ("human" | ApprovalRequirement)[];
56
- /** `human` is `approval: 'human'`; `any` is the object form, any one approver per approval. `all` and `sequential` stages are never accepted. */
68
+ /**
69
+ * `human` is `approval: 'human'`; `any` is the object form, any one
70
+ * approver per approval. `all` and `sequential` stages are never accepted.
71
+ */
57
72
  readonly modes: readonly ("human" | "any")[];
58
73
  /** The object-form fields a hosted approval may set. */
59
74
  readonly fields: readonly string[];
@@ -63,15 +78,18 @@ type HostedGrantOption = {
63
78
  readonly conditions: {
64
79
  /** `where` and `check` accept the portable condition subset only. */
65
80
  readonly portable: true;
66
- /** The resource's top-level fields, from its JSON Schema; `null` when the schema exposes none. */
81
+ /**
82
+ * The resource's top-level fields, from its JSON Schema; `null` when the
83
+ * schema exposes none.
84
+ */
67
85
  readonly fields: readonly string[] | null;
68
86
  };
69
87
  };
70
88
  /**
71
- * What a hosted grant may say on each permission the policy marks
72
- * `hostable`, in `hostable` order: the grantees, approval forms and
73
- * conditions `mergeHostedGrants` accepts. For an authoring form; every
74
- * grant it builds from these still goes through `checkHostedGrant`.
89
+ * What a hosted grant may say on each permission the policy marks `hostable`,
90
+ * in `hostable` order: the grantees, approval forms and conditions
91
+ * `mergeHostedGrants` accepts. For an authoring form; every grant it builds
92
+ * from these still goes through `checkHostedGrant`.
75
93
  */
76
94
  export declare function hostedGrantOptions(policy: Policy): readonly HostedGrantOption[];
77
95
  //#endregion
@@ -79,8 +97,8 @@ export declare function hostedGrantOptions(policy: Policy): readonly HostedGrant
79
97
  /**
80
98
  * A Standard Schema that validates against a catalog resource's JSON Schema.
81
99
  * `null` (no JSON Schema in the catalog) gives `undefined`. A schema that uses
82
- * a keyword outside the supported subset rejects every value, so a hosted
83
- * check never validates less than the code did.
100
+ * a keyword outside the supported subset rejects every value, so a hosted check
101
+ * never validates less than the code did.
84
102
  */
85
103
  export declare function resourceSchemaFromJson(json: unknown): StandardSchemaV1 | undefined;
86
104
  //#endregion
@@ -95,8 +113,8 @@ type OperationCatalog = {
95
113
  };
96
114
  /**
97
115
  * Operations, matched by name, whose `meta.risk` rose or whose permission
98
- * stopped requiring approval between two catalogs. A new or removed
99
- * operation is not a finding.
116
+ * stopped requiring approval between two catalogs. A new or removed operation
117
+ * is not a finding.
100
118
  */
101
119
  export declare function operationFindings(previous: OperationCatalog, next: OperationCatalog): readonly CatalogFinding[];
102
120
  //#endregion
@@ -113,12 +131,15 @@ type ParseCatalogOptions = {
113
131
  * Reads a `permissions.catalog.json` document (parsed, or the JSON text),
114
132
  * validates it against `schemas/catalog-v1.json`, then checks its references:
115
133
  * role scopes, the permission keys operations, grants, delegations and OAuth
116
- * scopes name, unique keys, and `requireMeta`. Returns a deep-frozen copy
117
- * built from own keys; throws `PermDockValidationError` with every issue,
118
- * each with its `path`.
134
+ * scopes name, unique keys, and `requireMeta`. Returns a deep-frozen copy built
135
+ * from own keys; throws `PermDockValidationError` with every issue, each with
136
+ * its `path`.
119
137
  */
120
138
  export declare function parseCatalog(json: unknown, options?: ParseCatalogOptions): CatalogDocument;
121
- /** Keys of the permissions the catalog marks `rowConditions: true`: the SQL helpers alone cannot enforce them. */
139
+ /**
140
+ * Keys of the permissions the catalog marks `rowConditions: true`: the SQL
141
+ * helpers alone cannot enforce them.
142
+ */
122
143
  export declare function rowConditionKeys(catalog: CatalogDocument): ReadonlySet<string>;
123
144
  //#endregion
124
145
  //#region src/catalog/policy-from-catalog.d.ts
@@ -130,14 +151,14 @@ type PolicyFromCatalogOptions<TUser = unknown> = {
130
151
  * Rebuilds an evaluable `Policy` from a catalog (`permissions.catalog.json`)
131
152
  * and the policy `permdock cloud push` sent with it, for a service that holds
132
153
  * no application code: the hosted AuthZEN endpoint or a `mergeHostedGrants`
133
- * pre-check. Throws `PermDockValidationError` when either input is malformed
134
- * or the two disagree.
154
+ * pre-check. Throws `PermDockValidationError` when either input is malformed or
155
+ * the two disagree.
135
156
  *
136
- * What only code can answer fails closed: an allow whose condition is a
137
- * closure never grants and such a deny always applies; a resource schema
138
- * keyword outside the supported JSON Schema subset rejects every value; a
139
- * support role has no one who may consent. Grant levels and OAuth scopes
140
- * are not in a catalog, so the rebuilt policy has none.
157
+ * What only code can answer fails closed: an allow whose condition is a closure
158
+ * never grants and such a deny always applies; a resource schema keyword
159
+ * outside the supported JSON Schema subset rejects every value; a support role
160
+ * has no one who may consent. Grant levels and OAuth scopes are not in a
161
+ * catalog, so the rebuilt policy has none.
141
162
  */
142
163
  export declare function policyFromCatalog<TUser = unknown>(catalogInput: unknown, pushedInput: unknown, options?: PolicyFromCatalogOptions<TUser>): Policy<TUser>;
143
164
  //#endregion
@@ -1,16 +1,19 @@
1
1
  import { r as isRecord } from "../compact-CAf557ZB.js";
2
- import { n as freezeDeep } from "../freeze-CrU8nQeX.js";
3
- import { a as getResource, n as findPermission } from "../permission-registry-DpPtSKNZ.js";
4
- import { d as isSelfParented } from "../resource-relations-D_jw0BFx.js";
5
- import { _ as listPlans, m as findRole } from "../grantee-BrRANrpT.js";
6
- import { t as declaredRoleNames } from "../policy-DaJy4nK4.js";
7
- import { i as hostedGrantDrops, n as codeApprovals, r as declaredGrantee, t as checkHostedGrant } from "../hosted-XBgU6RGT.js";
8
- import { n as rowConditionKeys, t as parseCatalog } from "../parse-Ddhz2xf4.js";
9
- import { t as operationFindings } from "../operation-findings-kRcEp8lE.js";
10
- import { n as resourceSchemaFromJson, t as policyFromCatalog } from "../policy-from-catalog-DFWYkNdu.js";
11
- import { n as parsePushedPolicy, r as pushedPolicy, t as PUSHED_POLICY_SCHEMA } from "../pushed-policy-CmYeSQqq.js";
2
+ import { n as freezeDeep } from "../freeze-jjan0lCv.js";
3
+ import { a as getResource, n as findPermission } from "../permission-registry-B8tYxPIt.js";
4
+ import { d as isSelfParented } from "../resource-relations-8-pCScBO.js";
5
+ import { _ as listPlans, m as findRole } from "../grantee-Dke-9rd1.js";
6
+ import { n as declaredRoleNames } from "../policy-CLQ8__GF.js";
7
+ import { i as hostedGrantDrops, n as codeApprovals, r as declaredGrantee, t as checkHostedGrant } from "../hosted-D0IzESu_.js";
8
+ import { n as rowConditionKeys, t as parseCatalog } from "../parse-1_ZheTW5.js";
9
+ import { t as operationFindings } from "../operation-findings-CXtFzlKJ.js";
10
+ import { n as resourceSchemaFromJson, t as policyFromCatalog } from "../policy-from-catalog-CU3An8uP.js";
11
+ import { n as parsePushedPolicy, r as pushedPolicy, t as PUSHED_POLICY_SCHEMA } from "../pushed-policy-CDuOL2de.js";
12
12
  //#region src/catalog/drift.ts
13
- /** The finding a drop reason becomes; `null` for a reason the catalog did not cause. */
13
+ /**
14
+ * The finding a drop reason becomes; `null` for a reason the catalog did not
15
+ * cause.
16
+ */
14
17
  function findingCode(reason) {
15
18
  switch (reason) {
16
19
  case "unknown-permission": return "permission-removed";
@@ -142,10 +145,10 @@ function optionFor(policy, key) {
142
145
  };
143
146
  }
144
147
  /**
145
- * What a hosted grant may say on each permission the policy marks
146
- * `hostable`, in `hostable` order: the grantees, approval forms and
147
- * conditions `mergeHostedGrants` accepts. For an authoring form; every
148
- * grant it builds from these still goes through `checkHostedGrant`.
148
+ * What a hosted grant may say on each permission the policy marks `hostable`,
149
+ * in `hostable` order: the grantees, approval forms and conditions
150
+ * `mergeHostedGrants` accepts. For an authoring form; every grant it builds
151
+ * from these still goes through `checkHostedGrant`.
149
152
  */
150
153
  function hostedGrantOptions(policy) {
151
154
  return freezeDeep(policy.hostable.flatMap((key) => {
@@ -1,9 +1,10 @@
1
1
  import { r as isRecord } from "./compact-CAf557ZB.js";
2
- import { r as listSourceFiles, t as defaultSrcPath } from "./files-D_JIzUrP.js";
3
- import { a as catalogSchemaDocument, n as catalogForCompare, o as formatCatalogJson, r as catalogForDrift, s as formatCatalogMarkdown, t as buildCatalog } from "./catalog-doc-CV9s6B1S.js";
4
- import { a as loadModule, i as loadConfiguredPolicy, r as leavesOf, s as pickNamed, t as asPermissionTree } from "./load-DxroEzH1.js";
5
- import { a as loadConfiguredOperations, i as scanSources, r as runCollect } from "./collect-BaWeMjwV.js";
6
- import { n as fileSummary, t as applyFiles } from "./files-acUbNwWt.js";
2
+ import { r as listSourceFiles, t as defaultSrcPath } from "./files-BSjrtIHw.js";
3
+ import { a as catalogSchemaDocument, n as catalogForCompare, o as formatCatalogJson, r as catalogForDrift, s as formatCatalogMarkdown, t as buildCatalog } from "./catalog-doc-DjMKzJp9.js";
4
+ import { a as loadModule, i as loadConfiguredPolicy, r as leavesOf, s as pickNamed, t as asPermissionTree } from "./load-DjSU5KXO.js";
5
+ import { t as loadConfiguredOperations } from "./catalog-operations-DeHTrJSV.js";
6
+ import { i as scanSources, r as runCollect } from "./collect-WCl8cJQV.js";
7
+ import { n as fileSummary, t as applyFiles } from "./files-B3AA05f1.js";
7
8
  import { existsSync, readFileSync } from "node:fs";
8
9
  import { resolve } from "node:path";
9
10
  //#region src/cli/catalog.ts
@@ -14,18 +15,7 @@ async function runCatalog(input) {
14
15
  };
15
16
  const from = input.from ?? input.config.permissions;
16
17
  let document;
17
- if (from !== void 0) {
18
- const abs = resolve(input.cwd, from);
19
- if (!existsSync(abs)) return {
20
- code: 2,
21
- output: `PermDock CLI: module not found: ${from}`
22
- };
23
- const tree = asPermissionTree(pickNamed(await loadModule(abs), ["permissions"]));
24
- const srcPath = input.config.collect?.srcPath ?? defaultSrcPath();
25
- const files = listSourceFiles(input.cwd, srcPath);
26
- const scan = scanSources(input.cwd, files, new Set(leavesOf(tree).map((leaf) => leaf.key)));
27
- document = buildCatalog(tree, scan, input.now.toISOString(), await loadConfiguredPolicy(input.cwd, input.config.policy), await loadConfiguredOperations(input.cwd, input.config.operations));
28
- } else {
18
+ if (from === void 0) {
29
19
  const collected = await runCollect({
30
20
  cwd: input.cwd,
31
21
  config: input.config,
@@ -39,6 +29,17 @@ async function runCatalog(input) {
39
29
  output: collected.message
40
30
  };
41
31
  document = collected.document;
32
+ } else {
33
+ const abs = resolve(input.cwd, from);
34
+ if (!existsSync(abs)) return {
35
+ code: 2,
36
+ output: `PermDock CLI: module not found: ${from}`
37
+ };
38
+ const tree = asPermissionTree(pickNamed(await loadModule(abs), ["permissions"]));
39
+ const srcPath = input.config.collect?.srcPath ?? defaultSrcPath();
40
+ const files = listSourceFiles(input.cwd, srcPath);
41
+ const scan = scanSources(input.cwd, files, new Set(leavesOf(tree).map((leaf) => leaf.key)));
42
+ document = buildCatalog(tree, scan, input.now.toISOString(), await loadConfiguredPolicy(input.cwd, input.config.policy), await loadConfiguredOperations(input.cwd, input.config.operations));
42
43
  }
43
44
  const filtered = input.include.length === 0 ? document : {
44
45
  ...document,
@@ -54,8 +55,8 @@ async function runCatalog(input) {
54
55
  };
55
56
  }
56
57
  /**
57
- * The comparable forms of a catalog file: without the fields every run
58
- * changes, then also without `usages[].line`.
58
+ * The comparable forms of a catalog file: without the fields every run changes,
59
+ * then also without `usages[].line`.
59
60
  */
60
61
  function comparable(text) {
61
62
  try {
@@ -0,0 +1 @@
1
+ export { t as catalogFile, n as runCatalog } from "./catalog-CGlSwU6j.js";
@@ -1,6 +1,6 @@
1
- import { c as missingInput } from "./errors-DpP_U6Bf.js";
1
+ import { c as missingInput } from "./errors-Vpu6rKHl.js";
2
2
  import { t as defineLeaf } from "./command-L8EstFNm.js";
3
- import { c as given, l as outFlag, t as checkFlag, u as permissionsFlag } from "./flags-aaeRAdiD.js";
3
+ import { c as given, l as outFlag, t as checkFlag, u as permissionsFlag } from "./flags-DXjoTVbS.js";
4
4
  //#region src/cli/commands/catalog.ts
5
5
  const RUN_FORMAT = {
6
6
  catalog: "json",
@@ -30,7 +30,7 @@ const catalog = defineLeaf({
30
30
  ...checkFlag
31
31
  },
32
32
  async run(ctx, { flags }) {
33
- const { catalogFile, runCatalog } = await import("./catalog-BCCjSAdH.js");
33
+ const { catalogFile, runCatalog } = await import("./catalog-D3oS2GH3.js");
34
34
  const result = await runCatalog({
35
35
  cwd: ctx.cwd,
36
36
  config: ctx.config,
@@ -1,20 +1,24 @@
1
1
  import { r as isRecord } from "./compact-CAf557ZB.js";
2
- import { a as getResource, c as listPermissions, h as formerKeys } from "./permission-registry-DpPtSKNZ.js";
2
+ import { a as getResource, c as listPermissions, h as formerKeys } from "./permission-registry-B8tYxPIt.js";
3
3
  import { t as canonicalJson } from "./canonical-json-DwilZ1iB.js";
4
- import { m as findRole, v as listRoles } from "./grantee-BrRANrpT.js";
5
- import { i as wireValidity } from "./validity-CZ7-y0Cj.js";
6
- import { t as byCodePoint } from "./compare-pfyVnBjE.js";
7
- import { t as catalogFingerprint } from "./catalog-fingerprint-C144oW4M.js";
8
- import { t as catalogSchema } from "./schema-B4v0Qrac.js";
9
- import { t as policyRowConditionKeys } from "./row-conditions-h2HythXQ.js";
10
- import { c as generatorBanner, n as CATALOG_SCHEMA } from "./version-CEbQ5UeM.js";
4
+ import { m as findRole, v as listRoles } from "./grantee-Dke-9rd1.js";
5
+ import { i as wireValidity } from "./validity-Buc7w8E9.js";
6
+ import { t as byCodePoint } from "./compare-DTfyUunF.js";
7
+ import { t as catalogFingerprint } from "./catalog-fingerprint-e6aCWosn.js";
8
+ import { t as catalogSchema } from "./schema-BOJjqlWL.js";
9
+ import { t as policyRowConditionKeys } from "./row-conditions-BAGHOmVq.js";
10
+ import { c as generatorBanner, n as CATALOG_SCHEMA } from "./version-DMQ0dnN5.js";
11
11
  //#region src/cli/catalog-doc.ts
12
12
  function leafLevels(tree, leaf) {
13
13
  if (leaf.kind !== "instance") return;
14
14
  const names = Object.keys({ ...getResource(tree, leaf.resource)?.levels });
15
15
  return names.length === 0 ? void 0 : names;
16
16
  }
17
- /** With `policy`, permissions carry `hostable` and a known `rowConditions` (without, it is `true`), and roles carry `on`, `assignable` and their ownership rules. */
17
+ /**
18
+ * With `policy`, permissions carry `hostable` and a known `rowConditions`
19
+ * (without, it is `true`), and roles carry `on`, `assignable` and their
20
+ * ownership rules.
21
+ */
18
22
  function buildCatalog(tree, scan, generatedAt, policy, operations) {
19
23
  const hostable = new Set(policy?.hostable ?? []);
20
24
  const rowConditions = policy === void 0 ? void 0 : policyRowConditionKeys(policy);
@@ -51,6 +55,7 @@ function buildCatalog(tree, scan, generatedAt, policy, operations) {
51
55
  usages: scan.usages[leaf.key] ?? [],
52
56
  renamedFrom: formerKeys(leaf).length === 0 ? void 0 : formerKeys(leaf),
53
57
  levels: leafLevels(tree, leaf),
58
+ orderedLevels: leaf.kind === "instance" && getResource(tree, leaf.resource)?.orderedLevels === true ? true : void 0,
54
59
  hostable: hostable.has(leaf.key) ? true : void 0,
55
60
  rowConditions: rowConditions?.has(leaf.key) ?? true,
56
61
  approvals: approvals.get(leaf.key),
@@ -95,8 +100,8 @@ function catalogApproval(approval) {
95
100
  /**
96
101
  * Every code grant in canonical order: by permission, allows before denies,
97
102
  * then by role (top-level grants last) and finally by canonical JSON, so two
98
- * catalogs of the same policy list the same grants in the same order
99
- * whatever the declaration order was.
103
+ * catalogs of the same policy list the same grants in the same order whatever
104
+ * the declaration order was.
100
105
  */
101
106
  function catalogGrant(grant) {
102
107
  const limit = grant.limit === void 0 ? void 0 : withDefined({
@@ -125,7 +130,10 @@ function catalogGrant(grant) {
125
130
  })
126
131
  };
127
132
  }
128
- /** The sort key of a catalog grant: permission, allows first, role (top-level last), then the canonical JSON. */
133
+ /**
134
+ * The sort key of a catalog grant: permission, allows first, role (top-level
135
+ * last), then the canonical JSON.
136
+ */
129
137
  function catalogGrantKey(grant) {
130
138
  return [
131
139
  grant.permission,
@@ -145,7 +153,10 @@ function catalogGrants(policy) {
145
153
  return left < right ? -1 : left > right ? 1 : 0;
146
154
  });
147
155
  }
148
- /** Every policy delegation, sorted by canonical JSON so declaration order does not matter. */
156
+ /**
157
+ * Every policy delegation, sorted by canonical JSON so declaration order does
158
+ * not matter.
159
+ */
149
160
  function catalogDelegations(policy) {
150
161
  return (policy.delegations ?? []).map((delegation) => withDefined({
151
162
  from: delegation.from,
@@ -164,7 +175,10 @@ function catalogOAuthScopes(declared) {
164
175
  permissions: [...new Set(entry.permissions)].toSorted(byCodePoint)
165
176
  })).toSorted((a, b) => byCodePoint(a.scope, b.scope));
166
177
  }
167
- /** Per permission key, the distinct approvals the code allows require, in policy order. */
178
+ /**
179
+ * Per permission key, the distinct approvals the code allows require, in policy
180
+ * order.
181
+ */
168
182
  function codeApprovals(policy) {
169
183
  const out = /* @__PURE__ */ new Map();
170
184
  const seen = /* @__PURE__ */ new Set();
@@ -1,11 +1,11 @@
1
1
  import { r as isRecord, t as compact } from "./compact-CAf557ZB.js";
2
- import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
- import { n as isForbiddenKey } from "./paths-DXSHAMIa.js";
4
- import { l as isRfc3339 } from "./time-DkWjdL98.js";
2
+ import { n as freezeDeep } from "./freeze-jjan0lCv.js";
3
+ import { n as isForbiddenKey } from "./paths-CUvURzHp.js";
4
+ import { l as isRfc3339 } from "./time-nR1JesoH.js";
5
5
  import { t as canonicalJson } from "./canonical-json-DwilZ1iB.js";
6
- import { r as sha256Digest } from "./sha256-D9ihqmvd.js";
7
- import { C as EVENT_SCHEMA_IDS, T as SINK_EVENT_SCHEMAS, i as RESERVED_CLOUD_EVENT_TYPES, l as isAbsoluteUri, r as CLOUD_EVENT_TYPES, s as cloudEventType, u as isTraceparent, v as CATALOG_EVENT_SCHEMA } from "./sink-BEZSlMS_.js";
8
- import { n as copyJson, t as checkSchema } from "./json-schema-B-vAwlde.js";
6
+ import { r as sha256Digest } from "./sha256-C-4WXKIu.js";
7
+ import { C as EVENT_SCHEMA_IDS, T as SINK_EVENT_SCHEMAS, i as RESERVED_CLOUD_EVENT_TYPES, l as isAbsoluteUri, r as CLOUD_EVENT_TYPES, s as cloudEventType, u as isTraceparent, v as CATALOG_EVENT_SCHEMA } from "./sink-D9_vh372.js";
8
+ import { n as copyJson, t as checkSchema } from "./json-schema-BPGa-RjQ.js";
9
9
  //#region src/core/parse-sink-events.ts
10
10
  function hasUnsafeKey(value) {
11
11
  if (Array.isArray(value)) return value.some(hasUnsafeKey);
@@ -32,8 +32,8 @@ function rulesHold(event) {
32
32
  return true;
33
33
  }
34
34
  /**
35
- * Validates one untrusted sink event against its family's schema and returns
36
- * a frozen copy, or `null` for anything else. Never throws.
35
+ * Validates one untrusted sink event against its family's schema and returns a
36
+ * frozen copy, or `null` for anything else. Never throws.
37
37
  */
38
38
  function parseSinkEvent(value) {
39
39
  if (!isRecord(value)) return null;
@@ -46,8 +46,8 @@ function parseSinkEvent(value) {
46
46
  }
47
47
  /**
48
48
  * Validates an untrusted list of sink events, such as a request body a sink
49
- * receiver read. Each event that fails its schema is dropped, and a value
50
- * that is not an array yields no events. Never throws.
49
+ * receiver read. Each event that fails its schema is dropped, and a value that
50
+ * is not an array yields no events. Never throws.
51
51
  */
52
52
  function parseSinkEvents(value) {
53
53
  if (!Array.isArray(value)) return Object.freeze([]);
@@ -56,7 +56,10 @@ function parseSinkEvents(value) {
56
56
  return event === null ? [] : [event];
57
57
  }));
58
58
  }
59
- /** Validates the data of a `com.permdock.catalog.*` CloudEvent; `null` when it does not match. */
59
+ /**
60
+ * Validates the data of a `com.permdock.catalog.*` CloudEvent; `null` when it
61
+ * does not match.
62
+ */
60
63
  function parseCatalogEventData(value) {
61
64
  const copy = jsonMatching(value, CATALOG_EVENT_SCHEMA);
62
65
  return copy === null ? null : freezeDeep(copy);
@@ -141,9 +144,10 @@ function fingerprintInput(catalog) {
141
144
  return out;
142
145
  }
143
146
  /**
144
- * The catalog v1 fingerprint: the `sha-256:` digest of its RFC 8785 JSON without `generatedAt`, `generator`, `fingerprint`
145
- * and every `permissions[].usages`, so neither the CLI version, the clock nor
146
- * call sites change it.
147
+ * The catalog v1 fingerprint: the `sha-256:` digest of its RFC 8785 JSON
148
+ * without `generatedAt`, `generator`, `fingerprint` and every
149
+ * `permissions[].usages`, so neither the CLI version, the clock nor call sites
150
+ * change it.
147
151
  */
148
152
  function catalogFingerprint(catalog) {
149
153
  if (!isRecord(catalog)) throw new TypeError("PermDock: a catalog must be an object");
@@ -0,0 +1,60 @@
1
+ import { r as isRecord } from "./compact-CAf557ZB.js";
2
+ import { A as isOperationEffect } from "./src-C_pi2Rnh.js";
3
+ import { o as isPermission } from "./permission-registry-B8tYxPIt.js";
4
+ import { r as isOperationRisk } from "./permissions-CVXmRILq.js";
5
+ import { i as configError } from "./errors-Vpu6rKHl.js";
6
+ import { a as rel } from "./files-BSjrtIHw.js";
7
+ import { a as loadModule, s as pickNamed } from "./load-DjSU5KXO.js";
8
+ import { existsSync } from "node:fs";
9
+ import { resolve } from "node:path";
10
+ //#region src/cli/catalog-operations.ts
11
+ function metaOf(name, value) {
12
+ const fail = (field) => {
13
+ throw configError(`PermDock CLI: operations.${name}.meta${field} is invalid`);
14
+ };
15
+ if (!isRecord(value)) return fail("");
16
+ const { risk, effects, title } = value;
17
+ if (risk !== void 0 && !isOperationRisk(risk)) return fail(".risk");
18
+ if (effects !== void 0 && (!Array.isArray(effects) || !effects.every(isOperationEffect))) return fail(".effects");
19
+ if (title !== void 0 && typeof title !== "string") return fail(".title");
20
+ return {
21
+ ...risk === void 0 ? {} : { risk },
22
+ ...effects === void 0 ? {} : { effects },
23
+ ...title === void 0 ? {} : { title }
24
+ };
25
+ }
26
+ /**
27
+ * The catalog entries of a `defineOperations` map, in definition order. Throws
28
+ * for a value that is not one, such as a module that exports the definitions
29
+ * object instead of the map.
30
+ */
31
+ function catalogOperations(value) {
32
+ if (!isRecord(value)) throw configError("PermDock CLI: operations export is not an operation map");
33
+ const out = [];
34
+ for (const name of Object.keys(value)) {
35
+ const operation = value[name];
36
+ if (!isRecord(operation) || operation["name"] !== name || !isPermission(operation["permission"])) throw configError(`PermDock CLI: operations.${name} is not an operation; export the defineOperations result`);
37
+ const results = operation["results"];
38
+ if (results !== void 0 && !isPermission(results)) throw configError(`PermDock CLI: operations.${name}.results is not a permission`);
39
+ out.push({
40
+ name,
41
+ permission: operation["permission"].key,
42
+ ...results === void 0 ? {} : { results: results.key },
43
+ meta: metaOf(name, operation["meta"])
44
+ });
45
+ }
46
+ return out;
47
+ }
48
+ /**
49
+ * The configured operations module's catalog entries; `undefined` without one.
50
+ * Throws when it is missing or does not load.
51
+ */
52
+ async function loadConfiguredOperations(cwd, path, options) {
53
+ if (path === void 0) return;
54
+ const abs = resolve(cwd, path);
55
+ if (!existsSync(abs)) throw configError(`PermDock CLI: operations module not found: ${rel(cwd, abs)}`);
56
+ const mod = await loadModule(abs, options);
57
+ return catalogOperations(pickNamed(mod, ["operations"]));
58
+ }
59
+ //#endregion
60
+ export { loadConfiguredOperations as t };