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,82 @@
|
|
|
1
|
+
import { C as Policy, D as PolicyVocabulary, Nr as Principal, Pr as Subject, ln as PermDock } from "../policy-CFZAr_Al.js";
|
|
2
|
+
import { f as Permission } from "../permissions-DttnqqxC.js";
|
|
3
|
+
import { t as InstanceOptions } from "../instance-options-BK_rNOSC.js";
|
|
4
|
+
import { n as OpenApiHooks } from "../create-BWyx3jua.js";
|
|
5
|
+
import { n as ServerAdapterServices } from "../bind-CVy3Espv.js";
|
|
6
|
+
import { Middleware } from "@supabase/middleware";
|
|
7
|
+
//#region src/supabase/middleware.d.ts
|
|
8
|
+
/**
|
|
9
|
+
* The verified Supabase Auth access-token payload as `@supabase/server`
|
|
10
|
+
* contributes it under `ctx.jwtClaims`. Structural, so the `JWTClaims`
|
|
11
|
+
* interface from `@supabase/server` satisfies it without an import.
|
|
12
|
+
*/
|
|
13
|
+
export type SupabaseJwtClaims = {
|
|
14
|
+
readonly sub: string;
|
|
15
|
+
readonly iss?: string;
|
|
16
|
+
readonly aud?: string | readonly string[];
|
|
17
|
+
readonly exp?: number;
|
|
18
|
+
readonly iat?: number;
|
|
19
|
+
readonly role?: string;
|
|
20
|
+
readonly email?: string;
|
|
21
|
+
readonly app_metadata?: Readonly<Record<string, unknown>>;
|
|
22
|
+
readonly user_metadata?: Readonly<Record<string, unknown>>;
|
|
23
|
+
readonly [claim: string]: unknown;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* What `withPermDock` requires upstream: a `jwtClaims` contribution. Supabase's
|
|
27
|
+
* `withClaims`, `withRequiredClaims` and `withSupabase` all provide it; `null`
|
|
28
|
+
* is the anonymous caller (no bearer token or an `sb_*` API key), unless
|
|
29
|
+
* `secretKeys` names the secret key `withSupabase` matched.
|
|
30
|
+
*/
|
|
31
|
+
export type SupabaseMiddlewareContext = {
|
|
32
|
+
readonly jwtClaims: SupabaseJwtClaims | null;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* A Supabase secret key that acts as a tenant service principal. `id` is the
|
|
36
|
+
* principal id, `roles` are held in `tenant` only, and `permissions` caps
|
|
37
|
+
* what the key may do, as a `service` credential does.
|
|
38
|
+
*/
|
|
39
|
+
export type SupabaseSecretKey = {
|
|
40
|
+
readonly id: string;
|
|
41
|
+
readonly tenant: string;
|
|
42
|
+
readonly roles: readonly string[];
|
|
43
|
+
readonly permissions: readonly Permission[];
|
|
44
|
+
};
|
|
45
|
+
export type SupabaseMiddlewarePermDockOptions<TUser = unknown> = InstanceOptions & ServerAdapterServices & {
|
|
46
|
+
/**
|
|
47
|
+
* Named secret keys (`SUPABASE_SECRET_KEYS`) that act as service
|
|
48
|
+
* principals when `withSupabase` matched one (`authMode: 'secret'` with
|
|
49
|
+
* that `authKeyName`). Any other key, an unnamed `secret` and every
|
|
50
|
+
* `publishable` key stay anonymous.
|
|
51
|
+
*/
|
|
52
|
+
readonly secretKeys?: Readonly<Record<string, SupabaseSecretKey>>;
|
|
53
|
+
readonly subject: (ctx: SupabaseMiddlewareContext, request: Request) => TUser | Subject | null | Promise<TUser | Subject | null>;
|
|
54
|
+
readonly tenant?: string | ((ctx: SupabaseMiddlewareContext, request: Request) => string | undefined | Promise<string | undefined>);
|
|
55
|
+
};
|
|
56
|
+
export type WithPermDockConfig = {
|
|
57
|
+
/** Run `protect` before the handler; a denial short-circuits with Problem Details. */
|
|
58
|
+
readonly protect?: Permission;
|
|
59
|
+
/**
|
|
60
|
+
* The OAuth scopes that reach the handler: a delegated token holding none
|
|
61
|
+
* of them is refused with `insufficient_scope`. Without `protect`, the
|
|
62
|
+
* handler needs a signed-in principal and checks no permission.
|
|
63
|
+
*/
|
|
64
|
+
readonly oauthScopes?: readonly string[];
|
|
65
|
+
/** Load the row `protect` decides on; `null` or `undefined` yields 404. */
|
|
66
|
+
readonly data?: (ctx: SupabaseMiddlewareContext, request: Request) => unknown;
|
|
67
|
+
/** `true` when `data` returns a row the server loaded; anything else is validated before the check. */
|
|
68
|
+
readonly trusted?: boolean;
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* A terminal pipeline handler. Generic over the accumulated context so
|
|
72
|
+
* `pipeline([withClaims()], permdockHandler())` infers without a wrapping
|
|
73
|
+
* lambda; the constraint still requires an upstream `jwtClaims` contribution.
|
|
74
|
+
*/
|
|
75
|
+
export type SupabaseMiddlewareHandler = <Ctx extends SupabaseMiddlewareContext>(request: Request, ctx: Ctx) => Promise<Response>;
|
|
76
|
+
export type SupabaseMiddlewarePermDock<V extends PolicyVocabulary = PolicyVocabulary> = {
|
|
77
|
+
readonly withPermDock: Middleware<"permdock", WithPermDockConfig | undefined, SupabaseMiddlewareContext, PermDock<V>>;
|
|
78
|
+
readonly permdockHandler: () => SupabaseMiddlewareHandler;
|
|
79
|
+
readonly openapi: OpenApiHooks;
|
|
80
|
+
};
|
|
81
|
+
export declare function createPermDock<TUser, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, options: SupabaseMiddlewarePermDockOptions<TUser>): SupabaseMiddlewarePermDock<V>;
|
|
82
|
+
//#endregion
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { t as compact } from "../compact-y6vfu2_f.js";
|
|
2
|
+
import { r as credentialSubject } from "../credential-8P81ff4u.js";
|
|
3
|
+
import { i as methodNotAllowed } from "../problem-B43ztKIm.js";
|
|
4
|
+
import { t as instanceOptions } from "../instance-options-Dhhcnm3y.js";
|
|
5
|
+
import { n as createServerKernel } from "../create-CPhDL6qx.js";
|
|
6
|
+
import { n as attached } from "../bind-VnYn2HKq.js";
|
|
7
|
+
import { defineMiddleware } from "@supabase/middleware";
|
|
8
|
+
//#region src/supabase/middleware.ts
|
|
9
|
+
const SECRET_KEY_NAME = /^[A-Za-z0-9_-]+$/u;
|
|
10
|
+
function secretKeySubjects(keys, permissions) {
|
|
11
|
+
const subjects = /* @__PURE__ */ new Map();
|
|
12
|
+
for (const [name, key] of Object.entries(keys ?? {})) {
|
|
13
|
+
if (!SECRET_KEY_NAME.test(name)) throw new Error(`PermDock: secretKeys name '${name}' must be a key name from SUPABASE_SECRET_KEYS, not a pattern`);
|
|
14
|
+
if (key.id === "" || key.tenant === "") throw new Error(`PermDock: secretKeys.${name} needs a non-empty id and tenant`);
|
|
15
|
+
const credential = {
|
|
16
|
+
v: 1,
|
|
17
|
+
id: `supabase-secret:${name}`,
|
|
18
|
+
kind: "service",
|
|
19
|
+
principal: key.id,
|
|
20
|
+
tenant: key.tenant,
|
|
21
|
+
roles: [...key.roles],
|
|
22
|
+
permissions: key.permissions.map((permission) => ({ permission: permission.key })),
|
|
23
|
+
createdBy: key.id,
|
|
24
|
+
createdAt: 0,
|
|
25
|
+
name
|
|
26
|
+
};
|
|
27
|
+
subjects.set(name, credentialSubject(credential, { permissions }));
|
|
28
|
+
}
|
|
29
|
+
return subjects;
|
|
30
|
+
}
|
|
31
|
+
function readString(ctx, key) {
|
|
32
|
+
const value = Reflect.get(ctx, key);
|
|
33
|
+
return typeof value === "string" ? value : void 0;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* `authMode` and `authKeyName` are optional upstream contributions (only
|
|
37
|
+
* `withSupabase` makes them), so they are read here instead of being part of
|
|
38
|
+
* the entry's declared prerequisites.
|
|
39
|
+
*/
|
|
40
|
+
function secretKeySubject(subjects, ctx) {
|
|
41
|
+
if (subjects.size === 0 || ctx.jwtClaims !== null || readString(ctx, "authMode") !== "secret") return;
|
|
42
|
+
const name = readString(ctx, "authKeyName");
|
|
43
|
+
return name === void 0 ? void 0 : subjects.get(name);
|
|
44
|
+
}
|
|
45
|
+
function createPermDock(policy, options) {
|
|
46
|
+
const contexts = /* @__PURE__ */ new WeakMap();
|
|
47
|
+
const tenantOption = options.tenant;
|
|
48
|
+
const contextFor = (request) => contexts.get(request) ?? { jwtClaims: null };
|
|
49
|
+
const secretKeys = secretKeySubjects(options.secretKeys, policy.permissions);
|
|
50
|
+
const kernel = createServerKernel(policy, compact({
|
|
51
|
+
subject: (request) => {
|
|
52
|
+
const ctx = contextFor(request);
|
|
53
|
+
return secretKeySubject(secretKeys, ctx) ?? options.subject(ctx, request);
|
|
54
|
+
},
|
|
55
|
+
tenant: typeof tenantOption === "function" ? (request) => tenantOption(contextFor(request), request) : tenantOption,
|
|
56
|
+
...instanceOptions(options),
|
|
57
|
+
store: options.store,
|
|
58
|
+
pdp: options.pdp,
|
|
59
|
+
webBotAuth: options.webBotAuth,
|
|
60
|
+
adapter: "supabase-middleware",
|
|
61
|
+
wrap: options.otel
|
|
62
|
+
}));
|
|
63
|
+
const bind = (request, ctx) => {
|
|
64
|
+
contexts.set(request, ctx);
|
|
65
|
+
return request;
|
|
66
|
+
};
|
|
67
|
+
const withPermDock = defineMiddleware({
|
|
68
|
+
key: "permdock",
|
|
69
|
+
run: (config) => async (request, ctx) => {
|
|
70
|
+
bind(request, ctx);
|
|
71
|
+
if (config?.protect === void 0 && config?.oauthScopes === void 0) {
|
|
72
|
+
const instance = await attached(() => kernel.permdock(request));
|
|
73
|
+
return instance.ok ? { permdock: instance.permdock } : instance.response;
|
|
74
|
+
}
|
|
75
|
+
const loadData = config.data;
|
|
76
|
+
const guard = await kernel.protect(config.protect ?? null, loadData === void 0 ? void 0 : () => loadData(ctx, request), compact({
|
|
77
|
+
trusted: config.trusted,
|
|
78
|
+
oauthScopes: config.oauthScopes
|
|
79
|
+
}))(request);
|
|
80
|
+
if (!guard.ok) return guard.response;
|
|
81
|
+
return { permdock: guard.permdock };
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
const permdockHandler = () => {
|
|
85
|
+
const { POST, GET } = kernel.permdockHandler();
|
|
86
|
+
return (request, ctx) => {
|
|
87
|
+
bind(request, ctx);
|
|
88
|
+
switch (request.method) {
|
|
89
|
+
case "POST": return POST(request);
|
|
90
|
+
case "GET": return GET(request);
|
|
91
|
+
default: return Promise.resolve(methodNotAllowed("GET, POST"));
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
};
|
|
95
|
+
return {
|
|
96
|
+
withPermDock,
|
|
97
|
+
permdockHandler,
|
|
98
|
+
openapi: kernel.openapi
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
//#endregion
|
|
102
|
+
export { createPermDock };
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { i as globalArgs, s as stringArg, t as COMMAND_DESCRIPTIONS } from "./commands-DWOrSQic.js";
|
|
2
|
+
import { defineCommand } from "citty";
|
|
3
|
+
//#region src/cli/commands/supabase.ts
|
|
4
|
+
function supabase(ctx) {
|
|
5
|
+
return defineCommand({
|
|
6
|
+
meta: {
|
|
7
|
+
name: "supabase",
|
|
8
|
+
description: COMMAND_DESCRIPTIONS.supabase
|
|
9
|
+
},
|
|
10
|
+
args: {
|
|
11
|
+
...globalArgs,
|
|
12
|
+
area: {
|
|
13
|
+
type: "positional",
|
|
14
|
+
required: false,
|
|
15
|
+
description: "hook or inspect"
|
|
16
|
+
},
|
|
17
|
+
verb: {
|
|
18
|
+
type: "positional",
|
|
19
|
+
required: false,
|
|
20
|
+
description: "hook: generate"
|
|
21
|
+
},
|
|
22
|
+
out: {
|
|
23
|
+
type: "string",
|
|
24
|
+
description: "File to write; a bare --out on inspect writes permdock.manifest.json",
|
|
25
|
+
valueHint: "file"
|
|
26
|
+
},
|
|
27
|
+
check: {
|
|
28
|
+
type: "boolean",
|
|
29
|
+
description: "Exit 1 when the file on disk is stale; write nothing"
|
|
30
|
+
},
|
|
31
|
+
db: {
|
|
32
|
+
type: "string",
|
|
33
|
+
description: "Postgres connection string",
|
|
34
|
+
valueHint: "url"
|
|
35
|
+
},
|
|
36
|
+
"active-from": {
|
|
37
|
+
type: "string",
|
|
38
|
+
description: "Where the hook reads the active tenant",
|
|
39
|
+
valueHint: "source"
|
|
40
|
+
},
|
|
41
|
+
budget: {
|
|
42
|
+
type: "string",
|
|
43
|
+
description: "Byte budget for the memberships claim",
|
|
44
|
+
valueHint: "bytes"
|
|
45
|
+
},
|
|
46
|
+
schema: {
|
|
47
|
+
type: "string",
|
|
48
|
+
description: "Schema for the hook function",
|
|
49
|
+
valueHint: "name"
|
|
50
|
+
},
|
|
51
|
+
"grants-out": {
|
|
52
|
+
type: "string",
|
|
53
|
+
description: "File for the privileges db diff drops",
|
|
54
|
+
valueHint: "file"
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
async run({ args: parsed }) {
|
|
58
|
+
const out = parsed.out === "" ? true : stringArg(parsed.out);
|
|
59
|
+
const db = stringArg(parsed.db);
|
|
60
|
+
const activeFrom = stringArg(parsed["active-from"]);
|
|
61
|
+
const budget = stringArg(parsed.budget);
|
|
62
|
+
const schema = stringArg(parsed.schema);
|
|
63
|
+
const grantsOut = stringArg(parsed["grants-out"]);
|
|
64
|
+
const { runSupabase } = await import("./supabase-hook-D5qVd_D8.js");
|
|
65
|
+
ctx.report(await runSupabase({
|
|
66
|
+
cwd: ctx.cwd,
|
|
67
|
+
config: ctx.config,
|
|
68
|
+
rest: parsed._,
|
|
69
|
+
check: parsed.check === true,
|
|
70
|
+
json: ctx.json,
|
|
71
|
+
io: ctx.io,
|
|
72
|
+
...out === void 0 ? {} : { out },
|
|
73
|
+
...db === void 0 ? {} : { db },
|
|
74
|
+
...activeFrom === void 0 ? {} : { activeFrom },
|
|
75
|
+
...budget === void 0 ? {} : { budget },
|
|
76
|
+
...schema === void 0 ? {} : { schema },
|
|
77
|
+
...grantsOut === void 0 ? {} : { grantsOut }
|
|
78
|
+
}));
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
//#endregion
|
|
83
|
+
export { supabase };
|