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.
- package/README.md +327 -1
- package/dist/a2a/index.d.ts +169 -0
- package/dist/a2a/index.js +232 -0
- package/dist/adapter-context-mlWsVGGg.js +23 -0
- package/dist/ai-sdk/index.d.ts +95 -0
- package/dist/ai-sdk/index.js +154 -0
- package/dist/approval-required-TzNB9oQA.js +6 -0
- package/dist/approvals/index.d.ts +3 -0
- package/dist/approvals/index.js +5 -0
- package/dist/approvals-DbYAuNkG.js +224 -0
- package/dist/approvers-DT4AVyIg.js +52 -0
- package/dist/arazzo-BAgw9ap6.js +70 -0
- package/dist/arazzo-cmvX2jDe.js +54 -0
- package/dist/authzen/index.d.ts +39 -0
- package/dist/authzen/index.js +302 -0
- package/dist/better-auth/index.d.ts +109 -0
- package/dist/better-auth/index.js +344 -0
- package/dist/better-supabase/index.d.ts +206 -0
- package/dist/better-supabase/index.js +620 -0
- package/dist/bind-CVy3Espv.d.ts +25 -0
- package/dist/bind-VnYn2HKq.js +97 -0
- package/dist/boundary-BM8a_P6E.js +13 -0
- package/dist/boundary-BmHxVH1J.d.ts +15 -0
- package/dist/budget-JqcRqyhK.d.ts +11 -0
- package/dist/budget-NbEtbJC_.js +11 -0
- package/dist/canonical-json-DemiK4Vp.js +26 -0
- package/dist/capability-4qPdO9gk.js +173 -0
- package/dist/capability-Dq43tT1u.d.ts +99 -0
- package/dist/catalog/index.d.ts +12 -0
- package/dist/catalog/index.js +2 -0
- package/dist/catalog-BjZSovXQ.js +2 -0
- package/dist/catalog-doc-Dsc9y7sd.js +309 -0
- package/dist/catalog-h2tlKFkq.js +48 -0
- package/dist/catalog-path-CnI0XTFK.js +12 -0
- package/dist/catalog-z8q6bi_r.js +55 -0
- package/dist/claude-agent/index.d.ts +72 -0
- package/dist/claude-agent/index.js +77 -0
- package/dist/clerk/index.d.ts +65 -0
- package/dist/clerk/index.js +301 -0
- package/dist/cli/bin.d.ts +1 -0
- package/dist/cli/bin.js +20 -0
- package/dist/cli/index.d.ts +46 -0
- package/dist/cli/index.js +5 -0
- package/dist/clients-C7zLFuWT.d.ts +12 -0
- package/dist/clients-DjU5ABMy.js +23 -0
- package/dist/cloud/index.d.ts +90 -0
- package/dist/cloud/index.js +404 -0
- package/dist/cloud-BGhHS-lY.js +50 -0
- package/dist/cloud-Bo3e9Ak3.js +118 -0
- package/dist/collect-DDDv_ESs.js +502 -0
- package/dist/collect-DLlujdHC.js +83 -0
- package/dist/collect-rG2IQ3t0.js +2 -0
- package/dist/commands-DWOrSQic.js +97 -0
- package/dist/compact-y6vfu2_f.js +19 -0
- package/dist/compare-pfyVnBjE.js +12 -0
- package/dist/compile/index.d.ts +3 -0
- package/dist/compile/index.js +2 -0
- package/dist/compile-Ba4blROR.js +613 -0
- package/dist/compile-CNnl6uIt.d.ts +94 -0
- package/dist/config-BJiM-xAm.js +157 -0
- package/dist/config-Bn00Z3ks.js +36 -0
- package/dist/config-report-Dw_JcUqT.js +44 -0
- package/dist/connection-CU8MQxRi.js +194 -0
- package/dist/context-Ttp0ekMT.js +82 -0
- package/dist/convex/index.d.ts +45 -0
- package/dist/convex/index.js +65 -0
- package/dist/create-BWyx3jua.d.ts +245 -0
- package/dist/create-CPhDL6qx.js +253 -0
- package/dist/credential-8P81ff4u.js +306 -0
- package/dist/delegation-D8pUEuce.js +103 -0
- package/dist/describe-B_gVZEVi.js +94 -0
- package/dist/describe-PdoqESvg.d.ts +36 -0
- package/dist/diff-B8Tunc3o.js +451 -0
- package/dist/diff-CzqLxZ77.js +48 -0
- package/dist/digest-B3kc_PgQ.d.ts +19 -0
- package/dist/digest-BI-6aa6d.js +27 -0
- package/dist/doctor-WpvG6p4k.js +1194 -0
- package/dist/doctor-collect-ByfYlNv1.js +664 -0
- package/dist/doctor-rOr-4ZfS.js +53 -0
- package/dist/drizzle/index.d.ts +73 -0
- package/dist/drizzle/index.js +160 -0
- package/dist/duration-xK2jGFVc.js +25 -0
- package/dist/elysia/index.d.ts +49 -0
- package/dist/elysia/index.js +59 -0
- package/dist/errors-CWfoNg9N.js +47 -0
- package/dist/errors-Cz5zn0mW.js +123 -0
- package/dist/errors-DAqevpNk.d.ts +125 -0
- package/dist/errors-DRnGZHzF.js +30 -0
- package/dist/evaluation-items-CfCCejQd.js +40 -0
- package/dist/evaluations-tz6D9A2G.js +461 -0
- package/dist/eve/index.d.ts +86 -0
- package/dist/eve/index.js +176 -0
- package/dist/expiry-BoBJ8Tvc.js +7 -0
- package/dist/express/index.d.ts +23 -0
- package/dist/express/index.js +78 -0
- package/dist/fastify/index.d.ts +33 -0
- package/dist/fastify/index.js +92 -0
- package/dist/fields-BMl1RxoX.js +26 -0
- package/dist/files-DWUN9PzI.js +125 -0
- package/dist/fixtures-ht28Cplr.js +67 -0
- package/dist/freeze-CrU8nQeX.js +60 -0
- package/dist/from-snapshot-C3sHpZNS.js +569 -0
- package/dist/generate-CH7ThJ14.js +173 -0
- package/dist/grantee-Cv5Sogfv.js +602 -0
- package/dist/graph-sql-B-dsAT6j.d.ts +29 -0
- package/dist/headers-BZSDieNT.js +6 -0
- package/dist/headers-Cf-zWvsO.d.ts +6 -0
- package/dist/helpers-H_KARDVC.js +421 -0
- package/dist/hono/index.d.ts +48 -0
- package/dist/hono/index.js +99 -0
- package/dist/hosted-DJQw46hn.js +266 -0
- package/dist/http-BIhmLfCc.js +95 -0
- package/dist/http-DPuDaChb.d.ts +13 -0
- package/dist/http-SO7qGttf.js +44 -0
- package/dist/ids-DC4V4CFu.js +18 -0
- package/dist/index-A0YNL8jZ.d.ts +177 -0
- package/dist/index-CtE07CBF.d.ts +6 -0
- package/dist/index-D3vbkoSI.d.ts +483 -0
- package/dist/index-D6_cSa1z.d.ts +201 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.js +26 -0
- package/dist/instance-options-BK_rNOSC.d.ts +11 -0
- package/dist/instance-options-Dhhcnm3y.js +22 -0
- package/dist/json-schema-BsAflUGW.js +106 -0
- package/dist/jwt/index.d.ts +91 -0
- package/dist/jwt/index.js +590 -0
- package/dist/kernel-GSQnMz3O.js +208 -0
- package/dist/kysely/index.d.ts +78 -0
- package/dist/kysely/index.js +129 -0
- package/dist/live-options-H2eG8dfJ.js +60 -0
- package/dist/load-DhWEB9P1.js +75 -0
- package/dist/load-DwJUafYN.js +2 -0
- package/dist/load-jose-BL6LH4bL.js +11 -0
- package/dist/lru-8q4WZjBV.js +28 -0
- package/dist/manifest-iaoBXHKc.js +783 -0
- package/dist/manifest-uDS9y5de.d.ts +206 -0
- package/dist/map-AcxK9o_D.js +147 -0
- package/dist/map-claims-Z4QZOiFF.js +369 -0
- package/dist/map-error-pgUWNNtG.js +23 -0
- package/dist/markers-B0hYLvMD.js +60 -0
- package/dist/may-use-DndQ5tQ-.js +77 -0
- package/dist/mcp/index.d.ts +159 -0
- package/dist/mcp/index.js +603 -0
- package/dist/nest/index.d.ts +75 -0
- package/dist/nest/index.js +261 -0
- package/dist/next/client.d.ts +23 -0
- package/dist/next/client.js +33 -0
- package/dist/next/index.d.ts +93 -0
- package/dist/next/index.js +180 -0
- package/dist/next/plugin.d.ts +14 -0
- package/dist/next/plugin.js +33 -0
- package/dist/node/index.d.ts +24 -0
- package/dist/node/index.js +34 -0
- package/dist/openai/index.d.ts +62 -0
- package/dist/openai/index.js +92 -0
- package/dist/openapi/index.d.ts +176 -0
- package/dist/openapi/index.js +3 -0
- package/dist/openapi-Bbg4wGVL.js +164 -0
- package/dist/openapi-BqRBvAng.js +538 -0
- package/dist/openapi-CqqEbHsL.js +250 -0
- package/dist/openapi-import-cmwetbzw.js +5959 -0
- package/dist/openapi-schema--ARjyfQr.js +6902 -0
- package/dist/orpc/index.d.ts +51 -0
- package/dist/orpc/index.js +145 -0
- package/dist/otel/index.d.ts +13 -0
- package/dist/otel/index.js +202 -0
- package/dist/package-root-zGkxO3oN.js +30 -0
- package/dist/parse-BuyjxhZV.js +53 -0
- package/dist/parse-local-manifest-BkGQNzAh.d.ts +10 -0
- package/dist/parse-local-manifest-BrMozJCo.js +36 -0
- package/dist/pdp/index.d.ts +22 -0
- package/dist/pdp/index.js +682 -0
- package/dist/peer-BOr_kJE1.js +31 -0
- package/dist/permdock-CzqXjCpU.js +3471 -0
- package/dist/permissions-CDgvKG5L.d.ts +52 -0
- package/dist/permissions-CpZrivYv.js +142 -0
- package/dist/permissions-DVoF6dMt.js +662 -0
- package/dist/permissions-DttnqqxC.d.ts +214 -0
- package/dist/pins-8ILTftC9.js +12 -0
- package/dist/policy-CFZAr_Al.d.ts +2252 -0
- package/dist/policy-D8UFyERw.d.ts +20 -0
- package/dist/policy-xyWg7QdR.js +1122 -0
- package/dist/powersync-A8x_Yyvh.js +2 -0
- package/dist/powersync-C7kLglqX.js +540 -0
- package/dist/powersync-yW1UUFzp.js +62 -0
- package/dist/prisma/index.d.ts +136 -0
- package/dist/prisma/index.js +455 -0
- package/dist/problem-B43ztKIm.js +191 -0
- package/dist/problem-details-CkL50EEf.d.ts +7 -0
- package/dist/problem-details-_AMOYz-w.js +144 -0
- package/dist/prompt-CXYhLfsS.js +32 -0
- package/dist/protected-CNsMzrVd.d.ts +27 -0
- package/dist/protected-Cs6kTaHo.js +100 -0
- package/dist/protected-bZs6rbT1.d.ts +40 -0
- package/dist/provider-Cjr62YMV.d.ts +6 -0
- package/dist/provider-DLzpb2Xz.js +52 -0
- package/dist/provider-store-DNyC1y48.js +43 -0
- package/dist/react/index.d.ts +8 -0
- package/dist/react/index.js +7 -0
- package/dist/react/provider-client.d.ts +2 -0
- package/dist/react/provider-client.js +3 -0
- package/dist/react-native/index.d.ts +198 -0
- package/dist/react-native/index.js +696 -0
- package/dist/refs-KYb4ntaz.js +91 -0
- package/dist/relations-cjOL01hZ.js +505 -0
- package/dist/replay-BsOyTrdV.js +28 -0
- package/dist/replay-sqBGMnNs.d.ts +5 -0
- package/dist/resource-ref-CaS9yVPi.js +20 -0
- package/dist/revocations-Bhr0aMIC.js +27 -0
- package/dist/revocations-Cy06JNx2.d.ts +21 -0
- package/dist/rls-BMNydpHk.js +2521 -0
- package/dist/rls-CEvs64Kj.js +238 -0
- package/dist/rls-fields-BMasREhR.js +3502 -0
- package/dist/rls-graph-pc9fuXYm.js +435 -0
- package/dist/rls-import-D8F7j35Q.js +943 -0
- package/dist/rls-migrate-7wikfrVI.js +367 -0
- package/dist/rls-ownership-B5Lkq62W.js +843 -0
- package/dist/rls-shared-aOQ4hGTO.js +493 -0
- package/dist/rls-verify-D8B7dOTh.js +745 -0
- package/dist/row-check-Dt35czLy.d.ts +40 -0
- package/dist/rpc-DOK54_CS.js +89 -0
- package/dist/run-YXCJDNYk.js +174 -0
- package/dist/runtime-CB8gQFvS.js +11 -0
- package/dist/saas-Bj_FFkjN.js +1203 -0
- package/dist/schema-D3MnDMxa.js +300 -0
- package/dist/scim/index.d.ts +2 -0
- package/dist/scim/index.js +2 -0
- package/dist/scim-BFGBBAqR.js +1445 -0
- package/dist/scopes-CVdPrWN-.js +239 -0
- package/dist/server/index.d.ts +134 -0
- package/dist/server/index.js +11 -0
- package/dist/server-DlZ28Oz5.js +268 -0
- package/dist/sha256-BO0swRXL.js +150 -0
- package/dist/shared-DRu8VFVM.js +123 -0
- package/dist/sink-Bd9PSyfq.js +141 -0
- package/dist/sink-Gs6TTVa-.d.ts +104 -0
- package/dist/skills-Biq5uup3.js +192 -0
- package/dist/skills-JaymNCdK.js +56 -0
- package/dist/snapshot-Enxd0n-s.js +975 -0
- package/dist/snapshot-cache-D6jLelln.js +44 -0
- package/dist/snapshot-cache-DwQH8ufx.d.ts +45 -0
- package/dist/solid/index.d.ts +93 -0
- package/dist/solid/index.js +188 -0
- package/dist/sources-B0UvrJ21.js +534 -0
- package/dist/sources-BcJgw0lt.d.ts +192 -0
- package/dist/sql-xdg5f4Fi.js +27 -0
- package/dist/src-CSbUiozF.js +568 -0
- package/dist/ssf/index.d.ts +4 -0
- package/dist/ssf/index.js +596 -0
- package/dist/store-DMAWwAJV.js +371 -0
- package/dist/store-D_pjn91-.d.ts +36 -0
- package/dist/store-options-yO0V6gRn.js +716 -0
- package/dist/stores-4_sqiOA1.js +87 -0
- package/dist/stores-DVR5NHLE.d.ts +52 -0
- package/dist/stream-DDpvynSB.js +66 -0
- package/dist/stream-DlvG2hs-.d.ts +12 -0
- package/dist/style-CTm1AXDT.js +22 -0
- package/dist/subject-C6dLxqHU.js +24 -0
- package/dist/subject-settings-BwBmCdTR.js +128 -0
- package/dist/supabase/index.d.ts +183 -0
- package/dist/supabase/index.js +5 -0
- package/dist/supabase/middleware.d.ts +82 -0
- package/dist/supabase/middleware.js +102 -0
- package/dist/supabase-CwafwxxF.js +83 -0
- package/dist/supabase-DTBaC20O.js +774 -0
- package/dist/supabase-config-Bs44dare.js +472 -0
- package/dist/supabase-hook-BuxLQLpU.js +1814 -0
- package/dist/supabase-hook-D5qVd_D8.js +2 -0
- package/dist/supautils-DYZnzRWV.js +91 -0
- package/dist/svelte/PermissionBoundary.svelte +37 -0
- package/dist/svelte/Protected.svelte +40 -0
- package/dist/svelte/index.d.ts +13 -0
- package/dist/svelte/index.js +107 -0
- package/dist/svelte/runtime.d.ts +7 -0
- package/dist/svelte/runtime.js +4 -0
- package/dist/svelte/source.d.ts +13 -0
- package/dist/svelte/source.js +11 -0
- package/dist/terminal/index.d.ts +163 -0
- package/dist/terminal/index.js +833 -0
- package/dist/testing/index.d.ts +745 -0
- package/dist/testing/index.js +3672 -0
- package/dist/testing/saas/index.d.ts +194 -0
- package/dist/testing/saas/index.js +3 -0
- package/dist/testing/saas/permissions.d.ts +2 -0
- package/dist/testing/saas/permissions.js +2 -0
- package/dist/text-diff-BdkkYSbi.js +15 -0
- package/dist/thenable-okc2xDsj.js +10 -0
- package/dist/timeout-D51niuQP.js +8 -0
- package/dist/token-CIWxJOCh.js +50 -0
- package/dist/trpc/index.d.ts +61 -0
- package/dist/trpc/index.js +122 -0
- package/dist/types-9AWO9EGt.d.ts +197 -0
- package/dist/types-BPxgszlT.d.ts +550 -0
- package/dist/types-BVyImy5I.d.ts +120 -0
- package/dist/types-Bvc4oWT6.d.ts +9 -0
- package/dist/types-C3s9xVJG.d.ts +48 -0
- package/dist/types-Dnemwd77.d.ts +183 -0
- package/dist/types-kxznc7cn.d.ts +52 -0
- package/dist/types-vKyAMtcX.d.ts +157 -0
- package/dist/types-vNSDF7Dq.d.ts +66 -0
- package/dist/types-yF5LmQVD.d.ts +306 -0
- package/dist/unplugin/index.d.ts +7 -0
- package/dist/unplugin/index.js +31 -0
- package/dist/usage-D07N9QJ3.js +42 -0
- package/dist/usage-D82l1CwK.js +2 -0
- package/dist/usage-DG1oeCca.js +693 -0
- package/dist/validation-error-CnjZ4t92.js +33 -0
- package/dist/validation-error-CtF23SrC.d.ts +26 -0
- package/dist/validity-uOp8UpYn.js +245 -0
- package/dist/verifier-BxBo6I44.js +466 -0
- package/dist/version-BvacVTZR.js +17 -0
- package/dist/views-Soe7bGSC.js +95 -0
- package/dist/vocabulary-DA8a8zif.d.ts +56 -0
- package/dist/vue/index.d.ts +79 -0
- package/dist/vue/index.js +196 -0
- package/dist/watch-Etoa_Mvr.js +2 -0
- package/dist/watch-UihESpsJ.js +128 -0
- package/dist/webmcp/index.d.ts +75 -0
- package/dist/webmcp/index.js +307 -0
- package/package.json +450 -5
- package/rulesets/permdock.yaml +29 -0
- package/schemas/approval-request-v1.json +175 -0
- package/schemas/catalog-v1.json +535 -0
- package/schemas/openapi/oas-3.1.json +1298 -0
- package/schemas/openapi/oas-3.2.json +1516 -0
- package/schemas/openapi/overlay-1.1.json +79 -0
- package/schemas/supabase-claims-v1.json +144 -0
- package/schemas/supabase-manifest-v1.json +361 -0
- package/skills/permdock/SKILL.md +66 -0
- package/skills/permdock-agents/SKILL.md +77 -0
- package/skills/permdock-agents/references/runtimes.md +213 -0
- package/skills/permdock-approvals/SKILL.md +80 -0
- package/skills/permdock-approvals/references/stores-and-resume.md +94 -0
- package/skills/permdock-audit/SKILL.md +67 -0
- package/skills/permdock-credentials/SKILL.md +55 -0
- package/skills/permdock-credentials/references/tokens-keys-links.md +132 -0
- package/skills/permdock-data/SKILL.md +57 -0
- package/skills/permdock-data/references/queries-and-rls.md +62 -0
- package/skills/permdock-data/references/relationships.md +67 -0
- package/skills/permdock-tenancy/SKILL.md +80 -0
- package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +89 -0
- package/skills/permdock-wire/SKILL.md +116 -0
- package/skills/permdock-wire/references/adapters.md +492 -0
- 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,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 };
|