permdock 0.6.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 (507) hide show
  1. package/README.md +2 -3
  2. package/dist/{2020-C9VN-x8c.js → 2020-CJbO8Bvz.js} +1 -3
  3. package/dist/a2a/index.d.ts +7 -7
  4. package/dist/a2a/index.js +9 -9
  5. package/dist/action-result-CL-QCITA.d.ts +19 -0
  6. package/dist/{adapter-context-CRhqyzCk.js → adapter-context-CIQpQxbE.js} +8 -2
  7. package/dist/{adoption-scan-DCYe60Pi.js → adoption-scan-BLs67P1l.js} +5 -5
  8. package/dist/agent/index.d.ts +3 -3
  9. package/dist/agent/index.js +1 -1
  10. package/dist/ai-sdk/index.d.ts +31 -10
  11. package/dist/ai-sdk/index.js +22 -12
  12. package/dist/{app-data-MuyzVqX8.js → app-data-UNNm07jV.js} +10 -7
  13. package/dist/{approval-header-CJACtHkv.js → approval-header-8QV6MU4H.js} +6 -3
  14. package/dist/{approval-prompt-Dg5LeAcT.js → approval-prompt-B8hQY69x.js} +5 -6
  15. package/dist/{approval-prompt-DvSSPQJX.d.ts → approval-prompt-PYagyQUj.d.ts} +13 -11
  16. package/dist/approvals/index.d.ts +5 -5
  17. package/dist/approvals/index.js +7 -7
  18. package/dist/{approvals-p1PGoVjb.js → approvals-DnIBTuXE.js} +128 -78
  19. package/dist/{approvers-CqPOLD-o.js → approvers-B4r0N_Uz.js} +8 -2
  20. package/dist/{arazzo-41WuzHou.js → arazzo-3RhGfkAK.js} +2 -2
  21. package/dist/{arazzo-CaUVBn7D.js → arazzo-B5-ulWif.js} +6 -6
  22. package/dist/{args-IIolxxKA.js → args-0FrVs5EH.js} +125 -8
  23. package/dist/astro/index.d.ts +30 -12
  24. package/dist/astro/index.js +2 -2
  25. package/dist/{audience-DabClFLQ.js → audience-BAkBDMqn.js} +8 -8
  26. package/dist/{auth-DRLEizbL.js → auth--yPyZNgr.js} +21 -10
  27. package/dist/authzen/index.d.ts +171 -25
  28. package/dist/authzen/index.js +321 -149
  29. package/dist/{automation-BNM3TtDo.d.ts → automation-DqEoWHBc.d.ts} +42 -32
  30. package/dist/{automation-DVjOckjV.js → automation-x3KEUusw.js} +22 -21
  31. package/dist/base-url-BQbddZO5.js +9 -0
  32. package/dist/better-auth/index.d.ts +2 -2
  33. package/dist/better-auth/index.js +13 -7
  34. package/dist/better-supabase/index.d.ts +392 -220
  35. package/dist/better-supabase/index.js +293 -152
  36. package/dist/{bind-DOyrv6zi.d.ts → bind-Cp2hBHzP.d.ts} +27 -12
  37. package/dist/{bind-CAvgUuKs.js → bind-D_sZSVA3.js} +22 -10
  38. package/dist/{body-CH5of8Ne.js → body-CJQwYVa8.js} +3 -3
  39. package/dist/{body-text-QcXok_SI.js → body-text-DQhcmqdY.js} +8 -4
  40. package/dist/{boundary-BM8a_P6E.js → boundary-BV3O1eud.js} +8 -2
  41. package/dist/{boundary-BmHxVH1J.d.ts → boundary-C9ck-3uK.d.ts} +13 -4
  42. package/dist/{budget-NbEtbJC_.js → budget-BELja5A9.js} +6 -3
  43. package/dist/{budget-JqcRqyhK.d.ts → budget-hYsPz_yE.d.ts} +6 -3
  44. package/dist/{build-instance-Bu_eDqYw.js → build-instance-CNWaYJyr.js} +3 -3
  45. package/dist/{canonical-json-BC8_nMTw.js → canonical-json-DwilZ1iB.js} +6 -3
  46. package/dist/{capability-N1K9IpqS.js → capability-BqX94r07.js} +31 -25
  47. package/dist/{capability-Drg-1YhL.d.ts → capability-ChuiONQU.d.ts} +41 -29
  48. package/dist/{casbin-Dyu2gnUD.js → casbin-H0rKxBx2.js} +16 -8
  49. package/dist/{casbin-Cr7RLtA3.js → casbin-cbSbhT_k.js} +2 -2
  50. package/dist/{casl-64gpT-8x.js → casl-C4OINZHI.js} +2 -2
  51. package/dist/{casl-DjEDhTCP.js → casl-CHHoCldP.js} +19 -10
  52. package/dist/catalog/index.d.ts +104 -23
  53. package/dist/catalog/index.js +117 -8
  54. package/dist/{catalog-HD2gf5mY.js → catalog-BFpz2EmT.js} +57 -26
  55. package/dist/{catalog-DZVbrF-z.js → catalog-DCspHDc8.js} +3 -3
  56. package/dist/{catalog-doc-Cdn7-0pQ.js → catalog-doc-DjMKzJp9.js} +53 -16
  57. package/dist/{catalog-fingerprint-CCP0-yQS.js → catalog-fingerprint-e6aCWosn.js} +19 -15
  58. package/dist/catalog-mRQQQhNK.js +1 -0
  59. package/dist/catalog-operations-Dadrl7Z-.js +60 -0
  60. package/dist/{create-CQWIpUG-.js → challenge-DImNcR7B.js} +157 -39
  61. package/dist/chat/index.d.ts +1 -1
  62. package/dist/chat/index.js +13 -10
  63. package/dist/chat-sdk/index.d.ts +44 -26
  64. package/dist/chat-sdk/index.js +17 -17
  65. package/dist/checks-CGkP3Z7A.js +40 -0
  66. package/dist/{claims-map-7oQ3ue4X.js → claims-map-CKkoAAYF.js} +5 -2
  67. package/dist/{claims-map-Ca-QX8C6.d.ts → claims-map-D1Pb5oRq.d.ts} +8 -5
  68. package/dist/claude-agent/index.d.ts +6 -6
  69. package/dist/claude-agent/index.js +6 -3
  70. package/dist/clerk/index.d.ts +11 -7
  71. package/dist/clerk/index.js +6 -6
  72. package/dist/cli/bin.js +4 -4
  73. package/dist/cli/index.d.ts +82 -7
  74. package/dist/cli/index.js +6 -6
  75. package/dist/{clients-C7zLFuWT.d.ts → clients-C_NOET3z.d.ts} +5 -5
  76. package/dist/{clients-DjU5ABMy.js → clients-DYr3U86j.js} +3 -3
  77. package/dist/cloud/index.d.ts +186 -38
  78. package/dist/cloud/index.js +293 -31
  79. package/dist/{cloud-ytQ3uviA.js → cloud-BFlGMaak.js} +5 -6
  80. package/dist/{codemod-5mpSpnUY.js → codemod-DLQ9Zpo4.js} +3 -4
  81. package/dist/{codemod-ua2hHy7w.js → codemod-DWSN2erG.js} +523 -201
  82. package/dist/collect-B5BL3klN.js +1 -0
  83. package/dist/{collect-mLTY4nwb.js → collect-B7ZFAJU3.js} +36 -64
  84. package/dist/{collect-Ci6akVwH.js → collect-Bzv3le0A.js} +6 -6
  85. package/dist/{compare-pfyVnBjE.js → compare-DTfyUunF.js} +2 -2
  86. package/dist/compile/index.d.ts +2 -2
  87. package/dist/compile/index.js +1 -1
  88. package/dist/{compile-1bsAezL0.d.ts → compile-BFzysW3o.d.ts} +36 -12
  89. package/dist/{compile-CMqMx_IN.js → compile-EzEMB-7v.js} +77 -33
  90. package/dist/{completion-BTFrHZhX.js → completion-saoYiRFO.js} +17 -8
  91. package/dist/config-BwPBfN0t.js +108 -0
  92. package/dist/{config-Bj2Ixq3d.js → config-DBeXXmBF.js} +2 -2
  93. package/dist/{config-report-DSpsLpCE.js → config-report-BipSWA6V.js} +9 -6
  94. package/dist/config-shape-ykV0Vm2n.js +134 -0
  95. package/dist/{connection-DjhIJSs2.js → connection-B72dg5Q2.js} +23 -22
  96. package/dist/connector-schema-CYLQNMYq.js +434 -0
  97. package/dist/{context-B_u3_bDJ.js → context-BnIzxTNE.js} +4 -3
  98. package/dist/convex/index.d.ts +13 -7
  99. package/dist/convex/index.js +9 -6
  100. package/dist/core-H-mbhpZc.js +341 -0
  101. package/dist/core-hWIARPDz.d.ts +206 -0
  102. package/dist/{create-CBMmFie-.d.ts → create-BSNrVuxh.d.ts} +87 -34
  103. package/dist/{create-B30OMUOJ.d.ts → create-BVq1lNQE.d.ts} +49 -28
  104. package/dist/{create-D_NmPOdH.d.ts → create-CM1FciYG.d.ts} +37 -29
  105. package/dist/{create-CGm28gyI.js → create-Cq4Uox0f.js} +13 -9
  106. package/dist/{create-DCF2SvoT.js → create-_noSrY1T.js} +15 -21
  107. package/dist/{credential-BcoiejpY.js → credential-CyyyvCsL.js} +42 -39
  108. package/dist/{credentials-DPyHmYz5.js → credentials-CdDxp7jN.js} +6 -6
  109. package/dist/{deciding-columns-Sq12mEA6.js → deciding-columns-NB4wcyBf.js} +13 -2
  110. package/dist/{delegation-j6-rc37o.js → delegation-CDB6_keF.js} +31 -22
  111. package/dist/delivery/index.d.ts +5 -5
  112. package/dist/delivery/index.js +6 -5
  113. package/dist/{delivery-DCAgNyCn.js → delivery-BupfvJIV.js} +81 -20
  114. package/dist/{delivery-event-xX4obB8F.js → delivery-event-JioK5YbS.js} +6 -6
  115. package/dist/denied-text-CHNlVInN.d.ts +22 -0
  116. package/dist/{describe-BybMRY7A.js → describe-Bb4hGK5d.js} +6 -5
  117. package/dist/{describe-B5qgDvEW.d.ts → describe-ByS9LgHK.d.ts} +5 -5
  118. package/dist/{device-BARQ8eYG.js → device-BwbJNmb2.js} +11 -8
  119. package/dist/{diff-CmuSD3vc.js → diff-CN8IYhC_.js} +2 -2
  120. package/dist/{diff-3jbx6Rm4.js → diff-iZWV65nC.js} +23 -14
  121. package/dist/{digest-B3kc_PgQ.d.ts → digest-8Yx2CchM.d.ts} +3 -3
  122. package/dist/{doctor-BdZw53-k.js → doctor-CHD1M9R5.js} +485 -141
  123. package/dist/{doctor-3ZqNHX_G.js → doctor-D3wo-yuz.js} +4 -4
  124. package/dist/drizzle/index.d.ts +33 -19
  125. package/dist/drizzle/index.js +17 -9
  126. package/dist/elysia/index.d.ts +17 -11
  127. package/dist/elysia/index.js +5 -5
  128. package/dist/{errors-BKy0EfhN.js → errors-B6R_lg2a.js} +13 -4
  129. package/dist/{errors-BWXBMaKK.d.ts → errors-CHwoRRpB.d.ts} +4 -1
  130. package/dist/{errors-CWTY6uih.js → errors-Vpu6rKHl.js} +14 -10
  131. package/dist/{errors-DH5QEGXh.d.ts → errors-zi_4T-rx.d.ts} +22 -6
  132. package/dist/{evaluate-CNClBvcj.js → evaluate-Dd8Ta0Ie.js} +185 -80
  133. package/dist/{evaluations-beAooV0n.js → evaluations-IBceAeKT.js} +41 -20
  134. package/dist/{evaluations-C_1vdSZc.d.ts → evaluations-z8dQFDaN.d.ts} +12 -6
  135. package/dist/eve/index.d.ts +9 -6
  136. package/dist/eve/index.js +4 -4
  137. package/dist/{event-time-CsegxXxB.js → event-time-BGy48400.js} +8 -4
  138. package/dist/{expiry-D4_YKRKD.js → expiry-6XByK0dm.js} +8 -5
  139. package/dist/express/index.d.ts +9 -6
  140. package/dist/express/index.js +9 -6
  141. package/dist/fastify/index.d.ts +16 -10
  142. package/dist/fastify/index.js +8 -5
  143. package/dist/{fetch-adapter-Dw0MTS3D.d.ts → fetch-adapter-C1DCvpqV.d.ts} +9 -6
  144. package/dist/{fetch-adapter-DD_gfmrC.js → fetch-adapter-JL43jD3E.js} +14 -11
  145. package/dist/fields-D0vUI6dq.js +498 -0
  146. package/dist/{files-C5ZI27eV.js → files-B3AA05f1.js} +21 -5
  147. package/dist/{files-D_JIzUrP.js → files-BSjrtIHw.js} +11 -4
  148. package/dist/{fixtures-B7XrLeY7.js → fixtures-A1_sp_tR.js} +15 -6
  149. package/dist/{flags-C3DktBDY.js → flags-DXjoTVbS.js} +2 -2
  150. package/dist/{freeze-CrU8nQeX.js → freeze-jjan0lCv.js} +4 -1
  151. package/dist/{from-snapshot-CTCMsFZk.js → from-snapshot-DCakWRsr.js} +26 -16
  152. package/dist/gen-B5kvbAoZ.js +58 -0
  153. package/dist/gen-DWCYcMQM.js +827 -0
  154. package/dist/generate-CRVV5V7l.js +165 -0
  155. package/dist/generate-CezbCaTI.js +275 -0
  156. package/dist/{grantee-hxrUsbpM.js → grantee-Dke-9rd1.js} +4 -4
  157. package/dist/{grantee-conditions-CcXf8hMM.js → grantee-conditions-BrYPe-w0.js} +12 -12
  158. package/dist/{grantee-match-DbENBHLB.js → grantee-match-7RZZvoT_.js} +12 -6
  159. package/dist/{graph-sql-B-dsAT6j.d.ts → graph-sql-BwFC4Qjs.d.ts} +3 -3
  160. package/dist/h3/index.d.ts +10 -7
  161. package/dist/h3/index.js +3 -3
  162. package/dist/headers-B9jQxjtW.d.ts +10 -0
  163. package/dist/{helpers-CBYVMjwh.js → helpers-DJicaG6f.js} +40 -28
  164. package/dist/hono/index.d.ts +16 -10
  165. package/dist/hono/index.js +5 -5
  166. package/dist/{hosted-BPk51-kX.d.ts → hosted-Cmtxogd0.d.ts} +44 -20
  167. package/dist/{hosted-B46-5LYE.js → hosted-D0IzESu_.js} +68 -25
  168. package/dist/{http-ujKm0JXE.js → http-DH94eh6f.js} +4 -4
  169. package/dist/{http-BBoKefeS.js → http-DKLXrFGk.js} +13 -7
  170. package/dist/{http-DXJ37RDA.js → http-DOL33cO0.js} +11 -8
  171. package/dist/{import-wyqXUyjm.js → import-CST57XLp.js} +64 -51
  172. package/dist/{import-CNV7I2Dw.js → import-_YqhhwvX.js} +6 -6
  173. package/dist/{index-B8YjkEZ4.d.ts → index-B8s204GL.d.ts} +64 -52
  174. package/dist/{index-Ch8LpNDp.d.ts → index-BT5-1VsX.d.ts} +64 -25
  175. package/dist/{index-DuWxc5dt.d.ts → index-BW_0MZOS.d.ts} +388 -149
  176. package/dist/index-BhxEUY9J.d.ts +233 -0
  177. package/dist/index-Bv5iXPqU.d.ts +210 -0
  178. package/dist/{index-C-6Letxg.d.ts → index-_9UiQIkt.d.ts} +164 -77
  179. package/dist/index.d.ts +22 -21
  180. package/dist/index.js +35 -33
  181. package/dist/{init-GG6Jh8HD.js → init-Dz_PsHdv.js} +5 -5
  182. package/dist/{init-DeMYsnYJ.js → init-cE3A8aXq.js} +10 -10
  183. package/dist/{instance-options-BsVpyGIk.d.ts → instance-options-B0KXqTrJ.d.ts} +4 -4
  184. package/dist/{instance-snapshot-BOEhcqIF.js → instance-snapshot--JWiTrvO.js} +81 -56
  185. package/dist/{instant-BluqDvyS.js → instant-DK3Iz83e.js} +2 -2
  186. package/dist/{internals-Dk8A8fX3.js → internals-B3IgHrvo.js} +6 -3
  187. package/dist/{json-schema-B-vAwlde.js → json-schema-BPGa-RjQ.js} +9 -3
  188. package/dist/{json-schema-CN_iLFH2.d.ts → json-schema-BfXgnRNT.d.ts} +4 -4
  189. package/dist/jwt/index.d.ts +125 -17
  190. package/dist/jwt/index.js +157 -16
  191. package/dist/{kernel-D0NVb1cK.js → kernel-C-fYydV2.js} +151 -16
  192. package/dist/kysely/index.d.ts +49 -33
  193. package/dist/kysely/index.js +9 -7
  194. package/dist/{live-options-BaAFCIiu.js → live-options-BBIT68le.js} +2 -2
  195. package/dist/{load-DFS_ry0W.js → load-DjSU5KXO.js} +6 -6
  196. package/dist/load-Dm0pSYH3.js +1 -0
  197. package/dist/{login-Dfe5RlYk.js → login-D-8tMqzo.js} +4 -4
  198. package/dist/{login-imhuwvn3.js → login-DplQ0s84.js} +18 -15
  199. package/dist/{manifest-dvL2XEe1.js → manifest-Cgiq5oqc.js} +67 -37
  200. package/dist/{manifest-mx5ghSFM.d.ts → manifest-CzzWtnAb.d.ts} +144 -28
  201. package/dist/{manifest-schema-C0kK_8V0.js → manifest-schema-2r37XRhD.js} +80 -9
  202. package/dist/{manifest-C8IzW3Do.js → manifest-wg8WkkpD.js} +11 -7
  203. package/dist/{map-claims-D3oRmTk0.js → map-claims-BNWCJtmP.js} +27 -18
  204. package/dist/{map-error-Dr70oA_3.js → map-error-pasIGqMT.js} +7 -7
  205. package/dist/{markers-C6joDI3o.js → markers-BeHZ4x9Q.js} +20 -5
  206. package/dist/mcp/index.d.ts +154 -47
  207. package/dist/mcp/index.js +200 -41
  208. package/dist/{migrate-CIq4-E9F.js → migrate-B7oP_sQU.js} +102 -31
  209. package/dist/module-values-BJTBdo6y.js +107 -0
  210. package/dist/nest/index.d.ts +23 -13
  211. package/dist/nest/index.js +18 -11
  212. package/dist/next/client.d.ts +5 -2
  213. package/dist/next/client.js +1 -1
  214. package/dist/next/index.d.ts +72 -26
  215. package/dist/next/index.js +110 -6
  216. package/dist/next/plugin.d.ts +1 -1
  217. package/dist/next/plugin.js +4 -3
  218. package/dist/node/index.d.ts +5 -5
  219. package/dist/node/index.js +3 -3
  220. package/dist/{ocsf-BFp-PZZA.js → ocsf-TcjRBgIs.js} +15 -5
  221. package/dist/openai/index.d.ts +13 -7
  222. package/dist/openai/index.js +3 -3
  223. package/dist/openapi/index.d.ts +61 -30
  224. package/dist/openapi/index.js +2 -2
  225. package/dist/{openapi-B7HZ0f-r.js → openapi-BOsx0xn9.js} +34 -24
  226. package/dist/{openapi-C4dDTVEd.js → openapi-CBZUhA3l.js} +4 -5
  227. package/dist/{openapi-DD1SV-5-.js → openapi-VeHHU2l9.js} +23 -14
  228. package/dist/{operation-findings-DgATDpvh.js → operation-findings-CXtFzlKJ.js} +3 -3
  229. package/dist/{operations-X0VM7F3m.d.ts → operations-Ci_rT6Uo.d.ts} +10 -7
  230. package/dist/orpc/index.d.ts +68 -14
  231. package/dist/orpc/index.js +62 -13
  232. package/dist/otel/index.d.ts +7 -4
  233. package/dist/otel/index.js +8 -5
  234. package/dist/output-files-BHOIlrfD.js +1 -0
  235. package/dist/{output-files-DhRBBE4n.js → output-files-BIQ_9pIs.js} +29 -17
  236. package/dist/{output-1im__-08.js → output-tkju6U7R.js} +15 -7
  237. package/dist/ownership-B4L59T9u.js +1054 -0
  238. package/dist/parse-1_ZheTW5.js +151 -0
  239. package/dist/parse-local-manifest-BQhTlLQS.d.ts +10 -0
  240. package/dist/parse-local-manifest-DEiCF4ah.js +69 -0
  241. package/dist/{parse-request-D_tUXG6M.js → parse-request-CwCZpyjV.js} +7 -8
  242. package/dist/{paths-DXSHAMIa.js → paths-CUvURzHp.js} +4 -1
  243. package/dist/pdp/index.d.ts +9 -6
  244. package/dist/pdp/index.js +23 -12
  245. package/dist/{peer-CRvC7Hg1.js → peer-C9LvBCcb.js} +1 -1
  246. package/dist/peer-Q0fuZ6hx.js +982 -0
  247. package/dist/{permdock-SV8ZINYT.d.ts → permdock-B6Sf4T_S.d.ts} +270 -117
  248. package/dist/{permdock-BrAscV28.js → permdock-L-_I_3zP.js} +226 -74
  249. package/dist/{permission-registry-Br4jSNVi.js → permission-registry-B8tYxPIt.js} +24 -11
  250. package/dist/{vocabulary-CN8H_9UF.d.ts → permission-types-CAY-GU7e.d.ts} +130 -104
  251. package/dist/{permissions-u_KHg-sN.d.ts → permissions-Bx6UI8n1.d.ts} +6 -2
  252. package/dist/{permissions-B-wCP5ZC.js → permissions-CVXmRILq.js} +3 -3
  253. package/dist/{permissions-BPxlwVhN.js → permissions-mDcTWoBs.js} +8 -5
  254. package/dist/pg-DQTqRrou.js +60 -0
  255. package/dist/{pins-8ILTftC9.js → pins-nqarl3oE.js} +4 -1
  256. package/dist/pkce-CnmmYqUZ.js +21 -0
  257. package/dist/{policy-77FSAq_V.d.ts → policy-Ba4bDhaj.d.ts} +5 -5
  258. package/dist/{policy-DbM5YYtV.js → policy-CLQ8__GF.js} +49 -20
  259. package/dist/{policy-from-catalog-C2gMa2Dj.js → policy-from-catalog-CJgOm6aq.js} +28 -25
  260. package/dist/{policy-module-CTlwMvLI.js → policy-module-xym9fnSq.js} +12 -6
  261. package/dist/{policy-types-n0uRTsW8.d.ts → policy-types-CCiDRZBH.d.ts} +802 -334
  262. package/dist/postgres-store-DcyrPS-r.js +1028 -0
  263. package/dist/{postgrest-DAjUkF9w.js → postgrest-D4nuPXIQ.js} +88 -36
  264. package/dist/{postgrest-CEgRbefE.d.ts → postgrest-DicQyqm-.d.ts} +60 -30
  265. package/dist/powersync-DHNQX06W.js +1117 -0
  266. package/dist/{powersync-DISt6SUe.js → powersync-DXqGuq9A.js} +3 -3
  267. package/dist/powersync-Djf-zCpB.js +1 -0
  268. package/dist/preset/index.d.ts +38 -28
  269. package/dist/preset/index.js +1 -1
  270. package/dist/{preset-DZdU0tne.js → preset-BjLzeFpp.js} +58 -34
  271. package/dist/{principal-source-pHneukrx.js → principal-source-C6N60GtM.js} +10 -10
  272. package/dist/prisma/index.d.ts +69 -41
  273. package/dist/prisma/index.js +21 -17
  274. package/dist/{problem-CTviyH5L.js → problem-BVLHFK33.js} +41 -21
  275. package/dist/{problem-details-cn5X30gZ.js → problem-details-CLDgX1KV.js} +13 -4
  276. package/dist/{problem-types-CJ2325SZ.js → problem-types-DSsRfONQ.js} +4 -1
  277. package/dist/prompt-BYc6drYW.js +938 -0
  278. package/dist/protected-action-BE7N_Luo.d.ts +58 -0
  279. package/dist/protected-action-DUYqb-Ma.js +80 -0
  280. package/dist/{protected-BlF0F6wL.js → protected-action-QEA8arRB.js} +48 -14
  281. package/dist/{provider-B1al-AZz.js → provider-C55OGXJ7.js} +5 -4
  282. package/dist/{provider-DILL9oPK.d.ts → provider-DXfq5c2d.d.ts} +1 -1
  283. package/dist/{provider-store-DM6DNcta.js → provider-store-CaTv00tr.js} +13 -9
  284. package/dist/pull-B65ndFNZ.js +1 -0
  285. package/dist/{pull-jEwbf80J.js → pull-CwpGaQSi.js} +12 -11
  286. package/dist/{push-BD4f15co.js → push-DgssgzkK.js} +62 -16
  287. package/dist/{pushed-policy-DCW91KQU.d.ts → pushed-policy-D1Eoi6NM.d.ts} +12 -6
  288. package/dist/{pushed-policy-CqtxkV4G.js → pushed-policy-ITwYKvvH.js} +10 -7
  289. package/dist/react/index.d.ts +9 -8
  290. package/dist/react/index.js +7 -6
  291. package/dist/react/provider-client.d.ts +1 -1
  292. package/dist/react/provider-client.js +1 -1
  293. package/dist/react-native/index.d.ts +104 -51
  294. package/dist/react-native/index.js +394 -67
  295. package/dist/{refs-K6eWUJ0H.js → refs-C8BKxc_e.js} +17 -3
  296. package/dist/{relation-walk-3OyDBF0S.js → relation-walk-DK_gkgL7.js} +12 -9
  297. package/dist/{relations-BnCWnJGI.js → relations-BxvRvDHK.js} +3 -3
  298. package/dist/{replay-Du1tJjG7.js → replay-BU09ad4L.js} +1 -1
  299. package/dist/{replay-Bkm-Ne4l.d.ts → replay-DNftIb_R.d.ts} +1 -1
  300. package/dist/{request-context-C81Pip9n.js → request-context-C25ilqiJ.js} +8 -8
  301. package/dist/{request-schema-CMreVuFM.js → request-schema-DhX7UbfQ.js} +4 -1
  302. package/dist/resend/index.d.ts +34 -28
  303. package/dist/resend/index.js +29 -29
  304. package/dist/resolve-names-CF7xXLSG.js +201 -0
  305. package/dist/{resource-relations-D_jw0BFx.js → resource-relations-8-pCScBO.js} +18 -9
  306. package/dist/{retire-CALjIQ7e.js → retire-B2xffQgY.js} +15 -6
  307. package/dist/{revocations-R07lFBnX.d.ts → revocations-BaUXHM1N.d.ts} +6 -3
  308. package/dist/{rls-DTvYd-lI.js → rls-CNEH2_BG.js} +743 -624
  309. package/dist/{rls-BAqP4q66.js → rls-Ca8Jz9b5.js} +41 -10
  310. package/dist/{role-builder-uWQZ4v84.js → role-builder-BK2-T6oD.js} +41 -20
  311. package/dist/rolldown-runtime-C3I60J0A.js +4 -0
  312. package/dist/{row-conditions-h2HythXQ.js → row-conditions-BAGHOmVq.js} +4 -3
  313. package/dist/{rpc-VSl5ylaQ.js → rpc-fNqAIqQk.js} +8 -5
  314. package/dist/{run-CUKuz0A8.js → run-Bz26OTfO.js} +26 -23
  315. package/dist/run-D-JE8QWb.js +1 -0
  316. package/dist/{run-ticket-DocwaTKn.d.ts → run-ticket-DbWI9f99.d.ts} +33 -13
  317. package/dist/{run-ticket-sxFI6LAk.js → run-ticket-Dv7aF7Dk.js} +29 -8
  318. package/dist/{runtime-D3VTAiCA.js → runtime-BGnrOkVH.js} +5 -2
  319. package/dist/{saas-BCXRuXca.js → saas-iWnUdwCt.js} +42 -29
  320. package/dist/{scan-qvOe0hS3.js → scan-DCj1KQfn.js} +1 -1
  321. package/dist/{schema-B4v0Qrac.js → schema-BOJjqlWL.js} +3 -2
  322. package/dist/{schema-yLuBWWsh.js → schema-Dst9I9Gs.js} +9 -5
  323. package/dist/scim/index.d.ts +3 -2
  324. package/dist/scim/index.js +3 -1
  325. package/dist/scim-D8YupzX1.js +44 -0
  326. package/dist/{scim-ClHtpyV3.js → scim-jJBJ7g1Z.js} +35 -551
  327. package/dist/{scopes-CUPSjo9q.js → scopes-0Up_UA2t.js} +42 -24
  328. package/dist/server/index.d.ts +12 -12
  329. package/dist/server/index.js +13 -13
  330. package/dist/{server-C3WXAHZj.js → server-3cVlTLde.js} +31 -31
  331. package/dist/{server-types-CKQiCnON.d.ts → server-types-CIlpSA2G.d.ts} +81 -46
  332. package/dist/{sha256-D9ihqmvd.js → sha256-C-4WXKIu.js} +4 -3
  333. package/dist/{shared-BAK8t4Uo.js → shared-Afctg7B0.js} +100 -61
  334. package/dist/{shared-DvvFzYXe.js → shared-l0oGGetg.js} +9 -6
  335. package/dist/{signals-D3NcTKUS.js → signals-B1vHR3fN.js} +2 -2
  336. package/dist/{sink-BEZSlMS_.js → sink-D9_vh372.js} +32 -21
  337. package/dist/{sink-4-eQIRWf.d.ts → sink-Dvi7YZG_.d.ts} +44 -20
  338. package/dist/{skills-B6lVdD_W.js → skills-Bjj7BNEQ.js} +16 -12
  339. package/dist/{skills-CTYwkl44.js → skills-OuoMR49L.js} +3 -3
  340. package/dist/{snapshot-B7DkYg6g.js → snapshot-CXlzi69u.js} +21 -18
  341. package/dist/{snapshot-cache-PXI-vGpY.d.ts → snapshot-cache-BAXZ0KOp.d.ts} +21 -12
  342. package/dist/{snapshot-cache-DZHQ0KF6.js → snapshot-cache-Bx_4xC_6.js} +14 -11
  343. package/dist/solid/index.d.ts +55 -15
  344. package/dist/solid/index.js +46 -12
  345. package/dist/solid-start/index.d.ts +30 -12
  346. package/dist/solid-start/index.js +3 -3
  347. package/dist/sources-B1Os_YUu.d.ts +312 -0
  348. package/dist/{sources-vs5dGOsS.js → sources-CMAM-2A3.js} +156 -51
  349. package/dist/sources-qoIJQrJv.js +11 -0
  350. package/dist/{sql-B5T1IL83.js → sql-0WjxIp9g.js} +32 -7
  351. package/dist/sql-B80DFdpG.d.ts +10 -0
  352. package/dist/{src-Cu2m75uo.js → src-DZ0l9UAg.js} +305 -123
  353. package/dist/ssf/index.d.ts +4 -4
  354. package/dist/ssf/index.js +665 -224
  355. package/dist/{standard-webhooks-rbD7LS6h.d.ts → standard-webhooks-C-qX4mJW.d.ts} +7 -7
  356. package/dist/{standard-webhooks-DgFFD-Ga.js → standard-webhooks-D67a3nzk.js} +5 -5
  357. package/dist/{store-BDutJkDL.js → store-RNFvaJJv.js} +43 -29
  358. package/dist/{store-options-u0ycEe8s.js → store-options-Dil3lraY.js} +105 -15
  359. package/dist/stores-C0Kta5Ft.d.ts +59 -0
  360. package/dist/{stores-CGhM8BN_.js → stores-DxZWDXCs.js} +42 -5
  361. package/dist/{stream-CvdUS9V1.js → stream-CDvF0sJm.js} +5 -5
  362. package/dist/{stream-CeCMJmBB.d.ts → stream-ltuLdtTG.d.ts} +4 -3
  363. package/dist/{style-DiKWnAvn.js → style-DblOtSga.js} +1 -1
  364. package/dist/{style-Uao76wO7.js → style-Ds11Hmk4.js} +3 -1
  365. package/dist/{subject-settings-CkEwrw3W.js → subject-settings-8sH5HlII.js} +8 -4
  366. package/dist/{row-check-Dt35czLy.d.ts → subject-settings-vNW8qmUH.d.ts} +30 -18
  367. package/dist/supabase/index.d.ts +48 -37
  368. package/dist/supabase/index.js +6 -6
  369. package/dist/supabase/middleware.d.ts +19 -13
  370. package/dist/supabase/middleware.js +7 -7
  371. package/dist/{supabase-x5JtR2tc.js → supabase-BL1qJzzY.js} +82 -36
  372. package/dist/{supabase-By_frk3U.js → supabase-D39cuGPt.js} +3 -3
  373. package/dist/{supabase-hook-BMoEhZir.js → supabase-hook-B-yXnzUl.js} +1206 -286
  374. package/dist/supabase-hook-H-MtE9Wd.js +1 -0
  375. package/dist/supautils-BU-pAEpf.js +808 -0
  376. package/dist/{support-session-C6xJQYut.js → support-session-BsmPCbz8.js} +22 -22
  377. package/dist/svelte/PermissionBoundary.svelte +2 -6
  378. package/dist/svelte/Protected.svelte +2 -8
  379. package/dist/svelte/index.d.ts +9 -8
  380. package/dist/svelte/index.js +10 -9
  381. package/dist/svelte/runtime.d.ts +4 -4
  382. package/dist/svelte/runtime.js +4 -4
  383. package/dist/svelte/source.d.ts +9 -8
  384. package/dist/svelte/source.js +6 -5
  385. package/dist/sveltekit/index.d.ts +30 -12
  386. package/dist/sveltekit/index.js +2 -2
  387. package/dist/{ownership-DqaJNJPn.js → tables-DeMNEy6V.js} +1025 -1085
  388. package/dist/tanstack-start/index.d.ts +22 -10
  389. package/dist/tanstack-start/index.js +2 -2
  390. package/dist/{target-Bw37TFNA.js → target-qdEAnnhU.js} +6 -6
  391. package/dist/{tenancy-DN2QAx9z.js → tenancy-5d1zVBvK.js} +36 -21
  392. package/dist/terminal/index.d.ts +23 -14
  393. package/dist/terminal/index.js +17 -20
  394. package/dist/testing/core.d.ts +2 -0
  395. package/dist/testing/core.js +1 -0
  396. package/dist/testing/fixtures/index.d.ts +15 -0
  397. package/dist/testing/fixtures/index.js +831 -0
  398. package/dist/testing/index.d.ts +235 -285
  399. package/dist/testing/index.js +502 -927
  400. package/dist/testing/saas/index.d.ts +43 -27
  401. package/dist/testing/saas/index.js +2 -2
  402. package/dist/testing/saas/permissions.d.ts +1 -1
  403. package/dist/testing/saas/permissions.js +1 -1
  404. package/dist/text-diff-BtfSmdUo.js +444 -0
  405. package/dist/{thenable-yD7SabqG.js → thenable-BNSM1U2R.js} +12 -3
  406. package/dist/{time-DkWjdL98.js → time-nR1JesoH.js} +32 -8
  407. package/dist/{token-BLZcjQgt.js → token-DC9EQiet.js} +15 -13
  408. package/dist/{tool-refusal-CMLN5xhn.js → tool-refusal-Qpjs_W6M.js} +5 -2
  409. package/dist/trpc/index.d.ts +11 -8
  410. package/dist/trpc/index.js +15 -9
  411. package/dist/type-helpers-BIPIDa6a.d.ts +50 -0
  412. package/dist/{types-8RnwUAvE.d.ts → types-AMJ5qoU_.d.ts} +49 -30
  413. package/dist/{types-C_IiEs64.d.ts → types-B2mlGuhW.d.ts} +14 -11
  414. package/dist/{types-_WhUP7ud.d.ts → types-B4uqKDnp.d.ts} +25 -12
  415. package/dist/{types-CX7AvRqP.d.ts → types-BJk0BKRX.d.ts} +24 -14
  416. package/dist/types-B_d_g7T3.d.ts +262 -0
  417. package/dist/{types-BdtSDbBO.d.ts → types-B_tiYvk8.d.ts} +59 -32
  418. package/dist/{types-DqzsnlSA.js → types-CcUXciSj.js} +17 -5
  419. package/dist/{types-Dfv0aTER.d.ts → types-DC1Loeh3.d.ts} +449 -168
  420. package/dist/{types-lUlG3TVd.d.ts → types-DHKPcqzr.d.ts} +2 -2
  421. package/dist/{types-C791HFu9.d.ts → types-DjuMBNF9.d.ts} +68 -32
  422. package/dist/{types-C863OQiR.d.ts → types-HzqOtvsJ.d.ts} +23 -12
  423. package/dist/{types-Druu9wLM.d.ts → types-ZzRGoViD.d.ts} +77 -24
  424. package/dist/{types-BzzaHxt3.d.ts → types-ah9NlU6j.d.ts} +137 -48
  425. package/dist/{types-CVZSNocA.d.ts → types-djVzLlIV.d.ts} +31 -14
  426. package/dist/{types-BtHtcKMr.d.ts → types-yUuPR5Hy.d.ts} +47 -24
  427. package/dist/unplugin/index.d.ts +1 -1
  428. package/dist/unplugin/index.js +2 -2
  429. package/dist/usage-CYeXek0p.js +1 -0
  430. package/dist/{usage-SveTRTyr.js → usage-CxEzS4ey.js} +50 -26
  431. package/dist/{usage-CRVl9V3t.js → usage-ab0PdusX.js} +2 -2
  432. package/dist/{validation-error-ZfUHbKvf.js → validation-error-CYg2kJEw.js} +4 -1
  433. package/dist/{validation-error-DHUrAkku.d.ts → validation-error-YGg2mXyH.d.ts} +5 -2
  434. package/dist/{validity-CZ7-y0Cj.js → validity-Buc7w8E9.js} +13 -10
  435. package/dist/{verifier-DHuh-okk.js → verifier-DUV6pLqZ.js} +10 -4
  436. package/dist/{verify-BaAKx7t6.js → verify-DZeqoWu5.js} +417 -489
  437. package/dist/version-DMQ0dnN5.js +48 -0
  438. package/dist/version-DizhmD72.js +1 -0
  439. package/dist/{views-DTIIO-oQ.js → views-CD8wuL4Z.js} +19 -6
  440. package/dist/vocabulary-DEJ5j4mR.d.ts +70 -0
  441. package/dist/vue/index.d.ts +71 -21
  442. package/dist/vue/index.js +50 -13
  443. package/dist/{waiter-B986w1oK.d.ts → waiter-Bu9zAlE0.d.ts} +13 -10
  444. package/dist/{waiter-BGUtGYoU.js → waiter-aBLM63_f.js} +1 -1
  445. package/dist/{watch-vea54PRw.js → watch-Cx_WciLE.js} +8 -8
  446. package/dist/watch-DB42U1ib.js +1 -0
  447. package/dist/webmcp/index.d.ts +11 -11
  448. package/dist/webmcp/index.js +8 -5
  449. package/dist/{where-scope-C9vfEphl.js → where-scope-DlCdCM_8.js} +56 -30
  450. package/dist/{who-can-DWBAcaCQ.js → who-can-rI7dCR9Q.js} +23 -20
  451. package/dist/workflow/index.d.ts +3 -3
  452. package/dist/workflow/index.js +13 -13
  453. package/dist/workflow-sdk/index.d.ts +19 -13
  454. package/dist/workflow-sdk/index.js +6 -6
  455. package/dist/{wrap-gX61EtpB.js → wrap-B2wziJI_.js} +11 -5
  456. package/dist/{wrap-C5jC6sKI.d.ts → wrap-DlJE3gS_.d.ts} +8 -5
  457. package/package.json +25 -14
  458. package/schemas/catalog-v1.json +3 -0
  459. package/schemas/cli-result-v1.json +1 -0
  460. package/schemas/cloud-api-v1.json +152 -7
  461. package/schemas/connector-v1.json +8 -0
  462. package/schemas/supabase-claims-v1.json +5 -0
  463. package/schemas/supabase-manifest-v1.json +308 -75
  464. package/skills/permdock/SKILL.md +1 -0
  465. package/skills/permdock-agents/references/runtimes.md +3 -1
  466. package/skills/permdock-approvals/references/stores-and-resume.md +2 -1
  467. package/skills/permdock-credentials/references/tokens-keys-links.md +8 -6
  468. package/skills/permdock-data/references/queries-and-rls.md +6 -2
  469. package/skills/permdock-tenancy/SKILL.md +1 -1
  470. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +2 -1
  471. package/skills/permdock-wire/references/adapters.md +28 -22
  472. package/skills/permdock-wire/references/policy-options.md +1 -0
  473. package/dist/catalog-BoWglDPI.js +0 -1
  474. package/dist/collect-D7eQDffE.js +0 -1
  475. package/dist/config-bs_kZeYq.js +0 -162
  476. package/dist/denied-text-CiFQNuMV.d.ts +0 -19
  477. package/dist/fields-OYG_JR78.js +0 -203
  478. package/dist/generate-CNU1pIOo.js +0 -171
  479. package/dist/headers-BIjfMaoC.js +0 -8
  480. package/dist/headers-CIbDTUTK.d.ts +0 -7
  481. package/dist/index-Cp_ilKi1.d.ts +0 -91
  482. package/dist/index-CueFnxQc.d.ts +0 -110
  483. package/dist/load-BxEtwlBS.js +0 -1
  484. package/dist/output-files-B3IZJksC.js +0 -1
  485. package/dist/package-root-Dk_ETdkp.js +0 -31
  486. package/dist/parse-Cxq0WxrA.js +0 -53
  487. package/dist/parse-local-manifest-5ODwqu8b.d.ts +0 -10
  488. package/dist/parse-local-manifest-CVSs6J9I.js +0 -34
  489. package/dist/peer-C8swJ2GH.js +0 -50
  490. package/dist/policies-DP2nqRoF.js +0 -295
  491. package/dist/powersync-BkWWCS1K.js +0 -538
  492. package/dist/powersync-MMJ2mI2q.js +0 -1
  493. package/dist/problem-details-B45V5d2b.d.ts +0 -7
  494. package/dist/prompt-DfZLJLIn.js +0 -32
  495. package/dist/protected-RFGpakN9.d.ts +0 -38
  496. package/dist/pull-CvpINcMK.js +0 -1
  497. package/dist/run-DDwUaJDU.js +0 -1
  498. package/dist/sources-Xc4zkszI.d.ts +0 -190
  499. package/dist/stores-BUGNbJTt.d.ts +0 -30
  500. package/dist/supabase-hook-CCw5m35C.js +0 -1
  501. package/dist/supautils-B6HYL9eL.js +0 -91
  502. package/dist/text-diff-BQcUapOb.js +0 -15
  503. package/dist/types-B3_ooZgZ.d.ts +0 -172
  504. package/dist/usage-CZpSQP6L.js +0 -1
  505. package/dist/version-CEbQ5UeM.js +0 -18
  506. package/dist/version-DXkYUISx.js +0 -1
  507. package/dist/watch--ovlPOc0.js +0 -1
@@ -1,6 +1,6 @@
1
1
  import { r as isRecord } from "./compact-CAf557ZB.js";
2
- import { t as applyFiles } from "./files-C5ZI27eV.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, rr as Principal } from "../policy-types-n0uRTsW8.js";
2
- import { a as PolicyDocument } from "../hosted-BPk51-kX.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-Druu9wLM.js";
4
- import { a as CatalogFinding, i as CatalogEventData } from "../sink-4-eQIRWf.js";
5
- import { a as pushedPolicy, i as parsePushedPolicy, n as PushedGrant, r as PushedPolicy, t as PUSHED_POLICY_SCHEMA } from "../pushed-policy-DCW91KQU.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;
@@ -26,12 +29,76 @@ type CatalogDriftInput = {
26
29
  */
27
30
  export declare function catalogDrift(input: CatalogDriftInput): CatalogEventData;
28
31
  //#endregion
32
+ //#region src/catalog/hosted-options.d.ts
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
+ */
37
+ type HostedGrantRoleOption = {
38
+ readonly scope: string;
39
+ readonly roles: readonly string[];
40
+ };
41
+ type HostedGrantRelationOption = {
42
+ readonly relation: string;
43
+ /** Present when the grant may walk the resource's own parent chain. */
44
+ readonly through?: "parent";
45
+ };
46
+ /**
47
+ * What a hosted grant on one hostable permission may say; any other value is
48
+ * dropped by `mergeHostedGrants`.
49
+ */
50
+ type HostedGrantOption = {
51
+ readonly permission: string;
52
+ readonly resource: string;
53
+ readonly scope: string;
54
+ readonly effects: readonly ("allow" | "deny")[];
55
+ readonly grantees: {
56
+ readonly roles: readonly HostedGrantRoleOption[];
57
+ readonly plans: readonly string[];
58
+ readonly relations: readonly HostedGrantRelationOption[];
59
+ };
60
+ readonly 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
+ */
65
+ readonly required: boolean;
66
+ /** The approvals code allows carry; a hosted allow must meet each. */
67
+ readonly meets: readonly ("human" | ApprovalRequirement)[];
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
+ */
72
+ readonly modes: readonly ("human" | "any")[];
73
+ /** The object-form fields a hosted approval may set. */
74
+ readonly fields: readonly string[];
75
+ /** The grantee kinds `by` and `escalation.to` may name. */
76
+ readonly approvers: readonly ("role" | "plan" | "authenticated")[];
77
+ };
78
+ readonly conditions: {
79
+ /** `where` and `check` accept the portable condition subset only. */
80
+ readonly portable: true;
81
+ /**
82
+ * The resource's top-level fields, from its JSON Schema; `null` when the
83
+ * schema exposes none.
84
+ */
85
+ readonly fields: readonly string[] | null;
86
+ };
87
+ };
88
+ /**
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`.
93
+ */
94
+ export declare function hostedGrantOptions(policy: Policy): readonly HostedGrantOption[];
95
+ //#endregion
29
96
  //#region src/catalog/json-schema-validator.d.ts
30
97
  /**
31
98
  * A Standard Schema that validates against a catalog resource's JSON Schema.
32
99
  * `null` (no JSON Schema in the catalog) gives `undefined`. A schema that uses
33
- * a keyword outside the supported subset rejects every value, so a hosted
34
- * 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.
35
102
  */
36
103
  export declare function resourceSchemaFromJson(json: unknown): StandardSchemaV1 | undefined;
37
104
  //#endregion
@@ -46,19 +113,33 @@ type OperationCatalog = {
46
113
  };
47
114
  /**
48
115
  * Operations, matched by name, whose `meta.risk` rose or whose permission
49
- * stopped requiring approval between two catalogs. A new or removed
50
- * operation is not a finding.
116
+ * stopped requiring approval between two catalogs. A new or removed operation
117
+ * is not a finding.
51
118
  */
52
119
  export declare function operationFindings(previous: OperationCatalog, next: OperationCatalog): readonly CatalogFinding[];
53
120
  //#endregion
121
+ //#region src/catalog/references.d.ts
122
+ /** A permission `meta` field `parseCatalog` can require. */
123
+ type CatalogMetaField = "title" | "risk" | "effects";
124
+ //#endregion
54
125
  //#region src/catalog/parse.d.ts
126
+ type ParseCatalogOptions = {
127
+ /** Permission `meta` fields every permission must carry; none by default. */
128
+ readonly requireMeta?: readonly CatalogMetaField[];
129
+ };
130
+ /**
131
+ * Reads a `permissions.catalog.json` document (parsed, or the JSON text),
132
+ * validates it against `schemas/catalog-v1.json`, then checks its references:
133
+ * role scopes, the permission keys operations, grants, delegations and OAuth
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`.
137
+ */
138
+ export declare function parseCatalog(json: unknown, options?: ParseCatalogOptions): CatalogDocument;
55
139
  /**
56
- * Reads a `permissions.catalog.json` document (parsed, or the JSON text) and
57
- * validates it against `schemas/catalog-v1.json`. Returns a deep-frozen copy
58
- * built from own keys; throws `PermDockValidationError` with every issue.
140
+ * Keys of the permissions the catalog marks `rowConditions: true`: the SQL
141
+ * helpers alone cannot enforce them.
59
142
  */
60
- export declare function parseCatalog(json: unknown): CatalogDocument;
61
- /** Keys of the permissions the catalog marks `rowConditions: true`: the SQL helpers alone cannot enforce them. */
62
143
  export declare function rowConditionKeys(catalog: CatalogDocument): ReadonlySet<string>;
63
144
  //#endregion
64
145
  //#region src/catalog/policy-from-catalog.d.ts
@@ -70,15 +151,15 @@ type PolicyFromCatalogOptions<TUser = unknown> = {
70
151
  * Rebuilds an evaluable `Policy` from a catalog (`permissions.catalog.json`)
71
152
  * and the policy `permdock cloud push` sent with it, for a service that holds
72
153
  * no application code: the hosted AuthZEN endpoint or a `mergeHostedGrants`
73
- * pre-check. Throws `PermDockValidationError` when either input is malformed
74
- * or the two disagree.
154
+ * pre-check. Throws `PermDockValidationError` when either input is malformed or
155
+ * the two disagree.
75
156
  *
76
- * What only code can answer fails closed: an allow whose condition is a
77
- * closure never grants and such a deny always applies; a resource schema
78
- * keyword outside the supported JSON Schema subset rejects every value; a
79
- * support role has no one who may consent. Grant levels and OAuth scopes
80
- * 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.
81
162
  */
82
163
  export declare function policyFromCatalog<TUser = unknown>(catalogInput: unknown, pushedInput: unknown, options?: PolicyFromCatalogOptions<TUser>): Policy<TUser>;
83
164
  //#endregion
84
- export { type CatalogActivation, type CatalogApproval, type CatalogBreakGlass, type CatalogDelegation, type CatalogDocument, type CatalogDriftInput, type CatalogGrant, type CatalogOAuthScope, type CatalogOperation, type CatalogPermission, type CatalogResource, type CatalogRole, type CatalogScope, type CatalogSupportAccess, type CatalogUsage, type CatalogValidity, PUSHED_POLICY_SCHEMA, type PolicyFromCatalogOptions, type PushedGrant, type PushedPolicy, parsePushedPolicy, pushedPolicy };
165
+ export { type CatalogActivation, type CatalogApproval, type CatalogBreakGlass, type CatalogDelegation, type CatalogDocument, type CatalogDriftInput, type CatalogGrant, type CatalogMetaField, type CatalogOAuthScope, type CatalogOperation, type CatalogPermission, type CatalogResource, type CatalogRole, type CatalogScope, type CatalogSupportAccess, type CatalogUsage, type CatalogValidity, type HostedGrantCheck, type HostedGrantOption, type HostedGrantRelationOption, type HostedGrantRoleOption, PUSHED_POLICY_SCHEMA, type ParseCatalogOptions, type PolicyFromCatalogOptions, type PushedGrant, type PushedPolicy, checkHostedGrant, parsePushedPolicy, pushedPolicy };
@@ -1,11 +1,19 @@
1
- import { n as freezeDeep } from "../freeze-CrU8nQeX.js";
2
- import { t as hostedGrantDrops } from "../hosted-B46-5LYE.js";
3
- import { n as rowConditionKeys, t as parseCatalog } from "../parse-Cxq0WxrA.js";
4
- import { t as operationFindings } from "../operation-findings-DgATDpvh.js";
5
- import { n as resourceSchemaFromJson, t as policyFromCatalog } from "../policy-from-catalog-C2gMa2Dj.js";
6
- import { n as parsePushedPolicy, r as pushedPolicy, t as PUSHED_POLICY_SCHEMA } from "../pushed-policy-CqtxkV4G.js";
1
+ import { r as isRecord } from "../compact-CAf557ZB.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";
7
12
  //#region src/catalog/drift.ts
8
- /** 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
+ */
9
17
  function findingCode(reason) {
10
18
  switch (reason) {
11
19
  case "unknown-permission": return "permission-removed";
@@ -48,4 +56,105 @@ function catalogDrift(input) {
48
56
  });
49
57
  }
50
58
  //#endregion
51
- export { PUSHED_POLICY_SCHEMA, catalogDrift, hostedGrantFindings, operationFindings, parseCatalog, parsePushedPolicy, policyFromCatalog, pushedPolicy, resourceSchemaFromJson, rowConditionKeys };
59
+ //#region src/catalog/hosted-options.ts
60
+ function roleScope(policy, name) {
61
+ const on = policy.rolesByName.get(name)?.on ?? findRole(policy.vocabulary.roles, name)?.on;
62
+ if (on === void 0) return "global";
63
+ return typeof on === "string" ? on : "resource";
64
+ }
65
+ function schemaFields(node) {
66
+ const output = (node?.schema)?.["~standard"]?.jsonSchema?.output;
67
+ if (typeof output !== "function") return null;
68
+ try {
69
+ const json = output({ target: "draft-2020-12" });
70
+ const properties = isRecord(json) ? json["properties"] : void 0;
71
+ return isRecord(properties) ? Object.keys(properties).toSorted() : null;
72
+ } catch {
73
+ return null;
74
+ }
75
+ }
76
+ function optionFor(policy, key) {
77
+ const leaf = findPermission(policy.permissions, key);
78
+ if (leaf === void 0) return null;
79
+ const accepts = (grantee) => declaredGrantee(policy, grantee, leaf.resource);
80
+ const byScope = /* @__PURE__ */ new Map();
81
+ for (const role of declaredRoleNames(policy)) {
82
+ const scope = roleScope(policy, role);
83
+ if (accepts({
84
+ kind: "role",
85
+ role,
86
+ scope
87
+ })) byScope.set(scope, [...byScope.get(scope) ?? [], role]);
88
+ }
89
+ const plans = listPlans(policy.vocabulary.plans).map((plan) => plan.key).filter((plan) => accepts({
90
+ kind: "plan",
91
+ plan
92
+ }));
93
+ const node = getResource(policy.permissions, leaf.resource);
94
+ const relations = Object.keys(node?.relations ?? {}).toSorted().flatMap((relation) => {
95
+ const direct = {
96
+ kind: "relation",
97
+ resource: leaf.resource,
98
+ relation
99
+ };
100
+ if (!accepts(direct)) return [];
101
+ return isSelfParented(node) && accepts({
102
+ ...direct,
103
+ through: "parent"
104
+ }) ? [{
105
+ relation,
106
+ through: "parent"
107
+ }] : [{ relation }];
108
+ });
109
+ const meets = codeApprovals(policy, key).filter((approval) => approval !== void 0);
110
+ return {
111
+ permission: key,
112
+ resource: leaf.resource,
113
+ scope: leaf.scope,
114
+ effects: ["allow", "deny"],
115
+ grantees: {
116
+ roles: [...byScope].map(([scope, roles]) => ({
117
+ scope,
118
+ roles
119
+ })),
120
+ plans,
121
+ relations
122
+ },
123
+ approval: {
124
+ required: meets.length > 0,
125
+ meets,
126
+ modes: ["human", "any"],
127
+ fields: [
128
+ "by",
129
+ "distinct",
130
+ "escalation",
131
+ "quorum",
132
+ ...node?.version === void 0 ? [] : ["staleOn"],
133
+ "ttl"
134
+ ],
135
+ approvers: [
136
+ ...byScope.size > 0 ? ["role"] : [],
137
+ ...plans.length > 0 ? ["plan"] : [],
138
+ "authenticated"
139
+ ]
140
+ },
141
+ conditions: {
142
+ portable: true,
143
+ fields: schemaFields(node)
144
+ }
145
+ };
146
+ }
147
+ /**
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`.
152
+ */
153
+ function hostedGrantOptions(policy) {
154
+ return freezeDeep(policy.hostable.flatMap((key) => {
155
+ const option = optionFor(policy, key);
156
+ return option === null ? [] : [option];
157
+ }));
158
+ }
159
+ //#endregion
160
+ export { PUSHED_POLICY_SCHEMA, catalogDrift, checkHostedGrant, hostedGrantFindings, hostedGrantOptions, operationFindings, parseCatalog, parsePushedPolicy, policyFromCatalog, pushedPolicy, resourceSchemaFromJson, rowConditionKeys };
@@ -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 formatCatalogJson, i as catalogSchemaDocument, o as formatCatalogMarkdown, t as buildCatalog } from "./catalog-doc-Cdn7-0pQ.js";
4
- import { a as loadModule, i as loadConfiguredPolicy, r as leavesOf, s as pickNamed, t as asPermissionTree } from "./load-DFS_ry0W.js";
5
- import { a as loadConfiguredOperations, i as scanSources, r as runCollect } from "./collect-mLTY4nwb.js";
6
- import { n as fileSummary, t as applyFiles } from "./files-C5ZI27eV.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,
@@ -53,18 +54,30 @@ async function runCatalog(input) {
53
54
  output: formatCatalogJson(filtered)
54
55
  };
55
56
  }
56
- /** The comparable form of a catalog file: without the fields every run changes. */
57
+ /**
58
+ * The comparable forms of a catalog file: without the fields every run changes,
59
+ * then also without `usages[].line`.
60
+ */
57
61
  function comparable(text) {
58
62
  try {
59
63
  const parsed = JSON.parse(text);
60
64
  if (isRecord(parsed)) {
61
- const { generatedAt: _generatedAt, generator: _generator, ...rest } = parsed;
62
- return JSON.stringify(rest);
65
+ const doc = parsed;
66
+ return {
67
+ full: catalogForCompare(doc),
68
+ drift: catalogForDrift(doc)
69
+ };
63
70
  }
64
71
  } catch {}
65
- return text;
72
+ return {
73
+ full: text,
74
+ drift: text
75
+ };
66
76
  }
67
- /** `catalog --out`: writes the export, or with `--check` exits 1 when the file differs. */
77
+ /**
78
+ * `catalog --out`: writes the export, or with `--check` exits 1 when the file
79
+ * differs by more than usage line numbers.
80
+ */
68
81
  function catalogFile(cwd, out, text, check) {
69
82
  if (check) {
70
83
  const path = resolve(cwd, out);
@@ -76,13 +89,31 @@ function catalogFile(cwd, out, text, check) {
76
89
  stale: true
77
90
  }
78
91
  };
79
- const stale = comparable(readFileSync(path, "utf8")) !== comparable(text);
92
+ const onDisk = comparable(readFileSync(path, "utf8"));
93
+ const generated = comparable(text);
94
+ if (onDisk.full === generated.full) return {
95
+ code: 0,
96
+ output: `${out} is up to date`,
97
+ data: {
98
+ out,
99
+ stale: false
100
+ }
101
+ };
102
+ if (onDisk.drift === generated.drift) return {
103
+ code: 0,
104
+ output: `catalog usages moved (lines only): ${out}; run permdock collect to refresh`,
105
+ data: {
106
+ out,
107
+ stale: false,
108
+ positionsMoved: true
109
+ }
110
+ };
80
111
  return {
81
- code: stale ? 1 : 0,
82
- output: stale ? `catalog stale: ${out}` : `${out} is up to date`,
112
+ code: 1,
113
+ output: `catalog stale: ${out}`,
83
114
  data: {
84
115
  out,
85
- stale
116
+ stale: true
86
117
  }
87
118
  };
88
119
  }
@@ -1,6 +1,6 @@
1
- import { c as missingInput } from "./errors-CWTY6uih.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-C3DktBDY.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-BoWglDPI.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,19 +1,24 @@
1
- import { a as getResource, c as listPermissions, h as formerKeys } from "./permission-registry-Br4jSNVi.js";
2
- import { t as canonicalJson } from "./canonical-json-BC8_nMTw.js";
3
- import { m as findRole, v as listRoles } from "./grantee-hxrUsbpM.js";
4
- import { i as wireValidity } from "./validity-CZ7-y0Cj.js";
5
- import { t as byCodePoint } from "./compare-pfyVnBjE.js";
6
- import { t as catalogFingerprint } from "./catalog-fingerprint-CCP0-yQS.js";
7
- import { t as catalogSchema } from "./schema-B4v0Qrac.js";
8
- import { t as policyRowConditionKeys } from "./row-conditions-h2HythXQ.js";
9
- import { c as generatorBanner, n as CATALOG_SCHEMA } from "./version-CEbQ5UeM.js";
1
+ import { r as isRecord } from "./compact-CAf557ZB.js";
2
+ import { a as getResource, c as listPermissions, h as formerKeys } from "./permission-registry-B8tYxPIt.js";
3
+ import { t as canonicalJson } from "./canonical-json-DwilZ1iB.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";
10
11
  //#region src/cli/catalog-doc.ts
11
12
  function leafLevels(tree, leaf) {
12
13
  if (leaf.kind !== "instance") return;
13
14
  const names = Object.keys({ ...getResource(tree, leaf.resource)?.levels });
14
15
  return names.length === 0 ? void 0 : names;
15
16
  }
16
- /** 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
+ */
17
22
  function buildCatalog(tree, scan, generatedAt, policy, operations) {
18
23
  const hostable = new Set(policy?.hostable ?? []);
19
24
  const rowConditions = policy === void 0 ? void 0 : policyRowConditionKeys(policy);
@@ -50,6 +55,7 @@ function buildCatalog(tree, scan, generatedAt, policy, operations) {
50
55
  usages: scan.usages[leaf.key] ?? [],
51
56
  renamedFrom: formerKeys(leaf).length === 0 ? void 0 : formerKeys(leaf),
52
57
  levels: leafLevels(tree, leaf),
58
+ orderedLevels: leaf.kind === "instance" && getResource(tree, leaf.resource)?.orderedLevels === true ? true : void 0,
53
59
  hostable: hostable.has(leaf.key) ? true : void 0,
54
60
  rowConditions: rowConditions?.has(leaf.key) ?? true,
55
61
  approvals: approvals.get(leaf.key),
@@ -94,8 +100,8 @@ function catalogApproval(approval) {
94
100
  /**
95
101
  * Every code grant in canonical order: by permission, allows before denies,
96
102
  * then by role (top-level grants last) and finally by canonical JSON, so two
97
- * catalogs of the same policy list the same grants in the same order
98
- * 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.
99
105
  */
100
106
  function catalogGrant(grant) {
101
107
  const limit = grant.limit === void 0 ? void 0 : withDefined({
@@ -124,7 +130,10 @@ function catalogGrant(grant) {
124
130
  })
125
131
  };
126
132
  }
127
- /** 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
+ */
128
137
  function catalogGrantKey(grant) {
129
138
  return [
130
139
  grant.permission,
@@ -144,7 +153,10 @@ function catalogGrants(policy) {
144
153
  return left < right ? -1 : left > right ? 1 : 0;
145
154
  });
146
155
  }
147
- /** 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
+ */
148
160
  function catalogDelegations(policy) {
149
161
  return (policy.delegations ?? []).map((delegation) => withDefined({
150
162
  from: delegation.from,
@@ -163,7 +175,10 @@ function catalogOAuthScopes(declared) {
163
175
  permissions: [...new Set(entry.permissions)].toSorted(byCodePoint)
164
176
  })).toSorted((a, b) => byCodePoint(a.scope, b.scope));
165
177
  }
166
- /** 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
+ */
167
182
  function codeApprovals(policy) {
168
183
  const out = /* @__PURE__ */ new Map();
169
184
  const seen = /* @__PURE__ */ new Set();
@@ -292,6 +307,28 @@ function catalogForCompare(doc) {
292
307
  const { generatedAt: _generatedAt, generator: _generator, ...rest } = doc;
293
308
  return `${JSON.stringify(rest, null, 2)}\n`;
294
309
  }
310
+ /**
311
+ * `catalogForCompare` without `usages[].line`: an edit above a call site moves
312
+ * its line without changing the contract, so `--check` does not fail on it.
313
+ */
314
+ function catalogForDrift(doc) {
315
+ const permissions = doc.permissions;
316
+ if (!Array.isArray(permissions)) return catalogForCompare(doc);
317
+ const { generatedAt: _generatedAt, generator: _generator, ...rest } = doc;
318
+ const stripped = {
319
+ ...rest,
320
+ permissions: permissions.map((permission) => {
321
+ if (!isRecord(permission) || !Array.isArray(permission["usages"])) return permission;
322
+ const usages = permission["usages"].map((usage) => {
323
+ if (!isRecord(usage)) return usage;
324
+ const { line: _line, ...position } = usage;
325
+ return position;
326
+ });
327
+ return Object.assign({}, permission, { usages });
328
+ })
329
+ };
330
+ return `${JSON.stringify(stripped, null, 2)}\n`;
331
+ }
295
332
  function formatCatalogMarkdown(doc) {
296
333
  const lines = ["# Permissions", ""];
297
334
  const byResource = /* @__PURE__ */ new Map();
@@ -312,4 +349,4 @@ function catalogSchemaDocument() {
312
349
  return catalogSchema;
313
350
  }
314
351
  //#endregion
315
- export { formatCatalogJson as a, catalogSchemaDocument as i, catalogForCompare as n, formatCatalogMarkdown as o, catalogOAuthScopes as r, jsonSchemaOf as s, buildCatalog as t };
352
+ export { catalogSchemaDocument as a, jsonSchemaOf as c, catalogOAuthScopes as i, catalogForCompare as n, formatCatalogJson as o, catalogForDrift as r, formatCatalogMarkdown as s, buildCatalog as t };