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,29 +1,29 @@
1
1
  import { n as isReadonlyArray, r as isRecord, t as compact } from "./compact-CAf557ZB.js";
2
- import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
- import { n as isForbiddenKey, r as ownGet } from "./paths-DXSHAMIa.js";
4
- import { f as normalizeApproval, g as assertSqlFunctionName, h as assertSqlFunctionArg, m as assertPortableTwin, p as normalizeWhere, u as assertApprovalRelations } from "./role-builder-uWQZ4v84.js";
5
- import { n as PermDockDeniedError } from "./errors-BKy0EfhN.js";
6
- import { o as sameId } from "./expiry-D4_YKRKD.js";
7
- import { n as internalsOf } from "./internals-Dk8A8fX3.js";
8
- import { c as listPermissions, i as getRegistry, n as findPermission, o as isPermission } from "./permission-registry-Br4jSNVi.js";
9
- import { n as isThenable$1 } from "./thenable-yD7SabqG.js";
10
- import { c as isEdgeRelation, m as restrictedStops, o as groupEntries, s as isComputedRelation, u as isPrincipalRelation } from "./resource-relations-D_jw0BFx.js";
11
- import { a as durationOf, g as secondsOf, m as rfc3339, p as nowSeconds } from "./time-DkWjdL98.js";
12
- import { d as scopeList, l as scopeChain, m as tenantOf, o as resolveScope, u as scopeIdOf } from "./scopes-CUPSjo9q.js";
13
- import { u as evaluateCondition } from "./delegation-j6-rc37o.js";
14
- import { _ as listPlans, a as authenticated, m as findRole, o as flattenGrantee } from "./grantee-hxrUsbpM.js";
15
- import { m as tenantsOf, r as isMembershipExpired } from "./tenancy-DN2QAx9z.js";
16
- import { o as levelNames, r as grantList, t as declaredRoleNames } from "./policy-DbM5YYtV.js";
17
- import { r as isPortableCondition } from "./hosted-B46-5LYE.js";
18
- import { n as OPERATION_RISKS, r as isOperationRisk } from "./permissions-B-wCP5ZC.js";
19
- import { S as tenantCustomRoles, b as resolveCustomRole, f as customRoleId, l as ceilingGrants, m as customRoleScope, p as customRoleOf } from "./evaluate-CNClBvcj.js";
20
- import { d as rankRoles, f as usesAssigns, i as collectSnapshotGrants, n as snapshotScopes, t as snapshotOf, u as bindingOf } from "./instance-snapshot-BOEhcqIF.js";
21
- import { n as relationId } from "./relations-BnCWnJGI.js";
22
- import { r as snapshotGrant, t as buildSnapshot } from "./snapshot-B7DkYg6g.js";
23
- import { n as LOCAL_CUSTOM_ROLE } from "./parse-local-manifest-CVSs6J9I.js";
24
- import { r as resolveSubject, s as APP } from "./permdock-BrAscV28.js";
25
- import { i as memoryApprovalStore } from "./store-BDutJkDL.js";
26
- import { n as wrapPermDock } from "./wrap-gX61EtpB.js";
2
+ import { n as freezeDeep } from "./freeze-jjan0lCv.js";
3
+ import { n as isForbiddenKey, r as ownGet } from "./paths-CUvURzHp.js";
4
+ import { f as normalizeApproval, g as assertSqlFunctionName, h as assertSqlFunctionArg, m as assertPortableTwin, p as normalizeWhere, u as assertApprovalRelations } from "./role-builder-BK2-T6oD.js";
5
+ import { n as PermDockDeniedError } from "./errors-B6R_lg2a.js";
6
+ import { o as sameId } from "./expiry-6XByK0dm.js";
7
+ import { n as internalsOf } from "./internals-B3IgHrvo.js";
8
+ import { c as listPermissions, i as getRegistry, n as findPermission, o as isPermission } from "./permission-registry-B8tYxPIt.js";
9
+ import { n as isThenable$1 } from "./thenable-BNSM1U2R.js";
10
+ import { c as isEdgeRelation, m as restrictedStops, o as groupEntries, s as isComputedRelation, u as isPrincipalRelation } from "./resource-relations-8-pCScBO.js";
11
+ import { a as durationOf, g as secondsOf, m as rfc3339, p as nowSeconds } from "./time-nR1JesoH.js";
12
+ import { a as normalizeMembership$1, d as scopeIdOf, f as scopeList, h as tenantOf, l as rootScope, o as normalizeMemberships$1, s as resolveScope$1, u as scopeChain } from "./scopes-0Up_UA2t.js";
13
+ import { u as evaluateCondition } from "./delegation-CDB6_keF.js";
14
+ import { _ as listPlans, a as authenticated, m as findRole, o as flattenGrantee } from "./grantee-Dke-9rd1.js";
15
+ import { m as tenantsOf, r as isMembershipExpired } from "./tenancy-5d1zVBvK.js";
16
+ import { c as levelNames, i as grantList, n as declaredRoleNames } from "./policy-CLQ8__GF.js";
17
+ import { o as isPortableCondition } from "./hosted-D0IzESu_.js";
18
+ import { n as OPERATION_RISKS, r as isOperationRisk } from "./permissions-CVXmRILq.js";
19
+ import { C as tenantCustomRoles, S as roleAllowKeys, f as customRoleId, l as ceilingGrants, m as customRoleScope, p as customRoleOf, x as resolveCustomRole } from "./evaluate-Dd8Ta0Ie.js";
20
+ import { a as heldLevels, f as bindingOf, h as usesAssigns, m as roleMeta, n as snapshotScopes, o as collectSnapshotGrants, p as rankRoles, r as assignableCandidates, t as snapshotOf } from "./instance-snapshot--JWiTrvO.js";
21
+ import { n as relationId } from "./relations-BxvRvDHK.js";
22
+ import { i as snapshotGrant, r as plainPermission, t as buildSnapshot } from "./snapshot-CXlzi69u.js";
23
+ import { n as LOCAL_CUSTOM_ROLE } from "./parse-local-manifest-DEiCF4ah.js";
24
+ import { c as APP, r as resolveSubject } from "./permdock-L-_I_3zP.js";
25
+ import { i as memoryApprovalStore } from "./store-RNFvaJJv.js";
26
+ import { n as wrapPermDock } from "./wrap-B2wziJI_.js";
27
27
  //#region src/conditions/sql-function.ts
28
28
  function sqlFunction(name, options) {
29
29
  assertSqlFunctionName(name);
@@ -51,7 +51,10 @@ function memorySettingsSource(settings) {
51
51
  return byTenant.get(tenant);
52
52
  } });
53
53
  }
54
- /** Memberships keyed by principal id; `tenant` is not a filter, as for a database source. */
54
+ /**
55
+ * Memberships keyed by principal id; `tenant` is not a filter, as for a
56
+ * database source.
57
+ */
55
58
  function memoryMembershipSource(entries) {
56
59
  const byPrincipal = new Map(Object.entries(entries));
57
60
  return Object.freeze({
@@ -125,7 +128,10 @@ const OPERATION_EFFECTS = Object.freeze([
125
128
  "spend",
126
129
  "external"
127
130
  ]);
128
- /** MCP tool-name characters (MCP 2025-11-25, Tools: Tool names), so a name works as a tool name unchanged. */
131
+ /**
132
+ * MCP tool-name characters (MCP 2025-11-25, Tools: Tool names), so a name works
133
+ * as a tool name unchanged.
134
+ */
129
135
  const NAME = /^[A-Za-z0-9_.-]{1,128}$/u;
130
136
  const META_KEYS = /* @__PURE__ */ new Set([
131
137
  "risk",
@@ -199,7 +205,10 @@ function defineOperations(permissions, definitions) {
199
205
  }
200
206
  //#endregion
201
207
  //#region src/core/approval-policies.ts
202
- /** The denial detail when an `ApprovalPolicySource` fails: every call an allow would grant denies with reason `approval`. */
208
+ /**
209
+ * The denial detail when an `ApprovalPolicySource` fails: every call an allow
210
+ * would grant denies with reason `approval`.
211
+ */
203
212
  /**
204
213
  * The in-process `ApprovalPolicySource`, usable directly as the
205
214
  * `approvalPolicies` option: it is the source and its feature at once.
@@ -284,9 +293,9 @@ function checkOne(policy, raw) {
284
293
  }) };
285
294
  }
286
295
  /**
287
- * Checks one entry against the policy the way `approvalPoliciesFor` loads
288
- * it, for an application to refuse a bad entry when it is saved instead of
289
- * finding every call denied. Never throws.
296
+ * Checks one entry against the policy the way `approvalPoliciesFor` loads it,
297
+ * for an application to refuse a bad entry when it is saved instead of finding
298
+ * every call denied. Never throws.
290
299
  */
291
300
  function validateApprovalPolicy(policy, entry) {
292
301
  try {
@@ -303,9 +312,9 @@ function validateApprovalPolicy(policy, entry) {
303
312
  }
304
313
  }
305
314
  /**
306
- * One raw entry checked against the policy: `null` when it names no
307
- * permission the policy declares (it applies to nothing), `undefined` when
308
- * it does not load.
315
+ * One raw entry checked against the policy: `null` when it names no permission
316
+ * the policy declares (it applies to nothing), `undefined` when it does not
317
+ * load.
309
318
  */
310
319
  function loadOne(policy, raw) {
311
320
  const checked = checkOne(policy, raw);
@@ -322,7 +331,10 @@ function loadAll(policy, raw) {
322
331
  }
323
332
  return Object.freeze({ tighten: (code, input) => tightenApproval(code, out, input) });
324
333
  }
325
- /** Reads the source once for `tenants`; a throw or an invalid entry loads as `"failed"`. */
334
+ /**
335
+ * Reads the source once for `tenants`; a throw or an invalid entry loads as
336
+ * `"failed"`.
337
+ */
326
338
  function approvalPoliciesFor(policy, source, tenants, auth) {
327
339
  const threw = () => {
328
340
  auth.push({
@@ -361,7 +373,10 @@ function asStages(approval) {
361
373
  quorum: approval.quorum
362
374
  })];
363
375
  }
364
- /** An entry's stages, each carrying the entry's escalation unless it has its own. */
376
+ /**
377
+ * An entry's stages, each carrying the entry's escalation unless it has its
378
+ * own.
379
+ */
365
380
  function entryStages(approval) {
366
381
  const stages = asStages(approval);
367
382
  if (approval === "human" || approval.escalation === void 0) return stages;
@@ -378,10 +393,10 @@ function shorter(a, b) {
378
393
  return (durationOf(b) ?? Infinity) < (durationOf(a) ?? Infinity) ? b : a;
379
394
  }
380
395
  /**
381
- * `code` with every matching entry added as further stages: the result
382
- * needs all of them (`'sequential'` when any part is ordered), keeps the
383
- * code's escalation, the shortest `ttl`, and `distinct` unless every part
384
- * opts out. Without a matching entry, `code` unchanged.
396
+ * `code` with every matching entry added as further stages: the result needs
397
+ * all of them (`'sequential'` when any part is ordered), keeps the code's
398
+ * escalation, the shortest `ttl`, and `distinct` unless every part opts out.
399
+ * Without a matching entry, `code` unchanged.
385
400
  */
386
401
  function tightenApproval(code, entries, input) {
387
402
  const extra = entries.filter((entry) => (entry.permission === void 0 || entry.permission === input.permission) && metaMatches(entry, input.operation) && matches(entry, input.tenant, input.subject, input.current, input.next, input.now, input.scopes));
@@ -621,7 +636,10 @@ function applyQuota(store, input) {
621
636
  }
622
637
  //#endregion
623
638
  //#region src/core/memory-relations.ts
624
- /** The holders one edge-table row names for `spec`: none when the row does not belong to it. */
639
+ /**
640
+ * The holders one edge-table row names for `spec`: none when the row does not
641
+ * belong to it.
642
+ */
625
643
  function tableHolders(resourceName, spec, row, id) {
626
644
  if (relationId(ownGet(row, spec.object ?? `${resourceName}_id`)) !== id) return [];
627
645
  for (const [column, value] of Object.entries(spec.match ?? {})) if (ownGet(row, column) !== value) return [];
@@ -942,7 +960,10 @@ function permissionKeysOf(node) {
942
960
  if (!Array.isArray(raw)) return [];
943
961
  return raw.filter((item) => typeof item === "string");
944
962
  }
945
- /** `$inputs.a.b` against the frame's inputs; anything else that is a runtime expression is unknown. */
963
+ /**
964
+ * `$inputs.a.b` against the frame's inputs; anything else that is a runtime
965
+ * expression is unknown.
966
+ */
946
967
  function valueOf(value, inputs) {
947
968
  if (typeof value !== "string" || !value.includes("$")) return {
948
969
  known: true,
@@ -1142,10 +1163,9 @@ function combine(decisions) {
1142
1163
  return decisions.find((item) => item.outcome === outcome) ?? denied("undocumented");
1143
1164
  }
1144
1165
  /**
1145
- * Walks an Arazzo workflow against `permdock`: each step's operation is
1146
- * decided as `permdock.simulate` would, and a server instance emits one
1147
- * simulate event for the whole plan. Works on an instance built from a
1148
- * snapshot too.
1166
+ * Walks an Arazzo workflow against `permdock`: each step's operation is decided
1167
+ * as `permdock.simulate` would, and a server instance emits one simulate event
1168
+ * for the whole plan. Works on an instance built from a snapshot too.
1149
1169
  */
1150
1170
  function simulateArazzo(permdock, input) {
1151
1171
  const tree = input.permissions ?? permdock.permissions;
@@ -1205,7 +1225,10 @@ function planArazzo(input, tree, decide) {
1205
1225
  }
1206
1226
  //#endregion
1207
1227
  //#region src/core/local-manifest.ts
1208
- /** A relation grantee needs the relation graph, which a device does not hold: the grant decides on the server only. */
1228
+ /**
1229
+ * A relation grantee needs the relation graph, which a device does not hold:
1230
+ * the grant decides on the server only.
1231
+ */
1209
1232
  function localGrant(grant) {
1210
1233
  const relational = flattenGrantee(grant.to).some((item) => item.kind === "relation");
1211
1234
  return snapshotGrant(relational ? {
@@ -1213,6 +1236,21 @@ function localGrant(grant) {
1213
1236
  portable: false
1214
1237
  } : grant, void 0);
1215
1238
  }
1239
+ /**
1240
+ * The levels a holder of `grants` may hand out, by permission key; only
1241
+ * permissions whose resource declares levels.
1242
+ */
1243
+ function reachOf(policy, grants) {
1244
+ const out = /* @__PURE__ */ new Map();
1245
+ for (const grant of grants) {
1246
+ const { key, resource, kind } = grant.permission;
1247
+ const names = grant.effect === "allow" && kind === "instance" ? levelNames(policy, resource) : [];
1248
+ if (names.length === 0) continue;
1249
+ const held = /* @__PURE__ */ new Set([...out.get(key) ?? [], ...heldLevels(policy, grant, names)]);
1250
+ out.set(key, names.filter((name) => held.has(name)));
1251
+ }
1252
+ return Object.fromEntries(out);
1253
+ }
1216
1254
  function customTable(policy, scope, roles) {
1217
1255
  const keys = [...new Set(ceilingGrants(policy, scope).map((grant) => grant.permission.key))];
1218
1256
  if (keys.length === 0) return;
@@ -1225,28 +1263,71 @@ function customTable(policy, scope, roles) {
1225
1263
  tenant: LOCAL_CUSTOM_ROLE,
1226
1264
  scope,
1227
1265
  ...body
1228
- }).grants.map(localGrant);
1266
+ }).grants;
1229
1267
  const permissions = {};
1230
1268
  for (const key of keys) {
1231
1269
  const leaf = findPermission(policy.permissions, key);
1232
1270
  const names = leaf?.kind === "instance" ? levelNames(policy, leaf.resource) : [];
1271
+ const all = resolve({ grants: [{ permission: key }] });
1272
+ const leveled = names.map((level) => [level, resolve({ grants: [{
1273
+ permission: key,
1274
+ level
1275
+ }] })]);
1233
1276
  permissions[key] = compact({
1234
- all: resolve({ grants: [{ permission: key }] }),
1235
- levels: names.length === 0 ? void 0 : Object.fromEntries(names.map((level) => [level, resolve({ grants: [{
1236
- permission: key,
1237
- level
1238
- }] })]))
1277
+ all: all.map(localGrant),
1278
+ levels: names.length === 0 ? void 0 : Object.fromEntries(leveled.map(([level, grants]) => [level, grants.map(localGrant)])),
1279
+ reach: names.length === 0 ? void 0 : reachOf(policy, all)[key] ?? [],
1280
+ levelReach: names.length === 0 ? void 0 : Object.fromEntries(leveled.map(([level, grants]) => [level, reachOf(policy, grants)[key] ?? []]))
1239
1281
  });
1240
1282
  }
1241
1283
  const includes = {};
1284
+ const includeReach = {};
1242
1285
  for (const role of roles) {
1243
1286
  const grants = resolve({ includes: [role] });
1244
- if (grants.length > 0) includes[role] = grants;
1287
+ if (grants.length > 0) {
1288
+ includes[role] = grants.map(localGrant);
1289
+ const reach = reachOf(policy, grants);
1290
+ if (Object.keys(reach).length > 0) includeReach[role] = reach;
1291
+ }
1245
1292
  }
1246
- return {
1293
+ return compact({
1247
1294
  permissions,
1248
- includes
1249
- };
1295
+ includes,
1296
+ includeReach: Object.keys(includeReach).length === 0 ? void 0 : includeReach
1297
+ });
1298
+ }
1299
+ /** The hand-out rules `buildLocalSnapshot` applies on the device. */
1300
+ function localAssignable(policy) {
1301
+ const scopes = scopeList(policy.scopes);
1302
+ const root = rootScope(scopes);
1303
+ const ceiling = new Set((root === void 0 ? [] : ceilingGrants(policy, root)).map((grant) => grant.permission.key));
1304
+ const leaves = listPermissions(policy.permissions);
1305
+ const levels = {};
1306
+ for (const leaf of leaves) {
1307
+ const names = leaf.kind === "instance" ? levelNames(policy, leaf.resource) : [];
1308
+ if (names.length > 0) levels[leaf.key] = names;
1309
+ }
1310
+ const grants = {};
1311
+ for (const [index, grant] of grantList(policy).entries()) {
1312
+ const reach = flattenGrantee(grant.to).some((item) => item.kind === "relation") ? levels[grant.permission.key] === void 0 ? void 0 : [] : reachOf(policy, [grant])[grant.permission.key];
1313
+ if (reach !== void 0) grants[String(index)] = reach;
1314
+ }
1315
+ const declared = [...declaredRoleNames(policy)].toSorted();
1316
+ return compact({
1317
+ roles: assignableCandidates(policy).map((leaf) => ({
1318
+ name: leaf.key,
1319
+ on: (leaf.on === void 0 ? root : resolveScope$1(scopes, leaf.on)) ?? "global",
1320
+ allows: [...roleAllowKeys(policy, leaf.key)].toSorted()
1321
+ })),
1322
+ manage: {
1323
+ roles: declared.filter((name) => roleMeta(policy, name)?.manageRoles === true),
1324
+ permissions: leaves.filter((leaf) => leaf.meta.manageRoles === true).map((leaf) => leaf.key)
1325
+ },
1326
+ assigns: usesAssigns(policy) ? Object.fromEntries(declared.map((name) => [name, policy.rolesByName.get(name)?.assigns ?? []])) : void 0,
1327
+ permissions: leaves.filter((leaf) => ceiling.has(leaf.key)).map(plainPermission),
1328
+ levels: Object.keys(levels).length === 0 ? void 0 : levels,
1329
+ grants: Object.keys(grants).length === 0 ? void 0 : grants
1330
+ });
1250
1331
  }
1251
1332
  /**
1252
1333
  * What the policy grants, as JSON a device turns into snapshots from its own
@@ -1277,7 +1358,8 @@ function localSnapshotManifest(policy) {
1277
1358
  roles,
1278
1359
  rank: usesAssigns(policy) ? rankRoles(policy, roles) : void 0,
1279
1360
  grants: grantList(policy).map(localGrant),
1280
- custom
1361
+ custom,
1362
+ assignable: localAssignable(policy)
1281
1363
  }));
1282
1364
  }
1283
1365
  //#endregion
@@ -1291,10 +1373,10 @@ function assertProduction(policy, options) {
1291
1373
  if (options.limits === void 0 && grants.some((grant) => grant.limit !== void 0)) throw new Error("PermDock: profile 'prod' needs limits: a grant has a limit and every call would deny with limit-unavailable; pass limits: limits(store)");
1292
1374
  }
1293
1375
  /**
1294
- * The in-process services `dev` fills in: one memory approval store that
1295
- * every adapter of the app shares, and memory limits when a grant has a
1296
- * `limit`. They live here, not in the adapters, so an adapter ships no store
1297
- * and an app without `defineApp` ships neither.
1376
+ * The in-process services `dev` fills in: one memory approval store that every
1377
+ * adapter of the app shares, and memory limits when a grant has a `limit`. They
1378
+ * live here, not in the adapters, so an adapter ships no store and an app
1379
+ * without `defineApp` ships neither.
1298
1380
  */
1299
1381
  function devDefaults(policy, options) {
1300
1382
  return {
@@ -1305,10 +1387,10 @@ function devDefaults(policy, options) {
1305
1387
  };
1306
1388
  }
1307
1389
  /**
1308
- * Binds the app's sources, features and services to `policy`. The result
1309
- * is a policy: pass it wherever a policy goes (`createPermDock`, every
1310
- * adapter, the CLI) and each picks up the app definition, with its own
1311
- * options taking precedence. The profile defaults to `prod`.
1390
+ * Binds the app's sources, features and services to `policy`. The result is a
1391
+ * policy: pass it wherever a policy goes (`createPermDock`, every adapter, the
1392
+ * CLI) and each picks up the app definition, with its own options taking
1393
+ * precedence. The profile defaults to `prod`.
1312
1394
  */
1313
1395
  function defineApp(policy, options = {}) {
1314
1396
  const profile = options.profile ?? "prod";
@@ -1356,12 +1438,12 @@ function legacyDecision(allowed, permission, subject) {
1356
1438
  });
1357
1439
  }
1358
1440
  /**
1359
- * Runs PermDock beside the application's existing checks while adopting
1360
- * it. Each `can`, `decide`, `decideEach`, `filter` and `assert` asks both;
1361
- * the legacy answer is returned unless the permission is in `enforce`, and
1362
- * every disagreement reaches `onMismatch`. Promote permissions one by one
1363
- * as their mismatches are resolved, then remove the wrap. Pass it as an
1364
- * adapter's `wrap` option, or call it on a core instance.
1441
+ * Runs PermDock beside the application's existing checks while adopting it.
1442
+ * Each `can`, `decide`, `decideEach`, `filter` and `assert` asks both; the
1443
+ * legacy answer is returned unless the permission is in `enforce`, and every
1444
+ * disagreement reaches `onMismatch`. Promote permissions one by one as their
1445
+ * mismatches are resolved, then remove the wrap. Pass it as an adapter's `wrap`
1446
+ * option, or call it on a core instance.
1365
1447
  */
1366
1448
  function shadowMode(options) {
1367
1449
  const enforced = (permission) => options.enforce === "all" || (options.enforce ?? []).some((item) => item.key === permission.key);
@@ -1466,9 +1548,9 @@ function ofTenant(tenant, roles) {
1466
1548
  return Array.isArray(roles) ? roles.filter((role) => role !== null && typeof role === "object" && Reflect.get(role, "tenant") === tenant) : [];
1467
1549
  }
1468
1550
  /**
1469
- * A `CustomRoleSource` over a reader that returns every custom role of a tenant.
1470
- * It keeps only the roles of the requested tenant. With `read: 'held'` it
1471
- * skips a tenant's read, and `globalRoles` and `sharedRoles`, when the
1551
+ * A `CustomRoleSource` over a reader that returns every custom role of a
1552
+ * tenant. It keeps only the roles of the requested tenant. With `read: 'held'`
1553
+ * it skips a tenant's read, and `globalRoles` and `sharedRoles`, when the
1472
1554
  * subject holds only declared roles there.
1473
1555
  */
1474
1556
  function customRoleSource(reader, options = {}) {
@@ -1497,10 +1579,10 @@ function withPlans(subject, plans) {
1497
1579
  }));
1498
1580
  }
1499
1581
  /**
1500
- * Builds the serializable access snapshot for a subject without a request,
1501
- * a network call or a cache directive: call it inside the app's own
1502
- * `'use cache: private'` function. Synchronous; the policy's `subject` and
1503
- * `context` mappers must be synchronous too.
1582
+ * Builds the serializable access snapshot for a subject without a request, a
1583
+ * network call or a cache directive: call it inside the app's own `'use cache:
1584
+ * private'` function. Synchronous; the policy's `subject` and `context` mappers
1585
+ * must be synchronous too.
1504
1586
  */
1505
1587
  function snapshotFor(policy, user, options = {}) {
1506
1588
  const auth = [];
@@ -1599,22 +1681,52 @@ function writable(options) {
1599
1681
  return finishPreset(WRITABLE_ACTIONS, WRITABLE_COLLECTION, options);
1600
1682
  }
1601
1683
  //#endregion
1684
+ //#region src/core/scope-helpers.ts
1685
+ /**
1686
+ * The canonical form PermDock evaluates one membership in, or `undefined` when
1687
+ * it is malformed and grants nothing. `scopes` is the policy's or the catalog's
1688
+ * scope list; absent or empty means the implicit `tenant` and `team` pair.
1689
+ */
1690
+ function normalizeMembership(input, scopes) {
1691
+ return normalizeMembership$1(input, scopeList(scopes));
1692
+ }
1693
+ /**
1694
+ * Every well-formed membership of `input` in canonical form; malformed entries
1695
+ * are dropped.
1696
+ */
1697
+ function normalizeMemberships(input, scopes) {
1698
+ return normalizeMemberships$1(input, scopeList(scopes));
1699
+ }
1700
+ /**
1701
+ * The declared scope `name` stands for: the name itself, or the scope the
1702
+ * `tenant` (first) or `team` (second) alias names. `undefined` otherwise.
1703
+ */
1704
+ function resolveScope(scopes, name) {
1705
+ return resolveScope$1(scopeList(scopes), name);
1706
+ }
1707
+ //#endregion
1602
1708
  //#region src/core/ownership.ts
1603
1709
  function coversInstance(membership, scopes, scope, id, within) {
1604
1710
  if (membership.scope === void 0 || membership.id === void 0) return false;
1605
1711
  if (membership.scope === scope) return sameId(membership.id, id);
1606
1712
  if (!scopeChain(scopes, scope).slice(1).includes(membership.scope)) return false;
1607
- const wanted = within === void 0 ? void 0 : Object.entries(within).find(([key]) => resolveScope(scopes, key) === membership.scope)?.[1] ?? void 0;
1713
+ const wanted = within === void 0 ? void 0 : Object.entries(within).find(([key]) => resolveScope$1(scopes, key) === membership.scope)?.[1] ?? void 0;
1608
1714
  return wanted !== void 0 && scopeIdOf(membership, membership.scope) === wanted;
1609
1715
  }
1610
- /** Roles the principal holds at the instance, at an ancestor named in `within`, or globally. */
1716
+ /**
1717
+ * Roles the principal holds at the instance, at an ancestor named in `within`,
1718
+ * or globally.
1719
+ */
1611
1720
  function rolesAtInstance(policy, principal, scopes, scope, id, within, now) {
1612
1721
  const declared = declaredRoleNames(policy);
1613
1722
  const names = new Set((principal.roles ?? []).filter((name) => declared.has(name)));
1614
1723
  for (const membership of principal.memberships ?? []) if (!isMembershipExpired(membership, now) && coversInstance(membership, scopes, scope, id, within)) for (const name of membership.roles) names.add(name);
1615
1724
  return rankRoles(policy, [...names]);
1616
1725
  }
1617
- /** Whether the principal holds `role` on a live membership of exactly this instance. */
1726
+ /**
1727
+ * Whether the principal holds `role` on a live membership of exactly this
1728
+ * instance.
1729
+ */
1618
1730
  function holdsAt(principal, role, scope, id, now) {
1619
1731
  return (principal.memberships ?? []).some((membership) => membership.scope === scope && sameId(membership.id, id) && !isMembershipExpired(membership, now) && membership.roles.includes(role));
1620
1732
  }
@@ -1622,8 +1734,8 @@ function includedRoles(role) {
1622
1734
  return isReadonlyArray(role.includes) ? role.includes.filter((name) => typeof name === "string") : [];
1623
1735
  }
1624
1736
  /**
1625
- * The membership kinds a custom role may be held through: those every
1626
- * included declared role with `for` allows. `undefined` when none restricts.
1737
+ * The membership kinds a custom role may be held through: those every included
1738
+ * declared role with `for` allows. `undefined` when none restricts.
1627
1739
  */
1628
1740
  function customForKinds(policy, role) {
1629
1741
  let kinds;
@@ -1639,12 +1751,13 @@ function conflictsWith(policy, role) {
1639
1751
  return out;
1640
1752
  }
1641
1753
  /** What the change does to the instance's holder count. */
1642
- function countRules(binding, role, holders, delta, deny) {
1643
- if (binding === void 0 || delta === 0) return;
1644
- const min = binding.min ?? 0;
1645
- if (!(min > 0 || binding.max !== void 0 || binding.transferOnly === true)) return;
1754
+ function countRules(rules, holders, delta, deny) {
1755
+ const role = rules.key;
1756
+ if (delta === 0) return;
1757
+ const min = rules.min ?? 0;
1758
+ if (!(min > 0 || rules.max !== void 0 || rules.transferOnly === true)) return;
1646
1759
  if (!(holders !== void 0 && Number.isInteger(holders) && holders >= 0)) {
1647
- deny(delta < 0 && min > 0 ? "last-holder" : delta > 0 && binding.max !== void 0 ? "max-holders" : "transfer-only", {
1760
+ deny(delta < 0 && min > 0 ? "last-holder" : delta > 0 && rules.max !== void 0 ? "max-holders" : "transfer-only", {
1648
1761
  role,
1649
1762
  holders: null
1650
1763
  });
@@ -1656,17 +1769,85 @@ function countRules(binding, role, holders, delta, deny) {
1656
1769
  min,
1657
1770
  holders
1658
1771
  });
1659
- if (delta > 0 && binding.max !== void 0 && after > binding.max) deny("max-holders", {
1772
+ if (delta > 0 && rules.max !== void 0 && after > rules.max) deny("max-holders", {
1660
1773
  role,
1661
- max: binding.max,
1774
+ max: rules.max,
1662
1775
  holders
1663
1776
  });
1664
- if (binding.transferOnly === true && holders > 0 && after > 0) deny("transfer-only", {
1777
+ if (rules.transferOnly === true && holders > 0 && after > 0) deny("transfer-only", {
1665
1778
  role,
1666
1779
  holders
1667
1780
  });
1668
1781
  }
1669
1782
  /**
1783
+ * The rules of a role change that need no subject: `assigns`, `for`,
1784
+ * `exclusiveWith`, `min`, `max` and `transferOnly`, from holder counts and the
1785
+ * target's roles alone. `decideRoleChange` runs the same function after its
1786
+ * actor, tenant and ceiling checks; a service that holds only the catalog calls
1787
+ * it with the `CatalogRole` entries.
1788
+ */
1789
+ function checkRoleChange(role, input) {
1790
+ const name = role.key;
1791
+ const denials = [];
1792
+ const deny = (reason, detail) => {
1793
+ denials.push(compact({
1794
+ role: name,
1795
+ reason,
1796
+ detail
1797
+ }));
1798
+ };
1799
+ const kind = input.change?.kind;
1800
+ const target = input.change?.target;
1801
+ if (kind !== "assign" && kind !== "revoke" && kind !== "transfer" || target === null || typeof target !== "object") {
1802
+ deny("validation");
1803
+ return freezeDeep({
1804
+ ok: false,
1805
+ denials
1806
+ });
1807
+ }
1808
+ const roles = input.roles ?? [];
1809
+ const targetRoles = isReadonlyArray(target.roles) ? target.roles : [];
1810
+ const already = targetRoles.includes(name);
1811
+ let by = null;
1812
+ if (kind !== "transfer" && input.actorRoles !== void 0 && roles.some((rules) => rules.assigns !== void 0)) {
1813
+ const held = input.actorRoles;
1814
+ by = held.find((actorRole) => roles.find((rules) => rules.key === actorRole)?.assigns?.includes(name) === true) ?? null;
1815
+ if (by === null) deny("not-assignable-by", { held });
1816
+ }
1817
+ if (kind !== "revoke" && !already) {
1818
+ const kinds = role.for;
1819
+ if (kinds !== void 0 && (target.via === void 0 || !kinds.includes(target.via))) deny("not-allowed-for-membership", {
1820
+ via: target.via ?? null,
1821
+ for: kinds
1822
+ });
1823
+ const conflicts = new Set(role.exclusiveWith ?? []);
1824
+ for (const rules of roles) if (rules.exclusiveWith?.includes(name) === true) conflicts.add(rules.key);
1825
+ const clash = targetRoles.filter((held) => conflicts.has(held));
1826
+ if (clash.length > 0) deny("conflicting-role", { with: clash });
1827
+ }
1828
+ const delta = kind === "assign" ? already ? 0 : 1 : kind === "revoke" ? targetRoles.length > 0 && !already ? 0 : -1 : already ? -1 : 0;
1829
+ countRules(role, input.holders, delta, deny);
1830
+ return freezeDeep(denials.length === 0 ? {
1831
+ ok: true,
1832
+ by
1833
+ } : {
1834
+ ok: false,
1835
+ denials
1836
+ });
1837
+ }
1838
+ /** A declared binding's rules, by the name `checkRoleChange` reads. */
1839
+ function rulesOf(binding) {
1840
+ return compact({
1841
+ key: binding.name,
1842
+ min: binding.min,
1843
+ max: binding.max,
1844
+ transferOnly: binding.transferOnly,
1845
+ assigns: binding.assigns,
1846
+ for: binding.for,
1847
+ exclusiveWith: binding.exclusiveWith
1848
+ });
1849
+ }
1850
+ /**
1670
1851
  * A live membership of the principal on the instance or on an instance under
1671
1852
  * it: the one in-band fact that ties a nested instance to a tenant.
1672
1853
  */
@@ -1678,12 +1859,12 @@ function heldAnchor(principal, scopes, scope, id, now) {
1678
1859
  * the instance's own principal; nothing in `change` can stand in for it.
1679
1860
  */
1680
1861
  /**
1681
- * Whether the subject of `permdock` may assign, revoke or transfer a role
1682
- * in one scope instance: `assigns`, the ceiling, `for`, `exclusiveWith`,
1683
- * `min`, `max` and `transferOnly`. It never writes; the application does,
1684
- * and generated RLS triggers re-check the holder counts at commit. A nested
1685
- * instance's tenant comes from a live membership the subject holds on it,
1686
- * or from `change.within` only with `{ trusted: true }`; otherwise
1862
+ * Whether the subject of `permdock` may assign, revoke or transfer a role in
1863
+ * one scope instance: `assigns`, the ceiling, `for`, `exclusiveWith`, `min`,
1864
+ * `max` and `transferOnly`. It never writes; the application does, and
1865
+ * generated RLS triggers re-check the holder counts at commit. A nested
1866
+ * instance's tenant comes from a live membership the subject holds on it, or
1867
+ * from `change.within` only with `{ trusted: true }`; otherwise
1687
1868
  * `no-membership`. An instance built from a snapshot denies with
1688
1869
  * `unsupported`.
1689
1870
  */
@@ -1745,10 +1926,10 @@ function decideRoleChangeWith(policy, principal, scopes, change, customRoles, au
1745
1926
  deny("unknown-role");
1746
1927
  return done(null);
1747
1928
  }
1748
- const scope = global ? "global" : resolveScope(scopes, change.scope);
1929
+ const scope = global ? "global" : resolveScope$1(scopes, change.scope);
1749
1930
  const customAt = named.map((role) => customRoleScope(role, scopes));
1750
1931
  const on = declared ? binding?.on ?? findRole(policy.vocabulary?.roles, name)?.on : customAt.includes(scope) ? scope : customAt[0];
1751
- const heldAt = typeof on === "string" ? resolveScope(scopes, on) : global ? "global" : void 0;
1932
+ const heldAt = typeof on === "string" ? resolveScope$1(scopes, on) : global ? "global" : void 0;
1752
1933
  if (scope === void 0 || heldAt === void 0 || heldAt !== scope) {
1753
1934
  deny("scope", { expected: heldAt ?? null });
1754
1935
  return done(null);
@@ -1758,7 +1939,7 @@ function decideRoleChangeWith(policy, principal, scopes, change, customRoles, au
1758
1939
  let custom;
1759
1940
  if (!global) {
1760
1941
  const root = scopes[0]?.name;
1761
- const supplied = change.within === void 0 ? void 0 : Object.entries(change.within).find(([key]) => resolveScope(scopes, key) === root)?.[1];
1942
+ const supplied = change.within === void 0 ? void 0 : Object.entries(change.within).find(([key]) => resolveScope$1(scopes, key) === root)?.[1];
1762
1943
  if (scope === root) tenant = id;
1763
1944
  else {
1764
1945
  const anchor = heldAnchor(principal, scopes, scope, id, now);
@@ -1787,9 +1968,8 @@ function decideRoleChangeWith(policy, principal, scopes, change, customRoles, au
1787
1968
  return done(null);
1788
1969
  }
1789
1970
  const self = target.id === principal.id;
1790
- const targetRoles = isReadonlyArray(target.roles) ? target.roles : [];
1791
- const already = targetRoles.includes(name);
1792
1971
  let by = null;
1972
+ let actorRoles;
1793
1973
  if (kind === "transfer") {
1794
1974
  if (self) deny("self-demotion");
1795
1975
  if (global ? (principal.roles ?? []).includes(name) : holdsAt(principal, name, scope, id, now)) by = name;
@@ -1799,24 +1979,26 @@ function decideRoleChangeWith(policy, principal, scopes, change, customRoles, au
1799
1979
  const allowed = authority(tenant);
1800
1980
  const revocable = kind === "revoke" && custom !== void 0 && allowed.inert?.has(name);
1801
1981
  if (!allowed.assignable.has(name) && revocable !== true) deny("not-assignable-by");
1802
- else if (custom === void 0 && usesAssigns(policy) && !allowed.manage) {
1803
- const held = global ? rankRoles(policy, (principal.roles ?? []).filter((role) => declaredRoleNames(policy).has(role))) : rolesAtInstance(policy, principal, scopes, scope, id, within, now);
1804
- by = held.find((role) => bindingOf(policy, role)?.assigns?.includes(name) === true) ?? null;
1805
- if (by === null) deny("not-assignable-by", { held });
1806
- }
1982
+ else if (custom === void 0 && usesAssigns(policy) && !allowed.manage) actorRoles = global ? rankRoles(policy, (principal.roles ?? []).filter((role) => declaredRoleNames(policy).has(role))) : rolesAtInstance(policy, principal, scopes, scope, id, within, now);
1807
1983
  }
1808
- if (kind !== "revoke" && !already) {
1809
- const kinds = custom === void 0 ? binding?.for : customForKinds(policy, custom);
1810
- if (kinds !== void 0 && (target.via === void 0 || !kinds.includes(target.via))) deny("not-allowed-for-membership", {
1811
- via: target.via ?? null,
1812
- for: kinds
1813
- });
1814
- const conflicts = custom === void 0 ? conflictsWith(policy, name) : new Set(includedRoles(custom).flatMap((include) => Array.from(conflictsWith(policy, include))));
1815
- const clash = targetRoles.filter((role) => conflicts.has(role));
1816
- if (clash.length > 0) deny("conflicting-role", { with: clash });
1817
- }
1818
- const delta = kind === "assign" ? already ? 0 : 1 : kind === "revoke" ? targetRoles.length > 0 && !already ? 0 : -1 : already ? -1 : 0;
1819
- countRules(binding, name, change.holders, delta, deny);
1984
+ const conflicts = custom === void 0 ? conflictsWith(policy, name) : new Set(includedRoles(custom).flatMap((include) => Array.from(conflictsWith(policy, include))));
1985
+ const checked = checkRoleChange(compact({
1986
+ ...binding === void 0 ? {} : rulesOf(binding),
1987
+ key: name,
1988
+ for: custom === void 0 ? binding?.for : customForKinds(policy, custom),
1989
+ exclusiveWith: [...conflicts],
1990
+ assigns: void 0
1991
+ }), compact({
1992
+ change: {
1993
+ kind,
1994
+ target
1995
+ },
1996
+ holders: change.holders,
1997
+ roles: actorRoles === void 0 ? void 0 : policy.roles.map(rulesOf),
1998
+ actorRoles
1999
+ }));
2000
+ if (checked.ok) by = actorRoles === void 0 ? by : checked.by;
2001
+ else denials.push(...checked.denials);
1820
2002
  return done(by);
1821
2003
  }
1822
2004
  //#endregion
@@ -1839,8 +2021,8 @@ function field(value) {
1839
2021
  return /[",\r\n]/u.test(text) ? `"${text.replaceAll("\"", "\"\"")}"` : text;
1840
2022
  }
1841
2023
  /**
1842
- * One RFC 4180 row for a decision or approval event, without a line
1843
- * terminator; join rows with CRLF under a `CSV_COLUMNS` header.
2024
+ * One RFC 4180 row for a decision or approval event, without a line terminator;
2025
+ * join rows with CRLF under a `CSV_COLUMNS` header.
1844
2026
  */
1845
2027
  function toCsvRow(event) {
1846
2028
  return [
@@ -1857,4 +2039,4 @@ function toCsvRow(event) {
1857
2039
  ].map(field).join(",");
1858
2040
  }
1859
2041
  //#endregion
1860
- export { memorySnapshotSource as A, validateApprovalPolicy as C, memoryEntitlementSource as D, memoryCustomRoleSource as E, memoryMembershipSource as O, memoryApprovalPolicySource as S, isOperationEffect as T, limits as _, readable as a, approvalPolicies as b, customRoleSource as c, defineApp as d, localSnapshotManifest as f, memoryRelationSource as g, signPolicyDocument as h, crud as i, sqlFunction as j, memorySettingsSource as k, mayAccess as l, simulateArazzo as m, toCsvRow as n, writable as o, arazzoFindings as p, decideRoleChange as r, snapshotFor as s, CSV_COLUMNS as t, shadowMode as u, memoryLimitStore as v, defineOperations as w, approvalPoliciesFor as x, stripeEntitlementSource as y };
2042
+ export { memoryCustomRoleSource as A, stripeEntitlementSource as C, validateApprovalPolicy as D, memoryApprovalPolicySource as E, sqlFunction as F, memoryMembershipSource as M, memorySettingsSource as N, defineOperations as O, memorySnapshotSource as P, memoryLimitStore as S, approvalPoliciesFor as T, arazzoFindings as _, normalizeMembership as a, memoryRelationSource as b, crud as c, snapshotFor as d, customRoleSource as f, localSnapshotManifest as g, defineApp as h, decideRoleChange as i, memoryEntitlementSource as j, isOperationEffect as k, readable as l, shadowMode as m, toCsvRow as n, normalizeMemberships as o, mayAccess as p, checkRoleChange as r, resolveScope as s, CSV_COLUMNS as t, writable as u, simulateArazzo as v, approvalPolicies as w, limits as x, signPolicyDocument as y };