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,9 +1,9 @@
1
- import { n as RoleThrough } from "./types-BzzaHxt3.js";
2
- import { o as SqlMembershipSource } from "./sources-Xc4zkszI.js";
1
+ import { n as RoleMap, r as RoleThrough } from "./types-ah9NlU6j.js";
2
+ import { s as SqlMembershipSource } from "./sources-B1Os_YUu.js";
3
3
  //#region src/cli/core/errors.d.ts
4
4
  /**
5
- * 0 success, 1 failure, 2 usage, 3 action required, 130 interrupted (SIGINT
6
- * or a cancelled prompt), 143 terminated (SIGTERM).
5
+ * 0 success, 1 failure, 2 usage, 3 action required, 130 interrupted (SIGINT or
6
+ * a cancelled prompt), 143 terminated (SIGTERM).
7
7
  */
8
8
  type ExitCode = 0 | 1 | 2 | 3 | 130 | 143;
9
9
  //#endregion
@@ -25,13 +25,12 @@ type RlsMembershipTable = {
25
25
  * The role key column, a reference to a roles table that holds the key, or
26
26
  * several of them: the row holds every non-null key.
27
27
  */
28
- readonly role: string | RoleThrough | readonly (string | RoleThrough)[];
29
- /** Per scope name, the column holding that scope's id: the table's own scope and its ancestors. */
28
+ readonly role: string | RoleMap | RoleThrough | readonly (string | RoleMap | RoleThrough)[];
29
+ /**
30
+ * Per scope name, the column holding that scope's id: the table's own scope
31
+ * and its ancestors.
32
+ */
30
33
  readonly columns?: Readonly<Record<string, string>>;
31
- /** Column of the first scope's id; shorthand for `columns[<first scope>]`. */
32
- readonly tenant?: string;
33
- /** Column of the second scope's id; shorthand for `columns[<second scope>]`. */
34
- readonly team?: string;
35
34
  readonly id?: string;
36
35
  readonly expiresAt?: string;
37
36
  readonly disabledAt?: string;
@@ -46,13 +45,12 @@ type RlsMembershipTable = {
46
45
  type RlsMemberships = {
47
46
  /** The membership table of each named scope. */
48
47
  readonly scopes?: Readonly<Record<string, RlsMembershipTable>>;
49
- /** The first scope's table; shorthand for `scopes[<first scope>]`. */
50
- readonly tenant?: RlsMembershipTable;
51
- /** The second scope's table; shorthand for `scopes[<second scope>]`. */
52
- readonly team?: RlsMembershipTable;
53
48
  readonly resource?: Readonly<Record<string, RlsMembershipTable>>;
54
49
  };
55
- /** A table whose row says whether a user or a scope instance is active. A missing row counts as suspended. */
50
+ /**
51
+ * A table whose row says whether a user or a scope instance is active. A
52
+ * missing row counts as suspended.
53
+ */
56
54
  type RlsActiveRow = {
57
55
  readonly table: string;
58
56
  /** Column holding the user id or the scope instance id. */
@@ -63,7 +61,10 @@ type RlsActiveRow = {
63
61
  readonly status?: string;
64
62
  readonly active?: readonly string[];
65
63
  };
66
- /** A scope's active-row table, with the permissions its suspended instances keep. */
64
+ /**
65
+ * A scope's active-row table, with the permissions its suspended instances
66
+ * keep.
67
+ */
67
68
  type RlsSuspendedScope = RlsActiveRow & {
68
69
  /**
69
70
  * Permissions (references or keys) members of a suspended instance, and of
@@ -82,7 +83,10 @@ type RlsSuspendedMembership = {
82
83
  type RlsSuspension = {
83
84
  /** A suspended user holds no role and no membership. */
84
85
  readonly users?: RlsActiveRow;
85
- /** Per scope name: a suspended instance voids its memberships and every membership nested under it, except for `keep`. */
86
+ /**
87
+ * Per scope name: a suspended instance voids its memberships and every
88
+ * membership nested under it, except for `keep`.
89
+ */
86
90
  readonly scopes?: Readonly<Record<string, RlsSuspendedScope>>;
87
91
  readonly memberships?: RlsSuspendedMembership;
88
92
  };
@@ -90,45 +94,102 @@ type RlsFunctionMapping = {
90
94
  readonly twin: unknown;
91
95
  readonly args?: readonly string[];
92
96
  };
97
+ /**
98
+ * A table whose rows reach their scope through a parent table (`rls.tables`,
99
+ * `via`): the table's `key` column holds the parent's id, and the parent's
100
+ * `column` holds the scope instance id. The generated policies call
101
+ * `permitted_<parent, singular>_ids(p_grant)`, a `security definer` helper that
102
+ * joins the parent to `permitted_<scope>_ids`.
103
+ */
104
+ type RlsTableVia = {
105
+ /** `schema.table` of the parent. */
106
+ readonly table: string;
107
+ /** The parent's column holding the scope instance id. */
108
+ readonly column: string;
109
+ /**
110
+ * This table's column holding the parent's id. Default `<parent table,
111
+ * singular>_id`.
112
+ */
113
+ readonly key?: string;
114
+ /** The parent's id column. Default `id`. */
115
+ readonly id?: string;
116
+ /**
117
+ * SQL type of the parent's id column. Default `uuid` in the `supabase`
118
+ * dialect, else `text`.
119
+ */
120
+ readonly type?: string;
121
+ /** The scope `column` holds. Default the policy's root scope. */
122
+ readonly scope?: string;
123
+ };
124
+ /**
125
+ * A resource's table: its `schema.table`, an object that adds `via`, or `false`
126
+ * for a resource with no table (a console permission), which gets no policies
127
+ * while its role grants are still seeded.
128
+ */
129
+ type RlsTable = string | false | {
130
+ readonly table?: string;
131
+ readonly via: RlsTableVia;
132
+ };
93
133
  type RlsConfig = {
94
- readonly tables?: Readonly<Record<string, string>>;
134
+ /**
135
+ * Per resource, the table its policies target; the table is named after the
136
+ * resource when unset, and `false` means it has none.
137
+ */
138
+ readonly tables?: Readonly<Record<string, RlsTable>>;
95
139
  readonly dialect?: RlsDialect;
96
140
  readonly memberships?: RlsMemberships;
97
141
  /**
98
- * `database` mode: the `tableMembershipSource` / `junctionMembershipSource` sources the helpers
99
- * read for every scope `memberships` maps no table for. Default
100
- * `supabase.hook.memberships`, so the helpers and the token hook run the
101
- * same SQL. Setting it selects `database` mode.
142
+ * `database` mode: the `tableMembershipSource` / `junctionMembershipSource`
143
+ * sources the helpers read for every scope `memberships` maps no table for.
144
+ * Default `supabase.hook.memberships`, so the helpers and the token hook run
145
+ * the same SQL. Setting it selects `database` mode.
102
146
  */
103
147
  readonly membershipSources?: readonly SqlMembershipSource[];
104
- /** Tables the helpers, `authorize()` and the token hook read to drop suspended users and scope instances. */
148
+ /**
149
+ * Tables the helpers, `authorize()` and the token hook read to drop suspended
150
+ * users and scope instances.
151
+ */
105
152
  readonly suspension?: RlsSuspension;
106
153
  readonly functions?: Readonly<Record<string, RlsFunctionMapping>>;
107
154
  readonly inlineFunctions?: boolean;
108
- /** Emit FORCE ROW LEVEL SECURITY so the table owner is subject to the policies. */
155
+ /**
156
+ * Emit FORCE ROW LEVEL SECURITY so the table owner is subject to the
157
+ * policies.
158
+ */
109
159
  readonly force?: boolean;
110
160
  readonly fixtures?: string;
161
+ /**
162
+ * `rls verify` findings accepted as a baseline. `id` is the
163
+ * `<code>:<table>:<key>` the finding prints; `reason` is required. An entry
164
+ * no finding matches is a warning, so the baseline shrinks.
165
+ */
166
+ readonly verify?: {
167
+ readonly ignore?: readonly {
168
+ readonly id: string;
169
+ readonly reason: string;
170
+ }[];
171
+ };
111
172
  readonly tenantClaim?: string;
112
173
  /**
113
174
  * Which tenants the helpers and `memberOf` checks admit. `'active'`
114
175
  * (default): when the token carries a non-empty `tenantClaim`, only that
115
176
  * tenant; without one, every tenant the subject is a member of. `'all'`:
116
- * every such tenant whatever the claim says, for apps whose tenant comes
117
- * from the URL or the query.
177
+ * every such tenant whatever the claim says, for apps whose tenant comes from
178
+ * the URL or the query.
118
179
  */
119
180
  readonly tenants?: "active" | "all";
120
- /** Postgres type of tenant columns (`uuid` by default); the tenant claim and helper results are cast to it. */
121
- readonly tenantType?: string;
122
- /** Postgres type of team columns; defaults to `tenantType`. */
123
- readonly teamType?: string;
124
- /** Postgres type of each named scope's id column; overrides `tenantType` / `teamType`. */
181
+ /**
182
+ * Postgres type of each named scope's id column, `uuid` by default. The first
183
+ * scope's type also types the tenant claim and the helper results cast to
184
+ * it.
185
+ */
125
186
  readonly scopeTypes?: Readonly<Record<string, string>>;
126
187
  readonly roleClaim?: string;
127
188
  /**
128
- * Role values the existing SQL compares against (a string literal or an
129
- * enum label) and the PermDock role each one is. `rls import` writes the
130
- * PermDock name for a mapped value; `rls migrate` filters a `role` helper by
131
- * it. An unmapped value must already be a declared role.
189
+ * Role values the existing SQL compares against (a string literal or an enum
190
+ * label) and the PermDock role each one is. `rls import` writes the PermDock
191
+ * name for a mapped value; `rls migrate` filters a `role` helper by it. An
192
+ * unmapped value must already be a declared role.
132
193
  */
133
194
  readonly roleValues?: Readonly<Record<string, string>>;
134
195
  readonly gucPrefix?: string;
@@ -137,37 +198,56 @@ type RlsConfig = {
137
198
  readonly drizzle?: {
138
199
  /** Module exporting the tables, as imported from `out`. Default `./schema`. */
139
200
  readonly schema?: string;
140
- /** Export name per table name; defaults to the camelCased table name without its schema. */
201
+ /**
202
+ * Export name per table name; defaults to the camelCased table name without
203
+ * its schema.
204
+ */
141
205
  readonly exports?: Readonly<Record<string, string>>;
142
206
  };
143
207
  /** `--target prisma`: the model each table maps to. */
144
208
  readonly prisma?: {
145
- /** Model name per table name; defaults to the PascalCased table name without its schema. */
209
+ /**
210
+ * Model name per table name; defaults to the PascalCased table name without
211
+ * its schema.
212
+ */
146
213
  readonly models?: Readonly<Record<string, string>>;
147
214
  };
148
- /** Schema of `role_permissions` and the RLS helpers (`permdock_has`, `permitted_<scope>_ids`, `member_<scope>_ids`) (and the RBAC scaffold). Default `permdock`; keep it out of `[api] schemas`. */
215
+ /**
216
+ * Schema of `role_permissions` and the RLS helpers (`permdock_has`,
217
+ * `permitted_<scope>_ids`, `member_<scope>_ids`) (and the RBAC scaffold).
218
+ * Default `permdock`; keep it out of `[api] schemas`.
219
+ */
149
220
  readonly schema?: string;
150
- /** Where the helpers read roles and memberships: `database` tables or `jwt` claims. */
221
+ /**
222
+ * Where the helpers read roles and memberships: `database` tables or `jwt`
223
+ * claims.
224
+ */
151
225
  readonly authorize?: "database" | "jwt";
152
226
  /** One policy per role and permission instead of one per table and command. */
153
227
  readonly policyPerRole?: boolean;
154
228
  /**
155
- * Resolve tenant-defined custom roles in the helpers: `custom_role_permissions` and
156
- * `custom_role_includes` in `database` mode, the `memberships[].grants` claim in `jwt` mode,
157
- * always intersected with the `permdock_ceiling` view. Off by default. An
158
- * object turns them on and names the application's existing role tables
159
- * that `--backfill-out` copies from.
229
+ * Resolve tenant-defined custom roles in the helpers:
230
+ * `custom_role_permissions` and `custom_role_includes` in `database` mode,
231
+ * the `memberships[].grants` claim in `jwt` mode, always intersected with the
232
+ * `permdock_ceiling` view. Off by default. An object turns them on and names
233
+ * the application's existing role tables that `--backfill-out` copies from.
160
234
  */
161
235
  readonly customRoles?: boolean | RlsCustomRolesConfig;
162
236
  /**
163
- * Triggers the application owns on tables `generate` creates, by table
164
- * name without the schema (`custom_role_permissions`): written after the
165
- * tables, each as `drop trigger if exists` and `create trigger`.
237
+ * Triggers the application owns on tables `generate` creates, by table name
238
+ * without the schema (`custom_role_permissions`): written after the tables,
239
+ * each as `drop trigger if exists` and `create trigger`.
166
240
  */
167
241
  readonly triggers?: Readonly<Record<string, readonly RlsTrigger[]>>;
168
- /** Register generated tables with an audit function, such as `better_supabase.audit`. */
242
+ /**
243
+ * Register generated tables with an audit function, such as
244
+ * `better_supabase.audit`.
245
+ */
169
246
  readonly audit?: RlsAudit;
170
- /** How the generated custom-role write functions check the caller (`database` mode with `customRoles`). */
247
+ /**
248
+ * How the generated custom-role write functions check the caller (`database`
249
+ * mode with `customRoles`).
250
+ */
171
251
  readonly customRoleWrites?: {
172
252
  /**
173
253
  * Who may change custom roles at all, checked before the hand-out check:
@@ -178,23 +258,30 @@ type RlsConfig = {
178
258
  */
179
259
  readonly requires?: "manageRoles" | readonly string[];
180
260
  /**
181
- * The application's own roles table, one row per custom role. A trigger
182
- * on it moves a role's grants and includes when the row's name, tenant,
183
- * scope or instance changes, and deletes them with the row. A signed-in
184
- * caller goes through the same checks as the write functions; a trusted
185
- * path (a migration, a job, a nested trigger) moves the rows directly.
261
+ * The application's own roles table, one row per custom role. A trigger on
262
+ * it moves a role's grants and includes when the row's name, tenant, scope
263
+ * or instance changes, and deletes them with the row. A signed-in caller
264
+ * goes through the same checks as the write functions; a trusted path (a
265
+ * migration, a job, a nested trigger) moves the rows directly.
186
266
  */
187
267
  readonly roles?: RlsCustomRoleTable;
268
+ /**
269
+ * The audit function the by-id writers call after a save
270
+ * (`permdock_replace_custom_role_grants_by_id`), with `event_type`,
271
+ * `target_type`, `record_id`, `tenant` and `metadata` plus `args`. Needs
272
+ * `roles.primaryKey`.
273
+ */
274
+ readonly audit?: RlsCustomRoleAudit;
188
275
  };
189
276
  /**
190
- * Let link capabilities reach resource-scoped grants: `anon` policies that call
191
- * `permdock_capability_ids`, which reads the `capability` claim `exchangeCapability`
192
- * mints. Off by default.
277
+ * Let link capabilities reach resource-scoped grants: `anon` policies that
278
+ * call `permdock_capability_ids`, which reads the `capability` claim
279
+ * `exchangeCapability` mints. Off by default.
193
280
  */
194
281
  readonly capabilities?: boolean;
195
282
  /**
196
- * `'deny'` (Supabase only): a token with `is_anonymous: true` reaches no grant
197
- * but those to `anyone()`. Supabase gives an anonymous sign-in the
283
+ * `'deny'` (Supabase only): a token with `is_anonymous: true` reaches no
284
+ * grant but those to `anyone()`. Supabase gives an anonymous sign-in the
198
285
  * `authenticated` role, so without it the grants to roles and to
199
286
  * `authenticated()` reach it. The subject mapper has to refuse it in process
200
287
  * too. Off by default.
@@ -209,20 +296,20 @@ type RlsConfig = {
209
296
  readonly anonExecute?: boolean;
210
297
  /**
211
298
  * Check role assignments in the database: a trigger on each scope's
212
- * `rls.memberships` table, the global-roles table `rls.roles` and each
213
- * table in `tables` (such as invitations) refuses a client write that
214
- * assigns, changes or removes a role the caller may not assign there, by
215
- * the policy's `assigns` graph or, for a custom role, by what the caller may
216
- * hand out. Writes that do not run as a client role (the table owner, a
217
- * `security definer` function, a backend role) are trusted. Needs a role
218
- * that declares `assigns`.
299
+ * `rls.memberships` table, the global-roles table `rls.roles` and each table
300
+ * in `tables` (such as invitations) refuses a client write that assigns,
301
+ * changes or removes a role the caller may not assign there, by the policy's
302
+ * `assigns` graph or, for a custom role, by what the caller may hand out.
303
+ * Writes that do not run as a client role (the table owner, a `security
304
+ * definer` function, a backend role) are trusted. Needs a role that declares
305
+ * `assigns`.
219
306
  */
220
307
  readonly assignments?: true | {
221
308
  readonly tables?: readonly RlsAssignmentTable[];
222
309
  /**
223
310
  * `'refuse'`: a client write to a row whose user is the caller is
224
- * refused on every guarded table with a user column, whatever the
225
- * role. A map refuses it on the tables it names (`schema.table` as
311
+ * refused on every guarded table with a user column, whatever the role.
312
+ * A map refuses it on the tables it names (`schema.table` as
226
313
  * configured). Unset, a caller may change their own row within what
227
314
  * they may assign.
228
315
  */
@@ -231,73 +318,111 @@ type RlsConfig = {
231
318
  /**
232
319
  * Add the approval store `supabaseApprovalStore` reads and writes: the
233
320
  * `approval_requests` table and one function per `ApprovalStore` method, in
234
- * the helper schema, executable by no client role. Off by default. An
235
- * object with `table` adopts a table the app already has instead, and
236
- * `delegations: true` adds the out-of-office covers.
321
+ * the helper schema, executable by no client role. Off by default. An object
322
+ * with `table` adopts a table the app already has instead, and `delegations:
323
+ * true` adds the out-of-office covers.
237
324
  */
238
325
  readonly approvals?: boolean | RlsApprovalsAdopt;
239
326
  /**
240
- * A pg_jsonschema check constraint on generated `jsonb` columns: the
241
- * approval store's `body` must match `approval-request-v1.json`. `true`
242
- * installs the extension into `extensions`; `'auto'` adds the constraint
243
- * only where `pg_available_extensions` lists it. Off by default.
327
+ * A pg_jsonschema check constraint on generated `jsonb` columns: the approval
328
+ * store's `body` must match `approval-request-v1.json`. `true` installs the
329
+ * extension into `extensions`; `'auto'` adds the constraint only where
330
+ * `pg_available_extensions` lists it. Off by default.
244
331
  */
245
332
  readonly jsonSchema?: "auto" | boolean;
246
333
  /**
247
- * `false` leaves out the holder-count and transfer-only triggers `min`,
248
- * `max` and `transferOnly` put on the membership tables; a map with
249
- * `<scope>: false` leaves them out for those scopes only. Those rules are
250
- * then checked by `decideRoleChange` alone. On by default.
334
+ * `false` leaves out the holder-count and transfer-only triggers `min`, `max`
335
+ * and `transferOnly` put on the membership tables; a map with `<scope>:
336
+ * false` leaves them out for those scopes only. Those rules are then checked
337
+ * by `decideRoleChange` alone. On by default.
251
338
  */
252
339
  readonly ownershipTriggers?: false | Readonly<Record<string, false>>;
253
340
  /**
254
- * Make a session acting for a user read-only in the database: one
255
- * restrictive policy per table and write command the generated policies
256
- * allow, refusing the write when the token's `act` claim names one of these
257
- * actor kinds, unless `act.read_only` is `false`. `true` is
258
- * `['support', 'impersonation']`; with `support`, an `act` with a
259
- * `session_id` and no `kind` counts too. Off by default.
341
+ * Make a session acting for a user read-only in the database: one restrictive
342
+ * policy per table and write command the generated policies allow, refusing
343
+ * the write when the token's `act` claim names one of these actor kinds,
344
+ * unless `act.read_only` is `false`. `true` is `['support',
345
+ * 'impersonation']`; with `support`, an `act` with a `session_id` and no
346
+ * `kind` counts too. Off by default.
260
347
  */
261
348
  readonly readOnlyActors?: boolean | readonly string[];
262
349
  readonly apiKeys?: true | RlsApiKeys;
263
- /** Supabase Realtime: policies on `realtime.messages` for private channels. Supabase dialect only. */
350
+ /**
351
+ * Narrow a delegated token (a `client_id`, or an `act` that is not a support
352
+ * or impersonation session) by its `scope` claim in every helper and policy:
353
+ * a grant passes only when one of the token's scopes reaches its permission
354
+ * (the permission's own scope, a former scope, or a policy `oauthScopes`
355
+ * entry). Denies always apply. Off by default.
356
+ */
357
+ readonly tokenScopes?: boolean;
358
+ /**
359
+ * Supabase Realtime: policies on `realtime.messages` for private channels.
360
+ * Supabase dialect only.
361
+ */
264
362
  readonly realtime?: RlsRealtime;
265
- /** Supabase Storage: policies on `storage.objects` for buckets keyed by a scope folder. Supabase dialect only. */
363
+ /**
364
+ * Supabase Storage: policies on `storage.objects` for buckets keyed by a
365
+ * scope folder. Supabase dialect only.
366
+ */
266
367
  readonly storage?: RlsStorage;
267
368
  /**
268
- * `'views'`: one `security_invoker` view `<table>_visible` per table with field-limited
269
- * read grants, whose restricted columns are `case when <permitted> then col end`. Off by default.
369
+ * `'views'`: one `security_invoker` view `<table>_visible` per table with
370
+ * field-limited read grants, whose restricted columns are `case when
371
+ * <permitted> then col end`. `'mask'`: the same views plus
372
+ * `<schema>.<table>_mask(p_row)`, which nulls the restricted columns of one
373
+ * row by the same masks, for SQL that reads the table without the view. Off
374
+ * by default.
270
375
  */
271
- readonly fields?: "views";
376
+ readonly fields?: "views" | "mask";
272
377
  /**
273
- * With `fields: 'views'`, grant `anon` and `authenticated` only the unrestricted columns of
274
- * the base table, so restricted columns are read through the view. Breaks `select *`.
378
+ * With `fields: 'views'` or `'mask'`, grant `anon` and `authenticated` only
379
+ * the unrestricted columns of the base table, so restricted columns are read
380
+ * through the view. Breaks `select *`.
275
381
  */
276
382
  readonly revokeColumns?: boolean;
277
- /** Policy name template: `{table}`, `{op}`, plus `{role}` and `{permission}` with `policyPerRole`. */
383
+ /**
384
+ * Policy name template: `{table}`, `{op}`, plus `{role}` and `{permission}`
385
+ * with `policyPerRole`.
386
+ */
278
387
  readonly policyName?: string;
279
388
  /** `rls generate --rbac supabase` defaults; flags override. */
280
389
  readonly rbac?: {
281
390
  readonly schema?: string;
282
391
  readonly authorize?: "database" | "jwt";
283
392
  };
284
- /** The global-roles table `permdock_has` reads in `database` mode. Default `<schema>.user_roles (user_id, role)`, which the helpers create. */
393
+ /**
394
+ * The global-roles table `permdock_has` reads in `database` mode. Default
395
+ * `<schema>.user_roles (user_id, role)`, which the helpers create.
396
+ */
285
397
  readonly roles?: GlobalRoles;
286
398
  /**
287
399
  * The SQL command each action verb compiles to, merged over the defaults
288
- * (`read`, `list`, `get` → `select`; `create` → `insert`; `update`; `delete`).
289
- * `'none'` compiles no policy. Every granted action is seeded into
400
+ * (`read`, `list`, `get` → `select`; `create` → `insert`; `update`;
401
+ * `delete`). `'none'` compiles no policy. Every granted action is seeded into
290
402
  * `role_permissions` either way, so `permdock_has` answers for it.
291
403
  */
292
404
  readonly actions?: RlsActions;
293
- /** Emit only the helpers, their seeds and the scaffold; the table policies stay hand-written. */
405
+ /**
406
+ * Emit only the helpers, their seeds and the scaffold; the table policies
407
+ * stay hand-written.
408
+ */
294
409
  readonly helpersOnly?: boolean;
295
410
  /**
296
411
  * Emit `permitted_<resource>_rows(p_permission)` and its `_for` form for
297
- * these resources, or for every resource a grant reaches with `true`: the
298
- * row ids the caller may act on, as the generated policies decide them.
412
+ * these resources, or for every resource a grant reaches with `true`: the row
413
+ * ids the caller may act on, as the generated policies decide them.
299
414
  */
300
415
  readonly rowHelpers?: true | readonly string[];
416
+ /**
417
+ * `'function'`: the `role_permissions` rows live in `<schema>.seed()`, which
418
+ * the helpers part creates. Declarative workflows (pg-delta, migra) then need
419
+ * no seeds migration: call `select <schema>.seed();` after each deploy.
420
+ *
421
+ * `'view'`: `role_permissions` is a `security_invoker` view over a `values`
422
+ * list, so the rows travel with the declarative schema and need no seeding
423
+ * step. Nothing can write the rows, so the view cannot take hand-added ones.
424
+ */
425
+ readonly seeds?: "function" | "view";
301
426
  readonly trustedReaders?: readonly string[];
302
427
  readonly treeValues?: Readonly<Record<string, Readonly<Record<string, unknown>>>>;
303
428
  /** `rls migrate`: how existing helper calls map onto the generated helpers. */
@@ -310,19 +435,22 @@ type RlsConfig = {
310
435
  readonly shims?: boolean | RlsShimsConfig;
311
436
  };
312
437
  /**
313
- * `rls.approvals` on a table the app already has: the store functions keep
314
- * each request's body in `body` and its token in `token` (both added when
315
- * missing) and read every field from the body; `mirror` copies request
316
- * fields into the app's own columns on each write, converted to their types.
438
+ * `rls.approvals` on a table the app already has: the store functions keep each
439
+ * request's body in `body` and its token in `token` (both added when missing)
440
+ * and read every field from the body; `mirror` copies request fields into the
441
+ * app's own columns on each write, converted to their types.
317
442
  */
318
443
  type RlsApprovalsAdopt = {
319
- /** `table` or `schema.table`. Without it the store is the generated `approval_requests`. */
444
+ /**
445
+ * `table` or `schema.table`. Without it the store is the generated
446
+ * `approval_requests`.
447
+ */
320
448
  readonly table?: string;
321
449
  /**
322
450
  * Add `approval_delegations`, the out-of-office covers a user writes for
323
- * themselves, and the four-argument `permdock_is_approver` that answers for
324
- * a delegate inside an active cover. `tableApprovalDelegationSource` reads
325
- * the same rows for `approvalsHandler`. Off by default.
451
+ * themselves, and the four-argument `permdock_is_approver` that answers for a
452
+ * delegate inside an active cover. `tableApprovalDelegationSource` reads the
453
+ * same rows for `approvalsHandler`. Off by default.
326
454
  */
327
455
  readonly delegations?: boolean;
328
456
  /** A text column unique per request. Default `token`. */
@@ -354,18 +482,30 @@ type RlsApiKeys = {
354
482
  readonly roles?: string;
355
483
  readonly serviceRoles?: readonly string[];
356
484
  };
357
- /** One more table whose rows assign a role, such as invitations (`rls.assignments.tables`). */
485
+ /**
486
+ * One more table whose rows assign a role, such as invitations
487
+ * (`rls.assignments.tables`).
488
+ */
358
489
  type RlsAssignmentTable = {
359
490
  readonly table: string;
360
491
  /** The declared scope the row assigns the role at. */
361
492
  readonly scope: string;
362
493
  /** The column holding the scope instance id. */
363
494
  readonly id: string;
364
- /** The tenant column for a scope below the first; defaults to `id` at the first scope. */
495
+ /**
496
+ * The tenant column for a scope below the first; defaults to `id` at the
497
+ * first scope.
498
+ */
365
499
  readonly tenant?: string;
366
- /** The role key column, a reference to a roles table that holds the key, or several of them. */
367
- readonly role: string | RoleThrough | readonly (string | RoleThrough)[];
368
- /** The column holding the user the row assigns to, which `ownRole` compares with the caller. */
500
+ /**
501
+ * The role key column, a reference to a roles table that holds the key, or
502
+ * several of them.
503
+ */
504
+ readonly role: string | RoleMap | RoleThrough | readonly (string | RoleMap | RoleThrough)[];
505
+ /**
506
+ * The column holding the user the row assigns to, which `ownRole` compares
507
+ * with the caller.
508
+ */
369
509
  readonly user?: string;
370
510
  };
371
511
  /** `rls.customRoleWrites.roles`: the application's table of custom roles. */
@@ -373,20 +513,44 @@ type RlsCustomRoleTable = {
373
513
  readonly table: string;
374
514
  /** The column holding the role name. */
375
515
  readonly key: string;
376
- /** The tenant column; a row with no tenant is a platform custom role (`scope: 'global'`). Without it every row is a platform role. */
516
+ /**
517
+ * The tenant column; a row with no tenant is a platform custom role (`scope:
518
+ * 'global'`). Without it every row is a platform role.
519
+ */
377
520
  readonly tenant?: string;
378
- /** A text column holding the scope name; without it a row with a tenant lives at the first scope. */
521
+ /**
522
+ * A text column holding the scope name; without it a row with a tenant lives
523
+ * at the first scope.
524
+ */
379
525
  readonly scope?: string;
380
526
  /** A column pinning the role to one instance of its scope. */
381
527
  readonly id?: string;
382
- /** A boolean column marking rows that are not custom roles (declared or system roles); those rows are skipped. */
528
+ /**
529
+ * The row's id column: turns on the by-id write and read functions
530
+ * (`permdock_replace_custom_role_grants_by_id`).
531
+ */
532
+ readonly primaryKey?: string;
533
+ /**
534
+ * A boolean column marking rows that are not custom roles (declared or system
535
+ * roles); those rows are skipped.
536
+ */
383
537
  readonly skip?: string;
384
- /** A boolean column marking a row with no tenant as a shared custom role, held at `scope` (default the first scope) in every tenant. Without it a row with no tenant is a platform role. */
538
+ /**
539
+ * A boolean column marking a row with no tenant as a shared custom role, held
540
+ * at `scope` (default the first scope) in every tenant. Without it a row with
541
+ * no tenant is a platform role.
542
+ */
385
543
  readonly shared?: string;
386
544
  };
387
- /** `rls.customRoles` as an object: custom roles on, plus where existing ones live. */
545
+ /**
546
+ * `rls.customRoles` as an object: custom roles on, plus where existing ones
547
+ * live.
548
+ */
388
549
  type RlsCustomRolesConfig = {
389
- /** The application's role tables `--backfill-out` copies into `custom_role_permissions` and `custom_role_includes`. */
550
+ /**
551
+ * The application's role tables `--backfill-out` copies into
552
+ * `custom_role_permissions` and `custom_role_includes`.
553
+ */
390
554
  readonly from?: RlsCustomRolesFrom;
391
555
  };
392
556
  /**
@@ -395,12 +559,26 @@ type RlsCustomRolesConfig = {
395
559
  * instance and `skip` flag.
396
560
  */
397
561
  type RlsCustomRolesFrom = {
562
+ /**
563
+ * `'trigger'`: after-row triggers on the permissions table and the includes
564
+ * table rebuild the affected role through
565
+ * `permdock_trusted_replace_custom_role_grants` on every legacy write, so the
566
+ * PermDock grants follow the application's editor. Without it the backfill
567
+ * copies once.
568
+ */
569
+ readonly sync?: "trigger";
398
570
  readonly permissions: {
399
571
  /** `table` or `schema.table`: one row per permission a role holds. */
400
572
  readonly table: string;
401
- /** The reference to the roles table: `{ through: 'roles', on: { role_id: 'id' }, column: 'key' }`. */
573
+ /**
574
+ * The reference to the roles table: `{ through: 'roles', on: { role_id:
575
+ * 'id' }, column: 'key' }`.
576
+ */
402
577
  readonly role: RoleThrough;
403
- /** The permission key column, or a reference to a permissions table that holds the key. */
578
+ /**
579
+ * The permission key column, or a reference to a permissions table that
580
+ * holds the key.
581
+ */
404
582
  readonly permission: string | RoleThrough;
405
583
  /** A text column holding `allow` or `deny`. Without it every row allows. */
406
584
  readonly effect?: string;
@@ -430,15 +608,34 @@ type RlsTrigger = {
430
608
  };
431
609
  /**
432
610
  * `rls.audit`: one `select <function>('<schema>.<table>'::regclass, <args>)`
433
- * per generated table, for an audit module that registers a table by
434
- * creating its own trigger.
611
+ * per generated table, for an audit module that registers a table by creating
612
+ * its own trigger.
435
613
  */
436
614
  type RlsAudit = {
437
615
  /** `schema.function` taking the table as its first argument. */
438
616
  readonly function: string;
439
- /** Generated tables, without the schema. Default the custom-role tables and `user_roles`, those this run creates. */
617
+ /**
618
+ * Generated tables, without the schema. Default the custom-role tables and
619
+ * `user_roles`, those this run creates.
620
+ */
440
621
  readonly tables?: readonly string[];
441
- /** Named text arguments: `{ tenant_column: 'tenant_id' }` passes `tenant_column => 'tenant_id'`. */
622
+ /**
623
+ * Named text arguments: `{ tenant_column: 'tenant_id' }` passes
624
+ * `tenant_column => 'tenant_id'`.
625
+ */
626
+ readonly args?: Readonly<Record<string, string>>;
627
+ };
628
+ /** `rls.customRoleWrites.audit`: the function a by-id custom-role save calls. */
629
+ type RlsCustomRoleAudit = {
630
+ /**
631
+ * `schema.function` taking named `event_type`, `target_type`, `record_id`,
632
+ * `tenant` and `metadata` arguments.
633
+ */
634
+ readonly function: string;
635
+ /**
636
+ * Extra named text arguments: `{ actor_kind: 'user' }` passes `actor_kind =>
637
+ * 'user'`.
638
+ */
442
639
  readonly args?: Readonly<Record<string, string>>;
443
640
  };
444
641
  /** `rls.shims`: where the legacy-named wrappers go. */
@@ -446,12 +643,16 @@ type RlsShimsConfig = {
446
643
  /** Schema of the legacy helpers. Default `public`. */
447
644
  readonly schema?: string;
448
645
  };
449
- /** An action verb's SQL command, or `'none'` for a verb that only `permdock_has` answers. */
646
+ /**
647
+ * An action verb's SQL command, or `'none'` for a verb that only `permdock_has`
648
+ * answers.
649
+ */
450
650
  type RlsActions = Readonly<Record<string, "select" | "insert" | "update" | "delete" | "none">>;
451
651
  /**
452
652
  * One existing SQL helper `rls migrate` rewrites. `form` names its arguments:
453
- * `ids(key)` returns scope ids, `row(id, key)` and `membership(id)` test one id,
454
- * `scoped(scope, id, key)` takes the scope as a literal, `global(key)` returns a boolean.
653
+ * `ids(key)` returns scope ids, `row(id, key)` and `membership(id)` test one
654
+ * id, `scoped(scope, id, key)` takes the scope as a literal, `global(key)`
655
+ * returns a boolean.
455
656
  */
456
657
  type RlsMigrateHelper = {
457
658
  readonly form: "ids" | "row" | "membership";
@@ -471,20 +672,29 @@ type RlsMigrateConfig = {
471
672
  readonly keys?: Readonly<Record<string, string>>;
472
673
  /** Key prefix renames, longest first: `{ 'organization.': '' }`. */
473
674
  readonly prefixes?: Readonly<Record<string, string>>;
474
- /** For `scoped` helpers, the scope literals that mean a global check, such as `system`. */
675
+ /**
676
+ * For `scoped` helpers, the scope literals that mean a global check, such as
677
+ * `system`.
678
+ */
475
679
  readonly globalScopes?: readonly string[];
476
- /** For `scoped` helpers, a scope literal's PermDock scope when the names differ. */
680
+ /**
681
+ * For `scoped` helpers, a scope literal's PermDock scope when the names
682
+ * differ.
683
+ */
477
684
  readonly scopes?: Readonly<Record<string, string>>;
478
685
  /**
479
686
  * Materialised permission tables to retire, by `schema.table`: a table the
480
687
  * application keeps in step with triggers and reads instead of the grants.
481
- * `rls migrate --retire-out` drops it with its refresh triggers once
482
- * nothing else reads it.
688
+ * `rls migrate --retire-out` drops it with its refresh triggers once nothing
689
+ * else reads it.
483
690
  */
484
691
  readonly tables?: Readonly<Record<string, RlsMigrateTable>>;
485
692
  };
486
693
  type RlsMigrateTable = {
487
- /** The functions that keep the table in step. Default: every function in `--sql` whose body writes it, and every function that calls one. */
694
+ /**
695
+ * The functions that keep the table in step. Default: every function in
696
+ * `--sql` whose body writes it, and every function that calls one.
697
+ */
488
698
  readonly refresh?: readonly string[];
489
699
  };
490
700
  /** Where global roles live: `table (user, role)`. Defaults `user_id` and `role`. */
@@ -527,11 +737,20 @@ type RlsStorage = {
527
737
  };
528
738
  /** `permdock supabase hook generate` input. */
529
739
  type SupabaseHookConfig = {
530
- /** The same `tableMembershipSource` / `junctionMembershipSource` sources the app passes as `memberships`. */
740
+ /**
741
+ * The same `tableMembershipSource` / `junctionMembershipSource` sources the
742
+ * app passes as `memberships`.
743
+ */
531
744
  readonly memberships: readonly SqlMembershipSource[];
532
- /** Schema of the hook and the version table. Default `rls.schema`, else `permdock`. */
745
+ /**
746
+ * Schema of the hook and the version table. Default `rls.schema`, else
747
+ * `permdock`.
748
+ */
533
749
  readonly schema?: string;
534
- /** Global roles: `user_role` and `roles`. Default `rls.roles`, else the `<schema>.user_roles (user_id, role)` table; `false` for none. */
750
+ /**
751
+ * Global roles: `user_role` and `roles`. Default `rls.roles`, else the
752
+ * `<schema>.user_roles (user_id, role)` table; `false` for none.
753
+ */
535
754
  readonly roles?: GlobalRoles | false;
536
755
  /**
537
756
  * Where the active first-scope id comes from: `app_metadata.<key>` (default
@@ -555,32 +774,50 @@ type SupabaseHookConfig = {
555
774
  readonly columns: readonly string[];
556
775
  };
557
776
  /**
558
- * Claims other packages own, each `claim: '<schema>.<function>'`, for
559
- * example `{ features: 'public.feature_claims' }`. The function
560
- * takes the user id (`uuid`) and returns `jsonb`; `null` omits the claim.
561
- * Reserved names are refused, the claims sit outside `budget`, and a
562
- * suspended user gets none.
777
+ * Claims other packages own, each `claim: '<schema>.<function>'`, for example
778
+ * `{ features: 'public.feature_claims' }`. The function takes the user id
779
+ * (`uuid`) and returns `jsonb`; `null` omits the claim. Reserved names are
780
+ * refused, the claims sit outside `budget`, and a suspended user gets none.
563
781
  */
564
782
  readonly claims?: Readonly<Record<string, string>>;
783
+ /**
784
+ * The `team_ids` claim: the uuid of every team the user belongs to, read from
785
+ * `table` (`user` and `team` columns; `tenant` puts the active tenant's teams
786
+ * first). It shares the `memberships` budget, so a user with many teams gets
787
+ * a prefix and `memberships_truncated`. A suspended user gets none. Clients
788
+ * must not write the table.
789
+ */
790
+ readonly teams?: {
791
+ readonly table: string;
792
+ readonly user: string;
793
+ readonly team: string;
794
+ readonly tenant?: string;
795
+ };
565
796
  readonly before?: string | readonly string[];
566
797
  /**
567
798
  * Check the claims the hook wrote against `supabase-claims-v1.json` with
568
- * pg_jsonschema, and drop them all on a mismatch so the user signs in with
569
- * no PermDock access instead of an error. Needs the extension. Default `false`.
799
+ * pg_jsonschema, and drop them all on a mismatch so the user signs in with no
800
+ * PermDock access instead of an error. Needs the extension. Default `false`.
570
801
  */
571
802
  readonly validate?: boolean;
572
- /** Bytes of JSON the `memberships` claim may use. Default `supabaseMembershipsBudget` (1024). */
803
+ /**
804
+ * Bytes of JSON the `memberships` claim may use. Default
805
+ * `supabaseMembershipsBudget` (1024).
806
+ */
573
807
  readonly budget?: number;
574
- /** Keep `permdock_authz_version` and write the `authz_ver` claim. Default `true`. */
808
+ /**
809
+ * Keep `permdock_authz_version` and write the `authz_ver` claim. Default
810
+ * `true`.
811
+ */
575
812
  readonly version?: boolean;
576
813
  /**
577
814
  * Write PostgREST wrappers for `subject_for`, `members_of` and
578
815
  * `authz_version_for` into `schema` (default `public`), named
579
- * `<prefix>subject_for` and so on (default prefix `permdock_`), for a
580
- * backend that reaches Postgres through the Data API while the hook schema
581
- * is not exposed. Each wrapper is `security definer`, revoked from
582
- * `public`, `anon` and `authenticated`, and granted to `service_role`: the
583
- * one place the hook grants to it. Pass the same setting to `postgrestSources`.
816
+ * `<prefix>subject_for` and so on (default prefix `permdock_`), for a backend
817
+ * that reaches Postgres through the Data API while the hook schema is not
818
+ * exposed. Each wrapper is `security definer`, revoked from `public`, `anon`
819
+ * and `authenticated`, and granted to `service_role`: the one place the hook
820
+ * grants to it. Pass the same setting to `postgrestSources`.
584
821
  */
585
822
  readonly api?: {
586
823
  readonly schema?: string;
@@ -593,10 +830,10 @@ type SupabaseHookConfig = {
593
830
  readonly out?: string;
594
831
  };
595
832
  /**
596
- * How the project turns SQL into Supabase migrations: `'pg-delta'`
597
- * (Declarative Schemas 2.0, `supabase db schema declarative sync`),
598
- * `'migra'` (declarative schemas on `supabase db diff`) or `'migrations'`
599
- * (hand-written migrations, no declarative schemas).
833
+ * How the project turns SQL into Supabase migrations: `'pg-delta'` (Declarative
834
+ * Schemas 2.0, `supabase db schema declarative sync`), `'migra'` (declarative
835
+ * schemas on `supabase db diff`) or `'migrations'` (hand-written migrations, no
836
+ * declarative schemas).
600
837
  */
601
838
  type SupabaseSchemas = "pg-delta" | "migra" | "migrations";
602
839
  type SupabaseConfig = {
@@ -610,27 +847,47 @@ type SupabaseConfig = {
610
847
  };
611
848
  type DoctorConfig = {
612
849
  /**
613
- * Directories or globs the source checks read (PD001, PD002, PD007 to
614
- * PD015, PD044 and the other checks over files), default `collect.srcPath`.
615
- * The catalog `collect` writes still comes from `collect.srcPath`, and PD004
850
+ * Directories or globs the source checks read (PD001, PD002, PD007 to PD015,
851
+ * PD044 and the other checks over files), default `collect.srcPath`. The
852
+ * catalog `collect` writes still comes from `collect.srcPath`, and PD004
616
853
  * compares the catalog on disk with that one.
617
854
  */
618
855
  readonly srcPath?: readonly string[];
619
856
  readonly sensitiveActions?: readonly string[];
620
857
  readonly memberships?: string;
621
- /** A JSON fixture `{ credentials?, settings? }` of API-key credentials and per-tenant settings (the `memorySettingsSource` input) for PD029. */
858
+ /**
859
+ * A JSON fixture `{ credentials?, settings? }` of API-key credentials and
860
+ * per-tenant settings (the `memorySettingsSource` input) for PD029.
861
+ */
622
862
  readonly credentials?: string;
623
- /** Globs or directories whose files are client entries for PD001, for frameworks with no `'use client'` convention. */
863
+ /**
864
+ * Globs or directories whose files are client entries for PD001, for
865
+ * frameworks with no `'use client'` convention.
866
+ */
624
867
  readonly clientEntries?: readonly string[];
625
- /** Globs or directories of SQL migrations PD022 scans for views; defaults to the usual migration folders. */
868
+ /**
869
+ * Globs or directories of SQL migrations PD022 scans for views; defaults to
870
+ * the usual migration folders.
871
+ */
626
872
  readonly migrations?: readonly string[];
627
- /** A JSON array of sample decoded token claims; PD039 measures each `supabase.hook.claims` entry in it. */
873
+ /**
874
+ * A JSON array of sample decoded token claims; PD039 measures each
875
+ * `supabase.hook.claims` entry in it.
876
+ */
628
877
  readonly claims?: string;
878
+ /**
879
+ * Tables two resources map to on purpose, over disjoint rows; PD075 skips
880
+ * them.
881
+ */
882
+ readonly sharedTables?: readonly string[];
629
883
  };
630
884
  type PermDockConfig = {
631
885
  readonly permissions?: string;
632
886
  readonly policy?: string;
633
- /** A module exporting the `defineOperations` map as `operations` or default; `collect` writes it to the catalog's `operations`. */
887
+ /**
888
+ * A module exporting the `defineOperations` map as `operations` or default;
889
+ * `collect` writes it to the catalog's `operations`.
890
+ */
634
891
  readonly operations?: string;
635
892
  readonly collect?: CollectConfig;
636
893
  readonly catalog?: CatalogConfig;
@@ -641,16 +898,40 @@ type PermDockConfig = {
641
898
  readonly supabase?: SupabaseConfig;
642
899
  readonly powersync?: PowerSyncConfig;
643
900
  readonly doctor?: DoctorConfig;
901
+ readonly gen?: GenConfig;
902
+ };
903
+ /** What `permdock gen --kind` writes. */
904
+ type GenKind = "zod" | "valibot" | "arktype" | "json-schema" | "standard-schema" | "constants" | "factories" | "react" | "vue" | "svelte" | "solid" | "messages";
905
+ /** `permdock gen` input. */
906
+ type GenConfig = {
907
+ /** The directory the generated files go to; default `src/generated`. */
908
+ readonly out?: string;
909
+ /** The kinds `permdock gen` writes without `--kind`; default `['constants']`. */
910
+ readonly kinds?: readonly GenKind[];
911
+ /**
912
+ * The schema kinds also export `<resource>Fields`: per field its `label`,
913
+ * `required`, enum `options` and bounds, for forms.
914
+ */
915
+ readonly fieldMeta?: boolean;
644
916
  };
645
- /** `permdock powersync generate` and `verify` input. Tables and memberships come from `rls`. */
917
+ /**
918
+ * `permdock powersync generate` and `verify` input. Tables and memberships come
919
+ * from `rls`.
920
+ */
646
921
  type PowerSyncConfig = {
647
922
  /** The Sync Streams file; default `sync-config.yaml`. */
648
923
  readonly out?: string;
649
- /** Resources that get a stream; default every resource with a grant of `action`. */
924
+ /**
925
+ * Resources that get a stream; default every resource with a grant of
926
+ * `action`.
927
+ */
650
928
  readonly resources?: readonly string[];
651
929
  /** The action whose grants decide which rows sync; default `read`. */
652
930
  readonly action?: string;
653
- /** Where `generate` writes `localSnapshotManifest(policy)` as JSON for `localSnapshot` and `powerSyncSource`; none by default. */
931
+ /**
932
+ * Where `generate` writes `localSnapshotManifest(policy)` as JSON for
933
+ * `localSnapshot` and `powerSyncSource`; none by default.
934
+ */
654
935
  readonly manifest?: string;
655
936
  };
656
937
  type CliIo = {
@@ -683,11 +964,11 @@ type PermDockPluginOptions = {
683
964
  readonly collect?: CollectConfig;
684
965
  readonly onDrift?: "error" | "warn";
685
966
  /**
686
- * Unplugin only: compare instead of write in `buildStart`, failing the
687
- * build on drift (as `permdock collect --check` does). The Next plugin
688
- * checks in `phase-production-build` unless `PERMDOCK_COLLECT=write`.
967
+ * Unplugin only: compare instead of write in `buildStart`, failing the build
968
+ * on drift (as `permdock collect --check` does). The Next plugin checks in
969
+ * `phase-production-build` unless `PERMDOCK_COLLECT=write`.
689
970
  */
690
971
  readonly check?: boolean;
691
972
  };
692
973
  //#endregion
693
- export { RunResult as _, PermDockPluginOptions as a, RlsConfig as c, RlsMembershipTable as d, RlsMemberships as f, RlsTarget as g, RlsSuspension as h, PermDockConfig as i, RlsDialect as l, RlsSuspendedScope as m, CliIo as n, RlsActiveRow as o, RlsSuspendedMembership as p, CollectConfig as r, RlsApiKeys as s, CatalogConfig as t, RlsFunctionMapping as u };
974
+ export { RlsSuspension as _, GenKind as a, RlsActiveRow as c, RlsDialect as d, RlsFunctionMapping as f, RlsSuspendedScope as g, RlsSuspendedMembership as h, GenConfig as i, RlsApiKeys as l, RlsMemberships as m, CliIo as n, PermDockConfig as o, RlsMembershipTable as p, CollectConfig as r, PermDockPluginOptions as s, CatalogConfig as t, RlsConfig as u, RlsTarget as v, RunResult as y };