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,79 @@
|
|
|
1
|
+
import { Ft as TokenVerifier, Mr as Membership, Tt as Snapshot, Yn as Decision } from "../policy-CFZAr_Al.js";
|
|
2
|
+
import { f as Permission } from "../permissions-DttnqqxC.js";
|
|
3
|
+
import { r as Role } from "../vocabulary-DA8a8zif.js";
|
|
4
|
+
import { n as requiredPlans } from "../problem-details-CkL50EEf.js";
|
|
5
|
+
import { i as describe } from "../describe-PdoqESvg.js";
|
|
6
|
+
import { t as PermissionBoundaryState } from "../boundary-BmHxVH1J.js";
|
|
7
|
+
import { t as approvalHeaders } from "../headers-Cf-zWvsO.js";
|
|
8
|
+
import { a as FilterResult, c as SubjectView, i as ClientStatus, l as TenantView, n as ApprovalState, o as PermissionSet, r as ClientPermDock, s as PermissionState, t as ApprovalHandle, u as UseRolesOptions } from "../types-kxznc7cn.js";
|
|
9
|
+
import { ComputedRef, DefineComponent, MaybeRefOrGetter, Plugin } from "vue";
|
|
10
|
+
//#region src/vue/types.d.ts
|
|
11
|
+
type PermDockPluginOptions = {
|
|
12
|
+
/**
|
|
13
|
+
* A ref or getter re-hydrates the store when it changes; a promise keeps
|
|
14
|
+
* the store `pending` until it settles (await the same promise in an async
|
|
15
|
+
* `setup` under `<Suspense>`).
|
|
16
|
+
*/
|
|
17
|
+
readonly snapshot: MaybeRefOrGetter<Snapshot | string> | PromiseLike<Snapshot | string>;
|
|
18
|
+
/**
|
|
19
|
+
* The AuthZEN evaluations endpoint for checks the snapshot cannot answer.
|
|
20
|
+
* `false` never calls one: such a check is denied with reason `server-only`.
|
|
21
|
+
*/
|
|
22
|
+
readonly endpoint?: string | false;
|
|
23
|
+
/** Where `refresh()` fetches a fresh snapshot. Defaults to `endpoint`. */
|
|
24
|
+
readonly snapshotUrl?: string;
|
|
25
|
+
readonly approvals?: string;
|
|
26
|
+
/** A ref or getter switches the active tenant (`refresh({ tenant })`) when it changes. */
|
|
27
|
+
readonly tenant?: MaybeRefOrGetter<string | undefined>;
|
|
28
|
+
readonly fetch?: typeof fetch;
|
|
29
|
+
/** Read on every request: a ref or getter carries a rotated token without rebuilding the store. */
|
|
30
|
+
readonly headers?: MaybeRefOrGetter<Readonly<Record<string, string>> | undefined>;
|
|
31
|
+
readonly maxAge?: number;
|
|
32
|
+
/** Read on every verification; set it at install to verify signed snapshots. */
|
|
33
|
+
readonly verifier?: MaybeRefOrGetter<TokenVerifier | undefined>;
|
|
34
|
+
};
|
|
35
|
+
//#endregion
|
|
36
|
+
//#region src/vue/composables.d.ts
|
|
37
|
+
export declare function usePermDock(): ClientPermDock;
|
|
38
|
+
export declare function usePermission(permission: MaybeRefOrGetter<Permission>, data?: MaybeRefOrGetter<unknown>): {
|
|
39
|
+
readonly allowed: ComputedRef<boolean>;
|
|
40
|
+
readonly status: ComputedRef<PermissionState["status"]>;
|
|
41
|
+
readonly decision: ComputedRef<Decision>;
|
|
42
|
+
};
|
|
43
|
+
export declare function usePermissions(permissions: MaybeRefOrGetter<readonly Permission[]>, data?: MaybeRefOrGetter<unknown>): ComputedRef<PermissionSet>;
|
|
44
|
+
export declare function useFilter<T>(permission: Permission<string, T, "instance">, rows: MaybeRefOrGetter<readonly T[]>): ComputedRef<FilterResult<T>>;
|
|
45
|
+
export declare function useTenant(): ComputedRef<TenantView>;
|
|
46
|
+
export declare function useMemberships(): ComputedRef<readonly Membership[]>;
|
|
47
|
+
export declare function useRoles(options?: MaybeRefOrGetter<UseRolesOptions>): ComputedRef<{
|
|
48
|
+
readonly roles: readonly Role[];
|
|
49
|
+
}>;
|
|
50
|
+
export declare function useAssignableRoles(): ComputedRef<readonly Role[]>;
|
|
51
|
+
export declare function useAssignablePermissions(options?: MaybeRefOrGetter<{
|
|
52
|
+
readonly tenant?: string;
|
|
53
|
+
}>): ComputedRef<readonly Permission[]>;
|
|
54
|
+
export declare function useSubject(): ComputedRef<SubjectView>;
|
|
55
|
+
export declare function useApproval(decision: MaybeRefOrGetter<Decision>): ComputedRef<ApprovalHandle>;
|
|
56
|
+
//#endregion
|
|
57
|
+
//#region src/vue/boundary.d.ts
|
|
58
|
+
/**
|
|
59
|
+
* Catches `PermDockDeniedError` and `PermDockApprovalRequiredError` thrown
|
|
60
|
+
* by a descendant and renders the `denied` slot, or the `approval` slot for
|
|
61
|
+
* an approval request (default `denied`). The slots receive the refused
|
|
62
|
+
* permission and `retry()`. Any other error propagates.
|
|
63
|
+
*/
|
|
64
|
+
export declare const PermissionBoundary: DefineComponent;
|
|
65
|
+
/** Inside a `PermissionBoundary`: what was refused and `retry()`, or `null` while the children render. */
|
|
66
|
+
export declare function usePermissionBoundary(): PermissionBoundaryState | null;
|
|
67
|
+
//#endregion
|
|
68
|
+
//#region src/vue/plugin.d.ts
|
|
69
|
+
export declare const permdockPlugin: Plugin<PermDockPluginOptions>;
|
|
70
|
+
//#endregion
|
|
71
|
+
//#region src/vue/protected.d.ts
|
|
72
|
+
type ProtectedProps = {
|
|
73
|
+
readonly permission: Permission;
|
|
74
|
+
readonly data?: unknown;
|
|
75
|
+
readonly tenant?: string;
|
|
76
|
+
};
|
|
77
|
+
export declare const Protected: DefineComponent<ProtectedProps>;
|
|
78
|
+
//#endregion
|
|
79
|
+
export { type ApprovalHandle, type ApprovalState, type ClientPermDock, type ClientStatus, type FilterResult, type PermDockPluginOptions, type PermissionBoundaryState, type PermissionSet, type PermissionState, type ProtectedProps, type SubjectView, type TenantView, type UseRolesOptions, approvalHeaders, describe, requiredPlans };
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { r as requiredPlans } from "../problem-details-_AMOYz-w.js";
|
|
2
|
+
import { t as describe } from "../describe-B_gVZEVi.js";
|
|
3
|
+
import { t as approvalHeaders } from "../headers-BZSDieNT.js";
|
|
4
|
+
import { i as isPromiseLike } from "../store-options-yO0V6gRn.js";
|
|
5
|
+
import { a as protectedView, c as subjectView, i as permissionSet, l as tenantView, n as filterResult, o as rolesView, r as livePermDock, s as scopedTenant, t as approvalHandle } from "../views-Soe7bGSC.js";
|
|
6
|
+
import { n as boundaryFallback, t as boundaryDigest } from "../boundary-BM8a_P6E.js";
|
|
7
|
+
import { n as switchTenant, t as providerStore } from "../provider-store-DNyC1y48.js";
|
|
8
|
+
import { computed, defineComponent, effectScope, getCurrentScope, inject, isRef, onErrorCaptured, onScopeDispose, provide, shallowRef, toValue, watch } from "vue";
|
|
9
|
+
//#region src/vue/context.ts
|
|
10
|
+
const permDockKey = Symbol("permdock");
|
|
11
|
+
//#endregion
|
|
12
|
+
//#region src/vue/composables.ts
|
|
13
|
+
function useStore() {
|
|
14
|
+
const store = inject(permDockKey);
|
|
15
|
+
if (store === void 0) throw new Error("PermDock: composables require permdockPlugin.");
|
|
16
|
+
return store;
|
|
17
|
+
}
|
|
18
|
+
function useTick(store) {
|
|
19
|
+
if (getCurrentScope() === void 0) throw new Error("PermDock: call composables in setup() or an effectScope, which removes their store subscription.");
|
|
20
|
+
const tick = shallowRef(0);
|
|
21
|
+
onScopeDispose(store.subscribe(() => {
|
|
22
|
+
tick.value += 1;
|
|
23
|
+
}));
|
|
24
|
+
return computed(() => {
|
|
25
|
+
tick.value;
|
|
26
|
+
return store.get();
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
function usePermDock() {
|
|
30
|
+
const permdock = useTick(useStore());
|
|
31
|
+
return livePermDock(() => permdock.value);
|
|
32
|
+
}
|
|
33
|
+
function usePermission(permission, data) {
|
|
34
|
+
const store = useStore();
|
|
35
|
+
const permdock = useTick(store);
|
|
36
|
+
const state = computed(() => {
|
|
37
|
+
permdock.value;
|
|
38
|
+
return store.permissionState(toValue(permission), toValue(data));
|
|
39
|
+
});
|
|
40
|
+
return {
|
|
41
|
+
allowed: computed(() => state.value.allowed),
|
|
42
|
+
status: computed(() => state.value.status),
|
|
43
|
+
decision: computed(() => state.value.decision)
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function usePermissions(permissions, data) {
|
|
47
|
+
const store = useStore();
|
|
48
|
+
const permdock = useTick(store);
|
|
49
|
+
return computed(() => {
|
|
50
|
+
permdock.value;
|
|
51
|
+
return permissionSet(store, toValue(permissions), toValue(data));
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
function useFilter(permission, rows) {
|
|
55
|
+
const permdock = useTick(useStore());
|
|
56
|
+
return computed(() => filterResult(permdock.value, permission, toValue(rows)));
|
|
57
|
+
}
|
|
58
|
+
function useTenant() {
|
|
59
|
+
const permdock = useTick(useStore());
|
|
60
|
+
return computed(() => tenantView(permdock.value));
|
|
61
|
+
}
|
|
62
|
+
function useMemberships() {
|
|
63
|
+
const permdock = useTick(useStore());
|
|
64
|
+
return computed(() => permdock.value.memberships());
|
|
65
|
+
}
|
|
66
|
+
function useRoles(options = {}) {
|
|
67
|
+
const permdock = useTick(useStore());
|
|
68
|
+
return computed(() => rolesView(permdock.value, toValue(options)));
|
|
69
|
+
}
|
|
70
|
+
function useAssignableRoles() {
|
|
71
|
+
const permdock = useTick(useStore());
|
|
72
|
+
return computed(() => permdock.value.assignableRoles());
|
|
73
|
+
}
|
|
74
|
+
function useAssignablePermissions(options = {}) {
|
|
75
|
+
const permdock = useTick(useStore());
|
|
76
|
+
return computed(() => permdock.value.assignablePermissions(toValue(options)));
|
|
77
|
+
}
|
|
78
|
+
function useSubject() {
|
|
79
|
+
const permdock = useTick(useStore());
|
|
80
|
+
return computed(() => subjectView(permdock.value));
|
|
81
|
+
}
|
|
82
|
+
function useApproval(decision) {
|
|
83
|
+
const store = useStore();
|
|
84
|
+
const permdock = useTick(store);
|
|
85
|
+
return computed(() => {
|
|
86
|
+
permdock.value;
|
|
87
|
+
return approvalHandle(store, toValue(decision));
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
//#endregion
|
|
91
|
+
//#region src/vue/boundary.ts
|
|
92
|
+
const boundaryKey = Symbol("permdock-boundary");
|
|
93
|
+
/**
|
|
94
|
+
* Catches `PermDockDeniedError` and `PermDockApprovalRequiredError` thrown
|
|
95
|
+
* by a descendant and renders the `denied` slot, or the `approval` slot for
|
|
96
|
+
* an approval request (default `denied`). The slots receive the refused
|
|
97
|
+
* permission and `retry()`. Any other error propagates.
|
|
98
|
+
*/
|
|
99
|
+
const PermissionBoundary = defineComponent({
|
|
100
|
+
name: "PermissionBoundary",
|
|
101
|
+
setup(_props, { slots }) {
|
|
102
|
+
const state = shallowRef(null);
|
|
103
|
+
provide(boundaryKey, state);
|
|
104
|
+
onErrorCaptured((error) => {
|
|
105
|
+
const digest = boundaryDigest(error);
|
|
106
|
+
if (digest === null) return;
|
|
107
|
+
state.value = {
|
|
108
|
+
...digest,
|
|
109
|
+
retry: () => {
|
|
110
|
+
state.value = null;
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
return false;
|
|
114
|
+
});
|
|
115
|
+
return () => {
|
|
116
|
+
const current = state.value;
|
|
117
|
+
if (current === null) return slots["default"]?.() ?? null;
|
|
118
|
+
return boundaryFallback(current, {
|
|
119
|
+
denied: slots["denied"],
|
|
120
|
+
approval: slots["approval"]
|
|
121
|
+
})?.(current) ?? null;
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
/** Inside a `PermissionBoundary`: what was refused and `retry()`, or `null` while the children render. */
|
|
126
|
+
function usePermissionBoundary() {
|
|
127
|
+
return inject(boundaryKey, null)?.value ?? null;
|
|
128
|
+
}
|
|
129
|
+
//#endregion
|
|
130
|
+
//#region src/vue/plugin.ts
|
|
131
|
+
const permdockPlugin = { install(app, options) {
|
|
132
|
+
const source = options.snapshot;
|
|
133
|
+
const promised = isPromiseLike(source);
|
|
134
|
+
const store = providerStore({
|
|
135
|
+
...options,
|
|
136
|
+
tenant: toValue(options.tenant)
|
|
137
|
+
}, () => ({
|
|
138
|
+
headers: toValue(options.headers),
|
|
139
|
+
fetch: options.fetch,
|
|
140
|
+
verifier: toValue(options.verifier)
|
|
141
|
+
}), promised ? source : toValue(source));
|
|
142
|
+
const scope = effectScope(true);
|
|
143
|
+
scope.run(() => {
|
|
144
|
+
if (!promised && (isRef(source) || typeof source === "function")) watch(() => toValue(source), (next) => {
|
|
145
|
+
store.replace(next);
|
|
146
|
+
});
|
|
147
|
+
const tenant = options.tenant;
|
|
148
|
+
if (isRef(tenant) || typeof tenant === "function") watch(() => toValue(tenant), (next) => {
|
|
149
|
+
switchTenant(store, next);
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
app.onUnmount(() => {
|
|
153
|
+
scope.stop();
|
|
154
|
+
store.dispose();
|
|
155
|
+
});
|
|
156
|
+
app.provide(permDockKey, store);
|
|
157
|
+
} };
|
|
158
|
+
//#endregion
|
|
159
|
+
//#region src/vue/protected.ts
|
|
160
|
+
const Protected = defineComponent({
|
|
161
|
+
name: "Protected",
|
|
162
|
+
props: {
|
|
163
|
+
permission: {
|
|
164
|
+
type: Object,
|
|
165
|
+
required: true
|
|
166
|
+
},
|
|
167
|
+
data: {
|
|
168
|
+
type: null,
|
|
169
|
+
required: false
|
|
170
|
+
},
|
|
171
|
+
tenant: {
|
|
172
|
+
type: String,
|
|
173
|
+
required: false
|
|
174
|
+
}
|
|
175
|
+
},
|
|
176
|
+
setup(props, { slots }) {
|
|
177
|
+
const local = usePermission(() => props.permission, () => props.data);
|
|
178
|
+
const root = usePermDock();
|
|
179
|
+
const scoped = computed(() => scopedTenant(root, props.tenant));
|
|
180
|
+
return () => {
|
|
181
|
+
const view = protectedView({
|
|
182
|
+
allowed: local.allowed.value,
|
|
183
|
+
status: local.status.value,
|
|
184
|
+
decision: local.decision.value
|
|
185
|
+
}, root, props.permission, props.data, scoped.value);
|
|
186
|
+
switch (view.slot) {
|
|
187
|
+
case "pending": return slots["pending"]?.() ?? null;
|
|
188
|
+
case "fallback": return slots["fallback"]?.({ decision: view.decision }) ?? null;
|
|
189
|
+
case "default": return slots["default"]?.({ decision: view.decision }) ?? null;
|
|
190
|
+
default: return view;
|
|
191
|
+
}
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
//#endregion
|
|
196
|
+
export { PermissionBoundary, Protected, approvalHeaders, describe, permdockPlugin, requiredPlans, useApproval, useAssignablePermissions, useAssignableRoles, useFilter, useMemberships, usePermDock, usePermission, usePermissionBoundary, usePermissions, useRoles, useSubject, useTenant };
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { i as describeError } from "./errors-CWfoNg9N.js";
|
|
2
|
+
import { t as defaultSrcPath } from "./files-DWUN9PzI.js";
|
|
3
|
+
import { r as runCollect } from "./collect-DDDv_ESs.js";
|
|
4
|
+
import { n as isConfigFile, r as loadConfig } from "./config-BJiM-xAm.js";
|
|
5
|
+
import { watch } from "node:fs";
|
|
6
|
+
import { basename, dirname, relative, resolve, sep } from "node:path";
|
|
7
|
+
//#region src/cli/watch.ts
|
|
8
|
+
const DEBOUNCE_MS = 50;
|
|
9
|
+
function report(message) {
|
|
10
|
+
if (message !== void 0) process.stderr.write(`permdock: ${message}\n`);
|
|
11
|
+
}
|
|
12
|
+
function watchRoot(cwd, entry) {
|
|
13
|
+
const wildcard = entry.search(/[*?[{]/u);
|
|
14
|
+
return resolve(cwd, wildcard === -1 ? entry : dirname(`${entry.slice(0, wildcard)}x`));
|
|
15
|
+
}
|
|
16
|
+
function within(dirs, file) {
|
|
17
|
+
return dirs.some((dir) => {
|
|
18
|
+
const path = relative(dir, file);
|
|
19
|
+
return path !== "" && !path.startsWith("..") && !path.startsWith(sep);
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
async function collectOnce(cwd, options, check, fresh, configFile) {
|
|
23
|
+
const config = await loadConfig(cwd, configFile, { fresh });
|
|
24
|
+
const collect = {
|
|
25
|
+
...config.collect,
|
|
26
|
+
...options?.collect
|
|
27
|
+
};
|
|
28
|
+
const result = await runCollect({
|
|
29
|
+
cwd,
|
|
30
|
+
config,
|
|
31
|
+
collect,
|
|
32
|
+
check,
|
|
33
|
+
now: /* @__PURE__ */ new Date(),
|
|
34
|
+
fresh
|
|
35
|
+
});
|
|
36
|
+
const inputs = [
|
|
37
|
+
configFile,
|
|
38
|
+
config.permissions,
|
|
39
|
+
config.policy
|
|
40
|
+
].filter((path) => path !== void 0).map((path) => resolve(cwd, path));
|
|
41
|
+
const sources = (collect.srcPath ?? defaultSrcPath()).map((entry) => watchRoot(cwd, entry));
|
|
42
|
+
const run = {
|
|
43
|
+
written: result.written ?? [],
|
|
44
|
+
inputs,
|
|
45
|
+
sources
|
|
46
|
+
};
|
|
47
|
+
if (result.code === 0) return {
|
|
48
|
+
message: void 0,
|
|
49
|
+
...run
|
|
50
|
+
};
|
|
51
|
+
if (check && options?.onDrift !== "warn" && result.code === 1) throw new Error(result.message);
|
|
52
|
+
return {
|
|
53
|
+
message: result.message,
|
|
54
|
+
...run
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
function createCollectScheduler(cwd, options, settings) {
|
|
58
|
+
const log = settings?.report ?? report;
|
|
59
|
+
let loaded = false;
|
|
60
|
+
let ignored = /* @__PURE__ */ new Set();
|
|
61
|
+
let inputs = [];
|
|
62
|
+
let sources = (options?.collect?.srcPath ?? defaultSrcPath()).map((entry) => watchRoot(cwd, entry));
|
|
63
|
+
let running = false;
|
|
64
|
+
let pending = false;
|
|
65
|
+
let timer;
|
|
66
|
+
const watchers = [];
|
|
67
|
+
async function run(check) {
|
|
68
|
+
const fresh = loaded;
|
|
69
|
+
loaded = true;
|
|
70
|
+
const result = await collectOnce(cwd, options, check, fresh, settings?.configFile);
|
|
71
|
+
ignored = new Set(result.written);
|
|
72
|
+
inputs = result.inputs;
|
|
73
|
+
sources = result.sources;
|
|
74
|
+
return result.message;
|
|
75
|
+
}
|
|
76
|
+
async function drain() {
|
|
77
|
+
running = true;
|
|
78
|
+
while (pending) {
|
|
79
|
+
pending = false;
|
|
80
|
+
try {
|
|
81
|
+
log(await run(false));
|
|
82
|
+
} catch (error) {
|
|
83
|
+
log(describeError(error));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
running = false;
|
|
87
|
+
}
|
|
88
|
+
function changed(file) {
|
|
89
|
+
if (file !== void 0 && ignored.has(resolve(cwd, file))) return;
|
|
90
|
+
pending = true;
|
|
91
|
+
if (running) return;
|
|
92
|
+
clearTimeout(timer);
|
|
93
|
+
timer = setTimeout(() => {
|
|
94
|
+
drain();
|
|
95
|
+
}, DEBOUNCE_MS);
|
|
96
|
+
}
|
|
97
|
+
function watchDir(dir, recursive, accept) {
|
|
98
|
+
try {
|
|
99
|
+
watchers.push(watch(dir, { recursive }, (_event, name) => {
|
|
100
|
+
if (name === null) {
|
|
101
|
+
changed(void 0);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
const file = resolve(dir, name);
|
|
105
|
+
if (accept(file)) changed(file);
|
|
106
|
+
}));
|
|
107
|
+
} catch {}
|
|
108
|
+
}
|
|
109
|
+
function startWatch() {
|
|
110
|
+
if (watchers.length > 0) return;
|
|
111
|
+
for (const dir of sources) watchDir(dir, true, () => true);
|
|
112
|
+
const loose = inputs.filter((file) => !within(sources, file));
|
|
113
|
+
const dirs = /* @__PURE__ */ new Set([cwd, ...loose.map((file) => dirname(file))]);
|
|
114
|
+
for (const dir of dirs) watchDir(dir, false, (file) => loose.includes(file) || dir === cwd && isConfigFile(basename(file)));
|
|
115
|
+
}
|
|
116
|
+
function close() {
|
|
117
|
+
clearTimeout(timer);
|
|
118
|
+
for (const watcher of watchers.splice(0)) watcher.close();
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
run,
|
|
122
|
+
changed,
|
|
123
|
+
watch: startWatch,
|
|
124
|
+
close
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
//#endregion
|
|
128
|
+
export { createCollectScheduler as n, report as r, collectOnce as t };
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { Tt as Snapshot, Yn as Decision } from "../policy-CFZAr_Al.js";
|
|
2
|
+
import { f as Permission, m as PermissionTree } from "../permissions-DttnqqxC.js";
|
|
3
|
+
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
4
|
+
//#region src/webmcp/types.d.ts
|
|
5
|
+
type WebMcpClientStatus = "ready" | "pending" | "stale" | "server-only";
|
|
6
|
+
type WebMcpPermDock = {
|
|
7
|
+
can(permission: Permission, data?: unknown): boolean;
|
|
8
|
+
decide(permission: Permission, data?: unknown): Decision;
|
|
9
|
+
snapshot(): Snapshot | string | Promise<Snapshot | string>;
|
|
10
|
+
tenant?(id: string): WebMcpPermDock;
|
|
11
|
+
subscribe?(listener: () => void): () => void;
|
|
12
|
+
status?(permission?: Permission, data?: unknown): WebMcpClientStatus;
|
|
13
|
+
};
|
|
14
|
+
type WebMcpToolContent = {
|
|
15
|
+
readonly type: "text";
|
|
16
|
+
readonly text: string;
|
|
17
|
+
};
|
|
18
|
+
type WebMcpToolResult = {
|
|
19
|
+
readonly isError?: boolean;
|
|
20
|
+
readonly content: readonly WebMcpToolContent[];
|
|
21
|
+
readonly structuredContent?: Readonly<Record<string, unknown>>;
|
|
22
|
+
};
|
|
23
|
+
type WebMcpToolCall = {
|
|
24
|
+
/** Validated arguments with the tenant key bound. */
|
|
25
|
+
readonly input: unknown;
|
|
26
|
+
/** The decision token; send it as `PermDock-Approval` so the server resumes. */
|
|
27
|
+
readonly token: string | undefined;
|
|
28
|
+
};
|
|
29
|
+
type WebMcpToolHandler = (call: WebMcpToolCall) => Promise<unknown>;
|
|
30
|
+
type WebMcpToolAnnotations = {
|
|
31
|
+
readonly readOnlyHint?: boolean;
|
|
32
|
+
readonly untrustedContentHint?: boolean;
|
|
33
|
+
};
|
|
34
|
+
type WebMcpRegisteredTool = {
|
|
35
|
+
readonly name: string;
|
|
36
|
+
readonly title?: string;
|
|
37
|
+
readonly description?: string;
|
|
38
|
+
readonly inputSchema?: Readonly<Record<string, unknown>>;
|
|
39
|
+
readonly annotations?: WebMcpToolAnnotations;
|
|
40
|
+
execute(input: unknown): Promise<WebMcpToolResult>;
|
|
41
|
+
};
|
|
42
|
+
type ModelContext = {
|
|
43
|
+
registerTool(tool: WebMcpRegisteredTool, options?: {
|
|
44
|
+
readonly signal?: AbortSignal;
|
|
45
|
+
}): {
|
|
46
|
+
readonly unregister?: () => void;
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
type WebMcpApprovalRequest = {
|
|
50
|
+
readonly permission: Permission;
|
|
51
|
+
readonly decision: Extract<Decision, {
|
|
52
|
+
readonly outcome: "approval-required";
|
|
53
|
+
}>;
|
|
54
|
+
readonly input: unknown;
|
|
55
|
+
};
|
|
56
|
+
type RegisterToolsOptions = {
|
|
57
|
+
readonly permdock: WebMcpPermDock;
|
|
58
|
+
readonly handlers?: Readonly<Record<string, WebMcpToolHandler>>;
|
|
59
|
+
readonly signal?: AbortSignal;
|
|
60
|
+
readonly tenant?: string;
|
|
61
|
+
readonly tenantKey?: string;
|
|
62
|
+
readonly schema?: StandardSchemaV1;
|
|
63
|
+
readonly untrustedContentHint?: boolean;
|
|
64
|
+
readonly onApprovalRequired?: (request: WebMcpApprovalRequest) => Promise<boolean | undefined>;
|
|
65
|
+
readonly warn?: (message: string) => void;
|
|
66
|
+
};
|
|
67
|
+
type RegisterToolsHandle = {
|
|
68
|
+
readonly unregister: () => void;
|
|
69
|
+
};
|
|
70
|
+
type PermissionGroup = PermissionTree | Permission;
|
|
71
|
+
//#endregion
|
|
72
|
+
//#region src/webmcp/register.d.ts
|
|
73
|
+
export declare function registerTools(modelContext: ModelContext | null | undefined, group: PermissionGroup, options: RegisterToolsOptions): RegisterToolsHandle;
|
|
74
|
+
//#endregion
|
|
75
|
+
export type { ModelContext, PermissionGroup, RegisterToolsHandle, RegisterToolsOptions, WebMcpApprovalRequest, WebMcpClientStatus, WebMcpPermDock, WebMcpRegisteredTool, WebMcpToolAnnotations, WebMcpToolCall, WebMcpToolHandler, WebMcpToolResult };
|