permdock 0.4.0 → 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 (514) 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-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 -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-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/arazzo-B6lebmiQ.js +36 -0
  19. package/dist/{arazzo-C4BcskbX.js → arazzo-BWhNF-k0.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-Dg8XsRaO.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-BMZPIVUM.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-BzqG8SMb.d.ts → bind--9EFVYWF.d.ts} +12 -10
  34. package/dist/{bind-kk-uyCwH.js → bind-CZzhx-Vj.js} +14 -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-BMnAudHn.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-BSslw1QV.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-tZUyOfOv.js → catalog-BECMPrwc.js} +51 -6
  48. package/dist/catalog-DjhMYYCq.js +1 -0
  49. package/dist/catalog-R_A__RsH.js +52 -0
  50. package/dist/{catalog-doc-DWtg0gGR.js → catalog-doc-C9wjsfNY.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-CIoHNevm.js +87 -0
  68. package/dist/codemod-Bmj9dWMH.js +37 -0
  69. package/dist/codemod-Cxvvc70T.js +2084 -0
  70. package/dist/{collect-2SrB7lfk.js → collect-CrZJJnEF.js} +75 -11
  71. package/dist/collect-DloHbDVa.js +55 -0
  72. package/dist/collect-FlXJlhus.js +1 -0
  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-CcEu2ZQ1.js → compile-CMqMx_IN.js} +11 -8
  77. package/dist/{compile-CtTP7eur.d.ts → compile-Ckm2HqBZ.d.ts} +5 -3
  78. package/dist/completion-BqhRBJD8.js +143 -0
  79. package/dist/config-B46rm9sc.js +26 -0
  80. package/dist/{config-BIjREpyE.js → config-bs_kZeYq.js} +12 -7
  81. package/dist/{config-report--Xb9APJS.js → config-report-DUgj62Ai.js} +15 -5
  82. package/dist/{connection-DUsczpB5.js → connection-DjhIJSs2.js} +6 -5
  83. package/dist/{context-DieZVJXu.js → context-bbFHR-0D.js} +2 -2
  84. package/dist/convex/index.d.ts +11 -10
  85. package/dist/convex/index.js +6 -4
  86. package/dist/create-0VZ7Pdiu.d.ts +107 -0
  87. package/dist/create-BDS7wc3y.d.ts +138 -0
  88. package/dist/create-BFfm17UA.d.ts +110 -0
  89. package/dist/create-BWRSXgOF.js +403 -0
  90. package/dist/create-C3b4B5eF.js +130 -0
  91. package/dist/{create-BBO24vj6.js → create-DnrmLnLW.js} +31 -32
  92. package/dist/{credential-kue0qpbm.js → credential-DM2um3ha.js} +152 -31
  93. package/dist/credentials-DPyHmYz5.js +74 -0
  94. package/dist/delegation-DaXVdDhM.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-D8jDHgsl.d.ts} +5 -5
  100. package/dist/{describe-C3ldA9os.d.ts → describe-BZUsixiL.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-CxZo9pTq.js +37 -0
  104. package/dist/{diff-rpqoe7Ag.js → diff-DCePiN6M.js} +60 -54
  105. package/dist/doctor-CxiwSfqH.js +44 -0
  106. package/dist/{doctor-owlv6ddh.js → doctor-DFjUxf2f.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-OD_4c__H.d.ts → errors-C2PXIv4c.d.ts} +2 -2
  116. package/dist/errors-CWTY6uih.js +143 -0
  117. package/dist/evaluate-_R8QkWaf.js +1732 -0
  118. package/dist/evaluations-16UqqQ6W.d.ts +32 -0
  119. package/dist/{evaluations-C9YJsv3H.js → evaluations-DZ2CbV5k.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-g0ypLkID.js +120 -0
  129. package/dist/fetch-adapter-qKJBuRqy.d.ts +31 -0
  130. package/dist/fields-D9tPVUUS.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-D2lZt4Dd.js} +55 -52
  135. package/dist/{grantee-CXY-0C87.js → grantee-Cn1HyUsI.js} +3 -3
  136. package/dist/{grantee-conditions-MQs5NIuX.js → grantee-conditions-CcXf8hMM.js} +4 -3
  137. package/dist/{grantee-match-fxYp9Nmt.js → grantee-match-DHArqY82.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-DTcZOzhF.js} +45 -38
  143. package/dist/hono/index.d.ts +12 -9
  144. package/dist/hono/index.js +13 -12
  145. package/dist/hosted-BZIAYvon.js +315 -0
  146. package/dist/hosted-DBDX0M-P.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-DMmOG27O.js} +190 -53
  152. package/dist/index-BcHcPyIo.d.ts +110 -0
  153. package/dist/index-CaxrMD1A.d.ts +1 -0
  154. package/dist/index-Chrs5fQ-.d.ts +210 -0
  155. package/dist/index-CxGUswIC.d.ts +431 -0
  156. package/dist/index-D8EovfsP.d.ts +91 -0
  157. package/dist/{index-UdVQgq48.d.ts → index-DOVf7RJv.d.ts} +431 -81
  158. package/dist/{index-BwMe94Xq.d.ts → index-SGdIQyzc.d.ts} +34 -16
  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-Omfd793B.d.ts} +2 -2
  164. package/dist/instance-snapshot-Cxq4ygFc.js +600 -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-5JatXyND.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-CtKR3GXL.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-TCAdw-eW.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-BShP7Vf4.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-BJdBmYDG.js → openapi-DTaEmTSW.js} +10 -9
  205. package/dist/openapi-ahr8rHu3.js +138 -0
  206. package/dist/operation-findings-DgATDpvh.js +36 -0
  207. package/dist/operations-CxybZErY.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-Dyw8fyPF.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-BatFgAA4.js} +1698 -869
  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-C-q02Pal.js → parse-local-manifest-CVSs6J9I.js} +1 -1
  219. package/dist/{parse-local-manifest-DvYUR0QL.d.ts → parse-local-manifest-DgqtruPn.d.ts} +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-B9JxkBwC.js +868 -0
  227. package/dist/permdock-D7eeLJER.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-CZKiUfFM.js} +4 -3
  231. package/dist/{permissions-COH-KRgT.d.ts → permissions-oEWfl-kl.d.ts} +1 -2
  232. package/dist/policies-CO1oOymN.js +295 -0
  233. package/dist/{policy-ur0BBK_e.d.ts → policy-Czo4n3Hs.d.ts} +2 -2
  234. package/dist/{hosted-CBHgkzDl.js → policy-DLZJ5gAp.js} +17 -273
  235. package/dist/policy-from-catalog-DzhEc3Y9.js +450 -0
  236. package/dist/policy-module-CTlwMvLI.js +89 -0
  237. package/dist/{policy-types-sp9P1iIV.d.ts → policy-types-DzwivBgR.d.ts} +434 -631
  238. package/dist/postgrest-CW0IqC-U.js +566 -0
  239. package/dist/postgrest-NUqZT-RB.d.ts +100 -0
  240. package/dist/powersync-BHfuehf3.js +62 -0
  241. package/dist/powersync-CbzkqL_M.js +1 -0
  242. package/dist/{powersync-cZe4kzhL.js → powersync-bYUDLOAO.js} +23 -24
  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-DXlt-vks.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-B3_P7xuw.d.ts → protected-DEPHc2xV.d.ts} +16 -8
  255. package/dist/{protected-BN7BUdY1.js → protected-DfjY5mLA.js} +21 -4
  256. package/dist/{provider-Bi-0HNL3.js → provider-CC-u3bYP.js} +2 -2
  257. package/dist/{provider-kwHC9CZD.d.ts → provider-DMVt6yYn.d.ts} +1 -1
  258. package/dist/{provider-store-Ctt-81Ni.js → provider-store-B5Yrkhzr.js} +2 -2
  259. package/dist/pull-BgIfno6w.js +256 -0
  260. package/dist/pull-ByOks_Tg.js +1 -0
  261. package/dist/push-CmFVBOeI.js +116 -0
  262. package/dist/pushed-policy-BImMTTIM.d.ts +57 -0
  263. package/dist/pushed-policy-DobP7AHI.js +238 -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 +24 -22
  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-D7iKcLFe.d.ts} +1 -1
  275. package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
  276. package/dist/{request-context-BVM7aWNs.js → request-context-BTRTG7OT.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-BA8an5Ap.js +336 -0
  284. package/dist/{rls-BEktUaqg.js → rls-j6t43t7n.js} +287 -689
  285. package/dist/{role-builder-B4GbKM-i.js → role-builder-CXbis5-X.js} +14 -207
  286. package/dist/{rpc-nYC3cR_u.js → rpc-aPyNi6tA.js} +7 -7
  287. package/dist/run-CNsApDpd.js +1 -0
  288. package/dist/run-DOfMtc9V.js +723 -0
  289. package/dist/run-ticket-BjhTOi6u.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-FO-Q8oj0.js} +16 -14
  293. package/dist/scan-BOI5tJ-6.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-DqCT4CgZ.js +453 -0
  303. package/dist/{server-types-DdqBwZN_.d.ts → server-types-BLd4MnBX.d.ts} +51 -68
  304. package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
  305. package/dist/{shared-1uhI-e-b.js → shared-CD11nBbC.js} +18 -8
  306. package/dist/{shared-JhMeOsDF.js → shared-DvvFzYXe.js} +8 -9
  307. package/dist/signals-D3NcTKUS.js +32 -0
  308. package/dist/sink-BEZSlMS_.js +957 -0
  309. package/dist/sink-Bj_lDUDq.d.ts +225 -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-CXUWfsNy.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-DqK9eDmM.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-BV9j0DeZ.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-DLfUWFAI.js +1851 -0
  323. package/dist/ssf/index.d.ts +4 -4
  324. package/dist/ssf/index.js +384 -47
  325. package/dist/standard-webhooks-6lg8v_is.d.ts +88 -0
  326. package/dist/standard-webhooks-DgFFD-Ga.js +228 -0
  327. package/dist/storage-C2bWdvJH.js +132 -0
  328. package/dist/{store-ILkLUj_o.js → store-4u_hxjWa.js} +40 -53
  329. package/dist/{store-options-CbUHDoSe.js → store-options-BqEakYRa.js} +26 -21
  330. package/dist/{stores-BHXdSbw9.js → stores-BbsD4fAR.js} +2 -2
  331. package/dist/{stores-Cxz_80g-.d.ts → stores-ClZUgeoP.d.ts} +7 -8
  332. package/dist/{stream-Dwsg6WwE.d.ts → stream-7-xmnf3U.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-9pqI57pW.js +92 -0
  342. package/dist/{supabase-C1TWlnYt.js → supabase-Dxlp8A94.js} +98 -205
  343. package/dist/supabase-hook-CXcGpHqq.js +1 -0
  344. package/dist/{supabase-hook-Cva3ikXz.js → supabase-hook-DdDQhMlw.js} +951 -60
  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-7rJVLWe5.d.ts → types-5Ut_pbKy.d.ts} +61 -11
  376. package/dist/{store-9KO4BlkB.d.ts → types-BNORmDM8.d.ts} +100 -75
  377. package/dist/types-BjV-fqcA.d.ts +57 -0
  378. package/dist/{types-CUcFZfpU.d.ts → types-BqAKcRNW.d.ts} +2 -1
  379. package/dist/types-C8-KNsFf.d.ts +107 -0
  380. package/dist/{types-Br9IXUBG.d.ts → types-CCpc2Dcv.d.ts} +77 -17
  381. package/dist/{types-DpWfQdSh.d.ts → types-CZTnPFzM.d.ts} +46 -11
  382. package/dist/{types-CqrjB9o6.d.ts → types-CdlxsYQh.d.ts} +23 -11
  383. package/dist/{types-CIlTojhq.d.ts → types-ClZaWzfb.d.ts} +9 -6
  384. package/dist/types-DX0LaKTb.d.ts +157 -0
  385. package/dist/types-DiQjupG2.d.ts +332 -0
  386. package/dist/types-DqzsnlSA.js +67 -0
  387. package/dist/types-_sHy8BQf.d.ts +65 -0
  388. package/dist/{types-ByUo56un.d.ts → types-fbZ7JEXr.d.ts} +23 -22
  389. package/dist/{types-DHrmBJLH.d.ts → types-tIgIeIKJ.d.ts} +7 -7
  390. package/dist/unplugin/index.d.ts +1 -1
  391. package/dist/unplugin/index.js +2 -2
  392. package/dist/usage-CHOtwL19.js +1 -0
  393. package/dist/usage-DHtE8j4E.js +32 -0
  394. package/dist/{usage-CG9nOYZw.js → usage-T5mXq98v.js} +54 -11
  395. package/dist/{validation-error-BSSw0l_8.d.ts → validation-error-Bg5Tpluk.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-DbCL9bnB.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-D6lPdb4Z.d.ts} +65 -2
  403. package/dist/vue/index.d.ts +9 -10
  404. package/dist/vue/index.js +8 -8
  405. package/dist/waiter-BGUtGYoU.js +67 -0
  406. package/dist/waiter-CKy4MQSY.d.ts +36 -0
  407. package/dist/watch-Cb-NcaUw.js +1 -0
  408. package/dist/{watch-zeucB7eF.js → watch-CszoTJMq.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-Dv-WTP-w.js +306 -0
  412. package/dist/who-can-D0QoYbEb.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-Bd1Tejur.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 +9 -8
  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 +5 -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/load-B_shHrmd.js +0 -2
  490. package/dist/manifest-BngWKryL.js +0 -770
  491. package/dist/may-use-BOn_dR_w.js +0 -78
  492. package/dist/openapi-DcQ1Kg40.js +0 -164
  493. package/dist/ownership-BgnbOJFT.js +0 -851
  494. package/dist/permdock-L26udHSk.js +0 -3646
  495. package/dist/powersync-BFSbSElQ.js +0 -62
  496. package/dist/powersync-DCDgZgfZ.js +0 -2
  497. package/dist/rls-55DQTuf5.js +0 -250
  498. package/dist/run-DMcNW_8T.js +0 -174
  499. package/dist/server-ZYEHtNHS.js +0 -268
  500. package/dist/sink-BTtmfPnE.js +0 -141
  501. package/dist/sink-CPN4zLfs.d.ts +0 -104
  502. package/dist/skills-Dle4ZoLF.js +0 -56
  503. package/dist/snapshot-Dc9CHPME.js +0 -1078
  504. package/dist/src-Bb7no-hS.js +0 -639
  505. package/dist/subject-C6dLxqHU.js +0 -24
  506. package/dist/supabase-Dbqr141s.js +0 -83
  507. package/dist/supabase-hook-BULg7Ut_.js +0 -2
  508. package/dist/thenable-QSmvt-vZ.js +0 -65
  509. package/dist/types-C0dee0Qf.d.ts +0 -197
  510. package/dist/types-DvupZE0w.d.ts +0 -9
  511. package/dist/usage-4G6t643F.js +0 -42
  512. package/dist/usage-iFLJ0-rr.js +0 -2
  513. package/dist/vocabulary-hhEFLFoL.d.ts +0 -65
  514. package/dist/watch-C8TpsAl4.js +0 -2
@@ -0,0 +1,78 @@
1
+ import { T as Policy, a as ApprovalRequirement, bn as Grantee, lr as Condition } from "./policy-types-DzwivBgR.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-CD11nBbC.js";
6
+ import { f as pgConnector } from "./policies-CO1oOymN.js";
7
+ import { t as FIELD_VIEWS } from "./fields-D9tPVUUS.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,
@@ -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 {}