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,33 +1,36 @@
1
1
  import { n as isReadonlyArray, r as isRecord, t as compact } from "./compact-CAf557ZB.js";
2
- import { n as freezeDeep, t as freezeCopy } from "./freeze-CrU8nQeX.js";
3
- import { n as PermDockValidationError } from "./validation-error-ZfUHbKvf.js";
4
- import { a as deniedMessage, i as approvalMessage, n as PermDockDeniedError, t as PermDockApprovalRequiredError } from "./errors-BKy0EfhN.js";
5
- import { t as attachInternals } from "./internals-Dk8A8fX3.js";
6
- import { _ as keyToScope, a as getResource, c as listPermissions, g as formerScopes } from "./permission-registry-DpPtSKNZ.js";
7
- import { n as isThenable } from "./thenable-yD7SabqG.js";
8
- import { i as readAppData } from "./app-data-MuyzVqX8.js";
9
- import { f as scopeList, h as tenantOf, o as normalizeMemberships } from "./scopes-BHsc-wp-.js";
10
- import { o as pickVisible, s as sanitizeContext } from "./validity-CZ7-y0Cj.js";
11
- import { c as nowSeconds, d as resolveActiveTenant, m as tenantsOf, p as scopeField, t as heldRoleNamesIn, u as relatesTo } from "./tenancy-CmeBQ6Nv.js";
12
- import { u as policyX } from "./policy-DaJy4nK4.js";
13
- import { t as byCodePoint } from "./compare-pfyVnBjE.js";
14
- import { D as emptyListeners, E as emitSafe, N as contactMemberships, O as finish, P as isContact, i as customRolesFor, o as roleSourceFor, r as assignableNamesFor, s as sourceName, t as evaluate, u as customGrantsFor, w as unknownLevelsFor } from "./evaluate-B_oqFbWC.js";
15
- import { a as whereGrant, c as applyRoleKinds, i as collectSnapshotGrants, l as audiencesOf, o as heldRoleNames, p as asMembershipSource, r as assignableIn, s as roleLeaf, t as snapshotOf } from "./instance-snapshot-CjcwnEiV.js";
16
- import { r as relationReader, t as pendingRelations } from "./relations-BnCWnJGI.js";
17
- import { r as snapshotGrant } from "./snapshot-CbGmYiJx.js";
18
- import { a as decideForTarget, i as permittedIds, o as deniedFor, r as mayUse, s as signSnapshot, t as whereFromGrants } from "./where-scope-wq2coopv.js";
19
- import { i as decideAllWith, n as canAllWith } from "./checks-BC_0mPIq.js";
2
+ import { n as freezeDeep, t as freezeCopy } from "./freeze-jjan0lCv.js";
3
+ import { n as PermDockValidationError } from "./validation-error-CYg2kJEw.js";
4
+ import { a as deniedMessage, i as approvalMessage, n as PermDockDeniedError, t as PermDockApprovalRequiredError } from "./errors-B6R_lg2a.js";
5
+ import { t as attachInternals } from "./internals-B3IgHrvo.js";
6
+ import { _ as keyToScope, a as getResource, c as listPermissions, g as formerScopes } from "./permission-registry-B8tYxPIt.js";
7
+ import { n as isThenable } from "./thenable-BNSM1U2R.js";
8
+ import { i as readAppData } from "./app-data-UNNm07jV.js";
9
+ import { f as scopeList, h as tenantOf, o as normalizeMemberships } from "./scopes-0Up_UA2t.js";
10
+ import { o as pickVisible, s as sanitizeContext } from "./validity-Buc7w8E9.js";
11
+ import { t as byCodePoint } from "./compare-DTfyUunF.js";
12
+ import { c as nowSeconds, d as resolveActiveTenant, m as tenantsOf, p as scopeField, t as heldRoleNamesIn, u as relatesTo } from "./tenancy-5d1zVBvK.js";
13
+ import { d as policyX } from "./policy-CLQ8__GF.js";
14
+ import { D as emptyListeners, E as emitSafe, N as contactMemberships, O as finish, P as isContact, i as customRolesFor, o as roleSourceFor, r as assignableNamesFor, s as sourceName, t as evaluate, u as customGrantsFor, w as unknownLevelsFor } from "./evaluate-Dd8Ta0Ie.js";
15
+ import { c as heldRoleNames, d as audiencesOf, g as asMembershipSource, i as assignableIn, l as roleLeaf, o as collectSnapshotGrants, s as whereGrant, t as snapshotOf, u as applyRoleKinds } from "./instance-snapshot--JWiTrvO.js";
16
+ import { r as relationReader, t as pendingRelations } from "./relations-BxvRvDHK.js";
17
+ import { i as snapshotGrant } from "./snapshot-CXlzi69u.js";
18
+ import { a as decideForTarget, i as permittedIds, o as deniedFor, r as mayUse, s as signSnapshot, t as whereFromGrants } from "./where-scope-DlCdCM_8.js";
19
+ import { i as decideAllWith, n as canAllWith } from "./checks-CGkP3Z7A.js";
20
20
  import { r as isSubject, t as anonymousSubject } from "./subject-BGoM5o8B.js";
21
21
  //#region src/core/app.ts
22
22
  const APP = Symbol.for("permdock.app");
23
- /** The app definition bound to `policy` by `defineApp`, or `undefined` for a plain policy. */
23
+ /**
24
+ * The app definition bound to `policy` by `defineApp`, or `undefined` for a
25
+ * plain policy.
26
+ */
24
27
  function appOf(policy) {
25
28
  const value = Reflect.get(policy, APP);
26
29
  return value === void 0 ? void 0 : value;
27
30
  }
28
31
  /**
29
- * `options` with the app's values under it, key by key, for an adapter
30
- * factory to call first: `options = withApp(policy, options)`.
32
+ * `options` with the app's values under it, key by key, for an adapter factory
33
+ * to call first: `options = withApp(policy, options)`.
31
34
  */
32
35
  function withApp(policy, options) {
33
36
  const app = appOf(policy);
@@ -39,7 +42,10 @@ function withApp(policy, options) {
39
42
  }
40
43
  //#endregion
41
44
  //#region src/core/assert-decision.ts
42
- /** `assert`'s outcome: the granted decision, or the error a refusal throws after `onDenied` runs. */
45
+ /**
46
+ * `assert`'s outcome: the granted decision, or the error a refusal throws after
47
+ * `onDenied` runs.
48
+ */
43
49
  function assertDecision(policy, subject, permission, data, decision, onDenied) {
44
50
  if (decision.outcome === "granted") return decision;
45
51
  if (onDenied !== void 0) onDenied(decision);
@@ -72,7 +78,10 @@ function assertDecision(policy, subject, permission, data, decision, onDenied) {
72
78
  }
73
79
  //#endregion
74
80
  //#region src/core/instance-env.ts
75
- /** The environment `derive(options)` builds on: `base` with the sources `options` replaces loaded again. */
81
+ /**
82
+ * The environment `derive(options)` builds on: `base` with the sources
83
+ * `options` replaces loaded again.
84
+ */
76
85
  function deriveEnv(policy, subject, base, relationCache, options) {
77
86
  const scopes = scopeList(policy.scopes);
78
87
  const tenants = tenantsOf(subject.principal, scopes);
@@ -140,7 +149,10 @@ function simulateEvent(policy, subject, env, evaluated) {
140
149
  }
141
150
  //#endregion
142
151
  //#region src/core/instance.ts
143
- /** Each round reads one more layer: link hops, then the chain, then nested groups. */
152
+ /**
153
+ * Each round reads one more layer: link hops, then the chain, then nested
154
+ * groups.
155
+ */
144
156
  const LOAD_ROUNDS = 48;
145
157
  function buildInstance(policy, subject, envBase, team) {
146
158
  const listeners = emptyListeners();
@@ -542,11 +554,17 @@ function expandOAuthScopes(policy, delegation) {
542
554
  scopes: [...out]
543
555
  };
544
556
  }
545
- /** The coarse scopes the policy declares that cover `permission`, in declaration order. */
557
+ /**
558
+ * The coarse scopes the policy declares that cover `permission`, in declaration
559
+ * order.
560
+ */
546
561
  function coarseScopesFor(policy, permission) {
547
562
  return (policy.oauthScopes ?? []).filter((entry) => entry.permissions.includes(permission.key)).map((entry) => entry.scope);
548
563
  }
549
- /** Every token scope that reaches `permission`: its own, any it was renamed from, and the coarse scopes covering it. */
564
+ /**
565
+ * Every token scope that reaches `permission`: its own, any it was renamed
566
+ * from, and the coarse scopes covering it.
567
+ */
550
568
  function scopesReaching(policy, permission) {
551
569
  return [
552
570
  permission.scope,
@@ -555,9 +573,9 @@ function scopesReaching(policy, permission) {
555
573
  ];
556
574
  }
557
575
  /**
558
- * The scope an `insufficient_scope` challenge names for `permission`: the
559
- * first coarse scope that covers it, which the authorization server issues,
560
- * else the permission's own scope.
576
+ * The scope an `insufficient_scope` challenge names for `permission`: the first
577
+ * coarse scope that covers it, which the authorization server issues, else the
578
+ * permission's own scope.
561
579
  */
562
580
  function challengeScope(policy, permission) {
563
581
  return coarseScopesFor(policy, permission)[0] ?? permission.scope;
@@ -569,8 +587,8 @@ function hasScope(granted, scopes) {
569
587
  //#endregion
570
588
  //#region src/core/resolve-subject.ts
571
589
  /**
572
- * The tenant a user API key holds its owner to (`Credential.tenant`): only
573
- * the memberships inside it count, and no global role.
590
+ * The tenant a user API key holds its owner to (`Credential.tenant`): only the
591
+ * memberships inside it count, and no global role.
574
592
  */
575
593
  function heldTenantOf(principal) {
576
594
  const credential = principal["credential"];
@@ -746,7 +764,10 @@ function finishSubject(policy, assembled, context, input, options, extra) {
746
764
  liveSession: assembled.liveSession
747
765
  }));
748
766
  }
749
- /** Runs the policy's membership schema over each `x`; an invalid one is dropped and reported, never the membership. */
767
+ /**
768
+ * Runs the policy's membership schema over each `x`; an invalid one is dropped
769
+ * and reported, never the membership.
770
+ */
750
771
  function checkMembershipX(memberships, schema, auth) {
751
772
  if (schema === void 0) return memberships;
752
773
  let dropped = false;
@@ -977,8 +998,8 @@ function create(policy, user, given) {
977
998
  /**
978
999
  * The instance for `user`, built synchronously. Every input must answer
979
1000
  * synchronously: the subject mapper, `memberships`, `customRoles`,
980
- * `entitlements`, `approvalPolicies` and the freshness check. One that
981
- * answers with a Promise throws here; use `getPermDock` for those.
1001
+ * `entitlements`, `approvalPolicies` and the freshness check. One that answers
1002
+ * with a Promise throws here; use `getPermDock` for those.
982
1003
  */
983
1004
  function getPermDockSync(policy, user, options = {}) {
984
1005
  const created = create(policy, user, options);
@@ -988,7 +1009,10 @@ function getPermDockSync(policy, user, options = {}) {
988
1009
  }
989
1010
  return created;
990
1011
  }
991
- /** The instance for `user`: waits for every source, then builds it. `getPermDockSync` is the synchronous twin. */
1012
+ /**
1013
+ * The instance for `user`: waits for every source, then builds it.
1014
+ * `getPermDockSync` is the synchronous twin.
1015
+ */
992
1016
  function getPermDock(policy, user, options = {}) {
993
1017
  return Promise.resolve().then(() => create(policy, user, options));
994
1018
  }
@@ -1,8 +1,8 @@
1
1
  import { n as isReadonlyArray, t as compact } from "./compact-CAf557ZB.js";
2
- import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
- import { i as ownKeys, n as isForbiddenKey, t as assertSafeKey } from "./paths-DXSHAMIa.js";
4
- import { r as parseAppData, t as assertAppData } from "./app-data-MuyzVqX8.js";
5
- import { f as normaliseRelation, h as restrictedStopsOf, i as assertIncludes, n as RESOURCE_NAME, r as assertGraphTargets, t as LEVEL_NAME } from "./resource-relations-D_jw0BFx.js";
2
+ import { n as freezeDeep } from "./freeze-jjan0lCv.js";
3
+ import { i as ownKeys, n as isForbiddenKey, t as assertSafeKey } from "./paths-CUvURzHp.js";
4
+ import { r as parseAppData, t as assertAppData } from "./app-data-UNNm07jV.js";
5
+ import { f as normaliseRelation, h as restrictedStopsOf, i as assertIncludes, n as RESOURCE_NAME, r as assertGraphTargets, t as LEVEL_NAME } from "./resource-relations-8-pCScBO.js";
6
6
  //#region src/core/brands.ts
7
7
  const RESOURCE_BRAND = Symbol.for("permdock.resource");
8
8
  const TREE_REGISTRY = Symbol.for("permdock.registry");
@@ -91,7 +91,10 @@ function formerKeys(permission) {
91
91
  const value = Reflect.get(permission, LEAF_FORMER);
92
92
  return isReadonlyArray(value) ? value.filter((item) => typeof item === "string") : [];
93
93
  }
94
- /** The OAuth scope strings `permission` used to have: each former key with `.` as `:`. */
94
+ /**
95
+ * The OAuth scope strings `permission` used to have: each former key with `.`
96
+ * as `:`.
97
+ */
95
98
  function formerScopes(permission) {
96
99
  return formerKeys(permission).map(keyToScope);
97
100
  }
@@ -183,6 +186,9 @@ function materialiseResource(init, path, registry, leaves, build) {
183
186
  levels[levelName] = freezeDeep({ ...condition });
184
187
  }
185
188
  if (Object.keys(levels).length > 0 && instanceSet.size === 0) throw new Error(`PermDock: resource '${name}' declares levels but no instance actions`);
189
+ const ordered = init.options.orderedLevels;
190
+ if (ordered !== void 0 && ordered !== true) throw new Error(`PermDock: orderedLevels on '${name}' must be true when set`);
191
+ if (ordered === true && Object.keys(levels).length < 2) throw new Error(`PermDock: resource '${name}' sets orderedLevels with fewer than two levels`);
186
192
  const meta = resourceMetaFor(name, init.options.meta, build.x?.resource);
187
193
  const resourceNode = Object.freeze({
188
194
  ...meta === void 0 ? {} : { meta },
@@ -199,7 +205,8 @@ function materialiseResource(init, path, registry, leaves, build) {
199
205
  disclosure,
200
206
  instanceActions: instanceSet,
201
207
  collectionActions: collectionSet,
202
- levels: Object.freeze(levels)
208
+ levels: Object.freeze(levels),
209
+ ...ordered === true ? { orderedLevels: true } : {}
203
210
  });
204
211
  assertIncludes(resourceNode);
205
212
  registry.set(name, resourceNode);
@@ -211,7 +218,10 @@ function materialiseResource(init, path, registry, leaves, build) {
211
218
  });
212
219
  return freezeDeep(node);
213
220
  }
214
- /** The resource a `definePermissions` resource node was built from, read from the node itself. */
221
+ /**
222
+ * The resource a `definePermissions` resource node was built from, read from
223
+ * the node itself.
224
+ */
215
225
  function resourceOfNode(node) {
216
226
  if (!Object.hasOwn(node, NODE_RESOURCE)) return;
217
227
  const value = Reflect.get(node, NODE_RESOURCE);
@@ -261,7 +271,10 @@ function getResource(tree, name) {
261
271
  return getRegistry(tree).get(name);
262
272
  }
263
273
  const RENAMED_KEY = /^\S+$/u;
264
- /** Current key to its former keys, from the `renamed` option; targets are checked once leaves exist. */
274
+ /**
275
+ * Current key to its former keys, from the `renamed` option; targets are
276
+ * checked once leaves exist.
277
+ */
265
278
  function formerByKey(renamed) {
266
279
  const former = /* @__PURE__ */ new Map();
267
280
  if (renamed === void 0) return former;
@@ -274,8 +287,8 @@ function formerByKey(renamed) {
274
287
  return former;
275
288
  }
276
289
  /**
277
- * Every current key is unique, every former key names exactly one leaf, and
278
- * no former key is also a current key, so a string resolves to one leaf.
290
+ * Every current key is unique, every former key names exactly one leaf, and no
291
+ * former key is also a current key, so a string resolves to one leaf.
279
292
  */
280
293
  function assertKeys(leaves, former) {
281
294
  const current = /* @__PURE__ */ new Set();
@@ -11,7 +11,10 @@ type AppData = Readonly<Record<string, MetaValue>>;
11
11
  * its output is the type PermDock gives the `x` field it checks.
12
12
  */
13
13
  type AppDataSchema<X = AppData> = StandardSchemaV1<unknown, X>;
14
- /** A leaf whose `meta.x` is typed by a schema; intersected so it stays assignable to the untyped leaf. */
14
+ /**
15
+ * A leaf whose `meta.x` is typed by a schema; intersected so it stays
16
+ * assignable to the untyped leaf.
17
+ */
15
18
  type WithX<L, X> = [X] extends [never] ? L : L & {
16
19
  readonly meta: {
17
20
  readonly x?: Readonly<X>;
@@ -22,9 +25,26 @@ type WithX<L, X> = [X] extends [never] ? L : L & {
22
25
  declare const RESOURCE_BRAND: unique symbol;
23
26
  /**
24
27
  * Phantom key carrying a tree's resource `x` type for `getResource`. Exported
25
- * as a type only, so a consumer's declaration emit can name it; it has no value.
28
+ * as a type only, so a consumer's declaration emit can name it; it has no
29
+ * value.
26
30
  */
27
31
  declare const RESOURCE_X: unique symbol;
32
+ /**
33
+ * Phantom key carrying the literal `name` a `resource(…, { name })` was given,
34
+ * so its leaves type `resource` by that name rather than the path segment. Type
35
+ * only; it has no value.
36
+ */
37
+ declare const RESOURCE_NAME: unique symbol;
38
+ /**
39
+ * Phantom key carrying a policy's `scopes` input type for `ScopeNameOf`. Type
40
+ * only; it has no value.
41
+ */
42
+ declare const POLICY_SCOPES: unique symbol;
43
+ /**
44
+ * Phantom key carrying a permission's row type for `RowOf`. Type only; a leaf
45
+ * never has it at run time, so leaves stay plain JSON.
46
+ */
47
+ declare const PERMISSION_ROW: unique symbol;
28
48
  //#endregion
29
49
  //#region src/core/permission-types.d.ts
30
50
  /** `definePermissions` options. */
@@ -37,24 +57,33 @@ type PermissionsOptions<PX = never, RX = never> = {
37
57
  */
38
58
  readonly renamed?: Readonly<Record<string, string>>;
39
59
  /**
40
- * Standard Schemas for app data. `permission` checks every action's
41
- * `meta.x` and types it on the leaves; `resource` checks every resource's
42
- * `meta.x` and types it on `getResource`. Both validate synchronously at
43
- * definition time and throw on invalid data.
60
+ * Standard Schemas for app data. `permission` checks every action's `meta.x`
61
+ * and types it on the leaves; `resource` checks every resource's `meta.x` and
62
+ * types it on `getResource`. Both validate synchronously at definition time
63
+ * and throw on invalid data.
44
64
  */
45
65
  readonly x?: {
46
66
  readonly permission?: AppDataSchema<PX>;
47
67
  readonly resource?: AppDataSchema<RX>;
48
68
  };
49
69
  };
50
- /** A resource's metadata. PermDock carries it to the catalog and never reads `x`. */
70
+ /**
71
+ * A resource's metadata. PermDock carries it to the catalog and never reads
72
+ * `x`.
73
+ */
51
74
  type ResourceMeta<X = AppData> = {
52
75
  readonly title?: string;
53
76
  readonly description?: string;
54
- /** Data the application owns. Plain JSON, typed by `definePermissions(…, { x: { resource } })`. */
77
+ /**
78
+ * Data the application owns. Plain JSON, typed by `definePermissions(…, { x:
79
+ * { resource } })`.
80
+ */
55
81
  readonly x?: X;
56
82
  };
57
- /** A tree whose resources carry `meta.x` of type `X`, read through `getResource`. */
83
+ /**
84
+ * A tree whose resources carry `meta.x` of type `X`, read through
85
+ * `getResource`.
86
+ */
58
87
  type ResourceXTree<X> = {
59
88
  readonly [RESOURCE_X]?: X;
60
89
  };
@@ -63,7 +92,10 @@ type ActionMeta = {
63
92
  readonly description?: string;
64
93
  readonly tags?: readonly string[];
65
94
  readonly readOnly?: boolean;
66
- /** The action may destroy or overwrite data; only meaningful when not `readOnly`. */
95
+ /**
96
+ * The action may destroy or overwrite data; only meaningful when not
97
+ * `readOnly`.
98
+ */
67
99
  readonly destructive?: boolean;
68
100
  /** Repeating the action with the same input has no further effect. */
69
101
  readonly idempotent?: boolean;
@@ -72,12 +104,15 @@ type ActionMeta = {
72
104
  * assign the whole custom-role ceiling, not only what they hold themselves.
73
105
  */
74
106
  readonly manageRoles?: boolean;
75
- /** Set by a generator (`permdock openapi import`) to the operation an action was inferred from. */
107
+ /**
108
+ * Set by a generator (`permdock openapi import`) to the operation an action
109
+ * was inferred from.
110
+ */
76
111
  readonly inferredFrom?: string;
77
112
  /**
78
113
  * Data the application owns, such as a risk level or an undo window. Plain
79
- * JSON; PermDock carries it on the leaf, the catalog and snapshots and
80
- * never reads it. `definePermissions(…, { x: { permission } })` types it.
114
+ * JSON; PermDock carries it on the leaf, the catalog and snapshots and never
115
+ * reads it. `definePermissions(…, { x: { permission } })` types it.
81
116
  */
82
117
  readonly x?: AppData;
83
118
  };
@@ -89,7 +124,17 @@ type Permission<K extends string = string, T = unknown, Kind extends PermissionK
89
124
  readonly action: string;
90
125
  readonly meta: ActionMeta;
91
126
  readonly kind: Kind;
92
- } & ([T] extends [never] ? unknown : unknown);
127
+ /**
128
+ * The resource row type. Method syntax keeps it bivariant: a typed leaf is
129
+ * still a `Permission`, and an untyped one still takes a typed closure.
130
+ */
131
+ [PERMISSION_ROW]?(row: T): void;
132
+ };
133
+ /**
134
+ * The row type of a permission's resource; `unknown` for an untyped
135
+ * `Permission`.
136
+ */
137
+ type RowOf<P> = P extends Permission<string, infer T> ? T : unknown;
93
138
  type ResourceParent = {
94
139
  readonly field: string;
95
140
  readonly resource: string;
@@ -101,15 +146,21 @@ type RelationIncludes = {
101
146
  /** The row's `field` holds the principal id (or, with `memberOf`, a scope id). */
102
147
  type FieldRelation = RelationIncludes & {
103
148
  readonly field: string;
104
- /** A declared scope name (or the `tenant` / `team` alias): the field holds that scope's id. */
149
+ /**
150
+ * A declared scope name (or the `tenant` / `team` alias): the field holds
151
+ * that scope's id.
152
+ */
105
153
  readonly memberOf?: string;
106
154
  };
107
- /** Literal values an edge row's columns must hold, so one table backs several relations. */
155
+ /**
156
+ * Literal values an edge row's columns must hold, so one table backs several
157
+ * relations.
158
+ */
108
159
  type EdgeMatch = Readonly<Record<string, string | number | boolean>>;
109
160
  /**
110
- * One group resource of an edge: the relation whoever the row names must
111
- * hold on the group, and, when the group's id has its own typed column, that
112
- * column in place of the edge's `subject`.
161
+ * One group resource of an edge: the relation whoever the row names must hold
162
+ * on the group, and, when the group's id has its own typed column, that column
163
+ * in place of the edge's `subject`.
113
164
  */
114
165
  type EdgeGroup = string | {
115
166
  readonly relation: string;
@@ -117,12 +168,12 @@ type EdgeGroup = string | {
117
168
  };
118
169
  /**
119
170
  * Edge rows that name a group instead of a principal: `column` holds the
120
- * resource name, `subject` the group's id, and the row holds for whoever
121
- * holds `resources[<name>]` on that group. A null `column` (or `direct`)
122
- * names a principal; any other value matches nothing. A group with its own
123
- * `subject` column reads the group's id from it; without `column`, a row
124
- * names that group when the column is not null, and a principal when the
125
- * edge's `subject` is not null.
171
+ * resource name, `subject` the group's id, and the row holds for whoever holds
172
+ * `resources[<name>]` on that group. A null `column` (or `direct`) names a
173
+ * principal; any other value matches nothing. A group with its own `subject`
174
+ * column reads the group's id from it; without `column`, a row names that group
175
+ * when the column is not null, and a principal when the edge's `subject` is not
176
+ * null.
126
177
  */
127
178
  type EdgeGroups = {
128
179
  /** Required unless every group names its own `subject` column. */
@@ -131,7 +182,10 @@ type EdgeGroups = {
131
182
  /** The `column` value of a row naming a principal, besides `null`. */
132
183
  readonly direct?: string;
133
184
  };
134
- /** One row per holder in an edge table: `object` holds the resource id, `subject` the principal id. */
185
+ /**
186
+ * One row per holder in an edge table: `object` holds the resource id,
187
+ * `subject` the principal id.
188
+ */
135
189
  type EdgeRelation = RelationIncludes & {
136
190
  readonly edge: string;
137
191
  /** Default `<resource>_id`. */
@@ -143,10 +197,16 @@ type EdgeRelation = RelationIncludes & {
143
197
  readonly match?: EdgeMatch;
144
198
  readonly groups?: EdgeGroups;
145
199
  };
146
- /** On a principal resource: the row's `principal` column holds the principal who holds the relation over it. */
200
+ /**
201
+ * On a principal resource: the row's `principal` column holds the principal who
202
+ * holds the relation over it.
203
+ */
147
204
  type PrincipalRelation = RelationIncludes & {
148
205
  readonly principal: string;
149
- /** Timestamp columns bounding when the relation holds; `null` leaves that side open. */
206
+ /**
207
+ * Timestamp columns bounding when the relation holds; `null` leaves that side
208
+ * open.
209
+ */
150
210
  readonly period?: {
151
211
  readonly startsAt?: string;
152
212
  readonly expiresAt?: string;
@@ -158,7 +218,10 @@ type ComputedRelation = {
158
218
  };
159
219
  type ResourceRelation = FieldRelation | EdgeRelation | PrincipalRelation | ComputedRelation;
160
220
  type ResourceRelationInput = string | ResourceRelation;
161
- /** A to-one link from a row to another resource's instance, walked by `through: [<link>]`. */
221
+ /**
222
+ * A to-one link from a row to another resource's instance, walked by `through:
223
+ * [<link>]`.
224
+ */
162
225
  type ResourceLink = {
163
226
  readonly field: string;
164
227
  readonly resource: string;
@@ -170,8 +233,8 @@ type ResourceRestricted = {
170
233
  type ActionList = readonly string[] | Record<string, ActionMeta>;
171
234
  type ResourceOptions<A extends ActionList | undefined = ActionList | undefined, C extends ActionList | undefined = ActionList | undefined> = {
172
235
  /**
173
- * The resource name leaves, tables, relations and AuthZEN types use; the
174
- * last path segment when absent. Names are unique across a tree.
236
+ * The resource name leaves, tables, relations and AuthZEN types use; the last
237
+ * path segment when absent. Names are unique across a tree.
175
238
  */
176
239
  readonly name?: string;
177
240
  readonly id?: string;
@@ -182,7 +245,8 @@ type ResourceOptions<A extends ActionList | undefined = ActionList | undefined,
182
245
  readonly relations?: Readonly<Record<string, ResourceRelationInput>>;
183
246
  /**
184
247
  * The row field that changes whenever the row does (`updatedAt`, a revision
185
- * counter). An `approval: { staleOn: 'resource-change' }` binds to its value.
248
+ * counter). An `approval: { staleOn: 'resource-change' }` binds to its
249
+ * value.
186
250
  */
187
251
  readonly version?: string;
188
252
  /**
@@ -198,19 +262,32 @@ type ResourceOptions<A extends ActionList | undefined = ActionList | undefined,
198
262
  /**
199
263
  * Named grant levels a custom role may pick per permission, each a row
200
264
  * condition (`where` shorthand or a `Condition`), such as `own`, `team` and
201
- * `all`. A level narrows the ceiling grant it applies to and never widens
202
- * it; it reaches only instance actions. Names match `^[a-z][a-z0-9_]*$`.
265
+ * `all`. A level narrows the ceiling grant it applies to and never widens it;
266
+ * it reaches only instance actions. Names match `^[a-z][a-z0-9_]*$`.
203
267
  */
204
268
  readonly levels?: Readonly<Record<string, ResourceLevel>>;
205
- /** Display text and app data for the resource; carried to the catalog, never read in evaluation. */
269
+ /**
270
+ * `true`: `levels` run from narrowest to widest in declaration order, and a
271
+ * holder of a level may hand out every level declared before it. Evaluation
272
+ * is unchanged: each level still applies only its own condition.
273
+ */
274
+ readonly orderedLevels?: true;
275
+ /**
276
+ * Display text and app data for the resource; carried to the catalog, never
277
+ * read in evaluation.
278
+ */
206
279
  readonly meta?: ResourceMeta;
207
280
  };
208
- /** A level's row condition: `where` shorthand or a normalised `Condition`, checked by `definePolicy`. */
281
+ /**
282
+ * A level's row condition: `where` shorthand or a normalised `Condition`,
283
+ * checked by `definePolicy`.
284
+ */
209
285
  type ResourceLevel = Readonly<Record<string, unknown>>;
210
- type ResourceInit<T = unknown, A extends ActionList | undefined = ActionList | undefined, C extends ActionList | undefined = ActionList | undefined> = {
286
+ type ResourceInit<T = unknown, A extends ActionList | undefined = ActionList | undefined, C extends ActionList | undefined = ActionList | undefined, N extends string = string> = {
211
287
  readonly [RESOURCE_BRAND]: true;
212
288
  readonly schema: StandardSchemaV1<unknown, T> | undefined;
213
289
  readonly options: ResourceOptions<A, C>;
290
+ readonly [RESOURCE_NAME]?: N;
214
291
  };
215
292
  type ResourceNode<T = unknown> = {
216
293
  readonly name: string;
@@ -226,8 +303,13 @@ type ResourceNode<T = unknown> = {
226
303
  readonly disclosure: "hide" | "reveal";
227
304
  readonly instanceActions: ReadonlySet<string>;
228
305
  readonly collectionActions: ReadonlySet<string>;
229
- /** Declared level names to their raw condition; `definePolicy` normalises them. */
306
+ /**
307
+ * Declared level names to their raw condition; `definePolicy` normalises
308
+ * them.
309
+ */
230
310
  readonly levels?: Readonly<Record<string, ResourceLevel>>;
311
+ /** Set when the resource declares `orderedLevels: true`. */
312
+ readonly orderedLevels?: true;
231
313
  /** The resource's `meta`, when it declares one. */
232
314
  readonly meta?: ResourceMeta;
233
315
  };
@@ -235,8 +317,12 @@ type PermissionTree = {
235
317
  readonly [key: string]: PermissionTree | Permission;
236
318
  };
237
319
  type ActionNames<A extends ActionList | undefined> = A extends readonly string[] ? A[number] : A extends Record<string, ActionMeta> ? keyof A & string : never;
238
- type LeavesFrom<Prefix extends string, Names extends string, T, Kind extends PermissionKind, X = never> = [Names] extends [never] ? object : { readonly [K in Names]: WithX<Permission<Prefix extends "" ? K : `${Prefix}.${K}`, T, Kind>, X>; };
239
- type InferResourceLeaves<R extends ResourceInit, Prefix extends string, X = never> = R extends ResourceInit<infer T, infer A, infer C> ? LeavesFrom<Prefix, ActionNames<A>, T, "instance", X> & LeavesFrom<Prefix, ActionNames<C>, T, "collection", X> : object;
320
+ type LastSegment<Path extends string> = Path extends `${string}.${infer Rest}` ? LastSegment<Rest> : Path;
321
+ type LeavesFrom<Prefix extends string, Names extends string, T, Kind extends PermissionKind, X = never, R extends string = string> = [Names] extends [never] ? object : { readonly [K in Names]: WithX<Permission<Prefix extends "" ? K : `${Prefix}.${K}`, T, Kind> & {
322
+ readonly resource: R;
323
+ readonly action: K;
324
+ }, X>; };
325
+ type InferResourceLeaves<R extends ResourceInit, Prefix extends string, X = never> = R extends ResourceInit<infer T, infer A, infer C, infer N> ? LeavesFrom<Prefix, ActionNames<A>, T, "instance", X, [N] extends [never] ? LastSegment<Prefix> : N> & LeavesFrom<Prefix, ActionNames<C>, T, "collection", X, [N] extends [never] ? LastSegment<Prefix> : N> : object;
240
326
  type InferPermissionTree<Input, Prefix extends string = "", X = never> = Input extends ResourceInit ? InferResourceLeaves<Input, Prefix, X> : Input extends Record<string, unknown> ? { readonly [K in keyof Input & string]: InferPermissionTree<Input[K], Prefix extends "" ? K : `${Prefix}.${K}`, X>; } : never;
241
327
  /**
242
328
  * The tree `definePermissions(input, options)` returns, nameable for an
@@ -244,4 +330,4 @@ type InferPermissionTree<Input, Prefix extends string = "", X = never> = Input e
244
330
  */
245
331
  type PermissionsOf<Input, PX = never, RX = never> = InferPermissionTree<Input, "", PX> & ResourceXTree<RX>;
246
332
  //#endregion
247
- export { MetaValue as A, ResourceRelation as C, RESOURCE_X as D, ResourceXTree as E, AppData as O, ResourceParent as S, ResourceRestricted as T, ResourceLevel as _, EdgeGroups as a, ResourceNode as b, FieldRelation as c, PermissionKind as d, PermissionTree as f, ResourceInit as g, PrincipalRelation as h, EdgeGroup as i, WithX as j, AppDataSchema as k, InferPermissionTree as l, PermissionsOptions as m, ActionMeta as n, EdgeMatch as o, PermissionsOf as p, ComputedRelation as r, EdgeRelation as s, ActionList as t, Permission as u, ResourceLink as v, ResourceRelationInput as w, ResourceOptions as x, ResourceMeta as y };
333
+ export { RESOURCE_NAME as A, ResourceRelation as C, RowOf as D, ResourceXTree as E, WithX as F, AppData as M, AppDataSchema as N, PERMISSION_ROW as O, MetaValue as P, ResourceParent as S, ResourceRestricted as T, ResourceLevel as _, EdgeGroups as a, ResourceNode as b, FieldRelation as c, PermissionKind as d, PermissionTree as f, ResourceInit as g, PrincipalRelation as h, EdgeGroup as i, RESOURCE_X as j, POLICY_SCOPES as k, InferPermissionTree as l, PermissionsOptions as m, ActionMeta as n, EdgeMatch as o, PermissionsOf as p, ComputedRelation as r, EdgeRelation as s, ActionList as t, Permission as u, ResourceLink as v, ResourceRelationInput as w, ResourceOptions as x, ResourceMeta as y };
@@ -1,11 +1,14 @@
1
- import { g as ResourceInit, l as InferPermissionTree } from "./permission-types-DhNEmoRG.js";
2
- import { r as Role, t as Plan } from "./vocabulary-Bg3eeT2H.js";
1
+ import { g as ResourceInit, l as InferPermissionTree } from "./permission-types-CAY-GU7e.js";
2
+ import { r as Role, t as Plan } from "./vocabulary-DEJ5j4mR.js";
3
3
  import { StandardSchemaV1 } from "@standard-schema/spec";
4
4
  //#region src/testing/saas/permissions.d.ts
5
5
  declare const SaasProjectSchema: StandardSchemaV1<SaasProject>;
6
6
  declare const SaasDocSchema: StandardSchemaV1<SaasDoc>;
7
7
  declare const SaasFolderSchema: StandardSchemaV1<SaasFolder>;
8
- /** A folder in an org's tree; `restricted` keeps grants held on its ancestors out. */
8
+ /**
9
+ * A folder in an org's tree; `restricted` keeps grants held on its ancestors
10
+ * out.
11
+ */
9
12
  type SaasFolder = {
10
13
  readonly id: string;
11
14
  readonly orgId: string;
@@ -1,6 +1,6 @@
1
- import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
2
- import { d as attachRegistry, p as walk, r as formerByKey, t as assertKeys } from "./permission-registry-DpPtSKNZ.js";
3
- import { r as assertGraphTargets } from "./resource-relations-D_jw0BFx.js";
1
+ import { n as freezeDeep } from "./freeze-jjan0lCv.js";
2
+ import { d as attachRegistry, p as walk, r as formerByKey, t as assertKeys } from "./permission-registry-B8tYxPIt.js";
3
+ import { r as assertGraphTargets } from "./resource-relations-8-pCScBO.js";
4
4
  //#region src/core/operation-risks.ts
5
5
  /** Every `meta.risk` level, lowest first. */
6
6
  const OPERATION_RISKS = Object.freeze([
@@ -1,7 +1,7 @@
1
- import { c as crud } from "./src-DLFrtrrC.js";
2
- import { v as resource } from "./permission-registry-DpPtSKNZ.js";
3
- import { f as definePlans, p as defineRoles } from "./grantee-BrRANrpT.js";
4
- import { t as definePermissions } from "./permissions-CyH2MV_B.js";
1
+ import { c as crud } from "./src-DZ0l9UAg.js";
2
+ import { v as resource } from "./permission-registry-B8tYxPIt.js";
3
+ import { f as definePlans, p as defineRoles } from "./grantee-Dke-9rd1.js";
4
+ import { t as definePermissions } from "./permissions-CVXmRILq.js";
5
5
  //#region src/testing/saas/schema.ts
6
6
  function accepts(kind, value) {
7
7
  switch (kind) {
@@ -126,7 +126,10 @@ const saasRoles = defineRoles({
126
126
  on: "team",
127
127
  assignable: true
128
128
  },
129
- /** Resource-scoped; `role(..., { on: saasPermissions.project })` in the policy. */
129
+ /**
130
+ * Resource-scoped; `role(..., { on: saasPermissions.project })` in the
131
+ * policy.
132
+ */
130
133
  collaborator: { assignable: true }
131
134
  });
132
135
  const saasPlans = definePlans({