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,43 +1,45 @@
1
- import { o as hasConditionOp } from "./refs-CNJBiTFo.js";
2
- import { c as listPermissions, h as formerKeys } from "./permission-registry-DpPtSKNZ.js";
3
- import { u as isPrincipalRelation } from "./resource-relations-D_jw0BFx.js";
1
+ import { o as hasConditionOp } from "./refs-C8BKxc_e.js";
2
+ import { c as listPermissions, h as formerKeys } from "./permission-registry-B8tYxPIt.js";
3
+ import { u as isPrincipalRelation } from "./resource-relations-8-pCScBO.js";
4
4
  import { t as canonicalJson } from "./canonical-json-DwilZ1iB.js";
5
- import { f as scopeList, o as normalizeMemberships, s as resolveScope } from "./scopes-BHsc-wp-.js";
6
- import { o as flattenGrantee } from "./grantee-BrRANrpT.js";
7
- import { l as separationConflicts } from "./policy-DaJy4nK4.js";
8
- import { T as validateCustomRole } from "./evaluate-B_oqFbWC.js";
9
- import { s as parseCredential } from "./credential-CIM7wHwA.js";
10
- import { a as describeError } from "./errors-DpP_U6Bf.js";
11
- import { t as policyRowConditionKeys } from "./row-conditions-h2HythXQ.js";
12
- import { a as rel, n as doctorSrcPath, o as sqlFiles, r as listSourceFiles } from "./files-D_JIzUrP.js";
13
- import { i as DOCTOR_REPORT_SCHEMA } from "./version-CEbQ5UeM.js";
14
- import { c as jsonSchemaOf, i as catalogOAuthScopes } from "./catalog-doc-CV9s6B1S.js";
15
- import { a as loadModule, i as loadConfiguredPolicy, n as asPolicy, s as pickNamed } from "./load-DxroEzH1.js";
16
- import { r as runCollect } from "./collect-BaWeMjwV.js";
5
+ import { f as scopeList, o as normalizeMemberships, s as resolveScope } from "./scopes-0Up_UA2t.js";
6
+ import { o as flattenGrantee } from "./grantee-Dke-9rd1.js";
7
+ import { u as separationConflicts } from "./policy-CLQ8__GF.js";
8
+ import { T as validateCustomRole } from "./evaluate-Dd8Ta0Ie.js";
9
+ import { s as parseCredential } from "./credential-CyyyvCsL.js";
10
+ import { a as describeError } from "./errors-Vpu6rKHl.js";
11
+ import { t as policyRowConditionKeys } from "./row-conditions-BAGHOmVq.js";
12
+ import { a as rel, n as doctorSrcPath, o as sqlFiles, r as listSourceFiles } from "./files-BSjrtIHw.js";
13
+ import { i as DOCTOR_REPORT_SCHEMA } from "./version-DMQ0dnN5.js";
14
+ import { c as jsonSchemaOf, i as catalogOAuthScopes } from "./catalog-doc-DjMKzJp9.js";
15
+ import { a as loadModule, i as loadConfiguredPolicy, n as asPolicy, s as pickNamed } from "./load-DjSU5KXO.js";
17
16
  import { t as catalogPath } from "./catalog-path-CnI0XTFK.js";
18
- import { i as qualifySqlTable, s as quoteSqlLiteral } from "./sql-B96movIM.js";
19
- import { i as scopeMembershipTable } from "./compile-BAEO5bOk.js";
20
- import { n as supabaseTenantClaim } from "./budget-NbEtbJC_.js";
21
- import { d as keptKeys, r as PERMDOCK_SCHEMA } from "./sources-B-zYB4GS.js";
22
- import { t as parseCatalog } from "./parse-Ddhz2xf4.js";
23
- import "./markers-C6joDI3o.js";
24
- import { t as didYouMean } from "./args-CC3OwyHW.js";
25
- import { t as DOCS_BASE } from "./manifest-Dv6q4i5s.js";
26
- import { t as createStyle } from "./style-Cqo7-73x.js";
27
- import { r as findingOf } from "./output-DgSDLrta.js";
28
- import { i as runSkillsInstall } from "./skills-Dcjw9_1C.js";
17
+ import { r as runCollect } from "./collect-B7ZFAJU3.js";
18
+ import { i as qualifySqlTable, s as quoteSqlLiteral } from "./sql-0WjxIp9g.js";
19
+ import { a as scopeMembershipTable } from "./compile-EzEMB-7v.js";
20
+ import { n as supabaseTenantClaim } from "./budget-BELja5A9.js";
21
+ import { d as keptKeys, r as PERMDOCK_SCHEMA } from "./sources-CMAM-2A3.js";
22
+ import { t as parseCatalog } from "./parse-1_ZheTW5.js";
23
+ import "./markers-BeHZ4x9Q.js";
24
+ import { t as didYouMean } from "./args-0FrVs5EH.js";
25
+ import { t as DOCS_BASE } from "./manifest-Cgiq5oqc.js";
26
+ import { t as createStyle } from "./style-Ds11Hmk4.js";
27
+ import { a as nonEmptyOr, r as findingOf } from "./output-tkju6U7R.js";
28
+ import { i as runSkillsInstall } from "./skills-Bjj7BNEQ.js";
29
29
  import { n as MIGRATION_DIRS, t as DEFAULT_SENSITIVE_ACTIONS } from "./constants-DcJABbLW.js";
30
- import { l as partPath } from "./output-files-CCMdcFWb.js";
31
- import { _ as readSupabaseConfig, a as supabaseHookManifest, d as resolveSchemas, g as pd074, h as pd045, l as pd039, m as attrsPlan, n as hookOut, v as supabaseConfig } from "./supabase-hook-Dg0SrQWR.js";
32
- import { D as byKey, U as graphSqlName, o as guardedTables, r as unsatisfiedKinds, t as ownershipRules, z as contextRefs } from "./ownership-Z2LpxsGa.js";
30
+ import { l as partPath } from "./output-files-BIQ_9pIs.js";
31
+ import { _ as supabaseConfig, a as supabaseHookManifest, c as pd039, g as readSupabaseConfig, h as pd074, m as pd045, n as hookOut, p as attrsPlan, u as resolveSchemas } from "./supabase-hook-B-yXnzUl.js";
32
+ import { G as byKey, Q as graphSqlName, n as tableNameOf, o as graphPlan, r as tableNames } from "./tables-DeMNEy6V.js";
33
+ import { a as guardedTables, p as contextRefs, r as unsatisfiedKinds, t as ownershipRules } from "./ownership-B4L59T9u.js";
33
34
  import { t as membershipSourcesOf } from "./sources-qoIJQrJv.js";
34
- import { i as group, n as membershipColumns, o as sqlStatements, r as tableKey } from "./deciding-columns-DRo2QM6E.js";
35
- import { a as pd010, c as pd014, d as pd038, f as pd041, i as pd008, l as pd015, n as pd001, o as pd011, p as pd057, r as pd007, s as pd013, t as runUsage, u as pd036 } from "./usage-Bybmck7f.js";
36
- import { _ as helperTablePolicies, b as compileGrants, d as tableNames, i as graphPlan, m as ROW_CONDITION_FIX, u as tableNameOf, v as rowConditionMessage, x as tableFor, y as commandFor } from "./verify-pe8rL_Qw.js";
37
- import { t as FIELD_VIEWS } from "./fields-ClcQLrVc.js";
38
- import { a as streamOf, i as scopeSourcesOf, r as staleFiles, t as powersyncFiles } from "./powersync-53ryOZip.js";
39
- import { a as generateOptions, c as buildContext, n as inheritTargets, o as isRefusal, t as supautilsRejections } from "./supautils-MESd81bF.js";
40
- import { n as legacyHelperNames, r as retirePlan, t as legacyHelperCalls } from "./retire-Wj6dkyDE.js";
35
+ import { i as group, n as membershipColumns, o as sqlStatements, r as tableKey } from "./deciding-columns-NB4wcyBf.js";
36
+ import { t as resolveNames } from "./resolve-names-CF7xXLSG.js";
37
+ import { t as FIELD_VIEWS } from "./fields-D0vUI6dq.js";
38
+ import { a as pd010, c as pd014, d as pd038, f as pd041, i as pd008, l as pd015, n as pd001, o as pd011, p as pd057, r as pd007, s as pd013, t as runUsage, u as pd036 } from "./usage-CxEzS4ey.js";
39
+ import { d as rowConditionMessage, f as commandFor, m as tableFor, p as compileGrants, s as ROW_CONDITION_FIX, u as helperTablePolicies } from "./verify-DZeqoWu5.js";
40
+ import { a as streamOf, i as scopeSourcesOf, r as staleFiles, t as powersyncFiles } from "./powersync-DHNQX06W.js";
41
+ import { a as generateOptions, c as buildContext, n as inheritTargets, o as isRefusal, t as supautilsRejections } from "./supautils-BU-pAEpf.js";
42
+ import { n as legacyHelperNames, r as retirePlan, t as legacyHelperCalls } from "./retire-B2xffQgY.js";
41
43
  import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
42
44
  import { basename, dirname, join, resolve } from "node:path";
43
45
  import { createRequire } from "node:module";
@@ -171,7 +173,10 @@ function membershipsFixture(input) {
171
173
  //#endregion
172
174
  //#region src/cli/doctor/assignments.ts
173
175
  const TRIGGER = new RegExp(String.raw`^create\s+(?:or\s+replace\s+)?trigger\s+"?permdock_assignment"?\s[\s\S]*?\bon\s+((?:"[^"]+"|\w+)(?:\.(?:"[^"]+"|\w+))?)`, "iu");
174
- /** The tables a `permdock_assignment` trigger is created on in the migrations and the `rls generate` output. */
176
+ /**
177
+ * The tables a `permdock_assignment` trigger is created on in the migrations
178
+ * and the `rls generate` output.
179
+ */
175
180
  function triggeredTables(input) {
176
181
  const out = input.config.rls?.out ?? "rls.sql";
177
182
  const files = sqlFiles(input.cwd, [...input.config.doctor?.migrations ?? MIGRATION_DIRS, ...new Set([
@@ -187,10 +192,10 @@ function triggeredTables(input) {
187
192
  return tables;
188
193
  }
189
194
  /**
190
- * PD064: `rls.assignments` guards a table (a membership table, the
191
- * global-roles table or a listed table) that no `permdock_assignment`
192
- * trigger is created on in the migrations or the `rls generate` output, so a
193
- * client may write any role there.
195
+ * PD064: `rls.assignments` guards a table (a membership table, the global-roles
196
+ * table or a listed table) that no `permdock_assignment` trigger is created on
197
+ * in the migrations or the `rls generate` output, so a client may write any
198
+ * role there.
194
199
  */
195
200
  async function pd064(input) {
196
201
  if (input.config.rls?.assignments === void 0) return [];
@@ -209,8 +214,8 @@ async function pd064(input) {
209
214
  //#endregion
210
215
  //#region src/cli/doctor/catalog.ts
211
216
  /**
212
- * A policy that declares `oauthScopes` against a catalog on disk without
213
- * them, or with another set. `authorizationProvider` builds better-supabase's
217
+ * A policy that declares `oauthScopes` against a catalog on disk without them,
218
+ * or with another set. `authorizationProvider` builds better-supabase's
214
219
  * `delegation.scopes` from the catalog, so its SQL checks deny a token that
215
220
  * holds only the coarse scope.
216
221
  */
@@ -291,6 +296,72 @@ async function pd067(input) {
291
296
  }]));
292
297
  }
293
298
  //#endregion
299
+ //#region src/cli/doctor/config-names.ts
300
+ const PLACEHOLDER = /\{([^{}]*)\}/gu;
301
+ /** The scope aliases `ScopeNames` admits next to the declared names. */
302
+ const ALIASES = ["tenant", "team"];
303
+ function keysOf(record) {
304
+ return record === void 0 ? [] : Object.keys(record);
305
+ }
306
+ function named(where, kind, names) {
307
+ return names.map((name) => ({
308
+ where,
309
+ kind,
310
+ name
311
+ }));
312
+ }
313
+ function namedIn(config) {
314
+ const rls = config.rls;
315
+ return [
316
+ ...named("rls.tables", "resource", keysOf(rls?.tables)),
317
+ ...named("rls.scopeTypes", "scope", keysOf(rls?.scopeTypes)),
318
+ ...named("rls.actions", "action", keysOf(rls?.actions)),
319
+ ...named("rls.memberships.scopes", "scope", keysOf(rls?.memberships?.scopes)),
320
+ ...named("rls.suspension.scopes", "scope", keysOf(rls?.suspension?.scopes)),
321
+ ...Object.keys(rls?.realtime?.topics ?? {}).flatMap((pattern) => named(`rls.realtime.topics['${pattern}']`, "scope", [...pattern.matchAll(PLACEHOLDER)].map((match) => match[1] ?? ""))),
322
+ ...Object.entries(rls?.storage?.buckets ?? {}).flatMap(([name, bucket]) => named(`rls.storage.buckets.${name}.scope`, "scope", [bucket.scope])),
323
+ ...named("powersync.resources", "resource", config.powersync?.resources ?? []),
324
+ ...named("powersync.action", "action", config.powersync?.action === void 0 ? [] : [config.powersync.action])
325
+ ];
326
+ }
327
+ /**
328
+ * PD077: a config key or value names a scope, resource or action the policy
329
+ * does not declare, such as a Realtime topic `{organisation}` placeholder for
330
+ * the scope `organization`. `defineConfig` with the policy value reports the
331
+ * same names at compile time. Also a SQL helper name `resolveNames` rejects:
332
+ * two sources sharing one, or one Postgres cannot hold.
333
+ */
334
+ async function pd077(input) {
335
+ if (input.config.policy === void 0) return [];
336
+ const policy = await policyOf(input);
337
+ if (policy === void 0) return [];
338
+ const leaves = listPermissions(policy.vocabulary.permissions);
339
+ const declared = {
340
+ scope: /* @__PURE__ */ new Set([...policy.scopes.map((scope) => scope.name), ...ALIASES]),
341
+ resource: new Set(leaves.map((leaf) => leaf.resource)),
342
+ action: new Set(leaves.map((leaf) => leaf.action))
343
+ };
344
+ return [...namedIn(input.config).filter((entry) => !declared[entry.kind].has(entry.name)).map((entry) => ({
345
+ code: "PD077",
346
+ severity: "error",
347
+ message: `${entry.where} names the ${entry.kind} '${entry.name}', which the policy does not declare`,
348
+ fix: `use one of ${[...declared[entry.kind]].toSorted().join(", ")}, or pass the policy value to defineConfig to catch this at compile time`
349
+ })), ...helperNames(policy, input.config)];
350
+ }
351
+ function helperNames(policy, config) {
352
+ try {
353
+ resolveNames(policy, config);
354
+ return [];
355
+ } catch (cause) {
356
+ return [{
357
+ code: "PD077",
358
+ severity: "error",
359
+ message: describeError(cause).replace(/^PermDock CLI: /u, ""),
360
+ fix: "rename the scope or resource so each generated SQL helper has its own name of at most 63 bytes"
361
+ }];
362
+ }
363
+ }
364
+ //#endregion
294
365
  //#region src/cli/doctor/declarative.ts
295
366
  const SCHEMAS = "supabase/schemas";
296
367
  const MIGRATIONS = "supabase/migrations";
@@ -302,7 +373,10 @@ const CALLS_HELPER = /\b(?:permdock_has|(?:permitted|member)_[a-z][a-z0-9_]*_ids
302
373
  function uncommented(text) {
303
374
  return text.replaceAll(/--[^\n]*/gu, "").replaceAll(/\/\*[\s\S]*?\*\//gu, "");
304
375
  }
305
- /** Whether `text` starts with a line `rls generate` or `supabase hook generate` writes. */
376
+ /**
377
+ * Whether `text` starts with a line `rls generate` or `supabase hook generate`
378
+ * writes.
379
+ */
306
380
  function generatedByPermDock(text) {
307
381
  return text.startsWith("-- permdock:") || text.startsWith("-- generated by permdock");
308
382
  }
@@ -310,9 +384,9 @@ function generatedByPermDock(text) {
310
384
  * PD042: under migra, a hook declared under `supabase/schemas` reaches the
311
385
  * database through `supabase db diff`, which drops its `supabase_auth_admin`
312
386
  * grants. pg-delta keeps them, so the check runs only for `migra`. A function
313
- * created (or dropped and created again) without them is executable by
314
- * `public` and not by the auth server, so a migration at or after the one
315
- * that creates it must carry the grants.
387
+ * created (or dropped and created again) without them is executable by `public`
388
+ * and not by the auth server, so a migration at or after the one that creates
389
+ * it must carry the grants.
316
390
  */
317
391
  function pd042(cwd, config, files = nodeFiles) {
318
392
  if (config.supabase?.hook === void 0 || resolveSchemas(cwd, config).mode !== "migra") return [];
@@ -340,10 +414,10 @@ function generatedSchemaFiles(cwd, schemaDir, files) {
340
414
  }
341
415
  /**
342
416
  * PD068: PermDock generates for pg-delta (the default), but
343
- * `supabase/config.toml` does not set `[experimental.pgdelta] enabled =
344
- * true`, so Supabase CLI 2.x diffs the schema files with migra. migra drops
345
- * the hook's `supabase_auth_admin` grants and the helpers' privileges, and
346
- * PermDock wrote no `--grants-out` file to restore them.
417
+ * `supabase/config.toml` does not set `[experimental.pgdelta] enabled = true`,
418
+ * so Supabase CLI 2.x diffs the schema files with migra. migra drops the hook's
419
+ * `supabase_auth_admin` grants and the helpers' privileges, and PermDock wrote
420
+ * no `--grants-out` file to restore them.
347
421
  */
348
422
  function pd068(cwd, config, files = nodeFiles) {
349
423
  const read = readSupabaseConfig(cwd);
@@ -362,8 +436,8 @@ function pd068(cwd, config, files = nodeFiles) {
362
436
  /**
363
437
  * PD069: leftovers of declarative schemas on migra in a pg-delta project:
364
438
  * `[db.migrations] schema_paths`, which pg-delta's dependency order makes
365
- * unnecessary, and numbered `NNN_permdock_<part>.sql` files that duplicate
366
- * the per-schema layout `rls generate --split` now writes.
439
+ * unnecessary, and numbered `NNN_permdock_<part>.sql` files that duplicate the
440
+ * per-schema layout `rls generate --split` now writes.
367
441
  */
368
442
  function pd069(cwd, config, files = nodeFiles) {
369
443
  const schemas = resolveSchemas(cwd, config);
@@ -383,20 +457,26 @@ function pd069(cwd, config, files = nodeFiles) {
383
457
  });
384
458
  return findings;
385
459
  }
386
- /** The `[db.migrations] schema_paths` globs of `supabase/config.toml`, or Supabase's default. */
460
+ /**
461
+ * The `[db.migrations] schema_paths` globs of `supabase/config.toml`, or
462
+ * Supabase's default.
463
+ */
387
464
  function schemaPaths(cwd) {
388
465
  const paths = supabaseConfig(cwd).schemaPaths ?? [];
389
466
  return paths.length === 0 ? ["./schemas/**/*.sql"] : paths;
390
467
  }
391
- /** Schema files in the order `supabase db diff` applies them: each glob in turn, sorted within it. */
468
+ /**
469
+ * Schema files in the order `supabase db diff` applies them: each glob in turn,
470
+ * sorted within it.
471
+ */
392
472
  function orderedSchemaFiles(cwd) {
393
473
  return sqlFiles(join(cwd, "supabase"), schemaPaths(cwd), { order: "entry" });
394
474
  }
395
475
  /**
396
- * PD043: under migra, `db diff` applies schema files in `schema_paths`
397
- * order, so a policy that calls `permdock_has` or `permitted_<scope>_ids`
398
- * before the file that defines them fails to apply. pg-delta orders by
399
- * dependencies instead.
476
+ * PD043: under migra, `db diff` applies schema files in `schema_paths` order,
477
+ * so a policy that calls `permdock_has` or `permitted_<scope>_ids` before the
478
+ * file that defines them fails to apply. pg-delta orders by dependencies
479
+ * instead.
400
480
  */
401
481
  function pd043(cwd, config, files = nodeFiles) {
402
482
  if (resolveSchemas(cwd, config).mode !== "migra") return [];
@@ -477,7 +557,7 @@ async function pd018(input) {
477
557
  for (const conflict of separationConflicts(policy, record.memberships ?? [])) findings.push({
478
558
  code: "PD018",
479
559
  severity: "warning",
480
- message: `membership ${conflict.principal || "unknown"} holds exclusive roles ${conflict.roles.join(" and ")}`,
560
+ message: `membership ${nonEmptyOr(conflict.principal, "unknown")} holds exclusive roles ${conflict.roles.join(" and ")}`,
481
561
  fix: "remove one of the exclusive roles from the membership fixture"
482
562
  });
483
563
  return findings;
@@ -512,9 +592,9 @@ async function pd023(input) {
512
592
  return findings;
513
593
  }
514
594
  /**
515
- * PD055: a stored custom role names a permission by a key it was renamed
516
- * from. It still resolves; the alias can only be dropped once storage holds
517
- * the current key.
595
+ * PD055: a stored custom role names a permission by a key it was renamed from.
596
+ * It still resolves; the alias can only be dropped once storage holds the
597
+ * current key.
518
598
  */
519
599
  async function pd055(input) {
520
600
  const files = filesOf(input);
@@ -540,7 +620,10 @@ async function pd055(input) {
540
620
  });
541
621
  return findings;
542
622
  }
543
- /** Fixture API keys that never expire, credential policies that allow it, and records that are not v1 credentials. */
623
+ /**
624
+ * Fixture API keys that never expire, credential policies that allow it, and
625
+ * records that are not v1 credentials.
626
+ */
544
627
  function pd029(input) {
545
628
  const parsed = readFixture(input, input.config.doctor?.credentials);
546
629
  const findings = [];
@@ -606,7 +689,10 @@ const ROUTE_GLOBS = ["**/api/permdock/route.{ts,tsx,js,jsx,mjs}"];
606
689
  const ENDPOINT = /\bendpoint\s*(?::|=)\s*\{?\s*['"`]/u;
607
690
  const NATIVE_IMPORT = /\bfrom\s*['"]permdock\/react-native['"]/u;
608
691
  const CLIENT_READS = /* @__PURE__ */ new Set(["usePermission", "reference"]);
609
- /** A grant the snapshot marks `portable: false`, so a client check needs the endpoint. */
692
+ /**
693
+ * A grant the snapshot marks `portable: false`, so a client check needs the
694
+ * endpoint.
695
+ */
610
696
  function serverOnly(policy, grant) {
611
697
  if (!grant.portable || hasConditionOp(grant.where, "related")) return true;
612
698
  const relations = policy.resources.get(grant.permission.resource)?.relations;
@@ -621,7 +707,10 @@ function serverOnlyKeys(policy) {
621
707
  for (const grant of [...policy.grants, ...policy.roles.flatMap((binding) => binding.grants)]) if (grant.hosted === void 0 && grant.effect === "allow" && serverOnly(policy, grant)) keys.add(grant.permission.key);
622
708
  return keys;
623
709
  }
624
- /** An `app/**\/api/permdock/route.ts` that exports `permdockHandler`'s result, or an `endpoint` string in the source. */
710
+ /**
711
+ * An `app/**\/api/permdock/route.ts` that exports `permdockHandler`'s result,
712
+ * or an `endpoint` string in the source.
713
+ */
625
714
  function hasEndpoint(files, cwd, sources) {
626
715
  if (listSourceFiles(cwd, ROUTE_GLOBS).filter((file) => /(?:^|[\\/])app[\\/]/u.test(rel(cwd, file))).some((file) => files.read(file).includes("permdockHandler"))) return true;
627
716
  return sources.some((file) => ENDPOINT.test(files.read(file)));
@@ -753,11 +842,14 @@ async function pd019(input) {
753
842
  fix: "set rls.authorize: 'database', or lower [auth] jwt_expiry in supabase/config.toml to 3600 or less"
754
843
  }];
755
844
  }
756
- /** Fixture memberships the policy's scopes would drop: an undeclared scope, a missing parent id, mixed shapes. */
757
845
  /**
758
- * A scope whose roles can all be removed can end up with nobody able to
759
- * manage it. Setting `min` on any of its roles (even `min: 0`) records the
760
- * decision and silences the warning.
846
+ * Fixture memberships the policy's scopes would drop: an undeclared scope, a
847
+ * missing parent id, mixed shapes.
848
+ */
849
+ /**
850
+ * A scope whose roles can all be removed can end up with nobody able to manage
851
+ * it. Setting `min` on any of its roles (even `min: 0`) records the decision
852
+ * and silences the warning.
761
853
  */
762
854
  async function pd026(input) {
763
855
  if (input.config.policy === void 0) return [];
@@ -833,7 +925,10 @@ async function pd035(input) {
833
925
  }
834
926
  //#endregion
835
927
  //#region src/cli/doctor/powersync.ts
836
- /** Why each membership source of a scope the streams read through sources has no stream form, once per source. */
928
+ /**
929
+ * Why each membership source of a scope the streams read through sources has no
930
+ * stream form, once per source.
931
+ */
837
932
  function sourceGaps(policy, config) {
838
933
  const scopes = scopeList(policy.scopes);
839
934
  const sources = membershipSourcesOf(config);
@@ -849,10 +944,10 @@ function sourceGaps(policy, config) {
849
944
  }
850
945
  /**
851
946
  * PD058: `sync-config.yaml` or the `powersync.manifest` file is not what the
852
- * policy compiles to, so PowerSync syncs rows, or the device builds
853
- * snapshots, by an older policy. A policy that does not compile is a finding
854
- * too, and so is each membership source of a synced scope with no stream
855
- * form: its members sync none of the rows it grants.
947
+ * policy compiles to, so PowerSync syncs rows, or the device builds snapshots,
948
+ * by an older policy. A policy that does not compile is a finding too, and so
949
+ * is each membership source of a synced scope with no stream form: its members
950
+ * sync none of the rows it grants.
856
951
  */
857
952
  async function pd058(input) {
858
953
  const { cwd, config } = input;
@@ -912,7 +1007,10 @@ function isWorkspaceRoot(files, dir) {
912
1007
  return false;
913
1008
  }
914
1009
  }
915
- /** Whether `dir` holds a skills lock: PermDock's own, or the `skills` CLI's naming the `permdock` skill. */
1010
+ /**
1011
+ * Whether `dir` holds a skills lock: PermDock's own, or the `skills` CLI's
1012
+ * naming the `permdock` skill.
1013
+ */
916
1014
  function hasSkillsLock(files, dir) {
917
1015
  if (files.exists(join(dir, ".permdock/skills-lock.json"))) return true;
918
1016
  const shared = join(dir, "skills-lock.json");
@@ -1017,10 +1115,10 @@ const ALTER_VIEW = new RegExp(String.raw`\balter\s+view\s+(?:if\s+exists\s+)?${V
1017
1115
  const INVOKER = /\bsecurity_invoker\s*(?:=\s*(?:true|on|'true'|'on'|1)\b|[,)]|$)/iu;
1018
1116
  const COMPANION = new RegExp(String.raw`\bcomment\s+on\s+view\s+${VIEW_NAME}\s+is\s+'${FIELD_VIEWS.comment}\b`, "giu");
1019
1117
  /**
1020
- * Views run as their owner unless `security_invoker` is set, so they read
1021
- * past RLS on the tables beneath them. The `<table>_visible_fields`
1022
- * companion `rls generate --revoke-columns` writes reads as its owner on
1023
- * purpose and carries a comment that says so.
1118
+ * Views run as their owner unless `security_invoker` is set, so they read past
1119
+ * RLS on the tables beneath them. The `<table>_visible_fields` companion `rls
1120
+ * generate --revoke-columns` writes reads as its owner on purpose and carries a
1121
+ * comment that says so.
1024
1122
  */
1025
1123
  function pd022(cwd, config, files = nodeFiles) {
1026
1124
  if (config.rls === void 0 && config.doctor?.migrations === void 0) return [];
@@ -1048,9 +1146,9 @@ function pd022(cwd, config, files = nodeFiles) {
1048
1146
  }
1049
1147
  const AUTH_ROLE = /\bauth\.role\s*\(\s*\)/giu;
1050
1148
  /**
1051
- * PD040: `auth.role()` in a migration. Supabase deprecated it; a policy
1052
- * names its Postgres roles with `to authenticated` instead, and the role
1053
- * claim it reads is the one PostgREST already switched to.
1149
+ * PD040: `auth.role()` in a migration. Supabase deprecated it; a policy names
1150
+ * its Postgres roles with `to authenticated` instead, and the role claim it
1151
+ * reads is the one PostgREST already switched to.
1054
1152
  */
1055
1153
  function pd040(cwd, config, files = nodeFiles) {
1056
1154
  const findings = [];
@@ -1087,10 +1185,10 @@ function applyPrivilege(writable, verb, part) {
1087
1185
  const CREATE_TABLE$1 = /^create\s+(?:(?:global|local)\s+)?(?:(?:temp|temporary|unlogged)\s+)?table\s+(?:if\s+not\s+exists\s+)?((?:"[^"]+"|\w+)(?:\.(?:"[^"]+"|\w+))?)\s*\(/iu;
1088
1186
  const REVOKE_DEFAULT_TABLES = /^alter\s+default\s+privileges\s+(?:for\s+(?:role|user)\s+[\w\s,"]+?\s+)?in\s+schema\s+"?public"?\s+revoke\s+[\s\S]+?\s+on\s+tables\s+from\s+[\s\S]*\b(?:anon|authenticated)\b/iu;
1089
1187
  /**
1090
- * Columns of `table` a client role may insert or update, per the migrations
1091
- * in order; `*` for every column. On Supabase a table created in `public`
1092
- * starts writable: the default privileges grant `anon` and `authenticated`
1093
- * everything, until a migration revokes them.
1188
+ * Columns of `table` a client role may insert or update, per the migrations in
1189
+ * order; `*` for every column. On Supabase a table created in `public` starts
1190
+ * writable: the default privileges grant `anon` and `authenticated` everything,
1191
+ * until a migration revokes them.
1094
1192
  */
1095
1193
  function clientWritable(files, cwd, config, target) {
1096
1194
  const writable = {
@@ -1119,7 +1217,10 @@ function clientWritable(files, cwd, config, target) {
1119
1217
  }
1120
1218
  return /* @__PURE__ */ new Set([...writable.insert, ...writable.update]);
1121
1219
  }
1122
- /** Membership columns a client can write: a user who sets `user_id` or `role` grants themselves access. */
1220
+ /**
1221
+ * Membership columns a client can write: a user who sets `user_id` or `role`
1222
+ * grants themselves access.
1223
+ */
1123
1224
  function membershipFindings(files, cwd, config) {
1124
1225
  const findings = [];
1125
1226
  for (const [table, columns] of membershipColumns(config)) {
@@ -1227,7 +1328,10 @@ async function pd020(input) {
1227
1328
  fix: "remove them from hostable, or drop their tables from rls.tables and enforce them in the application"
1228
1329
  }];
1229
1330
  }
1230
- /** Columns of `resource` a field-limited read grant can hide: missing from an allow's list, or on a deny's. */
1331
+ /**
1332
+ * Columns of `resource` a field-limited read grant can hide: missing from an
1333
+ * allow's list, or on a deny's.
1334
+ */
1231
1335
  function limitedColumns(policy, resource, actions) {
1232
1336
  const reads = policy.grants.filter((grant) => grant.permission.resource === resource && grant.fields !== void 0 && commandFor(grant.permission.action, actions) === "select");
1233
1337
  const node = policy.resources.get(resource);
@@ -1239,8 +1343,8 @@ function limitedColumns(policy, resource, actions) {
1239
1343
  }
1240
1344
  /**
1241
1345
  * `fields` redact in the application; RLS is row-level unless field views
1242
- * compile, and a field view protects nothing while the base table still
1243
- * returns the columns to a direct read.
1346
+ * compile, and a field view protects nothing while the base table still returns
1347
+ * the columns to a direct read.
1244
1348
  */
1245
1349
  async function pd030(input) {
1246
1350
  const rls = input.config.rls;
@@ -1272,9 +1376,9 @@ async function pd030(input) {
1272
1376
  return findings;
1273
1377
  }
1274
1378
  /**
1275
- * A self-parented resource no `through` grant walks, or a `restricted`
1276
- * column no graph grant reaches: the declaration has no effect on any
1277
- * decision, and `rls generate` keeps no closure for it.
1379
+ * A self-parented resource no `through` grant walks, or a `restricted` column
1380
+ * no graph grant reaches: the declaration has no effect on any decision, and
1381
+ * `rls generate` keeps no closure for it.
1278
1382
  */
1279
1383
  async function pd031(input) {
1280
1384
  if (input.config.policy === void 0) return [];
@@ -1302,8 +1406,8 @@ async function pd031(input) {
1302
1406
  }
1303
1407
  /**
1304
1408
  * Under an `rls` config, a graph resource `rls generate` cannot name a helper
1305
- * for: one that shares a scope's name (its `permitted_<name>_ids` would
1306
- * replace the scope helper) or is not a lowercase SQL name.
1409
+ * for: one that shares a scope's name (its `permitted_<name>_ids` would replace
1410
+ * the scope helper) or is not a lowercase SQL name.
1307
1411
  */
1308
1412
  async function pd032(input) {
1309
1413
  if (input.config.rls === void 0 || input.config.policy === void 0) return [];
@@ -1359,10 +1463,10 @@ async function pd034(input) {
1359
1463
  }));
1360
1464
  }
1361
1465
  /**
1362
- * PD076: `rls.actions` entries set to `'none'` that change nothing: a verb
1363
- * that is not one of the six default verbs and does not read as a write
1364
- * compiles to no policy anyway, and a verb no permission uses compiles to
1365
- * nothing at all. A write-sounding `none` stays, because it silences PD071.
1466
+ * PD076: `rls.actions` entries set to `'none'` that change nothing: a verb that
1467
+ * is not one of the six default verbs and does not read as a write compiles to
1468
+ * no policy anyway, and a verb no permission uses compiles to nothing at all. A
1469
+ * write-sounding `none` stays, because it silences PD071.
1366
1470
  */
1367
1471
  async function pd076(input) {
1368
1472
  const actions = input.config.rls?.actions;
@@ -1385,8 +1489,9 @@ async function pd076(input) {
1385
1489
  }]];
1386
1490
  }
1387
1491
  /**
1388
- * Storage and Realtime policies written outside PermDock that call the SQL helpers for a permission whose grants
1389
- * carry row conditions: the helpers check only role and scope.
1492
+ * Storage and Realtime policies written outside PermDock that call the SQL
1493
+ * helpers for a permission whose grants carry row conditions: the helpers check
1494
+ * only role and scope.
1390
1495
  */
1391
1496
  async function pd037(input) {
1392
1497
  const files = filesOf(input);
@@ -1423,7 +1528,10 @@ const WRITE_VERB_PREFIXES = [
1423
1528
  "confirm",
1424
1529
  "pause"
1425
1530
  ];
1426
- /** `verb` starts with a write prefix that ends at a word boundary: `markPaid`, not `market`. */
1531
+ /**
1532
+ * `verb` starts with a write prefix that ends at a word boundary: `markPaid`,
1533
+ * not `market`.
1534
+ */
1427
1535
  function suggestsWrite(verb) {
1428
1536
  return WRITE_VERB_PREFIXES.some((prefix) => {
1429
1537
  if (!verb.startsWith(prefix)) return false;
@@ -1449,8 +1557,8 @@ async function pd071(input) {
1449
1557
  }));
1450
1558
  }
1451
1559
  /**
1452
- * PD072: a membership source reads role keys through the table of custom
1453
- * roles (`rls.customRoleWrites.roles`), which tenants write.
1560
+ * PD072: a membership source reads role keys through the table of custom roles
1561
+ * (`rls.customRoleWrites.roles`), which tenants write.
1454
1562
  */
1455
1563
  function pd072(input) {
1456
1564
  const roles = input.config.rls?.customRoleWrites?.roles;
@@ -1524,14 +1632,20 @@ const SEED_FUNCTION = /^create\s+(?:or\s+replace\s+)?function\s+(?:"[^"]+"|\w+)\
1524
1632
  function rowKey(values) {
1525
1633
  return values.join(" ");
1526
1634
  }
1527
- /** The statements of a file, with the body of `<schema>.seed()` (`rls.seeds: 'function'`) in place of its `create function`. */
1635
+ /**
1636
+ * The statements of a file, with the body of `<schema>.seed()` (`rls.seeds:
1637
+ * 'function'`) in place of its `create function`.
1638
+ */
1528
1639
  function seedStatements(sql) {
1529
1640
  return sqlStatements(sql).flatMap((statement) => {
1530
1641
  const fn = SEED_FUNCTION.exec(statement.text);
1531
1642
  return fn === null ? [statement] : sqlStatements(group(fn, 2));
1532
1643
  });
1533
1644
  }
1534
- /** The rows of the last statement that seeds or clears `table`, in migration order. */
1645
+ /**
1646
+ * The rows of the last statement that seeds or clears `table`, in migration
1647
+ * order.
1648
+ */
1535
1649
  function lastSeed(files, cwd, config, table) {
1536
1650
  let seeded;
1537
1651
  for (const file of sqlFiles(cwd, config.doctor?.migrations ?? MIGRATION_DIRS)) for (const { text } of seedStatements(files.read(file))) {
@@ -1558,8 +1672,8 @@ function sample(rows) {
1558
1672
  return rows.slice(0, 3).map((row) => `(${row})`).join(", ");
1559
1673
  }
1560
1674
  /**
1561
- * PD054: the `role_permissions` rows the migrations seed last are not the
1562
- * rows the policy compiles to, so the helpers answer from a stale policy.
1675
+ * PD054: the `role_permissions` rows the migrations seed last are not the rows
1676
+ * the policy compiles to, so the helpers answer from a stale policy.
1563
1677
  */
1564
1678
  async function pd054(input) {
1565
1679
  const { cwd, config } = input;
@@ -1649,7 +1763,10 @@ function pd046(cwd, config, files = nodeFiles) {
1649
1763
  }];
1650
1764
  }
1651
1765
  const USER_METADATA = /\b(raw_user_meta_data|user_metadata)\b/giu;
1652
- /** PD047: SQL that reads `user_metadata`, which every user can edit for themselves. */
1766
+ /**
1767
+ * PD047: SQL that reads `user_metadata`, which every user can edit for
1768
+ * themselves.
1769
+ */
1653
1770
  function pd047(cwd, config, files = nodeFiles) {
1654
1771
  if (!isSupabase(files, cwd, config)) return [];
1655
1772
  return migrationStatements(files, cwd, config).flatMap((statement) => [...statement.text.matchAll(USER_METADATA)].map((match) => ({
@@ -1673,7 +1790,10 @@ function createdFunctions(statements) {
1673
1790
  }];
1674
1791
  });
1675
1792
  }
1676
- /** PD048: a function without `set search_path`, so a caller's objects can shadow the ones it names. */
1793
+ /**
1794
+ * PD048: a function without `set search_path`, so a caller's objects can shadow
1795
+ * the ones it names.
1796
+ */
1677
1797
  function pd048(cwd, config, files = nodeFiles) {
1678
1798
  if (!isSupabase(files, cwd, config)) return [];
1679
1799
  const statements = migrationStatements(files, cwd, config);
@@ -1691,7 +1811,10 @@ function pd048(cwd, config, files = nodeFiles) {
1691
1811
  };
1692
1812
  });
1693
1813
  }
1694
- /** Roles each `revoke` statement takes `execute` from, per function key or `schema.*`. */
1814
+ /**
1815
+ * Roles each `revoke` statement takes `execute` from, per function key or
1816
+ * `schema.*`.
1817
+ */
1695
1818
  function revokedExecute(statements) {
1696
1819
  const revoked = /* @__PURE__ */ new Map();
1697
1820
  const add = (key, roles) => {
@@ -1713,7 +1836,10 @@ function revokedExecute(statements) {
1713
1836
  }
1714
1837
  return revoked;
1715
1838
  }
1716
- /** `supabase.hook.claims` and `hook.before` functions, by key, with the argument type the hook calls them with. */
1839
+ /**
1840
+ * `supabase.hook.claims` and `hook.before` functions, by key, with the argument
1841
+ * type the hook calls them with.
1842
+ */
1717
1843
  function hookClaimFunctions(config) {
1718
1844
  const hook = config.supabase?.hook;
1719
1845
  const before = hook?.before;
@@ -1725,9 +1851,9 @@ function hookClaimFunctions(config) {
1725
1851
  /**
1726
1852
  * PD049: a `security definer` function `public` (every role) or, in Supabase's
1727
1853
  * `public` schema, `anon` may still execute: Postgres grants `execute` to
1728
- * `public` on create, and Supabase's default privileges grant it to `anon`.
1729
- * A hook claim function returns any user's claims, so `authenticated` must
1730
- * not execute it either, definer or not.
1854
+ * `public` on create, and Supabase's default privileges grant it to `anon`. A
1855
+ * hook claim function returns any user's claims, so `authenticated` must not
1856
+ * execute it either, definer or not.
1731
1857
  */
1732
1858
  function pd049(cwd, config, files = nodeFiles) {
1733
1859
  if (!isSupabase(files, cwd, config)) return [];
@@ -1770,7 +1896,10 @@ function pd049(cwd, config, files = nodeFiles) {
1770
1896
  const CREATE_TABLE = new RegExp(String.raw`^create\s+(?:(?:global|local)\s+)?(?:(?:temp|temporary|unlogged)\s+)?table\s+(?:if\s+not\s+exists\s+)?${NAME}\s*\(`, "iu");
1771
1897
  const ENABLE_RLS = new RegExp(String.raw`^alter\s+table\s+(?:if\s+exists\s+)?(?:only\s+)?${NAME}[\s\S]*\benable\s+row\s+level\s+security\b`, "iu");
1772
1898
  const DROP_TABLE = /^drop\s+table\s+(?:if\s+exists\s+)?([\s\S]+?)(?:\s+(?:cascade|restrict))?$/iu;
1773
- /** PD050: a `public` table without row level security, which the Data API serves whole. */
1899
+ /**
1900
+ * PD050: a `public` table without row level security, which the Data API serves
1901
+ * whole.
1902
+ */
1774
1903
  function pd050(cwd, config, files = nodeFiles) {
1775
1904
  if (!isSupabase(files, cwd, config)) return [];
1776
1905
  const created = /* @__PURE__ */ new Map();
@@ -1798,7 +1927,10 @@ function pd050(cwd, config, files = nodeFiles) {
1798
1927
  }
1799
1928
  const CREATE_POLICY = new RegExp(String.raw`^create\s+policy\s+${IDENT}\s+on\s+${NAME}([\s\S]*)$`, "iu");
1800
1929
  const UNWRAPPED_AUTH = /(?<!\bselect\s{1,20})\bauth\.(uid|jwt)\s*\(\s*\)/giu;
1801
- /** PD051: a policy that calls `auth.uid()` or `auth.jwt()` bare, so Postgres runs it once per row. */
1930
+ /**
1931
+ * PD051: a policy that calls `auth.uid()` or `auth.jwt()` bare, so Postgres
1932
+ * runs it once per row.
1933
+ */
1802
1934
  function pd051(cwd, config, files = nodeFiles) {
1803
1935
  if (!isSupabase(files, cwd, config)) return [];
1804
1936
  return migrationStatements(files, cwd, config).flatMap((statement) => {
@@ -1814,7 +1946,10 @@ function pd051(cwd, config, files = nodeFiles) {
1814
1946
  }];
1815
1947
  });
1816
1948
  }
1817
- /** PD052: an update policy without `with check`, so nothing states what a row may become. */
1949
+ /**
1950
+ * PD052: an update policy without `with check`, so nothing states what a row
1951
+ * may become.
1952
+ */
1818
1953
  function pd052(cwd, config, files = nodeFiles) {
1819
1954
  if (!isSupabase(files, cwd, config)) return [];
1820
1955
  return migrationStatements(files, cwd, config).flatMap((statement) => {
@@ -1847,9 +1982,9 @@ function topLevelParts(body) {
1847
1982
  return parts.filter((part) => part !== "");
1848
1983
  }
1849
1984
  /**
1850
- * One column definition or table constraint of a `create table` body: its
1851
- * first column, whether it is a foreign key, and whether a primary key or
1852
- * unique constraint indexes that column.
1985
+ * One column definition or table constraint of a `create table` body: its first
1986
+ * column, whether it is a foreign key, and whether a primary key or unique
1987
+ * constraint indexes that column.
1853
1988
  */
1854
1989
  function tablePart(raw) {
1855
1990
  const part = raw.replace(/^constraint\s+(?:"[^"]+"|\w+)\s+/iu, "");
@@ -1873,7 +2008,10 @@ function firstColumn(list) {
1873
2008
  }
1874
2009
  const ADD_CONSTRAINT = new RegExp(String.raw`^alter\s+table\s+(?:if\s+exists\s+)?(?:only\s+)?${NAME}\s+add\s+(?:constraint\s+${IDENT}\s+)?(foreign\s+key|primary\s+key|unique)\s*\(([^)]*)\)`, "iu");
1875
2010
  const CREATE_INDEX = new RegExp(String.raw`^create\s+(?:unique\s+)?index\s+(?:concurrently\s+)?(?:if\s+not\s+exists\s+)?(?:${IDENT}\s+)?on\s+(?:only\s+)?${NAME}\s*(?:using\s+\w+\s*)?\(\s*${IDENT}`, "iu");
1876
- /** PD053: a foreign key no index starts with, so joins and deletes on the referenced row scan the table. */
2011
+ /**
2012
+ * PD053: a foreign key no index starts with, so joins and deletes on the
2013
+ * referenced row scan the table.
2014
+ */
1877
2015
  function pd053(cwd, config, files = nodeFiles) {
1878
2016
  if (!isSupabase(files, cwd, config)) return [];
1879
2017
  const keys = [];
@@ -1922,10 +2060,10 @@ function at(statement) {
1922
2060
  return `${statement.file}:${String(statement.line)}`;
1923
2061
  }
1924
2062
  /**
1925
- * PD062: SQL that reads or sets a per-claim `request.jwt.claim.<name>`
1926
- * setting. Current PostgREST, `withPostgresClient`, PermDock's `withSubject`
1927
- * and `rls verify` set only `request.jwt.claims`. A function replaced by a
1928
- * later migration is judged by its last definition.
2063
+ * PD062: SQL that reads or sets a per-claim `request.jwt.claim.<name>` setting.
2064
+ * Current PostgREST, `withPostgresClient`, PermDock's `withSubject` and `rls
2065
+ * verify` set only `request.jwt.claims`. A function replaced by a later
2066
+ * migration is judged by its last definition.
1929
2067
  */
1930
2068
  function pd062(cwd, config, files = nodeFiles) {
1931
2069
  if (!isSupabase(files, cwd, config)) return [];
@@ -1944,8 +2082,8 @@ function pd062(cwd, config, files = nodeFiles) {
1944
2082
  });
1945
2083
  }
1946
2084
  /**
1947
- * PD063: a migration statement supautils rejects for `postgres`, so
1948
- * `supabase db push` fails on it.
2085
+ * PD063: a migration statement supautils rejects for `postgres`, so `supabase
2086
+ * db push` fails on it.
1949
2087
  */
1950
2088
  function pd063(cwd, config, files = nodeFiles) {
1951
2089
  if (!isSupabase(files, cwd, config)) return [];
@@ -2003,9 +2141,9 @@ function pd066(cwd, config, files = nodeFiles) {
2003
2141
  //#endregion
2004
2142
  //#region src/cli/doctor/suspension.ts
2005
2143
  /**
2006
- * PD061: a suspended scope keeps permissions. Each scope's kept keys are
2007
- * listed for review, since its members hold them while the instance is
2008
- * suspended, and a key the definitions do not declare is named apart.
2144
+ * PD061: a suspended scope keeps permissions. Each scope's kept keys are listed
2145
+ * for review, since its members hold them while the instance is suspended, and
2146
+ * a key the definitions do not declare is named apart.
2009
2147
  */
2010
2148
  async function pd061(input) {
2011
2149
  const suspension = input.config.rls?.suspension;
@@ -2255,6 +2393,11 @@ const DOCTOR_CHECKS = [
2255
2393
  groups: ["rls"],
2256
2394
  run: pd076
2257
2395
  },
2396
+ {
2397
+ code: "PD077",
2398
+ groups: ["rls", "scopes"],
2399
+ run: pd077
2400
+ },
2258
2401
  {
2259
2402
  code: "PD028",
2260
2403
  groups: ["attrs", "supabase"],
@@ -2478,7 +2621,10 @@ async function runDoctor(input) {
2478
2621
  }))
2479
2622
  };
2480
2623
  }
2481
- /** PD059: the configured policy module throws or exports no policy, so every policy check is skipped. */
2624
+ /**
2625
+ * PD059: the configured policy module throws or exports no policy, so every
2626
+ * policy check is skipped.
2627
+ */
2482
2628
  async function pd059(project) {
2483
2629
  const load = await project.policyLoad();
2484
2630
  if (load.status !== "failed") return [];
@@ -2489,7 +2635,10 @@ async function pd059(project) {
2489
2635
  fix: "fix the module so it exports policy from definePolicy, or point policy in permdock.config.ts at the module that does"
2490
2636
  }];
2491
2637
  }
2492
- /** PD060: a source file under srcPath has a syntax error, so collect and usage miss what it references. */
2638
+ /**
2639
+ * PD060: a source file under srcPath has a syntax error, so collect and usage
2640
+ * miss what it references.
2641
+ */
2493
2642
  async function pd060(project) {
2494
2643
  return ((await project.collected()).scan?.unparsed ?? []).map((item) => ({
2495
2644
  code: "PD060",
@@ -2498,7 +2647,10 @@ async function pd060(project) {
2498
2647
  fix: "fix the syntax error, or exclude the file from collect.srcPath"
2499
2648
  }));
2500
2649
  }
2501
- /** A usage message for the first `--only` value that names no check code or group. */
2650
+ /**
2651
+ * A usage message for the first `--only` value that names no check code or
2652
+ * group.
2653
+ */
2502
2654
  function unknownOnly(wanted) {
2503
2655
  const known = /* @__PURE__ */ new Set();
2504
2656
  for (const check of DOCTOR_CHECKS) {