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,9 +1,9 @@
1
1
  import { t as compact } from "../compact-CAf557ZB.js";
2
- import { r as PermDockRevokedError } from "../errors-BKy0EfhN.js";
3
- import { l as InvalidSignatureError, p as webBotAuthVerifier, u as discoverViaSignatureAgent } from "../evaluations-DReoiVBw.js";
4
- import { t as problemFromError } from "../map-error-BQGyDm_M.js";
5
- import { r as bindKernel } from "../bind-D1nO6fiC.js";
6
- import { a as onRevoked, n as closeReason, r as guardIterable, t as POLICY_VIOLATION } from "../stream-CvdUS9V1.js";
2
+ import { r as PermDockRevokedError } from "../errors-B6R_lg2a.js";
3
+ import { l as InvalidSignatureError, p as webBotAuthVerifier, u as discoverViaSignatureAgent } from "../evaluations-IBceAeKT.js";
4
+ import { t as problemFromError } from "../map-error-pasIGqMT.js";
5
+ import { r as bindKernel } from "../bind-D_sZSVA3.js";
6
+ import { a as onRevoked, n as closeReason, r as guardIterable, t as POLICY_VIOLATION } from "../stream-CDvF0sJm.js";
7
7
  import { Hono } from "hono";
8
8
  //#region src/hono/create.ts
9
9
  function socket(connection, events) {
@@ -1,6 +1,9 @@
1
- import { T as Policy, a as ApprovalRequirement, mr as Condition, wn as Grantee } from "./policy-types-B-F-qAZk.js";
1
+ import { T as Policy, a as ApprovalRequirement, mr as Condition, wn as Grantee } from "./policy-types-CCiDRZBH.js";
2
2
  //#region src/core/hosted.d.ts
3
- /** One grant authored in PermDock Cloud; its grantee is a declared role, plan or relation. */
3
+ /**
4
+ * One grant authored in PermDock Cloud; its grantee is a declared role, plan or
5
+ * relation.
6
+ */
4
7
  type HostedGrant = {
5
8
  readonly id: string;
6
9
  readonly permission: string;
@@ -12,9 +15,9 @@ type HostedGrant = {
12
15
  readonly fields?: readonly string[];
13
16
  };
14
17
  /**
15
- * PolicyDocument v1. Signed as a `vnd.permdock.policy+jwt`, the `policy`
16
- * claim carries every field but `id` and `issuedAt`, which are the token's
17
- * `jti` and `iat` (`policyDocumentFromClaims`).
18
+ * PolicyDocument v1. Signed as a `vnd.permdock.policy+jwt`, the `policy` claim
19
+ * carries every field but `id` and `issuedAt`, which are the token's `jti` and
20
+ * `iat` (`policyDocumentFromClaims`).
18
21
  */
19
22
  type PolicyDocument = {
20
23
  readonly v: 1;
@@ -27,17 +30,20 @@ type PolicyDocument = {
27
30
  readonly grants: readonly HostedGrant[];
28
31
  };
29
32
  /**
30
- * The channel for hosted grants. `getPermDock` reads `current()` once;
31
- * the application calls `refresh()` on its own schedule, never a check.
33
+ * The channel for hosted grants. `getPermDock` reads `current()` once; the
34
+ * application calls `refresh()` on its own schedule, never a check.
32
35
  */
33
36
  type PolicySource = {
34
37
  /** Names the implementation in errors and events. */
35
38
  readonly name?: string;
36
- current(): PolicyDocument | null;
37
- refresh(): Promise<void>;
39
+ current: () => PolicyDocument | null;
40
+ refresh: () => Promise<void>;
38
41
  };
39
42
  type HostedGrantDropReason = "not-hostable" | "unknown-permission" | "unknown-grantee" | "non-portable" | "weaker-approval" | "invalid";
40
- /** Reported through `on('error')` when a hosted grant is not merged; never thrown. */
43
+ /**
44
+ * Reported through `on('error')` when a hosted grant is not merged; never
45
+ * thrown.
46
+ */
41
47
  type HostedGrantDropped = {
42
48
  readonly kind: "hosted-grant-dropped";
43
49
  readonly document: string;
@@ -47,9 +53,15 @@ type HostedGrantDropped = {
47
53
  declare function memoryPolicySource(document?: PolicyDocument | null): PolicySource;
48
54
  /** Validates the document envelope; per-grant checks happen at merge time. */
49
55
  declare function parsePolicyDocument(json: unknown): PolicyDocument;
50
- /** The document verified `vnd.permdock.policy+jwt` claims carry: `policy`, with `jti` as `id` and `iat` as `issuedAt`. Throws like `parsePolicyDocument`. */
56
+ /**
57
+ * The document verified `vnd.permdock.policy+jwt` claims carry: `policy`, with
58
+ * `jti` as `id` and `iat` as `issuedAt`. Throws like `parsePolicyDocument`.
59
+ */
51
60
  declare function policyDocumentFromClaims(claims: Readonly<Record<string, unknown>>): PolicyDocument;
52
- /** True for the portable subset only: no `opaque`, no `sqlFunction`, no unknown op. */
61
+ /**
62
+ * True for the portable subset only: no `opaque`, no `sqlFunction`, no unknown
63
+ * op.
64
+ */
53
65
  declare function isPortableCondition(value: unknown): value is Condition;
54
66
  type HostedGrantCheck = {
55
67
  readonly ok: true;
@@ -59,24 +71,24 @@ type HostedGrantCheck = {
59
71
  };
60
72
  /**
61
73
  * Whether `mergeHostedGrants` would keep one candidate hosted grant, and the
62
- * drop reason it would report when not. Needs no `PolicyDocument`, so a
63
- * grant form can check a grant before it publishes one.
74
+ * drop reason it would report when not. Needs no `PolicyDocument`, so a grant
75
+ * form can check a grant before it publishes one.
64
76
  */
65
77
  declare function checkHostedGrant(policy: Policy, grant: unknown): HostedGrantCheck;
66
78
  /**
67
- * The code policy plus the hosted grants that pass every rule. Hosted
68
- * allows OR with code allows and any deny still wins, so a hosted grant can
69
- * never override a code deny; one that fails a rule is dropped, not thrown.
79
+ * The code policy plus the hosted grants that pass every rule. Hosted allows OR
80
+ * with code allows and any deny still wins, so a hosted grant can never
81
+ * override a code deny; one that fails a rule is dropped, not thrown.
70
82
  */
71
83
  declare function mergeHostedGrants(policy: Policy, document: PolicyDocument | null): {
72
84
  readonly policy: Policy;
73
85
  readonly dropped: readonly HostedGrantDropped[];
74
86
  };
75
87
  /**
76
- * Hosted grants as an instance option: `policies: hostedPolicies(source)`.
77
- * The merge code ships only with an app that imports this function.
78
- * `source.current()` is read once per instance; a throw keeps the code
79
- * policy and is reported as an error event.
88
+ * Hosted grants as an instance option: `policies: hostedPolicies(source)`. The
89
+ * merge code ships only with an app that imports this function.
90
+ * `source.current()` is read once per instance; a throw keeps the code policy
91
+ * and is reported as an error event.
80
92
  */
81
93
  type HostedPolicies = {
82
94
  readonly feature: "hosted-policies";
@@ -1,13 +1,13 @@
1
1
  import { r as isRecord, t as compact } from "./compact-CAf557ZB.js";
2
- import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
3
- import { n as isForbiddenKey, s as splitPath } from "./paths-DXSHAMIa.js";
4
- import { a as deny, i as completeGrant, n as role, p as normalizeWhere, r as allow } from "./role-builder-C1VJzvcr.js";
5
- import { a as getResource, n as findPermission } from "./permission-registry-DpPtSKNZ.js";
6
- import { d as isSelfParented } from "./resource-relations-D_jw0BFx.js";
7
- import { a as durationOf, l as isRfc3339, m as rfc3339 } from "./time-DkWjdL98.js";
8
- import { r as sha256Digest } from "./sha256-D9ihqmvd.js";
9
- import { _ as listPlans, m as findRole, o as flattenGrantee } from "./grantee-BrRANrpT.js";
10
- import { i as indexPolicy, t as declaredRoleNames } from "./policy-DaJy4nK4.js";
2
+ import { n as freezeDeep } from "./freeze-jjan0lCv.js";
3
+ import { n as isForbiddenKey, s as splitPath } from "./paths-CUvURzHp.js";
4
+ import { a as deny, i as completeGrant, n as role, p as normalizeWhere, r as allow } from "./role-builder-BK2-T6oD.js";
5
+ import { a as getResource, n as findPermission } from "./permission-registry-B8tYxPIt.js";
6
+ import { d as isSelfParented } from "./resource-relations-8-pCScBO.js";
7
+ import { a as durationOf, l as isRfc3339, m as rfc3339 } from "./time-nR1JesoH.js";
8
+ import { r as sha256Digest } from "./sha256-C-4WXKIu.js";
9
+ import { _ as listPlans, m as findRole, o as flattenGrantee } from "./grantee-Dke-9rd1.js";
10
+ import { a as indexPolicy, n as declaredRoleNames } from "./policy-CLQ8__GF.js";
11
11
  //#region src/core/hosted.ts
12
12
  function memoryPolicySource(document = null) {
13
13
  const current = document === null ? null : parsePolicyDocument(document);
@@ -37,7 +37,10 @@ function parsePolicyDocument(json) {
37
37
  if (typeof copy["id"] !== "string" || typeof copy["fingerprint"] !== "string" || typeof copy["catalog"] !== "string" || !isRfc3339(copy["issuedAt"]) || !Array.isArray(copy["grants"])) throw new TypeError("PermDock: malformed policy document");
38
38
  return freezeDeep(copy);
39
39
  }
40
- /** The document verified `vnd.permdock.policy+jwt` claims carry: `policy`, with `jti` as `id` and `iat` as `issuedAt`. Throws like `parsePolicyDocument`. */
40
+ /**
41
+ * The document verified `vnd.permdock.policy+jwt` claims carry: `policy`, with
42
+ * `jti` as `id` and `iat` as `issuedAt`. Throws like `parsePolicyDocument`.
43
+ */
41
44
  function policyDocumentFromClaims(claims) {
42
45
  const claim = claims["policy"];
43
46
  const jti = claims["jti"];
@@ -71,7 +74,10 @@ function portableValue(value) {
71
74
  if (keys[0] === "ref") return safePath(value["ref"]);
72
75
  return keys[0] === "date" && typeof value["date"] === "string";
73
76
  }
74
- /** True for the portable subset only: no `opaque`, no `sqlFunction`, no unknown op. */
77
+ /**
78
+ * True for the portable subset only: no `opaque`, no `sqlFunction`, no unknown
79
+ * op.
80
+ */
75
81
  function isPortableCondition(value) {
76
82
  if (!isRecord(value) || typeof value["op"] !== "string") return false;
77
83
  const op = value["op"];
@@ -105,7 +111,10 @@ function approvalRank(approval) {
105
111
  escalates: approval.escalation !== void 0
106
112
  };
107
113
  }
108
- /** A hosted approval must meet every approval a code allow requires on the permission. */
114
+ /**
115
+ * A hosted approval must meet every approval a code allow requires on the
116
+ * permission.
117
+ */
109
118
  function approvalAtLeast(hosted, code) {
110
119
  const mine = approvalRank(hosted);
111
120
  for (const required of code) {
@@ -120,11 +129,17 @@ function approvalAtLeast(hosted, code) {
120
129
  }
121
130
  return true;
122
131
  }
123
- /** A grantee kind this build does not know is never declared, so the hosted grant is dropped. */
132
+ /**
133
+ * A grantee kind this build does not know is never declared, so the hosted
134
+ * grant is dropped.
135
+ */
124
136
  function undeclaredKind(_grantee) {
125
137
  return false;
126
138
  }
127
- /** Whether a hosted grant may name `grantee` on a permission of `permissionResource`. */
139
+ /**
140
+ * Whether a hosted grant may name `grantee` on a permission of
141
+ * `permissionResource`.
142
+ */
128
143
  function declaredGrantee(policy, grantee, permissionResource) {
129
144
  switch (grantee.kind) {
130
145
  case "role": return declaredRoleNames(policy).has(grantee.role);
@@ -157,7 +172,10 @@ function granteesAcceptable(policy, raw, permissionResource) {
157
172
  const items = flattenGrantee(raw);
158
173
  return items.length > 0 && items.every((item) => isRecord(item) && item.kind !== "relation" && (item.kind === "authenticated" || declaredGrantee(policy, item, permissionResource)));
159
174
  }
160
- /** The approvals the code allows on `key` carry; a hosted allow must meet each one. */
175
+ /**
176
+ * The approvals the code allows on `key` carry; a hosted allow must meet each
177
+ * one.
178
+ */
161
179
  function codeApprovals(policy, key) {
162
180
  return policy.grants.filter((grant) => grant.effect === "allow" && grant.hosted === void 0 && grant.permission.key === key).map((grant) => grant.approval);
163
181
  }
@@ -246,8 +264,8 @@ const CHECKED_DOCUMENT = Object.freeze({
246
264
  });
247
265
  /**
248
266
  * Whether `mergeHostedGrants` would keep one candidate hosted grant, and the
249
- * drop reason it would report when not. Needs no `PolicyDocument`, so a
250
- * grant form can check a grant before it publishes one.
267
+ * drop reason it would report when not. Needs no `PolicyDocument`, so a grant
268
+ * form can check a grant before it publishes one.
251
269
  */
252
270
  function checkHostedGrant(policy, grant) {
253
271
  const result = buildGrant(policy, CHECKED_DOCUMENT, grant);
@@ -256,7 +274,10 @@ function checkHostedGrant(policy, grant) {
256
274
  reason: result.reason
257
275
  };
258
276
  }
259
- /** The grants of `document` that `policy` drops, in document order; `permdock/catalog` turns them into drift findings. */
277
+ /**
278
+ * The grants of `document` that `policy` drops, in document order;
279
+ * `permdock/catalog` turns them into drift findings.
280
+ */
260
281
  function hostedGrantDrops(policy, document) {
261
282
  return document.grants.flatMap((raw) => {
262
283
  const result = buildGrant(policy, document, raw);
@@ -269,9 +290,9 @@ function hostedGrantDrops(policy, document) {
269
290
  });
270
291
  }
271
292
  /**
272
- * The code policy plus the hosted grants that pass every rule. Hosted
273
- * allows OR with code allows and any deny still wins, so a hosted grant can
274
- * never override a code deny; one that fails a rule is dropped, not thrown.
293
+ * The code policy plus the hosted grants that pass every rule. Hosted allows OR
294
+ * with code allows and any deny still wins, so a hosted grant can never
295
+ * override a code deny; one that fails a rule is dropped, not thrown.
275
296
  */
276
297
  function mergeHostedGrants(policy, document) {
277
298
  if (document === null || document.grants.length === 0) return {
@@ -1,4 +1,4 @@
1
- import { i as headersFrom, n as firstHeader, t as fetchRequest } from "./http-BBoKefeS.js";
1
+ import { i as headersFrom, n as firstHeader, t as fetchRequest } from "./http-DKLXrFGk.js";
2
2
  //#region src/node/http.ts
3
3
  function toRequest(req, stream = req) {
4
4
  const host = firstHeader(req.headers.host) ?? "localhost";
@@ -9,9 +9,9 @@ function chunkOf(chunk) {
9
9
  return typeof chunk === "string" ? Buffer.from(chunk) : new Uint8Array(chunk);
10
10
  }
11
11
  /**
12
- * Pull-based with `highWaterMark: 0`: nothing is read from `req` until the
13
- * Web body is consumed, so a later body parser (multer, `express.json()`)
14
- * still sees the whole stream.
12
+ * Pull-based with `highWaterMark: 0`: nothing is read from `req` until the Web
13
+ * body is consumed, so a later body parser (multer, `express.json()`) still
14
+ * sees the whole stream.
15
15
  */
16
16
  function incomingBody(req) {
17
17
  return new ReadableStream({ pull(controller) {
@@ -1,5 +1,8 @@
1
1
  //#region src/server/http.ts
2
- /** Node-style headers (`IncomingHttpHeaders`, Fastify's) as Fetch `Headers`; repeated values stay separate. */
2
+ /**
3
+ * Node-style headers (`IncomingHttpHeaders`, Fastify's) as Fetch `Headers`;
4
+ * repeated values stay separate.
5
+ */
3
6
  function headersFrom(source) {
4
7
  const headers = new Headers();
5
8
  for (const [key, value] of Object.entries(source)) {
@@ -16,9 +19,9 @@ function firstHeader(value) {
16
19
  return value?.[0];
17
20
  }
18
21
  /**
19
- * A body a framework already parsed, as the text a Fetch `Request` carries.
20
- * A non-string body is serialised as JSON and, without a `content-type`,
21
- * labelled `application/json` on `headers`.
22
+ * A body a framework already parsed, as the text a Fetch `Request` carries. A
23
+ * non-string body is serialised as JSON and, without a `content-type`, labelled
24
+ * `application/json` on `headers`.
22
25
  */
23
26
  function parsedBody(body, headers) {
24
27
  if (body === void 0) return;
@@ -27,8 +30,8 @@ function parsedBody(body, headers) {
27
30
  return JSON.stringify(body);
28
31
  }
29
32
  /**
30
- * A Fetch `Request` for a framework request. A `GET` or `HEAD` carries no
31
- * body; otherwise the body the framework parsed, or else `stream()`.
33
+ * A Fetch `Request` for a framework request. A `GET` or `HEAD` carries no body;
34
+ * otherwise the body the framework parsed, or else `stream()`.
32
35
  */
33
36
  function fetchRequest(url, method, headers, body, stream) {
34
37
  if (method === "GET" || method === "HEAD") return new Request(url, {
@@ -64,7 +67,10 @@ function requestFromContext(context) {
64
67
  if ("request" in context && context.request instanceof Request) return context.request;
65
68
  if ("req" in context && context.req instanceof Request) return context.req;
66
69
  }
67
- /** Whether the caller sent credentials, which turns a `401` into a `WWW-Authenticate` challenge. */
70
+ /**
71
+ * Whether the caller sent credentials, which turns a `401` into a
72
+ * `WWW-Authenticate` challenge.
73
+ */
68
74
  function hasCredentials(request) {
69
75
  return request instanceof Request ? request.headers.has("authorization") : request.headers.authorization !== void 0;
70
76
  }
@@ -1,15 +1,18 @@
1
1
  import { t as timeoutSignal } from "./timeout-D51niuQP.js";
2
- import { a as describeError, n as CliError } from "./errors-DpP_U6Bf.js";
3
- import { s as cliVersion } from "./version-CEbQ5UeM.js";
4
- import "./device-BARQ8eYG.js";
2
+ import { a as describeError, n as CliError } from "./errors-Vpu6rKHl.js";
3
+ import { s as cliVersion } from "./version-DMQ0dnN5.js";
4
+ import "./device-BwbJNmb2.js";
5
5
  //#region src/cli/core/http.ts
6
- /** `permdock-cli/<version> node/<version> <platform>`, sent on every request the CLI makes. */
6
+ /**
7
+ * `permdock-cli/<version> node/<version> <platform>`, sent on every request the
8
+ * CLI makes.
9
+ */
7
10
  function userAgent() {
8
11
  return `permdock-cli/${cliVersion()} node/${process.versions.node} ${process.platform}`;
9
12
  }
10
13
  /**
11
- * Every outbound request: the user agent, a timeout joined to the run's
12
- * abort signal, and a `network_error` CLI error when nothing answers.
14
+ * Every outbound request: the user agent, a timeout joined to the run's abort
15
+ * signal, and a `network_error` CLI error when nothing answers.
13
16
  */
14
17
  async function httpRequest(io, request) {
15
18
  const fetchImpl = io.fetch ?? globalThis.fetch.bind(globalThis);
@@ -31,8 +34,8 @@ async function httpRequest(io, request) {
31
34
  }
32
35
  }
33
36
  /**
34
- * A 401 or 403 as an `auth_required` action: the credential is missing,
35
- * expired or lacks a scope, and `next` says how to get one.
37
+ * A 401 or 403 as an `auth_required` action: the credential is missing, expired
38
+ * or lacks a scope, and `next` says how to get one.
36
39
  */
37
40
  function authFailure(response, message, next) {
38
41
  if (response.status !== 401 && response.status !== 403) return;
@@ -1,11 +1,11 @@
1
1
  import { r as isRecord } from "./compact-CAf557ZB.js";
2
- import { i as configError, u as usageResult } from "./errors-DpP_U6Bf.js";
3
- import { s as writeFileEnsuringDir } from "./files-D_JIzUrP.js";
4
- import { r as escapeSqlIdent, s as quoteSqlLiteral } from "./sql-B96movIM.js";
5
- import { C as parseMembershipsFlag, r as HELPERS } from "./shared-fMKOv8hP.js";
6
- import { f as pgConnector } from "./policies-B2lZIurj.js";
7
- import { t as FIELD_VIEWS } from "./fields-ClcQLrVc.js";
8
- import { n as emptySchema, r as isSchemaKind, t as emitPermissionsModule } from "./generate-CNU1pIOo.js";
2
+ import { i as configError, u as usageResult } from "./errors-Vpu6rKHl.js";
3
+ import { s as writeFileEnsuringDir } from "./files-BSjrtIHw.js";
4
+ import { r as escapeSqlIdent, s as quoteSqlLiteral } from "./sql-0WjxIp9g.js";
5
+ import { C as parseMembershipsFlag, r as HELPERS } from "./shared-Afctg7B0.js";
6
+ import { n as pgConnector } from "./pg-DQTqRrou.js";
7
+ import { t as FIELD_VIEWS } from "./fields-D0vUI6dq.js";
8
+ import { n as emptySchema, r as isSchemaKind, t as emitPermissionsModule } from "./generate-CezbCaTI.js";
9
9
  import { existsSync, readFileSync } from "node:fs";
10
10
  import { resolve } from "node:path";
11
11
  import { createHash } from "node:crypto";
@@ -42,7 +42,10 @@ function funcName(value) {
42
42
  if (!Array.isArray(names) || names.length === 0) return;
43
43
  return names.map((item) => stringVal(item) ?? "").join(".");
44
44
  }
45
- /** The expression of a scalar `(select <expr>)`, the InitPlan form generate writes. */
45
+ /**
46
+ * The expression of a scalar `(select <expr>)`, the InitPlan form generate
47
+ * writes.
48
+ */
46
49
  function scalarSubselect(value) {
47
50
  const targets = asNode$1(asNode$1(asNode$1(asNode$1(unwrap(value))?.["SubLink"])?.["subselect"])?.["SelectStmt"])?.["targetList"];
48
51
  if (!Array.isArray(targets) || targets[0] === void 0) return;
@@ -175,7 +178,7 @@ async function fingerprintSql(sql) {
175
178
  const deparsed = await deparse(parsed);
176
179
  return createHash("sha256").update(deparsed).digest("hex").slice(0, 16);
177
180
  } catch {
178
- return createHash("sha256").update(sql.replaceAll(/\s+/g, " ").trim().toLowerCase()).digest("hex").slice(0, 16);
181
+ return createHash("sha256").update(sql.replaceAll(/\s+/gu, " ").trim().toLowerCase()).digest("hex").slice(0, 16);
179
182
  }
180
183
  }
181
184
  function nodeStmt(first) {
@@ -192,7 +195,10 @@ function jwtClaim(value) {
192
195
  const claim = constValue(expr["rexpr"]);
193
196
  return typeof claim === "string" ? claim : void 0;
194
197
  }
195
- /** `auth.jwt()` / `auth.session()`, bare or as a scalar `(select …)`; a column's `->>` is row data, not a claim. */
198
+ /**
199
+ * `auth.jwt()` / `auth.session()`, bare or as a scalar `(select …)`; a column's
200
+ * `->>` is row data, not a claim.
201
+ */
196
202
  function isJwtCall(value) {
197
203
  const inner = scalarSubselect(value);
198
204
  if (inner !== void 0) return isJwtCall(inner);
@@ -203,20 +209,15 @@ function isJwtCall(value) {
203
209
  //#region src/cli/rls/import-membership.ts
204
210
  /**
205
211
  * What the `where` of a membership subquery on `table` says, or `undefined`
206
- * when any part of it cannot be read as one. A subquery imports as
207
- * `memberOf` only when it binds the membership row to the signed-in user
208
- * and to the policy row, and filters roles with string literals at most:
209
- * a predicate left unread would widen the imported condition.
212
+ * when any part of it cannot be read as one. A subquery imports as `memberOf`
213
+ * only when it binds the membership row to the signed-in user and to the policy
214
+ * row, and filters roles with string literals at most: a predicate left unread
215
+ * would widen the imported condition.
210
216
  */
211
217
  function membershipRoles(subquery, table) {
212
218
  const where = selectWhere(subquery.select);
213
219
  if (where === void 0) return;
214
- const scopeColumns = new Set([
215
- ...Object.values(table.columns ?? {}),
216
- table.tenant,
217
- table.team,
218
- table.id
219
- ].filter((column) => column !== void 0));
220
+ const scopeColumns = new Set([...Object.values(table.columns ?? {}), table.id].filter((column) => column !== void 0));
220
221
  if (subquery.field !== void 0 && !scopeColumns.has(selectTarget(subquery.select) ?? "")) return;
221
222
  const roleColumn = typeof table.role === "string" ? table.role : void 0;
222
223
  const roles = [];
@@ -393,7 +394,10 @@ function helperCall(value) {
393
394
  } : void 0;
394
395
  }
395
396
  const MEMBER = /^member_([a-z][a-z0-9_]*)_ids$/u;
396
- /** `col in (select member_<scope>_ids())`: any live membership of the row's instance. */
397
+ /**
398
+ * `col in (select member_<scope>_ids())`: any live membership of the row's
399
+ * instance.
400
+ */
397
401
  function memberCall(value) {
398
402
  const sub = asNode$1(asNode$1(unwrap(value))?.["SubLink"]);
399
403
  const kind = sub?.["subLinkType"];
@@ -442,8 +446,8 @@ function helperCalls(conjunct) {
442
446
  /**
443
447
  * The role structure of a policy that calls the helpers: each OR branch's
444
448
  * helper calls become grants (roles from the `role_permissions` seeds), the
445
- * branch's other conjuncts become their `where`. Restrictive policies are
446
- * read through their outer `not`.
449
+ * branch's other conjuncts become their `where`. Restrictive policies are read
450
+ * through their outer `not`.
447
451
  */
448
452
  async function helperGrants(sql, memberships, functions, seeds) {
449
453
  if (sql === void 0) return [];
@@ -480,10 +484,10 @@ async function helperGrants(sql, memberships, functions, seeds) {
480
484
  else rest.push(mapped);
481
485
  }
482
486
  if (calls.length === 0) continue;
483
- const condition = !portable ? unportable : rest.length === 0 ? void 0 : rest.length === 1 ? rest[0] : {
487
+ const condition = portable ? rest.length === 0 ? void 0 : rest.length === 1 ? rest[0] : {
484
488
  op: "and",
485
489
  conditions: rest
486
- };
490
+ } : unportable;
487
491
  for (const call of calls) {
488
492
  const permission = seeds.find((seed) => seed.grantKey === call.key)?.permission ?? call.key.replace(/#[a-z0-9][a-z0-9_-]*$/u, "");
489
493
  grants.push({
@@ -543,10 +547,7 @@ function mapNode(value, ctx) {
543
547
  const subquery = membershipSubquery(node);
544
548
  if (subquery !== void 0) {
545
549
  const { table } = subquery;
546
- const mappedScopes = Object.entries(memberships?.scopes ?? {});
547
- if (memberships?.tenant !== void 0) mappedScopes.push(["tenant", memberships.tenant]);
548
- if (memberships?.team !== void 0) mappedScopes.push(["team", memberships.team]);
549
- const matches = mappedScopes.filter(([, mapped]) => mapped.table === table);
550
+ const matches = Object.entries(memberships?.scopes ?? {}).filter(([, mapped]) => mapped.table === table);
550
551
  if (matches.length > 0) {
551
552
  for (const [scope, mapped] of matches) {
552
553
  const read = membershipRoles(subquery, mapped);
@@ -631,7 +632,10 @@ function seedFromRow(row) {
631
632
  effect: row["effect"] === "deny" ? "deny" : "allow"
632
633
  };
633
634
  }
634
- /** `role_permissions` rows from the `insert ... values` statements of a SQL dump. */
635
+ /**
636
+ * `role_permissions` rows from the `insert ... values` statements of a SQL
637
+ * dump.
638
+ */
635
639
  async function seedsFromSql(sql) {
636
640
  let parsed;
637
641
  try {
@@ -754,7 +758,10 @@ function sourceOf(select) {
754
758
  companion: right
755
759
  };
756
760
  }
757
- /** A mask is `allow`, `not deny` or `allow and not deny`; the generator puts the deny last. */
761
+ /**
762
+ * A mask is `allow`, `not deny` or `allow and not deny`; the generator puts the
763
+ * deny last.
764
+ */
758
765
  function splitMask(mask) {
759
766
  const bool = asNode(asNode(mask)?.["BoolExpr"]);
760
767
  if (bool?.["boolop"] === "NOT_EXPR") return { deny: list(bool["args"])[0] };
@@ -778,9 +785,9 @@ async function grantsOf(node, memberships, functions, seeds) {
778
785
  }
779
786
  /**
780
787
  * Reads back the field views `rls generate --fields views` writes: a
781
- * `security_invoker` `<table>_visible` whose restricted columns are
782
- * `case when <mask> then col end`, either inline or through the
783
- * `<table>_visible_fields` companion it joins. Other views are ignored.
788
+ * `security_invoker` `<table>_visible` whose restricted columns are `case when
789
+ * <mask> then col end`, either inline or through the `<table>_visible_fields`
790
+ * companion it joins. Other views are ignored.
784
791
  */
785
792
  async function fieldViewsFromSql(sql, memberships, functions, seeds) {
786
793
  let stmts;
@@ -830,7 +837,10 @@ async function fieldViewsFromSql(sql, memberships, functions, seeds) {
830
837
  return out;
831
838
  }
832
839
  const quote = escapeSqlIdent;
833
- /** `create view` statements for every view in the database, from `pg_get_viewdef` and the view's options. */
840
+ /**
841
+ * `create view` statements for every view in the database, from
842
+ * `pg_get_viewdef` and the view's options.
843
+ */
834
844
  async function viewsSqlFromDb(query) {
835
845
  return (await query(`select n.nspname as schema, c.relname as name, c.reloptions as options, pg_get_viewdef(c.oid) as definition
836
846
  from pg_class c join pg_namespace n on n.oid = c.relnamespace
@@ -845,9 +855,9 @@ async function viewsSqlFromDb(query) {
845
855
  }
846
856
  //#endregion
847
857
  //#region src/cli/rls/import.ts
848
- const POLICY_RE = /create\s+policy\s+"?([A-Za-z0-9_]+)"?\s+on\s+"?([A-Za-z0-9_]+)"?([\s\S]*?);/gi;
858
+ const POLICY_RE = /create\s+policy\s+"?([A-Za-z0-9_]+)"?\s+on\s+"?([A-Za-z0-9_]+)"?([\s\S]*?);/giu;
849
859
  function extractParenClause(sql, keyword) {
850
- const match = new RegExp(`\\b${keyword}\\s*\\(`, "i").exec(sql);
860
+ const match = new RegExp(`\\b${keyword}\\s*\\(`, "iu").exec(sql);
851
861
  if (match?.index === void 0) return;
852
862
  const start = match.index + match[0].length;
853
863
  let depth = 1;
@@ -866,11 +876,11 @@ function splitPolicies(sql) {
866
876
  const name = match[1] ?? "policy";
867
877
  const table = match[2] ?? "table";
868
878
  const body = match[3] ?? "";
869
- const clauses = body.search(/\b(?:using|with\s+check)\s*\(/i);
879
+ const clauses = body.search(/\b(?:using|with\s+check)\s*\(/iu);
870
880
  const header = clauses === -1 ? body : body.slice(0, clauses);
871
- const asRestrictive = /\bas\s+restrictive\b/i.test(header);
872
- const cmdMatch = /\bfor\s+(all|select|insert|update|delete)\b/i.exec(header);
873
- const toMatch = /\bto\s+([^\n]+)/i.exec(header);
881
+ const asRestrictive = /\bas\s+restrictive\b/iu.test(header);
882
+ const cmdMatch = /\bfor\s+(all|select|insert|update|delete)\b/iu.exec(header);
883
+ const toMatch = /\bto\s+([^\n]+)/iu.exec(header);
874
884
  const using = extractParenClause(body, "using");
875
885
  const check = extractParenClause(body, "with\\s+check");
876
886
  const roles = (toMatch?.[1] ?? "authenticated").split(",").map((item) => item.trim()).filter((item) => item !== "");
@@ -922,7 +932,7 @@ function emitGenerated(catalog, fieldViews, schema) {
922
932
  resources: tables.map((table) => {
923
933
  const { actions, collection } = actionsFor(catalog.filter((item) => item.table === table).map((item) => item.cmd));
924
934
  return {
925
- path: [table.replaceAll(/[^A-Za-z0-9_]/g, "_")],
935
+ path: [table.replaceAll(/[^A-Za-z0-9_]/gu, "_")],
926
936
  schema: emptySchema(kind),
927
937
  actions,
928
938
  collection
@@ -931,7 +941,7 @@ function emitGenerated(catalog, fieldViews, schema) {
931
941
  });
932
942
  }
933
943
  function assertNoServiceRole(sql) {
934
- if (/\bto\s+service_role\b|\bfrom\s+service_role\b/i.test(sql)) throw configError("PermDock CLI: imported SQL must never target service_role");
944
+ if (/\bto\s+service_role\b|\bfrom\s+service_role\b/iu.test(sql)) throw configError("PermDock CLI: imported SQL must never target service_role");
935
945
  }
936
946
  async function seedsFromDb(query) {
937
947
  const schema = (await query(`select table_schema from information_schema.tables where table_name = 'role_permissions' order by table_schema = 'permdock' desc, table_schema = 'public' desc, table_schema limit 1`)).rows[0]?.["table_schema"];
@@ -945,10 +955,13 @@ async function seedsFromDb(query) {
945
955
  return [];
946
956
  }
947
957
  }
948
- /** `pg_policies.roles` is a `name[]`, which `pg` returns as an array or, untyped, as `{a,b}`. */
958
+ /**
959
+ * `pg_policies.roles` is a `name[]`, which `pg` returns as an array or,
960
+ * untyped, as `{a,b}`.
961
+ */
949
962
  function policyRoles(value) {
950
963
  if (Array.isArray(value)) return value.map(String);
951
- return typeof value === "string" ? value.replaceAll(/[{}]/g, "").split(",").map((item) => item.trim()).filter((item) => item !== "") : [];
964
+ return typeof value === "string" ? value.replaceAll(/[{}]/gu, "").split(",").map((item) => item.trim()).filter((item) => item !== "") : [];
952
965
  }
953
966
  async function policiesFromDb(db, connect) {
954
967
  const client = await connect(db);
@@ -1011,7 +1024,11 @@ async function runRlsImport(input) {
1011
1024
  seeds = await seedsFromSql(sql);
1012
1025
  policies = splitPolicies(await canonicalDump(sql) ?? sql);
1013
1026
  if (policies.length === 0) policies = splitPolicies(sql);
1014
- } else if (input.db !== void 0) try {
1027
+ } else if (input.db === void 0) return {
1028
+ code: 2,
1029
+ output: "PermDock CLI: rls import needs --sql <file> or a database: --db-url-stdin, DATABASE_URL or SUPABASE_DB_URL"
1030
+ };
1031
+ else try {
1015
1032
  const fromDb = await policiesFromDb(input.db, input.connect ?? pgConnector("permdock rls import --db-url-stdin", input.cwd));
1016
1033
  policies = fromDb.policies;
1017
1034
  bodies = fromDb.bodies;
@@ -1020,10 +1037,6 @@ async function runRlsImport(input) {
1020
1037
  } catch (cause) {
1021
1038
  return usageResult(cause);
1022
1039
  }
1023
- else return {
1024
- code: 2,
1025
- output: "PermDock CLI: rls import needs --sql <file> or a database: --db-url-stdin, DATABASE_URL or SUPABASE_DB_URL"
1026
- };
1027
1040
  const memberships = parseMembershipsFlag(input.memberships) ?? input.config.rls?.memberships;
1028
1041
  const roleValues = input.config.rls?.roleValues;
1029
1042
  if (roleValues !== void 0) seeds = seeds.map((row) => {
@@ -1070,7 +1083,7 @@ function fieldViewHint(view) {
1070
1083
  return `field view ${view.view} over ${view.table}: ${view.restricted.map((item) => item.column).join(", ")} are field-limited; set fields on the read grants that list them (fieldViews export)`;
1071
1084
  }
1072
1085
  function membershipHint(table) {
1073
- return [`exists over ${table} stayed opaque; if it holds memberships, map it in permdock.config.ts:`, `// rls: { memberships: { tenant: { table: '${table}', user: 'user_id', tenant: 'tenant_id', role: 'role' } } }`].join("\n");
1086
+ return [`exists over ${table} stayed opaque; if it holds memberships, map it in permdock.config.ts:`, `// rls: { memberships: { scopes: { tenant: { table: '${table}', user: 'user_id', columns: { tenant: 'tenant_id' }, role: 'role' } } } }`].join("\n");
1074
1087
  }
1075
1088
  function uniqueHints(names, bodies) {
1076
1089
  const lines = [];
@@ -1,10 +1,10 @@
1
1
  import { r as isRecord } from "./compact-CAf557ZB.js";
2
- import { t as byCodePoint } from "./compare-pfyVnBjE.js";
3
- import { i as readJsonFile } from "./files-D_JIzUrP.js";
4
- import { t as applyFiles } from "./files-acUbNwWt.js";
5
- import { n as httpRequest } from "./http-Ca3Sr5x1.js";
6
- import { i as schemaExpression, t as emitPermissionsModule } from "./generate-CNU1pIOo.js";
7
- import { t as validateOpenapi } from "./schema-gIcCx7zM.js";
2
+ import { t as byCodePoint } from "./compare-DTfyUunF.js";
3
+ import { i as readJsonFile } from "./files-BSjrtIHw.js";
4
+ import { t as applyFiles } from "./files-B3AA05f1.js";
5
+ import { n as httpRequest } from "./http-DOL33cO0.js";
6
+ import { i as schemaExpression, t as emitPermissionsModule } from "./generate-CezbCaTI.js";
7
+ import { t as validateOpenapi } from "./schema-Dst9I9Gs.js";
8
8
  import { existsSync, readFileSync } from "node:fs";
9
9
  import { resolve } from "node:path";
10
10
  //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/browser/dist/nodes/identity.js