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,27 +1,30 @@
1
1
  import { r as isRecord } from "./compact-CAf557ZB.js";
2
- import { o as hasConditionOp } from "./refs-CNJBiTFo.js";
3
- import { f as scopeList, l as rootScope, s as resolveScope, u as scopeChain } from "./scopes-BHsc-wp-.js";
4
- import { t as APPROVAL_REQUEST_SCHEMA } from "./request-schema-CMreVuFM.js";
5
- import { a as describeError, i as configError } from "./errors-DpP_U6Bf.js";
6
- import { i as readJsonFile, o as sqlFiles, s as writeFileEnsuringDir } from "./files-D_JIzUrP.js";
7
- import { a as SUPABASE_MANIFEST_SCHEMA } from "./version-CEbQ5UeM.js";
8
- import { c as requirePolicy } from "./load-DxroEzH1.js";
9
- import { i as qualifySqlTable } from "./sql-B96movIM.js";
10
- import { r as scopeColumn } from "./compile-BAEO5bOk.js";
11
- import { t as authorizeSql } from "./supabase--0aJdLEd.js";
12
- import "./budget-NbEtbJC_.js";
13
- import { a as hookApiNames, d as keptKeys, t as AUTHZ_VERSION_TABLE, u as roleManifest } from "./sources-B-zYB4GS.js";
14
- import { o as readMemberships } from "./postgrest-r5faDIzD.js";
2
+ import { o as hasConditionOp } from "./refs-C8BKxc_e.js";
3
+ import { f as scopeList, l as rootScope, s as resolveScope, u as scopeChain } from "./scopes-0Up_UA2t.js";
4
+ import { t as APPROVAL_REQUEST_SCHEMA } from "./request-schema-DhX7UbfQ.js";
5
+ import { a as describeError, i as configError } from "./errors-Vpu6rKHl.js";
6
+ import { i as readJsonFile, o as sqlFiles, s as writeFileEnsuringDir } from "./files-BSjrtIHw.js";
7
+ import { a as SUPABASE_MANIFEST_SCHEMA } from "./version-DMQ0dnN5.js";
8
+ import { c as requirePolicy } from "./load-DjSU5KXO.js";
9
+ import { i as qualifySqlTable } from "./sql-0WjxIp9g.js";
10
+ import { i as scopeColumn } from "./compile-EzEMB-7v.js";
11
+ import { t as authorizeSql } from "./supabase-BL1qJzzY.js";
12
+ import "./budget-BELja5A9.js";
13
+ import { a as hookApiNames, d as keptKeys, t as AUTHZ_VERSION_TABLE, u as roleManifest } from "./sources-CMAM-2A3.js";
14
+ import { o as readMemberships } from "./postgrest-D4nuPXIQ.js";
15
15
  import { t as beforeFirst } from "./text-BMFRfBqc.js";
16
- import { n as GRANTS_MARKER, r as HOOK_MARKER, s as hookMarkerFields } from "./markers-C6joDI3o.js";
16
+ import { n as GRANTS_MARKER, r as HOOK_MARKER, s as hookMarkerFields } from "./markers-BeHZ4x9Q.js";
17
17
  import { n as formatManifestJson, t as MANIFEST_FILE } from "./manifest-json-CAGzls-C.js";
18
18
  import { n as MIGRATION_DIRS } from "./constants-DcJABbLW.js";
19
- import { f as writeOutputFiles, l as partPath, r as driftOf, u as pgDeltaPath } from "./output-files-CCMdcFWb.js";
20
- import { A as quoteQualified, D as qualified, F as scopeTypeOf, L as tenantTypeOf, O as quoteIdent, a as customRolesOn, j as quoteTable, k as quoteLiteral, l as USER_ID_HELPER, r as HELPERS, y as subjectIdSql } from "./shared-fMKOv8hP.js";
21
- import { $ as permittedForHelper, A as apiKeyFields, C as globalRoleSource, G as hasMemberFor, I as roleNames, J as memberForHelper, K as hasPermittedUsers, O as API_KEY_ALLOWS, Q as memberRoleOf, S as globalRoleRows, X as memberForTable, Y as memberForSources, Z as memberIdsHelper, c as OWNERSHIP, et as permittedIdsHelper, f as permissionKeysForHelper, i as holderSources, it as activeRowSql, l as PERMISSION_HELPERS, o as guardedTables, ot as checkSuspension, p as permittedByPermissionHelper, rt as scopeTable, s as ASSIGNMENTS, t as ownershipRules, u as checkName, v as TOKEN_SCOPE_ALLOWS } from "./ownership-Z2LpxsGa.js";
19
+ import { f as writeOutputFiles, l as partPath, r as driftOf, u as pgDeltaPath } from "./output-files-BIQ_9pIs.js";
20
+ import { A as quoteQualified, D as qualified, F as firstScopeType, I as scopeTypeOf, O as quoteIdent, R as tenantTypeOf, a as customRolesOn, j as quoteTable, k as quoteLiteral, l as USER_ID_HELPER, r as HELPERS, y as subjectIdSql } from "./shared-Afctg7B0.js";
21
+ import { E as TOKEN_SCOPE_ALLOWS, J as apiKeyFields, K as API_KEY_ALLOWS, R as globalRoleSource, _ as PERMISSION_HELPERS, at as memberForHelper, b as permissionKeysForHelper, bt as checkSuspension, ct as memberIdsHelper, dt as permittedForHelper, et as hasMemberFor, ft as permittedIdsHelper, g as OWNERSHIP, h as ASSIGNMENTS, lt as memberOfHelper, ot as memberForSources, rt as isTeamScope, st as memberForTable, tt as hasPermittedUsers, ut as memberRoleOf, v as checkName, vt as activeRowSql, x as permittedByPermissionHelper } from "./tables-DeMNEy6V.js";
22
+ import { a as guardedTables, t as ownershipRules, u as roleNames } from "./ownership-B4L59T9u.js";
22
23
  import { t as membershipSourcesOf } from "./sources-qoIJQrJv.js";
23
- import { a as splitUndiffed, r as tableKey, t as decidingColumns } from "./deciding-columns-DRo2QM6E.js";
24
- import { a as readOnlyActorKinds, f as pgConnector, t as ACTOR_MAY_WRITE } from "./policies-B2lZIurj.js";
24
+ import { a as splitUndiffed, r as tableKey, t as decidingColumns } from "./deciding-columns-NB4wcyBf.js";
25
+ import { n as pgConnector } from "./pg-DQTqRrou.js";
26
+ import { r as permittedUsersHelper, t as resolveNames } from "./resolve-names-CF7xXLSG.js";
27
+ import { c as ACTOR_MAY_WRITE, f as readOnlyActorKinds } from "./fields-D0vUI6dq.js";
25
28
  import { existsSync, readFileSync, readdirSync } from "node:fs";
26
29
  import { dirname, join, posix, resolve } from "node:path";
27
30
  //#region ../../node_modules/.pnpm/smol-toml@1.9.1/node_modules/smol-toml/dist/error.js
@@ -822,7 +825,7 @@ function resolveAuthorize(config, flags = {}) {
822
825
  if (explicit !== void 0) return explicit;
823
826
  if (rls?.membershipSources !== void 0 || flags.rbac === true) return "database";
824
827
  const memberships = flags.memberships ?? rls?.memberships;
825
- return memberships?.tenant !== void 0 || memberships?.team !== void 0 || Object.keys(memberships?.scopes ?? {}).length > 0 ? "database" : "jwt";
828
+ return Object.keys(memberships?.scopes ?? {}).length > 0 ? "database" : "jwt";
826
829
  }
827
830
  function parseRbacAuthorize(raw) {
828
831
  if (raw === void 0) return;
@@ -839,7 +842,10 @@ function createEnum(schema, name, values) {
839
842
  exception when duplicate_object then null;
840
843
  end $$;`;
841
844
  }
842
- /** A read policy and `select` grant for `supabase_auth_admin` on a table the hook reads. */
845
+ /**
846
+ * A read policy and `select` grant for `supabase_auth_admin` on a table the
847
+ * hook reads.
848
+ */
843
849
  function authAdminRead(table, label) {
844
850
  const t = quoteQualified(table);
845
851
  const policy = quoteIdent(`permdock_auth_admin_read_${label}`);
@@ -852,10 +858,10 @@ create policy ${policy} on ${t}
852
858
  }
853
859
  /**
854
860
  * Supabase's Custom Claims and RBAC scaffold on top of the PermDock helpers:
855
- * enums, `user_roles` and `authorize()` over the shared `role_permissions`.
856
- * The token hook comes only from `permdock supabase hook generate`, so one
857
- * function writes the claims. Policies never call `authorize()` per row; they
858
- * call the helpers. Never grants anything to `service_role`.
861
+ * enums, `user_roles` and `authorize()` over the shared `role_permissions`. The
862
+ * token hook comes only from `permdock supabase hook generate`, so one function
863
+ * writes the claims. Policies never call `authorize()` per row; they call the
864
+ * helpers. Never grants anything to `service_role`.
859
865
  */
860
866
  function rbacScaffold(policy, options) {
861
867
  const schema = options.schema;
@@ -940,16 +946,25 @@ function readSupabaseConfig(cwd) {
940
946
  }
941
947
  };
942
948
  }
943
- /** `supabase/` joined with `declarative_schema_path`, which defaults to `schemas`. */
949
+ /**
950
+ * `supabase/` joined with `declarative_schema_path`, which defaults to
951
+ * `schemas`.
952
+ */
944
953
  function declarativeSchemaDir(schemaPath) {
945
954
  return posix.join("supabase", typeof schemaPath === "string" ? schemaPath : "schemas").replace(/\/$/u, "");
946
955
  }
947
- /** The parsed config, or `{}` when it is missing or does not parse (PD045 reports that). */
956
+ /**
957
+ * The parsed config, or `{}` when it is missing or does not parse (PD045
958
+ * reports that).
959
+ */
948
960
  function supabaseConfig(cwd) {
949
961
  const read = readSupabaseConfig(cwd);
950
962
  return read?.ok === true ? read.config : {};
951
963
  }
952
- /** PD045: a `supabase/config.toml` the CLI cannot parse, so every check that reads it falls back to defaults. */
964
+ /**
965
+ * PD045: a `supabase/config.toml` the CLI cannot parse, so every check that
966
+ * reads it falls back to defaults.
967
+ */
953
968
  function pd045(cwd) {
954
969
  const read = readSupabaseConfig(cwd);
955
970
  if (read === void 0 || read.ok) return [];
@@ -961,9 +976,9 @@ function pd045(cwd) {
961
976
  }];
962
977
  }
963
978
  /**
964
- * PD074: `supabase.hook` is configured but `[auth.hook.custom_access_token]`
965
- * in `supabase/config.toml` does not enable the generated function, so a
966
- * local stack and every branch push issue tokens without memberships.
979
+ * PD074: `supabase.hook` is configured but `[auth.hook.custom_access_token]` in
980
+ * `supabase/config.toml` does not enable the generated function, so a local
981
+ * stack and every branch push issue tokens without memberships.
967
982
  */
968
983
  function pd074(cwd, config) {
969
984
  const hook = config.supabase?.hook;
@@ -1126,8 +1141,8 @@ const USER_EDITABLE = /^(raw_)?user_meta(_)?data$/iu;
1126
1141
  /**
1127
1142
  * Splits `supabase.hook.attrs` into table columns and `app_metadata` keys and
1128
1143
  * lists what cannot be compiled: `user_metadata` (the user can edit it), a
1129
- * direct `auth.users` column, an unsafe or prototype key, a duplicate key,
1130
- * or a table column without a table.
1144
+ * direct `auth.users` column, an unsafe or prototype key, a duplicate key, or a
1145
+ * table column without a table.
1131
1146
  */
1132
1147
  function attrsPlan(attrs) {
1133
1148
  const errors = [];
@@ -1242,8 +1257,8 @@ function beforeSql(before) {
1242
1257
  }
1243
1258
  /**
1244
1259
  * `hook.validate`: the claims the hook writes, dropped together when they do
1245
- * not match `supabase-claims-v1.json`, so a bad claim denies instead of
1246
- * failing sign-in. `hook.claims` entries belong to other packages and stay.
1260
+ * not match `supabase-claims-v1.json`, so a bad claim denies instead of failing
1261
+ * sign-in. `hook.claims` entries belong to other packages and stay.
1247
1262
  */
1248
1263
  function validateSql(parts) {
1249
1264
  if (parts.hook.validate !== true) return "";
@@ -1269,8 +1284,8 @@ grant usage on schema extensions to supabase_auth_admin;
1269
1284
  grant execute on function extensions.jsonb_matches_schema(json, jsonb) to supabase_auth_admin;` : "";
1270
1285
  }
1271
1286
  /**
1272
- * Fails the migration when a client role can write an `attrs` column: a
1273
- * claim the user can set is not a server-owned attribute.
1287
+ * Fails the migration when a client role can write an `attrs` column: a claim
1288
+ * the user can set is not a server-owned attribute.
1274
1289
  */
1275
1290
  function attrsGuardSql(plan) {
1276
1291
  if (plan?.table === void 0 || plan.columns.length === 0) return "";
@@ -1319,10 +1334,11 @@ function hookClaims(parts) {
1319
1334
  //#region src/cli/sql/declarative.ts
1320
1335
  /**
1321
1336
  * A migration's SQL as a declarative schema file: pg-delta diffs the file
1322
- * against the database itself, so a `drop trigger if exists` or
1323
- * `drop policy if exists` before its `create` is an error, and a trigger is
1324
- * `create or replace trigger`. A constraint trigger stays `create constraint trigger`, because
1325
- * pg-delta has no `create or replace constraint trigger`. A policy keeps its plain `create policy`.
1337
+ * against the database itself, so a `drop trigger if exists` or `drop policy if
1338
+ * exists` before its `create` is an error, and a trigger is `create or replace
1339
+ * trigger`. A constraint trigger stays `create constraint trigger`, because
1340
+ * pg-delta has no `create or replace constraint trigger`. A policy keeps its
1341
+ * plain `create policy`.
1326
1342
  */
1327
1343
  function declarativeSql(sql) {
1328
1344
  return sql.replaceAll(/^drop (?:trigger|policy) if exists [^;\n]+;\n/gmu, "").replaceAll(/^create trigger /gmu, "create or replace trigger ");
@@ -1342,9 +1358,9 @@ function schemasRefusal(command, value) {
1342
1358
  return value === void 0 || isSupabaseSchemas(value) ? void 0 : `${command} --schemas must be ${MODES.join(", ")} (got ${value})`;
1343
1359
  }
1344
1360
  /**
1345
- * `--schemas`, else `supabase.schemas`, else `migra` when `config.toml`
1346
- * sets `[experimental.pgdelta] enabled = false`, else `pg-delta`: the default
1347
- * of new Supabase projects and of the next Supabase CLI major.
1361
+ * `--schemas`, else `supabase.schemas`, else `migra` when `config.toml` sets
1362
+ * `[experimental.pgdelta] enabled = false`, else `pg-delta`: the default of new
1363
+ * Supabase projects and of the next Supabase CLI major.
1348
1364
  */
1349
1365
  function resolveSchemas(cwd, config, flag) {
1350
1366
  const toml = supabaseConfig(cwd).pgDelta;
@@ -1365,7 +1381,10 @@ const HELPER_NAME = /^(?:permdock_has|permitted_[a-z][a-z0-9_]*_ids|member_[a-z]
1365
1381
  function escape(text) {
1366
1382
  return text.replaceAll(/[.*+?^${}()|[\]\\]/gu, String.raw`\$&`);
1367
1383
  }
1368
- /** The helper functions `sql` creates in `schema`; unqualified names count for `public`. */
1384
+ /**
1385
+ * The helper functions `sql` creates in `schema`; unqualified names count for
1386
+ * `public`.
1387
+ */
1369
1388
  function helpersDefined(sql, schema) {
1370
1389
  const qualifier = schema === "public" ? String.raw`(?:(?:"public"|public)\.)?` : String.raw`(?:"${escape(schema)}"|${escape(schema)})\.`;
1371
1390
  const create = new RegExp(String.raw`\bcreate\s+(?:or\s+replace\s+)?function\s+${qualifier}"?([a-z_][a-z0-9_]*)"?\s*\(`, "giu");
@@ -1377,9 +1396,9 @@ function helpersDefined(sql, schema) {
1377
1396
  return names;
1378
1397
  }
1379
1398
  /**
1380
- * SQL files that may hold the generated helpers: `rls.out` (else `rls.sql`;
1381
- * its `helpers` part when it has `{part}`), the SQL files next to the hook,
1382
- * and the migration folders, not the hook itself.
1399
+ * SQL files that may hold the generated helpers: `rls.out` (else `rls.sql`; its
1400
+ * `helpers` part when it has `{part}`), the SQL files next to the hook, and the
1401
+ * migration folders, not the hook itself.
1383
1402
  */
1384
1403
  function helperSources(cwd, config, hookOut) {
1385
1404
  const hook = resolve(cwd, hookOut);
@@ -1412,7 +1431,10 @@ where n.nspname = $1 and p.proname = any($2::text[])`, [manifest.helpers.schema,
1412
1431
  function missingHelpersMessage(manifest, missing) {
1413
1432
  return `PD039 schema ${manifest.helpers.schema} has no ${missing.join(", ")}: the hook's claims are read by these helpers; run permdock rls generate and apply its migration`;
1414
1433
  }
1415
- /** Bytes of JSON of each extra claim in the largest sample, for claims that pass the budget. */
1434
+ /**
1435
+ * Bytes of JSON of each extra claim in the largest sample, for claims that pass
1436
+ * the budget.
1437
+ */
1416
1438
  function oversizedClaims(samples, manifest) {
1417
1439
  const encoder = new TextEncoder();
1418
1440
  const oversized = [];
@@ -1515,7 +1537,10 @@ function memberForPlan(input) {
1515
1537
  memberships: [...entries.values()]
1516
1538
  };
1517
1539
  }
1518
- /** An `rls.memberships` table in the manifest's `tableMembershipSource` / `junctionMembershipSource` shape, for scope `name`. */
1540
+ /**
1541
+ * An `rls.memberships` table in the manifest's `tableMembershipSource` /
1542
+ * `junctionMembershipSource` shape, for scope `name`.
1543
+ */
1519
1544
  function mappedMembership(mapped, scopes, name) {
1520
1545
  const id = scopeColumn(mapped, scopes, name) ?? "";
1521
1546
  const within = {};
@@ -1620,12 +1645,12 @@ ${source.sql.select(`v_user_${String(index)}`).replaceAll(/^/gmu, " ")}
1620
1645
  //#region src/cli/supabase-hook/api.ts
1621
1646
  const SUBJECT_FOR = "subject_for";
1622
1647
  /**
1623
- * `subject_for(p_user uuid) returns jsonb`: what the hook would put in a
1624
- * token for `p_user`, from the same membership, role, suspension and version
1625
- * reads, plus the custom roles the user holds when `database` mode keeps them
1626
- * in tables. A backend that only has PostgREST (`postgrestSources`) builds a
1627
- * subject for an acting user or a job from it. Naming the user is why no
1628
- * client role may execute it.
1648
+ * `subject_for(p_user uuid) returns jsonb`: what the hook would put in a token
1649
+ * for `p_user`, from the same membership, role, suspension and version reads,
1650
+ * plus the custom roles the user holds when `database` mode keeps them in
1651
+ * tables. A backend that only has PostgREST (`postgrestSources`) builds a
1652
+ * subject for an acting user or a job from it. Naming the user is why no client
1653
+ * role may execute it.
1629
1654
  */
1630
1655
  function subjectForSql(parts, config) {
1631
1656
  const schema = quoteIdent(parts.schema);
@@ -1797,9 +1822,9 @@ revoke execute on function ${fn}(text, text) from public, anon, authenticated;`;
1797
1822
  }
1798
1823
  /**
1799
1824
  * The custom roles `p_user` holds: tenant and shared roles named on a
1800
- * membership of the scope (and instance) they live at, and platform roles
1801
- * among the global roles, each with its grants and includes in `CustomRole`
1802
- * form. A shadowed tenant role comes along; `resolveCustomRole`'s callers drop it.
1825
+ * membership of the scope (and instance) they live at, and platform roles among
1826
+ * the global roles, each with its grants and includes in `CustomRole` form. A
1827
+ * shadowed tenant role comes along; `resolveCustomRole`'s callers drop it.
1803
1828
  */
1804
1829
  function customRolesOfSql(parts) {
1805
1830
  const helpers = quoteIdent(parts.helpers.schema);
@@ -1850,9 +1875,15 @@ function customRolesOfSql(parts) {
1850
1875
  }
1851
1876
  //#endregion
1852
1877
  //#region src/cli/rls/approvals.ts
1853
- /** `rls.approvals`' approver check; better-supabase's `isApprover` template calls it. */
1878
+ /**
1879
+ * `rls.approvals`' approver check; better-supabase's `isApprover` template
1880
+ * calls it.
1881
+ */
1854
1882
  const IS_APPROVER = "permdock_is_approver";
1855
- /** The objects `rls.approvals` adds. Names are part of the SQL contract `supabaseApprovalStore` calls. */
1883
+ /**
1884
+ * The objects `rls.approvals` adds. Names are part of the SQL contract
1885
+ * `supabaseApprovalStore` calls.
1886
+ */
1856
1887
  const APPROVAL_STORE = {
1857
1888
  table: "approval_requests",
1858
1889
  open: "permdock_approval_open",
@@ -1888,8 +1919,8 @@ function serverOnly(fn, args) {
1888
1919
  const BODY_CHECK = `${APPROVAL_STORE.table}_body_schema`;
1889
1920
  /**
1890
1921
  * `rls.jsonSchema`: a pg_jsonschema check that `body` matches
1891
- * `approval-request-v1.json`, added `not valid` and then validated. `auto`
1892
- * adds it only where the extension is available.
1922
+ * `approval-request-v1.json`, added `not valid` and then validated. `auto` adds
1923
+ * it only where the extension is available.
1893
1924
  */
1894
1925
  function bodySchemaSql(table, mode, body = "body", check = BODY_CHECK) {
1895
1926
  const statements = [
@@ -1911,11 +1942,11 @@ end
1911
1942
  $permdock$;\n`;
1912
1943
  }
1913
1944
  /**
1914
- * The approval store (`rls.approvals`): one table of `ApprovalRequest`
1915
- * bodies with the columns a list filters on, and one `security definer`
1916
- * function per `ApprovalStore` method, each one atomic statement. No client
1917
- * role may read the table or execute the functions: approvals are opened and
1918
- * resolved by the server, which grants its own role.
1945
+ * The approval store (`rls.approvals`): one table of `ApprovalRequest` bodies
1946
+ * with the columns a list filters on, and one `security definer` function per
1947
+ * `ApprovalStore` method, each one atomic statement. No client role may read
1948
+ * the table or execute the functions: approvals are opened and resolved by the
1949
+ * server, which grants its own role.
1919
1950
  */
1920
1951
  function approvalStoreSql(ctx, jsonSchema = false) {
1921
1952
  const table = qualified(ctx, APPROVAL_STORE.table);
@@ -2072,8 +2103,8 @@ ${serverOnly(fn(APPROVAL_STORE.cancel), "jsonb, text, text, text")}
2072
2103
  /**
2073
2104
  * `permdock_is_approver(p_approvers jsonb, p_tenant text default null)`: true
2074
2105
  * when the signed-in user matches the serialised approvers of a request
2075
- * (`approvers.by`), for policies on the app's own approval views. A list
2076
- * needs every item and `any-of` one of them; `user` compares the user id and
2106
+ * (`approvers.by`), for policies on the app's own approval views. A list needs
2107
+ * every item and `any-of` one of them; `user` compares the user id and
2077
2108
  * `holder(permission)` reads `permitted_<root>_ids_by_permission` in
2078
2109
  * `p_tenant`, or `permdock_has_permission` without one. Role, relation and
2079
2110
  * other grantee approvers need facts the database does not hold for every
@@ -2170,19 +2201,22 @@ function approvalsSql(ctx, approvals, jsonSchema) {
2170
2201
  }, jsonSchema);
2171
2202
  return store + isApproverSql(ctx) + (delegations === true ? approvalDelegationsSql(ctx) : "");
2172
2203
  }
2173
- /** The objects `rls.approvals.delegations` adds; `tableApprovalDelegationSource` reads the table. */
2204
+ /**
2205
+ * The objects `rls.approvals.delegations` adds; `tableApprovalDelegationSource`
2206
+ * reads the table.
2207
+ */
2174
2208
  const DELEGATIONS = {
2175
2209
  table: "approval_delegations",
2176
2210
  covers: "permdock_cover_approves"
2177
2211
  };
2178
2212
  /**
2179
- * `rls.approvals.delegations`: one table of out-of-office covers that a
2180
- * user writes for themselves, and a four-argument `permdock_is_approver`
2181
- * that also answers for a delegate inside an active cover. One hop: a cover
2182
- * is checked against the delegator's own approver rights, never the
2183
- * delegator's covers. A delegator who is the requester never counts. A
2184
- * `holder()` approver through a cover needs `rls.mode: "database"`, where
2185
- * the `_for` helpers exist; in `jwt` mode only `user()` approvers pass.
2213
+ * `rls.approvals.delegations`: one table of out-of-office covers that a user
2214
+ * writes for themselves, and a four-argument `permdock_is_approver` that also
2215
+ * answers for a delegate inside an active cover. One hop: a cover is checked
2216
+ * against the delegator's own approver rights, never the delegator's covers. A
2217
+ * delegator who is the requester never counts. A `holder()` approver through a
2218
+ * cover needs `rls.mode: "database"`, where the `_for` helpers exist; in `jwt`
2219
+ * mode only `user()` approvers pass.
2186
2220
  */
2187
2221
  function approvalDelegationsSql(ctx) {
2188
2222
  const table = qualified(ctx, DELEGATIONS.table);
@@ -2336,7 +2370,10 @@ revoke execute on function ${fn}(jsonb, text, text, text) from public, anon;
2336
2370
  grant execute on function ${fn}(jsonb, text, text, text) to authenticated;
2337
2371
  `;
2338
2372
  }
2339
- /** The request fields an adopted table may mirror into its own columns, as SQL over a body. */
2373
+ /**
2374
+ * The request fields an adopted table may mirror into its own columns, as SQL
2375
+ * over a body.
2376
+ */
2340
2377
  const MIRRORS = {
2341
2378
  status: (body) => `${body} ->> 'status'`,
2342
2379
  permission: (body) => `${body} ->> 'permission'`,
@@ -2360,7 +2397,10 @@ function mirrorsOf(adopt) {
2360
2397
  }
2361
2398
  return out;
2362
2399
  }
2363
- /** One row of `table` from `values` (column, SQL), each converted to the column's own type. */
2400
+ /**
2401
+ * One row of `table` from `values` (column, SQL), each converted to the
2402
+ * column's own type.
2403
+ */
2364
2404
  function populate(table, values) {
2365
2405
  return `pg_catalog.jsonb_populate_record(null::${table}, pg_catalog.jsonb_build_object(${values.map(([column, sql]) => `${quoteLiteral(column)}, ${sql}`).join(", ")}))`;
2366
2406
  }
@@ -2368,7 +2408,10 @@ function populate(table, values) {
2368
2408
  function mirrorRow(table, mirror, body) {
2369
2409
  return populate(table, mirror.map(([column, field]) => [column, MIRRORS[field](body)]));
2370
2410
  }
2371
- /** `, (<mirrored columns>) = (select …)` for an update that writes `body`; empty without mirrors. */
2411
+ /**
2412
+ * `, (<mirrored columns>) = (select …)` for an update that writes `body`; empty
2413
+ * without mirrors.
2414
+ */
2372
2415
  function mirrorSet(table, mirror, body) {
2373
2416
  if (mirror.length === 0) return "";
2374
2417
  const columns = mirror.map(([column]) => quoteIdent(column));
@@ -2376,12 +2419,12 @@ function mirrorSet(table, mirror, body) {
2376
2419
  return `,\n ${columns.length === 1 ? columns[0] ?? "" : `(${columns.join(", ")})`} = (select ${picked} from ${mirrorRow(table, mirror, body)} r)`;
2377
2420
  }
2378
2421
  /**
2379
- * The approval store over a table the app already has (`rls.approvals:
2380
- * { table, token?, body?, mirror? }`): the same `permdock_approval_*`
2381
- * functions, reading every field from the request body in `body`, keyed by
2382
- * the text column `token`, and copying the fields `mirror` names into the
2383
- * app's own columns, converted to their types, on every write. The table's
2384
- * grants and policies stay the app's.
2422
+ * The approval store over a table the app already has (`rls.approvals: { table,
2423
+ * token?, body?, mirror? }`): the same `permdock_approval_*` functions, reading
2424
+ * every field from the request body in `body`, keyed by the text column
2425
+ * `token`, and copying the fields `mirror` names into the app's own columns,
2426
+ * converted to their types, on every write. The table's grants and policies
2427
+ * stay the app's.
2385
2428
  */
2386
2429
  function adoptedApprovalStoreSql(ctx, adopt, jsonSchema = false) {
2387
2430
  const table = quoteQualified(adopt.table);
@@ -2565,92 +2608,6 @@ ${serverOnly(fn(APPROVAL_STORE.cancel), "jsonb, text, text, text")}
2565
2608
  `;
2566
2609
  }
2567
2610
  //#endregion
2568
- //#region src/cli/rls/permission-holders.ts
2569
- /** `permitted_<scope>_users(p_permission, p_id)`. Names are part of the SQL contract. */
2570
- function permittedUsersHelper(scope) {
2571
- return checkName(`permitted_${scope}_users`);
2572
- }
2573
- /** The users with a membership row on the instance `p_id`, or `undefined` when the scope's memberships are not all in tables. */
2574
- function candidatesSql(ctx, scope, user) {
2575
- const mapped = scopeTable(ctx, scope);
2576
- if (mapped !== void 0) return {
2577
- sql: ` select m.${quoteIdent(mapped.table.user)}::${user}
2578
- from ${quoteQualified(mapped.table.table)} m
2579
- where m.${quoteIdent(mapped.column)} = p_id`,
2580
- keys: []
2581
- };
2582
- const sources = holderSources(ctx, scope);
2583
- if (sources === void 0 || sources === "not-tables") return;
2584
- return {
2585
- sql: sources.map((source, index) => ` select h.user_id::${user}
2586
- from (
2587
- ${source.holders.rows(scope, { id: `v_key_${String(index)}` }).replaceAll(/^/gmu, " ")}
2588
- ) h`).join("\n union\n"),
2589
- keys: sources.map((source, index) => `v_key_${String(index)} ${source.holders.idType}`)
2590
- };
2591
- }
2592
- /** `language sql`, or PL/pgSQL when a source's id column needs `p_id` in a `%type` variable. */
2593
- function functionBody(keys, query) {
2594
- if (keys.length === 0) return `language sql
2595
- stable
2596
- security definer
2597
- set search_path = ''
2598
- as $$
2599
- ${query}
2600
- $$;`;
2601
- return `language plpgsql
2602
- stable
2603
- security definer
2604
- set search_path = ''
2605
- as $$
2606
- declare
2607
- ${keys.map((key) => ` ${key} := p_id;`).join("\n")}
2608
- begin
2609
- return query
2610
- ${query.replaceAll(/^/gmu, " ")};
2611
- end
2612
- $$;`;
2613
- }
2614
- /**
2615
- * One `permitted_<scope>_users(p_permission, p_id)` per scope in `database`
2616
- * mode: the users who hold a permission key on one instance, read from the
2617
- * scope's membership rows and the global-roles table and kept when
2618
- * `permitted_<scope>_ids_by_permission_for` lists the instance or
2619
- * `permdock_has_permission_for` answers, so denies, custom roles, expiry and
2620
- * suspension apply as for the user. It names other users, so no client role
2621
- * may execute it, and a backend role needs its own grant.
2622
- */
2623
- function permissionHoldersSql(ctx) {
2624
- if (ctx.authorize !== "database") return "";
2625
- const user = ctx.dialect === "supabase" ? "uuid" : "text";
2626
- const global = globalRoleRows(ctx);
2627
- const hasFor = qualified(ctx, PERMISSION_HELPERS.hasFor);
2628
- return `${ctx.scopes.map(({ name }) => {
2629
- const candidates = hasPermittedUsers(ctx, name) ? candidatesSql(ctx, name, user) : void 0;
2630
- if (candidates === void 0) return `-- ${name}: no memberships table or table source, so permitted_${name}_users is not written`;
2631
- const fn = qualified(ctx, permittedUsersHelper(name));
2632
- const ids = qualified(ctx, checkName(`${permittedByPermissionHelper(name)}_for`));
2633
- const type = scopeTypeOf(ctx, name);
2634
- return `-- the users who hold a permission on one ${name}: its members and the global-role holders for whom the _for helpers answer; no client role may execute it
2635
- create or replace function ${fn}(p_permission text, p_id ${type})
2636
- returns setof ${user}
2637
- ${functionBody(candidates.keys, ` select c.user_id
2638
- from (
2639
- ${candidates.sql}
2640
- union
2641
- select ${global.userSql}::${user}
2642
- from ${global.from}
2643
- ) c(user_id)
2644
- where c.user_id is not null
2645
- and (
2646
- p_id in (select ${ids}(c.user_id, p_permission))
2647
- or ${hasFor}(c.user_id, p_permission)
2648
- )
2649
- order by 1`)}
2650
- revoke execute on function ${fn}(text, ${type}) from public, anon, authenticated;`;
2651
- }).join("\n\n")}\n`;
2652
- }
2653
- //#endregion
2654
2611
  //#region src/cli/supabase-hook/sql.ts
2655
2612
  const MANAGED_TRIGGER = "permdock_protect_managed";
2656
2613
  function hookSql(parts) {
@@ -2959,10 +2916,10 @@ function signedUp(user) {
2959
2916
  return `exists (select 1 from auth.users a where a.id = ${user})`;
2960
2917
  }
2961
2918
  /**
2962
- * Every membership source whose user id lives in another table: a row of
2963
- * the source bumps the users its old and new references hold, and a change
2964
- * of that table's user id (a contact re-linked to another login) bumps the
2965
- * old and the new user.
2919
+ * Every membership source whose user id lives in another table: a row of the
2920
+ * source bumps the users its old and new references hold, and a change of that
2921
+ * table's user id (a contact re-linked to another login) bumps the old and the
2922
+ * new user.
2966
2923
  */
2967
2924
  function memberUsersVersionSql(parts, bumpFor) {
2968
2925
  const holders = /* @__PURE__ */ new Map();
@@ -3074,7 +3031,10 @@ $$;
3074
3031
  revoke execute on function ${linkedBump}() from public, anon, authenticated;
3075
3032
  ${userTriggers}`;
3076
3033
  }
3077
- /** Every table whose role column references a roles table: the global roles and the membership sources. */
3034
+ /**
3035
+ * Every table whose role column references a roles table: the global roles and
3036
+ * the membership sources.
3037
+ */
3078
3038
  function roleKeyHolders(parts) {
3079
3039
  const holders = [];
3080
3040
  if (parts.roles?.through !== void 0) holders.push({
@@ -3108,7 +3068,10 @@ function roleKeyHolders(parts) {
3108
3068
  return true;
3109
3069
  });
3110
3070
  }
3111
- /** The bump for one roles table: unchanged keys and ids return early, else every holder of `old` is bumped. */
3071
+ /**
3072
+ * The bump for one roles table: unchanged keys and ids return early, else every
3073
+ * holder of `old` is bumped.
3074
+ */
3112
3075
  function roleKeysBumpSql(holders, versionTable, indent) {
3113
3076
  return `${indent}if tg_op = 'UPDATE'
3114
3077
  ${indent} and ${[...new Set(holders.flatMap((holder) => [holder.through.key, holder.through.id]))].map((column) => `new.${quoteIdent(column)} is not distinct from old.${quoteIdent(column)}`).join(`\n${indent} and `)} then
@@ -3124,9 +3087,9 @@ ${indent} and exists (select 1 from auth.users au where au.id = h.user_id)
3124
3087
  ${indent}on conflict (user_id) do update set version = v.version + 1;`;
3125
3088
  }
3126
3089
  /**
3127
- * A renamed role key changes the `roles` claim of everyone who holds it and
3128
- * the `roles` of every membership that references it, so updates to a roles
3129
- * table bump each holder.
3090
+ * A renamed role key changes the `roles` claim of everyone who holds it and the
3091
+ * `roles` of every membership that references it, so updates to a roles table
3092
+ * bump each holder.
3130
3093
  */
3131
3094
  function roleKeysVersionSql(parts, versionTable) {
3132
3095
  const holders = roleKeyHolders(parts);
@@ -3181,7 +3144,8 @@ function helperList(parts, types) {
3181
3144
  return [
3182
3145
  helperEntry(permittedIdsHelper(scope.name), "p_grant text", returns, client),
3183
3146
  helperEntry(memberIdsHelper(scope.name), "", returns, client),
3184
- ...parts.helpers.memberFor.includes(scope.name) ? [helperEntry(memberForHelper(scope.name), "p_user uuid", returns, parts.extra.length === 0 ? [] : ["supabase_auth_admin"])] : []
3147
+ ...parts.helpers.memberFor.includes(scope.name) ? [helperEntry(memberForHelper(scope.name), "p_user uuid", returns, parts.extra.length === 0 ? [] : ["supabase_auth_admin"])] : [],
3148
+ ...parts.helpers.memberFor.includes(scope.name) && isTeamScope(scope.name) ? [helperEntry(memberOfHelper(scope.name), "p_user uuid", returns, client)] : []
3185
3149
  ];
3186
3150
  })];
3187
3151
  }
@@ -3194,8 +3158,8 @@ function helperEntry(name, args, returns, execute) {
3194
3158
  };
3195
3159
  }
3196
3160
  /**
3197
- * The helpers `rls generate` writes beyond the ones the hook's claims feed:
3198
- * the `_for` forms in `database` mode, and the assignment checks when a role
3161
+ * The helpers `rls generate` writes beyond the ones the hook's claims feed: the
3162
+ * `_for` forms in `database` mode, and the assignment checks when a role
3199
3163
  * declares `assigns` (known only with the policy).
3200
3164
  */
3201
3165
  function trustedHelpers(parts, config, types, tenantType, policy) {
@@ -3215,7 +3179,7 @@ function trustedHelpers(parts, config, types, tenantType, policy) {
3215
3179
  ...config.rls?.apiKeys === void 0 ? [] : [helperEntry(API_KEY_ALLOWS, "p_grant text", "boolean", client)],
3216
3180
  ...config.rls?.tokenScopes === true ? [helperEntry(TOKEN_SCOPE_ALLOWS, "p_grant text", "boolean", client)] : [],
3217
3181
  ...readOnlyActorKinds(config.rls?.readOnlyActors) === void 0 ? [] : [helperEntry(ACTOR_MAY_WRITE, "", "boolean", client)],
3218
- ...!config.rls?.approvals ? [] : [helperEntry(IS_APPROVER, typeof config.rls.approvals === "object" && config.rls.approvals.delegations === true ? "p_approvers jsonb, p_tenant text, p_requester text, p_resource text" : "p_approvers jsonb, p_tenant text", "boolean", client)],
3182
+ ...config.rls?.approvals === true || typeof config.rls?.approvals === "object" ? [helperEntry(IS_APPROVER, typeof config.rls.approvals === "object" && config.rls.approvals.delegations === true ? "p_approvers jsonb, p_tenant text, p_requester text, p_resource text" : "p_approvers jsonb, p_tenant text", "boolean", client)] : [],
3219
3183
  ...forUser
3220
3184
  ];
3221
3185
  if (!(policy !== void 0 && (ownershipRules(policy, parts.scopes)?.assigns.length ?? 0) > 0)) return keyed;
@@ -3242,7 +3206,10 @@ function activeRowManifest(row) {
3242
3206
  ...keep.length === 0 ? {} : { keep }
3243
3207
  };
3244
3208
  }
3245
- /** The `rls` settings a package writing SQL next to the helpers reads: custom roles, global roles, suspension and assignment triggers. */
3209
+ /**
3210
+ * The `rls` settings a package writing SQL next to the helpers reads: custom
3211
+ * roles, global roles, suspension and assignment triggers.
3212
+ */
3246
3213
  function rlsSettings(parts, config) {
3247
3214
  const rls = config.rls;
3248
3215
  const suspension = checkSuspension(rls?.suspension, parts.scopes);
@@ -3298,8 +3265,7 @@ function manifestOf(parts, out, config, policy) {
3298
3265
  scopes: parts.scopes,
3299
3266
  tenantClaim: parts.tenantClaim,
3300
3267
  gucPrefix: rls?.gucPrefix ?? "app",
3301
- tenantType: rls?.tenantType ?? "uuid",
3302
- ...rls?.teamType === void 0 ? {} : { teamType: rls.teamType },
3268
+ tenantType: firstScopeType(rls?.scopeTypes, parts.scopes),
3303
3269
  ...rls?.scopeTypes === void 0 ? {} : { scopeTypes: rls.scopeTypes }
3304
3270
  };
3305
3271
  const types = new Map(parts.scopes.map((scope) => [scope.name, scopeTypeOf(ctx, scope.name)]));
@@ -3351,15 +3317,25 @@ function manifestOf(parts, out, config, policy) {
3351
3317
  hook: "v1",
3352
3318
  grants: "v1"
3353
3319
  },
3354
- requires: requiredCapabilities(config, policy)
3320
+ requires: requiredCapabilities(config, policy),
3321
+ ...policy === void 0 ? {} : { names: resolveNames(policy, config, {
3322
+ schema: parts.helpers.schema,
3323
+ tenantClaim: parts.tenantClaim
3324
+ }) }
3355
3325
  };
3356
3326
  }
3357
- /** The manifest without the token hook: what a project with no `supabase.hook` records. */
3327
+ /**
3328
+ * The manifest without the token hook: what a project with no `supabase.hook`
3329
+ * records.
3330
+ */
3358
3331
  function databaseManifestOf(parts, out, config, policy) {
3359
3332
  const { hook: _hook, budget: _budget, claims: _claims, authzVersion: _authzVersion, authzVersionBump: _authzVersionBump, memberships: _memberships, ...rest } = manifestOf(parts, out, config, policy);
3360
3333
  return rest;
3361
3334
  }
3362
- /** The first line of the generated hook: fields `--check` compares before the full text. */
3335
+ /**
3336
+ * The first line of the generated hook: fields `--check` compares before the
3337
+ * full text.
3338
+ */
3363
3339
  function hookMarker(manifest) {
3364
3340
  return `${HOOK_MARKER} schema=${manifest.hook.schema} tenant=${manifest.tenantClaim} budget=${String(manifest.budget.bytes)} claims=${manifest.claims.map((claim) => claim.name).join(",")}`;
3365
3341
  }
@@ -3385,7 +3361,10 @@ budget, the claims the hook writes, the membership sources and the columns that
3385
3361
  --out writes it as JSON, to permdock.manifest.json without a path; --check exits 1 when that
3386
3362
  file differs.
3387
3363
  `;
3388
- /** `supabase.hook.out`, else pg-delta's per-schema path under pg-delta, else `supabase/permdock-hook.sql`. */
3364
+ /**
3365
+ * `supabase.hook.out`, else pg-delta's per-schema path under pg-delta, else
3366
+ * `supabase/permdock-hook.sql`.
3367
+ */
3389
3368
  function hookOut(cwd, config, schema, flag) {
3390
3369
  const schemas = resolveSchemas(cwd, config, flag);
3391
3370
  return config.supabase?.hook?.out !== void 0 || schemas.mode !== "pg-delta" ? defaultOut(config) : pgDeltaPath(schemas.schemaDir, "hook", schema ?? config.supabase?.hook?.schema ?? config.rls?.schema ?? "permdock");
@@ -3424,8 +3403,8 @@ function hooklessDatabase(config) {
3424
3403
  return config.supabase?.hook === void 0 && resolveAuthorize(config) === "database";
3425
3404
  }
3426
3405
  /**
3427
- * The hook migration. With `grantsOut`, the statements `supabase db diff`
3428
- * drops are left out of `sql` and returned in `grants` for that file.
3406
+ * The hook migration. With `grantsOut`, the statements `supabase db diff` drops
3407
+ * are left out of `sql` and returned in `grants` for that file.
3429
3408
  */
3430
3409
  function supabaseHookSql(scopes, config, overrides = {}, grantsOut) {
3431
3410
  const parts = hookParts(scopes, config, overrides);
@@ -3643,4 +3622,4 @@ async function runSupabase(input) {
3643
3622
  };
3644
3623
  }
3645
3624
  //#endregion
3646
- export { readSupabaseConfig as _, supabaseHookManifest as a, rbacScaffold as b, approvalsSql as c, resolveSchemas as d, schemasRefusal as f, pd074 as g, pd045 as h, runSupabase as i, pd039 as l, attrsPlan as m, hookOut as n, supabaseHookSql as o, declarativeSql as p, loadScopes as r, permissionHoldersSql as s, grantsLabel as t, isSupabaseSchemas as u, supabaseConfig as v, resolveAuthorize as x, parseRbacAuthorize as y };
3625
+ export { supabaseConfig as _, supabaseHookManifest as a, resolveAuthorize as b, pd039 as c, schemasRefusal as d, declarativeSql as f, readSupabaseConfig as g, pd074 as h, runSupabase as i, isSupabaseSchemas as l, pd045 as m, hookOut as n, supabaseHookSql as o, attrsPlan as p, loadScopes as r, approvalsSql as s, grantsLabel as t, resolveSchemas as u, parseRbacAuthorize as v, rbacScaffold as y };