permdock 0.4.0 → 0.6.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 (515) hide show
  1. package/README.md +37 -35
  2. package/dist/{schema-Bol6gqXA.js → 2020-C9VN-x8c.js} +5 -130
  3. package/dist/a2a/index.d.ts +6 -6
  4. package/dist/a2a/index.js +14 -17
  5. package/dist/{adapter-context-mlWsVGGg.js → adapter-context-CRhqyzCk.js} +1 -1
  6. package/dist/adoption-scan-DCYe60Pi.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 -35
  10. package/dist/ai-sdk/index.js +37 -23
  11. package/dist/{app-data-CV8pqqMi.js → app-data-MuyzVqX8.js} +2 -1
  12. package/dist/approval-header-CJACtHkv.js +23 -0
  13. package/dist/approval-prompt-Dg5LeAcT.js +62 -0
  14. package/dist/approval-prompt-DvSSPQJX.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-p1PGoVjb.js +995 -0
  18. package/dist/arazzo-41WuzHou.js +36 -0
  19. package/dist/{arazzo-C4BcskbX.js → arazzo-CaUVBn7D.js} +20 -14
  20. package/dist/args-IIolxxKA.js +197 -0
  21. package/dist/astro/index.d.ts +43 -0
  22. package/dist/astro/index.js +27 -0
  23. package/dist/audience-DabClFLQ.js +55 -0
  24. package/dist/auth-DRLEizbL.js +178 -0
  25. package/dist/authzen/index.d.ts +26 -6
  26. package/dist/authzen/index.js +94 -79
  27. package/dist/automation-BNM3TtDo.d.ts +114 -0
  28. package/dist/automation-DVjOckjV.js +157 -0
  29. package/dist/better-auth/index.d.ts +8 -6
  30. package/dist/better-auth/index.js +9 -8
  31. package/dist/better-supabase/index.d.ts +357 -30
  32. package/dist/better-supabase/index.js +936 -194
  33. package/dist/{bind-kk-uyCwH.js → bind-CAvgUuKs.js} +14 -10
  34. package/dist/{bind-BzqG8SMb.d.ts → bind-DOyrv6zi.d.ts} +12 -10
  35. package/dist/body-CH5of8Ne.js +10 -0
  36. package/dist/body-text-QcXok_SI.js +52 -0
  37. package/dist/{build-instance-DIIV9DbC.js → build-instance-Bu_eDqYw.js} +4 -3
  38. package/dist/{canonical-json-CFKyFOke.js → canonical-json-BC8_nMTw.js} +5 -3
  39. package/dist/{capability-CksyCWDH.d.ts → capability-Drg-1YhL.d.ts} +44 -25
  40. package/dist/{capability-txATtKV4.js → capability-N1K9IpqS.js} +68 -42
  41. package/dist/casbin-Cr7RLtA3.js +30 -0
  42. package/dist/casbin-Dyu2gnUD.js +234 -0
  43. package/dist/casl-64gpT-8x.js +24 -0
  44. package/dist/casl-DjEDhTCP.js +299 -0
  45. package/dist/catalog/index.d.ts +74 -2
  46. package/dist/catalog/index.js +51 -2
  47. package/dist/catalog-BoWglDPI.js +1 -0
  48. package/dist/catalog-DZVbrF-z.js +52 -0
  49. package/dist/{catalog-tZUyOfOv.js → catalog-HD2gf5mY.js} +51 -6
  50. package/dist/{catalog-doc-DWtg0gGR.js → catalog-doc-Cdn7-0pQ.js} +45 -23
  51. package/dist/catalog-fingerprint-CCP0-yQS.js +153 -0
  52. package/dist/chat/index.d.ts +2 -0
  53. package/dist/chat/index.js +224 -0
  54. package/dist/chat-sdk/index.d.ts +87 -0
  55. package/dist/chat-sdk/index.js +197 -0
  56. package/dist/claims-map-7oQ3ue4X.js +13 -0
  57. package/dist/claims-map-Ca-QX8C6.d.ts +32 -0
  58. package/dist/claude-agent/index.d.ts +7 -14
  59. package/dist/claude-agent/index.js +24 -27
  60. package/dist/clerk/index.d.ts +9 -8
  61. package/dist/clerk/index.js +9 -14
  62. package/dist/cli/bin.js +36 -17
  63. package/dist/cli/index.d.ts +19 -5
  64. package/dist/cli/index.js +164 -4
  65. package/dist/cloud/index.d.ts +102 -63
  66. package/dist/cloud/index.js +239 -340
  67. package/dist/cloud-ytQ3uviA.js +87 -0
  68. package/dist/codemod-5mpSpnUY.js +37 -0
  69. package/dist/codemod-ua2hHy7w.js +2084 -0
  70. package/dist/collect-Ci6akVwH.js +55 -0
  71. package/dist/collect-D7eQDffE.js +1 -0
  72. package/dist/{collect-2SrB7lfk.js → collect-mLTY4nwb.js} +75 -11
  73. package/dist/command-L8EstFNm.js +6 -0
  74. package/dist/compile/index.d.ts +1 -1
  75. package/dist/compile/index.js +1 -2
  76. package/dist/{compile-CtTP7eur.d.ts → compile-1bsAezL0.d.ts} +5 -3
  77. package/dist/{compile-CcEu2ZQ1.js → compile-CMqMx_IN.js} +11 -8
  78. package/dist/completion-BTFrHZhX.js +143 -0
  79. package/dist/config-Bj2Ixq3d.js +26 -0
  80. package/dist/{config-BIjREpyE.js → config-bs_kZeYq.js} +12 -7
  81. package/dist/{config-report--Xb9APJS.js → config-report-DSpsLpCE.js} +15 -5
  82. package/dist/{connection-DUsczpB5.js → connection-DjhIJSs2.js} +6 -5
  83. package/dist/{context-DieZVJXu.js → context-B_u3_bDJ.js} +2 -2
  84. package/dist/convex/index.d.ts +11 -10
  85. package/dist/convex/index.js +6 -4
  86. package/dist/create-B30OMUOJ.d.ts +107 -0
  87. package/dist/create-CBMmFie-.d.ts +138 -0
  88. package/dist/create-CGm28gyI.js +130 -0
  89. package/dist/create-CQWIpUG-.js +403 -0
  90. package/dist/{create-BBO24vj6.js → create-DCF2SvoT.js} +31 -32
  91. package/dist/create-D_NmPOdH.d.ts +110 -0
  92. package/dist/{credential-kue0qpbm.js → credential-BcoiejpY.js} +152 -31
  93. package/dist/credentials-DPyHmYz5.js +74 -0
  94. package/dist/delegation-j6-rc37o.js +286 -0
  95. package/dist/delivery/index.d.ts +5 -0
  96. package/dist/delivery/index.js +5 -0
  97. package/dist/delivery-DCAgNyCn.js +499 -0
  98. package/dist/delivery-event-xX4obB8F.js +40 -0
  99. package/dist/{denied-text-DfRk15uw.d.ts → denied-text-CiFQNuMV.d.ts} +5 -5
  100. package/dist/{describe-C3ldA9os.d.ts → describe-B5qgDvEW.d.ts} +2 -2
  101. package/dist/{describe-Cgkp7eP0.js → describe-BybMRY7A.js} +6 -2
  102. package/dist/device-BARQ8eYG.js +193 -0
  103. package/dist/{diff-rpqoe7Ag.js → diff-3jbx6Rm4.js} +60 -54
  104. package/dist/diff-CmuSD3vc.js +37 -0
  105. package/dist/doctor-3ZqNHX_G.js +44 -0
  106. package/dist/{doctor-owlv6ddh.js → doctor-BdZw53-k.js} +245 -50
  107. package/dist/drizzle/index.d.ts +5 -3
  108. package/dist/drizzle/index.js +2 -2
  109. package/dist/elysia/index.d.ts +16 -13
  110. package/dist/elysia/index.js +13 -12
  111. package/dist/env-DJZrPjRi.js +8 -0
  112. package/dist/errors-BDUwg2qC.js +27 -0
  113. package/dist/{errors-drnfxYtm.js → errors-BKy0EfhN.js} +5 -9
  114. package/dist/errors-BWXBMaKK.d.ts +11 -0
  115. package/dist/errors-CWTY6uih.js +143 -0
  116. package/dist/{errors-OD_4c__H.d.ts → errors-DH5QEGXh.d.ts} +2 -2
  117. package/dist/evaluate-CNClBvcj.js +1785 -0
  118. package/dist/evaluations-C_1vdSZc.d.ts +32 -0
  119. package/dist/{evaluations-C9YJsv3H.js → evaluations-beAooV0n.js} +145 -34
  120. package/dist/eve/index.d.ts +12 -16
  121. package/dist/eve/index.js +22 -28
  122. package/dist/event-time-CsegxXxB.js +23 -0
  123. package/dist/expiry-D4_YKRKD.js +52 -0
  124. package/dist/express/index.d.ts +13 -10
  125. package/dist/express/index.js +12 -11
  126. package/dist/fastify/index.d.ts +25 -22
  127. package/dist/fastify/index.js +13 -12
  128. package/dist/fetch-adapter-DD_gfmrC.js +120 -0
  129. package/dist/fetch-adapter-Dw0MTS3D.d.ts +31 -0
  130. package/dist/fields-OYG_JR78.js +203 -0
  131. package/dist/files-C5ZI27eV.js +124 -0
  132. package/dist/{fixtures-h2eG2OZV.js → fixtures-B7XrLeY7.js} +8 -7
  133. package/dist/flags-C3DktBDY.js +86 -0
  134. package/dist/{from-snapshot-7REQZe0H.js → from-snapshot-CTCMsFZk.js} +55 -52
  135. package/dist/{grantee-conditions-MQs5NIuX.js → grantee-conditions-CcXf8hMM.js} +4 -3
  136. package/dist/{grantee-CXY-0C87.js → grantee-hxrUsbpM.js} +16 -6
  137. package/dist/{grantee-match-fxYp9Nmt.js → grantee-match-DbENBHLB.js} +5 -4
  138. package/dist/h3/index.d.ts +37 -0
  139. package/dist/h3/index.js +35 -0
  140. package/dist/headers-BIjfMaoC.js +8 -0
  141. package/dist/headers-CIbDTUTK.d.ts +7 -0
  142. package/dist/{helpers-C9YmyBIa.js → helpers-CBYVMjwh.js} +45 -38
  143. package/dist/hono/index.d.ts +12 -9
  144. package/dist/hono/index.js +13 -12
  145. package/dist/hosted-B46-5LYE.js +315 -0
  146. package/dist/hosted-BPk51-kX.d.ts +78 -0
  147. package/dist/{http-DPuDaChb.d.ts → http-B_LphE5Y.d.ts} +1 -2
  148. package/dist/http-DXJ37RDA.js +46 -0
  149. package/dist/{http-BEbdMZ05.js → http-ujKm0JXE.js} +1 -2
  150. package/dist/{import-UHk1N7vH.js → import-CNV7I2Dw.js} +25 -20
  151. package/dist/{import-BFIlhetD.js → import-wyqXUyjm.js} +190 -53
  152. package/dist/index-B8YjkEZ4.d.ts +210 -0
  153. package/dist/index-C-6Letxg.d.ts +431 -0
  154. package/dist/index-CaxrMD1A.d.ts +1 -0
  155. package/dist/{index-BwMe94Xq.d.ts → index-Ch8LpNDp.d.ts} +34 -16
  156. package/dist/index-Cp_ilKi1.d.ts +91 -0
  157. package/dist/index-CueFnxQc.d.ts +110 -0
  158. package/dist/index-DuWxc5dt.d.ts +909 -0
  159. package/dist/index.d.ts +19 -15
  160. package/dist/index.js +31 -21
  161. package/dist/init-DeMYsnYJ.js +96 -0
  162. package/dist/init-GG6Jh8HD.js +95 -0
  163. package/dist/{instance-options-plkrsAog.d.ts → instance-options-BsVpyGIk.d.ts} +2 -2
  164. package/dist/instance-snapshot-BOEhcqIF.js +601 -0
  165. package/dist/instant-BluqDvyS.js +19 -0
  166. package/dist/internals-Dk8A8fX3.js +17 -0
  167. package/dist/{json-schema-DBkdUuCO.js → json-schema-B-vAwlde.js} +45 -6
  168. package/dist/json-schema-CN_iLFH2.d.ts +40 -0
  169. package/dist/jwt/index.d.ts +18 -11
  170. package/dist/jwt/index.js +156 -135
  171. package/dist/{kernel-CB3LrIJM.js → kernel-D0NVb1cK.js} +52 -24
  172. package/dist/kysely/index.d.ts +5 -3
  173. package/dist/kysely/index.js +2 -2
  174. package/dist/load-BxEtwlBS.js +1 -0
  175. package/dist/{load-C3_oTHyO.js → load-DFS_ry0W.js} +22 -6
  176. package/dist/{load-jose-BL6LH4bL.js → load-jose-DZ4dnjri.js} +1 -4
  177. package/dist/login-Dfe5RlYk.js +68 -0
  178. package/dist/login-imhuwvn3.js +254 -0
  179. package/dist/manifest-C8IzW3Do.js +42 -0
  180. package/dist/manifest-dvL2XEe1.js +370 -0
  181. package/dist/manifest-json-CAGzls-C.js +9 -0
  182. package/dist/{manifest-uDS9y5de.d.ts → manifest-mx5ghSFM.d.ts} +9 -2
  183. package/dist/manifest-schema-C0kK_8V0.js +399 -0
  184. package/dist/{map-claims-AVlBaJoa.js → map-claims-D3oRmTk0.js} +13 -10
  185. package/dist/{map-error-BE27PYkE.js → map-error-Dr70oA_3.js} +3 -3
  186. package/dist/{markers-CiwAOZtO.js → markers-C6joDI3o.js} +2 -1
  187. package/dist/mcp/index.d.ts +22 -12
  188. package/dist/mcp/index.js +57 -39
  189. package/dist/{migrate-BwlB5-Wk.js → migrate-CIq4-E9F.js} +53 -14
  190. package/dist/nest/index.d.ts +12 -9
  191. package/dist/nest/index.js +15 -14
  192. package/dist/next/index.d.ts +18 -21
  193. package/dist/next/index.js +13 -11
  194. package/dist/next/plugin.d.ts +1 -1
  195. package/dist/next/plugin.js +2 -2
  196. package/dist/node/index.d.ts +10 -10
  197. package/dist/node/index.js +7 -9
  198. package/dist/{ocsf-uYFXGVw2.js → ocsf-BFp-PZZA.js} +22 -11
  199. package/dist/openai/index.d.ts +9 -16
  200. package/dist/openai/index.js +17 -24
  201. package/dist/openapi/index.d.ts +3 -3
  202. package/dist/openapi/index.js +1 -1
  203. package/dist/{openapi-DBzHQbov.js → openapi-B7HZ0f-r.js} +8 -8
  204. package/dist/openapi-C4dDTVEd.js +138 -0
  205. package/dist/{openapi-BJdBmYDG.js → openapi-DD1SV-5-.js} +10 -9
  206. package/dist/operation-findings-DgATDpvh.js +36 -0
  207. package/dist/operations-X0VM7F3m.d.ts +59 -0
  208. package/dist/orpc/index.d.ts +13 -10
  209. package/dist/orpc/index.js +20 -15
  210. package/dist/otel/index.d.ts +3 -2
  211. package/dist/otel/index.js +30 -7
  212. package/dist/output-1im__-08.js +88 -0
  213. package/dist/output-files-B3IZJksC.js +1 -0
  214. package/dist/{output-files-CgIsvdSa.js → output-files-DhRBBE4n.js} +24 -26
  215. package/dist/{permission-keys-B26jeyUv.js → ownership-DqaJNJPn.js} +1045 -153
  216. package/dist/{package-root-DtNnpmUd.js → package-root-Dk_ETdkp.js} +1 -1
  217. package/dist/{parse-CVFQHk6c.js → parse-Cxq0WxrA.js} +2 -2
  218. package/dist/{parse-local-manifest-DvYUR0QL.d.ts → parse-local-manifest-5ODwqu8b.d.ts} +1 -1
  219. package/dist/{parse-local-manifest-C-q02Pal.js → parse-local-manifest-CVSs6J9I.js} +1 -1
  220. package/dist/parse-request-D_tUXG6M.js +26 -0
  221. package/dist/paths-DXSHAMIa.js +42 -0
  222. package/dist/pdp/index.d.ts +7 -3
  223. package/dist/pdp/index.js +45 -26
  224. package/dist/{peer-BOr_kJE1.js → peer-C8swJ2GH.js} +23 -4
  225. package/dist/peer-CRvC7Hg1.js +1 -0
  226. package/dist/permdock-BrAscV28.js +868 -0
  227. package/dist/permdock-SV8ZINYT.d.ts +502 -0
  228. package/dist/{permission-registry-BsblpB-z.js → permission-registry-Br4jSNVi.js} +3 -3
  229. package/dist/permissions-B-wCP5ZC.js +30 -0
  230. package/dist/{permissions-CCJ6lmxB.js → permissions-BPxlwVhN.js} +4 -3
  231. package/dist/{permissions-COH-KRgT.d.ts → permissions-u_KHg-sN.d.ts} +1 -2
  232. package/dist/policies-DP2nqRoF.js +295 -0
  233. package/dist/{policy-ur0BBK_e.d.ts → policy-77FSAq_V.d.ts} +2 -2
  234. package/dist/{hosted-CBHgkzDl.js → policy-DbM5YYtV.js} +17 -273
  235. package/dist/policy-from-catalog-C2gMa2Dj.js +450 -0
  236. package/dist/policy-module-CTlwMvLI.js +89 -0
  237. package/dist/{policy-types-sp9P1iIV.d.ts → policy-types-n0uRTsW8.d.ts} +460 -632
  238. package/dist/postgrest-CEgRbefE.d.ts +100 -0
  239. package/dist/postgrest-DAjUkF9w.js +575 -0
  240. package/dist/{powersync-cZe4kzhL.js → powersync-BkWWCS1K.js} +23 -24
  241. package/dist/powersync-DISt6SUe.js +62 -0
  242. package/dist/powersync-MMJ2mI2q.js +1 -0
  243. package/dist/preset/index.d.ts +146 -0
  244. package/dist/preset/index.js +1 -0
  245. package/dist/preset-DZdU0tne.js +1768 -0
  246. package/dist/principal-source-pHneukrx.js +103 -0
  247. package/dist/prisma/index.d.ts +6 -3
  248. package/dist/prisma/index.js +2 -2
  249. package/dist/{problem-CnWraVhC.js → problem-CTviyH5L.js} +13 -23
  250. package/dist/{problem-details-rIIo8B2C.d.ts → problem-details-B45V5d2b.d.ts} +1 -1
  251. package/dist/{problem-details-DECUnXAn.js → problem-details-cn5X30gZ.js} +43 -40
  252. package/dist/problem-types-CJ2325SZ.js +5 -0
  253. package/dist/{prompt-CXYhLfsS.js → prompt-DfZLJLIn.js} +2 -2
  254. package/dist/{protected-BN7BUdY1.js → protected-BlF0F6wL.js} +21 -4
  255. package/dist/{protected-B3_P7xuw.d.ts → protected-RFGpakN9.d.ts} +16 -8
  256. package/dist/{provider-Bi-0HNL3.js → provider-B1al-AZz.js} +2 -2
  257. package/dist/{provider-kwHC9CZD.d.ts → provider-DILL9oPK.d.ts} +1 -1
  258. package/dist/{provider-store-Ctt-81Ni.js → provider-store-DM6DNcta.js} +2 -2
  259. package/dist/pull-CvpINcMK.js +1 -0
  260. package/dist/pull-jEwbf80J.js +256 -0
  261. package/dist/push-BD4f15co.js +116 -0
  262. package/dist/pushed-policy-CqtxkV4G.js +238 -0
  263. package/dist/pushed-policy-DCW91KQU.d.ts +57 -0
  264. package/dist/react/index.d.ts +8 -8
  265. package/dist/react/index.js +6 -6
  266. package/dist/react/provider-client.d.ts +1 -1
  267. package/dist/react/provider-client.js +1 -2
  268. package/dist/react-native/index.d.ts +24 -72
  269. package/dist/react-native/index.js +29 -25
  270. package/dist/{refs-f3imMjNW.js → refs-K6eWUJ0H.js} +1 -1
  271. package/dist/{relation-walk-BXnlLtg2.js → relation-walk-3OyDBF0S.js} +2 -2
  272. package/dist/{relations-CvmSpG67.js → relations-BnCWnJGI.js} +3 -3
  273. package/dist/renames-CGj7YwcQ.js +175 -0
  274. package/dist/{replay-COpmZUfx.d.ts → replay-Bkm-Ne4l.d.ts} +1 -1
  275. package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
  276. package/dist/{request-context-BVM7aWNs.js → request-context-C81Pip9n.js} +3 -3
  277. package/dist/request-schema-CMreVuFM.js +148 -0
  278. package/dist/resend/index.d.ts +126 -0
  279. package/dist/resend/index.js +379 -0
  280. package/dist/{resource-relations-D1Un3pcz.js → resource-relations-D_jw0BFx.js} +1 -1
  281. package/dist/{retire-BFcxL6un.js → retire-CALjIQ7e.js} +2 -2
  282. package/dist/{revocations-Cy06JNx2.d.ts → revocations-R07lFBnX.d.ts} +2 -0
  283. package/dist/rls-BAqP4q66.js +336 -0
  284. package/dist/{rls-BEktUaqg.js → rls-DTvYd-lI.js} +288 -690
  285. package/dist/{role-builder-B4GbKM-i.js → role-builder-uWQZ4v84.js} +14 -207
  286. package/dist/{rpc-nYC3cR_u.js → rpc-VSl5ylaQ.js} +7 -7
  287. package/dist/run-CUKuz0A8.js +723 -0
  288. package/dist/run-DDwUaJDU.js +1 -0
  289. package/dist/run-ticket-DocwaTKn.d.ts +124 -0
  290. package/dist/run-ticket-sxFI6LAk.js +337 -0
  291. package/dist/{runtime-D_tMXnsq.js → runtime-D3VTAiCA.js} +1 -1
  292. package/dist/{saas-DtaA4JuW.js → saas-BCXRuXca.js} +16 -14
  293. package/dist/scan-qvOe0hS3.js +29 -0
  294. package/dist/{schema-DjQBcAP9.js → schema-B4v0Qrac.js} +102 -8
  295. package/dist/schema-yLuBWWsh.js +130 -0
  296. package/dist/scim/index.d.ts +2 -2
  297. package/dist/scim/index.js +1 -2
  298. package/dist/{scim-vFR1O5oG.js → scim-ClHtpyV3.js} +208 -76
  299. package/dist/{scopes-tvpa34ep.js → scopes-CUPSjo9q.js} +12 -7
  300. package/dist/server/index.d.ts +12 -143
  301. package/dist/server/index.js +12 -9
  302. package/dist/server-C3WXAHZj.js +453 -0
  303. package/dist/{server-types-DdqBwZN_.d.ts → server-types-CKQiCnON.d.ts} +51 -68
  304. package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
  305. package/dist/{shared-1uhI-e-b.js → shared-BAK8t4Uo.js} +20 -9
  306. package/dist/{shared-JhMeOsDF.js → shared-DvvFzYXe.js} +8 -9
  307. package/dist/signals-D3NcTKUS.js +32 -0
  308. package/dist/sink-4-eQIRWf.d.ts +225 -0
  309. package/dist/sink-BEZSlMS_.js +957 -0
  310. package/dist/{skills-BZdRQkxs.js → skills-B6lVdD_W.js} +13 -6
  311. package/dist/skills-CTYwkl44.js +51 -0
  312. package/dist/snapshot-B7DkYg6g.js +269 -0
  313. package/dist/{snapshot-cache-Cod40D-X.js → snapshot-cache-DZHQ0KF6.js} +11 -5
  314. package/dist/{snapshot-cache-J5T7t_vD.d.ts → snapshot-cache-PXI-vGpY.d.ts} +7 -5
  315. package/dist/solid/index.d.ts +11 -12
  316. package/dist/solid/index.js +7 -7
  317. package/dist/solid-start/index.d.ts +52 -0
  318. package/dist/solid-start/index.js +49 -0
  319. package/dist/{sources-Dljy06zL.d.ts → sources-Xc4zkszI.d.ts} +7 -13
  320. package/dist/{sources-B1-b-R0t.js → sources-vs5dGOsS.js} +125 -119
  321. package/dist/{sql-t8teWOfo.js → sql-B5T1IL83.js} +13 -1
  322. package/dist/src-Cu2m75uo.js +1860 -0
  323. package/dist/ssf/index.d.ts +4 -4
  324. package/dist/ssf/index.js +384 -47
  325. package/dist/standard-webhooks-DgFFD-Ga.js +228 -0
  326. package/dist/standard-webhooks-rbD7LS6h.d.ts +88 -0
  327. package/dist/storage-C2bWdvJH.js +132 -0
  328. package/dist/{store-ILkLUj_o.js → store-BDutJkDL.js} +40 -53
  329. package/dist/{store-options-CbUHDoSe.js → store-options-u0ycEe8s.js} +26 -21
  330. package/dist/{stores-Cxz_80g-.d.ts → stores-BUGNbJTt.d.ts} +7 -8
  331. package/dist/{stores-BHXdSbw9.js → stores-CGhM8BN_.js} +2 -2
  332. package/dist/{stream-Dwsg6WwE.d.ts → stream-CeCMJmBB.d.ts} +2 -2
  333. package/dist/{stream-BMui98KK.js → stream-CvdUS9V1.js} +9 -2
  334. package/dist/style-DiKWnAvn.js +1 -0
  335. package/dist/{style-CTm1AXDT.js → style-Uao76wO7.js} +3 -2
  336. package/dist/subject-BGoM5o8B.js +17 -0
  337. package/dist/supabase/index.d.ts +23 -106
  338. package/dist/supabase/index.js +5 -4
  339. package/dist/supabase/middleware.d.ts +7 -6
  340. package/dist/supabase/middleware.js +13 -11
  341. package/dist/supabase-By_frk3U.js +92 -0
  342. package/dist/{supabase-hook-Cva3ikXz.js → supabase-hook-BMoEhZir.js} +960 -64
  343. package/dist/supabase-hook-CCw5m35C.js +1 -0
  344. package/dist/{supabase-C1TWlnYt.js → supabase-x5JtR2tc.js} +99 -206
  345. package/dist/support-session-C6xJQYut.js +158 -0
  346. package/dist/svelte/Protected.svelte +4 -4
  347. package/dist/svelte/index.d.ts +7 -7
  348. package/dist/svelte/index.js +10 -10
  349. package/dist/svelte/runtime.d.ts +3 -3
  350. package/dist/svelte/runtime.js +3 -3
  351. package/dist/svelte/source.d.ts +7 -7
  352. package/dist/svelte/source.js +4 -4
  353. package/dist/sveltekit/index.d.ts +51 -0
  354. package/dist/sveltekit/index.js +27 -0
  355. package/dist/tanstack-start/index.d.ts +51 -0
  356. package/dist/tanstack-start/index.js +40 -0
  357. package/dist/target-Bw37TFNA.js +51 -0
  358. package/dist/{tenancy-DshjqY0n.js → tenancy-DN2QAx9z.js} +5 -5
  359. package/dist/terminal/index.d.ts +11 -9
  360. package/dist/terminal/index.js +23 -287
  361. package/dist/testing/index.d.ts +311 -38
  362. package/dist/testing/index.js +3475 -201
  363. package/dist/testing/saas/index.d.ts +9 -8
  364. package/dist/testing/saas/index.js +2 -2
  365. package/dist/testing/saas/permissions.d.ts +1 -1
  366. package/dist/testing/saas/permissions.js +1 -2
  367. package/dist/text-BMFRfBqc.js +8 -0
  368. package/dist/{text-diff-BdkkYSbi.js → text-diff-BQcUapOb.js} +1 -1
  369. package/dist/thenable-yD7SabqG.js +31 -0
  370. package/dist/time-DkWjdL98.js +71 -0
  371. package/dist/{token-Bx9qy30p.js → token-BLZcjQgt.js} +15 -6
  372. package/dist/{tool-refusal-CQ7OEia9.js → tool-refusal-CMLN5xhn.js} +2 -2
  373. package/dist/trpc/index.d.ts +12 -9
  374. package/dist/trpc/index.js +16 -14
  375. package/dist/types-8RnwUAvE.d.ts +107 -0
  376. package/dist/{store-9KO4BlkB.d.ts → types-B3_ooZgZ.d.ts} +100 -75
  377. package/dist/{types-Br9IXUBG.d.ts → types-BdtSDbBO.d.ts} +77 -17
  378. package/dist/types-BtHtcKMr.d.ts +157 -0
  379. package/dist/{types-CqrjB9o6.d.ts → types-BzzaHxt3.d.ts} +23 -11
  380. package/dist/types-C791HFu9.d.ts +332 -0
  381. package/dist/types-C863OQiR.d.ts +57 -0
  382. package/dist/{types-ByUo56un.d.ts → types-CVZSNocA.d.ts} +23 -22
  383. package/dist/{types-DHrmBJLH.d.ts → types-CX7AvRqP.d.ts} +7 -7
  384. package/dist/types-C_IiEs64.d.ts +65 -0
  385. package/dist/{types-7rJVLWe5.d.ts → types-Dfv0aTER.d.ts} +63 -11
  386. package/dist/types-DqzsnlSA.js +67 -0
  387. package/dist/{types-DpWfQdSh.d.ts → types-Druu9wLM.d.ts} +46 -11
  388. package/dist/{types-CIlTojhq.d.ts → types-_WhUP7ud.d.ts} +9 -6
  389. package/dist/{types-CUcFZfpU.d.ts → types-lUlG3TVd.d.ts} +2 -1
  390. package/dist/unplugin/index.d.ts +1 -1
  391. package/dist/unplugin/index.js +2 -2
  392. package/dist/usage-CRVl9V3t.js +32 -0
  393. package/dist/usage-CZpSQP6L.js +1 -0
  394. package/dist/{usage-CG9nOYZw.js → usage-SveTRTyr.js} +54 -11
  395. package/dist/{validation-error-BSSw0l_8.d.ts → validation-error-DHUrAkku.d.ts} +1 -1
  396. package/dist/{validity-dVrUEPJt.js → validity-CZ7-y0Cj.js} +32 -15
  397. package/dist/{verifier-DMr_Zmb_.js → verifier-DHuh-okk.js} +18 -7
  398. package/dist/{verify-BztUB3GX.js → verify-BaAKx7t6.js} +645 -50
  399. package/dist/{version-BEogC-rB.js → version-CEbQ5UeM.js} +4 -3
  400. package/dist/version-DXkYUISx.js +1 -0
  401. package/dist/{views-CJsrBS1f.js → views-DTIIO-oQ.js} +22 -5
  402. package/dist/{permission-types-Dg39z9Kv.d.ts → vocabulary-CN8H_9UF.d.ts} +67 -2
  403. package/dist/vue/index.d.ts +9 -10
  404. package/dist/vue/index.js +8 -8
  405. package/dist/waiter-B986w1oK.d.ts +36 -0
  406. package/dist/waiter-BGUtGYoU.js +67 -0
  407. package/dist/watch--ovlPOc0.js +1 -0
  408. package/dist/{watch-zeucB7eF.js → watch-vea54PRw.js} +44 -5
  409. package/dist/webmcp/index.d.ts +2 -2
  410. package/dist/webmcp/index.js +3 -3
  411. package/dist/where-scope-C9vfEphl.js +306 -0
  412. package/dist/who-can-DWBAcaCQ.js +364 -0
  413. package/dist/wire-delegation-Cv3W2eaM.js +36 -0
  414. package/dist/wire-denial-C7PaVYEM.js +27 -0
  415. package/dist/workflow/index.d.ts +5 -0
  416. package/dist/workflow/index.js +223 -0
  417. package/dist/workflow-sdk/index.d.ts +56 -0
  418. package/dist/workflow-sdk/index.js +78 -0
  419. package/dist/{wrap-Cr93qqdP.d.ts → wrap-C5jC6sKI.d.ts} +2 -1
  420. package/dist/{wrap-DWsU_5Bd.js → wrap-gX61EtpB.js} +7 -6
  421. package/package.json +136 -37
  422. package/schemas/access-event-v1.json +118 -0
  423. package/schemas/approval-request-v1.json +34 -1
  424. package/schemas/approval-signature-v1.json +94 -0
  425. package/schemas/automation-event-v1.json +113 -0
  426. package/schemas/capability-v1.json +84 -0
  427. package/schemas/catalog-event-v1.json +87 -0
  428. package/schemas/catalog-v1.json +123 -12
  429. package/schemas/cli-commands-v1.json +164 -0
  430. package/schemas/cli-result-v1.json +96 -0
  431. package/schemas/cloud-api-v1.json +5407 -0
  432. package/schemas/connector-v1.json +408 -0
  433. package/schemas/credential-event-v1.json +81 -0
  434. package/schemas/credential-v1.json +134 -0
  435. package/schemas/decision-event-v1.json +288 -0
  436. package/schemas/delivery-event-v1.json +117 -0
  437. package/schemas/directory-event-v1.json +85 -0
  438. package/schemas/evidence-export-v1.json +54 -0
  439. package/schemas/membership-event-v1.json +93 -0
  440. package/schemas/policy-v1.json +68 -0
  441. package/schemas/pushed-policy-v1.json +236 -0
  442. package/schemas/run-v1.json +162 -0
  443. package/schemas/snapshot-v1.json +138 -0
  444. package/schemas/supabase-claims-v1.json +4 -4
  445. package/schemas/supabase-manifest-v1.json +5 -1
  446. package/schemas/support-session-v1.json +111 -0
  447. package/skills/permdock/SKILL.md +16 -12
  448. package/skills/permdock-agents/SKILL.md +40 -23
  449. package/skills/permdock-agents/references/operations-automations-chat.md +221 -0
  450. package/skills/permdock-agents/references/runtimes.md +22 -18
  451. package/skills/permdock-approvals/SKILL.md +29 -13
  452. package/skills/permdock-approvals/references/delivery-and-waiters.md +172 -0
  453. package/skills/permdock-approvals/references/stores-and-resume.md +21 -7
  454. package/skills/permdock-audit/SKILL.md +3 -3
  455. package/skills/permdock-credentials/SKILL.md +5 -5
  456. package/skills/permdock-credentials/references/tokens-keys-links.md +14 -10
  457. package/skills/permdock-data/SKILL.md +6 -6
  458. package/skills/permdock-data/references/queries-and-rls.md +10 -9
  459. package/skills/permdock-data/references/relationships.md +3 -3
  460. package/skills/permdock-tenancy/SKILL.md +20 -7
  461. package/skills/permdock-tenancy/references/contacts-and-support-sessions.md +122 -0
  462. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +6 -4
  463. package/skills/permdock-wire/SKILL.md +17 -11
  464. package/skills/permdock-wire/references/adapters.md +139 -51
  465. package/skills/permdock-wire/references/policy-options.md +5 -5
  466. package/skills/permdock-wire/references/presets-and-recipes.md +58 -0
  467. package/dist/approvals-DZL76lKW.js +0 -240
  468. package/dist/arazzo-CD8d0WLb.js +0 -54
  469. package/dist/catalog-6yWAX6Ps.js +0 -2
  470. package/dist/catalog-WHG4kBq7.js +0 -48
  471. package/dist/cloud-C7bSDgX4.js +0 -50
  472. package/dist/cloud-PeBN3IEn.js +0 -118
  473. package/dist/collect-Bw2Jdq1q.js +0 -2
  474. package/dist/collect-CQx4hX4N.js +0 -83
  475. package/dist/commands-Cpip4ULx.js +0 -97
  476. package/dist/config-DLt6BvV7.js +0 -36
  477. package/dist/diff-Cnghh_Ip.js +0 -48
  478. package/dist/doctor-CuVJvhV_.js +0 -53
  479. package/dist/duration-xK2jGFVc.js +0 -25
  480. package/dist/errors-CWfoNg9N.js +0 -47
  481. package/dist/errors-DRnGZHzF.js +0 -30
  482. package/dist/expiry-BoBJ8Tvc.js +0 -7
  483. package/dist/fields-fwfXN01n.js +0 -1016
  484. package/dist/headers-BZSDieNT.js +0 -6
  485. package/dist/headers-Cf-zWvsO.d.ts +0 -6
  486. package/dist/ids-DC4V4CFu.js +0 -18
  487. package/dist/index-DgM7w96K.d.ts +0 -6
  488. package/dist/index-Dz7didpC.d.ts +0 -201
  489. package/dist/index-UdVQgq48.d.ts +0 -550
  490. package/dist/load-B_shHrmd.js +0 -2
  491. package/dist/manifest-BngWKryL.js +0 -770
  492. package/dist/may-use-BOn_dR_w.js +0 -78
  493. package/dist/openapi-DcQ1Kg40.js +0 -164
  494. package/dist/ownership-BgnbOJFT.js +0 -851
  495. package/dist/permdock-L26udHSk.js +0 -3646
  496. package/dist/powersync-BFSbSElQ.js +0 -62
  497. package/dist/powersync-DCDgZgfZ.js +0 -2
  498. package/dist/rls-55DQTuf5.js +0 -250
  499. package/dist/run-DMcNW_8T.js +0 -174
  500. package/dist/server-ZYEHtNHS.js +0 -268
  501. package/dist/sink-BTtmfPnE.js +0 -141
  502. package/dist/sink-CPN4zLfs.d.ts +0 -104
  503. package/dist/skills-Dle4ZoLF.js +0 -56
  504. package/dist/snapshot-Dc9CHPME.js +0 -1078
  505. package/dist/src-Bb7no-hS.js +0 -639
  506. package/dist/subject-C6dLxqHU.js +0 -24
  507. package/dist/supabase-Dbqr141s.js +0 -83
  508. package/dist/supabase-hook-BULg7Ut_.js +0 -2
  509. package/dist/thenable-QSmvt-vZ.js +0 -65
  510. package/dist/types-C0dee0Qf.d.ts +0 -197
  511. package/dist/types-DvupZE0w.d.ts +0 -9
  512. package/dist/usage-4G6t643F.js +0 -42
  513. package/dist/usage-iFLJ0-rr.js +0 -2
  514. package/dist/vocabulary-hhEFLFoL.d.ts +0 -65
  515. package/dist/watch-C8TpsAl4.js +0 -2
@@ -0,0 +1,78 @@
1
+ import { T as Policy, a as ApprovalRequirement, bn as Grantee, ur as Condition } from "./policy-types-n0uRTsW8.js";
2
+ //#region src/core/hosted.d.ts
3
+ /** One grant authored in PermDock Cloud; its grantee is a declared role, plan or relation. */
4
+ type HostedGrant = {
5
+ readonly id: string;
6
+ readonly permission: string;
7
+ readonly effect?: "allow" | "deny";
8
+ readonly to: Grantee | readonly Grantee[];
9
+ readonly where?: Condition;
10
+ readonly check?: Condition;
11
+ readonly approval?: "human" | ApprovalRequirement;
12
+ readonly fields?: readonly string[];
13
+ };
14
+ /**
15
+ * PolicyDocument v1. Signed as a `vnd.permdock.policy+jwt`, the `policy`
16
+ * claim carries every field but `id` and `issuedAt`, which are the token's
17
+ * `jti` and `iat` (`policyDocumentFromClaims`).
18
+ */
19
+ type PolicyDocument = {
20
+ readonly v: 1;
21
+ readonly id: string;
22
+ readonly fingerprint: string;
23
+ /** The catalog fingerprint the document was authored against. */
24
+ readonly catalog: string;
25
+ /** RFC 3339. */
26
+ readonly issuedAt: string;
27
+ readonly grants: readonly HostedGrant[];
28
+ };
29
+ /**
30
+ * The channel for hosted grants. `getPermDock` reads `current()` once;
31
+ * the application calls `refresh()` on its own schedule, never a check.
32
+ */
33
+ type PolicySource = {
34
+ /** Names the implementation in errors and events. */
35
+ readonly name?: string;
36
+ current(): PolicyDocument | null;
37
+ refresh(): Promise<void>;
38
+ };
39
+ type HostedGrantDropReason = "not-hostable" | "unknown-permission" | "unknown-grantee" | "non-portable" | "weaker-approval" | "invalid";
40
+ /** Reported through `on('error')` when a hosted grant is not merged; never thrown. */
41
+ type HostedGrantDropped = {
42
+ readonly kind: "hosted-grant-dropped";
43
+ readonly document: string;
44
+ readonly grant: string;
45
+ readonly reason: HostedGrantDropReason;
46
+ };
47
+ declare function memoryPolicySource(document?: PolicyDocument | null): PolicySource;
48
+ /** Validates the document envelope; per-grant checks happen at merge time. */
49
+ declare function parsePolicyDocument(json: unknown): PolicyDocument;
50
+ /** The document verified `vnd.permdock.policy+jwt` claims carry: `policy`, with `jti` as `id` and `iat` as `issuedAt`. Throws like `parsePolicyDocument`. */
51
+ declare function policyDocumentFromClaims(claims: Readonly<Record<string, unknown>>): PolicyDocument;
52
+ /** True for the portable subset only: no `opaque`, no `sqlFunction`, no unknown op. */
53
+ declare function isPortableCondition(value: unknown): value is Condition;
54
+ /**
55
+ * The code policy plus the hosted grants that pass every rule. Hosted
56
+ * allows OR with code allows and any deny still wins, so a hosted grant can
57
+ * never override a code deny; one that fails a rule is dropped, not thrown.
58
+ */
59
+ declare function mergeHostedGrants(policy: Policy, document: PolicyDocument | null): {
60
+ readonly policy: Policy;
61
+ readonly dropped: readonly HostedGrantDropped[];
62
+ };
63
+ /**
64
+ * Hosted grants as an instance option: `policies: hostedPolicies(source)`.
65
+ * The merge code ships only with an app that imports this function.
66
+ * `source.current()` is read once per instance; a throw keeps the code
67
+ * policy and is reported as an error event.
68
+ */
69
+ type HostedPolicies = {
70
+ readonly feature: "hosted-policies";
71
+ readonly apply: (policy: Policy) => {
72
+ readonly policy: Policy;
73
+ readonly errors: readonly unknown[];
74
+ };
75
+ };
76
+ declare function hostedPolicies(source: PolicySource): HostedPolicies;
77
+ //#endregion
78
+ export { PolicyDocument as a, isPortableCondition as c, parsePolicyDocument as d, policyDocumentFromClaims as f, HostedPolicies as i, memoryPolicySource as l, HostedGrantDropReason as n, PolicySource as o, HostedGrantDropped as r, hostedPolicies as s, HostedGrant as t, mergeHostedGrants as u };
@@ -7,7 +7,6 @@ type NodeRequest = IncomingMessage & {
7
7
  };
8
8
  declare function toRequest(req: NodeRequest, stream?: IncomingMessage | null): Request;
9
9
  declare function sendResponse(res: ServerResponse, response: Response): Promise<void>;
10
- declare const fromResponse: typeof sendResponse;
11
10
  declare function isServerResponse(value: unknown): value is ServerResponse;
12
11
  //#endregion
13
- export { toRequest as a, sendResponse as i, fromResponse as n, isServerResponse as r, NodeRequest as t };
12
+ export { toRequest as i, isServerResponse as n, sendResponse as r, NodeRequest as t };
@@ -0,0 +1,46 @@
1
+ import { t as timeoutSignal } from "./timeout-D51niuQP.js";
2
+ import { a as describeError, n as CliError } from "./errors-CWTY6uih.js";
3
+ import { s as cliVersion } from "./version-CEbQ5UeM.js";
4
+ import "./device-BARQ8eYG.js";
5
+ //#region src/cli/core/http.ts
6
+ /** `permdock-cli/<version> node/<version> <platform>`, sent on every request the CLI makes. */
7
+ function userAgent() {
8
+ return `permdock-cli/${cliVersion()} node/${process.versions.node} ${process.platform}`;
9
+ }
10
+ /**
11
+ * Every outbound request: the user agent, a timeout joined to the run's
12
+ * abort signal, and a `network_error` CLI error when nothing answers.
13
+ */
14
+ async function httpRequest(io, request) {
15
+ const fetchImpl = io.fetch ?? globalThis.fetch.bind(globalThis);
16
+ try {
17
+ return await fetchImpl(request.url, {
18
+ method: request.method ?? "GET",
19
+ headers: {
20
+ "user-agent": userAgent(),
21
+ ...request.headers
22
+ },
23
+ ...request.body === void 0 ? {} : { body: request.body },
24
+ signal: timeoutSignal(request.timeoutMs ?? 1e4, io.signal)
25
+ });
26
+ } catch (error) {
27
+ throw new CliError("unavailable", `${request.service} unreachable: ${describeError(error)}`, {
28
+ code: "network_error",
29
+ cause: error
30
+ });
31
+ }
32
+ }
33
+ /**
34
+ * A 401 or 403 as an `auth_required` action: the credential is missing,
35
+ * expired or lacks a scope, and `next` says how to get one.
36
+ */
37
+ function authFailure(response, message, next) {
38
+ if (response.status !== 401 && response.status !== 403) return;
39
+ return new CliError("action", `${message} (HTTP ${String(response.status)})`, {
40
+ code: "auth_required",
41
+ extensions: { status: response.status },
42
+ next
43
+ });
44
+ }
45
+ //#endregion
46
+ export { httpRequest as n, authFailure as t };
@@ -65,9 +65,8 @@ async function sendResponse(res, response) {
65
65
  const body = Buffer.from(await response.arrayBuffer());
66
66
  res.end(body);
67
67
  }
68
- const fromResponse = sendResponse;
69
68
  function isServerResponse(value) {
70
69
  return typeof value === "object" && value !== null && "setHeader" in value && typeof value.setHeader === "function" && "end" in value;
71
70
  }
72
71
  //#endregion
73
- export { toRequest as i, isServerResponse as n, sendResponse as r, fromResponse as t };
72
+ export { sendResponse as n, toRequest as r, isServerResponse as t };
@@ -1,10 +1,12 @@
1
- import { t as validateOpenapi } from "./schema-Bol6gqXA.js";
2
1
  import { r as isRecord } from "./compact-CAf557ZB.js";
3
2
  import { t as byCodePoint } from "./compare-pfyVnBjE.js";
4
3
  import { i as readJsonFile } from "./files-D_JIzUrP.js";
4
+ import { t as applyFiles } from "./files-C5ZI27eV.js";
5
+ import { n as httpRequest } from "./http-DXJ37RDA.js";
5
6
  import { i as schemaExpression, t as emitPermissionsModule } from "./generate-CNU1pIOo.js";
6
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
7
- import { dirname, resolve } from "node:path";
7
+ import { t as validateOpenapi } from "./schema-yLuBWWsh.js";
8
+ import { existsSync, readFileSync } from "node:fs";
9
+ import { resolve } from "node:path";
8
10
  //#region ../../node_modules/.pnpm/yaml@2.9.1/node_modules/yaml/browser/dist/nodes/identity.js
9
11
  const ALIAS = Symbol.for("yaml.alias");
10
12
  const DOC = Symbol.for("yaml.document");
@@ -5813,15 +5815,15 @@ function readMap(cwd, file) {
5813
5815
  return map;
5814
5816
  }
5815
5817
  async function readSource(cwd, doc, io) {
5816
- if (/^https?:\/\//u.test(doc)) {
5817
- const fetcher = io.fetch ?? globalThis.fetch;
5818
- try {
5819
- const response = await fetcher(doc);
5820
- if (!response.ok) return `could not fetch ${doc}: HTTP ${response.status}`;
5821
- return { text: await response.text() };
5822
- } catch {
5823
- return `could not fetch ${doc}`;
5824
- }
5818
+ if (/^https?:\/\//u.test(doc)) try {
5819
+ const response = await httpRequest(io, {
5820
+ url: doc,
5821
+ service: doc
5822
+ });
5823
+ if (!response.ok) return `could not fetch ${doc}: HTTP ${response.status}`;
5824
+ return { text: await response.text() };
5825
+ } catch {
5826
+ return `could not fetch ${doc}`;
5825
5827
  }
5826
5828
  const path = resolve(cwd, doc);
5827
5829
  if (!existsSync(path)) return `document not found: ${doc}`;
@@ -5940,14 +5942,17 @@ async function runOpenapiImport(input) {
5940
5942
  };
5941
5943
  return input.schema === void 0 ? resource : Object.assign(resource, { schema: schemaExpression(input.schema, entry.schema ?? { type: "object" }, resolveRef) });
5942
5944
  });
5943
- const outPath = resolve(input.cwd, input.out);
5944
- mkdirSync(dirname(outPath), { recursive: true });
5945
- writeFileSync(outPath, emitPermissionsModule({
5946
- generator: "openapi import",
5947
- schema: input.schema,
5948
- resources
5949
- }));
5950
- if (input.annotate && source.local !== void 0) writeFileSync(source.local, annotated(source.text, parsed.yaml, document, permissions));
5945
+ applyFiles(input.cwd, [{
5946
+ path: input.out,
5947
+ text: emitPermissionsModule({
5948
+ generator: "openapi import",
5949
+ schema: input.schema,
5950
+ resources
5951
+ })
5952
+ }, ...input.annotate && source.local !== void 0 ? [{
5953
+ path: source.local,
5954
+ text: annotated(source.text, parsed.yaml, document, permissions)
5955
+ }] : []]);
5951
5956
  const leaves = resources.reduce((total, item) => total + Object.keys(item.actions).length + Object.keys(item.collection).length, 0);
5952
5957
  return {
5953
5958
  code: 0,
@@ -1,10 +1,10 @@
1
1
  import { r as isRecord } from "./compact-CAf557ZB.js";
2
- import { o as usageResult } from "./errors-CWfoNg9N.js";
2
+ import { i as configError, u as usageResult } from "./errors-CWTY6uih.js";
3
3
  import { s as writeFileEnsuringDir } from "./files-D_JIzUrP.js";
4
- import { n as escapeSqlIdent, o as quoteSqlLiteral } from "./sql-t8teWOfo.js";
5
- import { C as parseMembershipsFlag, r as HELPERS } from "./shared-1uhI-e-b.js";
6
- import { Z as pgConnector } from "./permission-keys-B26jeyUv.js";
7
- import { t as FIELD_VIEWS } from "./fields-fwfXN01n.js";
4
+ import { r as escapeSqlIdent, s as quoteSqlLiteral } from "./sql-B5T1IL83.js";
5
+ import { C as parseMembershipsFlag, r as HELPERS } from "./shared-BAK8t4Uo.js";
6
+ import { f as pgConnector } from "./policies-DP2nqRoF.js";
7
+ import { t as FIELD_VIEWS } from "./fields-OYG_JR78.js";
8
8
  import { n as emptySchema, r as isSchemaKind, t as emitPermissionsModule } from "./generate-CNU1pIOo.js";
9
9
  import { existsSync, readFileSync } from "node:fs";
10
10
  import { resolve } from "node:path";
@@ -89,33 +89,50 @@ function selectFromTable(selectNode) {
89
89
  const relname = asNode$1(asNode$1(from[0])?.["RangeVar"])?.["relname"];
90
90
  return typeof relname === "string" ? relname : void 0;
91
91
  }
92
- function sublinkTable(value, kinds) {
92
+ function sublinkSelect(value, kinds) {
93
93
  const sub = asNode$1(asNode$1(unwrap(value))?.["SubLink"]);
94
94
  if (sub === void 0) return;
95
95
  const kind = sub["subLinkType"];
96
96
  if (kind === void 0 || !kinds.has(kind)) return;
97
- return selectFromTable(sub["subselect"]);
98
- }
99
- function membershipTable(value) {
100
- const exists = sublinkTable(value, /* @__PURE__ */ new Set(["EXISTS_SUBLINK", 0]));
101
- if (exists !== void 0) return exists;
102
- const anyDirect = sublinkTable(value, /* @__PURE__ */ new Set([
103
- "ANY_SUBLINK",
104
- "IN_SUBLINK",
105
- 2
106
- ]));
107
- if (anyDirect !== void 0) return anyDirect;
108
- 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"]);
109
125
  if (expr === void 0) return;
110
- const fromRight = sublinkTable(unwrap(expr["rexpr"]), /* @__PURE__ */ new Set([
111
- "ANY_SUBLINK",
112
- "IN_SUBLINK",
113
- "EXISTS_SUBLINK",
114
- 0,
115
- 2
116
- ]));
117
- if (fromRight !== void 0) return fromRight;
118
- 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"];
119
136
  }
120
137
  function operatorName(value) {
121
138
  const names = asNode$1(asNode$1(unwrap(value))?.["A_Expr"])?.["name"];
@@ -183,6 +200,122 @@ function isJwtCall(value) {
183
200
  return name === "auth.jwt" || name === "auth.session";
184
201
  }
185
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
186
319
  //#region src/cli/rls/import-ast.ts
187
320
  async function conditionFromAst(sql, memberships, functions, unmapped, joins = [], seeds = []) {
188
321
  if (sql === void 0 || sql.trim() === "" || sql.trim() === "true") return {
@@ -407,29 +540,25 @@ function mapNode(value, ctx) {
407
540
  conditions: children
408
541
  };
409
542
  }
410
- const table = membershipTable(node);
411
- if (table !== void 0) {
412
- for (const [scope, mapped] of Object.entries(memberships?.scopes ?? {})) {
413
- const column = mapped.columns?.[scope];
414
- if (mapped.table === table && column !== void 0) return {
415
- op: "memberOf",
416
- scope,
417
- field: column,
418
- roles: []
419
- };
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;
420
561
  }
421
- if (memberships?.tenant?.table === table) return {
422
- op: "memberOf",
423
- scope: "tenant",
424
- field: memberships.tenant.tenant ?? "tenant_id",
425
- roles: []
426
- };
427
- if (memberships?.team?.table === table) return {
428
- op: "memberOf",
429
- scope: "team",
430
- field: memberships.team.team ?? "team_id",
431
- roles: []
432
- };
433
562
  joins.push(table);
434
563
  return;
435
564
  }
@@ -802,7 +931,7 @@ function emitGenerated(catalog, fieldViews, schema) {
802
931
  });
803
932
  }
804
933
  function assertNoServiceRole(sql) {
805
- 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");
806
935
  }
807
936
  async function seedsFromDb(query) {
808
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"];
@@ -883,7 +1012,7 @@ async function runRlsImport(input) {
883
1012
  policies = splitPolicies(await canonicalDump(sql) ?? sql);
884
1013
  if (policies.length === 0) policies = splitPolicies(sql);
885
1014
  } else if (input.db !== void 0) try {
886
- const fromDb = await policiesFromDb(input.db, input.connect ?? pgConnector("permdock rls import --db"));
1015
+ const fromDb = await policiesFromDb(input.db, input.connect ?? pgConnector("permdock rls import --db-url-stdin", input.cwd));
887
1016
  policies = fromDb.policies;
888
1017
  bodies = fromDb.bodies;
889
1018
  seeds = fromDb.seeds;
@@ -893,16 +1022,24 @@ async function runRlsImport(input) {
893
1022
  }
894
1023
  else return {
895
1024
  code: 2,
896
- 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"
897
1026
  };
898
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
+ });
899
1036
  const functions = input.config.rls?.functions;
900
1037
  const unmapped = [];
901
1038
  const joins = [];
902
1039
  const catalog = [];
903
1040
  for (const item of policies) {
904
1041
  const sourceSql = item.using ?? item.check ?? "true";
905
- 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);
906
1043
  const grants = await helperGrants(item.using ?? item.check, memberships, functions, seeds);
907
1044
  catalog.push({
908
1045
  table: item.table,