permdock 0.3.1 → 0.5.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 (552) hide show
  1. package/README.md +37 -35
  2. package/dist/{openapi-schema--ARjyfQr.js → 2020-C9VN-x8c.js} +5 -132
  3. package/dist/a2a/index.d.ts +8 -6
  4. package/dist/a2a/index.js +21 -31
  5. package/dist/{adapter-context-mlWsVGGg.js → adapter-context-CRhqyzCk.js} +1 -1
  6. package/dist/adoption-scan-B4R5fnMU.js +107 -0
  7. package/dist/agent/index.d.ts +3 -0
  8. package/dist/agent/index.js +1 -0
  9. package/dist/ai-sdk/index.d.ts +18 -23
  10. package/dist/ai-sdk/index.js +38 -21
  11. package/dist/app-data-MuyzVqX8.js +60 -0
  12. package/dist/approval-header-CJACtHkv.js +23 -0
  13. package/dist/approval-prompt-Dg5LeAcT.js +62 -0
  14. package/dist/approval-prompt-Djo_PyZc.d.ts +57 -0
  15. package/dist/approvals/index.d.ts +5 -3
  16. package/dist/approvals/index.js +8 -5
  17. package/dist/approvals-DJ6Yd5z1.js +995 -0
  18. package/dist/{approvers-DT4AVyIg.js → approvers-CqPOLD-o.js} +1 -1
  19. package/dist/arazzo-B6lebmiQ.js +36 -0
  20. package/dist/{arazzo-BAgw9ap6.js → arazzo-BWhNF-k0.js} +24 -17
  21. package/dist/args-IIolxxKA.js +197 -0
  22. package/dist/astro/index.d.ts +43 -0
  23. package/dist/astro/index.js +27 -0
  24. package/dist/audience-Dg8XsRaO.js +55 -0
  25. package/dist/auth-DRLEizbL.js +178 -0
  26. package/dist/authzen/index.d.ts +26 -6
  27. package/dist/authzen/index.js +228 -75
  28. package/dist/automation-BMZPIVUM.d.ts +114 -0
  29. package/dist/automation-DVjOckjV.js +157 -0
  30. package/dist/better-auth/index.d.ts +8 -6
  31. package/dist/better-auth/index.js +11 -23
  32. package/dist/better-supabase/index.d.ts +438 -86
  33. package/dist/better-supabase/index.js +1027 -184
  34. package/dist/bind--9EFVYWF.d.ts +38 -0
  35. package/dist/{bind-CuzGytRf.js → bind-CZzhx-Vj.js} +22 -10
  36. package/dist/body-CH5of8Ne.js +10 -0
  37. package/dist/body-text-QcXok_SI.js +52 -0
  38. package/dist/build-instance-BMnAudHn.js +52 -0
  39. package/dist/{canonical-json-DemiK4Vp.js → canonical-json-BC8_nMTw.js} +6 -6
  40. package/dist/{capability-2kYTMWDv.d.ts → capability-BSslw1QV.d.ts} +44 -25
  41. package/dist/{capability-4qPdO9gk.js → capability-N1K9IpqS.js} +69 -42
  42. package/dist/casbin-Cr7RLtA3.js +30 -0
  43. package/dist/casbin-Dyu2gnUD.js +234 -0
  44. package/dist/casl-64gpT-8x.js +24 -0
  45. package/dist/casl-DjEDhTCP.js +299 -0
  46. package/dist/catalog/index.d.ts +74 -2
  47. package/dist/catalog/index.js +51 -2
  48. package/dist/catalog-BECMPrwc.js +100 -0
  49. package/dist/catalog-DjhMYYCq.js +1 -0
  50. package/dist/catalog-R_A__RsH.js +52 -0
  51. package/dist/{catalog-doc-DdGm82XT.js → catalog-doc-C9wjsfNY.js} +54 -25
  52. package/dist/catalog-fingerprint-CCP0-yQS.js +153 -0
  53. package/dist/chat/index.d.ts +2 -0
  54. package/dist/chat/index.js +224 -0
  55. package/dist/chat-sdk/index.d.ts +87 -0
  56. package/dist/chat-sdk/index.js +197 -0
  57. package/dist/claims-map-7oQ3ue4X.js +13 -0
  58. package/dist/claims-map-Ca-QX8C6.d.ts +32 -0
  59. package/dist/claude-agent/index.d.ts +7 -14
  60. package/dist/claude-agent/index.js +26 -30
  61. package/dist/clerk/index.d.ts +9 -8
  62. package/dist/clerk/index.js +15 -45
  63. package/dist/cli/bin.js +36 -17
  64. package/dist/cli/index.d.ts +20 -6
  65. package/dist/cli/index.js +164 -4
  66. package/dist/cloud/index.d.ts +102 -63
  67. package/dist/cloud/index.js +240 -347
  68. package/dist/cloud-CIoHNevm.js +87 -0
  69. package/dist/codemod-Bmj9dWMH.js +37 -0
  70. package/dist/codemod-Cxvvc70T.js +2084 -0
  71. package/dist/{collect-DSTE3ml9.js → collect-CrZJJnEF.js} +79 -17
  72. package/dist/collect-DloHbDVa.js +55 -0
  73. package/dist/collect-FlXJlhus.js +1 -0
  74. package/dist/command-L8EstFNm.js +6 -0
  75. package/dist/{compact-y6vfu2_f.js → compact-CAf557ZB.js} +11 -1
  76. package/dist/compile/index.d.ts +1 -1
  77. package/dist/compile/index.js +1 -2
  78. package/dist/{compile-Ba4blROR.js → compile-CMqMx_IN.js} +13 -9
  79. package/dist/{compile-BkRyBDBw.d.ts → compile-Ckm2HqBZ.d.ts} +5 -3
  80. package/dist/completion-BqhRBJD8.js +143 -0
  81. package/dist/config-B46rm9sc.js +26 -0
  82. package/dist/{config-BJiM-xAm.js → config-bs_kZeYq.js} +15 -10
  83. package/dist/{config-report-CdCgbRnV.js → config-report-DUgj62Ai.js} +17 -8
  84. package/dist/{connection-CU8MQxRi.js → connection-DjhIJSs2.js} +8 -6
  85. package/dist/constants-DcJABbLW.js +20 -0
  86. package/dist/{context-Bcy85rGi.js → context-bbFHR-0D.js} +16 -5
  87. package/dist/convex/index.d.ts +11 -10
  88. package/dist/convex/index.js +18 -18
  89. package/dist/create-0VZ7Pdiu.d.ts +107 -0
  90. package/dist/create-BDS7wc3y.d.ts +138 -0
  91. package/dist/create-BFfm17UA.d.ts +110 -0
  92. package/dist/create-BWRSXgOF.js +403 -0
  93. package/dist/create-C3b4B5eF.js +130 -0
  94. package/dist/create-DnrmLnLW.js +323 -0
  95. package/dist/{credential-8P81ff4u.js → credential-DM2um3ha.js} +153 -32
  96. package/dist/credentials-DPyHmYz5.js +74 -0
  97. package/dist/deciding-columns-Sq12mEA6.js +123 -0
  98. package/dist/delegation-DaXVdDhM.js +286 -0
  99. package/dist/delegation-input-FTxMK3ji.js +19 -0
  100. package/dist/delivery/index.d.ts +5 -0
  101. package/dist/delivery/index.js +5 -0
  102. package/dist/delivery-DCAgNyCn.js +499 -0
  103. package/dist/delivery-event-xX4obB8F.js +40 -0
  104. package/dist/denied-text-D8jDHgsl.d.ts +19 -0
  105. package/dist/{describe-DMYiCjJV.d.ts → describe-BZUsixiL.d.ts} +11 -2
  106. package/dist/{describe-B_gVZEVi.js → describe-BybMRY7A.js} +10 -5
  107. package/dist/device-BARQ8eYG.js +193 -0
  108. package/dist/diff-CxZo9pTq.js +37 -0
  109. package/dist/{diff-2VaeChzX.js → diff-DCePiN6M.js} +61 -55
  110. package/dist/doctor-CxiwSfqH.js +44 -0
  111. package/dist/doctor-DFjUxf2f.js +2361 -0
  112. package/dist/drizzle/index.d.ts +5 -3
  113. package/dist/drizzle/index.js +6 -14
  114. package/dist/elysia/index.d.ts +16 -13
  115. package/dist/elysia/index.js +14 -13
  116. package/dist/env-DJZrPjRi.js +8 -0
  117. package/dist/errors-BDUwg2qC.js +27 -0
  118. package/dist/{errors-Cz5zn0mW.js → errors-BKy0EfhN.js} +6 -10
  119. package/dist/errors-BWXBMaKK.d.ts +11 -0
  120. package/dist/{errors-DPdqI50v.d.ts → errors-C2PXIv4c.d.ts} +2 -2
  121. package/dist/errors-CWTY6uih.js +143 -0
  122. package/dist/evaluate-_R8QkWaf.js +1732 -0
  123. package/dist/evaluations-16UqqQ6W.d.ts +32 -0
  124. package/dist/{evaluations-tz6D9A2G.js → evaluations-DZ2CbV5k.js} +181 -32
  125. package/dist/eve/index.d.ts +12 -16
  126. package/dist/eve/index.js +23 -29
  127. package/dist/event-time-CsegxXxB.js +23 -0
  128. package/dist/expiry-D4_YKRKD.js +52 -0
  129. package/dist/express/index.d.ts +13 -10
  130. package/dist/express/index.js +14 -12
  131. package/dist/fastify/index.d.ts +26 -13
  132. package/dist/fastify/index.js +17 -36
  133. package/dist/fetch-adapter-g0ypLkID.js +120 -0
  134. package/dist/fetch-adapter-qKJBuRqy.d.ts +31 -0
  135. package/dist/fields-D9tPVUUS.js +203 -0
  136. package/dist/files-C5ZI27eV.js +124 -0
  137. package/dist/{files-DWUN9PzI.js → files-D_JIzUrP.js} +12 -3
  138. package/dist/{fixtures-ht28Cplr.js → fixtures-B7XrLeY7.js} +12 -12
  139. package/dist/flags-C3DktBDY.js +86 -0
  140. package/dist/{from-snapshot-CTLijvdm.js → from-snapshot-D2lZt4Dd.js} +78 -65
  141. package/dist/{generate-CH7ThJ14.js → generate-CNU1pIOo.js} +1 -3
  142. package/dist/grantee-Cn1HyUsI.js +254 -0
  143. package/dist/grantee-conditions-CcXf8hMM.js +271 -0
  144. package/dist/grantee-match-DHArqY82.js +142 -0
  145. package/dist/h3/index.d.ts +37 -0
  146. package/dist/h3/index.js +35 -0
  147. package/dist/headers-BIjfMaoC.js +8 -0
  148. package/dist/headers-CIbDTUTK.d.ts +7 -0
  149. package/dist/{helpers-H_KARDVC.js → helpers-DTcZOzhF.js} +47 -39
  150. package/dist/hono/index.d.ts +12 -9
  151. package/dist/hono/index.js +14 -13
  152. package/dist/{hosted-DJQw46hn.js → hosted-BZIAYvon.js} +64 -15
  153. package/dist/hosted-DBDX0M-P.d.ts +78 -0
  154. package/dist/{http-SO7qGttf.js → http-BBoKefeS.js} +35 -2
  155. package/dist/{http-DPuDaChb.d.ts → http-B_LphE5Y.d.ts} +1 -2
  156. package/dist/http-DXJ37RDA.js +46 -0
  157. package/dist/{http-BIhmLfCc.js → http-ujKm0JXE.js} +3 -26
  158. package/dist/{openapi-import-cmwetbzw.js → import-CNV7I2Dw.js} +30 -26
  159. package/dist/{rls-import-4lLW_pbb.js → import-DMmOG27O.js} +271 -128
  160. package/dist/index-BcHcPyIo.d.ts +110 -0
  161. package/dist/index-CaxrMD1A.d.ts +1 -0
  162. package/dist/index-Chrs5fQ-.d.ts +210 -0
  163. package/dist/index-CxGUswIC.d.ts +431 -0
  164. package/dist/index-D8EovfsP.d.ts +91 -0
  165. package/dist/index-DOVf7RJv.d.ts +900 -0
  166. package/dist/{index-C8z4RjQV.d.ts → index-SGdIQyzc.d.ts} +34 -16
  167. package/dist/index.d.ts +20 -14
  168. package/dist/index.js +33 -23
  169. package/dist/init-DeMYsnYJ.js +96 -0
  170. package/dist/init-GG6Jh8HD.js +95 -0
  171. package/dist/{instance-options-jARdwfPN.d.ts → instance-options-Omfd793B.d.ts} +2 -2
  172. package/dist/instance-snapshot-Cxq4ygFc.js +600 -0
  173. package/dist/instant-BluqDvyS.js +19 -0
  174. package/dist/internals-Dk8A8fX3.js +17 -0
  175. package/dist/{json-schema-BsAflUGW.js → json-schema-B-vAwlde.js} +46 -9
  176. package/dist/json-schema-CN_iLFH2.d.ts +40 -0
  177. package/dist/jwt/index.d.ts +18 -11
  178. package/dist/jwt/index.js +166 -145
  179. package/dist/{kernel-_RRHmnMY.js → kernel-5JatXyND.js} +120 -43
  180. package/dist/kysely/index.d.ts +5 -3
  181. package/dist/kysely/index.js +6 -14
  182. package/dist/{live-options-H2eG8dfJ.js → live-options-BaAFCIiu.js} +16 -3
  183. package/dist/load-BxEtwlBS.js +1 -0
  184. package/dist/{load-DhWEB9P1.js → load-DFS_ry0W.js} +31 -7
  185. package/dist/{load-jose-BL6LH4bL.js → load-jose-DZ4dnjri.js} +1 -4
  186. package/dist/login-Dfe5RlYk.js +68 -0
  187. package/dist/login-imhuwvn3.js +254 -0
  188. package/dist/manifest-C8IzW3Do.js +42 -0
  189. package/dist/manifest-CtKR3GXL.js +370 -0
  190. package/dist/manifest-json-CAGzls-C.js +9 -0
  191. package/dist/{manifest-uDS9y5de.d.ts → manifest-mx5ghSFM.d.ts} +9 -2
  192. package/dist/manifest-schema-C0kK_8V0.js +399 -0
  193. package/dist/{map-claims-Z4QZOiFF.js → map-claims-D3oRmTk0.js} +19 -25
  194. package/dist/{map-error-pgUWNNtG.js → map-error-TCAdw-eW.js} +5 -5
  195. package/dist/{markers-B0hYLvMD.js → markers-C6joDI3o.js} +8 -3
  196. package/dist/mcp/index.d.ts +36 -9
  197. package/dist/mcp/index.js +476 -448
  198. package/dist/{rls-migrate-CN4TlJTO.js → migrate-BShP7Vf4.js} +119 -20
  199. package/dist/nest/index.d.ts +12 -9
  200. package/dist/nest/index.js +20 -20
  201. package/dist/next/index.d.ts +40 -20
  202. package/dist/next/index.js +37 -39
  203. package/dist/next/plugin.d.ts +1 -1
  204. package/dist/next/plugin.js +2 -2
  205. package/dist/node/index.d.ts +10 -10
  206. package/dist/node/index.js +7 -9
  207. package/dist/ocsf-BFp-PZZA.js +126 -0
  208. package/dist/openai/index.d.ts +9 -16
  209. package/dist/openai/index.js +18 -25
  210. package/dist/openapi/index.d.ts +3 -3
  211. package/dist/openapi/index.js +1 -1
  212. package/dist/{openapi-BqRBvAng.js → openapi-B7HZ0f-r.js} +9 -12
  213. package/dist/{openapi-CqqEbHsL.js → openapi-DTaEmTSW.js} +23 -26
  214. package/dist/openapi-ahr8rHu3.js +138 -0
  215. package/dist/operation-findings-DgATDpvh.js +36 -0
  216. package/dist/operations-CxybZErY.d.ts +59 -0
  217. package/dist/orpc/index.d.ts +13 -10
  218. package/dist/orpc/index.js +23 -20
  219. package/dist/otel/index.d.ts +3 -2
  220. package/dist/otel/index.js +53 -27
  221. package/dist/output-Dyw8fyPF.js +88 -0
  222. package/dist/output-files-B3IZJksC.js +1 -0
  223. package/dist/output-files-DhRBBE4n.js +138 -0
  224. package/dist/{rls-fields-CZOMlwHl.js → ownership-BatFgAA4.js} +2393 -2349
  225. package/dist/{package-root-zGkxO3oN.js → package-root-Dk_ETdkp.js} +4 -3
  226. package/dist/{parse-BuyjxhZV.js → parse-Cxq0WxrA.js} +3 -3
  227. package/dist/{parse-local-manifest-BrMozJCo.js → parse-local-manifest-CVSs6J9I.js} +2 -4
  228. package/dist/{parse-local-manifest-JLnaBH0S.d.ts → parse-local-manifest-DgqtruPn.d.ts} +1 -1
  229. package/dist/parse-request-D_tUXG6M.js +26 -0
  230. package/dist/paths-DXSHAMIa.js +42 -0
  231. package/dist/pdp/index.d.ts +7 -3
  232. package/dist/pdp/index.js +47 -29
  233. package/dist/{peer-BOr_kJE1.js → peer-C8swJ2GH.js} +23 -4
  234. package/dist/peer-CRvC7Hg1.js +1 -0
  235. package/dist/permdock-B9JxkBwC.js +868 -0
  236. package/dist/permdock-D7eeLJER.d.ts +502 -0
  237. package/dist/permission-registry-Br4jSNVi.js +385 -0
  238. package/dist/permissions-B-wCP5ZC.js +30 -0
  239. package/dist/{permissions-RJrovw98.js → permissions-CZKiUfFM.js} +4 -3
  240. package/dist/{permissions-CDgvKG5L.d.ts → permissions-oEWfl-kl.d.ts} +1 -2
  241. package/dist/policies-CO1oOymN.js +295 -0
  242. package/dist/{policy-D2W7uv19.d.ts → policy-Czo4n3Hs.d.ts} +2 -2
  243. package/dist/policy-DLZJ5gAp.js +399 -0
  244. package/dist/policy-from-catalog-DzhEc3Y9.js +450 -0
  245. package/dist/policy-module-CTlwMvLI.js +89 -0
  246. package/dist/{policy-IB6yxpC3.d.ts → policy-types-DzwivBgR.d.ts} +939 -1057
  247. package/dist/postgrest-CW0IqC-U.js +566 -0
  248. package/dist/postgrest-NUqZT-RB.d.ts +100 -0
  249. package/dist/powersync-BHfuehf3.js +62 -0
  250. package/dist/powersync-CbzkqL_M.js +1 -0
  251. package/dist/{powersync-Dv1_aWF7.js → powersync-bYUDLOAO.js} +30 -32
  252. package/dist/preset/index.d.ts +146 -0
  253. package/dist/preset/index.js +1 -0
  254. package/dist/preset-DZdU0tne.js +1768 -0
  255. package/dist/principal-source-pHneukrx.js +103 -0
  256. package/dist/prisma/index.d.ts +6 -3
  257. package/dist/prisma/index.js +6 -12
  258. package/dist/{problem-B43ztKIm.js → problem-CTviyH5L.js} +18 -27
  259. package/dist/{problem-details-DX075l9V.d.ts → problem-details-DXlt-vks.d.ts} +1 -1
  260. package/dist/{problem-details-_AMOYz-w.js → problem-details-cn5X30gZ.js} +45 -42
  261. package/dist/problem-types-CJ2325SZ.js +5 -0
  262. package/dist/{prompt-CXYhLfsS.js → prompt-DfZLJLIn.js} +2 -2
  263. package/dist/protected-DEPHc2xV.d.ts +38 -0
  264. package/dist/{protected-utU-SLuy.js → protected-DfjY5mLA.js} +37 -8
  265. package/dist/{provider-CSQd7m92.js → provider-CC-u3bYP.js} +23 -10
  266. package/dist/{provider-DZY281jO.d.ts → provider-DMVt6yYn.d.ts} +1 -1
  267. package/dist/{provider-store-Cfbvo4DE.js → provider-store-B5Yrkhzr.js} +6 -3
  268. package/dist/pull-BgIfno6w.js +256 -0
  269. package/dist/pull-ByOks_Tg.js +1 -0
  270. package/dist/push-CmFVBOeI.js +116 -0
  271. package/dist/pushed-policy-BImMTTIM.d.ts +57 -0
  272. package/dist/pushed-policy-DobP7AHI.js +238 -0
  273. package/dist/react/index.d.ts +8 -8
  274. package/dist/react/index.js +6 -6
  275. package/dist/react/provider-client.d.ts +1 -1
  276. package/dist/react/provider-client.js +1 -2
  277. package/dist/react-native/index.d.ts +24 -63
  278. package/dist/react-native/index.js +45 -27
  279. package/dist/{refs-KYb4ntaz.js → refs-K6eWUJ0H.js} +1 -1
  280. package/dist/relation-walk-3OyDBF0S.js +186 -0
  281. package/dist/relations-BnCWnJGI.js +163 -0
  282. package/dist/renames-CGj7YwcQ.js +175 -0
  283. package/dist/{replay-CYyiLiwO.d.ts → replay-D7iKcLFe.d.ts} +1 -1
  284. package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
  285. package/dist/request-context-BTRTG7OT.js +71 -0
  286. package/dist/request-context-C2_1lchh.d.ts +5 -0
  287. package/dist/request-schema-CMreVuFM.js +148 -0
  288. package/dist/resend/index.d.ts +126 -0
  289. package/dist/resend/index.js +379 -0
  290. package/dist/resource-relations-D_jw0BFx.js +243 -0
  291. package/dist/retire-CALjIQ7e.js +240 -0
  292. package/dist/{revocations-Cy06JNx2.d.ts → revocations-R07lFBnX.d.ts} +2 -0
  293. package/dist/rls-BA8an5Ap.js +336 -0
  294. package/dist/{rls-DiinlRML.js → rls-j6t43t7n.js} +1066 -1068
  295. package/dist/role-builder-CXbis5-X.js +623 -0
  296. package/dist/{rpc-DL9Sqvb1.js → rpc-aPyNi6tA.js} +18 -8
  297. package/dist/run-CNsApDpd.js +1 -0
  298. package/dist/run-DOfMtc9V.js +723 -0
  299. package/dist/run-ticket-BjhTOi6u.d.ts +124 -0
  300. package/dist/run-ticket-sxFI6LAk.js +337 -0
  301. package/dist/{runtime-CB8gQFvS.js → runtime-D3VTAiCA.js} +1 -1
  302. package/dist/{saas-DhpJjnBA.js → saas-FO-Q8oj0.js} +18 -15
  303. package/dist/scan-BOI5tJ-6.js +29 -0
  304. package/dist/{schema-D3MnDMxa.js → schema-B4v0Qrac.js} +106 -10
  305. package/dist/schema-yLuBWWsh.js +130 -0
  306. package/dist/scim/index.d.ts +2 -2
  307. package/dist/scim/index.js +1 -2
  308. package/dist/{scim-BFGBBAqR.js → scim-ClHtpyV3.js} +213 -87
  309. package/dist/{scopes-CVdPrWN-.js → scopes-CUPSjo9q.js} +20 -7
  310. package/dist/server/index.d.ts +13 -134
  311. package/dist/server/index.js +13 -10
  312. package/dist/server-DqCT4CgZ.js +453 -0
  313. package/dist/{create-B1d519XK.d.ts → server-types-BLd4MnBX.d.ts} +89 -70
  314. package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
  315. package/dist/shared-CD11nBbC.js +304 -0
  316. package/dist/{shared-DRu8VFVM.js → shared-DvvFzYXe.js} +8 -9
  317. package/dist/signals-D3NcTKUS.js +32 -0
  318. package/dist/sink-BEZSlMS_.js +957 -0
  319. package/dist/sink-Bj_lDUDq.d.ts +225 -0
  320. package/dist/{skills-Biq5uup3.js → skills-B6lVdD_W.js} +16 -8
  321. package/dist/skills-CTYwkl44.js +51 -0
  322. package/dist/snapshot-CXUWfsNy.js +269 -0
  323. package/dist/{snapshot-cache-D6jLelln.js → snapshot-cache-DZHQ0KF6.js} +11 -5
  324. package/dist/{snapshot-cache-B-LxUahj.d.ts → snapshot-cache-DqK9eDmM.d.ts} +7 -5
  325. package/dist/solid/index.d.ts +24 -25
  326. package/dist/solid/index.js +41 -11
  327. package/dist/solid-start/index.d.ts +52 -0
  328. package/dist/solid-start/index.js +49 -0
  329. package/dist/{sources-BdOYLw9j.d.ts → sources-BV9j0DeZ.d.ts} +11 -13
  330. package/dist/{sources-4p0-4xQm.js → sources-vs5dGOsS.js} +147 -142
  331. package/dist/sql-B5T1IL83.js +55 -0
  332. package/dist/src-DLfUWFAI.js +1851 -0
  333. package/dist/ssf/index.d.ts +4 -4
  334. package/dist/ssf/index.js +440 -106
  335. package/dist/standard-webhooks-6lg8v_is.d.ts +88 -0
  336. package/dist/standard-webhooks-DgFFD-Ga.js +228 -0
  337. package/dist/storage-C2bWdvJH.js +132 -0
  338. package/dist/{store-DMAWwAJV.js → store-4u_hxjWa.js} +42 -55
  339. package/dist/{store-options-ByhZq1jV.js → store-options-BqEakYRa.js} +38 -24
  340. package/dist/{stores-BT2pSCub.js → stores-BbsD4fAR.js} +7 -3
  341. package/dist/stores-ClZUgeoP.d.ts +30 -0
  342. package/dist/{stream-D1RXubw2.d.ts → stream-7-xmnf3U.d.ts} +2 -2
  343. package/dist/{stream-DDpvynSB.js → stream-CvdUS9V1.js} +10 -2
  344. package/dist/style-DiKWnAvn.js +1 -0
  345. package/dist/{style-CTm1AXDT.js → style-Uao76wO7.js} +3 -2
  346. package/dist/subject-BGoM5o8B.js +17 -0
  347. package/dist/{subject-settings-BwBmCdTR.js → subject-settings-CkEwrw3W.js} +23 -5
  348. package/dist/supabase/index.d.ts +23 -106
  349. package/dist/supabase/index.js +5 -4
  350. package/dist/supabase/middleware.d.ts +13 -6
  351. package/dist/supabase/middleware.js +16 -11
  352. package/dist/supabase-9pqI57pW.js +92 -0
  353. package/dist/{supabase-C0qESOa-.js → supabase-Dxlp8A94.js} +124 -247
  354. package/dist/supabase-hook-CXcGpHqq.js +1 -0
  355. package/dist/{supabase-hook-ntETYCQu.js → supabase-hook-DdDQhMlw.js} +1659 -819
  356. package/dist/{supautils-u8jXTGrt.js → supautils-B6HYL9eL.js} +2 -2
  357. package/dist/support-session-C6xJQYut.js +158 -0
  358. package/dist/svelte/Protected.svelte +11 -4
  359. package/dist/svelte/index.d.ts +7 -7
  360. package/dist/svelte/index.js +26 -12
  361. package/dist/svelte/runtime.d.ts +10 -3
  362. package/dist/svelte/runtime.js +4 -3
  363. package/dist/svelte/source.d.ts +7 -7
  364. package/dist/svelte/source.js +5 -5
  365. package/dist/sveltekit/index.d.ts +51 -0
  366. package/dist/sveltekit/index.js +27 -0
  367. package/dist/tanstack-start/index.d.ts +51 -0
  368. package/dist/tanstack-start/index.js +40 -0
  369. package/dist/target-Bw37TFNA.js +51 -0
  370. package/dist/{validity-uOp8UpYn.js → tenancy-DN2QAx9z.js} +6 -42
  371. package/dist/terminal/index.d.ts +11 -9
  372. package/dist/terminal/index.js +36 -316
  373. package/dist/testing/index.d.ts +391 -106
  374. package/dist/testing/index.js +4574 -1286
  375. package/dist/testing/saas/index.d.ts +9 -8
  376. package/dist/testing/saas/index.js +2 -2
  377. package/dist/testing/saas/permissions.d.ts +1 -1
  378. package/dist/testing/saas/permissions.js +1 -2
  379. package/dist/text-BMFRfBqc.js +8 -0
  380. package/dist/{text-diff-BdkkYSbi.js → text-diff-BQcUapOb.js} +1 -1
  381. package/dist/thenable-yD7SabqG.js +31 -0
  382. package/dist/time-DkWjdL98.js +71 -0
  383. package/dist/{token-CIWxJOCh.js → token-BLZcjQgt.js} +15 -6
  384. package/dist/tool-refusal-CMLN5xhn.js +41 -0
  385. package/dist/trpc/index.d.ts +12 -9
  386. package/dist/trpc/index.js +18 -17
  387. package/dist/{types-DbjRN55U.d.ts → types-5Ut_pbKy.d.ts} +141 -13
  388. package/dist/types-BNORmDM8.d.ts +172 -0
  389. package/dist/types-BjV-fqcA.d.ts +57 -0
  390. package/dist/{types-QCuYJh4q.d.ts → types-BqAKcRNW.d.ts} +2 -1
  391. package/dist/types-C8-KNsFf.d.ts +107 -0
  392. package/dist/{types-aqOHTHcp.d.ts → types-CCpc2Dcv.d.ts} +77 -17
  393. package/dist/{types-Dnemwd77.d.ts → types-CZTnPFzM.d.ts} +50 -11
  394. package/dist/{types-C97IskBw.d.ts → types-CdlxsYQh.d.ts} +23 -11
  395. package/dist/{types-DxiCGmmd.d.ts → types-ClZaWzfb.d.ts} +9 -6
  396. package/dist/types-DX0LaKTb.d.ts +157 -0
  397. package/dist/types-DiQjupG2.d.ts +332 -0
  398. package/dist/types-DqzsnlSA.js +67 -0
  399. package/dist/types-_sHy8BQf.d.ts +65 -0
  400. package/dist/types-fbZ7JEXr.d.ts +89 -0
  401. package/dist/types-tIgIeIKJ.d.ts +66 -0
  402. package/dist/unplugin/index.d.ts +1 -1
  403. package/dist/unplugin/index.js +2 -2
  404. package/dist/usage-CHOtwL19.js +1 -0
  405. package/dist/usage-DHtE8j4E.js +32 -0
  406. package/dist/{usage-ItS7nLcl.js → usage-T5mXq98v.js} +56 -13
  407. package/dist/{validation-error-Ba264OaJ.d.ts → validation-error-Bg5Tpluk.d.ts} +1 -1
  408. package/dist/{validation-error-CnjZ4t92.js → validation-error-ZfUHbKvf.js} +1 -1
  409. package/dist/validity-CZ7-y0Cj.js +79 -0
  410. package/dist/{verifier-BxBo6I44.js → verifier-DHuh-okk.js} +68 -21
  411. package/dist/verify-DbCL9bnB.js +1770 -0
  412. package/dist/{version-BvacVTZR.js → version-CEbQ5UeM.js} +4 -3
  413. package/dist/version-DXkYUISx.js +1 -0
  414. package/dist/{views-Soe7bGSC.js → views-DTIIO-oQ.js} +41 -2
  415. package/dist/{permissions-DttnqqxC.d.ts → vocabulary-D6lPdb4Z.d.ts} +120 -29
  416. package/dist/vue/index.d.ts +25 -21
  417. package/dist/vue/index.js +25 -9
  418. package/dist/waiter-BGUtGYoU.js +67 -0
  419. package/dist/waiter-CKy4MQSY.d.ts +36 -0
  420. package/dist/watch-Cb-NcaUw.js +1 -0
  421. package/dist/{watch-DVBJ9cBq.js → watch-CszoTJMq.js} +47 -8
  422. package/dist/webmcp/index.d.ts +2 -2
  423. package/dist/webmcp/index.js +13 -37
  424. package/dist/where-scope-Dv-WTP-w.js +306 -0
  425. package/dist/who-can-D0QoYbEb.js +364 -0
  426. package/dist/wire-delegation-Cv3W2eaM.js +36 -0
  427. package/dist/wire-denial-C7PaVYEM.js +27 -0
  428. package/dist/workflow/index.d.ts +5 -0
  429. package/dist/workflow/index.js +223 -0
  430. package/dist/workflow-sdk/index.d.ts +56 -0
  431. package/dist/workflow-sdk/index.js +78 -0
  432. package/dist/wrap-Bd1Tejur.d.ts +15 -0
  433. package/dist/wrap-gX61EtpB.js +27 -0
  434. package/package.json +140 -41
  435. package/schemas/access-event-v1.json +118 -0
  436. package/schemas/approval-request-v1.json +34 -1
  437. package/schemas/approval-signature-v1.json +94 -0
  438. package/schemas/automation-event-v1.json +113 -0
  439. package/schemas/capability-v1.json +84 -0
  440. package/schemas/catalog-event-v1.json +87 -0
  441. package/schemas/catalog-v1.json +129 -12
  442. package/schemas/cli-commands-v1.json +164 -0
  443. package/schemas/cli-result-v1.json +96 -0
  444. package/schemas/cloud-api-v1.json +5407 -0
  445. package/schemas/connector-v1.json +408 -0
  446. package/schemas/credential-event-v1.json +81 -0
  447. package/schemas/credential-v1.json +134 -0
  448. package/schemas/decision-event-v1.json +288 -0
  449. package/schemas/delivery-event-v1.json +117 -0
  450. package/schemas/directory-event-v1.json +85 -0
  451. package/schemas/evidence-export-v1.json +54 -0
  452. package/schemas/membership-event-v1.json +93 -0
  453. package/schemas/policy-v1.json +68 -0
  454. package/schemas/pushed-policy-v1.json +236 -0
  455. package/schemas/run-v1.json +162 -0
  456. package/schemas/snapshot-v1.json +138 -0
  457. package/schemas/supabase-claims-v1.json +4 -4
  458. package/schemas/supabase-manifest-v1.json +5 -1
  459. package/schemas/support-session-v1.json +111 -0
  460. package/skills/permdock/SKILL.md +16 -12
  461. package/skills/permdock-agents/SKILL.md +40 -23
  462. package/skills/permdock-agents/references/operations-automations-chat.md +221 -0
  463. package/skills/permdock-agents/references/runtimes.md +22 -18
  464. package/skills/permdock-approvals/SKILL.md +29 -13
  465. package/skills/permdock-approvals/references/delivery-and-waiters.md +172 -0
  466. package/skills/permdock-approvals/references/stores-and-resume.md +21 -7
  467. package/skills/permdock-audit/SKILL.md +3 -3
  468. package/skills/permdock-credentials/SKILL.md +5 -5
  469. package/skills/permdock-credentials/references/tokens-keys-links.md +19 -10
  470. package/skills/permdock-data/SKILL.md +6 -6
  471. package/skills/permdock-data/references/queries-and-rls.md +13 -8
  472. package/skills/permdock-data/references/relationships.md +3 -3
  473. package/skills/permdock-tenancy/SKILL.md +20 -7
  474. package/skills/permdock-tenancy/references/contacts-and-support-sessions.md +122 -0
  475. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +6 -4
  476. package/skills/permdock-wire/SKILL.md +18 -12
  477. package/skills/permdock-wire/references/adapters.md +146 -50
  478. package/skills/permdock-wire/references/policy-options.md +15 -6
  479. package/skills/permdock-wire/references/presets-and-recipes.md +58 -0
  480. package/dist/approvals-DbYAuNkG.js +0 -224
  481. package/dist/arazzo-C9chp3ST.js +0 -54
  482. package/dist/bind-C_ob3LKa.d.ts +0 -25
  483. package/dist/catalog-CRW5Mx_B.js +0 -2
  484. package/dist/catalog-CYj-mX2O.js +0 -48
  485. package/dist/catalog-DWF5cYqB.js +0 -55
  486. package/dist/cloud-CfwZ39Rl.js +0 -50
  487. package/dist/cloud-DWLXO2af.js +0 -118
  488. package/dist/collect-CHB22Sx4.js +0 -83
  489. package/dist/collect-DSWOk19R.js +0 -2
  490. package/dist/commands-BeaGNj_o.js +0 -97
  491. package/dist/config-ir40y8m0.js +0 -36
  492. package/dist/create-CMwIl-w2.js +0 -253
  493. package/dist/delegation-D8pUEuce.js +0 -103
  494. package/dist/diff-C9RDjjhs.js +0 -48
  495. package/dist/doctor-Djh6JDEk.js +0 -53
  496. package/dist/doctor-DvH0IQff.js +0 -1194
  497. package/dist/doctor-collect-CjdO0wQX.js +0 -665
  498. package/dist/duration-xK2jGFVc.js +0 -25
  499. package/dist/errors-CWfoNg9N.js +0 -47
  500. package/dist/errors-DRnGZHzF.js +0 -30
  501. package/dist/evaluation-items-CfCCejQd.js +0 -40
  502. package/dist/expiry-BoBJ8Tvc.js +0 -7
  503. package/dist/fields-BMl1RxoX.js +0 -26
  504. package/dist/grantee-Cv5Sogfv.js +0 -602
  505. package/dist/headers-BZSDieNT.js +0 -6
  506. package/dist/headers-Cf-zWvsO.d.ts +0 -6
  507. package/dist/ids-DC4V4CFu.js +0 -18
  508. package/dist/index-0nNqHspG.d.ts +0 -6
  509. package/dist/index-BNc7Wer_.d.ts +0 -483
  510. package/dist/index-C7Tw7MaW.d.ts +0 -201
  511. package/dist/instance-options-Dhhcnm3y.js +0 -22
  512. package/dist/load-DwJUafYN.js +0 -2
  513. package/dist/manifest-iaoBXHKc.js +0 -783
  514. package/dist/map-AcxK9o_D.js +0 -147
  515. package/dist/may-use-DndQ5tQ-.js +0 -77
  516. package/dist/openapi-CQTsgKoB.js +0 -164
  517. package/dist/permdock-CbgvLnuo.js +0 -3479
  518. package/dist/permissions-DVoF6dMt.js +0 -662
  519. package/dist/policy-xyWg7QdR.js +0 -1122
  520. package/dist/powersync-CrBX8hY6.js +0 -2
  521. package/dist/powersync-DE19b9dT.js +0 -62
  522. package/dist/protected-BdnIEFkY.d.ts +0 -27
  523. package/dist/protected-xAr24FEC.d.ts +0 -40
  524. package/dist/relations-cjOL01hZ.js +0 -505
  525. package/dist/rls-P-BeBx0n.js +0 -238
  526. package/dist/rls-graph-CHwx0V8q.js +0 -435
  527. package/dist/rls-ownership-DcYlZ09B.js +0 -843
  528. package/dist/rls-shared-Cewd_-zI.js +0 -495
  529. package/dist/rls-verify-CMv9H3wV.js +0 -746
  530. package/dist/run-BWc9qqvE.js +0 -174
  531. package/dist/server-DlZ28Oz5.js +0 -268
  532. package/dist/sink-B1fZzIMf.d.ts +0 -104
  533. package/dist/sink-Bd9PSyfq.js +0 -141
  534. package/dist/skills-C5CbhhpG.js +0 -56
  535. package/dist/snapshot-Enxd0n-s.js +0 -975
  536. package/dist/sql-xdg5f4Fi.js +0 -27
  537. package/dist/src-BDwEZWrZ.js +0 -568
  538. package/dist/store-jOBYpiXC.d.ts +0 -36
  539. package/dist/stores-C0IMQrGI.d.ts +0 -52
  540. package/dist/subject-C6dLxqHU.js +0 -24
  541. package/dist/supabase-config-Bj3iDH2I.js +0 -472
  542. package/dist/supabase-hook-gd3s8bxB.js +0 -2
  543. package/dist/supabase-s4o9s1O1.js +0 -83
  544. package/dist/thenable-okc2xDsj.js +0 -10
  545. package/dist/types-BnIEz1sU.d.ts +0 -48
  546. package/dist/types-Bvc4oWT6.d.ts +0 -9
  547. package/dist/types-CKNSyIf_.d.ts +0 -52
  548. package/dist/types-Cq_H8N_X.d.ts +0 -197
  549. package/dist/usage-B0YuTQRO.js +0 -42
  550. package/dist/usage-DorAJiU_.js +0 -2
  551. package/dist/vocabulary-DA8a8zif.d.ts +0 -56
  552. package/dist/watch-BwxLTYMZ.js +0 -2
@@ -1,7 +1,8 @@
1
- import { Cr as Actor, Dr as CustomRole, Mr as Membership, Nr as Principal, Pr as Subject, bt as RelationSource, dt as LimitStore, kr as Delegation, un as PermDockOptions } from "../../policy-IB6yxpC3.js";
2
- import { f as Permission } from "../../permissions-DttnqqxC.js";
3
- import { a as SaasProject, c as saasPlans, i as SaasFolderSchema, l as saasRoles, n as SaasDocSchema, o as SaasProjectSchema, r as SaasFolder, s as saasPermissions, t as SaasDoc, u as saasTenantRoleNames } from "../../permissions-CDgvKG5L.js";
4
- import { n as saasPolicy, t as SAAS_API_KEY_LIMIT } from "../../policy-D2W7uv19.js";
1
+ import { $n as Delegation, Q as LimitStore, Rt as Instant, Zn as CustomRole, ir as Subject, it as RelationSource, nr as Membership, qn as Actor, rr as Principal } from "../../policy-types-DzwivBgR.js";
2
+ import { w as Permission } from "../../vocabulary-D6lPdb4Z.js";
3
+ import { i as PermDockOptions } from "../../permdock-D7eeLJER.js";
4
+ import { a as SaasProject, c as saasPlans, i as SaasFolderSchema, l as saasRoles, n as SaasDocSchema, o as SaasProjectSchema, r as SaasFolder, s as saasPermissions, t as SaasDoc, u as saasTenantRoleNames } from "../../permissions-oEWfl-kl.js";
5
+ import { n as saasPolicy, t as SAAS_API_KEY_LIMIT } from "../../policy-Czo4n3Hs.js";
5
6
  import { StandardSchemaV1 } from "@standard-schema/spec";
6
7
  //#region src/testing/saas/schema.d.ts
7
8
  type FieldKind = "string" | "boolean" | "nullable-string";
@@ -121,8 +122,8 @@ type SaasTokenOptions = {
121
122
  /** Claim memberships; `false` omits the claim (database mode). Defaults to the seed. */
122
123
  readonly memberships?: readonly Membership[] | false;
123
124
  readonly ttl?: number;
124
- /** Epoch seconds used for `iat`. */
125
- readonly now?: number;
125
+ /** The instant used for `iat`; defaults to the current time. */
126
+ readonly now?: Instant;
126
127
  readonly issuer?: string;
127
128
  readonly audience?: string;
128
129
  readonly claims?: Readonly<Record<string, unknown>>;
@@ -134,9 +135,9 @@ export declare function signSaasToken(sub: string, options?: SaasTokenOptions):
134
135
  * and returns its `sub`, or `null`; never throws. Identity only: memberships
135
136
  * and plans come from the seed, never from the token.
136
137
  */
137
- export declare function verifySaasToken(token: string | null | undefined, now?: number): Promise<string | null>;
138
+ export declare function verifySaasToken(token: string | null | undefined, now?: Instant): Promise<string | null>;
138
139
  /** `verifySaasToken` plus the token's `exp` as `expiresAt` (epoch seconds). */
139
- export declare function verifySaasSession(token: string | null | undefined, now?: number): Promise<{
140
+ export declare function verifySaasSession(token: string | null | undefined, at?: Instant): Promise<{
140
141
  readonly sub: string;
141
142
  readonly expiresAt: number;
142
143
  } | null>;
@@ -1,3 +1,3 @@
1
- import { a as saasPlans, c as rowSchema, i as saasPermissions, n as SaasFolderSchema, o as saasRoles, r as SaasProjectSchema, s as saasTenantRoleNames, t as SaasDocSchema } from "../../permissions-RJrovw98.js";
2
- import { C as saasOrg, D as saasUsers, E as saasSeed, O as SAAS_API_KEY_LIMIT, S as saasMemberships, T as saasRelations, _ as verifySaasToken, a as saasProject, b as SAAS_EXPIRED_AT, c as saasUser, d as saasIssuer, f as saasJwks, g as verifySaasSession, h as signSaasToken, i as saasLimitStore, k as saasPolicy, l as SAAS_TOKEN_TTL_SECONDS, m as saasPublicJwk, n as saasFolder, o as saasScenarioOptions, p as saasPrivateJwk, r as saasFolderScenarios, s as saasScenarios, t as saasDoc, u as saasAudience, v as saasSchemaSql, w as saasPrincipal, x as saasCustomRoles, y as saasSeedSql } from "../../saas-DhpJjnBA.js";
1
+ import { a as saasPlans, c as rowSchema, i as saasPermissions, n as SaasFolderSchema, o as saasRoles, r as SaasProjectSchema, s as saasTenantRoleNames, t as SaasDocSchema } from "../../permissions-CZKiUfFM.js";
2
+ import { C as saasOrg, D as saasUsers, E as saasSeed, O as SAAS_API_KEY_LIMIT, S as saasMemberships, T as saasRelations, _ as verifySaasToken, a as saasProject, b as SAAS_EXPIRED_AT, c as saasUser, d as saasIssuer, f as saasJwks, g as verifySaasSession, h as signSaasToken, i as saasLimitStore, k as saasPolicy, l as SAAS_TOKEN_TTL_SECONDS, m as saasPublicJwk, n as saasFolder, o as saasScenarioOptions, p as saasPrivateJwk, r as saasFolderScenarios, s as saasScenarios, t as saasDoc, u as saasAudience, v as saasSchemaSql, w as saasPrincipal, x as saasCustomRoles, y as saasSeedSql } from "../../saas-FO-Q8oj0.js";
3
3
  export { SAAS_API_KEY_LIMIT, SAAS_EXPIRED_AT, SAAS_TOKEN_TTL_SECONDS, SaasDocSchema, SaasFolderSchema, SaasProjectSchema, rowSchema, saasAudience, saasCustomRoles, saasDoc, saasFolder, saasFolderScenarios, saasIssuer, saasJwks, saasLimitStore, saasMemberships, saasOrg, saasPermissions, saasPlans, saasPolicy, saasPrincipal, saasPrivateJwk, saasProject, saasPublicJwk, saasRelations, saasRoles, saasScenarioOptions, saasScenarios, saasSchemaSql, saasSeed, saasSeedSql, saasTenantRoleNames, saasUser, saasUsers, signSaasToken, verifySaasSession, verifySaasToken };
@@ -1,2 +1,2 @@
1
- import { a as SaasProject, c as saasPlans, i as SaasFolderSchema, l as saasRoles, n as SaasDocSchema, o as SaasProjectSchema, r as SaasFolder, s as saasPermissions, t as SaasDoc, u as saasTenantRoleNames } from "../../permissions-CDgvKG5L.js";
1
+ import { a as SaasProject, c as saasPlans, i as SaasFolderSchema, l as saasRoles, n as SaasDocSchema, o as SaasProjectSchema, r as SaasFolder, s as saasPermissions, t as SaasDoc, u as saasTenantRoleNames } from "../../permissions-oEWfl-kl.js";
2
2
  export { SaasDoc, SaasDocSchema, SaasFolder, SaasFolderSchema, SaasProject, SaasProjectSchema, saasPermissions, saasPlans, saasRoles, saasTenantRoleNames };
@@ -1,2 +1 @@
1
- import { a as saasPlans, i as saasPermissions, n as SaasFolderSchema, o as saasRoles, r as SaasProjectSchema, s as saasTenantRoleNames, t as SaasDocSchema } from "../../permissions-RJrovw98.js";
2
- export { SaasDocSchema, SaasFolderSchema, SaasProjectSchema, saasPermissions, saasPlans, saasRoles, saasTenantRoleNames };
1
+ export { t as SaasDocSchema, n as SaasFolderSchema, r as SaasProjectSchema, i as saasPermissions, a as saasPlans, o as saasRoles, s as saasTenantRoleNames } from "../../permissions-CZKiUfFM.js";
@@ -0,0 +1,8 @@
1
+ //#region src/cli/shared/text.ts
2
+ /** The text before the first `separator`, or all of it when there is none. */
3
+ function beforeFirst(text, separator) {
4
+ const at = text.indexOf(separator);
5
+ return at === -1 ? text : text.slice(0, at);
6
+ }
7
+ //#endregion
8
+ export { beforeFirst as t };
@@ -1,5 +1,5 @@
1
1
  import { createTwoFilesPatch } from "diff";
2
- //#region src/cli/text-diff.ts
2
+ //#region src/cli/core/text-diff.ts
3
3
  const MAX_LINES = 40;
4
4
  /**
5
5
  * A unified diff from the file on disk to what the command would write,
@@ -0,0 +1,31 @@
1
+ import { r as isRecord } from "./compact-CAf557ZB.js";
2
+ //#region src/core/thenable.ts
3
+ function isThenable(value) {
4
+ return value !== null && typeof value === "object" && "then" in value && typeof value.then === "function";
5
+ }
6
+ /** Settles a promise nobody awaits, so its rejection is not reported as unhandled. */
7
+ function ignoreRejection(value) {
8
+ Promise.resolve(value).then(void 0, () => void 0);
9
+ }
10
+ /** Runs a Standard Schema that must answer synchronously; an asynchronous answer fails. */
11
+ function validateSync(schema, value) {
12
+ const result = schema["~standard"].validate(value);
13
+ if (isThenable(result)) {
14
+ ignoreRejection(result);
15
+ return { ok: false };
16
+ }
17
+ return result.issues === void 0 ? {
18
+ ok: true,
19
+ value: result.value
20
+ } : {
21
+ ok: false,
22
+ issues: result.issues
23
+ };
24
+ }
25
+ /** `validateSync` for a schema whose output must be an object; anything else is `undefined`. */
26
+ function validateRecord(schema, value) {
27
+ const validated = validateSync(schema, value);
28
+ return validated.ok && isRecord(validated.value) ? validated.value : void 0;
29
+ }
30
+ //#endregion
31
+ export { validateSync as i, isThenable as n, validateRecord as r, ignoreRejection as t };
@@ -0,0 +1,71 @@
1
+ //#region src/core/time.ts
2
+ /** RFC 3339 `date-time` in UTC or with an offset; fractional seconds optional. */
3
+ const RFC3339_PATTERN = "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})$";
4
+ const RFC3339 = /* @__PURE__ */ new RegExp(RFC3339_PATTERN, "u");
5
+ function isRfc3339(value) {
6
+ return typeof value === "string" && RFC3339.test(value) && Number.isFinite(Date.parse(value));
7
+ }
8
+ /** Seconds since the epoch as RFC 3339 in UTC. */
9
+ function rfc3339(seconds) {
10
+ return (/* @__PURE__ */ new Date(seconds * 1e3)).toISOString();
11
+ }
12
+ /** Milliseconds since the epoch as RFC 3339 in UTC, milliseconds kept; throws a `RangeError` for a value outside the `Date` range. */
13
+ function isoAt(millis) {
14
+ return new Date(millis).toISOString();
15
+ }
16
+ /** RFC 3339 in UTC of `now`, or of the clock when absent; throws a `RangeError` for a `now` that is not an `Instant`. */
17
+ function isoNow(now) {
18
+ return dateAt(now).toISOString();
19
+ }
20
+ /** Whole seconds since the epoch of an RFC 3339 instant; `undefined` for anything else. */
21
+ function secondsOf(value) {
22
+ return isRfc3339(value) ? Math.floor(Date.parse(value) / 1e3) : void 0;
23
+ }
24
+ /** Whole seconds since the epoch of an RFC 3339 string or an `Instant`; `undefined` for anything else, Unix seconds included. */
25
+ function instantOf(value) {
26
+ if (typeof value === "string") return secondsOf(value);
27
+ if (typeof value === "object" && value !== null && "epochMilliseconds" in value && typeof value.epochMilliseconds === "number" && Number.isFinite(value.epochMilliseconds)) return Math.floor(value.epochMilliseconds / 1e3);
28
+ }
29
+ /** A duration: a whole number of seconds above zero, else `undefined`. */
30
+ function durationOf(value) {
31
+ return typeof value === "number" && Number.isSafeInteger(value) && value > 0 ? value : void 0;
32
+ }
33
+ /** Throws at definition time unless `value` is a whole number of seconds above zero. */
34
+ function assertDuration(value, label) {
35
+ if (durationOf(value) === void 0) throw new Error(`PermDock: ${label} must be a whole number of seconds above 0, got ${JSON.stringify(value) ?? String(value)}`);
36
+ }
37
+ /** Whole seconds since the epoch of `now`, or of the clock when absent. */
38
+ function nowSeconds(now) {
39
+ return Math.floor(nowMillis(now) / 1e3);
40
+ }
41
+ /** The `validation` denial detail for a `now` option that is not an `Instant`. */
42
+ const INVALID_NOW = Object.freeze({
43
+ field: "now",
44
+ message: "now must be an Instant ({ epochMilliseconds }), such as a Temporal.Instant"
45
+ });
46
+ /** The `Date` of `now`, or of the clock when absent; throws a `RangeError` for a `now` that is not an `Instant`. */
47
+ function dateAt(now) {
48
+ const millis = nowMillis(now);
49
+ if (!Number.isFinite(millis)) throw new RangeError(`PermDock: ${INVALID_NOW.message}`);
50
+ return new Date(millis);
51
+ }
52
+ /** Whole seconds since the epoch of `now`, or of the clock when absent; throws a `RangeError` for a `now` that is not an `Instant`. */
53
+ function secondsAt(now) {
54
+ return Math.floor(dateAt(now).getTime() / 1e3);
55
+ }
56
+ /** The instant `seconds` after the epoch. */
57
+ function instantAt(seconds) {
58
+ return { epochMilliseconds: seconds * 1e3 };
59
+ }
60
+ /** Seconds since the epoch of `now`, fraction kept, or of the clock when absent. */
61
+ function epochSeconds(now) {
62
+ return nowMillis(now) / 1e3;
63
+ }
64
+ /** Milliseconds since the epoch of `now`, or of the clock when absent; `NaN` for a `now` that is not an `Instant`. */
65
+ function nowMillis(now) {
66
+ if (now === void 0) return Date.now();
67
+ const millis = typeof now === "object" && now !== null ? now.epochMilliseconds : void 0;
68
+ return typeof millis === "number" ? millis : NaN;
69
+ }
70
+ //#endregion
71
+ export { durationOf as a, instantOf as c, isoNow as d, nowMillis as f, secondsOf as g, secondsAt as h, dateAt as i, isRfc3339 as l, rfc3339 as m, RFC3339_PATTERN as n, epochSeconds as o, nowSeconds as p, assertDuration as r, instantAt as s, INVALID_NOW as t, isoAt as u };
@@ -1,5 +1,5 @@
1
- import { t as canonicalJson } from "./canonical-json-DemiK4Vp.js";
2
- import { n as sha256, t as bytesToBase64Url } from "./sha256-BO0swRXL.js";
1
+ import { t as canonicalJson } from "./canonical-json-BC8_nMTw.js";
2
+ import { r as sha256Digest } from "./sha256-D9ihqmvd.js";
3
3
  //#region src/core/token.ts
4
4
  /**
5
5
  * Only stable identity goes into the token, so refreshing a session (new
@@ -22,7 +22,16 @@ function versionOf(row, field) {
22
22
  }
23
23
  /** The digest that binds a token to the call's data when no row id does. */
24
24
  function payloadDigest(data) {
25
- return bytesToBase64Url(sha256(canonicalJson(data)));
25
+ return sha256Digest(canonicalJson(data));
26
+ }
27
+ /**
28
+ * The payload a decision token binds: the call's `args` when the caller
29
+ * passes them (an agent or MCP tool call, row or not), otherwise the data of
30
+ * a call without a row id. `undefined` binds nothing beyond the row id.
31
+ */
32
+ function tokenPayload(resourceId, data, args) {
33
+ if (args !== void 0) return payloadDigest(args);
34
+ return resourceId === "*" && data !== void 0 ? payloadDigest(data) : void 0;
26
35
  }
27
36
  /**
28
37
  * `version` is set only for an approval that goes stale on a resource
@@ -32,7 +41,7 @@ function payloadDigest(data) {
32
41
  * others.
33
42
  */
34
43
  function decisionToken(input) {
35
- const payload = JSON.stringify({
44
+ const payload = canonicalJson({
36
45
  key: input.key,
37
46
  resourceId: input.resourceId,
38
47
  principal: principalIdentity(input.principal),
@@ -44,7 +53,7 @@ function decisionToken(input) {
44
53
  ...input.version === void 0 ? {} : { version: input.version },
45
54
  ...input.payload === void 0 ? {} : { payload: input.payload }
46
55
  });
47
- return `pd1.${bytesToBase64Url(sha256(payload))}`;
56
+ return sha256Digest(payload);
48
57
  }
49
58
  //#endregion
50
- export { payloadDigest as n, versionOf as r, decisionToken as t };
59
+ export { versionOf as i, payloadDigest as n, tokenPayload as r, decisionToken as t };
@@ -0,0 +1,41 @@
1
+ import { t as wireDenials } from "./wire-denial-C7PaVYEM.js";
2
+ import { t as describe } from "./describe-BybMRY7A.js";
3
+ //#region src/core/tool-refusal.ts
4
+ function deniedToolRefusal(decision, permission, resource) {
5
+ const alternatives = decision.alternatives.map((leaf) => leaf.key);
6
+ return {
7
+ text: `Denied: ${resource.id === void 0 ? permission.key : `${permission.key} on ${resource.id}`}.${alternatives.length === 0 ? "" : ` You may: ${alternatives.join(", ")}.`}`,
8
+ structured: {
9
+ outcome: "denied",
10
+ permission: permission.key,
11
+ resource,
12
+ denials: wireDenials(decision.denials),
13
+ alternatives,
14
+ detail: describe(decision).detail
15
+ }
16
+ };
17
+ }
18
+ function approvalToolRefusal(decision, permission, resource) {
19
+ return {
20
+ text: describe(decision).detail,
21
+ structured: {
22
+ outcome: "approval-required",
23
+ permission: permission.key,
24
+ resource,
25
+ token: decision.token
26
+ }
27
+ };
28
+ }
29
+ /** An MCP `CallToolResult` with `isError` set, as MCP and WebMCP clients read it. */
30
+ function toolErrorResult(refusal) {
31
+ return {
32
+ isError: true,
33
+ content: [{
34
+ type: "text",
35
+ text: refusal.text
36
+ }],
37
+ structuredContent: refusal.structured
38
+ };
39
+ }
40
+ //#endregion
41
+ export { deniedToolRefusal as n, toolErrorResult as r, approvalToolRefusal as t };
@@ -1,9 +1,10 @@
1
- import { C as Policy, Nr as Principal } from "../policy-IB6yxpC3.js";
2
- import { f as Permission } from "../permissions-DttnqqxC.js";
3
- import { n as RevocationFeed } from "../revocations-Cy06JNx2.js";
4
- import { A as ConnectionOptions, O as Connection, n as OpenApiHooks } from "../create-B1d519XK.js";
5
- import { t as ServerAdapterOptions } from "../bind-C_ob3LKa.js";
6
- import { t as StreamProtectOptions } from "../stream-D1RXubw2.js";
1
+ import { T as Policy, rr as Principal } from "../policy-types-DzwivBgR.js";
2
+ import { w as Permission } from "../vocabulary-D6lPdb4Z.js";
3
+ import { r as PermDock } from "../permdock-D7eeLJER.js";
4
+ import { n as RevocationFeed } from "../revocations-R07lFBnX.js";
5
+ import { D as ConnectionOptions, T as Connection, i as OpenApiHooks } from "../server-types-BLd4MnBX.js";
6
+ import { t as ServerAdapterOptions } from "../bind--9EFVYWF.js";
7
+ import { t as StreamProtectOptions } from "../stream-7-xmnf3U.js";
7
8
  import { AnyTRPCMiddlewareFunction } from "@trpc/server";
8
9
  //#region src/trpc/create.d.ts
9
10
  type TrpcMiddlewareOpts<TCtx = object, TInput = unknown> = {
@@ -33,11 +34,13 @@ type TrpcOpenApiHooks = {
33
34
  readonly securitySchemes: OpenApiHooks["securitySchemes"];
34
35
  };
35
36
  type TrpcPermDock<TCtx = object> = {
36
- readonly permdock: () => TrpcMiddleware;
37
- readonly protect: (permission: Permission | null, loadData?: (opts: TrpcMiddlewareOpts<TCtx>) => unknown, protectOptions?: StreamProtectOptions) => TrpcMiddleware;
37
+ /** The `PermDock` for one procedure call, for code the middleware does not run before. */
38
+ readonly getPermDock: (opts: TrpcMiddlewareOpts<TCtx>) => Promise<PermDock>;
39
+ readonly middleware: () => TrpcMiddleware;
40
+ readonly protect: (permission: Permission | null, data?: (opts: TrpcMiddlewareOpts<TCtx>) => unknown, protectOptions?: StreamProtectOptions) => TrpcMiddleware;
38
41
  /** A long-lived connection for the request behind `ctx`. */
39
42
  readonly connection: (opts: TrpcMiddlewareOpts<TCtx>, connectionOptions?: ConnectionOptions) => Promise<Connection>;
40
- readonly permdockHandler: (request: Request) => Promise<Response>;
43
+ readonly permdockHandler: () => (request: Request) => Promise<Response>;
41
44
  readonly openapi: TrpcOpenApiHooks;
42
45
  readonly errorFormatter: <TShape extends {
43
46
  readonly data: object;
@@ -1,8 +1,8 @@
1
- import { a as problemMessage } from "../http-SO7qGttf.js";
2
- import { t as problemFromError } from "../map-error-pgUWNNtG.js";
3
- import { n as attached } from "../bind-CuzGytRf.js";
4
- import { a as reloadAfter, r as isAsyncIterable } from "../stream-DDpvynSB.js";
5
- import { i as rpcCode, n as guardStream, r as problemBody, t as bindRpcKernel } from "../rpc-DL9Sqvb1.js";
1
+ import { o as problemMessage } from "../http-BBoKefeS.js";
2
+ import { t as problemFromError } from "../map-error-TCAdw-eW.js";
3
+ import { n as attached } from "../bind-CZzhx-Vj.js";
4
+ import { i as isAsyncIterable, o as reloadAfter } from "../stream-CvdUS9V1.js";
5
+ import { i as rpcCode, n as guardStream, r as problemBody, t as bindRpcKernel } from "../rpc-aPyNi6tA.js";
6
6
  import { TRPCError, isTrackedEnvelope } from "@trpc/server";
7
7
  //#region src/trpc/create.ts
8
8
  const PROBLEM = Symbol.for("permdock.problem");
@@ -57,10 +57,11 @@ function errorFormatter(opts) {
57
57
  };
58
58
  }
59
59
  function createPermDock(policy, options) {
60
- const { kernel, bind, attach, scopeOf, connection, evaluate } = bindRpcKernel(policy, options, "trpc", (opts) => opts.ctx, (opts) => opts.path);
61
- const permdock = () => (async (opts) => {
60
+ const { kernel, bind, attach, scopeOf, connection, evaluate, guard: runGuard } = bindRpcKernel(policy, options, "trpc", (opts) => opts.ctx, (opts) => opts.path);
61
+ const getPermDock = async (opts) => kernel.getPermDock(bind(opts), await scopeOf(opts));
62
+ const middleware = () => (async (opts) => {
62
63
  const request = bind(opts);
63
- const instance = await attached(async () => kernel.permdock(request, await scopeOf(opts)));
64
+ const instance = await attached(async () => kernel.getPermDock(request, await scopeOf(opts)));
64
65
  if (!instance.ok) return throwTrpcError(instance.response);
65
66
  const nextCtx = {
66
67
  ...opts.ctx,
@@ -70,19 +71,18 @@ function createPermDock(policy, options) {
70
71
  return mapDownstream(await opts.next({ ctx: nextCtx }));
71
72
  });
72
73
  /** Wraps a subscription's iterable so revocation ends it and unreadable items drop. */
73
- const guardSubscription = async (result, opts, permission, loadData, protectOptions) => {
74
+ const guardSubscription = async (result, opts, permission, data, protectOptions) => {
74
75
  if (result === null || typeof result !== "object" || result.ok !== true || !isAsyncIterable(result.data)) return result;
75
76
  return {
76
77
  ...result,
77
- data: await guardStream(result.data, (connectionOptions) => connection(opts, connectionOptions), permission, loadData, protectOptions, {
78
+ data: await guardStream(result.data, (connectionOptions) => connection(opts, connectionOptions), permission, data, protectOptions, {
78
79
  unwrap: (item) => isTrackedEnvelope(item) ? item[1] : item,
79
80
  onRevoked: trpcErrorFrom
80
81
  })
81
82
  };
82
83
  };
83
- const protect = (permission, loadData, protectOptions) => (async (opts) => {
84
- const request = bind(opts);
85
- const guard = await kernel.protect(permission, loadData === void 0 ? void 0 : () => loadData(opts), protectOptions)(request, await scopeOf(opts));
84
+ const protect = (permission, data, protectOptions) => (async (opts) => {
85
+ const { request, guard } = await runGuard(permission, data, opts, protectOptions);
86
86
  if (guard.ok) {
87
87
  const nextCtx = {
88
88
  ...opts.ctx,
@@ -90,11 +90,11 @@ function createPermDock(policy, options) {
90
90
  permdockData: guard.data
91
91
  };
92
92
  attach(nextCtx, request);
93
- return guardSubscription(await mapDownstream(await opts.next({ ctx: nextCtx })), opts, permission, loadData === void 0 ? void 0 : reloadAfter(guard.data, () => loadData(opts)), protectOptions);
93
+ return guardSubscription(await mapDownstream(await opts.next({ ctx: nextCtx })), opts, permission, data === void 0 ? void 0 : reloadAfter(guard.data, () => data(opts)), protectOptions);
94
94
  }
95
95
  return throwTrpcError(guard.response);
96
96
  });
97
- const permdockHandler = (request) => {
97
+ const handler = (request) => {
98
98
  return evaluate(request, {
99
99
  ctx: { req: request },
100
100
  path: "permdock",
@@ -104,10 +104,11 @@ function createPermDock(policy, options) {
104
104
  };
105
105
  const kernelOpenApi = kernel.openapi;
106
106
  return {
107
- permdock,
107
+ getPermDock,
108
+ middleware,
108
109
  protect,
109
110
  connection,
110
- permdockHandler,
111
+ permdockHandler: () => handler,
111
112
  openapi: {
112
113
  security: (permission) => ({ openapi: {
113
114
  protect: true,
@@ -1,5 +1,12 @@
1
- import { n as RoleThrough } from "./types-C97IskBw.js";
2
- import { o as SqlMembershipSource } from "./sources-BdOYLw9j.js";
1
+ import { n as RoleThrough } from "./types-CdlxsYQh.js";
2
+ import { o as SqlMembershipSource } from "./sources-BV9j0DeZ.js";
3
+ //#region src/cli/core/errors.d.ts
4
+ /**
5
+ * 0 success, 1 failure, 2 usage, 3 action required, 130 interrupted (SIGINT
6
+ * or a cancelled prompt), 143 terminated (SIGTERM).
7
+ */
8
+ type ExitCode = 0 | 1 | 2 | 3 | 130 | 143;
9
+ //#endregion
3
10
  //#region src/cli/types.d.ts
4
11
  type CollectConfig = {
5
12
  readonly srcPath?: readonly string[];
@@ -88,7 +95,7 @@ type RlsConfig = {
88
95
  readonly dialect?: RlsDialect;
89
96
  readonly memberships?: RlsMemberships;
90
97
  /**
91
- * `database` mode: the `fromTable` / `fromJunction` sources the helpers
98
+ * `database` mode: the `tableMembershipSource` / `junctionMembershipSource` sources the helpers
92
99
  * read for every scope `memberships` maps no table for. Default
93
100
  * `supabase.hook.memberships`, so the helpers and the token hook run the
94
101
  * same SQL. Setting it selects `database` mode.
@@ -117,6 +124,13 @@ type RlsConfig = {
117
124
  /** Postgres type of each named scope's id column; overrides `tenantType` / `teamType`. */
118
125
  readonly scopeTypes?: Readonly<Record<string, string>>;
119
126
  readonly roleClaim?: string;
127
+ /**
128
+ * Role values the existing SQL compares against (a string literal or an
129
+ * enum label) and the PermDock role each one is. `rls import` writes the
130
+ * PermDock name for a mapped value; `rls migrate` filters a `role` helper by
131
+ * it. An unmapped value must already be a declared role.
132
+ */
133
+ readonly roleValues?: Readonly<Record<string, string>>;
120
134
  readonly gucPrefix?: string;
121
135
  readonly out?: string;
122
136
  /** `--target drizzle`: where each policy's `.link()` finds its table. */
@@ -140,9 +154,19 @@ type RlsConfig = {
140
154
  /**
141
155
  * Resolve tenant-defined custom roles in the helpers: `custom_role_permissions` and
142
156
  * `custom_role_includes` in `database` mode, the `memberships[].grants` claim in `jwt` mode,
143
- * always intersected with the `permdock_ceiling` view. Off by default.
157
+ * always intersected with the `permdock_ceiling` view. Off by default. An
158
+ * object turns them on and names the application's existing role tables
159
+ * that `--backfill-out` copies from.
160
+ */
161
+ readonly customRoles?: boolean | RlsCustomRolesConfig;
162
+ /**
163
+ * Triggers the application owns on tables `generate` creates, by table
164
+ * name without the schema (`custom_role_permissions`): written after the
165
+ * tables, each as `drop trigger if exists` and `create trigger`.
144
166
  */
145
- readonly customRoles?: boolean;
167
+ readonly triggers?: Readonly<Record<string, readonly RlsTrigger[]>>;
168
+ /** Register generated tables with an audit function, such as `better_supabase.audit`. */
169
+ readonly audit?: RlsAudit;
146
170
  /** How the generated custom-role write functions check the caller (`database` mode with `customRoles`). */
147
171
  readonly customRoleWrites?: {
148
172
  /**
@@ -208,7 +232,8 @@ type RlsConfig = {
208
232
  * Add the approval store `supabaseApprovalStore` reads and writes: the
209
233
  * `approval_requests` table and one function per `ApprovalStore` method, in
210
234
  * the helper schema, executable by no client role. Off by default. An
211
- * object adopts a table the app already has instead.
235
+ * object with `table` adopts a table the app already has instead, and
236
+ * `delegations: true` adds the out-of-office covers.
212
237
  */
213
238
  readonly approvals?: boolean | RlsApprovalsAdopt;
214
239
  /**
@@ -291,8 +316,15 @@ type RlsConfig = {
291
316
  * fields into the app's own columns on each write, converted to their types.
292
317
  */
293
318
  type RlsApprovalsAdopt = {
294
- /** `table` or `schema.table`. */
295
- readonly table: string;
319
+ /** `table` or `schema.table`. Without it the store is the generated `approval_requests`. */
320
+ readonly table?: string;
321
+ /**
322
+ * Add `approval_delegations`, the out-of-office covers a user writes for
323
+ * themselves, and the four-argument `permdock_is_approver` that answers for
324
+ * a delegate inside an active cover. `tableApprovalDelegationSource` reads
325
+ * the same rows for `approvalsHandler`. Off by default.
326
+ */
327
+ readonly delegations?: boolean;
296
328
  /** A text column unique per request. Default `token`. */
297
329
  readonly token?: string;
298
330
  /** A jsonb column holding the `ApprovalRequest`. Default `body`. */
@@ -350,6 +382,63 @@ type RlsCustomRoleTable = {
350
382
  /** A boolean column marking rows that are not custom roles (declared or system roles); those rows are skipped. */
351
383
  readonly skip?: string;
352
384
  };
385
+ /** `rls.customRoles` as an object: custom roles on, plus where existing ones live. */
386
+ type RlsCustomRolesConfig = {
387
+ /** The application's role tables `--backfill-out` copies into `custom_role_permissions` and `custom_role_includes`. */
388
+ readonly from?: RlsCustomRolesFrom;
389
+ };
390
+ /**
391
+ * Existing custom-role data. Each row's role is a row of
392
+ * `rls.customRoleWrites.roles`, which supplies its name, tenant, scope,
393
+ * instance and `skip` flag.
394
+ */
395
+ type RlsCustomRolesFrom = {
396
+ readonly permissions: {
397
+ /** `table` or `schema.table`: one row per permission a role holds. */
398
+ readonly table: string;
399
+ /** The reference to the roles table: `{ through: 'roles', on: { role_id: 'id' }, column: 'key' }`. */
400
+ readonly role: RoleThrough;
401
+ /** The permission key column, or a reference to a permissions table that holds the key. */
402
+ readonly permission: string | RoleThrough;
403
+ /** A text column holding `allow` or `deny`. Without it every row allows. */
404
+ readonly effect?: string;
405
+ /** A text column holding the level of a leveled allow. */
406
+ readonly level?: string;
407
+ };
408
+ readonly includes?: {
409
+ readonly table: string;
410
+ /** The reference to the including role's row in the roles table. */
411
+ readonly role: RoleThrough;
412
+ /** The included role's key column, or a reference to the roles table. */
413
+ readonly include: string | RoleThrough;
414
+ };
415
+ };
416
+ /** One trigger the application owns on a generated table (`rls.triggers`). */
417
+ type RlsTrigger = {
418
+ /** The trigger name; `permdock_` is reserved for generated triggers. */
419
+ readonly name: string;
420
+ readonly when: "before" | "after";
421
+ readonly events: readonly ("insert" | "update" | "delete" | "truncate")[];
422
+ /** Default `row`. */
423
+ readonly level?: "row" | "statement";
424
+ /** `schema.function`, a trigger function that already exists. */
425
+ readonly function: string;
426
+ /** String arguments passed to the trigger function. */
427
+ readonly args?: readonly string[];
428
+ };
429
+ /**
430
+ * `rls.audit`: one `select <function>('<schema>.<table>'::regclass, <args>)`
431
+ * per generated table, for an audit module that registers a table by
432
+ * creating its own trigger.
433
+ */
434
+ type RlsAudit = {
435
+ /** `schema.function` taking the table as its first argument. */
436
+ readonly function: string;
437
+ /** Generated tables, without the schema. Default the custom-role tables and `user_roles`, those this run creates. */
438
+ readonly tables?: readonly string[];
439
+ /** Named text arguments: `{ tenant_column: 'tenant_id' }` passes `tenant_column => 'tenant_id'`. */
440
+ readonly args?: Readonly<Record<string, string>>;
441
+ };
353
442
  /** `rls.shims`: where the legacy-named wrappers go. */
354
443
  type RlsShimsConfig = {
355
444
  /** Schema of the legacy helpers. Default `public`. */
@@ -365,6 +454,9 @@ type RlsActions = Readonly<Record<string, "select" | "insert" | "update" | "dele
365
454
  type RlsMigrateHelper = {
366
455
  readonly form: "ids" | "row" | "membership";
367
456
  readonly scope: string;
457
+ } | {
458
+ readonly form: "role";
459
+ readonly scope: string;
368
460
  } | {
369
461
  readonly form: "scoped";
370
462
  } | {
@@ -381,6 +473,17 @@ type RlsMigrateConfig = {
381
473
  readonly globalScopes?: readonly string[];
382
474
  /** For `scoped` helpers, a scope literal's PermDock scope when the names differ. */
383
475
  readonly scopes?: Readonly<Record<string, string>>;
476
+ /**
477
+ * Materialised permission tables to retire, by `schema.table`: a table the
478
+ * application keeps in step with triggers and reads instead of the grants.
479
+ * `rls migrate --retire-out` drops it with its refresh triggers once
480
+ * nothing else reads it.
481
+ */
482
+ readonly tables?: Readonly<Record<string, RlsMigrateTable>>;
483
+ };
484
+ type RlsMigrateTable = {
485
+ /** The functions that keep the table in step. Default: every function in `--sql` whose body writes it, and every function that calls one. */
486
+ readonly refresh?: readonly string[];
384
487
  };
385
488
  /** Where global roles live: `table (user, role)`. Defaults `user_id` and `role`. */
386
489
  type GlobalRoles = {
@@ -422,7 +525,7 @@ type RlsStorage = {
422
525
  };
423
526
  /** `permdock supabase hook generate` input. */
424
527
  type SupabaseHookConfig = {
425
- /** The same `fromTable` / `fromJunction` sources the app passes as `memberships`. */
528
+ /** The same `tableMembershipSource` / `junctionMembershipSource` sources the app passes as `memberships`. */
426
529
  readonly memberships: readonly SqlMembershipSource[];
427
530
  /** Schema of the hook and the version table. Default `rls.schema`, else `permdock`. */
428
531
  readonly schema?: string;
@@ -487,8 +590,21 @@ type SupabaseHookConfig = {
487
590
  readonly suspension?: RlsSuspension;
488
591
  readonly out?: string;
489
592
  };
593
+ /**
594
+ * How the project turns SQL into Supabase migrations: `'pg-delta'`
595
+ * (Declarative Schemas 2.0, `supabase db schema declarative sync`),
596
+ * `'migra'` (declarative schemas on `supabase db diff`) or `'migrations'`
597
+ * (hand-written migrations, no declarative schemas).
598
+ */
599
+ type SupabaseSchemas = "pg-delta" | "migra" | "migrations";
490
600
  type SupabaseConfig = {
491
601
  readonly hook?: SupabaseHookConfig;
602
+ /**
603
+ * The schema workflow `rls generate --split`, `supabase hook generate` and
604
+ * doctor follow. Default: `'migra'` when `supabase/config.toml` sets
605
+ * `[experimental.pgdelta] enabled = false`, else `'pg-delta'`.
606
+ */
607
+ readonly schemas?: SupabaseSchemas;
492
608
  };
493
609
  type DoctorConfig = {
494
610
  /**
@@ -500,7 +616,7 @@ type DoctorConfig = {
500
616
  readonly srcPath?: readonly string[];
501
617
  readonly sensitiveActions?: readonly string[];
502
618
  readonly memberships?: string;
503
- /** A JSON fixture `{ credentials?, settings? }` of API-key credentials and per-tenant settings (the `memorySettings` input) for PD029. */
619
+ /** A JSON fixture `{ credentials?, settings? }` of API-key credentials and per-tenant settings (the `memorySettingsSource` input) for PD029. */
504
620
  readonly credentials?: string;
505
621
  /** Globs or directories whose files are client entries for PD001, for frameworks with no `'use client'` convention. */
506
622
  readonly clientEntries?: readonly string[];
@@ -512,6 +628,8 @@ type DoctorConfig = {
512
628
  type PermDockConfig = {
513
629
  readonly permissions?: string;
514
630
  readonly policy?: string;
631
+ /** A module exporting the `defineOperations` map as `operations` or default; `collect` writes it to the catalog's `operations`. */
632
+ readonly operations?: string;
515
633
  readonly collect?: CollectConfig;
516
634
  readonly catalog?: CatalogConfig;
517
635
  readonly openapi?: {
@@ -530,7 +648,7 @@ type PowerSyncConfig = {
530
648
  readonly resources?: readonly string[];
531
649
  /** The action whose grants decide which rows sync; default `read`. */
532
650
  readonly action?: string;
533
- /** Where `generate` writes `localSnapshotManifest(policy)` as JSON for `localSnapshot` and `powersyncSource`; none by default. */
651
+ /** Where `generate` writes `localSnapshotManifest(policy)` as JSON for `localSnapshot` and `powerSyncSource`; none by default. */
534
652
  readonly manifest?: string;
535
653
  };
536
654
  type CliIo = {
@@ -539,13 +657,23 @@ type CliIo = {
539
657
  readonly now?: () => Date;
540
658
  readonly fetch?: typeof fetch;
541
659
  readonly env?: Readonly<Record<string, string | undefined>>;
542
- /** Styled human output; `--no-color` turns it off. Unset is plain. */
660
+ /** Styled stdout; `--no-color` turns it off. Unset is plain. */
543
661
  readonly color?: boolean;
662
+ /** Styled stderr, decided for that stream on its own. Unset is plain. */
663
+ readonly errColor?: boolean;
544
664
  /** A person at a terminal: commands may prompt. Unset never prompts. */
545
665
  readonly interactive?: boolean;
666
+ /** stdout is a terminal; agent detection reads it. Unset is a pipe. */
667
+ readonly stdoutIsTty?: boolean;
668
+ /** stderr is a terminal: progress draws a spinner. Unset prints lines. */
669
+ readonly stderrIsTty?: boolean;
670
+ /** Reads all of stdin, for `--*-stdin` secrets. Unset reads nothing. */
671
+ readonly readStdin?: () => Promise<string>;
672
+ /** Aborted on SIGINT or SIGTERM. */
673
+ readonly signal?: AbortSignal;
546
674
  };
547
675
  type RunResult = {
548
- readonly code: 0 | 1 | 2;
676
+ readonly code: ExitCode;
549
677
  readonly stdout: string;
550
678
  readonly stderr: string;
551
679
  };