permdock 0.0.0 → 0.2.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 (344) hide show
  1. package/README.md +327 -1
  2. package/dist/a2a/index.d.ts +169 -0
  3. package/dist/a2a/index.js +232 -0
  4. package/dist/adapter-context-mlWsVGGg.js +23 -0
  5. package/dist/ai-sdk/index.d.ts +95 -0
  6. package/dist/ai-sdk/index.js +154 -0
  7. package/dist/approval-required-TzNB9oQA.js +6 -0
  8. package/dist/approvals/index.d.ts +3 -0
  9. package/dist/approvals/index.js +5 -0
  10. package/dist/approvals-DbYAuNkG.js +224 -0
  11. package/dist/approvers-DT4AVyIg.js +52 -0
  12. package/dist/arazzo-BAgw9ap6.js +70 -0
  13. package/dist/arazzo-cmvX2jDe.js +54 -0
  14. package/dist/authzen/index.d.ts +39 -0
  15. package/dist/authzen/index.js +302 -0
  16. package/dist/better-auth/index.d.ts +109 -0
  17. package/dist/better-auth/index.js +344 -0
  18. package/dist/better-supabase/index.d.ts +206 -0
  19. package/dist/better-supabase/index.js +620 -0
  20. package/dist/bind-CVy3Espv.d.ts +25 -0
  21. package/dist/bind-VnYn2HKq.js +97 -0
  22. package/dist/boundary-BM8a_P6E.js +13 -0
  23. package/dist/boundary-BmHxVH1J.d.ts +15 -0
  24. package/dist/budget-JqcRqyhK.d.ts +11 -0
  25. package/dist/budget-NbEtbJC_.js +11 -0
  26. package/dist/canonical-json-DemiK4Vp.js +26 -0
  27. package/dist/capability-4qPdO9gk.js +173 -0
  28. package/dist/capability-Dq43tT1u.d.ts +99 -0
  29. package/dist/catalog/index.d.ts +12 -0
  30. package/dist/catalog/index.js +2 -0
  31. package/dist/catalog-BjZSovXQ.js +2 -0
  32. package/dist/catalog-doc-Dsc9y7sd.js +309 -0
  33. package/dist/catalog-h2tlKFkq.js +48 -0
  34. package/dist/catalog-path-CnI0XTFK.js +12 -0
  35. package/dist/catalog-z8q6bi_r.js +55 -0
  36. package/dist/claude-agent/index.d.ts +72 -0
  37. package/dist/claude-agent/index.js +77 -0
  38. package/dist/clerk/index.d.ts +65 -0
  39. package/dist/clerk/index.js +301 -0
  40. package/dist/cli/bin.d.ts +1 -0
  41. package/dist/cli/bin.js +20 -0
  42. package/dist/cli/index.d.ts +46 -0
  43. package/dist/cli/index.js +5 -0
  44. package/dist/clients-C7zLFuWT.d.ts +12 -0
  45. package/dist/clients-DjU5ABMy.js +23 -0
  46. package/dist/cloud/index.d.ts +90 -0
  47. package/dist/cloud/index.js +404 -0
  48. package/dist/cloud-BGhHS-lY.js +50 -0
  49. package/dist/cloud-Bo3e9Ak3.js +118 -0
  50. package/dist/collect-DDDv_ESs.js +502 -0
  51. package/dist/collect-DLlujdHC.js +83 -0
  52. package/dist/collect-rG2IQ3t0.js +2 -0
  53. package/dist/commands-DWOrSQic.js +97 -0
  54. package/dist/compact-y6vfu2_f.js +19 -0
  55. package/dist/compare-pfyVnBjE.js +12 -0
  56. package/dist/compile/index.d.ts +3 -0
  57. package/dist/compile/index.js +2 -0
  58. package/dist/compile-Ba4blROR.js +613 -0
  59. package/dist/compile-CNnl6uIt.d.ts +94 -0
  60. package/dist/config-BJiM-xAm.js +157 -0
  61. package/dist/config-Bn00Z3ks.js +36 -0
  62. package/dist/config-report-Dw_JcUqT.js +44 -0
  63. package/dist/connection-CU8MQxRi.js +194 -0
  64. package/dist/context-Ttp0ekMT.js +82 -0
  65. package/dist/convex/index.d.ts +45 -0
  66. package/dist/convex/index.js +65 -0
  67. package/dist/create-BWyx3jua.d.ts +245 -0
  68. package/dist/create-CPhDL6qx.js +253 -0
  69. package/dist/credential-8P81ff4u.js +306 -0
  70. package/dist/delegation-D8pUEuce.js +103 -0
  71. package/dist/describe-B_gVZEVi.js +94 -0
  72. package/dist/describe-PdoqESvg.d.ts +36 -0
  73. package/dist/diff-B8Tunc3o.js +451 -0
  74. package/dist/diff-CzqLxZ77.js +48 -0
  75. package/dist/digest-B3kc_PgQ.d.ts +19 -0
  76. package/dist/digest-BI-6aa6d.js +27 -0
  77. package/dist/doctor-WpvG6p4k.js +1194 -0
  78. package/dist/doctor-collect-ByfYlNv1.js +664 -0
  79. package/dist/doctor-rOr-4ZfS.js +53 -0
  80. package/dist/drizzle/index.d.ts +73 -0
  81. package/dist/drizzle/index.js +160 -0
  82. package/dist/duration-xK2jGFVc.js +25 -0
  83. package/dist/elysia/index.d.ts +49 -0
  84. package/dist/elysia/index.js +59 -0
  85. package/dist/errors-CWfoNg9N.js +47 -0
  86. package/dist/errors-Cz5zn0mW.js +123 -0
  87. package/dist/errors-DAqevpNk.d.ts +125 -0
  88. package/dist/errors-DRnGZHzF.js +30 -0
  89. package/dist/evaluation-items-CfCCejQd.js +40 -0
  90. package/dist/evaluations-tz6D9A2G.js +461 -0
  91. package/dist/eve/index.d.ts +86 -0
  92. package/dist/eve/index.js +176 -0
  93. package/dist/expiry-BoBJ8Tvc.js +7 -0
  94. package/dist/express/index.d.ts +23 -0
  95. package/dist/express/index.js +78 -0
  96. package/dist/fastify/index.d.ts +33 -0
  97. package/dist/fastify/index.js +92 -0
  98. package/dist/fields-BMl1RxoX.js +26 -0
  99. package/dist/files-DWUN9PzI.js +125 -0
  100. package/dist/fixtures-ht28Cplr.js +67 -0
  101. package/dist/freeze-CrU8nQeX.js +60 -0
  102. package/dist/from-snapshot-C3sHpZNS.js +569 -0
  103. package/dist/generate-CH7ThJ14.js +173 -0
  104. package/dist/grantee-Cv5Sogfv.js +602 -0
  105. package/dist/graph-sql-B-dsAT6j.d.ts +29 -0
  106. package/dist/headers-BZSDieNT.js +6 -0
  107. package/dist/headers-Cf-zWvsO.d.ts +6 -0
  108. package/dist/helpers-H_KARDVC.js +421 -0
  109. package/dist/hono/index.d.ts +48 -0
  110. package/dist/hono/index.js +99 -0
  111. package/dist/hosted-DJQw46hn.js +266 -0
  112. package/dist/http-BIhmLfCc.js +95 -0
  113. package/dist/http-DPuDaChb.d.ts +13 -0
  114. package/dist/http-SO7qGttf.js +44 -0
  115. package/dist/ids-DC4V4CFu.js +18 -0
  116. package/dist/index-A0YNL8jZ.d.ts +177 -0
  117. package/dist/index-CtE07CBF.d.ts +6 -0
  118. package/dist/index-D3vbkoSI.d.ts +483 -0
  119. package/dist/index-D6_cSa1z.d.ts +201 -0
  120. package/dist/index.d.ts +16 -0
  121. package/dist/index.js +26 -0
  122. package/dist/instance-options-BK_rNOSC.d.ts +11 -0
  123. package/dist/instance-options-Dhhcnm3y.js +22 -0
  124. package/dist/json-schema-BsAflUGW.js +106 -0
  125. package/dist/jwt/index.d.ts +91 -0
  126. package/dist/jwt/index.js +590 -0
  127. package/dist/kernel-GSQnMz3O.js +208 -0
  128. package/dist/kysely/index.d.ts +78 -0
  129. package/dist/kysely/index.js +129 -0
  130. package/dist/live-options-H2eG8dfJ.js +60 -0
  131. package/dist/load-DhWEB9P1.js +75 -0
  132. package/dist/load-DwJUafYN.js +2 -0
  133. package/dist/load-jose-BL6LH4bL.js +11 -0
  134. package/dist/lru-8q4WZjBV.js +28 -0
  135. package/dist/manifest-iaoBXHKc.js +783 -0
  136. package/dist/manifest-uDS9y5de.d.ts +206 -0
  137. package/dist/map-AcxK9o_D.js +147 -0
  138. package/dist/map-claims-Z4QZOiFF.js +369 -0
  139. package/dist/map-error-pgUWNNtG.js +23 -0
  140. package/dist/markers-B0hYLvMD.js +60 -0
  141. package/dist/may-use-DndQ5tQ-.js +77 -0
  142. package/dist/mcp/index.d.ts +159 -0
  143. package/dist/mcp/index.js +603 -0
  144. package/dist/nest/index.d.ts +75 -0
  145. package/dist/nest/index.js +261 -0
  146. package/dist/next/client.d.ts +23 -0
  147. package/dist/next/client.js +33 -0
  148. package/dist/next/index.d.ts +93 -0
  149. package/dist/next/index.js +180 -0
  150. package/dist/next/plugin.d.ts +14 -0
  151. package/dist/next/plugin.js +33 -0
  152. package/dist/node/index.d.ts +24 -0
  153. package/dist/node/index.js +34 -0
  154. package/dist/openai/index.d.ts +62 -0
  155. package/dist/openai/index.js +92 -0
  156. package/dist/openapi/index.d.ts +176 -0
  157. package/dist/openapi/index.js +3 -0
  158. package/dist/openapi-Bbg4wGVL.js +164 -0
  159. package/dist/openapi-BqRBvAng.js +538 -0
  160. package/dist/openapi-CqqEbHsL.js +250 -0
  161. package/dist/openapi-import-cmwetbzw.js +5959 -0
  162. package/dist/openapi-schema--ARjyfQr.js +6902 -0
  163. package/dist/orpc/index.d.ts +51 -0
  164. package/dist/orpc/index.js +145 -0
  165. package/dist/otel/index.d.ts +13 -0
  166. package/dist/otel/index.js +202 -0
  167. package/dist/package-root-zGkxO3oN.js +30 -0
  168. package/dist/parse-BuyjxhZV.js +53 -0
  169. package/dist/parse-local-manifest-BkGQNzAh.d.ts +10 -0
  170. package/dist/parse-local-manifest-BrMozJCo.js +36 -0
  171. package/dist/pdp/index.d.ts +22 -0
  172. package/dist/pdp/index.js +682 -0
  173. package/dist/peer-BOr_kJE1.js +31 -0
  174. package/dist/permdock-CzqXjCpU.js +3471 -0
  175. package/dist/permissions-CDgvKG5L.d.ts +52 -0
  176. package/dist/permissions-CpZrivYv.js +142 -0
  177. package/dist/permissions-DVoF6dMt.js +662 -0
  178. package/dist/permissions-DttnqqxC.d.ts +214 -0
  179. package/dist/pins-8ILTftC9.js +12 -0
  180. package/dist/policy-CFZAr_Al.d.ts +2252 -0
  181. package/dist/policy-D8UFyERw.d.ts +20 -0
  182. package/dist/policy-xyWg7QdR.js +1122 -0
  183. package/dist/powersync-A8x_Yyvh.js +2 -0
  184. package/dist/powersync-C7kLglqX.js +540 -0
  185. package/dist/powersync-yW1UUFzp.js +62 -0
  186. package/dist/prisma/index.d.ts +136 -0
  187. package/dist/prisma/index.js +455 -0
  188. package/dist/problem-B43ztKIm.js +191 -0
  189. package/dist/problem-details-CkL50EEf.d.ts +7 -0
  190. package/dist/problem-details-_AMOYz-w.js +144 -0
  191. package/dist/prompt-CXYhLfsS.js +32 -0
  192. package/dist/protected-CNsMzrVd.d.ts +27 -0
  193. package/dist/protected-Cs6kTaHo.js +100 -0
  194. package/dist/protected-bZs6rbT1.d.ts +40 -0
  195. package/dist/provider-Cjr62YMV.d.ts +6 -0
  196. package/dist/provider-DLzpb2Xz.js +52 -0
  197. package/dist/provider-store-DNyC1y48.js +43 -0
  198. package/dist/react/index.d.ts +8 -0
  199. package/dist/react/index.js +7 -0
  200. package/dist/react/provider-client.d.ts +2 -0
  201. package/dist/react/provider-client.js +3 -0
  202. package/dist/react-native/index.d.ts +198 -0
  203. package/dist/react-native/index.js +696 -0
  204. package/dist/refs-KYb4ntaz.js +91 -0
  205. package/dist/relations-cjOL01hZ.js +505 -0
  206. package/dist/replay-BsOyTrdV.js +28 -0
  207. package/dist/replay-sqBGMnNs.d.ts +5 -0
  208. package/dist/resource-ref-CaS9yVPi.js +20 -0
  209. package/dist/revocations-Bhr0aMIC.js +27 -0
  210. package/dist/revocations-Cy06JNx2.d.ts +21 -0
  211. package/dist/rls-BMNydpHk.js +2521 -0
  212. package/dist/rls-CEvs64Kj.js +238 -0
  213. package/dist/rls-fields-BMasREhR.js +3502 -0
  214. package/dist/rls-graph-pc9fuXYm.js +435 -0
  215. package/dist/rls-import-D8F7j35Q.js +943 -0
  216. package/dist/rls-migrate-7wikfrVI.js +367 -0
  217. package/dist/rls-ownership-B5Lkq62W.js +843 -0
  218. package/dist/rls-shared-aOQ4hGTO.js +493 -0
  219. package/dist/rls-verify-D8B7dOTh.js +745 -0
  220. package/dist/row-check-Dt35czLy.d.ts +40 -0
  221. package/dist/rpc-DOK54_CS.js +89 -0
  222. package/dist/run-YXCJDNYk.js +174 -0
  223. package/dist/runtime-CB8gQFvS.js +11 -0
  224. package/dist/saas-Bj_FFkjN.js +1203 -0
  225. package/dist/schema-D3MnDMxa.js +300 -0
  226. package/dist/scim/index.d.ts +2 -0
  227. package/dist/scim/index.js +2 -0
  228. package/dist/scim-BFGBBAqR.js +1445 -0
  229. package/dist/scopes-CVdPrWN-.js +239 -0
  230. package/dist/server/index.d.ts +134 -0
  231. package/dist/server/index.js +11 -0
  232. package/dist/server-DlZ28Oz5.js +268 -0
  233. package/dist/sha256-BO0swRXL.js +150 -0
  234. package/dist/shared-DRu8VFVM.js +123 -0
  235. package/dist/sink-Bd9PSyfq.js +141 -0
  236. package/dist/sink-Gs6TTVa-.d.ts +104 -0
  237. package/dist/skills-Biq5uup3.js +192 -0
  238. package/dist/skills-JaymNCdK.js +56 -0
  239. package/dist/snapshot-Enxd0n-s.js +975 -0
  240. package/dist/snapshot-cache-D6jLelln.js +44 -0
  241. package/dist/snapshot-cache-DwQH8ufx.d.ts +45 -0
  242. package/dist/solid/index.d.ts +93 -0
  243. package/dist/solid/index.js +188 -0
  244. package/dist/sources-B0UvrJ21.js +534 -0
  245. package/dist/sources-BcJgw0lt.d.ts +192 -0
  246. package/dist/sql-xdg5f4Fi.js +27 -0
  247. package/dist/src-CSbUiozF.js +568 -0
  248. package/dist/ssf/index.d.ts +4 -0
  249. package/dist/ssf/index.js +596 -0
  250. package/dist/store-DMAWwAJV.js +371 -0
  251. package/dist/store-D_pjn91-.d.ts +36 -0
  252. package/dist/store-options-yO0V6gRn.js +716 -0
  253. package/dist/stores-4_sqiOA1.js +87 -0
  254. package/dist/stores-DVR5NHLE.d.ts +52 -0
  255. package/dist/stream-DDpvynSB.js +66 -0
  256. package/dist/stream-DlvG2hs-.d.ts +12 -0
  257. package/dist/style-CTm1AXDT.js +22 -0
  258. package/dist/subject-C6dLxqHU.js +24 -0
  259. package/dist/subject-settings-BwBmCdTR.js +128 -0
  260. package/dist/supabase/index.d.ts +183 -0
  261. package/dist/supabase/index.js +5 -0
  262. package/dist/supabase/middleware.d.ts +82 -0
  263. package/dist/supabase/middleware.js +102 -0
  264. package/dist/supabase-CwafwxxF.js +83 -0
  265. package/dist/supabase-DTBaC20O.js +774 -0
  266. package/dist/supabase-config-Bs44dare.js +472 -0
  267. package/dist/supabase-hook-BuxLQLpU.js +1814 -0
  268. package/dist/supabase-hook-D5qVd_D8.js +2 -0
  269. package/dist/supautils-DYZnzRWV.js +91 -0
  270. package/dist/svelte/PermissionBoundary.svelte +37 -0
  271. package/dist/svelte/Protected.svelte +40 -0
  272. package/dist/svelte/index.d.ts +13 -0
  273. package/dist/svelte/index.js +107 -0
  274. package/dist/svelte/runtime.d.ts +7 -0
  275. package/dist/svelte/runtime.js +4 -0
  276. package/dist/svelte/source.d.ts +13 -0
  277. package/dist/svelte/source.js +11 -0
  278. package/dist/terminal/index.d.ts +163 -0
  279. package/dist/terminal/index.js +833 -0
  280. package/dist/testing/index.d.ts +745 -0
  281. package/dist/testing/index.js +3672 -0
  282. package/dist/testing/saas/index.d.ts +194 -0
  283. package/dist/testing/saas/index.js +3 -0
  284. package/dist/testing/saas/permissions.d.ts +2 -0
  285. package/dist/testing/saas/permissions.js +2 -0
  286. package/dist/text-diff-BdkkYSbi.js +15 -0
  287. package/dist/thenable-okc2xDsj.js +10 -0
  288. package/dist/timeout-D51niuQP.js +8 -0
  289. package/dist/token-CIWxJOCh.js +50 -0
  290. package/dist/trpc/index.d.ts +61 -0
  291. package/dist/trpc/index.js +122 -0
  292. package/dist/types-9AWO9EGt.d.ts +197 -0
  293. package/dist/types-BPxgszlT.d.ts +550 -0
  294. package/dist/types-BVyImy5I.d.ts +120 -0
  295. package/dist/types-Bvc4oWT6.d.ts +9 -0
  296. package/dist/types-C3s9xVJG.d.ts +48 -0
  297. package/dist/types-Dnemwd77.d.ts +183 -0
  298. package/dist/types-kxznc7cn.d.ts +52 -0
  299. package/dist/types-vKyAMtcX.d.ts +157 -0
  300. package/dist/types-vNSDF7Dq.d.ts +66 -0
  301. package/dist/types-yF5LmQVD.d.ts +306 -0
  302. package/dist/unplugin/index.d.ts +7 -0
  303. package/dist/unplugin/index.js +31 -0
  304. package/dist/usage-D07N9QJ3.js +42 -0
  305. package/dist/usage-D82l1CwK.js +2 -0
  306. package/dist/usage-DG1oeCca.js +693 -0
  307. package/dist/validation-error-CnjZ4t92.js +33 -0
  308. package/dist/validation-error-CtF23SrC.d.ts +26 -0
  309. package/dist/validity-uOp8UpYn.js +245 -0
  310. package/dist/verifier-BxBo6I44.js +466 -0
  311. package/dist/version-BvacVTZR.js +17 -0
  312. package/dist/views-Soe7bGSC.js +95 -0
  313. package/dist/vocabulary-DA8a8zif.d.ts +56 -0
  314. package/dist/vue/index.d.ts +79 -0
  315. package/dist/vue/index.js +196 -0
  316. package/dist/watch-Etoa_Mvr.js +2 -0
  317. package/dist/watch-UihESpsJ.js +128 -0
  318. package/dist/webmcp/index.d.ts +75 -0
  319. package/dist/webmcp/index.js +307 -0
  320. package/package.json +450 -5
  321. package/rulesets/permdock.yaml +29 -0
  322. package/schemas/approval-request-v1.json +175 -0
  323. package/schemas/catalog-v1.json +535 -0
  324. package/schemas/openapi/oas-3.1.json +1298 -0
  325. package/schemas/openapi/oas-3.2.json +1516 -0
  326. package/schemas/openapi/overlay-1.1.json +79 -0
  327. package/schemas/supabase-claims-v1.json +144 -0
  328. package/schemas/supabase-manifest-v1.json +361 -0
  329. package/skills/permdock/SKILL.md +66 -0
  330. package/skills/permdock-agents/SKILL.md +77 -0
  331. package/skills/permdock-agents/references/runtimes.md +213 -0
  332. package/skills/permdock-approvals/SKILL.md +80 -0
  333. package/skills/permdock-approvals/references/stores-and-resume.md +94 -0
  334. package/skills/permdock-audit/SKILL.md +67 -0
  335. package/skills/permdock-credentials/SKILL.md +55 -0
  336. package/skills/permdock-credentials/references/tokens-keys-links.md +132 -0
  337. package/skills/permdock-data/SKILL.md +57 -0
  338. package/skills/permdock-data/references/queries-and-rls.md +62 -0
  339. package/skills/permdock-data/references/relationships.md +67 -0
  340. package/skills/permdock-tenancy/SKILL.md +80 -0
  341. package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +89 -0
  342. package/skills/permdock-wire/SKILL.md +116 -0
  343. package/skills/permdock-wire/references/adapters.md +492 -0
  344. package/skills/permdock-wire/references/policy-options.md +45 -0
@@ -0,0 +1,34 @@
1
+ import { i as discoverViaSignatureAgent, r as InvalidSignatureError, s as verifyWebBotAuth } from "../evaluations-tz6D9A2G.js";
2
+ import { r as bindKernel } from "../bind-VnYn2HKq.js";
3
+ import { i as toRequest, n as isServerResponse, r as sendResponse, t as fromResponse } from "../http-BIhmLfCc.js";
4
+ //#region src/node/create.ts
5
+ const nodeRequest = (req) => req;
6
+ function createPermDock(policy, options) {
7
+ const bound = bindKernel(policy, options, "node", toRequest);
8
+ const { kernel, handlerScope } = bound;
9
+ const bind = (req) => bound.bind(nodeRequest(req));
10
+ const scopeOf = (req) => bound.scopeOf(nodeRequest(req));
11
+ const permdock = async (req) => kernel.permdock(bind(req), await scopeOf(req));
12
+ const protect = ((permission, loadData, protectOptions) => async (req) => kernel.protect(permission, loadData === void 0 ? void 0 : () => loadData(nodeRequest(req)), protectOptions)(bind(req), await scopeOf(req)));
13
+ const permdockHandler = () => {
14
+ const { POST, GET } = kernel.permdockHandler(handlerScope);
15
+ return async (req, res) => {
16
+ if (req.method === "GET" || req.method === "HEAD") {
17
+ await sendResponse(res, await GET(bind(req)));
18
+ return;
19
+ }
20
+ await sendResponse(res, await POST(bound.rebind(nodeRequest(req))));
21
+ };
22
+ };
23
+ return {
24
+ permdock,
25
+ protect,
26
+ send: sendResponse,
27
+ permdockHandler,
28
+ toRequest,
29
+ fromResponse,
30
+ openapi: kernel.openapi
31
+ };
32
+ }
33
+ //#endregion
34
+ export { InvalidSignatureError, createPermDock, discoverViaSignatureAgent, fromResponse, isServerResponse, sendResponse, toRequest, verifyWebBotAuth };
@@ -0,0 +1,62 @@
1
+ import { C as Policy, D as PolicyVocabulary, Nr as Principal, kr as Delegation, ln as PermDock } from "../policy-CFZAr_Al.js";
2
+ import { f as Permission } from "../permissions-DttnqqxC.js";
3
+ import { c as ApprovalRequest, f as ApprovalStore } from "../types-vKyAMtcX.js";
4
+ import { t as InstanceOptions } from "../instance-options-BK_rNOSC.js";
5
+ import { t as ToolMap } from "../types-Bvc4oWT6.js";
6
+ //#region src/openai/create.d.ts
7
+ /** The app context passed to `run(agent, input, { context })`. */
8
+ type OpenAiContext = {
9
+ readonly user?: unknown;
10
+ readonly agentId?: string;
11
+ readonly permdockApproval?: string;
12
+ readonly [key: string]: unknown;
13
+ };
14
+ /** Structural `RunContext` from `@openai/agents`: the app context sits under `context`. */
15
+ type OpenAiRunContext = {
16
+ readonly context?: unknown;
17
+ };
18
+ type OpenAiPermDockOptions<TUser = unknown> = InstanceOptions & {
19
+ readonly subject: (context: OpenAiContext) => TUser | Promise<TUser>;
20
+ readonly actor?: (context: OpenAiContext) => unknown;
21
+ readonly delegation?: (context: OpenAiContext) => Delegation | undefined | Promise<Delegation | undefined>;
22
+ readonly tenant?: string | ((context: OpenAiContext) => string | undefined | Promise<string | undefined>);
23
+ readonly tools: ToolMap;
24
+ readonly store?: ApprovalStore;
25
+ };
26
+ type OpenAiTool = {
27
+ readonly name: string;
28
+ };
29
+ /** Structural `RunToolApprovalItem` from `@openai/agents`. */
30
+ type OpenAiInterruption = {
31
+ readonly type?: string;
32
+ readonly name?: string | undefined;
33
+ readonly arguments?: string | undefined;
34
+ readonly rawItem?: {
35
+ readonly type?: string;
36
+ readonly callId?: string;
37
+ readonly name?: string;
38
+ readonly arguments?: unknown;
39
+ };
40
+ };
41
+ /** Structural `RunState` from `@openai/agents`. */
42
+ type OpenAiRunState<TItem> = {
43
+ approve(item: TItem, options?: {
44
+ alwaysApprove?: boolean;
45
+ }): unknown;
46
+ reject(item: TItem, options?: {
47
+ alwaysReject?: boolean;
48
+ message?: string;
49
+ }): unknown;
50
+ };
51
+ type OpenAiPermDock<V extends PolicyVocabulary = PolicyVocabulary> = {
52
+ /** A `ToolApprovalFunction`: pass it as a tool's `needsApproval`. */
53
+ readonly needsApproval: (permission: Permission) => (runContext: OpenAiRunContext | undefined, input: unknown, callId?: string) => Promise<boolean>;
54
+ readonly guardTools: <T extends OpenAiTool>(tools: readonly T[], context: OpenAiContext) => Promise<readonly T[]>;
55
+ readonly resolveInterruptions: <TItem extends OpenAiInterruption>(state: OpenAiRunState<TItem>, interruptions: readonly TItem[], options: {
56
+ readonly context: OpenAiContext;
57
+ }) => Promise<readonly ApprovalRequest[]>;
58
+ readonly permdock: (context: OpenAiContext) => Promise<PermDock<V>>;
59
+ };
60
+ export declare function createPermDock<TUser, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, options: OpenAiPermDockOptions<TUser>): OpenAiPermDock<V>;
61
+ //#endregion
62
+ export type { OpenAiContext, OpenAiInterruption, OpenAiPermDock, OpenAiPermDockOptions, OpenAiRunState, OpenAiTool };
@@ -0,0 +1,92 @@
1
+ import { t as compact } from "../compact-y6vfu2_f.js";
2
+ import { r as memoryApprovalStore } from "../store-DMAWwAJV.js";
3
+ import { t as instanceOptions } from "../instance-options-Dhhcnm3y.js";
4
+ import { n as createAgentKernel, t as approvalTokenOf } from "../kernel-GSQnMz3O.js";
5
+ //#region src/openai/create.ts
6
+ function appContext(runContext) {
7
+ const context = runContext?.context;
8
+ return typeof context === "object" && context !== null ? context : {};
9
+ }
10
+ function parseCall(item) {
11
+ const name = item.name ?? item.rawItem?.name;
12
+ if (typeof name !== "string") return { ok: false };
13
+ const raw = item.arguments ?? item.rawItem?.arguments;
14
+ if (typeof raw !== "string") return typeof raw === "object" && raw !== null ? {
15
+ ok: true,
16
+ name,
17
+ args: raw
18
+ } : { ok: false };
19
+ try {
20
+ return {
21
+ ok: true,
22
+ name,
23
+ args: JSON.parse(raw)
24
+ };
25
+ } catch {
26
+ return { ok: false };
27
+ }
28
+ }
29
+ function createPermDock(policy, options) {
30
+ const store = options.store ?? memoryApprovalStore();
31
+ const kernel = createAgentKernel(policy, {
32
+ ...compact({
33
+ actor: options.actor,
34
+ delegation: options.delegation,
35
+ tenant: options.tenant
36
+ }),
37
+ ...instanceOptions(options),
38
+ subject: options.subject,
39
+ tools: options.tools,
40
+ store,
41
+ adapter: "openai"
42
+ });
43
+ const byPermission = /* @__PURE__ */ new Map();
44
+ for (const [name, binding] of Object.entries(options.tools)) byPermission.set(binding.permission.key, name);
45
+ const needsApproval = (permission) => async (runContext, input) => {
46
+ const toolName = byPermission.get(permission.key);
47
+ if (toolName === void 0) return true;
48
+ const context = appContext(runContext);
49
+ const binding = options.tools[toolName];
50
+ if (binding === void 0) return true;
51
+ const checked = await kernel.check(binding, input, context, { simulate: true });
52
+ return !checked.ok || checked.raw.outcome !== "granted";
53
+ };
54
+ const guardTools = async (tools, context) => {
55
+ const allowed = await kernel.allowedToolNames(context);
56
+ return tools.filter((tool) => allowed.has(tool.name));
57
+ };
58
+ const resolveOne = async (state, item, context) => {
59
+ const call = parseCall(item);
60
+ if (!call.ok) {
61
+ await state.reject(item, { message: "Denied: unreadable tool call." });
62
+ return null;
63
+ }
64
+ const verdict = await kernel.decideTool(call.name, call.args, context, compact({ resumeToken: approvalTokenOf(context) }));
65
+ if (verdict.outcome === "granted") {
66
+ await state.approve(item);
67
+ return null;
68
+ }
69
+ if (verdict.outcome === "denied") {
70
+ await state.reject(item, { message: verdict.reason });
71
+ return null;
72
+ }
73
+ try {
74
+ return await store.get(verdict.token);
75
+ } catch {
76
+ return null;
77
+ }
78
+ };
79
+ const resolveInterruptions = async (state, interruptions, resolveOptions) => {
80
+ const resolved = [];
81
+ for (const item of interruptions) resolved.push(await resolveOne(state, item, resolveOptions.context));
82
+ return resolved.filter((record) => record !== null);
83
+ };
84
+ return {
85
+ needsApproval,
86
+ guardTools,
87
+ resolveInterruptions,
88
+ permdock: (context) => kernel.instance(context)
89
+ };
90
+ }
91
+ //#endregion
92
+ export { createPermDock };
@@ -0,0 +1,176 @@
1
+ import { C as Policy, Ir as Condition, Nr as Principal } from "../policy-CFZAr_Al.js";
2
+ import { f as Permission, m as PermissionTree } from "../permissions-DttnqqxC.js";
3
+ import { a as ProblemDetails } from "../errors-DAqevpNk.js";
4
+ import { StandardJSONSchemaV1, StandardSchemaV1 } from "@standard-schema/spec";
5
+ //#region src/openapi/types.d.ts
6
+ type OpenApiTarget = "3.1" | "3.2" | "3.3";
7
+ type OverlayVersion = "1.1" | "1.2";
8
+ type SecurityProfileName = "fapi2";
9
+ type SchemeType = "oauth2" | "openIdConnect" | "http" | "apiKey" | "gnap";
10
+ type OpenApiSchemeOptions = {
11
+ readonly name: string;
12
+ readonly type: SchemeType;
13
+ readonly oauth2MetadataUrl?: string;
14
+ readonly flows?: {
15
+ readonly authorizationCode?: Readonly<Record<string, unknown>>;
16
+ readonly clientCredentials?: Readonly<Record<string, unknown>>;
17
+ readonly deviceAuthorization?: Readonly<Record<string, unknown>>;
18
+ };
19
+ readonly openIdConnectUrl?: string;
20
+ readonly ref?: string;
21
+ /** Retires the scheme: `deprecated` on 3.2 and 3.3, `x-oai-deprecated` on 3.1. */
22
+ readonly deprecated?: boolean;
23
+ };
24
+ type OpenApiDocsHints = {
25
+ readonly badges?: boolean;
26
+ };
27
+ type OpenApiPermDockOptions = {
28
+ readonly scheme: OpenApiSchemeOptions;
29
+ readonly target?: OpenApiTarget;
30
+ readonly securityProfile?: SecurityProfileName;
31
+ readonly profileScheme?: string;
32
+ readonly docsHints?: OpenApiDocsHints;
33
+ };
34
+ type OpenApiSecurityRequirement = Readonly<Record<string, readonly string[]>>;
35
+ type OpenApiDescribe = {
36
+ readonly security: readonly OpenApiSecurityRequirement[];
37
+ readonly "x-permdock-permissions": readonly string[];
38
+ /** Keyed by permission key: the portable conditions of its allow grants. */
39
+ readonly "x-permdock-conditions"?: Readonly<Record<string, Condition>>;
40
+ /** Keyed by permission key: the permissions whose grants need an approval. */
41
+ readonly "x-permdock-approval"?: Readonly<Record<string, {
42
+ readonly reason: "human";
43
+ }>>;
44
+ readonly "x-permdock-securityProfile"?: SecurityProfileName;
45
+ readonly "x-badges"?: readonly {
46
+ readonly name: string;
47
+ }[];
48
+ };
49
+ /** One operation the Overlay targets, joined by `operationId`. */
50
+ type OverlayOperation = {
51
+ readonly operationId: string;
52
+ readonly permissions: readonly Permission[];
53
+ };
54
+ type OpenApiOverlayOptions = {
55
+ readonly extends?: string;
56
+ readonly version?: OverlayVersion;
57
+ /** The operations to cover; without them, one per permission whose `operationId` is the permission key. */
58
+ readonly operations?: readonly OverlayOperation[];
59
+ };
60
+ type OpenApiPermDock = {
61
+ readonly securitySchemes: () => Readonly<Record<string, unknown>>;
62
+ readonly security: (permission: Permission | readonly Permission[], options?: {
63
+ readonly anyOf?: boolean;
64
+ }) => readonly OpenApiSecurityRequirement[];
65
+ readonly describe: (permission: Permission | readonly Permission[], options?: {
66
+ readonly anyOf?: boolean;
67
+ }) => OpenApiDescribe;
68
+ readonly spec: (permission: Permission | readonly Permission[]) => (operation: Readonly<Record<string, unknown>>) => Record<string, unknown>;
69
+ readonly overlay: (options?: OpenApiOverlayOptions) => Record<string, unknown>;
70
+ /** One requirement per distinct scope set; without `scopeSets`, one per permission. */
71
+ readonly securityProfileRequirements: (scopeSets?: readonly (readonly string[])[]) => Readonly<Record<string, unknown>> | undefined;
72
+ readonly catalog: () => Record<string, unknown>;
73
+ };
74
+ type OpenApiFactory = <TUser, TPrincipal extends Principal = Principal>(policy: Policy<TUser, TPrincipal>, options: OpenApiPermDockOptions) => OpenApiPermDock;
75
+ //#endregion
76
+ //#region src/openapi/create.d.ts
77
+ export declare const createPermDock: OpenApiFactory;
78
+ //#endregion
79
+ //#region src/openapi/pins.d.ts
80
+ export declare const DRAFT_PINS: {
81
+ readonly oas: "3.3-dev@2026-09-01";
82
+ readonly securityProfiles: "oai-discussion-5304@2026-09-01";
83
+ readonly overlay: "1.2-dev@edd4adea";
84
+ };
85
+ export declare const PROFILE_NAMES: {
86
+ readonly fapi2: "fapi-20-security-profile";
87
+ };
88
+ export declare const GNAP_RESERVED = "scheme.type 'gnap' is reserved and emits nothing. See https://permdock.com/docs/standards/watch-list#gnap";
89
+ //#endregion
90
+ //#region src/openapi/emit.d.ts
91
+ export declare function securitySchemesOf(policy: Policy, options: OpenApiPermDockOptions): Record<string, unknown>;
92
+ export declare function catalogOf(options: OpenApiPermDockOptions, extraDrafts?: Readonly<Record<string, string>>): Record<string, unknown>;
93
+ export declare function openapiVersion(target: OpenApiTarget): string;
94
+ //#endregion
95
+ //#region src/openapi/operations.d.ts
96
+ /**
97
+ * One declared operation: a permission, or a permission with the operation id
98
+ * a tool name uses and the OAuth scopes that reach it, or only OAuth scopes
99
+ * for a route that checks no permission (`protect(null)`).
100
+ */
101
+ type OperationEntry = Permission | {
102
+ readonly permission: Permission;
103
+ readonly operationId?: string;
104
+ readonly oauthScopes?: readonly string[];
105
+ } | {
106
+ readonly permission?: undefined;
107
+ readonly operationId?: string;
108
+ readonly oauthScopes: readonly string[];
109
+ };
110
+ /**
111
+ * The permission of each operation of an API, declared once and read by the
112
+ * HTTP gate and by `permdock/mcp`'s `permissionFor`, so a REST route and the
113
+ * MCP tool that calls it can never disagree.
114
+ */
115
+ type OperationPermissions = {
116
+ /**
117
+ * The permission of a request: the declared operation whose method and
118
+ * path template match, a literal segment winning over a `{param}`.
119
+ * `undefined` for an undeclared operation, which a gate denies, and for an
120
+ * operation that declares only OAuth scopes. A `HEAD` request matches the
121
+ * `GET` entry of its path when no `HEAD` entry matches.
122
+ */
123
+ forRequest(method: string, path: string): Permission | undefined;
124
+ /** The permission of an operation id; pass it as `permissionFor` when tool names are operation ids. */
125
+ forOperation(id: string): Permission | undefined;
126
+ oauthScopesForRequest(method: string, path: string): readonly string[] | undefined;
127
+ oauthScopesForOperation(id: string): readonly string[] | undefined;
128
+ };
129
+ /**
130
+ * Operations as `"METHOD /path/{param}"` keys, the OpenAPI path template, to
131
+ * a permission. `base` is a prefix requests carry and the keys do not
132
+ * (`/api/v1`). A key that is not a method and a path throws.
133
+ */
134
+ export declare function operationPermissions(operations: Readonly<Record<string, OperationEntry>>, options?: {
135
+ readonly base?: string;
136
+ }): OperationPermissions;
137
+ /**
138
+ * The operation permissions an OpenAPI document declares: every operation
139
+ * whose `x-permdock-permissions` names exactly one permission of `tree`, keyed
140
+ * by its method, path and `operationId`. An operation naming none, several or
141
+ * an unknown key is left out, so a gate denies it.
142
+ */
143
+ export declare function operationPermissionsFromOpenApi(document: unknown, tree: PermissionTree, options?: {
144
+ readonly base?: string;
145
+ }): OperationPermissions;
146
+ //#endregion
147
+ //#region src/openapi/problem-details.d.ts
148
+ /**
149
+ * The Problem Details body the adapters send on a denial, as a Standard
150
+ * Schema with a JSON Schema, for `oc.errors({ FORBIDDEN: { data: problemDetails } })`.
151
+ * Extension members pass through: RFC 9457 lets a problem type add them.
152
+ */
153
+ export declare const problemDetails: StandardSchemaV1<ProblemDetails> & StandardJSONSchemaV1<ProblemDetails>;
154
+ //#endregion
155
+ //#region src/openapi/security.d.ts
156
+ type SecurityForOptions = {
157
+ /** The security scheme name; defaults to `oauth2`, the name the adapters' `openapi.securitySchemes()` declares. */
158
+ readonly scheme?: string;
159
+ /** Any one of the permissions suffices: one requirement per scope instead of one with every scope. */
160
+ readonly anyOf?: boolean;
161
+ };
162
+ type SecurityFor = {
163
+ readonly security: readonly OpenApiSecurityRequirement[];
164
+ readonly "x-permdock-permissions": readonly string[];
165
+ };
166
+ /** The `x-permdock-permissions` value: the permission keys an operation enforces. */
167
+ export declare function permissionsExtension(permissions: Permission | readonly Permission[]): readonly string[];
168
+ /**
169
+ * An operation's `security` and `x-permdock-permissions`, from permission
170
+ * references alone. Needs no policy, so a contract package can import it.
171
+ * Unlike `permdock openapi emit`, it never drops `security` for a public
172
+ * permission: that needs the policy.
173
+ */
174
+ export declare function securityFor(permission: Permission | readonly Permission[], options?: SecurityForOptions): SecurityFor;
175
+ //#endregion
176
+ export type { OpenApiDescribe, OpenApiDocsHints, OpenApiFactory, OpenApiOverlayOptions, OpenApiPermDock, OpenApiPermDockOptions, OpenApiSchemeOptions, OpenApiSecurityRequirement, OpenApiTarget, OperationEntry, OperationPermissions, OverlayOperation, OverlayVersion, SchemeType, SecurityFor, SecurityForOptions, SecurityProfileName };
@@ -0,0 +1,3 @@
1
+ import { n as GNAP_RESERVED, r as PROFILE_NAMES, t as DRAFT_PINS } from "../pins-8ILTftC9.js";
2
+ import { a as operationPermissionsFromOpenApi, c as openapiVersion, i as operationPermissions, l as securitySchemesOf, n as securityFor, o as createPermDock, r as problemDetails, s as catalogOf, t as permissionsExtension } from "../openapi-BqRBvAng.js";
3
+ export { DRAFT_PINS, GNAP_RESERVED, PROFILE_NAMES, catalogOf, createPermDock, openapiVersion, operationPermissions, operationPermissionsFromOpenApi, permissionsExtension, problemDetails, securityFor, securitySchemesOf };
@@ -0,0 +1,164 @@
1
+ import { a as listArg, i as globalArgs, s as stringArg, t as COMMAND_DESCRIPTIONS } from "./commands-DWOrSQic.js";
2
+ import { defineCommand } from "citty";
3
+ //#region src/cli/commands/openapi.ts
4
+ function openapi(ctx) {
5
+ return defineCommand({
6
+ meta: {
7
+ name: "openapi",
8
+ description: COMMAND_DESCRIPTIONS.openapi
9
+ },
10
+ args: {
11
+ ...globalArgs,
12
+ action: {
13
+ type: "positional",
14
+ required: false,
15
+ description: "emit (default) or import"
16
+ },
17
+ doc: {
18
+ type: "string",
19
+ description: "OpenAPI document: a path, or a URL for import",
20
+ valueHint: "path"
21
+ },
22
+ out: {
23
+ type: "string",
24
+ description: "File to write",
25
+ valueHint: "file"
26
+ },
27
+ from: {
28
+ type: "string",
29
+ description: "Module exporting the policy, instead of the config",
30
+ valueHint: "module"
31
+ },
32
+ target: {
33
+ type: "enum",
34
+ options: [
35
+ "3.1",
36
+ "3.2",
37
+ "3.3"
38
+ ],
39
+ default: "3.2",
40
+ description: "OpenAPI version; 3.3 is the pinned Security Profiles draft"
41
+ },
42
+ format: {
43
+ type: "enum",
44
+ options: ["document", "overlay"],
45
+ default: "document",
46
+ description: "A full document or an Overlay"
47
+ },
48
+ overlay: {
49
+ type: "enum",
50
+ options: ["1.1", "1.2"],
51
+ default: "1.1",
52
+ description: "Overlay version; 1.2 is the pinned reusable-actions draft"
53
+ },
54
+ check: {
55
+ type: "boolean",
56
+ description: "Exit 1 when --out is stale; write nothing"
57
+ },
58
+ profile: {
59
+ type: "enum",
60
+ options: ["fapi2"],
61
+ description: "Security profile to declare"
62
+ },
63
+ "profile-scheme": {
64
+ type: "string",
65
+ description: "Security scheme name for the profile",
66
+ valueHint: "name"
67
+ },
68
+ scheme: {
69
+ type: "string",
70
+ default: "permdockOAuth",
71
+ description: "OAuth security scheme name",
72
+ valueHint: "name"
73
+ },
74
+ "metadata-url": {
75
+ type: "string",
76
+ description: "OAuth authorization server metadata URL",
77
+ valueHint: "url"
78
+ },
79
+ "device-flow": {
80
+ type: "boolean",
81
+ description: "Declare the device authorization flow"
82
+ },
83
+ arity: {
84
+ type: "boolean",
85
+ description: "Mark instance and collection operations"
86
+ },
87
+ "authorization-url": {
88
+ type: "string",
89
+ description: "OAuth authorization endpoint",
90
+ valueHint: "url"
91
+ },
92
+ "token-url": {
93
+ type: "string",
94
+ description: "OAuth token endpoint",
95
+ valueHint: "url"
96
+ },
97
+ "device-authorization-url": {
98
+ type: "string",
99
+ description: "OAuth device authorization endpoint",
100
+ valueHint: "url"
101
+ },
102
+ schema: {
103
+ type: "enum",
104
+ options: [
105
+ "zod",
106
+ "valibot",
107
+ "arktype"
108
+ ],
109
+ description: "import: schema library for the generated resources"
110
+ },
111
+ map: {
112
+ type: "string",
113
+ description: "import: JSON mapping of operations to permissions",
114
+ valueHint: "json"
115
+ },
116
+ annotate: {
117
+ type: "boolean",
118
+ description: "import: write x-permdock-permissions back into the document"
119
+ }
120
+ },
121
+ async run({ args: parsed, rawArgs }) {
122
+ const doc = listArg(rawArgs, "doc")[0];
123
+ if (parsed._[0] === "import") {
124
+ if (doc === void 0) throw new Error("openapi --doc is required");
125
+ const { runOpenapiImport } = await import("./openapi-import-cmwetbzw.js");
126
+ ctx.report(await runOpenapiImport({
127
+ cwd: ctx.cwd,
128
+ doc,
129
+ out: stringArg(parsed.out),
130
+ schema: parsed.schema,
131
+ map: stringArg(parsed.map),
132
+ annotate: parsed.annotate === true,
133
+ io: ctx.io
134
+ }));
135
+ return;
136
+ }
137
+ const result = await (await import("./openapi-CqqEbHsL.js")).runOpenapi({
138
+ cwd: ctx.cwd,
139
+ config: ctx.config,
140
+ rest: parsed._,
141
+ doc,
142
+ out: stringArg(parsed.out),
143
+ from: stringArg(parsed.from),
144
+ target: parsed.target,
145
+ format: parsed.format,
146
+ overlay: parsed.overlay,
147
+ check: parsed.check === true,
148
+ profile: parsed.profile,
149
+ profileScheme: stringArg(parsed["profile-scheme"]),
150
+ scheme: parsed.scheme,
151
+ metadataUrl: listArg(rawArgs, "metadata-url")[0],
152
+ deviceFlow: parsed["device-flow"] === true,
153
+ arity: parsed.arity === true,
154
+ authorizationUrl: stringArg(parsed["authorization-url"]),
155
+ tokenUrl: stringArg(parsed["token-url"]),
156
+ deviceAuthorizationUrl: stringArg(parsed["device-authorization-url"]),
157
+ io: ctx.io
158
+ });
159
+ ctx.report(result);
160
+ }
161
+ });
162
+ }
163
+ //#endregion
164
+ export { openapi };