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
@@ -1,20 +1,21 @@
1
1
  import { t as compact } from "./compact-CAf557ZB.js";
2
- import { t as describe } from "./describe-Cgkp7eP0.js";
3
- import { a as deniedMessage } from "./errors-drnfxYtm.js";
2
+ import { t as describe } from "./describe-BybMRY7A.js";
3
+ import { a as deniedMessage } from "./errors-BKy0EfhN.js";
4
+ import { t as actorMayCallTool } from "./delegation-DaXVdDhM.js";
4
5
  import { n as resourceRef } from "./resource-ref-CaS9yVPi.js";
5
- import { t as mayUse } from "./may-use-BOn_dR_w.js";
6
- import { l as storedApprovalToken, s as resumeDecision } from "./helpers-C9YmyBIa.js";
7
- import { n as resolveOrNull } from "./build-instance-DIIV9DbC.js";
8
- import { n as tenantScope, t as actorFrom } from "./adapter-context-mlWsVGGg.js";
9
- import { n as requestContext, t as buildReportingInstance } from "./request-context-BVM7aWNs.js";
6
+ import { c as withApp } from "./permdock-B9JxkBwC.js";
7
+ import { l as storedApprovalToken, s as resumeDecision } from "./helpers-DTcZOzhF.js";
8
+ import { n as resolveOrNull } from "./build-instance-BMnAudHn.js";
9
+ import { n as tenantScope, t as actorFrom } from "./adapter-context-CRhqyzCk.js";
10
+ import { n as requestContext, t as buildReportingInstance } from "./request-context-BTRTG7OT.js";
10
11
  //#region src/agent/denied-text.ts
11
12
  /** The hook's text, or `event.text` when there is no hook or it throws or returns no string. */
12
- function deniedText(hook, event, report) {
13
+ function refusalText(hook, event, report) {
13
14
  if (hook === void 0) return event.text;
14
15
  try {
15
16
  const text = hook(event);
16
17
  if (text === void 0) return event.text;
17
- if (typeof text !== "string" || text === "") throw new TypeError("PermDock: onDenied must return a non-empty string or undefined");
18
+ if (typeof text !== "string" || text === "") throw new TypeError("PermDock: deniedText must return a non-empty string or undefined");
18
19
  return text;
19
20
  } catch (error) {
20
21
  report(error);
@@ -44,7 +45,8 @@ function approvalTokenOf(context) {
44
45
  function runDecide(permdock, permission, data, how) {
45
46
  return permdock.decide(permission, data, how);
46
47
  }
47
- function createAgentKernel(policy, options) {
48
+ function createAgentKernel(policy, given) {
49
+ const options = withApp(policy, given);
48
50
  const cache = /* @__PURE__ */ new WeakMap();
49
51
  const reporters = /* @__PURE__ */ new WeakMap();
50
52
  const report = (permdock, error) => {
@@ -96,6 +98,23 @@ function createAgentKernel(policy, options) {
96
98
  let permdock;
97
99
  try {
98
100
  permdock = await instance(context);
101
+ if (how.tool !== void 0 && !actorMayCallTool(permdock.subject.actor, how.tool)) {
102
+ const refused = {
103
+ outcome: "denied",
104
+ denials: [{
105
+ role: null,
106
+ reason: "agent-tool-not-delegated"
107
+ }],
108
+ alternatives: []
109
+ };
110
+ return {
111
+ ok: true,
112
+ permdock,
113
+ data: void 0,
114
+ raw: refused,
115
+ decision: refused
116
+ };
117
+ }
99
118
  let data;
100
119
  if (binding.data !== void 0) {
101
120
  try {
@@ -113,11 +132,16 @@ function createAgentKernel(policy, options) {
113
132
  permdock
114
133
  };
115
134
  }
116
- const raw = runDecide(permdock, binding.permission, data, {
135
+ const raw = runDecide(permdock, binding.permission, data, compact({
117
136
  adapter: options.adapter,
118
137
  boundary,
119
- source: how.source
120
- });
138
+ call: how.call,
139
+ args,
140
+ operation: binding.meta === void 0 ? void 0 : {
141
+ name: binding.name ?? "",
142
+ meta: binding.meta
143
+ }
144
+ }));
121
145
  const decision = how.resume ? await resumeDecision({
122
146
  decision: raw,
123
147
  permission: binding.permission,
@@ -142,11 +166,12 @@ function createAgentKernel(policy, options) {
142
166
  });
143
167
  }
144
168
  };
145
- const check = (binding, args, context, checkOptions = {}) => run(binding, args, context, {
169
+ const check = (binding, args, context, checkOptions = {}) => run(binding, args, context, compact({
146
170
  resume: checkOptions.simulate !== true,
147
- source: checkOptions.simulate === true ? "simulate" : "adapter",
148
- decideOptions: checkOptions
149
- });
171
+ call: checkOptions.simulate === true ? "simulate" : "adapter",
172
+ decideOptions: checkOptions,
173
+ tool: checkOptions.tool
174
+ }));
150
175
  const verdictOf = (checked, binding, toolName) => {
151
176
  if (!checked.ok) {
152
177
  if (checked.failure !== "no-data" || checked.permdock === void 0) return {
@@ -193,18 +218,21 @@ function createAgentKernel(policy, options) {
193
218
  };
194
219
  };
195
220
  const evaluate = async (binding, toolName, args, context, decideOptions = {}) => {
196
- const checked = await check(binding, args, context, decideOptions);
221
+ const checked = await check(binding, args, context, {
222
+ ...decideOptions,
223
+ tool: toolName
224
+ });
197
225
  return relabel(verdictOf(checked, binding, toolName), checked.permdock);
198
226
  };
199
227
  const relabel = (verdict, permdock) => {
200
- const hook = options.onDenied;
228
+ const hook = options.deniedText;
201
229
  if (hook === void 0 || verdict.outcome === "granted") return verdict;
202
230
  const onError = (error) => {
203
231
  report(permdock, error);
204
232
  };
205
233
  if (verdict.outcome === "denied") return {
206
234
  ...verdict,
207
- reason: deniedText(hook, {
235
+ reason: refusalText(hook, {
208
236
  decision: verdict.decision,
209
237
  permission: verdict.permission,
210
238
  text: verdict.reason
@@ -212,7 +240,7 @@ function createAgentKernel(policy, options) {
212
240
  };
213
241
  return {
214
242
  ...verdict,
215
- summary: deniedText(hook, {
243
+ summary: refusalText(hook, {
216
244
  decision: verdict.decision,
217
245
  permission: verdict.permission,
218
246
  text: verdict.summary
@@ -222,7 +250,7 @@ function createAgentKernel(policy, options) {
222
250
  const tokenFor = async (binding, args, context) => {
223
251
  const checked = await run(binding, args, context, {
224
252
  resume: false,
225
- source: "adapter",
253
+ call: "adapter",
226
254
  decideOptions: {}
227
255
  });
228
256
  return checked.ok && checked.raw.outcome === "approval-required" ? checked.raw.token : void 0;
@@ -240,7 +268,7 @@ function createAgentKernel(policy, options) {
240
268
  const allowedToolNames = async (context) => {
241
269
  const permdock = await instance(context);
242
270
  const allowed = /* @__PURE__ */ new Set();
243
- for (const [name, binding] of Object.entries(tools)) if (mayUse(permdock, binding.permission)) allowed.add(name);
271
+ for (const [name, binding] of Object.entries(tools)) if (actorMayCallTool(permdock.subject.actor, name) && permdock.mayUse(binding.permission)) allowed.add(name);
244
272
  return allowed;
245
273
  };
246
274
  return {
@@ -254,4 +282,4 @@ function createAgentKernel(policy, options) {
254
282
  };
255
283
  }
256
284
  //#endregion
257
- export { createAgentKernel as n, deniedText as r, approvalTokenOf as t };
285
+ export { createAgentKernel as n, refusalText as r, approvalTokenOf as t };
@@ -1,6 +1,7 @@
1
- import { It as WhereResult, jr as Condition, kr as Subject } from "../policy-types-sp9P1iIV.js";
1
+ import { Rt as Instant, ir as Subject, lr as Condition } from "../policy-types-DzwivBgR.js";
2
+ import { c as WhereResult } from "../permdock-D7eeLJER.js";
2
3
  import { r as RelationsMapping } from "../graph-sql-B-dsAT6j.js";
3
- import { s as MembershipsMapping } from "../compile-CtTP7eur.js";
4
+ import { s as MembershipsMapping } from "../compile-Ckm2HqBZ.js";
4
5
  import { n as WithSubjectOptions, t as RowCheck } from "../row-check-Dt35czLy.js";
5
6
  //#region src/kysely/types.d.ts
6
7
  type KyselySelectQuery = {
@@ -33,7 +34,8 @@ type KyselyWhereOptions = {
33
34
  readonly memberships?: MembershipsMapping;
34
35
  /** Where the relation graph lives; graph grants compile to Postgres subqueries with it and are refused without. */
35
36
  readonly relations?: RelationsMapping;
36
- readonly now?: number;
37
+ /** The clock membership expiry is read at; a `Temporal.Instant` fits. Defaults to the current time. */
38
+ readonly now?: Instant;
37
39
  /** Kysely's `sql` tag, for graph subqueries on runtimes without `require`; loaded from the `kysely` peer by default. */
38
40
  readonly sql?: KyselySql;
39
41
  };
@@ -1,6 +1,6 @@
1
1
  import { t as compact } from "../compact-CAf557ZB.js";
2
- import { a as assertSafeKey } from "../thenable-QSmvt-vZ.js";
3
- import { n as escapeLike, t as compileWhere } from "../compile-CcEu2ZQ1.js";
2
+ import { t as assertSafeKey } from "../paths-DXSHAMIa.js";
3
+ import { n as escapeLike, t as compileWhere } from "../compile-CMqMx_IN.js";
4
4
  import { a as rowCheckFrom, i as templateOf, r as subjectStatements, s as loadPeer, t as statementTemplate } from "../subject-settings-CkEwrw3W.js";
5
5
  //#region src/kysely/to-where.ts
6
6
  function ident(name) {
@@ -0,0 +1 @@
1
+ export { a as loadModule, s as pickNamed } from "./load-DFS_ry0W.js";
@@ -1,8 +1,16 @@
1
- import { c as listPermissions } from "./permission-registry-BsblpB-z.js";
1
+ import { c as listPermissions } from "./permission-registry-Br4jSNVi.js";
2
+ import { a as describeError, n as CliError } from "./errors-CWTY6uih.js";
2
3
  import { dirname, resolve } from "node:path";
3
4
  import { pathToFileURL } from "node:url";
4
5
  import { createJiti } from "jiti";
5
- //#region src/cli/load.ts
6
+ //#region src/cli/project/load.ts
7
+ /** A project module the CLI cannot use: the project's to fix, so a usage error. */
8
+ function invalidModule(message, cause) {
9
+ return new CliError("usage", message, {
10
+ code: "config_invalid",
11
+ ...cause === void 0 ? {} : { cause }
12
+ });
13
+ }
6
14
  /**
7
15
  * Errors Node raises while resolving or parsing a module graph, before any of
8
16
  * its code runs, so loading it again through jiti cannot repeat a side effect.
@@ -36,6 +44,14 @@ function importWithJiti(abs, fresh) {
36
44
  * returned as written; `default` is not merged into the namespace.
37
45
  */
38
46
  async function loadModule(abs, options) {
47
+ try {
48
+ return await importModule(abs, options);
49
+ } catch (error) {
50
+ if (error instanceof CliError) throw error;
51
+ throw invalidModule(describeError(error), error);
52
+ }
53
+ }
54
+ async function importModule(abs, options) {
39
55
  let loaded;
40
56
  if (options?.fresh === true) loaded = await importWithJiti(abs, true);
41
57
  else try {
@@ -44,7 +60,7 @@ async function loadModule(abs, options) {
44
60
  if (!loadsWithJiti(error)) throw error;
45
61
  loaded = await importWithJiti(abs, false);
46
62
  }
47
- if (loaded === null || typeof loaded !== "object") throw new Error(`PermDock CLI: module '${abs}' did not export an object`);
63
+ if (loaded === null || typeof loaded !== "object") throw invalidModule(`PermDock CLI: module '${abs}' did not export an object`);
48
64
  return loaded;
49
65
  }
50
66
  function pickNamed(mod, names) {
@@ -52,11 +68,11 @@ function pickNamed(mod, names) {
52
68
  return mod["default"];
53
69
  }
54
70
  function asPermissionTree(value) {
55
- if (value === null || typeof value !== "object") throw new Error("PermDock CLI: permissions export is not a permission tree");
71
+ if (value === null || typeof value !== "object") throw invalidModule("PermDock CLI: permissions export is not a permission tree");
56
72
  return value;
57
73
  }
58
74
  function asPolicy(value) {
59
- if (value === null || typeof value !== "object" || !("roles" in value) || !("permissions" in value)) throw new Error("PermDock CLI: policy export is not a Policy");
75
+ if (value === null || typeof value !== "object" || !("roles" in value) || !("permissions" in value)) throw invalidModule("PermDock CLI: policy export is not a Policy");
60
76
  return value;
61
77
  }
62
78
  function leavesOf(tree) {
@@ -68,7 +84,7 @@ async function loadPolicyAt(cwd, path, options) {
68
84
  }
69
85
  /** The `policy` export at `path`; without one, throws `PermDock CLI: <missing>`. */
70
86
  function requirePolicy(cwd, path, missing) {
71
- return path === void 0 ? Promise.reject(/* @__PURE__ */ new Error(`PermDock CLI: ${missing}`)) : loadPolicyAt(cwd, path);
87
+ return path === void 0 ? Promise.reject(new CliError("usage", `PermDock CLI: ${missing}`, { code: "config_invalid" })) : loadPolicyAt(cwd, path);
72
88
  }
73
89
  /** The configured policy export, or `undefined` when unset or unloadable. */
74
90
  async function loadConfiguredPolicy(cwd, path, options) {
@@ -1,11 +1,8 @@
1
1
  //#region src/jwt/load-jose.ts
2
- let cached;
3
2
  function loadJose() {
4
- cached ??= import("jose").catch((cause) => {
5
- cached = void 0;
3
+ return import("jose").catch((cause) => {
6
4
  throw new Error("PermDock: permdock/jwt requires the optional peer \"jose\".", { cause });
7
5
  });
8
- return cached;
9
6
  }
10
7
  //#endregion
11
8
  export { loadJose as t };
@@ -0,0 +1,68 @@
1
+ import { t as defineLeaf } from "./command-L8EstFNm.js";
2
+ import { c as given } from "./flags-C3DktBDY.js";
3
+ //#region src/cli/commands/login.ts
4
+ const urlFlag = { url: {
5
+ type: "string",
6
+ description: "Issuer URL (default PERMDOCK_CLOUD_URL, then https://permdock.com/api)",
7
+ valueHint: "url"
8
+ } };
9
+ const login = defineLeaf({
10
+ flags: {
11
+ ...urlFlag,
12
+ loopback: {
13
+ type: "boolean",
14
+ description: "Use a 127.0.0.1 redirect with PKCE instead of the device flow"
15
+ },
16
+ scope: {
17
+ type: "enum",
18
+ options: ["catalog:write"],
19
+ repeatable: true,
20
+ description: "Scopes beyond projects:read and policy:read; catalog:write for permdock cloud push"
21
+ },
22
+ open: {
23
+ type: "boolean",
24
+ default: true,
25
+ description: "Open the browser at the verification URL",
26
+ negativeDescription: "Print the URL only"
27
+ }
28
+ },
29
+ async run(ctx, { flags }) {
30
+ const { runLogin } = await import("./login-imhuwvn3.js");
31
+ return runLogin({
32
+ cwd: ctx.cwd,
33
+ url: given(flags.url),
34
+ loopback: flags.loopback,
35
+ scopes: flags.scope,
36
+ open: flags.open && ctx.interactive,
37
+ json: ctx.json,
38
+ env: ctx.env,
39
+ io: ctx.io
40
+ });
41
+ }
42
+ });
43
+ const logout = defineLeaf({
44
+ flags: { ...urlFlag },
45
+ async run(ctx, { flags }) {
46
+ const { runLogout } = await import("./login-imhuwvn3.js");
47
+ return runLogout({
48
+ url: given(flags.url),
49
+ json: ctx.json,
50
+ env: ctx.env,
51
+ io: ctx.io
52
+ });
53
+ }
54
+ });
55
+ const whoami = defineLeaf({
56
+ flags: { ...urlFlag },
57
+ async run(ctx, { flags }) {
58
+ const { runWhoami } = await import("./login-imhuwvn3.js");
59
+ return runWhoami({
60
+ url: given(flags.url),
61
+ json: ctx.json,
62
+ env: ctx.env,
63
+ io: ctx.io
64
+ });
65
+ }
66
+ });
67
+ //#endregion
68
+ export { login, logout, whoami };
@@ -0,0 +1,254 @@
1
+ import { h as secondsAt, i as dateAt, s as instantAt } from "./time-DkWjdL98.js";
2
+ import { n as CliError } from "./errors-CWTY6uih.js";
3
+ import { i as postForm, r as parseToken, s as runDeviceFlow } from "./device-BARQ8eYG.js";
4
+ import { i as writeCredentials, n as deleteCredentials, r as readCredentials, t as credentialsPath } from "./storage-C2bWdvJH.js";
5
+ import { n as httpRequest } from "./http-DXJ37RDA.js";
6
+ import { c as READ_SCOPES, d as issuerMetadata, i as credentialsInsideRepository, l as cloudUrl, n as cliRuntime, r as credentialStorage, s as CLI_CLIENT_ID, t as CREDENTIAL_SERVICE } from "./auth-DRLEizbL.js";
7
+ import { createHash, randomBytes } from "node:crypto";
8
+ import { spawn } from "node:child_process";
9
+ import { createServer } from "node:http";
10
+ //#region src/cli/cloud/loopback.ts
11
+ /** How long the loopback listener waits for the browser to come back. */
12
+ const LOOPBACK_TIMEOUT_MS = 3e5;
13
+ function base64url(bytes) {
14
+ return bytes.toString("base64url");
15
+ }
16
+ function listen(server) {
17
+ return new Promise((resolve, reject) => {
18
+ server.once("error", reject);
19
+ server.listen(0, "127.0.0.1", () => {
20
+ const address = server.address();
21
+ resolve(typeof address === "object" && address !== null ? address.port : 0);
22
+ });
23
+ });
24
+ }
25
+ /**
26
+ * RFC 8252 native-app login: an authorization code delivered to a listener on
27
+ * `127.0.0.1` with an ephemeral port, bound by PKCE S256 (RFC 7636) and a
28
+ * `state` that the callback must echo.
29
+ */
30
+ async function runLoopbackFlow(options, runtime) {
31
+ const verifier = base64url(randomBytes(32));
32
+ const challenge = base64url(createHash("sha256").update(verifier).digest());
33
+ const state = base64url(randomBytes(16));
34
+ const { promise: callback, resolve: settle } = Promise.withResolvers();
35
+ const server = createServer((request, response) => {
36
+ const url = new URL(request.url ?? "/", "http://127.0.0.1");
37
+ if (url.pathname !== "/callback") {
38
+ response.writeHead(404).end();
39
+ return;
40
+ }
41
+ const code = url.searchParams.get("code");
42
+ const error = url.searchParams.get("error");
43
+ const ok = url.searchParams.get("state") === state && code !== null;
44
+ response.writeHead(ok ? 200 : 400, { "content-type": "text/plain; charset=utf-8" }).end(ok ? "PermDock login complete. You can close this tab.\n" : "PermDock login failed. Return to the terminal.\n");
45
+ settle(ok ? {
46
+ ok: true,
47
+ code
48
+ } : {
49
+ ok: false,
50
+ error: error ?? "state-mismatch"
51
+ });
52
+ });
53
+ let port;
54
+ try {
55
+ port = await listen(server);
56
+ } catch {
57
+ return null;
58
+ }
59
+ const redirectUri = `http://127.0.0.1:${String(port)}/callback`;
60
+ const authorize = new URL(options.authorizationEndpoint);
61
+ authorize.searchParams.set("response_type", "code");
62
+ authorize.searchParams.set("client_id", options.clientId);
63
+ authorize.searchParams.set("redirect_uri", redirectUri);
64
+ authorize.searchParams.set("scope", options.scope);
65
+ authorize.searchParams.set("state", state);
66
+ authorize.searchParams.set("code_challenge", challenge);
67
+ authorize.searchParams.set("code_challenge_method", "S256");
68
+ options.write(`Open ${authorize.href} to log in\n`);
69
+ options.open?.(authorize.href);
70
+ let timer;
71
+ const timeout = new Promise((resolve) => {
72
+ timer = setTimeout(() => {
73
+ resolve({
74
+ ok: false,
75
+ error: "timeout"
76
+ });
77
+ }, options.timeoutMs ?? LOOPBACK_TIMEOUT_MS);
78
+ });
79
+ const result = await Promise.race([callback, timeout]);
80
+ clearTimeout(timer);
81
+ server.closeAllConnections();
82
+ server.close();
83
+ if (!result.ok) return null;
84
+ const body = await postForm(runtime, options.tokenEndpoint, {
85
+ grant_type: "authorization_code",
86
+ code: result.code,
87
+ redirect_uri: redirectUri,
88
+ client_id: options.clientId,
89
+ code_verifier: verifier
90
+ });
91
+ if (body === null) return null;
92
+ const token = parseToken(body, secondsAt(runtime.now?.()));
93
+ return token.ok ? token.credential : null;
94
+ }
95
+ //#endregion
96
+ //#region src/cli/cloud/login.ts
97
+ /** Opens `url` in the default browser; a failure leaves the printed URL to the user. */
98
+ function openBrowser(url) {
99
+ const [command, args] = process.platform === "darwin" ? ["open", [url]] : process.platform === "win32" ? ["cmd", [
100
+ "/c",
101
+ "start",
102
+ "",
103
+ url
104
+ ]] : ["xdg-open", [url]];
105
+ try {
106
+ const child = spawn(command, args, {
107
+ stdio: "ignore",
108
+ detached: true
109
+ });
110
+ child.on("error", () => void 0);
111
+ child.unref();
112
+ } catch {}
113
+ }
114
+ /** RFC 7009 answers 200 with an empty body, also for a token it does not know. */
115
+ async function revoke(runtime, endpoint, fields) {
116
+ try {
117
+ return (await httpRequest(runtime.fetch === void 0 ? {} : { fetch: runtime.fetch }, {
118
+ url: endpoint,
119
+ method: "POST",
120
+ service: endpoint,
121
+ headers: { "content-type": "application/x-www-form-urlencoded" },
122
+ body: new URLSearchParams(fields)
123
+ })).ok;
124
+ } catch {
125
+ return false;
126
+ }
127
+ }
128
+ function failed(code, output) {
129
+ return {
130
+ code,
131
+ output
132
+ };
133
+ }
134
+ async function runLogin(input) {
135
+ const issuer = cloudUrl(input.url, input.env);
136
+ const runtime = cliRuntime(input.io, input.env);
137
+ const inside = credentialsInsideRepository(input.cwd, runtime);
138
+ if (inside !== null) return failed(2, `permdock login refuses to store credentials inside the repository (${inside}); point XDG_CONFIG_HOME outside it`);
139
+ const metadata = await issuerMetadata(issuer, runtime);
140
+ if (metadata === null) return failed(1, `permdock login: ${issuer} publishes no RFC 8414 metadata for that issuer`);
141
+ const scope = [.../* @__PURE__ */ new Set([...READ_SCOPES, ...input.scopes])].join(" ");
142
+ const open = input.open ? openBrowser : void 0;
143
+ const say = (text) => {
144
+ input.io.stderr(text.replace(/\n$/u, ""));
145
+ };
146
+ let credential = null;
147
+ if (!input.loopback && metadata.deviceAuthorizationEndpoint !== void 0 && metadata.tokenEndpoint !== void 0) credential = await runDeviceFlow({
148
+ clientId: CLI_CLIENT_ID,
149
+ scope,
150
+ authorizationEndpoint: metadata.deviceAuthorizationEndpoint,
151
+ tokenEndpoint: metadata.tokenEndpoint,
152
+ ...open === void 0 ? {} : { open }
153
+ }, runtime, say);
154
+ else if (metadata.authorizationEndpoint !== void 0 && metadata.tokenEndpoint !== void 0) credential = await runLoopbackFlow({
155
+ authorizationEndpoint: metadata.authorizationEndpoint,
156
+ tokenEndpoint: metadata.tokenEndpoint,
157
+ clientId: CLI_CLIENT_ID,
158
+ scope,
159
+ write: say,
160
+ ...open === void 0 ? {} : { open }
161
+ }, runtime);
162
+ else return failed(1, `permdock login: ${issuer} offers neither the device flow nor an authorization endpoint`);
163
+ if (credential === null) return failed(1, `permdock login: ${issuer} did not issue a token`);
164
+ const granted = credential.scope === void 0 ? {
165
+ ...credential,
166
+ scope
167
+ } : credential;
168
+ const storage = await credentialStorage();
169
+ const where = writeCredentials(storage, issuer, granted, runtime) === "keychain" ? "the OS keychain" : credentialsPath(CREDENTIAL_SERVICE, runtime);
170
+ return {
171
+ code: 0,
172
+ output: input.json ? JSON.stringify({
173
+ issuer,
174
+ scope: granted.scope,
175
+ storage: where
176
+ }) : `logged in to ${issuer} (${granted.scope ?? scope}); credentials in ${where}`
177
+ };
178
+ }
179
+ /** Revokes the stored login (RFC 7009) and deletes it; a revocation failure still deletes it. */
180
+ async function runLogout(input) {
181
+ const issuer = cloudUrl(input.url, input.env);
182
+ const runtime = cliRuntime(input.io, input.env);
183
+ const storage = await credentialStorage();
184
+ const credential = readCredentials(storage, issuer, runtime);
185
+ if (credential === null) return {
186
+ code: 0,
187
+ output: input.json ? JSON.stringify({
188
+ issuer,
189
+ status: "not logged in"
190
+ }) : `not logged in to ${issuer}`
191
+ };
192
+ const metadata = await issuerMetadata(issuer, runtime);
193
+ let revoked = false;
194
+ if (metadata?.revocationEndpoint !== void 0) {
195
+ const refresh = credential.refresh_token;
196
+ revoked = await revoke(runtime, metadata.revocationEndpoint, {
197
+ token: refresh ?? credential.access_token,
198
+ token_type_hint: refresh === void 0 ? "access_token" : "refresh_token",
199
+ client_id: CLI_CLIENT_ID
200
+ });
201
+ }
202
+ deleteCredentials(storage, issuer, runtime);
203
+ const status = revoked ? "revoked" : "deleted";
204
+ return {
205
+ code: 0,
206
+ output: input.json ? JSON.stringify({
207
+ issuer,
208
+ status
209
+ }) : `logged out of ${issuer} (${revoked ? "token revoked" : "credentials deleted; the token was not revoked"})`
210
+ };
211
+ }
212
+ /** The credential the next Cloud call sends, without sending it. */
213
+ async function runWhoami(input) {
214
+ const issuer = cloudUrl(input.url, input.env);
215
+ for (const name of ["PERMDOCK_CLOUD_KEY", "PERMDOCK_CLOUD_TOKEN"]) {
216
+ const value = input.env[name];
217
+ if (value !== void 0 && value !== "") {
218
+ const data = {
219
+ issuer,
220
+ source: name
221
+ };
222
+ return {
223
+ code: 0,
224
+ output: input.json ? JSON.stringify(data) : `${issuer}: ${name} from the environment`,
225
+ data
226
+ };
227
+ }
228
+ }
229
+ const runtime = cliRuntime(input.io, input.env);
230
+ const credential = readCredentials(await credentialStorage(), issuer, runtime);
231
+ if (credential === null) throw new CliError("action", `not logged in to ${issuer}`, {
232
+ code: "auth_required",
233
+ next: [{
234
+ command: "permdock login",
235
+ when: "to log in"
236
+ }]
237
+ });
238
+ const scopes = (credential.scope ?? "").split(" ").filter((scope) => scope !== "");
239
+ const expired = credential.expires_at !== void 0 && credential.expires_at <= secondsAt(runtime.now?.()) && credential.refresh_token === void 0;
240
+ const data = {
241
+ issuer,
242
+ source: "login",
243
+ scopes,
244
+ ...credential.expires_at === void 0 ? {} : { expiresAt: dateAt(instantAt(credential.expires_at)).toISOString() },
245
+ expired
246
+ };
247
+ return {
248
+ code: 0,
249
+ output: input.json ? JSON.stringify(data) : `${issuer}: logged in (${scopes.join(" ") || "no scopes"})${expired ? "; the login has expired, run permdock login" : ""}`,
250
+ data
251
+ };
252
+ }
253
+ //#endregion
254
+ export { runLogin, runLogout, runWhoami };
@@ -0,0 +1,42 @@
1
+ import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
2
+ import { n as PermDockValidationError } from "./validation-error-ZfUHbKvf.js";
3
+ import { n as copyJson, t as checkSchema } from "./json-schema-B-vAwlde.js";
4
+ import { t as supabaseManifestSchema } from "./manifest-schema-C0kK_8V0.js";
5
+ //#region src/supabase/manifest.ts
6
+ /**
7
+ * Reads a `permdock.manifest.json` document (parsed, or the JSON text) and
8
+ * validates it against `schemas/supabase-manifest-v1.json`. Returns a
9
+ * deep-frozen copy built from own keys; throws `PermDockValidationError`
10
+ * with every issue, so a manifest of another major is refused.
11
+ */
12
+ function parseSupabaseManifest(json) {
13
+ const issues = [];
14
+ let input = json;
15
+ if (typeof json === "string") try {
16
+ input = JSON.parse(json);
17
+ } catch (error) {
18
+ invalidManifest([{
19
+ message: `Expected JSON text: ${error instanceof Error ? error.message : String(error)}`,
20
+ path: []
21
+ }]);
22
+ }
23
+ const copy = copyJson(input, [], issues, /* @__PURE__ */ new Set());
24
+ if (issues.length === 0) checkSchema(supabaseManifestSchema, copy, [], issues);
25
+ if (issues.length > 0) invalidManifest(issues);
26
+ return freezeDeep(copy);
27
+ }
28
+ function invalidManifest(issues) {
29
+ const [first] = issues;
30
+ const where = first?.path === void 0 || first.path.length === 0 ? "" : ` at ${first.path.map(String).join(".")}`;
31
+ const more = issues.length > 1 ? ` (and ${String(issues.length - 1)} more)` : "";
32
+ throw new PermDockValidationError({
33
+ code: "invalid-data",
34
+ permission: "",
35
+ resource: "",
36
+ boundary: "supabase-manifest",
37
+ issues,
38
+ message: `PermDock: invalid Supabase manifest${where}: ${first?.message ?? "unknown"}${more}`
39
+ });
40
+ }
41
+ //#endregion
42
+ export { parseSupabaseManifest as t };