permdock 0.6.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (507) hide show
  1. package/README.md +2 -3
  2. package/dist/{2020-C9VN-x8c.js → 2020-CJbO8Bvz.js} +1 -3
  3. package/dist/a2a/index.d.ts +7 -7
  4. package/dist/a2a/index.js +9 -9
  5. package/dist/action-result-CL-QCITA.d.ts +19 -0
  6. package/dist/{adapter-context-CRhqyzCk.js → adapter-context-CIQpQxbE.js} +8 -2
  7. package/dist/{adoption-scan-DCYe60Pi.js → adoption-scan-BLs67P1l.js} +5 -5
  8. package/dist/agent/index.d.ts +3 -3
  9. package/dist/agent/index.js +1 -1
  10. package/dist/ai-sdk/index.d.ts +31 -10
  11. package/dist/ai-sdk/index.js +22 -12
  12. package/dist/{app-data-MuyzVqX8.js → app-data-UNNm07jV.js} +10 -7
  13. package/dist/{approval-header-CJACtHkv.js → approval-header-8QV6MU4H.js} +6 -3
  14. package/dist/{approval-prompt-Dg5LeAcT.js → approval-prompt-B8hQY69x.js} +5 -6
  15. package/dist/{approval-prompt-DvSSPQJX.d.ts → approval-prompt-PYagyQUj.d.ts} +13 -11
  16. package/dist/approvals/index.d.ts +5 -5
  17. package/dist/approvals/index.js +7 -7
  18. package/dist/{approvals-p1PGoVjb.js → approvals-DnIBTuXE.js} +128 -78
  19. package/dist/{approvers-CqPOLD-o.js → approvers-B4r0N_Uz.js} +8 -2
  20. package/dist/{arazzo-41WuzHou.js → arazzo-3RhGfkAK.js} +2 -2
  21. package/dist/{arazzo-CaUVBn7D.js → arazzo-B5-ulWif.js} +6 -6
  22. package/dist/{args-IIolxxKA.js → args-0FrVs5EH.js} +125 -8
  23. package/dist/astro/index.d.ts +30 -12
  24. package/dist/astro/index.js +2 -2
  25. package/dist/{audience-DabClFLQ.js → audience-BAkBDMqn.js} +8 -8
  26. package/dist/{auth-DRLEizbL.js → auth--yPyZNgr.js} +21 -10
  27. package/dist/authzen/index.d.ts +171 -25
  28. package/dist/authzen/index.js +321 -149
  29. package/dist/{automation-BNM3TtDo.d.ts → automation-DqEoWHBc.d.ts} +42 -32
  30. package/dist/{automation-DVjOckjV.js → automation-x3KEUusw.js} +22 -21
  31. package/dist/base-url-BQbddZO5.js +9 -0
  32. package/dist/better-auth/index.d.ts +2 -2
  33. package/dist/better-auth/index.js +13 -7
  34. package/dist/better-supabase/index.d.ts +392 -220
  35. package/dist/better-supabase/index.js +293 -152
  36. package/dist/{bind-DOyrv6zi.d.ts → bind-Cp2hBHzP.d.ts} +27 -12
  37. package/dist/{bind-CAvgUuKs.js → bind-D_sZSVA3.js} +22 -10
  38. package/dist/{body-CH5of8Ne.js → body-CJQwYVa8.js} +3 -3
  39. package/dist/{body-text-QcXok_SI.js → body-text-DQhcmqdY.js} +8 -4
  40. package/dist/{boundary-BM8a_P6E.js → boundary-BV3O1eud.js} +8 -2
  41. package/dist/{boundary-BmHxVH1J.d.ts → boundary-C9ck-3uK.d.ts} +13 -4
  42. package/dist/{budget-NbEtbJC_.js → budget-BELja5A9.js} +6 -3
  43. package/dist/{budget-JqcRqyhK.d.ts → budget-hYsPz_yE.d.ts} +6 -3
  44. package/dist/{build-instance-Bu_eDqYw.js → build-instance-CNWaYJyr.js} +3 -3
  45. package/dist/{canonical-json-BC8_nMTw.js → canonical-json-DwilZ1iB.js} +6 -3
  46. package/dist/{capability-N1K9IpqS.js → capability-BqX94r07.js} +31 -25
  47. package/dist/{capability-Drg-1YhL.d.ts → capability-ChuiONQU.d.ts} +41 -29
  48. package/dist/{casbin-Dyu2gnUD.js → casbin-H0rKxBx2.js} +16 -8
  49. package/dist/{casbin-Cr7RLtA3.js → casbin-cbSbhT_k.js} +2 -2
  50. package/dist/{casl-64gpT-8x.js → casl-C4OINZHI.js} +2 -2
  51. package/dist/{casl-DjEDhTCP.js → casl-CHHoCldP.js} +19 -10
  52. package/dist/catalog/index.d.ts +104 -23
  53. package/dist/catalog/index.js +117 -8
  54. package/dist/{catalog-HD2gf5mY.js → catalog-BFpz2EmT.js} +57 -26
  55. package/dist/{catalog-DZVbrF-z.js → catalog-DCspHDc8.js} +3 -3
  56. package/dist/{catalog-doc-Cdn7-0pQ.js → catalog-doc-DjMKzJp9.js} +53 -16
  57. package/dist/{catalog-fingerprint-CCP0-yQS.js → catalog-fingerprint-e6aCWosn.js} +19 -15
  58. package/dist/catalog-mRQQQhNK.js +1 -0
  59. package/dist/catalog-operations-Dadrl7Z-.js +60 -0
  60. package/dist/{create-CQWIpUG-.js → challenge-DImNcR7B.js} +157 -39
  61. package/dist/chat/index.d.ts +1 -1
  62. package/dist/chat/index.js +13 -10
  63. package/dist/chat-sdk/index.d.ts +44 -26
  64. package/dist/chat-sdk/index.js +17 -17
  65. package/dist/checks-CGkP3Z7A.js +40 -0
  66. package/dist/{claims-map-7oQ3ue4X.js → claims-map-CKkoAAYF.js} +5 -2
  67. package/dist/{claims-map-Ca-QX8C6.d.ts → claims-map-D1Pb5oRq.d.ts} +8 -5
  68. package/dist/claude-agent/index.d.ts +6 -6
  69. package/dist/claude-agent/index.js +6 -3
  70. package/dist/clerk/index.d.ts +11 -7
  71. package/dist/clerk/index.js +6 -6
  72. package/dist/cli/bin.js +4 -4
  73. package/dist/cli/index.d.ts +82 -7
  74. package/dist/cli/index.js +6 -6
  75. package/dist/{clients-C7zLFuWT.d.ts → clients-C_NOET3z.d.ts} +5 -5
  76. package/dist/{clients-DjU5ABMy.js → clients-DYr3U86j.js} +3 -3
  77. package/dist/cloud/index.d.ts +186 -38
  78. package/dist/cloud/index.js +293 -31
  79. package/dist/{cloud-ytQ3uviA.js → cloud-BFlGMaak.js} +5 -6
  80. package/dist/{codemod-5mpSpnUY.js → codemod-DLQ9Zpo4.js} +3 -4
  81. package/dist/{codemod-ua2hHy7w.js → codemod-DWSN2erG.js} +523 -201
  82. package/dist/collect-B5BL3klN.js +1 -0
  83. package/dist/{collect-mLTY4nwb.js → collect-B7ZFAJU3.js} +36 -64
  84. package/dist/{collect-Ci6akVwH.js → collect-Bzv3le0A.js} +6 -6
  85. package/dist/{compare-pfyVnBjE.js → compare-DTfyUunF.js} +2 -2
  86. package/dist/compile/index.d.ts +2 -2
  87. package/dist/compile/index.js +1 -1
  88. package/dist/{compile-1bsAezL0.d.ts → compile-BFzysW3o.d.ts} +36 -12
  89. package/dist/{compile-CMqMx_IN.js → compile-EzEMB-7v.js} +77 -33
  90. package/dist/{completion-BTFrHZhX.js → completion-saoYiRFO.js} +17 -8
  91. package/dist/config-BwPBfN0t.js +108 -0
  92. package/dist/{config-Bj2Ixq3d.js → config-DBeXXmBF.js} +2 -2
  93. package/dist/{config-report-DSpsLpCE.js → config-report-BipSWA6V.js} +9 -6
  94. package/dist/config-shape-ykV0Vm2n.js +134 -0
  95. package/dist/{connection-DjhIJSs2.js → connection-B72dg5Q2.js} +23 -22
  96. package/dist/connector-schema-CYLQNMYq.js +434 -0
  97. package/dist/{context-B_u3_bDJ.js → context-BnIzxTNE.js} +4 -3
  98. package/dist/convex/index.d.ts +13 -7
  99. package/dist/convex/index.js +9 -6
  100. package/dist/core-H-mbhpZc.js +341 -0
  101. package/dist/core-hWIARPDz.d.ts +206 -0
  102. package/dist/{create-CBMmFie-.d.ts → create-BSNrVuxh.d.ts} +87 -34
  103. package/dist/{create-B30OMUOJ.d.ts → create-BVq1lNQE.d.ts} +49 -28
  104. package/dist/{create-D_NmPOdH.d.ts → create-CM1FciYG.d.ts} +37 -29
  105. package/dist/{create-CGm28gyI.js → create-Cq4Uox0f.js} +13 -9
  106. package/dist/{create-DCF2SvoT.js → create-_noSrY1T.js} +15 -21
  107. package/dist/{credential-BcoiejpY.js → credential-CyyyvCsL.js} +42 -39
  108. package/dist/{credentials-DPyHmYz5.js → credentials-CdDxp7jN.js} +6 -6
  109. package/dist/{deciding-columns-Sq12mEA6.js → deciding-columns-NB4wcyBf.js} +13 -2
  110. package/dist/{delegation-j6-rc37o.js → delegation-CDB6_keF.js} +31 -22
  111. package/dist/delivery/index.d.ts +5 -5
  112. package/dist/delivery/index.js +6 -5
  113. package/dist/{delivery-DCAgNyCn.js → delivery-BupfvJIV.js} +81 -20
  114. package/dist/{delivery-event-xX4obB8F.js → delivery-event-JioK5YbS.js} +6 -6
  115. package/dist/denied-text-CHNlVInN.d.ts +22 -0
  116. package/dist/{describe-BybMRY7A.js → describe-Bb4hGK5d.js} +6 -5
  117. package/dist/{describe-B5qgDvEW.d.ts → describe-ByS9LgHK.d.ts} +5 -5
  118. package/dist/{device-BARQ8eYG.js → device-BwbJNmb2.js} +11 -8
  119. package/dist/{diff-CmuSD3vc.js → diff-CN8IYhC_.js} +2 -2
  120. package/dist/{diff-3jbx6Rm4.js → diff-iZWV65nC.js} +23 -14
  121. package/dist/{digest-B3kc_PgQ.d.ts → digest-8Yx2CchM.d.ts} +3 -3
  122. package/dist/{doctor-BdZw53-k.js → doctor-CHD1M9R5.js} +485 -141
  123. package/dist/{doctor-3ZqNHX_G.js → doctor-D3wo-yuz.js} +4 -4
  124. package/dist/drizzle/index.d.ts +33 -19
  125. package/dist/drizzle/index.js +17 -9
  126. package/dist/elysia/index.d.ts +17 -11
  127. package/dist/elysia/index.js +5 -5
  128. package/dist/{errors-BKy0EfhN.js → errors-B6R_lg2a.js} +13 -4
  129. package/dist/{errors-BWXBMaKK.d.ts → errors-CHwoRRpB.d.ts} +4 -1
  130. package/dist/{errors-CWTY6uih.js → errors-Vpu6rKHl.js} +14 -10
  131. package/dist/{errors-DH5QEGXh.d.ts → errors-zi_4T-rx.d.ts} +22 -6
  132. package/dist/{evaluate-CNClBvcj.js → evaluate-Dd8Ta0Ie.js} +185 -80
  133. package/dist/{evaluations-beAooV0n.js → evaluations-IBceAeKT.js} +41 -20
  134. package/dist/{evaluations-C_1vdSZc.d.ts → evaluations-z8dQFDaN.d.ts} +12 -6
  135. package/dist/eve/index.d.ts +9 -6
  136. package/dist/eve/index.js +4 -4
  137. package/dist/{event-time-CsegxXxB.js → event-time-BGy48400.js} +8 -4
  138. package/dist/{expiry-D4_YKRKD.js → expiry-6XByK0dm.js} +8 -5
  139. package/dist/express/index.d.ts +9 -6
  140. package/dist/express/index.js +9 -6
  141. package/dist/fastify/index.d.ts +16 -10
  142. package/dist/fastify/index.js +8 -5
  143. package/dist/{fetch-adapter-Dw0MTS3D.d.ts → fetch-adapter-C1DCvpqV.d.ts} +9 -6
  144. package/dist/{fetch-adapter-DD_gfmrC.js → fetch-adapter-JL43jD3E.js} +14 -11
  145. package/dist/fields-D0vUI6dq.js +498 -0
  146. package/dist/{files-C5ZI27eV.js → files-B3AA05f1.js} +21 -5
  147. package/dist/{files-D_JIzUrP.js → files-BSjrtIHw.js} +11 -4
  148. package/dist/{fixtures-B7XrLeY7.js → fixtures-A1_sp_tR.js} +15 -6
  149. package/dist/{flags-C3DktBDY.js → flags-DXjoTVbS.js} +2 -2
  150. package/dist/{freeze-CrU8nQeX.js → freeze-jjan0lCv.js} +4 -1
  151. package/dist/{from-snapshot-CTCMsFZk.js → from-snapshot-DCakWRsr.js} +26 -16
  152. package/dist/gen-B5kvbAoZ.js +58 -0
  153. package/dist/gen-DWCYcMQM.js +827 -0
  154. package/dist/generate-CRVV5V7l.js +165 -0
  155. package/dist/generate-CezbCaTI.js +275 -0
  156. package/dist/{grantee-hxrUsbpM.js → grantee-Dke-9rd1.js} +4 -4
  157. package/dist/{grantee-conditions-CcXf8hMM.js → grantee-conditions-BrYPe-w0.js} +12 -12
  158. package/dist/{grantee-match-DbENBHLB.js → grantee-match-7RZZvoT_.js} +12 -6
  159. package/dist/{graph-sql-B-dsAT6j.d.ts → graph-sql-BwFC4Qjs.d.ts} +3 -3
  160. package/dist/h3/index.d.ts +10 -7
  161. package/dist/h3/index.js +3 -3
  162. package/dist/headers-B9jQxjtW.d.ts +10 -0
  163. package/dist/{helpers-CBYVMjwh.js → helpers-DJicaG6f.js} +40 -28
  164. package/dist/hono/index.d.ts +16 -10
  165. package/dist/hono/index.js +5 -5
  166. package/dist/{hosted-BPk51-kX.d.ts → hosted-Cmtxogd0.d.ts} +44 -20
  167. package/dist/{hosted-B46-5LYE.js → hosted-D0IzESu_.js} +68 -25
  168. package/dist/{http-ujKm0JXE.js → http-DH94eh6f.js} +4 -4
  169. package/dist/{http-BBoKefeS.js → http-DKLXrFGk.js} +13 -7
  170. package/dist/{http-DXJ37RDA.js → http-DOL33cO0.js} +11 -8
  171. package/dist/{import-wyqXUyjm.js → import-CST57XLp.js} +64 -51
  172. package/dist/{import-CNV7I2Dw.js → import-_YqhhwvX.js} +6 -6
  173. package/dist/{index-B8YjkEZ4.d.ts → index-B8s204GL.d.ts} +64 -52
  174. package/dist/{index-Ch8LpNDp.d.ts → index-BT5-1VsX.d.ts} +64 -25
  175. package/dist/{index-DuWxc5dt.d.ts → index-BW_0MZOS.d.ts} +388 -149
  176. package/dist/index-BhxEUY9J.d.ts +233 -0
  177. package/dist/index-Bv5iXPqU.d.ts +210 -0
  178. package/dist/{index-C-6Letxg.d.ts → index-_9UiQIkt.d.ts} +164 -77
  179. package/dist/index.d.ts +22 -21
  180. package/dist/index.js +35 -33
  181. package/dist/{init-GG6Jh8HD.js → init-Dz_PsHdv.js} +5 -5
  182. package/dist/{init-DeMYsnYJ.js → init-cE3A8aXq.js} +10 -10
  183. package/dist/{instance-options-BsVpyGIk.d.ts → instance-options-B0KXqTrJ.d.ts} +4 -4
  184. package/dist/{instance-snapshot-BOEhcqIF.js → instance-snapshot--JWiTrvO.js} +81 -56
  185. package/dist/{instant-BluqDvyS.js → instant-DK3Iz83e.js} +2 -2
  186. package/dist/{internals-Dk8A8fX3.js → internals-B3IgHrvo.js} +6 -3
  187. package/dist/{json-schema-B-vAwlde.js → json-schema-BPGa-RjQ.js} +9 -3
  188. package/dist/{json-schema-CN_iLFH2.d.ts → json-schema-BfXgnRNT.d.ts} +4 -4
  189. package/dist/jwt/index.d.ts +125 -17
  190. package/dist/jwt/index.js +157 -16
  191. package/dist/{kernel-D0NVb1cK.js → kernel-C-fYydV2.js} +151 -16
  192. package/dist/kysely/index.d.ts +49 -33
  193. package/dist/kysely/index.js +9 -7
  194. package/dist/{live-options-BaAFCIiu.js → live-options-BBIT68le.js} +2 -2
  195. package/dist/{load-DFS_ry0W.js → load-DjSU5KXO.js} +6 -6
  196. package/dist/load-Dm0pSYH3.js +1 -0
  197. package/dist/{login-Dfe5RlYk.js → login-D-8tMqzo.js} +4 -4
  198. package/dist/{login-imhuwvn3.js → login-DplQ0s84.js} +18 -15
  199. package/dist/{manifest-dvL2XEe1.js → manifest-Cgiq5oqc.js} +67 -37
  200. package/dist/{manifest-mx5ghSFM.d.ts → manifest-CzzWtnAb.d.ts} +144 -28
  201. package/dist/{manifest-schema-C0kK_8V0.js → manifest-schema-2r37XRhD.js} +80 -9
  202. package/dist/{manifest-C8IzW3Do.js → manifest-wg8WkkpD.js} +11 -7
  203. package/dist/{map-claims-D3oRmTk0.js → map-claims-BNWCJtmP.js} +27 -18
  204. package/dist/{map-error-Dr70oA_3.js → map-error-pasIGqMT.js} +7 -7
  205. package/dist/{markers-C6joDI3o.js → markers-BeHZ4x9Q.js} +20 -5
  206. package/dist/mcp/index.d.ts +154 -47
  207. package/dist/mcp/index.js +200 -41
  208. package/dist/{migrate-CIq4-E9F.js → migrate-B7oP_sQU.js} +102 -31
  209. package/dist/module-values-BJTBdo6y.js +107 -0
  210. package/dist/nest/index.d.ts +23 -13
  211. package/dist/nest/index.js +18 -11
  212. package/dist/next/client.d.ts +5 -2
  213. package/dist/next/client.js +1 -1
  214. package/dist/next/index.d.ts +72 -26
  215. package/dist/next/index.js +110 -6
  216. package/dist/next/plugin.d.ts +1 -1
  217. package/dist/next/plugin.js +4 -3
  218. package/dist/node/index.d.ts +5 -5
  219. package/dist/node/index.js +3 -3
  220. package/dist/{ocsf-BFp-PZZA.js → ocsf-TcjRBgIs.js} +15 -5
  221. package/dist/openai/index.d.ts +13 -7
  222. package/dist/openai/index.js +3 -3
  223. package/dist/openapi/index.d.ts +61 -30
  224. package/dist/openapi/index.js +2 -2
  225. package/dist/{openapi-B7HZ0f-r.js → openapi-BOsx0xn9.js} +34 -24
  226. package/dist/{openapi-C4dDTVEd.js → openapi-CBZUhA3l.js} +4 -5
  227. package/dist/{openapi-DD1SV-5-.js → openapi-VeHHU2l9.js} +23 -14
  228. package/dist/{operation-findings-DgATDpvh.js → operation-findings-CXtFzlKJ.js} +3 -3
  229. package/dist/{operations-X0VM7F3m.d.ts → operations-Ci_rT6Uo.d.ts} +10 -7
  230. package/dist/orpc/index.d.ts +68 -14
  231. package/dist/orpc/index.js +62 -13
  232. package/dist/otel/index.d.ts +7 -4
  233. package/dist/otel/index.js +8 -5
  234. package/dist/output-files-BHOIlrfD.js +1 -0
  235. package/dist/{output-files-DhRBBE4n.js → output-files-BIQ_9pIs.js} +29 -17
  236. package/dist/{output-1im__-08.js → output-tkju6U7R.js} +15 -7
  237. package/dist/ownership-B4L59T9u.js +1054 -0
  238. package/dist/parse-1_ZheTW5.js +151 -0
  239. package/dist/parse-local-manifest-BQhTlLQS.d.ts +10 -0
  240. package/dist/parse-local-manifest-DEiCF4ah.js +69 -0
  241. package/dist/{parse-request-D_tUXG6M.js → parse-request-CwCZpyjV.js} +7 -8
  242. package/dist/{paths-DXSHAMIa.js → paths-CUvURzHp.js} +4 -1
  243. package/dist/pdp/index.d.ts +9 -6
  244. package/dist/pdp/index.js +23 -12
  245. package/dist/{peer-CRvC7Hg1.js → peer-C9LvBCcb.js} +1 -1
  246. package/dist/peer-Q0fuZ6hx.js +982 -0
  247. package/dist/{permdock-SV8ZINYT.d.ts → permdock-B6Sf4T_S.d.ts} +270 -117
  248. package/dist/{permdock-BrAscV28.js → permdock-L-_I_3zP.js} +226 -74
  249. package/dist/{permission-registry-Br4jSNVi.js → permission-registry-B8tYxPIt.js} +24 -11
  250. package/dist/{vocabulary-CN8H_9UF.d.ts → permission-types-CAY-GU7e.d.ts} +130 -104
  251. package/dist/{permissions-u_KHg-sN.d.ts → permissions-Bx6UI8n1.d.ts} +6 -2
  252. package/dist/{permissions-B-wCP5ZC.js → permissions-CVXmRILq.js} +3 -3
  253. package/dist/{permissions-BPxlwVhN.js → permissions-mDcTWoBs.js} +8 -5
  254. package/dist/pg-DQTqRrou.js +60 -0
  255. package/dist/{pins-8ILTftC9.js → pins-nqarl3oE.js} +4 -1
  256. package/dist/pkce-CnmmYqUZ.js +21 -0
  257. package/dist/{policy-77FSAq_V.d.ts → policy-Ba4bDhaj.d.ts} +5 -5
  258. package/dist/{policy-DbM5YYtV.js → policy-CLQ8__GF.js} +49 -20
  259. package/dist/{policy-from-catalog-C2gMa2Dj.js → policy-from-catalog-CJgOm6aq.js} +28 -25
  260. package/dist/{policy-module-CTlwMvLI.js → policy-module-xym9fnSq.js} +12 -6
  261. package/dist/{policy-types-n0uRTsW8.d.ts → policy-types-CCiDRZBH.d.ts} +802 -334
  262. package/dist/postgres-store-DcyrPS-r.js +1028 -0
  263. package/dist/{postgrest-DAjUkF9w.js → postgrest-D4nuPXIQ.js} +88 -36
  264. package/dist/{postgrest-CEgRbefE.d.ts → postgrest-DicQyqm-.d.ts} +60 -30
  265. package/dist/powersync-DHNQX06W.js +1117 -0
  266. package/dist/{powersync-DISt6SUe.js → powersync-DXqGuq9A.js} +3 -3
  267. package/dist/powersync-Djf-zCpB.js +1 -0
  268. package/dist/preset/index.d.ts +38 -28
  269. package/dist/preset/index.js +1 -1
  270. package/dist/{preset-DZdU0tne.js → preset-BjLzeFpp.js} +58 -34
  271. package/dist/{principal-source-pHneukrx.js → principal-source-C6N60GtM.js} +10 -10
  272. package/dist/prisma/index.d.ts +69 -41
  273. package/dist/prisma/index.js +21 -17
  274. package/dist/{problem-CTviyH5L.js → problem-BVLHFK33.js} +41 -21
  275. package/dist/{problem-details-cn5X30gZ.js → problem-details-CLDgX1KV.js} +13 -4
  276. package/dist/{problem-types-CJ2325SZ.js → problem-types-DSsRfONQ.js} +4 -1
  277. package/dist/prompt-BYc6drYW.js +938 -0
  278. package/dist/protected-action-BE7N_Luo.d.ts +58 -0
  279. package/dist/protected-action-DUYqb-Ma.js +80 -0
  280. package/dist/{protected-BlF0F6wL.js → protected-action-QEA8arRB.js} +48 -14
  281. package/dist/{provider-B1al-AZz.js → provider-C55OGXJ7.js} +5 -4
  282. package/dist/{provider-DILL9oPK.d.ts → provider-DXfq5c2d.d.ts} +1 -1
  283. package/dist/{provider-store-DM6DNcta.js → provider-store-CaTv00tr.js} +13 -9
  284. package/dist/pull-B65ndFNZ.js +1 -0
  285. package/dist/{pull-jEwbf80J.js → pull-CwpGaQSi.js} +12 -11
  286. package/dist/{push-BD4f15co.js → push-DgssgzkK.js} +62 -16
  287. package/dist/{pushed-policy-DCW91KQU.d.ts → pushed-policy-D1Eoi6NM.d.ts} +12 -6
  288. package/dist/{pushed-policy-CqtxkV4G.js → pushed-policy-ITwYKvvH.js} +10 -7
  289. package/dist/react/index.d.ts +9 -8
  290. package/dist/react/index.js +7 -6
  291. package/dist/react/provider-client.d.ts +1 -1
  292. package/dist/react/provider-client.js +1 -1
  293. package/dist/react-native/index.d.ts +104 -51
  294. package/dist/react-native/index.js +394 -67
  295. package/dist/{refs-K6eWUJ0H.js → refs-C8BKxc_e.js} +17 -3
  296. package/dist/{relation-walk-3OyDBF0S.js → relation-walk-DK_gkgL7.js} +12 -9
  297. package/dist/{relations-BnCWnJGI.js → relations-BxvRvDHK.js} +3 -3
  298. package/dist/{replay-Du1tJjG7.js → replay-BU09ad4L.js} +1 -1
  299. package/dist/{replay-Bkm-Ne4l.d.ts → replay-DNftIb_R.d.ts} +1 -1
  300. package/dist/{request-context-C81Pip9n.js → request-context-C25ilqiJ.js} +8 -8
  301. package/dist/{request-schema-CMreVuFM.js → request-schema-DhX7UbfQ.js} +4 -1
  302. package/dist/resend/index.d.ts +34 -28
  303. package/dist/resend/index.js +29 -29
  304. package/dist/resolve-names-CF7xXLSG.js +201 -0
  305. package/dist/{resource-relations-D_jw0BFx.js → resource-relations-8-pCScBO.js} +18 -9
  306. package/dist/{retire-CALjIQ7e.js → retire-B2xffQgY.js} +15 -6
  307. package/dist/{revocations-R07lFBnX.d.ts → revocations-BaUXHM1N.d.ts} +6 -3
  308. package/dist/{rls-DTvYd-lI.js → rls-CNEH2_BG.js} +743 -624
  309. package/dist/{rls-BAqP4q66.js → rls-Ca8Jz9b5.js} +41 -10
  310. package/dist/{role-builder-uWQZ4v84.js → role-builder-BK2-T6oD.js} +41 -20
  311. package/dist/rolldown-runtime-C3I60J0A.js +4 -0
  312. package/dist/{row-conditions-h2HythXQ.js → row-conditions-BAGHOmVq.js} +4 -3
  313. package/dist/{rpc-VSl5ylaQ.js → rpc-fNqAIqQk.js} +8 -5
  314. package/dist/{run-CUKuz0A8.js → run-Bz26OTfO.js} +26 -23
  315. package/dist/run-D-JE8QWb.js +1 -0
  316. package/dist/{run-ticket-DocwaTKn.d.ts → run-ticket-DbWI9f99.d.ts} +33 -13
  317. package/dist/{run-ticket-sxFI6LAk.js → run-ticket-Dv7aF7Dk.js} +29 -8
  318. package/dist/{runtime-D3VTAiCA.js → runtime-BGnrOkVH.js} +5 -2
  319. package/dist/{saas-BCXRuXca.js → saas-iWnUdwCt.js} +42 -29
  320. package/dist/{scan-qvOe0hS3.js → scan-DCj1KQfn.js} +1 -1
  321. package/dist/{schema-B4v0Qrac.js → schema-BOJjqlWL.js} +3 -2
  322. package/dist/{schema-yLuBWWsh.js → schema-Dst9I9Gs.js} +9 -5
  323. package/dist/scim/index.d.ts +3 -2
  324. package/dist/scim/index.js +3 -1
  325. package/dist/scim-D8YupzX1.js +44 -0
  326. package/dist/{scim-ClHtpyV3.js → scim-jJBJ7g1Z.js} +35 -551
  327. package/dist/{scopes-CUPSjo9q.js → scopes-0Up_UA2t.js} +42 -24
  328. package/dist/server/index.d.ts +12 -12
  329. package/dist/server/index.js +13 -13
  330. package/dist/{server-C3WXAHZj.js → server-3cVlTLde.js} +31 -31
  331. package/dist/{server-types-CKQiCnON.d.ts → server-types-CIlpSA2G.d.ts} +81 -46
  332. package/dist/{sha256-D9ihqmvd.js → sha256-C-4WXKIu.js} +4 -3
  333. package/dist/{shared-BAK8t4Uo.js → shared-Afctg7B0.js} +100 -61
  334. package/dist/{shared-DvvFzYXe.js → shared-l0oGGetg.js} +9 -6
  335. package/dist/{signals-D3NcTKUS.js → signals-B1vHR3fN.js} +2 -2
  336. package/dist/{sink-BEZSlMS_.js → sink-D9_vh372.js} +32 -21
  337. package/dist/{sink-4-eQIRWf.d.ts → sink-Dvi7YZG_.d.ts} +44 -20
  338. package/dist/{skills-B6lVdD_W.js → skills-Bjj7BNEQ.js} +16 -12
  339. package/dist/{skills-CTYwkl44.js → skills-OuoMR49L.js} +3 -3
  340. package/dist/{snapshot-B7DkYg6g.js → snapshot-CXlzi69u.js} +21 -18
  341. package/dist/{snapshot-cache-PXI-vGpY.d.ts → snapshot-cache-BAXZ0KOp.d.ts} +21 -12
  342. package/dist/{snapshot-cache-DZHQ0KF6.js → snapshot-cache-Bx_4xC_6.js} +14 -11
  343. package/dist/solid/index.d.ts +55 -15
  344. package/dist/solid/index.js +46 -12
  345. package/dist/solid-start/index.d.ts +30 -12
  346. package/dist/solid-start/index.js +3 -3
  347. package/dist/sources-B1Os_YUu.d.ts +312 -0
  348. package/dist/{sources-vs5dGOsS.js → sources-CMAM-2A3.js} +156 -51
  349. package/dist/sources-qoIJQrJv.js +11 -0
  350. package/dist/{sql-B5T1IL83.js → sql-0WjxIp9g.js} +32 -7
  351. package/dist/sql-B80DFdpG.d.ts +10 -0
  352. package/dist/{src-Cu2m75uo.js → src-DZ0l9UAg.js} +305 -123
  353. package/dist/ssf/index.d.ts +4 -4
  354. package/dist/ssf/index.js +665 -224
  355. package/dist/{standard-webhooks-rbD7LS6h.d.ts → standard-webhooks-C-qX4mJW.d.ts} +7 -7
  356. package/dist/{standard-webhooks-DgFFD-Ga.js → standard-webhooks-D67a3nzk.js} +5 -5
  357. package/dist/{store-BDutJkDL.js → store-RNFvaJJv.js} +43 -29
  358. package/dist/{store-options-u0ycEe8s.js → store-options-Dil3lraY.js} +105 -15
  359. package/dist/stores-C0Kta5Ft.d.ts +59 -0
  360. package/dist/{stores-CGhM8BN_.js → stores-DxZWDXCs.js} +42 -5
  361. package/dist/{stream-CvdUS9V1.js → stream-CDvF0sJm.js} +5 -5
  362. package/dist/{stream-CeCMJmBB.d.ts → stream-ltuLdtTG.d.ts} +4 -3
  363. package/dist/{style-DiKWnAvn.js → style-DblOtSga.js} +1 -1
  364. package/dist/{style-Uao76wO7.js → style-Ds11Hmk4.js} +3 -1
  365. package/dist/{subject-settings-CkEwrw3W.js → subject-settings-8sH5HlII.js} +8 -4
  366. package/dist/{row-check-Dt35czLy.d.ts → subject-settings-vNW8qmUH.d.ts} +30 -18
  367. package/dist/supabase/index.d.ts +48 -37
  368. package/dist/supabase/index.js +6 -6
  369. package/dist/supabase/middleware.d.ts +19 -13
  370. package/dist/supabase/middleware.js +7 -7
  371. package/dist/{supabase-x5JtR2tc.js → supabase-BL1qJzzY.js} +82 -36
  372. package/dist/{supabase-By_frk3U.js → supabase-D39cuGPt.js} +3 -3
  373. package/dist/{supabase-hook-BMoEhZir.js → supabase-hook-B-yXnzUl.js} +1206 -286
  374. package/dist/supabase-hook-H-MtE9Wd.js +1 -0
  375. package/dist/supautils-BU-pAEpf.js +808 -0
  376. package/dist/{support-session-C6xJQYut.js → support-session-BsmPCbz8.js} +22 -22
  377. package/dist/svelte/PermissionBoundary.svelte +2 -6
  378. package/dist/svelte/Protected.svelte +2 -8
  379. package/dist/svelte/index.d.ts +9 -8
  380. package/dist/svelte/index.js +10 -9
  381. package/dist/svelte/runtime.d.ts +4 -4
  382. package/dist/svelte/runtime.js +4 -4
  383. package/dist/svelte/source.d.ts +9 -8
  384. package/dist/svelte/source.js +6 -5
  385. package/dist/sveltekit/index.d.ts +30 -12
  386. package/dist/sveltekit/index.js +2 -2
  387. package/dist/{ownership-DqaJNJPn.js → tables-DeMNEy6V.js} +1025 -1085
  388. package/dist/tanstack-start/index.d.ts +22 -10
  389. package/dist/tanstack-start/index.js +2 -2
  390. package/dist/{target-Bw37TFNA.js → target-qdEAnnhU.js} +6 -6
  391. package/dist/{tenancy-DN2QAx9z.js → tenancy-5d1zVBvK.js} +36 -21
  392. package/dist/terminal/index.d.ts +23 -14
  393. package/dist/terminal/index.js +17 -20
  394. package/dist/testing/core.d.ts +2 -0
  395. package/dist/testing/core.js +1 -0
  396. package/dist/testing/fixtures/index.d.ts +15 -0
  397. package/dist/testing/fixtures/index.js +831 -0
  398. package/dist/testing/index.d.ts +235 -285
  399. package/dist/testing/index.js +502 -927
  400. package/dist/testing/saas/index.d.ts +43 -27
  401. package/dist/testing/saas/index.js +2 -2
  402. package/dist/testing/saas/permissions.d.ts +1 -1
  403. package/dist/testing/saas/permissions.js +1 -1
  404. package/dist/text-diff-BtfSmdUo.js +444 -0
  405. package/dist/{thenable-yD7SabqG.js → thenable-BNSM1U2R.js} +12 -3
  406. package/dist/{time-DkWjdL98.js → time-nR1JesoH.js} +32 -8
  407. package/dist/{token-BLZcjQgt.js → token-DC9EQiet.js} +15 -13
  408. package/dist/{tool-refusal-CMLN5xhn.js → tool-refusal-Qpjs_W6M.js} +5 -2
  409. package/dist/trpc/index.d.ts +11 -8
  410. package/dist/trpc/index.js +15 -9
  411. package/dist/type-helpers-BIPIDa6a.d.ts +50 -0
  412. package/dist/{types-8RnwUAvE.d.ts → types-AMJ5qoU_.d.ts} +49 -30
  413. package/dist/{types-C_IiEs64.d.ts → types-B2mlGuhW.d.ts} +14 -11
  414. package/dist/{types-_WhUP7ud.d.ts → types-B4uqKDnp.d.ts} +25 -12
  415. package/dist/{types-CX7AvRqP.d.ts → types-BJk0BKRX.d.ts} +24 -14
  416. package/dist/types-B_d_g7T3.d.ts +262 -0
  417. package/dist/{types-BdtSDbBO.d.ts → types-B_tiYvk8.d.ts} +59 -32
  418. package/dist/{types-DqzsnlSA.js → types-CcUXciSj.js} +17 -5
  419. package/dist/{types-Dfv0aTER.d.ts → types-DC1Loeh3.d.ts} +449 -168
  420. package/dist/{types-lUlG3TVd.d.ts → types-DHKPcqzr.d.ts} +2 -2
  421. package/dist/{types-C791HFu9.d.ts → types-DjuMBNF9.d.ts} +68 -32
  422. package/dist/{types-C863OQiR.d.ts → types-HzqOtvsJ.d.ts} +23 -12
  423. package/dist/{types-Druu9wLM.d.ts → types-ZzRGoViD.d.ts} +77 -24
  424. package/dist/{types-BzzaHxt3.d.ts → types-ah9NlU6j.d.ts} +137 -48
  425. package/dist/{types-CVZSNocA.d.ts → types-djVzLlIV.d.ts} +31 -14
  426. package/dist/{types-BtHtcKMr.d.ts → types-yUuPR5Hy.d.ts} +47 -24
  427. package/dist/unplugin/index.d.ts +1 -1
  428. package/dist/unplugin/index.js +2 -2
  429. package/dist/usage-CYeXek0p.js +1 -0
  430. package/dist/{usage-SveTRTyr.js → usage-CxEzS4ey.js} +50 -26
  431. package/dist/{usage-CRVl9V3t.js → usage-ab0PdusX.js} +2 -2
  432. package/dist/{validation-error-ZfUHbKvf.js → validation-error-CYg2kJEw.js} +4 -1
  433. package/dist/{validation-error-DHUrAkku.d.ts → validation-error-YGg2mXyH.d.ts} +5 -2
  434. package/dist/{validity-CZ7-y0Cj.js → validity-Buc7w8E9.js} +13 -10
  435. package/dist/{verifier-DHuh-okk.js → verifier-DUV6pLqZ.js} +10 -4
  436. package/dist/{verify-BaAKx7t6.js → verify-DZeqoWu5.js} +417 -489
  437. package/dist/version-DMQ0dnN5.js +48 -0
  438. package/dist/version-DizhmD72.js +1 -0
  439. package/dist/{views-DTIIO-oQ.js → views-CD8wuL4Z.js} +19 -6
  440. package/dist/vocabulary-DEJ5j4mR.d.ts +70 -0
  441. package/dist/vue/index.d.ts +71 -21
  442. package/dist/vue/index.js +50 -13
  443. package/dist/{waiter-B986w1oK.d.ts → waiter-Bu9zAlE0.d.ts} +13 -10
  444. package/dist/{waiter-BGUtGYoU.js → waiter-aBLM63_f.js} +1 -1
  445. package/dist/{watch-vea54PRw.js → watch-Cx_WciLE.js} +8 -8
  446. package/dist/watch-DB42U1ib.js +1 -0
  447. package/dist/webmcp/index.d.ts +11 -11
  448. package/dist/webmcp/index.js +8 -5
  449. package/dist/{where-scope-C9vfEphl.js → where-scope-DlCdCM_8.js} +56 -30
  450. package/dist/{who-can-DWBAcaCQ.js → who-can-rI7dCR9Q.js} +23 -20
  451. package/dist/workflow/index.d.ts +3 -3
  452. package/dist/workflow/index.js +13 -13
  453. package/dist/workflow-sdk/index.d.ts +19 -13
  454. package/dist/workflow-sdk/index.js +6 -6
  455. package/dist/{wrap-gX61EtpB.js → wrap-B2wziJI_.js} +11 -5
  456. package/dist/{wrap-C5jC6sKI.d.ts → wrap-DlJE3gS_.d.ts} +8 -5
  457. package/package.json +25 -14
  458. package/schemas/catalog-v1.json +3 -0
  459. package/schemas/cli-result-v1.json +1 -0
  460. package/schemas/cloud-api-v1.json +152 -7
  461. package/schemas/connector-v1.json +8 -0
  462. package/schemas/supabase-claims-v1.json +5 -0
  463. package/schemas/supabase-manifest-v1.json +308 -75
  464. package/skills/permdock/SKILL.md +1 -0
  465. package/skills/permdock-agents/references/runtimes.md +3 -1
  466. package/skills/permdock-approvals/references/stores-and-resume.md +2 -1
  467. package/skills/permdock-credentials/references/tokens-keys-links.md +8 -6
  468. package/skills/permdock-data/references/queries-and-rls.md +6 -2
  469. package/skills/permdock-tenancy/SKILL.md +1 -1
  470. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +2 -1
  471. package/skills/permdock-wire/references/adapters.md +28 -22
  472. package/skills/permdock-wire/references/policy-options.md +1 -0
  473. package/dist/catalog-BoWglDPI.js +0 -1
  474. package/dist/collect-D7eQDffE.js +0 -1
  475. package/dist/config-bs_kZeYq.js +0 -162
  476. package/dist/denied-text-CiFQNuMV.d.ts +0 -19
  477. package/dist/fields-OYG_JR78.js +0 -203
  478. package/dist/generate-CNU1pIOo.js +0 -171
  479. package/dist/headers-BIjfMaoC.js +0 -8
  480. package/dist/headers-CIbDTUTK.d.ts +0 -7
  481. package/dist/index-Cp_ilKi1.d.ts +0 -91
  482. package/dist/index-CueFnxQc.d.ts +0 -110
  483. package/dist/load-BxEtwlBS.js +0 -1
  484. package/dist/output-files-B3IZJksC.js +0 -1
  485. package/dist/package-root-Dk_ETdkp.js +0 -31
  486. package/dist/parse-Cxq0WxrA.js +0 -53
  487. package/dist/parse-local-manifest-5ODwqu8b.d.ts +0 -10
  488. package/dist/parse-local-manifest-CVSs6J9I.js +0 -34
  489. package/dist/peer-C8swJ2GH.js +0 -50
  490. package/dist/policies-DP2nqRoF.js +0 -295
  491. package/dist/powersync-BkWWCS1K.js +0 -538
  492. package/dist/powersync-MMJ2mI2q.js +0 -1
  493. package/dist/problem-details-B45V5d2b.d.ts +0 -7
  494. package/dist/prompt-DfZLJLIn.js +0 -32
  495. package/dist/protected-RFGpakN9.d.ts +0 -38
  496. package/dist/pull-CvpINcMK.js +0 -1
  497. package/dist/run-DDwUaJDU.js +0 -1
  498. package/dist/sources-Xc4zkszI.d.ts +0 -190
  499. package/dist/stores-BUGNbJTt.d.ts +0 -30
  500. package/dist/supabase-hook-CCw5m35C.js +0 -1
  501. package/dist/supautils-B6HYL9eL.js +0 -91
  502. package/dist/text-diff-BQcUapOb.js +0 -15
  503. package/dist/types-B3_ooZgZ.d.ts +0 -172
  504. package/dist/usage-CZpSQP6L.js +0 -1
  505. package/dist/version-CEbQ5UeM.js +0 -18
  506. package/dist/version-DXkYUISx.js +0 -1
  507. package/dist/watch--ovlPOc0.js +0 -1
@@ -2,9 +2,9 @@
2
2
  /**
3
3
  * What `permdock supabase inspect --json` prints and `--out` writes to
4
4
  * `permdock.manifest.json`: the contract between the generated hook and SQL
5
- * helpers and a package that writes policies or claims next to them.
6
- * `version` is the major of this shape; a field is only
7
- * ever added within it. `schemas/supabase-manifest-v1.json` is its JSON Schema.
5
+ * helpers and a package that writes policies or claims next to them. `version`
6
+ * is the major of this shape; a field is only ever added within it.
7
+ * `schemas/supabase-manifest-v1.json` is its JSON Schema.
8
8
  */
9
9
  type SupabaseHookManifest = {
10
10
  readonly $schema: "https://permdock.com/schemas/supabase-manifest-v1.json";
@@ -41,13 +41,23 @@ type SupabaseHookManifest = {
41
41
  /**
42
42
  * With `authzVersion`, the function that bumps the listed users' `authz_ver`,
43
43
  * for a membership source outside the hook. It is `security definer` and no
44
- * client role may execute it: call it from a trigger owned by the table's owner.
44
+ * client role may execute it: call it from a trigger owned by the table's
45
+ * owner.
45
46
  */
46
47
  readonly authzVersionBump?: {
47
48
  readonly schema: string;
48
49
  readonly function: "permdock_bump_authz_version_for";
49
50
  readonly args: "p_users uuid[]";
50
51
  };
52
+ /**
53
+ * The Management API fields that make a hosted project call the hook;
54
+ * `permdock supabase inspect` adds them.
55
+ */
56
+ readonly managementApi?: {
57
+ readonly hook_custom_access_token_enabled: true;
58
+ readonly hook_custom_access_token_uri: string;
59
+ readonly jwt_exp: number;
60
+ };
51
61
  /** The `supabase.hook.memberships` sources, in the order the hook reads them. */
52
62
  readonly memberships: readonly SupabaseManifestMembership[];
53
63
  readonly rls: SupabaseManifestRls;
@@ -67,6 +77,51 @@ type SupabaseHookManifest = {
67
77
  * SDK that lacks one cannot serve this policy.
68
78
  */
69
79
  readonly requires?: SupabaseManifestRequires;
80
+ /**
81
+ * The SQL names the generated RLS exposes, as `resolveNames` gives them.
82
+ * Absent from a manifest written before 0.8.
83
+ */
84
+ readonly names?: SupabaseManifestNames;
85
+ };
86
+ /** The SQL helpers named after one scope, unqualified. */
87
+ type SupabaseManifestScopeNames = {
88
+ readonly permittedIds: string;
89
+ readonly permittedIdsFor: string;
90
+ readonly memberIds: string;
91
+ readonly memberIdsFor: string;
92
+ /**
93
+ * Only on the team scope (`team` or `teams`), for better-supabase's
94
+ * `teamIdsOf`.
95
+ */
96
+ readonly memberIdsOf?: string;
97
+ readonly permittedUsers: string;
98
+ };
99
+ /** The SQL objects named after one resource, unqualified. */
100
+ type SupabaseManifestResourceNames = {
101
+ /** The table `rls.tables` maps, as written there. */
102
+ readonly table?: string;
103
+ /** Graph resources only: `permitted_<resource>_ids` and its restriction check. */
104
+ readonly permittedIds?: string;
105
+ readonly restricted?: string;
106
+ /** With `rls.rowHelpers` naming the resource. */
107
+ readonly rows?: string;
108
+ readonly row?: string;
109
+ /** With `rls.fields` and a mapped table. */
110
+ readonly visible?: string;
111
+ readonly visibleFields?: string;
112
+ readonly mask?: string;
113
+ };
114
+ type SupabaseManifestNames = {
115
+ readonly schema: string;
116
+ readonly gucPrefix: string;
117
+ readonly claims: {
118
+ readonly tenant: string;
119
+ readonly role: string;
120
+ };
121
+ /** The scope better-supabase reads as its teams, when one is declared. */
122
+ readonly teamScope?: string;
123
+ readonly scopes: Readonly<Record<string, SupabaseManifestScopeNames>>;
124
+ readonly resources: Readonly<Record<string, SupabaseManifestResourceNames>>;
70
125
  };
71
126
  type SupabaseManifestRequires = {
72
127
  /** The capability-matrix release tag, `capability-matrix-v1.<minor>.<patch>`. */
@@ -88,30 +143,54 @@ type SupabaseManifestColumn = {
88
143
  type SupabaseManifestValue = SupabaseManifestColumn | {
89
144
  readonly value: string | readonly string[];
90
145
  };
91
- /** A column that references another table: the value (role key or user id) is `column` of `table`, matched on `id`. */
146
+ /**
147
+ * A column that references another table: the value (role key or user id) is
148
+ * `column` of `table`, matched on `id`.
149
+ */
92
150
  type SupabaseManifestThrough = {
93
151
  readonly table: string;
94
152
  readonly id: string;
95
153
  readonly column: string;
96
154
  };
97
- /** A role column (with `through` when it references a roles table), or the fixed roles every row holds. */
155
+ /**
156
+ * A role column (with `through` when it references a roles table), or the fixed
157
+ * roles every row holds.
158
+ */
98
159
  type SupabaseManifestRole = SupabaseManifestValue | (SupabaseManifestColumn & {
99
160
  readonly through: SupabaseManifestThrough;
161
+ }) | (SupabaseManifestColumn & {
162
+ /**
163
+ * Each column value to the role key it stands for, or `null` for no role;
164
+ * an unlisted value is no role.
165
+ */
166
+ readonly map: Readonly<Record<string, string | null>>;
100
167
  });
101
168
  /** One `tableMembershipSource` or `junctionMembershipSource` source. */
102
169
  type SupabaseManifestMembership = {
103
170
  /** `schema.table`, `public` when the source names no schema. */
104
171
  readonly table: string;
105
- /** The user id column, with `through` when it references the table that holds the user id. */
172
+ /**
173
+ * The user id column, with `through` when it references the table that holds
174
+ * the user id.
175
+ */
106
176
  readonly user: SupabaseManifestColumn | (SupabaseManifestColumn & {
107
177
  readonly through: SupabaseManifestThrough;
108
178
  });
109
- /** A column for `tableMembershipSource`, the fixed scope for `junctionMembershipSource`. */
179
+ /**
180
+ * A column for `tableMembershipSource`, the fixed scope for
181
+ * `junctionMembershipSource`.
182
+ */
110
183
  readonly scope: SupabaseManifestValue;
111
184
  readonly id: SupabaseManifestColumn;
112
- /** A role column, the fixed roles every row holds, or several role columns whose keys the row holds together. */
185
+ /**
186
+ * A role column, the fixed roles every row holds, or several role columns
187
+ * whose keys the row holds together.
188
+ */
113
189
  readonly role: SupabaseManifestRole | readonly SupabaseManifestRole[];
114
- /** A `jsonb` column of ancestor ids keyed by scope, or one column per ancestor scope. */
190
+ /**
191
+ * A `jsonb` column of ancestor ids keyed by scope, or one column per ancestor
192
+ * scope.
193
+ */
115
194
  readonly within?: SupabaseManifestColumn | {
116
195
  readonly columns: Readonly<Record<string, string>>;
117
196
  };
@@ -126,10 +205,16 @@ type SupabaseManifestHelper = {
126
205
  /** The argument list, `p_grant text`, or `''` for none. */
127
206
  readonly args: string;
128
207
  readonly returns: string;
129
- /** The roles granted `execute`; a field view `anon` reads adds `anon` to the `authenticated` ones. */
208
+ /**
209
+ * The roles granted `execute`; a field view `anon` reads adds `anon` to the
210
+ * `authenticated` ones.
211
+ */
130
212
  readonly execute: readonly string[];
131
213
  };
132
- /** A table whose row says whether a user or a scope instance is active (`rls.suspension`); a missing row counts as suspended. */
214
+ /**
215
+ * A table whose row says whether a user or a scope instance is active
216
+ * (`rls.suspension`); a missing row counts as suspended.
217
+ */
133
218
  type SupabaseManifestActiveRow = {
134
219
  /** `schema.table`. */
135
220
  readonly table: string;
@@ -140,12 +225,18 @@ type SupabaseManifestActiveRow = {
140
225
  /** A status column; only a row whose value is in `active` is active. */
141
226
  readonly status?: string;
142
227
  readonly active?: readonly string[];
143
- /** A scope only: the permission keys members of a suspended instance still hold. */
228
+ /**
229
+ * A scope only: the permission keys members of a suspended instance still
230
+ * hold.
231
+ */
144
232
  readonly keep?: readonly string[];
145
233
  };
146
234
  type SupabaseManifestRls = {
147
235
  readonly schema: string;
148
- /** Where the helpers read roles and memberships: the claims (`jwt`) or the tables (`database`). */
236
+ /**
237
+ * Where the helpers read roles and memberships: the claims (`jwt`) or the
238
+ * tables (`database`).
239
+ */
149
240
  readonly mode: "jwt" | "database";
150
241
  readonly tenantClaim: string;
151
242
  /** The declared scopes, root first, with the Postgres type of their ids. */
@@ -155,13 +246,14 @@ type SupabaseManifestRls = {
155
246
  readonly within?: string;
156
247
  }[];
157
248
  /**
158
- * Every function `rls generate` writes for policies and trusted SQL to
159
- * call: `permdock_has`, `permitted_<scope>_ids`, `member_<scope>_ids` and
160
- * `permdock_user_id`, the caller's user id; in `database` mode `permdock_has_for`, `permitted_<scope>_ids_for` and
249
+ * Every function `rls generate` writes for policies and trusted SQL to call:
250
+ * `permdock_has`, `permitted_<scope>_ids`, `member_<scope>_ids` and
251
+ * `permdock_user_id`, the caller's user id; in `database` mode
252
+ * `permdock_has_for`, `permitted_<scope>_ids_for` and
161
253
  * `member_<scope>_ids_for`; and when a role declares `assigns`,
162
254
  * `permdock_can_assign`, `permdock_can_assign_any` and, with custom roles,
163
- * `permdock_can_assign_custom_role`, each with its `_for` form where one
164
- * is written. A helper whose `execute` is empty is for trusted SQL only.
255
+ * `permdock_can_assign_custom_role`, each with its `_for` form where one is
256
+ * written. A helper whose `execute` is empty is for trusted SQL only.
165
257
  */
166
258
  readonly helpers: readonly SupabaseManifestHelper[];
167
259
  /**
@@ -170,7 +262,10 @@ type SupabaseManifestRls = {
170
262
  * `memberships`.
171
263
  */
172
264
  readonly memberships: readonly SupabaseManifestMembership[];
173
- /** Whether custom roles live in the helpers' tables (`rls.customRoles` in `database` mode). */
265
+ /**
266
+ * Whether custom roles live in the helpers' tables (`rls.customRoles` in
267
+ * `database` mode).
268
+ */
174
269
  readonly customRoles?: boolean;
175
270
  /** The global-roles table the hook and the `database` mode helpers read. */
176
271
  readonly roles?: {
@@ -178,7 +273,10 @@ type SupabaseManifestRls = {
178
273
  readonly user: SupabaseManifestColumn;
179
274
  readonly role: SupabaseManifestRole | readonly SupabaseManifestRole[];
180
275
  };
181
- /** `rls.suspension`: a suspended user, or a suspended scope instance, holds nothing but its scope's `keep`. */
276
+ /**
277
+ * `rls.suspension`: a suspended user, or a suspended scope instance, holds
278
+ * nothing but its scope's `keep`.
279
+ */
182
280
  readonly suspension?: {
183
281
  readonly users?: SupabaseManifestActiveRow;
184
282
  readonly scopes?: Readonly<Record<string, SupabaseManifestActiveRow>>;
@@ -187,13 +285,18 @@ type SupabaseManifestRls = {
187
285
  };
188
286
  };
189
287
  /**
190
- * `rls.assignments`: the tables whose client writes the assignment
191
- * triggers check against `permdock_can_assign_any`, so SQL writing rows
192
- * there needs no role-ceiling check of its own.
288
+ * `rls.assignments`: the tables whose client writes the assignment triggers
289
+ * check against `permdock_can_assign_any`, so SQL writing rows there needs no
290
+ * role-ceiling check of its own.
193
291
  */
194
292
  readonly assignments?: {
195
293
  readonly tables: readonly string[];
196
294
  };
295
+ /**
296
+ * `rls.tokenScopes`: the helpers narrow a delegated token by its `scope`
297
+ * claim through `permdock_token_scope_allows`.
298
+ */
299
+ readonly tokenScopes?: boolean;
197
300
  readonly apiKeys?: {
198
301
  readonly claim: string;
199
302
  readonly scopes: string;
@@ -202,12 +305,25 @@ type SupabaseManifestRls = {
202
305
  readonly serviceRoles: readonly string[];
203
306
  };
204
307
  };
308
+ /**
309
+ * The manifest of a project in `rls.authorize: 'database'` mode without
310
+ * `supabase.hook`: no token hook, so no `hook`, `budget`, `claims`,
311
+ * `authzVersion` or hook `memberships`.
312
+ */
313
+ type SupabaseDatabaseManifest = Omit<SupabaseHookManifest, "authzVersion" | "authzVersionBump" | "budget" | "claims" | "hook" | "managementApi" | "memberships">;
314
+ /**
315
+ * What `parseSupabaseManifest` returns: a manifest with or without the token
316
+ * hook.
317
+ */
318
+ type SupabaseManifest = SupabaseDatabaseManifest | SupabaseHookManifest;
319
+ /** Whether the manifest describes a token hook. */
320
+ declare function hasTokenHook(manifest: SupabaseManifest): manifest is SupabaseHookManifest;
205
321
  /**
206
322
  * Reads a `permdock.manifest.json` document (parsed, or the JSON text) and
207
323
  * validates it against `schemas/supabase-manifest-v1.json`. Returns a
208
- * deep-frozen copy built from own keys; throws `PermDockValidationError`
209
- * with every issue, so a manifest of another major is refused.
324
+ * deep-frozen copy built from own keys; throws `PermDockValidationError` with
325
+ * every issue, so a manifest of another major is refused.
210
326
  */
211
- declare function parseSupabaseManifest(json: unknown): SupabaseHookManifest;
327
+ declare function parseSupabaseManifest(json: unknown): SupabaseManifest;
212
328
  //#endregion
213
- export { SupabaseManifestHelper as a, SupabaseManifestRls as c, SupabaseManifestValue as d, parseSupabaseManifest as f, SupabaseManifestColumn as i, SupabaseManifestRole as l, SupabaseHookManifest as n, SupabaseManifestMembership as o, SupabaseManifestActiveRow as r, SupabaseManifestRequires as s, SupabaseHookClaim as t, SupabaseManifestThrough as u };
329
+ export { hasTokenHook as _, SupabaseManifestActiveRow as a, SupabaseManifestMembership as c, SupabaseManifestResourceNames as d, SupabaseManifestRls as f, SupabaseManifestValue as g, SupabaseManifestThrough as h, SupabaseManifest as i, SupabaseManifestNames as l, SupabaseManifestScopeNames as m, SupabaseHookClaim as n, SupabaseManifestColumn as o, SupabaseManifestRole as p, SupabaseHookManifest as r, SupabaseManifestHelper as s, SupabaseDatabaseManifest as t, SupabaseManifestRequires as u, parseSupabaseManifest as v };
@@ -1,6 +1,9 @@
1
- import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
1
+ import { n as freezeDeep } from "./freeze-jjan0lCv.js";
2
2
  //#region src/supabase/manifest-schema.ts
3
- /** `schemas/supabase-manifest-v1.json`, which `parseSupabaseManifest` checks against; a test keeps the two equal. */
3
+ /**
4
+ * `schemas/supabase-manifest-v1.json`, which `parseSupabaseManifest` checks
5
+ * against; a test keeps the two equal.
6
+ */
4
7
  const supabaseManifestSchema = freezeDeep({
5
8
  $schema: "https://json-schema.org/draft/2020-12/schema",
6
9
  $id: "https://permdock.com/schemas/supabase-manifest-v1.json",
@@ -10,13 +13,8 @@ const supabaseManifestSchema = freezeDeep({
10
13
  required: [
11
14
  "$schema",
12
15
  "version",
13
- "hook",
14
16
  "helpers",
15
17
  "tenantClaim",
16
- "budget",
17
- "claims",
18
- "authzVersion",
19
- "memberships",
20
18
  "rls",
21
19
  "decidingColumns",
22
20
  "markers"
@@ -95,6 +93,24 @@ const supabaseManifestSchema = freezeDeep({
95
93
  }
96
94
  },
97
95
  authzVersion: { type: "boolean" },
96
+ managementApi: {
97
+ description: "The Management API fields that make a hosted project call the generated hook, as `permdock supabase inspect` prints and `--out` writes them.",
98
+ type: "object",
99
+ required: [
100
+ "hook_custom_access_token_enabled",
101
+ "hook_custom_access_token_uri",
102
+ "jwt_exp"
103
+ ],
104
+ properties: {
105
+ hook_custom_access_token_enabled: { const: true },
106
+ hook_custom_access_token_uri: { type: "string" },
107
+ jwt_exp: {
108
+ description: "The access token lifetime in seconds: `[auth] jwt_expiry` of `supabase/config.toml`, or 3600 when it is unset.",
109
+ type: "integer"
110
+ }
111
+ },
112
+ additionalProperties: false
113
+ },
98
114
  authzVersionBump: {
99
115
  type: "object",
100
116
  required: [
@@ -222,6 +238,7 @@ const supabaseManifestSchema = freezeDeep({
222
238
  items: { type: "string" }
223
239
  } }
224
240
  },
241
+ tokenScopes: { type: "boolean" },
225
242
  apiKeys: {
226
243
  type: "object",
227
244
  required: [
@@ -260,6 +277,44 @@ const supabaseManifestSchema = freezeDeep({
260
277
  grants: { const: "v1" }
261
278
  }
262
279
  },
280
+ names: {
281
+ description: "The SQL names the generated RLS exposes to application SQL, unqualified, in `schema`: per scope and per resource, as `resolveNames` gives them. Absent from a manifest written before 0.8.",
282
+ type: "object",
283
+ required: [
284
+ "schema",
285
+ "gucPrefix",
286
+ "claims",
287
+ "scopes",
288
+ "resources"
289
+ ],
290
+ properties: {
291
+ schema: { type: "string" },
292
+ gucPrefix: { type: "string" },
293
+ claims: {
294
+ type: "object",
295
+ required: ["tenant", "role"],
296
+ properties: {
297
+ tenant: { type: "string" },
298
+ role: { type: "string" }
299
+ }
300
+ },
301
+ teamScope: { type: "string" },
302
+ scopes: {
303
+ type: "object",
304
+ additionalProperties: {
305
+ type: "object",
306
+ additionalProperties: { type: "string" }
307
+ }
308
+ },
309
+ resources: {
310
+ type: "object",
311
+ additionalProperties: {
312
+ type: "object",
313
+ additionalProperties: { type: "string" }
314
+ }
315
+ }
316
+ }
317
+ },
263
318
  requires: {
264
319
  description: "The supabase/sdk capability-matrix feature ids the hook, the helpers and subjectFromSupabase depend on, as of the matrix release tag.",
265
320
  type: "object",
@@ -349,7 +404,7 @@ const supabaseManifestSchema = freezeDeep({
349
404
  },
350
405
  helperName: {
351
406
  type: "string",
352
- pattern: "^(permdock_has(_for)?|permitted_[a-z][a-z0-9_]*_(ids|permission_keys)(_for)?|permitted_[a-z][a-z0-9_]*_users|member_[a-z][a-z0-9_]*_ids(_for)?|permdock_can_assign(_any|_custom_role)?(_for)?|permdock_api_key_allows|permdock_actor_may_write|permdock_is_approver|permdock_user_id)$"
407
+ pattern: "^(permdock_has(_for)?|permitted_[a-z][a-z0-9_]*_(ids|permission_keys)(_for)?|permitted_[a-z][a-z0-9_]*_users|member_[a-z][a-z0-9_]*_ids(_for|_of)?|permdock_can_assign(_any|_custom_role)?(_for)?|permdock_api_key_allows|permdock_token_scope_allows|permdock_actor_may_write|permdock_is_approver|permdock_user_id)$"
353
408
  },
354
409
  column: {
355
410
  type: "object",
@@ -357,7 +412,23 @@ const supabaseManifestSchema = freezeDeep({
357
412
  additionalProperties: false,
358
413
  properties: { column: { $ref: "#/$defs/identifier" } }
359
414
  },
360
- role: { oneOf: [{ $ref: "#/$defs/value" }, { $ref: "#/$defs/through" }] },
415
+ role: { oneOf: [
416
+ { $ref: "#/$defs/value" },
417
+ { $ref: "#/$defs/through" },
418
+ { $ref: "#/$defs/mapped" }
419
+ ] },
420
+ mapped: {
421
+ type: "object",
422
+ required: ["column", "map"],
423
+ additionalProperties: false,
424
+ properties: {
425
+ column: { $ref: "#/$defs/identifier" },
426
+ map: {
427
+ type: "object",
428
+ additionalProperties: { type: ["string", "null"] }
429
+ }
430
+ }
431
+ },
361
432
  user: { oneOf: [{ $ref: "#/$defs/column" }, { $ref: "#/$defs/through" }] },
362
433
  through: {
363
434
  type: "object",
@@ -1,13 +1,17 @@
1
- import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
2
- import { n as PermDockValidationError } from "./validation-error-ZfUHbKvf.js";
3
- import { n as copyJson, t as checkSchema } from "./json-schema-B-vAwlde.js";
4
- import { t as supabaseManifestSchema } from "./manifest-schema-C0kK_8V0.js";
1
+ import { n as freezeDeep } from "./freeze-jjan0lCv.js";
2
+ import { n as PermDockValidationError } from "./validation-error-CYg2kJEw.js";
3
+ import { n as copyJson, t as checkSchema } from "./json-schema-BPGa-RjQ.js";
4
+ import { t as supabaseManifestSchema } from "./manifest-schema-2r37XRhD.js";
5
5
  //#region src/supabase/manifest.ts
6
+ /** Whether the manifest describes a token hook. */
7
+ function hasTokenHook(manifest) {
8
+ return "hook" in manifest;
9
+ }
6
10
  /**
7
11
  * Reads a `permdock.manifest.json` document (parsed, or the JSON text) and
8
12
  * validates it against `schemas/supabase-manifest-v1.json`. Returns a
9
- * deep-frozen copy built from own keys; throws `PermDockValidationError`
10
- * with every issue, so a manifest of another major is refused.
13
+ * deep-frozen copy built from own keys; throws `PermDockValidationError` with
14
+ * every issue, so a manifest of another major is refused.
11
15
  */
12
16
  function parseSupabaseManifest(json) {
13
17
  const issues = [];
@@ -39,4 +43,4 @@ function invalidManifest(issues) {
39
43
  });
40
44
  }
41
45
  //#endregion
42
- export { parseSupabaseManifest as t };
46
+ export { parseSupabaseManifest as n, hasTokenHook as t };
@@ -1,11 +1,11 @@
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, o as readPath } from "./paths-DXSHAMIa.js";
4
- import { n as expirySeconds } from "./expiry-D4_YKRKD.js";
5
- import { r as validateRecord } from "./thenable-yD7SabqG.js";
2
+ import { n as freezeDeep } from "./freeze-jjan0lCv.js";
3
+ import { n as isForbiddenKey, o as readPath } from "./paths-CUvURzHp.js";
4
+ import { n as expirySeconds } from "./expiry-6XByK0dm.js";
5
+ import { r as validateRecord } from "./thenable-BNSM1U2R.js";
6
6
  import { t as anonymousSubject } from "./subject-BGoM5o8B.js";
7
- import { t as readClaim } from "./claims-map-7oQ3ue4X.js";
8
- import { t as clientNameOf } from "./clients-DjU5ABMy.js";
7
+ import { t as readClaim } from "./claims-map-CKkoAAYF.js";
8
+ import { t as clientNameOf } from "./clients-DYr3U86j.js";
9
9
  //#region src/jwt/map-claims.ts
10
10
  /** OpenID Connect Core section 5.1: profile data the provider owns. */
11
11
  const PROFILE_CLAIMS = [
@@ -180,7 +180,10 @@ function membershipsFromClaim(value) {
180
180
  });
181
181
  return out;
182
182
  }
183
- /** Zitadel's `role -> { orgId: orgDomain }` form: string values and no `roles` key. */
183
+ /**
184
+ * Zitadel's `role -> { orgId: orgDomain }` form: string values and no `roles`
185
+ * key.
186
+ */
184
187
  function isRoleToOrganisations(value) {
185
188
  const entries = Object.entries(value);
186
189
  return entries.length > 0 && !("roles" in value) && entries.every(([key, item]) => typeof item === "string" && !isForbiddenKey(key));
@@ -338,19 +341,25 @@ function mapClaimsToSubject(claims, options) {
338
341
  invalidChain: false
339
342
  };
340
343
  }
344
+ /**
345
+ * `true` when a verified token is not an OpenID Connect ID token for one of
346
+ * `clients`.
347
+ */
348
+ function idTokenMismatch(claims, headerTyp, clients) {
349
+ const typ = headerTyp?.toLowerCase();
350
+ if (typ !== void 0 && typ !== "jwt" && typ !== "application/jwt") return true;
351
+ if (typeof claims.iat !== "number") return true;
352
+ const aud = claims.aud;
353
+ const audiences = Array.isArray(aud) ? aud : aud === void 0 ? [] : [aud];
354
+ const expected = clients === void 0 ? [] : typeof clients === "string" ? [clients] : clients;
355
+ const azp = claims["azp"];
356
+ if (azp === void 0) return audiences.length > 1;
357
+ return typeof azp !== "string" || !expected.includes(azp);
358
+ }
341
359
  function acceptMismatch(claims, headerTyp, options, audience) {
342
360
  const accept = options.accept ?? "access-token";
343
361
  const typ = headerTyp?.toLowerCase();
344
- if (accept === "id-token") {
345
- if (typ !== void 0 && typ !== "jwt" && typ !== "application/jwt") return true;
346
- if (typeof claims.iat !== "number") return true;
347
- const aud = claims.aud;
348
- const audiences = Array.isArray(aud) ? aud : aud === void 0 ? [] : [aud];
349
- const clients = audience === void 0 ? [] : typeof audience === "string" ? [audience] : audience;
350
- const azp = claims["azp"];
351
- if (azp === void 0) return audiences.length > 1;
352
- return typeof azp !== "string" || !clients.includes(azp);
353
- }
362
+ if (accept === "id-token") return idTokenMismatch(claims, headerTyp, audience);
354
363
  if (options.profile === "fapi2" && typ !== "at+jwt") return true;
355
364
  if (typeof claims["nonce"] === "string") return true;
356
365
  if (audience !== void 0 && typeof claims.aud === "string") {
@@ -360,4 +369,4 @@ function acceptMismatch(claims, headerTyp, options, audience) {
360
369
  return false;
361
370
  }
362
371
  //#endregion
363
- export { mapClaimsToSubject as n, validateCustomClaims as r, acceptMismatch as t };
372
+ export { validateCustomClaims as i, idTokenMismatch as n, mapClaimsToSubject as r, acceptMismatch as t };
@@ -1,14 +1,14 @@
1
1
  import { t as compact } from "./compact-CAf557ZB.js";
2
- import { n as PermDockValidationError } from "./validation-error-ZfUHbKvf.js";
3
- import { n as PermDockDeniedError, r as PermDockRevokedError, t as PermDockApprovalRequiredError } from "./errors-BKy0EfhN.js";
4
- import { c as problemResponse, i as decisionResponse } from "./problem-CTviyH5L.js";
5
- import { u as InvalidSignatureError } from "./evaluations-beAooV0n.js";
2
+ import { n as PermDockValidationError } from "./validation-error-CYg2kJEw.js";
3
+ import { n as PermDockDeniedError, r as PermDockRevokedError, t as PermDockApprovalRequiredError } from "./errors-B6R_lg2a.js";
4
+ import { a as decisionResponse, l as problemResponse } from "./problem-BVLHFK33.js";
5
+ import { l as InvalidSignatureError } from "./evaluations-IBceAeKT.js";
6
6
  //#region src/server/map-error.ts
7
7
  /**
8
8
  * Turns a thrown PermDock error into its Problem Details response, with the
9
- * status, `WWW-Authenticate` and rate-limit fields `protect` sends for the
10
- * same decision. Returns `undefined` for anything else so the framework's own
11
- * error path takes over.
9
+ * status, `WWW-Authenticate` and rate-limit fields `protect` sends for the same
10
+ * decision. Returns `undefined` for anything else so the framework's own error
11
+ * path takes over.
12
12
  */
13
13
  function problemFromError(error, options = {}) {
14
14
  if (error instanceof InvalidSignatureError) return error.response;
@@ -3,13 +3,25 @@ import { t as beforeFirst } from "./text-BMFRfBqc.js";
3
3
  const HOOK_MARKER = "-- permdock:hook v1";
4
4
  /** The first line of a `--grants-out` file. */
5
5
  const GRANTS_MARKER = "-- permdock:grants v1";
6
- /** The first line of the `seeds` part: the `role_permissions` rows, a versioned migration. */
6
+ /**
7
+ * The first line of the `seeds` part: the `role_permissions` rows, a versioned
8
+ * migration.
9
+ */
7
10
  const SEEDS_MARKER = "-- permdock:seeds v1";
8
- /** The first line of the `indexes` part: the indexes the policies and helpers read through. */
11
+ /**
12
+ * The first line of the `indexes` part: the indexes the policies and helpers
13
+ * read through.
14
+ */
9
15
  const INDEXES_MARKER = "-- permdock:indexes v1";
10
- /** The first line of a `--backfill-out` migration: existing custom roles copied into the custom-role tables. */
16
+ /**
17
+ * The first line of a `--backfill-out` migration: existing custom roles copied
18
+ * into the custom-role tables.
19
+ */
11
20
  const BACKFILL_MARKER = "-- permdock:backfill v1";
12
- /** The first line of a `rls migrate --retire-out` migration: a materialised permissions table and its refresh triggers dropped. */
21
+ /**
22
+ * The first line of a `rls migrate --retire-out` migration: a materialised
23
+ * permissions table and its refresh triggers dropped.
24
+ */
13
25
  const RETIRE_MARKER = "-- permdock:retire v1";
14
26
  const HOOK_LINE = /^-- permdock:hook v(?<version>[1-9]\d*)(?: (?<rest>.*))?$/u;
15
27
  const GRANTS_LINE = /^-- permdock:grants v(?<version>[1-9]\d*)(?: (?<rest>.*))?$/u;
@@ -25,7 +37,10 @@ function pairs(rest) {
25
37
  }
26
38
  return fields;
27
39
  }
28
- /** The fields of a hook marker line, or undefined when `sql` does not start with one. */
40
+ /**
41
+ * The fields of a hook marker line, or undefined when `sql` does not start with
42
+ * one.
43
+ */
29
44
  function hookMarkerFields(sql) {
30
45
  const line = firstLine(sql);
31
46
  return line.startsWith(`-- permdock:hook v1 `) ? pairs(line.slice(20)) : void 0;