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,232 @@
1
+ import { t as compact } from "../compact-y6vfu2_f.js";
2
+ import { n as PermDockDeniedError, t as PermDockApprovalRequiredError } from "../errors-Cz5zn0mW.js";
3
+ import { t as canonicalJson } from "../canonical-json-DemiK4Vp.js";
4
+ import { t as bytesToBase64Url } from "../sha256-BO0swRXL.js";
5
+ import { i as scopesReaching, r as challengeScope } from "../permdock-CzqXjCpU.js";
6
+ import { n as resourceRef } from "../resource-ref-CaS9yVPi.js";
7
+ import { t as mayUse } from "../may-use-DndQ5tQ-.js";
8
+ import { d as wwwAuthenticate, n as bearerChallenge } from "../problem-B43ztKIm.js";
9
+ import { t as instanceOptions } from "../instance-options-Dhhcnm3y.js";
10
+ import { n as createAgentKernel } from "../kernel-GSQnMz3O.js";
11
+ //#region src/a2a/create.ts
12
+ function firstScheme(options) {
13
+ return Object.keys(options.securitySchemes)[0];
14
+ }
15
+ function skillOf(id, config, scheme) {
16
+ return {
17
+ id,
18
+ name: id,
19
+ description: config.description ?? config.permission.key,
20
+ tags: config.tags ?? [config.permission.resource],
21
+ securityRequirements: scheme === void 0 ? [] : [{ schemes: { [scheme]: { list: [config.permission.scope] } } }]
22
+ };
23
+ }
24
+ function publicSkills(options) {
25
+ const scheme = firstScheme(options);
26
+ return Object.entries(options.skills).map(([id, config]) => skillOf(id, config, scheme));
27
+ }
28
+ function wireScheme(scheme) {
29
+ switch (scheme.type) {
30
+ case "oauth2": return { oauth2SecurityScheme: compact({
31
+ oauth2MetadataUrl: scheme.oauth2MetadataUrl,
32
+ description: scheme.description
33
+ }) };
34
+ case "http": return { httpAuthSecurityScheme: compact({
35
+ scheme: scheme.scheme,
36
+ bearerFormat: scheme.bearerFormat,
37
+ description: scheme.description
38
+ }) };
39
+ case "openIdConnect": return { openIdConnectSecurityScheme: compact({
40
+ openIdConnectUrl: scheme.openIdConnectUrl,
41
+ description: scheme.description
42
+ }) };
43
+ case "mutualTLS": return { mtlsSecurityScheme: compact({ description: scheme.description }) };
44
+ case "apiKey": return { apiKeySecurityScheme: compact({
45
+ location: scheme.in,
46
+ name: scheme.name,
47
+ description: scheme.description
48
+ }) };
49
+ default: return scheme;
50
+ }
51
+ }
52
+ function cardOf(options, skills) {
53
+ const info = options.card;
54
+ return compact({
55
+ name: info.name,
56
+ description: info.description ?? info.name,
57
+ version: info.version,
58
+ supportedInterfaces: [{
59
+ url: info.url,
60
+ protocolBinding: info.protocolBinding ?? "JSONRPC",
61
+ protocolVersion: "1.0"
62
+ }],
63
+ provider: info.provider,
64
+ documentationUrl: info.documentationUrl,
65
+ iconUrl: info.iconUrl,
66
+ capabilities: compact({
67
+ extendedAgentCard: true,
68
+ streaming: info.streaming,
69
+ pushNotifications: info.pushNotifications
70
+ }),
71
+ defaultInputModes: info.defaultInputModes ?? DEFAULT_MODES,
72
+ defaultOutputModes: info.defaultOutputModes ?? DEFAULT_MODES,
73
+ securitySchemes: Object.fromEntries(Object.entries(options.securitySchemes).map(([name, scheme]) => [name, wireScheme(scheme)])),
74
+ skills
75
+ });
76
+ }
77
+ const DEFAULT_MODES = ["text/plain"];
78
+ function delegationOf(auth) {
79
+ return compact({
80
+ scopes: auth.scopes,
81
+ authorizationDetails: auth.extra?.authorizationDetails
82
+ });
83
+ }
84
+ function actorOf(auth) {
85
+ return typeof auth.clientId === "string" && auth.clientId !== "" ? {
86
+ id: auth.clientId,
87
+ kind: "oauth-client"
88
+ } : void 0;
89
+ }
90
+ function hasScope(auth, scopes) {
91
+ return scopes.some((scope) => auth.scopes?.includes(scope) === true);
92
+ }
93
+ const LOAD_FAILED = {
94
+ outcome: "denied",
95
+ denials: [{
96
+ role: null,
97
+ reason: "validation"
98
+ }],
99
+ alternatives: []
100
+ };
101
+ const NO_SUBJECT = {
102
+ principal: null,
103
+ context: {}
104
+ };
105
+ function taskStatus(status) {
106
+ return status === 401 || status === 429 || status === 503 ? status : 403;
107
+ }
108
+ function deniedOutcome(decision, permission, data, subject) {
109
+ const problem = new PermDockDeniedError({
110
+ decision,
111
+ permission: permission.key,
112
+ scope: permission.scope,
113
+ resource: resourceRef(permission, data),
114
+ subject: subject ?? NO_SUBJECT,
115
+ message: `${permission.key} denied.`
116
+ }).toProblemDetails();
117
+ return compact({
118
+ ok: false,
119
+ status: taskStatus(problem.status),
120
+ state: "failed",
121
+ problem,
122
+ wwwAuthenticate: wwwAuthenticate(decision, permission, false)
123
+ });
124
+ }
125
+ function approvalOutcome(decision, permission, data) {
126
+ return {
127
+ ok: false,
128
+ status: 403,
129
+ state: "input-required",
130
+ problem: new PermDockApprovalRequiredError({
131
+ decision,
132
+ permission: permission.key,
133
+ scope: permission.scope,
134
+ resource: resourceRef(permission, data),
135
+ message: `${permission.key} requires human approval.`
136
+ }).toProblemDetails()
137
+ };
138
+ }
139
+ /** A2A 1.0 section 8.4: a detached JWS over the RFC 8785 form of the card. */
140
+ async function signCard(card, signPayload) {
141
+ const { signatures = [], ...unsigned } = card;
142
+ const payload = canonicalJson(unsigned);
143
+ const [header, body, signature, extra] = (await signPayload(payload)).split(".");
144
+ if (header === void 0 || signature === void 0 || extra !== void 0 || body !== bytesToBase64Url(new TextEncoder().encode(payload))) throw new TypeError("PermDock: an A2A card signer must return a compact JWS over the payload it was given");
145
+ return {
146
+ ...card,
147
+ signatures: [...signatures, {
148
+ protected: header,
149
+ signature
150
+ }]
151
+ };
152
+ }
153
+ function missingScope(permission, scope) {
154
+ return {
155
+ ok: false,
156
+ status: 401,
157
+ state: "failed",
158
+ problem: {
159
+ type: "https://permdock.com/problems/unauthenticated",
160
+ title: "Insufficient scope",
161
+ status: 401,
162
+ detail: `insufficient_scope: ${scope}`,
163
+ permission: permission.key,
164
+ scope
165
+ },
166
+ wwwAuthenticate: bearerChallenge({
167
+ error: "insufficient_scope",
168
+ scopes: [scope]
169
+ })
170
+ };
171
+ }
172
+ function createPermDock(policy, options) {
173
+ for (const [id, config] of Object.entries(options.skills)) if (config.permission.kind === "instance" && config.data === void 0) throw new TypeError(`PermDock: A2A skill '${id}' checks ${config.permission.key} on a row and needs a data loader; the task body is never used as the row`);
174
+ const kernel = createAgentKernel(policy, compact({
175
+ subject: options.subject,
176
+ actor: actorOf,
177
+ delegation: delegationOf,
178
+ tenant: options.tenant,
179
+ store: options.store,
180
+ adapter: "a2a",
181
+ ...instanceOptions(options)
182
+ }));
183
+ const agentCard = () => cardOf(options, publicSkills(options));
184
+ const extendedAgentCard = async (auth) => {
185
+ let permdock;
186
+ try {
187
+ permdock = await kernel.instance(auth);
188
+ } catch {
189
+ return cardOf(options, []);
190
+ }
191
+ const scheme = firstScheme(options);
192
+ const skills = [];
193
+ for (const [id, config] of Object.entries(options.skills)) if (mayUse(permdock, config.permission)) skills.push(skillOf(id, config, scheme));
194
+ return cardOf(options, skills);
195
+ };
196
+ const protectSkill = (selector) => async (task, auth) => {
197
+ const id = selector(task);
198
+ const config = Object.hasOwn(options.skills, id) ? options.skills[id] : void 0;
199
+ if (config === void 0) return {
200
+ ok: false,
201
+ status: 403,
202
+ state: "failed",
203
+ problem: {
204
+ type: "https://permdock.com/problems/denied",
205
+ title: "Permission denied",
206
+ status: 403,
207
+ detail: "unknown skill"
208
+ }
209
+ };
210
+ if (!hasScope(auth, scopesReaching(policy, config.permission))) return missingScope(config.permission, challengeScope(policy, config.permission));
211
+ const checked = await kernel.check(compact({
212
+ permission: config.permission,
213
+ data: config.data
214
+ }), task, auth, compact({ resumeToken: auth.extra?.approval }));
215
+ if (!checked.ok) return deniedOutcome(LOAD_FAILED, config.permission, void 0, checked.permdock?.subject);
216
+ const { decision, data, permdock } = checked;
217
+ switch (decision.outcome) {
218
+ case "granted": return { ok: true };
219
+ case "denied": return deniedOutcome(decision, config.permission, data, permdock.subject);
220
+ case "approval-required": return approvalOutcome(decision, config.permission, data);
221
+ default: return decision;
222
+ }
223
+ };
224
+ return {
225
+ agentCard,
226
+ extendedAgentCard,
227
+ protectSkill,
228
+ sign: signCard
229
+ };
230
+ }
231
+ //#endregion
232
+ export { createPermDock };
@@ -0,0 +1,23 @@
1
+ import { n as isActor } from "./subject-C6dLxqHU.js";
2
+ //#region src/core/adapter-context.ts
3
+ /** Resolves an adapter `tenant` option against its framework context; a throw is no tenant. */
4
+ async function tenantScope(option, context) {
5
+ if (option === void 0 || typeof option === "string") return { tenant: option };
6
+ try {
7
+ return { tenant: await option(context) };
8
+ } catch {
9
+ return { tenant: void 0 };
10
+ }
11
+ }
12
+ /** Resolves an adapter `actor` option; anything but an `Actor`, or a throw, is no actor. */
13
+ async function actorFrom(option, context) {
14
+ if (option === void 0) return;
15
+ try {
16
+ const resolved = await option(context);
17
+ return isActor(resolved) ? resolved : void 0;
18
+ } catch {
19
+ return;
20
+ }
21
+ }
22
+ //#endregion
23
+ export { tenantScope as n, actorFrom as t };
@@ -0,0 +1,95 @@
1
+ import { C as Policy, Nr as Principal, kr as Delegation } from "../policy-CFZAr_Al.js";
2
+ import { f as Permission } from "../permissions-DttnqqxC.js";
3
+ import { 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/ai-sdk/create.d.ts
7
+ type AiSdkContext = {
8
+ readonly runtimeContext?: unknown;
9
+ readonly permdockApproval?: string;
10
+ readonly [key: string]: unknown;
11
+ };
12
+ type AiSdkPermDockOptions<TUser = unknown> = InstanceOptions & {
13
+ readonly subject: (context: AiSdkContext) => TUser | Promise<TUser>;
14
+ readonly actor?: (context: AiSdkContext) => unknown;
15
+ readonly delegation?: (context: AiSdkContext) => Delegation | undefined | Promise<Delegation | undefined>;
16
+ readonly tenant?: string | ((context: AiSdkContext) => string | undefined | Promise<string | undefined>);
17
+ readonly tools: ToolMap;
18
+ readonly store?: ApprovalStore;
19
+ /**
20
+ * Tools the `tools` map does not bind to a permission. `'deny'` (default):
21
+ * the middleware hides them and `toolApproval` denies them. `'allow'`: they
22
+ * pass through both, to the application's own `toolApproval`.
23
+ */
24
+ readonly unmapped?: "deny" | "allow";
25
+ };
26
+ /** What an AI SDK tool approval function may return; `undefined` is `not-applicable`. */
27
+ type ToolApprovalResult = ToolApprovalStatus | undefined | "not-applicable" | "denied" | "user-approval" | {
28
+ readonly type: "not-applicable";
29
+ } | {
30
+ readonly type: "approved";
31
+ readonly reason?: string;
32
+ } | {
33
+ readonly type: "denied";
34
+ readonly reason?: string;
35
+ } | {
36
+ readonly type: "user-approval";
37
+ readonly reason?: string;
38
+ };
39
+ /** An application's own tool approval function, in the AI SDK's generic form. */
40
+ type AppToolApproval = (call: ToolApprovalCall) => ToolApprovalResult | PromiseLike<ToolApprovalResult>;
41
+ type ToolApprovalStatus = "approved" | {
42
+ readonly type: "denied";
43
+ readonly reason: string;
44
+ } | {
45
+ readonly type: "user-approval";
46
+ readonly reason: string;
47
+ readonly token: string;
48
+ };
49
+ /** Structural `GenericToolApprovalFunction` options from `ai`. */
50
+ type ToolApprovalCall = {
51
+ readonly toolCall: {
52
+ readonly toolName: string;
53
+ readonly toolCallId?: string;
54
+ readonly input?: unknown;
55
+ };
56
+ readonly messages?: readonly unknown[];
57
+ readonly runtimeContext?: unknown;
58
+ };
59
+ /** Structural `ToolNeedsApprovalFunction` options from `ai`. */
60
+ type NeedsApprovalOptions = {
61
+ readonly toolCallId?: string;
62
+ readonly messages?: readonly unknown[];
63
+ readonly context?: unknown;
64
+ };
65
+ type CallParams = {
66
+ readonly tools?: readonly {
67
+ readonly name?: string;
68
+ }[];
69
+ readonly toolChoice?: unknown;
70
+ };
71
+ /** Structural `LanguageModelMiddleware` (specification `v4`) from `ai`. */
72
+ type LanguageModelMiddleware = {
73
+ readonly specificationVersion: "v4";
74
+ readonly transformParams: <TParams extends CallParams>(options: {
75
+ readonly params: TParams;
76
+ }) => Promise<TParams>;
77
+ };
78
+ type AiSdkPermDock = {
79
+ readonly toolApproval: (call: ToolApprovalCall) => Promise<ToolApprovalStatus>;
80
+ /**
81
+ * PermDock's `toolApproval` followed by the application's own: `app` is
82
+ * asked only for a call PermDock grants (or an unmapped tool under
83
+ * `unmapped: 'allow'`), and its answer is returned as is, `undefined`
84
+ * included (not applicable, as the AI SDK reads it). An answer that is not
85
+ * a tool approval result denies. PermDock's denials and approval requests
86
+ * come first.
87
+ */
88
+ readonly composeToolApproval: (app: AppToolApproval) => (call: ToolApprovalCall) => Promise<ToolApprovalResult>;
89
+ /** Hides tools the subject in `context` can never use, before the model sees them. */
90
+ readonly capabilityMiddleware: (context: AiSdkContext) => LanguageModelMiddleware;
91
+ readonly needsApproval: (permission: Permission) => (input: unknown, options?: NeedsApprovalOptions) => Promise<boolean>;
92
+ };
93
+ export declare function createPermDock<TUser, TPrincipal extends Principal = Principal>(policy: Policy<TUser, TPrincipal>, options: AiSdkPermDockOptions<TUser>): AiSdkPermDock;
94
+ //#endregion
95
+ export type { AiSdkContext, AiSdkPermDock, AiSdkPermDockOptions, AppToolApproval, LanguageModelMiddleware, NeedsApprovalOptions, ToolApprovalCall, ToolApprovalResult, ToolApprovalStatus };
@@ -0,0 +1,154 @@
1
+ import { t as compact } from "../compact-y6vfu2_f.js";
2
+ import { n as PermDockDeniedError, t as PermDockApprovalRequiredError } from "../errors-Cz5zn0mW.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/ai-sdk/create.ts
6
+ const APPROVAL_STATUSES = /* @__PURE__ */ new Set([
7
+ "approved",
8
+ "not-applicable",
9
+ "denied",
10
+ "user-approval"
11
+ ]);
12
+ function isToolApprovalResult(value) {
13
+ if (value === void 0 || APPROVAL_STATUSES.has(value)) return true;
14
+ return typeof value === "object" && value !== null && "type" in value && APPROVAL_STATUSES.has(value.type) && (!("reason" in value) || value.reason === void 0 || typeof value.reason === "string");
15
+ }
16
+ function contextOf(call) {
17
+ const runtime = call.runtimeContext !== null && typeof call.runtimeContext === "object" ? call.runtimeContext : {};
18
+ return compact({
19
+ ...runtime,
20
+ runtimeContext: call.runtimeContext
21
+ });
22
+ }
23
+ function toolContextOf(options) {
24
+ const tool = options.context !== null && typeof options.context === "object" ? options.context : {};
25
+ return compact({
26
+ ...tool,
27
+ toolContext: options.context
28
+ });
29
+ }
30
+ /**
31
+ * Whether `messages` already carry an approval request for `toolCallId`: the
32
+ * SDK is re-checking a call a user approved, and treats any answer other
33
+ * than `denied` as approval.
34
+ */
35
+ function isRecheck(messages, toolCallId) {
36
+ if (!Array.isArray(messages) || typeof toolCallId !== "string") return false;
37
+ return messages.some((message) => {
38
+ if (typeof message !== "object" || message === null) return false;
39
+ const { role, content } = message;
40
+ return role === "assistant" && Array.isArray(content) && content.some((part) => typeof part === "object" && part !== null && part.type === "tool-approval-request" && part.toolCallId === toolCallId);
41
+ });
42
+ }
43
+ function resourceOf(permission, data) {
44
+ const id = typeof data === "object" && data !== null ? data.id : void 0;
45
+ return typeof id === "string" || typeof id === "number" ? {
46
+ type: permission.resource,
47
+ id: String(id)
48
+ } : { type: permission.resource };
49
+ }
50
+ function deniedError(verdict, permission, permdock) {
51
+ return new PermDockDeniedError({
52
+ decision: verdict.decision ?? {
53
+ outcome: "denied",
54
+ denials: [],
55
+ alternatives: []
56
+ },
57
+ permission: permission.key,
58
+ scope: permission.scope,
59
+ resource: { type: permission.resource },
60
+ subject: permdock.subject,
61
+ message: verdict.reason
62
+ });
63
+ }
64
+ function createPermDock(policy, options) {
65
+ const kernel = createAgentKernel(policy, {
66
+ ...compact({
67
+ actor: options.actor,
68
+ delegation: options.delegation,
69
+ tenant: options.tenant,
70
+ store: options.store
71
+ }),
72
+ ...instanceOptions(options),
73
+ subject: options.subject,
74
+ tools: options.tools,
75
+ adapter: "ai-sdk"
76
+ });
77
+ const byPermission = /* @__PURE__ */ new Map();
78
+ for (const [name, binding] of Object.entries(options.tools)) byPermission.set(binding.permission.key, name);
79
+ const passes = (toolName) => options.unmapped === "allow" && !Object.hasOwn(options.tools, toolName);
80
+ const decide = (toolName, args, context) => kernel.decideTool(toolName, args, context, compact({ resumeToken: approvalTokenOf(context) }));
81
+ const toolApproval = async (call) => {
82
+ if (passes(call.toolCall.toolName)) return "approved";
83
+ const context = contextOf(call);
84
+ const verdict = await decide(call.toolCall.toolName, call.toolCall.input, context);
85
+ if (verdict.outcome === "granted") return "approved";
86
+ if (verdict.outcome === "denied") return {
87
+ type: "denied",
88
+ reason: verdict.reason
89
+ };
90
+ if (isRecheck(call.messages, call.toolCall.toolCallId)) return {
91
+ type: "denied",
92
+ reason: `${verdict.summary} No approval is recorded for this call.`
93
+ };
94
+ return {
95
+ type: "user-approval",
96
+ reason: verdict.summary,
97
+ token: verdict.token
98
+ };
99
+ };
100
+ const capabilityMiddleware = (context) => ({
101
+ specificationVersion: "v4",
102
+ transformParams: async ({ params }) => {
103
+ if (params.tools === void 0) return params;
104
+ const allowed = await kernel.allowedToolNames(context);
105
+ const keeps = (name) => typeof name === "string" && (allowed.has(name) || passes(name));
106
+ const tools = params.tools.filter((tool) => keeps(tool.name));
107
+ const choice = params.toolChoice;
108
+ const forcedAway = choice?.type === "tool" && !keeps(choice.toolName);
109
+ return {
110
+ ...params,
111
+ tools,
112
+ ...forcedAway ? { toolChoice: { type: "none" } } : {}
113
+ };
114
+ }
115
+ });
116
+ const needsApproval = (permission) => async (input, needsOptions = {}) => {
117
+ const context = toolContextOf(needsOptions);
118
+ const toolName = byPermission.get(permission.key);
119
+ if (toolName === void 0) throw deniedError({
120
+ outcome: "denied",
121
+ decision: null,
122
+ permission,
123
+ reason: `${permission.key} is not bound to a tool.`
124
+ }, permission, await kernel.instance(context));
125
+ const verdict = await decide(toolName, input, context);
126
+ if (verdict.outcome === "granted") return false;
127
+ if (verdict.outcome === "denied") throw deniedError(verdict, permission, await kernel.instance(context));
128
+ if (isRecheck(needsOptions.messages, needsOptions.toolCallId)) throw new PermDockApprovalRequiredError({
129
+ decision: verdict.decision,
130
+ permission: permission.key,
131
+ scope: permission.scope,
132
+ resource: resourceOf(permission, verdict.data),
133
+ message: `${verdict.summary} No approval is recorded for this call.`
134
+ });
135
+ return true;
136
+ };
137
+ const composeToolApproval = (app) => async (call) => {
138
+ const verdict = await toolApproval(call);
139
+ if (verdict !== "approved") return verdict;
140
+ const answer = await app(call);
141
+ return isToolApprovalResult(answer) ? answer : {
142
+ type: "denied",
143
+ reason: "The tool approval answer was not valid."
144
+ };
145
+ };
146
+ return {
147
+ toolApproval,
148
+ composeToolApproval,
149
+ capabilityMiddleware,
150
+ needsApproval
151
+ };
152
+ }
153
+ //#endregion
154
+ export { createPermDock };
@@ -0,0 +1,6 @@
1
+ //#region src/core/approval-required.ts
2
+ function requiresApproval(approval) {
3
+ return approval !== void 0;
4
+ }
5
+ //#endregion
6
+ export { requiresApproval as t };
@@ -0,0 +1,3 @@
1
+ import { _ as approverRelationKey, a as ApprovalListFilter, c as ApprovalRequest, d as ApprovalStatus, f as ApprovalStore, g as approvalQuorum, h as DEFAULT_APPROVAL_TTL_MS, i as ApprovalInspectResult, l as ApprovalResumeFailure, m as ApprovalVerdict, n as ApprovalApprovers, o as ApprovalListQuery, p as ApprovalSubjectSummary, r as ApprovalCancelMeta, s as ApprovalPage, t as APPROVAL_HEADER, u as ApprovalSignature, v as escalationOpenAt } from "../types-vKyAMtcX.js";
2
+ import { C as ApproverRelationsOptions, D as ApprovalError, E as approvalsHandler, O as ApprovalErrorCode, S as vouchApproval, T as ApprovalsHandlerOptions, _ as resolveApproval, a as approverPermissions, b as storedApprovalToken, c as decodeApprovalCursor, d as pageApprovals, f as cancelApprovals, g as requestApproval, h as readApprovalHeader, i as memoryApprovalStore, k as isApprovalError, l as encodeApprovalCursor, m as inspectApproval, n as applyApprovalVerdict, o as ApprovalCursorPosition, p as consumeApproval, r as assertApprover, s as approvalPageSize, t as MemoryApprovalStore, u as listAllApprovals, v as resumeDecision, w as approverRelations, x as summariseSubject, y as resumeFromHeader } from "../index-D6_cSa1z.js";
3
+ export { APPROVAL_HEADER, type ApprovalApprovers, type ApprovalCancelMeta, type ApprovalCursorPosition, ApprovalError, type ApprovalErrorCode, type ApprovalInspectResult, type ApprovalListFilter, type ApprovalListQuery, type ApprovalPage, type ApprovalRequest, type ApprovalResumeFailure, type ApprovalSignature, type ApprovalStatus, type ApprovalStore, type ApprovalSubjectSummary, type ApprovalVerdict, type ApprovalsHandlerOptions, type ApproverRelationsOptions, DEFAULT_APPROVAL_TTL_MS, type MemoryApprovalStore, applyApprovalVerdict, approvalPageSize, approvalQuorum, approvalsHandler, approverPermissions, approverRelationKey, approverRelations, assertApprover, cancelApprovals, consumeApproval, decodeApprovalCursor, encodeApprovalCursor, escalationOpenAt, inspectApproval, isApprovalError, listAllApprovals, memoryApprovalStore, pageApprovals, readApprovalHeader, requestApproval, resolveApproval, resumeDecision, resumeFromHeader, storedApprovalToken, summariseSubject, vouchApproval };
@@ -0,0 +1,5 @@
1
+ import { n as isApprovalError, t as ApprovalError } from "../errors-DRnGZHzF.js";
2
+ import { a as decodeApprovalCursor, c as pageApprovals, d as approvalQuorum, f as approverRelationKey, i as approvalPageSize, l as APPROVAL_HEADER, n as assertApprover, o as encodeApprovalCursor, p as escalationOpenAt, r as memoryApprovalStore, s as listAllApprovals, t as applyApprovalVerdict, u as DEFAULT_APPROVAL_TTL_MS } from "../store-DMAWwAJV.js";
3
+ import { a as requestApproval, c as resumeFromHeader, d as vouchApproval, f as approverPermissions, i as readApprovalHeader, l as storedApprovalToken, m as approverRelations, n as consumeApproval, o as resolveApproval, r as inspectApproval, s as resumeDecision, t as cancelApprovals, u as summariseSubject } from "../helpers-H_KARDVC.js";
4
+ import { t as approvalsHandler } from "../approvals-DbYAuNkG.js";
5
+ export { APPROVAL_HEADER, ApprovalError, DEFAULT_APPROVAL_TTL_MS, applyApprovalVerdict, approvalPageSize, approvalQuorum, approvalsHandler, approverPermissions, approverRelationKey, approverRelations, assertApprover, cancelApprovals, consumeApproval, decodeApprovalCursor, encodeApprovalCursor, escalationOpenAt, inspectApproval, isApprovalError, listAllApprovals, memoryApprovalStore, pageApprovals, readApprovalHeader, requestApproval, resolveApproval, resumeDecision, resumeFromHeader, storedApprovalToken, summariseSubject, vouchApproval };