permdock 0.7.0 → 0.8.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-CL-QCITA.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-BLs67P1l.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-Dg5LeAcT.js → approval-prompt-B8hQY69x.js} +5 -6
  14. package/dist/{approval-prompt-K0faOLFp.d.ts → approval-prompt-PYagyQUj.d.ts} +13 -11
  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-3RhGfkAK.js} +2 -2
  20. package/dist/{arazzo-rdeJ8n1J.js → arazzo-B5-ulWif.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-BAkBDMqn.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-DqEoWHBc.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-JDuvxjuW.d.ts → bind-Cp2hBHzP.d.ts} +27 -12
  35. package/dist/{bind-D1nO6fiC.js → bind-D_sZSVA3.js} +22 -10
  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-CNWaYJyr.js} +3 -3
  43. package/dist/{capability-L7NnfhiE.js → capability-BqX94r07.js} +31 -25
  44. package/dist/{capability-D4UC9TTW.d.ts → capability-ChuiONQU.d.ts} +41 -29
  45. package/dist/{casbin-BW9pS47J.js → casbin-H0rKxBx2.js} +16 -8
  46. package/dist/{casbin-BHijLuHY.js → casbin-cbSbhT_k.js} +2 -2
  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-BFpz2EmT.js} +20 -19
  52. package/dist/{catalog-BaMQfQ6Y.js → catalog-DCspHDc8.js} +3 -3
  53. package/dist/{catalog-doc-CV9s6B1S.js → catalog-doc-DjMKzJp9.js} +28 -14
  54. package/dist/{catalog-fingerprint-C144oW4M.js → catalog-fingerprint-e6aCWosn.js} +18 -14
  55. package/dist/catalog-mRQQQhNK.js +1 -0
  56. package/dist/catalog-operations-Dadrl7Z-.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-BFlGMaak.js} +4 -5
  77. package/dist/{codemod-i4N2BhDc.js → codemod-DLQ9Zpo4.js} +3 -4
  78. package/dist/{codemod-BP6n8N9L.js → codemod-DWSN2erG.js} +523 -201
  79. package/dist/collect-B5BL3klN.js +1 -0
  80. package/dist/{collect-BaWeMjwV.js → collect-B7ZFAJU3.js} +26 -63
  81. package/dist/{collect-DNm3oKOk.js → collect-Bzv3le0A.js} +4 -5
  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-BFzysW3o.d.ts} +36 -12
  86. package/dist/{compile-BAEO5bOk.js → compile-EzEMB-7v.js} +77 -33
  87. package/dist/{completion-BNdVf7X2.js → completion-saoYiRFO.js} +17 -8
  88. package/dist/config-BwPBfN0t.js +108 -0
  89. package/dist/{config-DGZzMV1B.js → config-DBeXXmBF.js} +2 -2
  90. package/dist/{config-report-Cm7UITNA.js → config-report-BipSWA6V.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-B5-w6Kw9.js → core-H-mbhpZc.js} +26 -20
  98. package/dist/{core-CQkE8Esr.d.ts → core-hWIARPDz.d.ts} +49 -22
  99. package/dist/{create-UTnUVETj.d.ts → create-BSNrVuxh.d.ts} +70 -37
  100. package/dist/{create-B2-CQqCI.d.ts → create-BVq1lNQE.d.ts} +49 -28
  101. package/dist/{create-QHuuPw3q.d.ts → create-CM1FciYG.d.ts} +37 -29
  102. package/dist/{create-Cb86Z8Im.js → create-Cq4Uox0f.js} +10 -7
  103. package/dist/{create-DJrlhEp9.js → create-_noSrY1T.js} +15 -21
  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-CHNlVInN.d.ts +22 -0
  113. package/dist/{describe-DZlnEtLy.js → describe-Bb4hGK5d.js} +5 -5
  114. package/dist/{describe-O0SwYIK8.d.ts → describe-ByS9LgHK.d.ts} +5 -5
  115. package/dist/{device-BARQ8eYG.js → device-BwbJNmb2.js} +11 -8
  116. package/dist/{diff-Btr1c1Ow.js → diff-CN8IYhC_.js} +2 -2
  117. package/dist/{diff-DzT-xD13.js → diff-iZWV65nC.js} +22 -13
  118. package/dist/{digest-B3kc_PgQ.d.ts → digest-8Yx2CchM.d.ts} +3 -3
  119. package/dist/{doctor-BU1szn63.js → doctor-CHD1M9R5.js} +287 -135
  120. package/dist/{doctor-BoK_y0KO.js → doctor-D3wo-yuz.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-BWXBMaKK.d.ts → errors-CHwoRRpB.d.ts} +4 -1
  127. package/dist/{errors-DpP_U6Bf.js → errors-Vpu6rKHl.js} +13 -10
  128. package/dist/{errors-B_Qg9D3e.d.ts → errors-zi_4T-rx.d.ts} +22 -6
  129. package/dist/{evaluate-B_oqFbWC.js → evaluate-Dd8Ta0Ie.js} +140 -78
  130. package/dist/{evaluations-DReoiVBw.js → evaluations-IBceAeKT.js} +40 -19
  131. package/dist/{evaluations-BCddEOfO.d.ts → evaluations-z8dQFDaN.d.ts} +11 -5
  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-C1DCvpqV.d.ts} +9 -6
  141. package/dist/{fetch-adapter-De-u6vhJ.js → fetch-adapter-JL43jD3E.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-B5kvbAoZ.js +58 -0
  150. package/dist/gen-DWCYcMQM.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-BmjzxQhp.d.ts → hosted-Cmtxogd0.d.ts} +33 -21
  164. package/dist/{hosted-XBgU6RGT.js → hosted-D0IzESu_.js} +42 -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-Bz0GefWg.js → import-CST57XLp.js} +64 -51
  169. package/dist/{import-DB2EG_iy.js → import-_YqhhwvX.js} +6 -6
  170. package/dist/{index-BSfRl0hZ.d.ts → index-B8s204GL.d.ts} +64 -52
  171. package/dist/{index-DH9DUDEM.d.ts → index-BT5-1VsX.d.ts} +54 -30
  172. package/dist/{index-BTkwrK7v.d.ts → index-BW_0MZOS.d.ts} +282 -172
  173. package/dist/{index-CMiPH2Tv.d.ts → index-BhxEUY9J.d.ts} +64 -37
  174. package/dist/{index-DLwcuCN_.d.ts → index-Bv5iXPqU.d.ts} +51 -30
  175. package/dist/{index-BE8y3moU.d.ts → index-_9UiQIkt.d.ts} +127 -82
  176. package/dist/index.d.ts +22 -22
  177. package/dist/index.js +33 -33
  178. package/dist/{init-5TXNji88.js → init-Dz_PsHdv.js} +5 -5
  179. package/dist/{init-B-4t1NzC.js → init-cE3A8aXq.js} +10 -10
  180. package/dist/{instance-options-CU0YQCLH.d.ts → instance-options-B0KXqTrJ.d.ts} +4 -4
  181. package/dist/{instance-snapshot-CjcwnEiV.js → instance-snapshot--JWiTrvO.js} +75 -55
  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-C-fYydV2.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-D-8tMqzo.js} +4 -4
  195. package/dist/{login-WC9HPJpU.js → login-DplQ0s84.js} +16 -9
  196. package/dist/{manifest-Dv6q4i5s.js → manifest-Cgiq5oqc.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-BNWCJtmP.js} +14 -8
  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 +72 -26
  212. package/dist/next/index.js +110 -6
  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-Ddb4628T.js → openapi-BOsx0xn9.js} +33 -18
  223. package/dist/{openapi-DMocl1bh.js → openapi-CBZUhA3l.js} +4 -5
  224. package/dist/{openapi-ztVaux6j.js → openapi-VeHHU2l9.js} +23 -14
  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-files-BHOIlrfD.js +1 -0
  232. package/dist/{output-files-CCMdcFWb.js → output-files-BIQ_9pIs.js} +29 -17
  233. package/dist/{output-DgSDLrta.js → output-tkju6U7R.js} +9 -5
  234. package/dist/ownership-B4L59T9u.js +1054 -0
  235. package/dist/{parse-Ddhz2xf4.js → parse-1_ZheTW5.js} +16 -13
  236. package/dist/parse-local-manifest-BQhTlLQS.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-Dco6dyCK.d.ts → permdock-B6Sf4T_S.d.ts} +253 -129
  245. package/dist/{permdock-BfWEeMqk.js → permdock-L-_I_3zP.js} +59 -35
  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-mDcTWoBs.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-Ba4bDhaj.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-CJgOm6aq.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-CCiDRZBH.d.ts} +738 -349
  259. package/dist/{postgres-store-BL9M_CA1.js → postgres-store-DcyrPS-r.js} +43 -16
  260. package/dist/{postgrest-r5faDIzD.js → postgrest-D4nuPXIQ.js} +52 -33
  261. package/dist/{postgrest-CYacM_u7.d.ts → postgrest-DicQyqm-.d.ts} +54 -35
  262. package/dist/{powersync-53ryOZip.js → powersync-DHNQX06W.js} +127 -69
  263. package/dist/{powersync-13odBwiM.js → powersync-DXqGuq9A.js} +3 -3
  264. package/dist/powersync-Djf-zCpB.js +1 -0
  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-BE7N_Luo.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-DXfq5c2d.d.ts} +1 -1
  280. package/dist/{provider-store-IgqQipCO.js → provider-store-CaTv00tr.js} +13 -9
  281. package/dist/pull-B65ndFNZ.js +1 -0
  282. package/dist/{pull-CN5OLxrF.js → pull-CwpGaQSi.js} +12 -11
  283. package/dist/{push-tVdG8dUL.js → push-DgssgzkK.js} +19 -13
  284. package/dist/{pushed-policy-BbcY9r_4.d.ts → pushed-policy-D1Eoi6NM.d.ts} +12 -6
  285. package/dist/{pushed-policy-CmYeSQqq.js → pushed-policy-ITwYKvvH.js} +10 -7
  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-DNftIb_R.d.ts} +1 -1
  297. package/dist/{request-context-BykKLmyE.js → request-context-C25ilqiJ.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-CF7xXLSG.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-CxBZb4rZ.js → rls-CNEH2_BG.js} +299 -124
  306. package/dist/{rls-Ck_PocSp.js → rls-Ca8Jz9b5.js} +13 -6
  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-fNqAIqQk.js} +8 -5
  310. package/dist/{run-uLD2aWuO.js → run-Bz26OTfO.js} +26 -23
  311. package/dist/run-D-JE8QWb.js +1 -0
  312. package/dist/{run-ticket-BpNi7BCi.d.ts → run-ticket-DbWI9f99.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-iWnUdwCt.js} +42 -29
  316. package/dist/{scan-DSljDE1Y.js → scan-DCj1KQfn.js} +1 -1
  317. package/dist/{schema-B4v0Qrac.js → schema-BOJjqlWL.js} +3 -2
  318. package/dist/{schema-gIcCx7zM.js → schema-Dst9I9Gs.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-CIlpSA2G.d.ts} +81 -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-BEZSlMS_.js → sink-D9_vh372.js} +32 -21
  333. package/dist/{sink-Cp_Eot9W.d.ts → sink-Dvi7YZG_.d.ts} +44 -20
  334. package/dist/{skills-Dcjw9_1C.js → skills-Bjj7BNEQ.js} +12 -8
  335. package/dist/{skills-g_3BS9NC.js → skills-OuoMR49L.js} +3 -3
  336. package/dist/{snapshot-CbGmYiJx.js → snapshot-CXlzi69u.js} +21 -18
  337. package/dist/{snapshot-cache-Pahd3IYJ.d.ts → snapshot-cache-BAXZ0KOp.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-DEEuGb8S.d.ts → sources-B1Os_YUu.d.ts} +126 -53
  344. package/dist/{sources-B-zYB4GS.js → sources-CMAM-2A3.js} +46 -27
  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-DZ0l9UAg.js} +190 -100
  348. package/dist/ssf/index.d.ts +3 -3
  349. package/dist/ssf/index.js +47 -35
  350. package/dist/{standard-webhooks-B_qRg0ws.d.ts → standard-webhooks-C-qX4mJW.d.ts} +7 -7
  351. package/dist/{standard-webhooks-DgFFD-Ga.js → standard-webhooks-D67a3nzk.js} +5 -5
  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-C0Kta5Ft.d.ts +59 -0
  355. package/dist/{stores-BqEuHC05.js → stores-DxZWDXCs.js} +42 -5
  356. package/dist/{stream-CvdUS9V1.js → stream-CDvF0sJm.js} +5 -5
  357. package/dist/{stream-2Vwhl7Er.d.ts → stream-ltuLdtTG.d.ts} +4 -3
  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-BL1qJzzY.js} +79 -35
  367. package/dist/{supabase-Bqp7iIY2.js → supabase-D39cuGPt.js} +3 -3
  368. package/dist/{supabase-hook-Dg0SrQWR.js → supabase-hook-B-yXnzUl.js} +175 -196
  369. package/dist/supabase-hook-H-MtE9Wd.js +1 -0
  370. package/dist/{supautils-MESd81bF.js → supautils-BU-pAEpf.js} +166 -47
  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-DeMNEy6V.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 +224 -141
  394. package/dist/testing/index.js +299 -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-BIPIDa6a.d.ts +50 -0
  407. package/dist/{types-DBHftjgS.d.ts → types-AMJ5qoU_.d.ts} +45 -33
  408. package/dist/{types-CfiKC5aN.d.ts → types-B2mlGuhW.d.ts} +14 -11
  409. package/dist/{types-D3A19w4A.d.ts → types-B4uqKDnp.d.ts} +22 -13
  410. package/dist/{types-CQVEQawv.d.ts → types-BJk0BKRX.d.ts} +24 -14
  411. package/dist/types-B_d_g7T3.d.ts +262 -0
  412. package/dist/{types-DC44-hqb.d.ts → types-B_tiYvk8.d.ts} +59 -32
  413. package/dist/{types-DqzsnlSA.js → types-CcUXciSj.js} +17 -5
  414. package/dist/{types-BWZybqs9.d.ts → types-DC1Loeh3.d.ts} +381 -202
  415. package/dist/{types-CIeZcG8v.d.ts → types-DHKPcqzr.d.ts} +2 -2
  416. package/dist/{types-cTos-H7p.d.ts → types-DjuMBNF9.d.ts} +68 -32
  417. package/dist/{types-CeIscIKp.d.ts → types-HzqOtvsJ.d.ts} +23 -12
  418. package/dist/{types-BXMYB7BY.d.ts → types-ZzRGoViD.d.ts} +77 -24
  419. package/dist/{types-BfVmNJO5.d.ts → types-ah9NlU6j.d.ts} +128 -50
  420. package/dist/{types-DXmwu78Z.d.ts → types-djVzLlIV.d.ts} +31 -14
  421. package/dist/{types-g7Oy6Zg4.d.ts → types-yUuPR5Hy.d.ts} +47 -24
  422. package/dist/unplugin/index.d.ts +1 -1
  423. package/dist/unplugin/index.js +2 -2
  424. package/dist/usage-CYeXek0p.js +1 -0
  425. package/dist/{usage-Bybmck7f.js → usage-CxEzS4ey.js} +50 -26
  426. package/dist/{usage-CDaLXCfL.js → usage-ab0PdusX.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-YGg2mXyH.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-DZeqoWu5.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-Bu9zAlE0.d.ts} +13 -10
  439. package/dist/{waiter-BGUtGYoU.js → waiter-aBLM63_f.js} +1 -1
  440. package/dist/{watch-C-4VmFlL.js → watch-Cx_WciLE.js} +8 -8
  441. package/dist/watch-DB42U1ib.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-rI7dCR9Q.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-DlJE3gS_.d.ts} +8 -5
  452. package/package.json +7 -7
  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 +14 -22
  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,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, sr as Principal } from "../policy-types-CCiDRZBH.js";
2
+ import { c as checkHostedGrant, n as HostedGrantCheck, o as PolicyDocument } from "../hosted-Cmtxogd0.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-Dvi7YZG_.js";
5
+ import { a as pushedPolicy, i as parsePushedPolicy, n as PushedGrant, r as PushedPolicy, t as PUSHED_POLICY_SCHEMA } from "../pushed-policy-D1Eoi6NM.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-CJgOm6aq.js";
11
+ import { n as parsePushedPolicy, r as pushedPolicy, t as PUSHED_POLICY_SCHEMA } from "../pushed-policy-ITwYKvvH.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-Dadrl7Z-.js";
6
+ import { i as scanSources, r as runCollect } from "./collect-B7ZFAJU3.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 {
@@ -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-mRQQQhNK.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 @@
1
+ export { t as catalogFile, n as runCatalog } from "./catalog-BFpz2EmT.js";
@@ -0,0 +1,60 @@
1
+ import { r as isRecord } from "./compact-CAf557ZB.js";
2
+ import { k as isOperationEffect } from "./src-DZ0l9UAg.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 };
@@ -1,18 +1,24 @@
1
1
  import { r as isRecord, t as compact } from "./compact-CAf557ZB.js";
2
- import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
- import { i as dateAt, p as nowSeconds } from "./time-DkWjdL98.js";
4
- import { u as policyDocumentFromClaims } from "./hosted-XBgU6RGT.js";
5
- import { l as isApprovalErrorCode, s as ApprovalError, t as APPROVAL_HEADER } from "./types-DqzsnlSA.js";
6
- import { h as toCloudEvent, l as isAbsoluteUri } from "./sink-BEZSlMS_.js";
7
- import { n as parseCatalogEventData, t as catalogFingerprint } from "./catalog-fingerprint-C144oW4M.js";
8
- import { t as parseApprovalRequest } from "./parse-request-D_tUXG6M.js";
2
+ import { n as freezeDeep } from "./freeze-jjan0lCv.js";
3
+ import { i as dateAt, p as nowSeconds } from "./time-nR1JesoH.js";
4
+ import { u as policyDocumentFromClaims } from "./hosted-D0IzESu_.js";
5
+ import { l as isApprovalErrorCode, s as ApprovalError, t as APPROVAL_HEADER } from "./types-CcUXciSj.js";
6
+ import { h as toCloudEvent, l as isAbsoluteUri } from "./sink-D9_vh372.js";
7
+ import { n as parseCatalogEventData, t as catalogFingerprint } from "./catalog-fingerprint-e6aCWosn.js";
8
+ import { t as parseApprovalRequest } from "./parse-request-CwCZpyjV.js";
9
9
  import { t as timeoutSignal } from "./timeout-D51niuQP.js";
10
10
  import { t as CLOUD_BASE_URL } from "./base-url-BQbddZO5.js";
11
11
  //#region src/cloud/approver.ts
12
12
  const APPROVER_HEADER = "PermDock-Approver";
13
- /** The RFC 9396 `authorization_details` type that binds an approver token to one verdict. */
13
+ /**
14
+ * The RFC 9396 `authorization_details` type that binds an approver token to one
15
+ * verdict.
16
+ */
14
17
  const APPROVAL_DETAIL_TYPE = "permdock_approval";
15
- /** Seconds an approver token lives: it proves one resolve call, and the Cloud refuses a replayed `jti`. */
18
+ /**
19
+ * Seconds an approver token lives: it proves one resolve call, and the Cloud
20
+ * refuses a replayed `jti`.
21
+ */
16
22
  const APPROVER_TTL = 60;
17
23
  async function facts(read, request, verdict, fallback) {
18
24
  if (read === void 0) return fallback ?? [];
@@ -25,7 +31,10 @@ async function facts(read, request, verdict, fallback) {
25
31
  function unauthenticated(detail) {
26
32
  return new ApprovalError("approver-unauthenticated", detail);
27
33
  }
28
- /** A rejection only denies, so the Cloud takes a `system` one without an approver token. */
34
+ /**
35
+ * A rejection only denies, so the Cloud takes a `system` one without an
36
+ * approver token.
37
+ */
29
38
  function isSystemRejection(verdict) {
30
39
  return verdict.status === "rejected" && verdict.by.actor?.kind === "system";
31
40
  }
@@ -36,10 +45,10 @@ function isSystemRejection(verdict) {
36
45
  * the request id, the verdict status, `vouched`, and the approver's
37
46
  * `permissions` and `relations`. With the `roles`, `memberships` and `tenant`
38
47
  * claims they are the only facts the Cloud checks a request's `approvers`
39
- * against in bring-your-own mode. `target` runs only after the
40
- * approver checks pass. Throws an `ApprovalError` before any resolve when the
41
- * approver cannot be proven: no signer, no principal, an actor, a failed
42
- * lookup or a signer failure.
48
+ * against in bring-your-own mode. `target` runs only after the approver checks
49
+ * pass. Throws an `ApprovalError` before any resolve when the approver cannot
50
+ * be proven: no signer, no principal, an actor, a failed lookup or a signer
51
+ * failure.
43
52
  */
44
53
  async function approverHeaders(verdict, options, issuer, target) {
45
54
  if (isSystemRejection(verdict)) return {};
@@ -80,7 +89,10 @@ async function approverHeaders(verdict, options, issuer, target) {
80
89
  }
81
90
  //#endregion
82
91
  //#region src/cloud/request.ts
83
- /** Milliseconds a PermDock Cloud request may take; a slower one fails like an unreachable Cloud. */
92
+ /**
93
+ * Milliseconds a PermDock Cloud request may take; a slower one fails like an
94
+ * unreachable Cloud.
95
+ */
84
96
  const CLOUD_TIMEOUT_MS = 1e4;
85
97
  function readEnv(name) {
86
98
  const value = globalThis.process?.env?.[name];
@@ -103,15 +115,18 @@ function endpointsOf(url, environment) {
103
115
  jwks: `${issuer}/.well-known/jwks.json`
104
116
  });
105
117
  }
106
- /** `options.environment`, else `PERMDOCK_CLOUD_ENV`, else `""` for the key-bound lookup. */
118
+ /**
119
+ * `options.environment`, else `PERMDOCK_CLOUD_ENV`, else `""` for the key-bound
120
+ * lookup.
121
+ */
107
122
  function configuredEnvironment(options) {
108
123
  return firstNonEmpty(options.environment, readEnv("PERMDOCK_CLOUD_ENV"));
109
124
  }
110
125
  /**
111
126
  * The environment URL and JWK Set URL `cloud()` uses when the environment is
112
- * configured: `environment`, else `PERMDOCK_CLOUD_ENV`. Throws when neither
113
- * is set; `resolveCloudEndpoints` then asks the Cloud which environment the
114
- * key belongs to.
127
+ * configured: `environment`, else `PERMDOCK_CLOUD_ENV`. Throws when neither is
128
+ * set; `resolveCloudEndpoints` then asks the Cloud which environment the key
129
+ * belongs to.
115
130
  */
116
131
  function cloudEndpoints(options = {}) {
117
132
  const url = cloudUrl(options);
@@ -134,7 +149,10 @@ async function keyEnvironment(url, key, fetchFn) {
134
149
  if (body["issuer"] !== endpoints.issuer) throw new Error(`PermDock Cloud named issuer ${String(body["issuer"])}, not ${endpoints.issuer}`);
135
150
  return endpoints;
136
151
  }
137
- /** The authenticated connection every `permdock/cloud` client shares. Throws without a key. */
152
+ /**
153
+ * The authenticated connection every `permdock/cloud` client shares. Throws
154
+ * without a key.
155
+ */
138
156
  function cloudConnection(options) {
139
157
  const key = firstNonEmpty(options.key, readEnv("PERMDOCK_CLOUD_KEY"));
140
158
  const url = cloudUrl(options);
@@ -172,10 +190,10 @@ function cloudConnection(options) {
172
190
  });
173
191
  }
174
192
  /**
175
- * The environment URL and JWK Set URL for a key: `cloudEndpoints(options)`
176
- * when the environment is configured, else the environment `GET
177
- * /v1/environment` names for `key` (`PERMDOCK_CLOUD_KEY`). Rejects when the
178
- * Cloud does not answer or answers another issuer.
193
+ * The environment URL and JWK Set URL for a key: `cloudEndpoints(options)` when
194
+ * the environment is configured, else the environment `GET /v1/environment`
195
+ * names for `key` (`PERMDOCK_CLOUD_KEY`). Rejects when the Cloud does not
196
+ * answer or answers another issuer.
179
197
  */
180
198
  async function resolveCloudEndpoints(options = {}) {
181
199
  return await cloudConnection(options).endpoints();
@@ -212,7 +230,10 @@ function asApproval(value) {
212
230
  if (!isRecord(value) || value["v"] !== 1 || typeof value["token"] !== "string") return null;
213
231
  return value;
214
232
  }
215
- /** The refusal PermDock Cloud names in its body, else the one its status implies. */
233
+ /**
234
+ * The refusal PermDock Cloud names in its body, else the one its status
235
+ * implies.
236
+ */
216
237
  async function approvalErrorFrom(response) {
217
238
  let body;
218
239
  try {
@@ -467,8 +488,8 @@ const SCHEME = /^[\s,]*([!#$%&'*+.^_`|~0-9A-Za-z-]+)(?=[\s,]|$)/u;
467
488
  const PARAM = /^\s*([!#$%&'*+.^_`|~0-9A-Za-z-]+)\s*=\s*(?:"((?:[^"\\]|\\.)*)"|([!#$%&'*+.^_`|~0-9A-Za-z-]+))\s*(?:,|$)/u;
468
489
  const TOKEN68 = /^\s*[A-Za-z0-9._~+/-]+=*\s*(?:,|$)/u;
469
490
  /**
470
- * The first `Bearer` challenge in `header` (RFC 9110 section 11.6.1 syntax),
471
- * or `null`. Other schemes in the same field are skipped.
491
+ * The first `Bearer` challenge in `header` (RFC 9110 section 11.6.1 syntax), or
492
+ * `null`. Other schemes in the same field are skipped.
472
493
  */
473
494
  function bearerChallenge(header) {
474
495
  if (header === null) return null;