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,15 +1,18 @@
1
- import { o as usageResult } from "./errors-CWfoNg9N.js";
2
- import { i as quoteSqlLiteral, n as escapeSqlIdent } from "./sql-xdg5f4Fi.js";
3
- import { V as parseMembershipsFlag, r as HELPERS } from "./rls-shared-Cewd_-zI.js";
4
- import { t as FIELD_VIEWS, w as connectPg } from "./rls-fields-CZOMlwHl.js";
5
- import { n as emptySchema, r as isSchemaKind, t as emitPermissionsModule } from "./generate-CH7ThJ14.js";
6
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
7
- import { dirname, resolve } from "node:path";
1
+ import { r as isRecord } from "./compact-CAf557ZB.js";
2
+ import { i as configError, u as usageResult } from "./errors-CWTY6uih.js";
3
+ import { s as writeFileEnsuringDir } from "./files-D_JIzUrP.js";
4
+ import { r as escapeSqlIdent, s as quoteSqlLiteral } from "./sql-B5T1IL83.js";
5
+ import { C as parseMembershipsFlag, r as HELPERS } from "./shared-CD11nBbC.js";
6
+ import { f as pgConnector } from "./policies-CO1oOymN.js";
7
+ import { t as FIELD_VIEWS } from "./fields-D9tPVUUS.js";
8
+ import { n as emptySchema, r as isSchemaKind, t as emitPermissionsModule } from "./generate-CNU1pIOo.js";
9
+ import { existsSync, readFileSync } from "node:fs";
10
+ import { resolve } from "node:path";
8
11
  import { createHash } from "node:crypto";
9
12
  import { deparse, parse } from "pgsql-parser";
10
- //#region src/cli/rls-import-ast.ts
13
+ //#region src/cli/rls/import-nodes.ts
11
14
  function asNode$1(value) {
12
- if (value !== null && typeof value === "object" && !Array.isArray(value)) return value;
15
+ return isRecord(value) ? value : void 0;
13
16
  }
14
17
  function stringVal(value) {
15
18
  const node = asNode$1(value);
@@ -86,33 +89,50 @@ function selectFromTable(selectNode) {
86
89
  const relname = asNode$1(asNode$1(from[0])?.["RangeVar"])?.["relname"];
87
90
  return typeof relname === "string" ? relname : void 0;
88
91
  }
89
- function sublinkTable(value, kinds) {
92
+ function sublinkSelect(value, kinds) {
90
93
  const sub = asNode$1(asNode$1(unwrap(value))?.["SubLink"]);
91
94
  if (sub === void 0) return;
92
95
  const kind = sub["subLinkType"];
93
96
  if (kind === void 0 || !kinds.has(kind)) return;
94
- return selectFromTable(sub["subselect"]);
95
- }
96
- function membershipTable(value) {
97
- const exists = sublinkTable(value, /* @__PURE__ */ new Set(["EXISTS_SUBLINK", 0]));
98
- if (exists !== void 0) return exists;
99
- const anyDirect = sublinkTable(value, /* @__PURE__ */ new Set([
100
- "ANY_SUBLINK",
101
- "IN_SUBLINK",
102
- 2
103
- ]));
104
- if (anyDirect !== void 0) return anyDirect;
105
- const expr = asNode$1(asNode$1(unwrap(value))?.["A_Expr"]);
97
+ return selectFromTable(sub["subselect"]) === void 0 ? void 0 : sub["subselect"];
98
+ }
99
+ const EXISTS = /* @__PURE__ */ new Set(["EXISTS_SUBLINK", 0]);
100
+ const IN_OR_ANY = /* @__PURE__ */ new Set([
101
+ "ANY_SUBLINK",
102
+ "IN_SUBLINK",
103
+ 2
104
+ ]);
105
+ function subquery(select, field) {
106
+ const table = selectFromTable(select);
107
+ if (table === void 0) return;
108
+ return field === void 0 ? {
109
+ select,
110
+ table
111
+ } : {
112
+ select,
113
+ table,
114
+ field
115
+ };
116
+ }
117
+ function membershipSubquery(value) {
118
+ const node = asNode$1(unwrap(value));
119
+ const exists = sublinkSelect(value, EXISTS);
120
+ if (exists !== void 0) return subquery(exists, void 0);
121
+ const sub = asNode$1(node?.["SubLink"]);
122
+ const anyDirect = sublinkSelect(value, IN_OR_ANY);
123
+ if (anyDirect !== void 0) return subquery(anyDirect, columnName(sub?.["testexpr"]));
124
+ const expr = asNode$1(node?.["A_Expr"]);
106
125
  if (expr === void 0) return;
107
- const fromRight = sublinkTable(unwrap(expr["rexpr"]), /* @__PURE__ */ new Set([
108
- "ANY_SUBLINK",
109
- "IN_SUBLINK",
110
- "EXISTS_SUBLINK",
111
- 0,
112
- 2
113
- ]));
114
- if (fromRight !== void 0) return fromRight;
115
- if (Array.isArray(expr["rexpr"]) && expr["rexpr"][0] !== void 0) return selectFromTable(expr["rexpr"][0]);
126
+ const right = unwrap(expr["rexpr"]);
127
+ const existsRight = sublinkSelect(right, EXISTS);
128
+ if (existsRight !== void 0) return subquery(existsRight, void 0);
129
+ const anyRight = sublinkSelect(right, IN_OR_ANY);
130
+ if (anyRight !== void 0) return subquery(anyRight, columnName(expr["lexpr"]));
131
+ if (Array.isArray(expr["rexpr"]) && expr["rexpr"][0] !== void 0) return subquery(expr["rexpr"][0], columnName(expr["lexpr"]));
132
+ }
133
+ /** The `where` clause of a `select` node. */
134
+ function selectWhere(selectNode) {
135
+ return asNode$1(asNode$1(selectNode)?.["SelectStmt"])?.["whereClause"];
116
136
  }
117
137
  function operatorName(value) {
118
138
  const names = asNode$1(asNode$1(unwrap(value))?.["A_Expr"])?.["name"];
@@ -158,6 +178,145 @@ async function fingerprintSql(sql) {
158
178
  return createHash("sha256").update(sql.replaceAll(/\s+/g, " ").trim().toLowerCase()).digest("hex").slice(0, 16);
159
179
  }
160
180
  }
181
+ function nodeStmt(first) {
182
+ const raw = asNode$1(first?.["RawStmt"]);
183
+ if (raw !== void 0) return raw["stmt"];
184
+ return first?.["stmt"];
185
+ }
186
+ function jwtClaim(value) {
187
+ const node = asNode$1(unwrap(value));
188
+ const expr = asNode$1(node?.["A_Expr"]);
189
+ if (expr === void 0) return;
190
+ const name = operatorName(node);
191
+ if (name !== "->>" && name !== "->" || !isJwtCall(expr["lexpr"])) return;
192
+ const claim = constValue(expr["rexpr"]);
193
+ return typeof claim === "string" ? claim : void 0;
194
+ }
195
+ /** `auth.jwt()` / `auth.session()`, bare or as a scalar `(select …)`; a column's `->>` is row data, not a claim. */
196
+ function isJwtCall(value) {
197
+ const inner = scalarSubselect(value);
198
+ if (inner !== void 0) return isJwtCall(inner);
199
+ const name = funcName(value);
200
+ return name === "auth.jwt" || name === "auth.session";
201
+ }
202
+ //#endregion
203
+ //#region src/cli/rls/import-membership.ts
204
+ /**
205
+ * What the `where` of a membership subquery on `table` says, or `undefined`
206
+ * when any part of it cannot be read as one. A subquery imports as
207
+ * `memberOf` only when it binds the membership row to the signed-in user
208
+ * and to the policy row, and filters roles with string literals at most:
209
+ * a predicate left unread would widen the imported condition.
210
+ */
211
+ function membershipRoles(subquery, table) {
212
+ const where = selectWhere(subquery.select);
213
+ if (where === void 0) return;
214
+ const scopeColumns = new Set([
215
+ ...Object.values(table.columns ?? {}),
216
+ table.tenant,
217
+ table.team,
218
+ table.id
219
+ ].filter((column) => column !== void 0));
220
+ if (subquery.field !== void 0 && !scopeColumns.has(selectTarget(subquery.select) ?? "")) return;
221
+ const roleColumn = typeof table.role === "string" ? table.role : void 0;
222
+ const roles = [];
223
+ let user = false;
224
+ let field = subquery.field;
225
+ for (const conjunct of conjuncts(where)) {
226
+ const read = readConjunct(conjunct, table, roleColumn, scopeColumns);
227
+ if (read === void 0) return;
228
+ if (read.kind === "user") user = true;
229
+ else if (read.kind === "row") {
230
+ if (field !== void 0 && field !== read.field) return;
231
+ field = read.field;
232
+ } else if (read.kind === "roles") roles.push(...read.roles);
233
+ }
234
+ return user && field !== void 0 ? {
235
+ field,
236
+ roles: [...new Set(roles)]
237
+ } : void 0;
238
+ }
239
+ /** The column a `select <column> from …` returns. */
240
+ function selectTarget(select) {
241
+ const targets = asNode$1(asNode$1(select)?.["SelectStmt"])?.["targetList"];
242
+ if (!Array.isArray(targets) || targets.length !== 1) return;
243
+ return columnName(asNode$1(asNode$1(targets[0])?.["ResTarget"])?.["val"]);
244
+ }
245
+ function conjuncts(value) {
246
+ if (boolOp(value) !== "and") return [value];
247
+ const args = asNode$1(asNode$1(unwrap(value))?.["BoolExpr"])?.["args"];
248
+ return Array.isArray(args) ? args.flatMap((arg) => conjuncts(arg)) : [];
249
+ }
250
+ function readConjunct(value, table, roleColumn, scopeColumns) {
251
+ const node = asNode$1(unwrap(value));
252
+ const nullTest = asNode$1(node?.["NullTest"]);
253
+ if (nullTest !== void 0) {
254
+ const column = columnName(nullTest["arg"]);
255
+ return (nullTest["nulltesttype"] === "IS_NULL" || nullTest["nulltesttype"] === 0 || nullTest["nulltesttype"] === void 0) && column !== void 0 && (column === table.disabledAt || column === table.expiresAt) ? { kind: "active" } : void 0;
256
+ }
257
+ const expr = asNode$1(node?.["A_Expr"]);
258
+ if (expr === void 0 || operatorName(node) !== "=") return;
259
+ const kind = expr["kind"];
260
+ const left = columnName(expr["lexpr"]);
261
+ if (kind === "AEXPR_OP_ANY" || kind === 2) {
262
+ const elements = asNode$1(asNode$1(unwrap(expr["rexpr"]))?.["A_ArrayExpr"])?.["elements"];
263
+ if (left === void 0 || left !== roleColumn || !Array.isArray(elements) || elements.length === 0) return;
264
+ const values = elements.map((item) => constValue(item));
265
+ return values.every((item) => typeof item === "string") ? {
266
+ kind: "roles",
267
+ roles: values
268
+ } : void 0;
269
+ }
270
+ if (kind === "AEXPR_IN" || kind === 7) {
271
+ const raw = expr["rexpr"];
272
+ const items = asNode$1(raw)?.["List"];
273
+ const list = Array.isArray(raw) ? raw : asNode$1(items)?.["items"];
274
+ if (left === void 0 || left !== roleColumn || !Array.isArray(list) || list.length === 0) return;
275
+ const values = list.map((item) => constValue(item));
276
+ return values.every((item) => typeof item === "string") ? {
277
+ kind: "roles",
278
+ roles: values
279
+ } : void 0;
280
+ }
281
+ const right = columnName(expr["rexpr"]);
282
+ for (const [column, other, otherColumn] of [[
283
+ left,
284
+ expr["rexpr"],
285
+ right
286
+ ], [
287
+ right,
288
+ expr["lexpr"],
289
+ left
290
+ ]]) {
291
+ if (column === void 0) continue;
292
+ if (column === table.user && (isAuthUid(other) || isCurrentSettingUserId(other))) return { kind: "user" };
293
+ if (column === roleColumn) {
294
+ const role = constValue(other);
295
+ return typeof role === "string" ? {
296
+ kind: "roles",
297
+ roles: [role]
298
+ } : void 0;
299
+ }
300
+ if (scopeColumns.has(column) && otherColumn !== void 0) return {
301
+ kind: "row",
302
+ field: otherColumn
303
+ };
304
+ }
305
+ }
306
+ /**
307
+ * `condition` with every `memberOf` role read through `rls.roleValues`, so a
308
+ * legacy role value imports as the PermDock role it stands for.
309
+ */
310
+ function mapRoleValues(condition, roleValues) {
311
+ if (roleValues === void 0 || condition === null) return condition;
312
+ if (Array.isArray(condition)) return condition.map((item) => mapRoleValues(item, roleValues));
313
+ if (typeof condition !== "object") return condition;
314
+ const mapped = Object.fromEntries(Object.entries(condition).map(([key, value]) => [key, mapRoleValues(value, roleValues)]));
315
+ if (mapped["op"] === "memberOf" && Array.isArray(mapped["roles"])) mapped["roles"] = mapped["roles"].map((role) => typeof role === "string" && Object.hasOwn(roleValues, role) ? roleValues[role] : role);
316
+ return mapped;
317
+ }
318
+ //#endregion
319
+ //#region src/cli/rls/import-ast.ts
161
320
  async function conditionFromAst(sql, memberships, functions, unmapped, joins = [], seeds = []) {
162
321
  if (sql === void 0 || sql.trim() === "" || sql.trim() === "true") return {
163
322
  op: "eq",
@@ -338,58 +497,6 @@ async function helperGrants(sql, memberships, functions, seeds) {
338
497
  }
339
498
  return grants;
340
499
  }
341
- const SEED_COLUMNS = [
342
- "role",
343
- "permission",
344
- "grant_key",
345
- "scope",
346
- "effect"
347
- ];
348
- function asScope(value) {
349
- return typeof value === "string" && /^[a-z][a-z0-9_]*$/u.test(value) ? value : void 0;
350
- }
351
- function seedFromRow(row) {
352
- const scope = asScope(row["scope"]);
353
- if (typeof row["role"] !== "string" || typeof row["permission"] !== "string" || typeof row["grant_key"] !== "string" || scope === void 0) return;
354
- return {
355
- role: row["role"],
356
- permission: row["permission"],
357
- grantKey: row["grant_key"],
358
- scope,
359
- effect: row["effect"] === "deny" ? "deny" : "allow"
360
- };
361
- }
362
- /** `role_permissions` rows from the `insert ... values` statements of a SQL dump. */
363
- async function seedsFromSql(sql) {
364
- let parsed;
365
- try {
366
- parsed = await parse(sql);
367
- } catch {
368
- return [];
369
- }
370
- const seeds = [];
371
- for (const item of asStmts(parsed)) {
372
- const insert = asNode$1(asNode$1(nodeStmt(asNode$1(item)))?.["InsertStmt"]);
373
- if (asNode$1(insert?.["relation"])?.["relname"] !== "role_permissions") continue;
374
- const cols = Array.isArray(insert?.["cols"]) ? insert["cols"].map((col) => asNode$1(asNode$1(col)?.["ResTarget"])?.["name"]) : [];
375
- const values = asNode$1(asNode$1(insert?.["selectStmt"])?.["SelectStmt"])?.["valuesLists"];
376
- if (!Array.isArray(values)) continue;
377
- for (const list of values) {
378
- const items = asNode$1(asNode$1(list)?.["List"])?.["items"];
379
- if (!Array.isArray(items)) continue;
380
- const row = {};
381
- for (const [index, col] of cols.entries()) if (typeof col === "string" && SEED_COLUMNS.includes(col)) row[col] = constValue(items[index]);
382
- const seed = seedFromRow(row);
383
- if (seed !== void 0) seeds.push(seed);
384
- }
385
- }
386
- return seeds;
387
- }
388
- function nodeStmt(first) {
389
- const raw = asNode$1(first?.["RawStmt"]);
390
- if (raw !== void 0) return raw["stmt"];
391
- return first?.["stmt"];
392
- }
393
500
  function mapNode(value, ctx) {
394
501
  if (value === void 0) return;
395
502
  const node = asNode$1(unwrap(value));
@@ -433,29 +540,25 @@ function mapNode(value, ctx) {
433
540
  conditions: children
434
541
  };
435
542
  }
436
- const table = membershipTable(node);
437
- if (table !== void 0) {
438
- for (const [scope, mapped] of Object.entries(memberships?.scopes ?? {})) {
439
- const column = mapped.columns?.[scope];
440
- if (mapped.table === table && column !== void 0) return {
441
- op: "memberOf",
442
- scope,
443
- field: column,
444
- roles: []
445
- };
543
+ const subquery = membershipSubquery(node);
544
+ if (subquery !== void 0) {
545
+ const { table } = subquery;
546
+ const mappedScopes = Object.entries(memberships?.scopes ?? {});
547
+ if (memberships?.tenant !== void 0) mappedScopes.push(["tenant", memberships.tenant]);
548
+ if (memberships?.team !== void 0) mappedScopes.push(["team", memberships.team]);
549
+ const matches = mappedScopes.filter(([, mapped]) => mapped.table === table);
550
+ if (matches.length > 0) {
551
+ for (const [scope, mapped] of matches) {
552
+ const read = membershipRoles(subquery, mapped);
553
+ if (read !== void 0) return {
554
+ op: "memberOf",
555
+ scope,
556
+ field: read.field,
557
+ roles: read.roles
558
+ };
559
+ }
560
+ return;
446
561
  }
447
- if (memberships?.tenant?.table === table) return {
448
- op: "memberOf",
449
- scope: "tenant",
450
- field: memberships.tenant.tenant ?? "tenant_id",
451
- roles: []
452
- };
453
- if (memberships?.team?.table === table) return {
454
- op: "memberOf",
455
- scope: "team",
456
- field: memberships.team.team ?? "team_id",
457
- roles: []
458
- };
459
562
  joins.push(table);
460
563
  return;
461
564
  }
@@ -505,26 +608,59 @@ function mapNode(value, ctx) {
505
608
  };
506
609
  }
507
610
  }
508
- function jwtClaim(value) {
509
- const node = asNode$1(unwrap(value));
510
- const expr = asNode$1(node?.["A_Expr"]);
511
- if (expr === void 0) return;
512
- const name = operatorName(node);
513
- if (name !== "->>" && name !== "->" || !isJwtCall(expr["lexpr"])) return;
514
- const claim = constValue(expr["rexpr"]);
515
- return typeof claim === "string" ? claim : void 0;
611
+ //#endregion
612
+ //#region src/cli/rls/import-seeds.ts
613
+ const SEED_COLUMNS = [
614
+ "role",
615
+ "permission",
616
+ "grant_key",
617
+ "scope",
618
+ "effect"
619
+ ];
620
+ function asScope(value) {
621
+ return typeof value === "string" && /^[a-z][a-z0-9_]*$/u.test(value) ? value : void 0;
516
622
  }
517
- /** `auth.jwt()` / `auth.session()`, bare or as a scalar `(select …)`; a column's `->>` is row data, not a claim. */
518
- function isJwtCall(value) {
519
- const inner = scalarSubselect(value);
520
- if (inner !== void 0) return isJwtCall(inner);
521
- const name = funcName(value);
522
- return name === "auth.jwt" || name === "auth.session";
623
+ function seedFromRow(row) {
624
+ const scope = asScope(row["scope"]);
625
+ if (typeof row["role"] !== "string" || typeof row["permission"] !== "string" || typeof row["grant_key"] !== "string" || scope === void 0) return;
626
+ return {
627
+ role: row["role"],
628
+ permission: row["permission"],
629
+ grantKey: row["grant_key"],
630
+ scope,
631
+ effect: row["effect"] === "deny" ? "deny" : "allow"
632
+ };
633
+ }
634
+ /** `role_permissions` rows from the `insert ... values` statements of a SQL dump. */
635
+ async function seedsFromSql(sql) {
636
+ let parsed;
637
+ try {
638
+ parsed = await parse(sql);
639
+ } catch {
640
+ return [];
641
+ }
642
+ const seeds = [];
643
+ for (const item of asStmts(parsed)) {
644
+ const insert = asNode$1(asNode$1(nodeStmt(asNode$1(item)))?.["InsertStmt"]);
645
+ if (asNode$1(insert?.["relation"])?.["relname"] !== "role_permissions") continue;
646
+ const cols = Array.isArray(insert?.["cols"]) ? insert["cols"].map((col) => asNode$1(asNode$1(col)?.["ResTarget"])?.["name"]) : [];
647
+ const values = asNode$1(asNode$1(insert?.["selectStmt"])?.["SelectStmt"])?.["valuesLists"];
648
+ if (!Array.isArray(values)) continue;
649
+ for (const list of values) {
650
+ const items = asNode$1(asNode$1(list)?.["List"])?.["items"];
651
+ if (!Array.isArray(items)) continue;
652
+ const row = {};
653
+ for (const [index, col] of cols.entries()) if (typeof col === "string" && SEED_COLUMNS.includes(col)) row[col] = constValue(items[index]);
654
+ const seed = seedFromRow(row);
655
+ if (seed !== void 0) seeds.push(seed);
656
+ }
657
+ }
658
+ return seeds;
523
659
  }
524
660
  //#endregion
525
- //#region src/cli/rls-import-views.ts
661
+ //#region src/cli/rls/import-views.ts
526
662
  function asNode(value) {
527
- return value !== null && typeof value === "object" && !Array.isArray(value) ? value : void 0;
663
+ return isRecord(value) ? value : void 0;
528
664
  }
529
665
  function list(value) {
530
666
  return Array.isArray(value) ? value : [];
@@ -708,7 +844,7 @@ async function viewsSqlFromDb(query) {
708
844
  }).join("\n");
709
845
  }
710
846
  //#endregion
711
- //#region src/cli/rls-import.ts
847
+ //#region src/cli/rls/import.ts
712
848
  const POLICY_RE = /create\s+policy\s+"?([A-Za-z0-9_]+)"?\s+on\s+"?([A-Za-z0-9_]+)"?([\s\S]*?);/gi;
713
849
  function extractParenClause(sql, keyword) {
714
850
  const match = new RegExp(`\\b${keyword}\\s*\\(`, "i").exec(sql);
@@ -795,7 +931,7 @@ function emitGenerated(catalog, fieldViews, schema) {
795
931
  });
796
932
  }
797
933
  function assertNoServiceRole(sql) {
798
- if (/\bto\s+service_role\b|\bfrom\s+service_role\b/i.test(sql)) throw new Error("PermDock CLI: imported SQL must never target service_role");
934
+ if (/\bto\s+service_role\b|\bfrom\s+service_role\b/i.test(sql)) throw configError("PermDock CLI: imported SQL must never target service_role");
799
935
  }
800
936
  async function seedsFromDb(query) {
801
937
  const schema = (await query(`select table_schema from information_schema.tables where table_name = 'role_permissions' order by table_schema = 'permdock' desc, table_schema = 'public' desc, table_schema limit 1`)).rows[0]?.["table_schema"];
@@ -876,7 +1012,7 @@ async function runRlsImport(input) {
876
1012
  policies = splitPolicies(await canonicalDump(sql) ?? sql);
877
1013
  if (policies.length === 0) policies = splitPolicies(sql);
878
1014
  } else if (input.db !== void 0) try {
879
- const fromDb = await policiesFromDb(input.db, input.connect ?? ((db) => connectPg(db, "permdock rls import --db")));
1015
+ const fromDb = await policiesFromDb(input.db, input.connect ?? pgConnector("permdock rls import --db-url-stdin", input.cwd));
880
1016
  policies = fromDb.policies;
881
1017
  bodies = fromDb.bodies;
882
1018
  seeds = fromDb.seeds;
@@ -886,16 +1022,24 @@ async function runRlsImport(input) {
886
1022
  }
887
1023
  else return {
888
1024
  code: 2,
889
- output: "PermDock CLI: rls import needs --sql <file> or --db <url>"
1025
+ output: "PermDock CLI: rls import needs --sql <file> or a database: --db-url-stdin, DATABASE_URL or SUPABASE_DB_URL"
890
1026
  };
891
1027
  const memberships = parseMembershipsFlag(input.memberships) ?? input.config.rls?.memberships;
1028
+ const roleValues = input.config.rls?.roleValues;
1029
+ if (roleValues !== void 0) seeds = seeds.map((row) => {
1030
+ const mapped = Object.hasOwn(roleValues, row.role) ? roleValues[row.role] : void 0;
1031
+ return mapped === void 0 ? row : {
1032
+ ...row,
1033
+ role: mapped
1034
+ };
1035
+ });
892
1036
  const functions = input.config.rls?.functions;
893
1037
  const unmapped = [];
894
1038
  const joins = [];
895
1039
  const catalog = [];
896
1040
  for (const item of policies) {
897
1041
  const sourceSql = item.using ?? item.check ?? "true";
898
- const condition = await conditionFromAst(item.using ?? item.check, memberships, functions, unmapped, joins, seeds);
1042
+ const condition = mapRoleValues(await conditionFromAst(item.using ?? item.check, memberships, functions, unmapped, joins, seeds), input.config.rls?.roleValues);
899
1043
  const grants = await helperGrants(item.using ?? item.check, memberships, functions, seeds);
900
1044
  catalog.push({
901
1045
  table: item.table,
@@ -911,8 +1055,7 @@ async function runRlsImport(input) {
911
1055
  const fieldViews = viewsSql === "" ? [] : await fieldViewsFromSql(viewsSql, memberships, functions, seeds);
912
1056
  const outRel = input.out ?? "src/permissions.generated.ts";
913
1057
  const outPath = resolve(input.cwd, outRel);
914
- mkdirSync(dirname(outPath), { recursive: true });
915
- writeFileSync(outPath, emitGenerated(catalog, fieldViews, input.schema));
1058
+ writeFileEnsuringDir(outPath, emitGenerated(catalog, fieldViews, input.schema));
916
1059
  const hints = [
917
1060
  ...uniqueHints([...new Set(unmapped)], bodies),
918
1061
  ...[...new Set(joins)].map(membershipHint),
@@ -0,0 +1,110 @@
1
+ import { T as Policy, Zt as DeliveryChannel, j as PolicyVocabulary, q as DecisionSink, rr as Principal } from "./policy-types-DzwivBgR.js";
2
+ import { w as Permission } from "./vocabulary-D6lPdb4Z.js";
3
+ import { t as Operation } from "./operations-CxybZErY.js";
4
+ import { p as PrincipalSource, r as PermDock } from "./permdock-D7eeLJER.js";
5
+ import { _ as TransportOptions, a as DeliveryReport, c as DeliveryTransport, g as TransportMessages, i as DeliveryMessages, l as DeliveryTransports, m as Recipient, o as DeliveryResult, r as DeliverOptions, s as DeliveryTarget, y as WebhookTransport } from "./types-DX0LaKTb.js";
6
+ import { l as WebhookSigner } from "./standard-webhooks-6lg8v_is.js";
7
+ //#region src/delivery/audience.d.ts
8
+ type Audience = {
9
+ /** Principal ids `decideFor` grants, in discovery or candidate order, each once. */
10
+ readonly principals: readonly string[];
11
+ /** `false` when `whoCan` could not list every holder: someone granted may be missing. */
12
+ readonly complete: boolean;
13
+ };
14
+ type AudienceOptions = {
15
+ /** Check only these principals instead of listing holders with `whoCan`. */
16
+ readonly candidates?: readonly string[];
17
+ };
18
+ /**
19
+ * Who may receive a delivery about `row`: the holders `whoCan` lists (or
20
+ * `candidates`), kept only where `decideFor` grants `permission` in the
21
+ * sender's active tenant. A collection permission has no holders to list,
22
+ * so it needs `candidates`; without them it is empty and incomplete.
23
+ */
24
+ declare function audience(permdock: PermDock, permission: Permission, row: unknown, options?: AudienceOptions): Promise<Audience>;
25
+ /** One event a subscriber may receive: the permission its row needs. */
26
+ type SubscriberEvent = {
27
+ readonly permission: Permission;
28
+ readonly row?: unknown;
29
+ };
30
+ /**
31
+ * The subscribers whose principal `decideFor` grants the event's
32
+ * permission on its row, in their order: the per-event filter for webhook
33
+ * endpoints and realtime channels. A subscriber without a string
34
+ * `principal` is dropped.
35
+ */
36
+ declare function subscribersFor<S extends {
37
+ readonly principal: string;
38
+ }>(permdock: PermDock, event: SubscriberEvent, subscribers: readonly S[]): Promise<S[]>;
39
+ //#endregion
40
+ //#region src/delivery/memory-transport.d.ts
41
+ type MemoryDelivery<C extends DeliveryChannel> = {
42
+ readonly target: DeliveryTarget<C>;
43
+ readonly message: TransportMessages[C];
44
+ readonly options: TransportOptions;
45
+ };
46
+ type MemoryDeliveryTransport<C extends DeliveryChannel> = DeliveryTransport<C> & {
47
+ /** Every delivery `respond` answered `sent` for, oldest first. */
48
+ readonly deliveries: readonly MemoryDelivery<C>[];
49
+ };
50
+ type MemoryDeliveryTransportOptions<C extends DeliveryChannel> = {
51
+ /** The result per delivery; defaults to `sent`. A throw propagates, as from a provider client. */
52
+ readonly respond?: (target: DeliveryTarget<C>, message: TransportMessages[C]) => DeliveryResult;
53
+ };
54
+ /** An in-process transport for tests and examples: it records what it would have sent. */
55
+ declare function memoryDeliveryTransport<C extends DeliveryChannel>(channel: C, options?: MemoryDeliveryTransportOptions<C>): MemoryDeliveryTransport<C>;
56
+ //#endregion
57
+ //#region src/delivery/router.d.ts
58
+ type DeliveryPermDockOptions = {
59
+ readonly transports: DeliveryTransports;
60
+ /** Resolves `{ address }` recipients through `principalByIdentity`. */
61
+ readonly principals?: PrincipalSource;
62
+ /** Receives one `delivery` event per recipient. A throw is ignored. */
63
+ readonly sink?: DecisionSink;
64
+ /** The `from` of an email whose message sets none. */
65
+ readonly from?: string;
66
+ /** The event `source`; defaults to `permdock`. */
67
+ readonly source?: string;
68
+ };
69
+ type DeliveryPermDock<V extends PolicyVocabulary = PolicyVocabulary> = {
70
+ /**
71
+ * Checks every recipient against `target`'s permission on `row` with
72
+ * `permdock.decideFor`, routes the granted ones to the transport of their
73
+ * channel, and writes one `delivery` event per recipient. Never rejects:
74
+ * a refused recipient or a transport error is a `failed` event.
75
+ */
76
+ readonly deliver: (permdock: PermDock<V>, target: Permission | Pick<Operation, "name" | "permission">, row: unknown, recipients: readonly Recipient[], messages: Partial<DeliveryMessages>, options?: DeliverOptions) => Promise<DeliveryReport>;
77
+ };
78
+ /** Routes checked recipients to channel transports and records a delivery event for each. */
79
+ declare function createPermDock<TUser, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(_policy: Policy<TUser, TPrincipal, V>, options: DeliveryPermDockOptions): DeliveryPermDock<V>;
80
+ //#endregion
81
+ //#region src/delivery/target.d.ts
82
+ /**
83
+ * Whether `value` is a target the router checked for `channel`: a non-empty
84
+ * address and a granted decision. A transport calls it first and refuses
85
+ * anything else, so a hand-built recipient never reaches a provider.
86
+ */
87
+ declare function isDeliveryTarget<C extends DeliveryChannel>(value: unknown, channel: C): value is DeliveryTarget<C>;
88
+ /**
89
+ * An RFC 5322 `addr-spec` in dot-atom form with a DNS domain, at most 254
90
+ * characters (RFC 5321 path limit). Quoted local parts, comments and
91
+ * domain literals are refused.
92
+ */
93
+ declare function isAddrSpec(value: string): boolean;
94
+ //#endregion
95
+ //#region src/delivery/webhook-transport.d.ts
96
+ type WebhookTransportOptions = {
97
+ /** Defaults to the global `fetch`. */
98
+ readonly fetch?: typeof fetch;
99
+ /** Milliseconds before a request is aborted as `unavailable`. Defaults to 10000. */
100
+ readonly timeout?: number;
101
+ };
102
+ /**
103
+ * Posts each CloudEvent to the target's https endpoint as
104
+ * `application/cloudevents+json`, signed with the Standard Webhooks
105
+ * headers. `webhook-id` is the idempotency key, so a retry repeats it and
106
+ * the receiver drops the duplicate. Redirects are not followed.
107
+ */
108
+ declare function webhookTransport(signer: WebhookSigner, options?: WebhookTransportOptions): WebhookTransport;
109
+ //#endregion
110
+ export { DeliveryPermDock as a, MemoryDelivery as c, memoryDeliveryTransport as d, Audience as f, subscribersFor as g, audience as h, isDeliveryTarget as i, MemoryDeliveryTransport as l, SubscriberEvent as m, webhookTransport as n, DeliveryPermDockOptions as o, AudienceOptions as p, isAddrSpec as r, createPermDock as s, WebhookTransportOptions as t, MemoryDeliveryTransportOptions as u };
@@ -0,0 +1 @@
1
+ export {}