permdock 0.1.0 → 0.3.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 +106 -47
- package/dist/a2a/index.d.ts +7 -16
- package/dist/a2a/index.js +59 -98
- package/dist/adapter-context-mlWsVGGg.js +23 -0
- package/dist/ai-sdk/index.d.ts +37 -16
- package/dist/ai-sdk/index.js +30 -13
- package/dist/approvals/index.d.ts +3 -3
- package/dist/approvals/index.js +5 -4
- package/dist/{approvals-DaxY-Bdg.js → approvals-DbYAuNkG.js} +17 -11
- package/dist/approvers-DT4AVyIg.js +52 -0
- package/dist/{arazzo-CTeVuXr5.js → arazzo-BAgw9ap6.js} +2 -2
- package/dist/{arazzo-aoTkqYsJ.js → arazzo-CKwwqFWz.js} +2 -2
- package/dist/authzen/index.d.ts +4 -13
- package/dist/authzen/index.js +16 -50
- package/dist/better-auth/index.d.ts +20 -3
- package/dist/better-auth/index.js +27 -7
- package/dist/better-supabase/index.d.ts +223 -0
- package/dist/better-supabase/index.js +648 -0
- package/dist/bind-C_ob3LKa.d.ts +25 -0
- package/dist/bind-CuzGytRf.js +97 -0
- package/dist/boundary-BM8a_P6E.js +13 -0
- package/dist/boundary-BmHxVH1J.d.ts +15 -0
- package/dist/canonical-json-DemiK4Vp.js +26 -0
- package/dist/{capability-BDG_nkxt.d.ts → capability-2kYTMWDv.d.ts} +2 -2
- package/dist/{capability-B68OFnZx.js → capability-4qPdO9gk.js} +7 -5
- package/dist/catalog/index.d.ts +1 -1
- package/dist/catalog/index.js +1 -1
- package/dist/catalog-CRW5Mx_B.js +2 -0
- package/dist/{catalog-H-vFGwWK.js → catalog-DWF5cYqB.js} +4 -4
- package/dist/{catalog-B0E6bggc.js → catalog-dFZdWCGN.js} +2 -2
- package/dist/{catalog-doc-BSo_Q_-6.js → catalog-doc-DdGm82XT.js} +20 -32
- package/dist/claude-agent/index.d.ts +5 -14
- package/dist/claude-agent/index.js +4 -10
- package/dist/clerk/index.d.ts +12 -3
- package/dist/clerk/index.js +26 -5
- package/dist/cli/bin.js +1 -1
- package/dist/cli/index.d.ts +3 -3
- package/dist/cli/index.js +2 -2
- package/dist/clients-C7zLFuWT.d.ts +12 -0
- package/dist/clients-DjU5ABMy.js +23 -0
- package/dist/cloud/index.d.ts +4 -5
- package/dist/cloud/index.js +20 -6
- package/dist/{cloud-BNQTrmrr.js → cloud-CB_ELYuX.js} +2 -2
- package/dist/{cloud-Cuxr6Czw.js → cloud-DWLXO2af.js} +7 -6
- package/dist/collect-DClJsheJ.js +83 -0
- package/dist/{collect-O-tOtbnk.js → collect-DSTE3ml9.js} +194 -42
- package/dist/collect-DSWOk19R.js +2 -0
- package/dist/{commands-BMh_Etm2.js → commands-DSxCqG9A.js} +16 -12
- package/dist/compile/index.d.ts +3 -0
- package/dist/compile/index.js +2 -0
- package/dist/{compile-D22iwvuV.js → compile-Ba4blROR.js} +85 -30
- package/dist/compile-BkRyBDBw.d.ts +94 -0
- package/dist/config-BJiM-xAm.js +157 -0
- package/dist/config-Dnszbv-6.js +36 -0
- package/dist/config-report-DMvWKUxL.js +44 -0
- package/dist/{connection-JvqwHODC.js → connection-CU8MQxRi.js} +1 -1
- package/dist/{context-CKEAabd7.js → context-Bcy85rGi.js} +36 -27
- package/dist/convex/index.d.ts +9 -4
- package/dist/convex/index.js +14 -4
- package/dist/create-B1d519XK.d.ts +245 -0
- package/dist/create-CMwIl-w2.js +253 -0
- package/dist/{credential-B_rkUNlY.js → credential-8P81ff4u.js} +26 -46
- package/dist/delegation-D8pUEuce.js +103 -0
- package/dist/{describe-Bt1YD5uS.js → describe-B_gVZEVi.js} +10 -15
- package/dist/{describe-DernyItf.d.ts → describe-DMYiCjJV.d.ts} +9 -10
- package/dist/{diff-x5Il8LVa.js → diff-2VaeChzX.js} +44 -11
- package/dist/{diff-BUzf5Poi.js → diff-DBIhz_f2.js} +2 -2
- package/dist/{doctor-Bqo6FwUa.js → doctor-BwCAMLx_.js} +2 -2
- package/dist/doctor-collect-CHk6XWOA.js +665 -0
- package/dist/doctor-igIiM_Hl.js +1194 -0
- package/dist/drizzle/index.d.ts +4 -3
- package/dist/drizzle/index.js +3 -3
- package/dist/elysia/index.d.ts +6 -28
- package/dist/elysia/index.js +16 -60
- package/dist/{errors-DSMnAVNa.js → errors-CWfoNg9N.js} +8 -4
- package/dist/{errors-Iy71s7Oj.js → errors-Cz5zn0mW.js} +17 -71
- package/dist/{errors-DbZ1YOnb.d.ts → errors-DPdqI50v.d.ts} +8 -21
- package/dist/{errors-m3u9TmDu.js → errors-DRnGZHzF.js} +4 -1
- package/dist/evaluation-items-CfCCejQd.js +40 -0
- package/dist/{evaluations-DsAU9ppl.js → evaluations-tz6D9A2G.js} +28 -46
- package/dist/eve/index.d.ts +6 -15
- package/dist/eve/index.js +7 -12
- package/dist/expiry-BoBJ8Tvc.js +7 -0
- package/dist/express/index.d.ts +6 -29
- package/dist/express/index.js +28 -58
- package/dist/fastify/index.d.ts +6 -29
- package/dist/fastify/index.js +16 -65
- package/dist/fields-BMl1RxoX.js +26 -0
- package/dist/{files-B_wAGYmt.js → files-DWUN9PzI.js} +5 -1
- package/dist/{fixtures-Cvaw0gDG.js → fixtures-ht28Cplr.js} +5 -2
- package/dist/{freeze-y1_jQL4v.js → freeze-CrU8nQeX.js} +31 -2
- package/dist/{from-snapshot-BMGnhmgv.js → from-snapshot-CTLijvdm.js} +66 -48
- package/dist/{grantee-Bv04_Vzf.js → grantee-Cv5Sogfv.js} +88 -7
- package/dist/graph-sql-B-dsAT6j.d.ts +29 -0
- package/dist/{headers-B5RRv3Xm.js → headers-BZSDieNT.js} +1 -1
- package/dist/{headers-C8SHQccD.d.ts → headers-Cf-zWvsO.d.ts} +1 -1
- package/dist/helpers-H_KARDVC.js +421 -0
- package/dist/hono/index.d.ts +6 -28
- package/dist/hono/index.js +11 -43
- package/dist/{hosted-BwKQ1BTA.js → hosted-DJQw46hn.js} +6 -5
- package/dist/{http-GgVApX1k.js → http-BIhmLfCc.js} +4 -20
- package/dist/http-SO7qGttf.js +44 -0
- package/dist/ids-DC4V4CFu.js +18 -0
- package/dist/index-0nNqHspG.d.ts +6 -0
- package/dist/{index-xIxJLwOQ.d.ts → index-BNc7Wer_.d.ts} +75 -7
- package/dist/{index-CltcQ4Bf.d.ts → index-C7Tw7MaW.d.ts} +68 -5
- package/dist/{index-LF_hS-yn.d.ts → index-C8z4RjQV.d.ts} +1 -1
- package/dist/index.d.ts +14 -9
- package/dist/index.js +22 -17
- package/dist/instance-options-Dhhcnm3y.js +22 -0
- package/dist/instance-options-jARdwfPN.d.ts +11 -0
- package/dist/{parse-DPfIvFMU.js → json-schema-BsAflUGW.js} +28 -57
- package/dist/jwt/index.d.ts +10 -6
- package/dist/jwt/index.js +32 -13
- package/dist/kernel-_RRHmnMY.js +208 -0
- package/dist/kysely/index.d.ts +4 -3
- package/dist/kysely/index.js +3 -3
- package/dist/live-options-H2eG8dfJ.js +60 -0
- package/dist/{load-BZ24CpZP.js → load-DhWEB9P1.js} +16 -10
- package/dist/load-DwJUafYN.js +2 -0
- package/dist/manifest-iaoBXHKc.js +783 -0
- package/dist/manifest-uDS9y5de.d.ts +206 -0
- package/dist/{map-DowSO96j.js → map-AcxK9o_D.js} +4 -15
- package/dist/{map-claims-B_6I1Rn-.js → map-claims-Z4QZOiFF.js} +13 -4
- package/dist/map-error-pgUWNNtG.js +23 -0
- package/dist/may-use-DndQ5tQ-.js +77 -0
- package/dist/mcp/index.d.ts +54 -22
- package/dist/mcp/index.js +218 -178
- package/dist/nest/index.d.ts +26 -31
- package/dist/nest/index.js +75 -84
- package/dist/next/client.d.ts +7 -8
- package/dist/next/client.js +11 -9
- package/dist/next/index.d.ts +30 -47
- package/dist/next/index.js +45 -60
- package/dist/next/plugin.d.ts +1 -1
- package/dist/next/plugin.js +32 -1
- package/dist/node/index.d.ts +9 -28
- package/dist/node/index.js +11 -43
- package/dist/openai/index.d.ts +6 -15
- package/dist/openai/index.js +7 -20
- package/dist/openapi/index.d.ts +87 -4
- package/dist/openapi/index.js +3 -3
- package/dist/{openapi-DcqM8nU7.js → openapi-BqRBvAng.js} +237 -5
- package/dist/{openapi-DWD0Uc_4.js → openapi-CqqEbHsL.js} +5 -5
- package/dist/{openapi-import-BWRUNNeW.js → openapi-import-cmwetbzw.js} +1 -1
- package/dist/{openapi-CwePaF7C.js → openapi-l0xYHkcv.js} +3 -3
- package/dist/{openapi-schema-D8j_T9tO.js → openapi-schema--ARjyfQr.js} +2 -2
- package/dist/orpc/index.d.ts +15 -28
- package/dist/orpc/index.js +74 -117
- package/dist/otel/index.d.ts +2 -2
- package/dist/parse-BuyjxhZV.js +53 -0
- package/dist/parse-local-manifest-BrMozJCo.js +36 -0
- package/dist/parse-local-manifest-JLnaBH0S.d.ts +10 -0
- package/dist/pdp/index.d.ts +2 -2
- package/dist/pdp/index.js +14 -127
- package/dist/{permdock-yoZ7EjxX.js → permdock-CbgvLnuo.js} +672 -149
- package/dist/{permissions-B8vCg_bI.d.ts → permissions-CDgvKG5L.d.ts} +2 -2
- package/dist/{permissions-DC7GROPA.js → permissions-DVoF6dMt.js} +77 -15
- package/dist/{permissions-B4apnahQ.d.ts → permissions-DttnqqxC.d.ts} +34 -5
- package/dist/{permissions-CofRqesP.js → permissions-RJrovw98.js} +3 -3
- package/dist/{pins-CqE1jZuF.js → pins-8ILTftC9.js} +2 -2
- package/dist/{policy-Cq2fB8Q5.d.ts → policy-D2W7uv19.d.ts} +2 -2
- package/dist/{policy-CInmNGkM.d.ts → policy-IB6yxpC3.d.ts} +351 -42
- package/dist/{policy-ANp36PnI.js → policy-xyWg7QdR.js} +173 -22
- package/dist/powersync-BylawD_U.js +540 -0
- package/dist/powersync-DliZK_-y.js +62 -0
- package/dist/powersync-e_AZrKbg.js +2 -0
- package/dist/prisma/index.d.ts +3 -2
- package/dist/prisma/index.js +45 -20
- package/dist/{problem-Cgp9-KZA.js → problem-B43ztKIm.js} +74 -109
- package/dist/problem-details-DX075l9V.d.ts +7 -0
- package/dist/problem-details-_AMOYz-w.js +144 -0
- package/dist/{protected-BuPAycJT.d.ts → protected-BdnIEFkY.d.ts} +5 -4
- package/dist/protected-utU-SLuy.js +100 -0
- package/dist/protected-xAr24FEC.d.ts +40 -0
- package/dist/provider-CSQd7m92.js +52 -0
- package/dist/{provider-wTAUda2v.d.ts → provider-DZY281jO.d.ts} +1 -1
- package/dist/provider-store-Cfbvo4DE.js +43 -0
- package/dist/react/index.d.ts +7 -5
- package/dist/react/index.js +5 -4
- package/dist/react/provider-client.d.ts +1 -1
- package/dist/react/provider-client.js +1 -1
- package/dist/react-native/index.d.ts +166 -10
- package/dist/react-native/index.js +607 -85
- package/dist/{refs-ChLSxbST.js → refs-KYb4ntaz.js} +4 -3
- package/dist/{relations-r4soIFZB.js → relations-cjOL01hZ.js} +110 -31
- package/dist/replay-BsOyTrdV.js +28 -0
- package/dist/replay-CYyiLiwO.d.ts +5 -0
- package/dist/resource-ref-CaS9yVPi.js +20 -0
- package/dist/revocations-Bhr0aMIC.js +27 -0
- package/dist/{rls-BOFU3chG.js → rls-B4ur8nKQ.js} +8 -3
- package/dist/rls-DQtdgTHB.js +2521 -0
- package/dist/rls-fields-74oZPXWL.js +3582 -0
- package/dist/{rls-graph-DxQ39PJj.js → rls-graph-CHwx0V8q.js} +100 -36
- package/dist/{rls-import-CXV6LBlS.js → rls-import-BTFVk3jH.js} +7 -6
- package/dist/{rls-migrate-DrFPbf8p.js → rls-migrate-CN4TlJTO.js} +6 -5
- package/dist/rls-ownership-RuFqaqGz.js +843 -0
- package/dist/rls-shared-Cewd_-zI.js +495 -0
- package/dist/rls-verify-CVQTHTh5.js +746 -0
- package/dist/{row-check-BajTgQZ-.d.ts → row-check-Dt35czLy.d.ts} +12 -15
- package/dist/row-conditions-h2HythXQ.js +27 -0
- package/dist/rpc-DL9Sqvb1.js +89 -0
- package/dist/{run-CJ6UvS3a.js → run-DKDbM4Du.js} +31 -12
- package/dist/runtime-CB8gQFvS.js +11 -0
- package/dist/{saas-BRrZzJkM.js → saas-DhpJjnBA.js} +17 -7
- package/dist/{schema-P8yoma__.js → schema-D3MnDMxa.js} +8 -4
- package/dist/scim/index.d.ts +1 -1
- package/dist/scim/index.js +1 -1
- package/dist/{scim-9NFa0XVZ.js → scim-BFGBBAqR.js} +1 -1
- package/dist/{scopes-cKVp_WTw.js → scopes-CVdPrWN-.js} +35 -8
- package/dist/server/index.d.ts +22 -11
- package/dist/server/index.js +11 -8
- package/dist/{credentials-BgRX3WEg.js → server-DlZ28Oz5.js} +1 -1
- package/dist/shared-DRu8VFVM.js +123 -0
- package/dist/{sink-Cfr9-7YC.d.ts → sink-B1fZzIMf.d.ts} +1 -1
- package/dist/skills-Biq5uup3.js +192 -0
- package/dist/{skills-C_lpV4Jx.js → skills-Bx-U0irG.js} +10 -4
- package/dist/{snapshot-DE8dE_hz.js → snapshot-Enxd0n-s.js} +138 -214
- package/dist/snapshot-cache-B-LxUahj.d.ts +45 -0
- package/dist/snapshot-cache-D6jLelln.js +44 -0
- package/dist/solid/index.d.ts +39 -9
- package/dist/solid/index.js +76 -85
- package/dist/sources-4p0-4xQm.js +545 -0
- package/dist/sources-BdOYLw9j.d.ts +192 -0
- package/dist/{sql-Bll1d7y0.js → sql-xdg5f4Fi.js} +6 -1
- package/dist/{src-CTNT-PBW.js → src-BDwEZWrZ.js} +149 -11
- package/dist/ssf/index.d.ts +3 -2
- package/dist/ssf/index.js +3 -29
- package/dist/store-DMAWwAJV.js +371 -0
- package/dist/{store-Bq90395i.d.ts → store-jOBYpiXC.d.ts} +13 -4
- package/dist/store-options-ByhZq1jV.js +716 -0
- package/dist/{stores-CkG2HrSg.js → stores-BT2pSCub.js} +10 -63
- package/dist/{stores-CvOnu_2T.d.ts → stores-C0IMQrGI.d.ts} +20 -9
- package/dist/{stream-BhMfZOwr.d.ts → stream-D1RXubw2.d.ts} +2 -2
- package/dist/{stream-Q_xlB6Ko.js → stream-DDpvynSB.js} +16 -2
- package/dist/subject-settings-BwBmCdTR.js +128 -0
- package/dist/supabase/index.d.ts +133 -6
- package/dist/supabase/index.js +4 -3
- package/dist/supabase/middleware.d.ts +32 -27
- package/dist/supabase/middleware.js +56 -22
- package/dist/{supabase-D8UlBA7Z.js → supabase-Boqb9a_Y.js} +3 -3
- package/dist/{supabase-DTxGtYdi.js → supabase-C0qESOa-.js} +347 -367
- package/dist/supabase-config-BpPXt3x1.js +472 -0
- package/dist/supabase-hook-6sYLXg_u.js +2 -0
- package/dist/{supabase-hook-D_OqGb_V.js → supabase-hook-CSLQ4zJ3.js} +1037 -705
- package/dist/supautils-Cn4R4cJ4.js +91 -0
- package/dist/svelte/PermissionBoundary.svelte +37 -0
- package/dist/svelte/Protected.svelte +8 -2
- package/dist/svelte/index.d.ts +9 -6
- package/dist/svelte/index.js +61 -7
- package/dist/svelte/runtime.d.ts +4 -3
- package/dist/svelte/runtime.js +4 -3
- package/dist/svelte/source.d.ts +9 -6
- package/dist/svelte/source.js +7 -4
- package/dist/terminal/index.d.ts +6 -14
- package/dist/terminal/index.js +44 -32
- package/dist/testing/index.d.ts +105 -16
- package/dist/testing/index.js +504 -40
- package/dist/testing/saas/index.d.ts +4 -4
- package/dist/testing/saas/index.js +2 -2
- package/dist/testing/saas/permissions.d.ts +1 -1
- package/dist/testing/saas/permissions.js +1 -1
- package/dist/token-CIWxJOCh.js +50 -0
- package/dist/trpc/index.d.ts +7 -26
- package/dist/trpc/index.js +17 -100
- package/dist/types-BnIEz1sU.d.ts +48 -0
- package/dist/{types-CxquUByI.d.ts → types-Bvc4oWT6.d.ts} +1 -1
- package/dist/{sources-DOpW5Ila.d.ts → types-C97IskBw.d.ts} +86 -127
- package/dist/types-CKNSyIf_.d.ts +52 -0
- package/dist/types-Cq_H8N_X.d.ts +197 -0
- package/dist/{types-D6Z6-rKJ.d.ts → types-DbjRN55U.d.ts} +273 -22
- package/dist/{types-BBK-exvJ.d.ts → types-Dnemwd77.d.ts} +7 -1
- package/dist/{types-BvBk1wgn.d.ts → types-DxiCGmmd.d.ts} +5 -3
- package/dist/{types-B9dmiiab.d.ts → types-QCuYJh4q.d.ts} +1 -1
- package/dist/{types-B8w5PFtS.d.ts → types-aqOHTHcp.d.ts} +17 -1
- package/dist/unplugin/index.d.ts +1 -1
- package/dist/unplugin/index.js +10 -9
- package/dist/usage-DorAJiU_.js +2 -0
- package/dist/{usage-1ozMubLY.js → usage-GTixvDDU.js} +2 -2
- package/dist/{usage-CUnK6Ou9.js → usage-ItS7nLcl.js} +225 -62
- package/dist/validation-error-Ba264OaJ.d.ts +26 -0
- package/dist/validation-error-CnjZ4t92.js +33 -0
- package/dist/{validity-D0uRmJKJ.js → validity-uOp8UpYn.js} +57 -36
- package/dist/{verifier-B90agnhl.js → verifier-BxBo6I44.js} +10 -5
- package/dist/version-BvacVTZR.js +17 -0
- package/dist/views-Soe7bGSC.js +95 -0
- package/dist/{vocabulary-Dk0fs-Jk.d.ts → vocabulary-DA8a8zif.d.ts} +1 -1
- package/dist/vue/index.d.ts +35 -13
- package/dist/vue/index.js +86 -93
- package/dist/watch-BwxLTYMZ.js +2 -0
- package/dist/watch-DVBJ9cBq.js +128 -0
- package/dist/webmcp/index.d.ts +2 -2
- package/dist/webmcp/index.js +7 -13
- package/package.json +62 -36
- package/schemas/approval-request-v1.json +175 -0
- package/schemas/catalog-v1.json +29 -1
- package/schemas/supabase-claims-v1.json +6 -1
- package/schemas/supabase-manifest-v1.json +150 -6
- package/skills/permdock/SKILL.md +7 -7
- package/skills/permdock-agents/SKILL.md +5 -5
- package/skills/permdock-agents/references/runtimes.md +12 -10
- package/skills/permdock-approvals/SKILL.md +4 -4
- package/skills/permdock-approvals/references/stores-and-resume.md +15 -4
- package/skills/permdock-audit/SKILL.md +3 -3
- package/skills/permdock-credentials/SKILL.md +4 -4
- package/skills/permdock-credentials/references/tokens-keys-links.md +7 -2
- package/skills/permdock-data/SKILL.md +4 -4
- package/skills/permdock-data/references/queries-and-rls.md +14 -6
- package/skills/permdock-data/references/relationships.md +5 -3
- package/skills/permdock-tenancy/SKILL.md +9 -6
- package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +14 -8
- package/skills/permdock-wire/SKILL.md +4 -4
- package/skills/permdock-wire/references/adapters.md +42 -30
- package/skills/permdock-wire/references/policy-options.md +5 -3
- package/dist/approvers-aH0PJkmf.js +0 -20
- package/dist/catalog-idsHc0vo.js +0 -2
- package/dist/collect-B7_TIfmg.js +0 -49
- package/dist/collect-fRPAQIWb.js +0 -2
- package/dist/compile-CQbvyIBr.d.ts +0 -30
- package/dist/config-BPYmjTOp.js +0 -26
- package/dist/context-gtAwAILx.js +0 -6
- package/dist/create-BKF3dgFk.d.ts +0 -162
- package/dist/create-CSkhDU9T.js +0 -222
- package/dist/doctor-BGle8Gqi.js +0 -1314
- package/dist/helpers-DnSOrhB9.js +0 -682
- package/dist/index-fG6NSXlc.d.ts +0 -9
- package/dist/kernel-YOGCWNLf.js +0 -211
- package/dist/load-QOOm1z70.js +0 -2
- package/dist/manifest-DDQbC6K0.d.ts +0 -118
- package/dist/map-error-RJ3ZsUyA.js +0 -16
- package/dist/may-use-CnFEjVEp.js +0 -37
- package/dist/pg-4GJWDUxG.js +0 -953
- package/dist/plugin-4gr7IxFJ.js +0 -65
- package/dist/protected-B4K3BKoX.js +0 -138
- package/dist/protected-wY7nXhY9.d.ts +0 -23
- package/dist/provider-_wx46HpB.js +0 -48
- package/dist/rls-CJVja9Ww.js +0 -2119
- package/dist/rls-helpers-BxRuif0l.js +0 -1346
- package/dist/runtime-DP9ttFh1.js +0 -27
- package/dist/skills-Dx3QLnMY.js +0 -110
- package/dist/source-DoBBYJi2.js +0 -6
- package/dist/sources-DVHM3Mwq.js +0 -284
- package/dist/store-C6hFW6ta.js +0 -508
- package/dist/subject-settings-xt7V845g.js +0 -82
- package/dist/supabase-hook-DW-xP4hU.js +0 -2
- package/dist/types-DbWdEfcm.d.ts +0 -87
- package/dist/types-bva3i4Gf.d.ts +0 -98
- package/dist/types-i4BAOvdb.d.ts +0 -97
- package/dist/usage-PyEor6GA.js +0 -2
- package/dist/version-CnSh33Fj.js +0 -16
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { t as compact } from "./compact-y6vfu2_f.js";
|
|
2
|
+
import { o as invalidSignatureResponse } from "./evaluations-tz6D9A2G.js";
|
|
3
|
+
import { t as instanceOptions } from "./instance-options-Dhhcnm3y.js";
|
|
4
|
+
import { n as tenantScope } from "./adapter-context-mlWsVGGg.js";
|
|
5
|
+
import { n as createServerKernel } from "./create-CMwIl-w2.js";
|
|
6
|
+
//#region src/server/bind.ts
|
|
7
|
+
/** The server kernel with the subject and actor callbacks reading the context `contextOf` maps a `Request` to. */
|
|
8
|
+
function adapterKernel(policy, options, adapter, contextOf) {
|
|
9
|
+
return createServerKernel(policy, compact({
|
|
10
|
+
subject: (request) => {
|
|
11
|
+
const context = contextOf(request);
|
|
12
|
+
return context === void 0 ? null : options.subject(context);
|
|
13
|
+
},
|
|
14
|
+
actor: options.actor === void 0 ? void 0 : (request) => {
|
|
15
|
+
const context = contextOf(request);
|
|
16
|
+
return context === void 0 ? void 0 : options.actor?.(context);
|
|
17
|
+
},
|
|
18
|
+
...instanceOptions(options),
|
|
19
|
+
store: options.store,
|
|
20
|
+
pdp: options.pdp,
|
|
21
|
+
webBotAuth: options.webBotAuth,
|
|
22
|
+
revocations: options.revocations,
|
|
23
|
+
adapter,
|
|
24
|
+
wrap: options.otel
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* The kernel of a framework adapter, with the subject, actor and tenant
|
|
29
|
+
* callbacks reading the framework context each `Request` was built from.
|
|
30
|
+
*/
|
|
31
|
+
function bindKernel(policy, options, adapter, toRequest) {
|
|
32
|
+
const contexts = /* @__PURE__ */ new WeakMap();
|
|
33
|
+
const bound = /* @__PURE__ */ new WeakMap();
|
|
34
|
+
const kernel = adapterKernel(policy, options, adapter, (request) => contexts.get(request));
|
|
35
|
+
const bind = (context) => {
|
|
36
|
+
const hit = bound.get(context);
|
|
37
|
+
if (hit !== void 0) return hit;
|
|
38
|
+
const request = toRequest(context);
|
|
39
|
+
bound.set(context, request);
|
|
40
|
+
contexts.set(request, context);
|
|
41
|
+
return request;
|
|
42
|
+
};
|
|
43
|
+
const rebind = (context) => {
|
|
44
|
+
const request = toRequest(context);
|
|
45
|
+
contexts.set(request, context);
|
|
46
|
+
const previous = bound.get(context);
|
|
47
|
+
if (previous !== void 0) kernel.shareSubject(previous, request);
|
|
48
|
+
return request;
|
|
49
|
+
};
|
|
50
|
+
const scopeOf = (context) => tenantScope(options.tenant, context);
|
|
51
|
+
const handlerScope = (request) => {
|
|
52
|
+
const context = contexts.get(request);
|
|
53
|
+
return context === void 0 ? Promise.resolve({ tenant: void 0 }) : scopeOf(context);
|
|
54
|
+
};
|
|
55
|
+
const attach = (context) => attached(async () => kernel.permdock(bind(context), await scopeOf(context)));
|
|
56
|
+
return {
|
|
57
|
+
kernel,
|
|
58
|
+
bind,
|
|
59
|
+
rebind,
|
|
60
|
+
scopeOf,
|
|
61
|
+
handlerScope,
|
|
62
|
+
attach
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/** The instance `build` resolves; an invalid Web Bot Auth signature is its `401` response. */
|
|
66
|
+
async function attached(build) {
|
|
67
|
+
try {
|
|
68
|
+
return {
|
|
69
|
+
ok: true,
|
|
70
|
+
permdock: await build()
|
|
71
|
+
};
|
|
72
|
+
} catch (error) {
|
|
73
|
+
const response = invalidSignatureResponse(error);
|
|
74
|
+
if (response === void 0) throw error;
|
|
75
|
+
return {
|
|
76
|
+
ok: false,
|
|
77
|
+
response
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/** Sets `permdock`, and `permdockData` when a loader returned a row, on a framework request or context. */
|
|
82
|
+
function decorate(target, instance, data) {
|
|
83
|
+
Object.assign(target, data === void 0 ? { permdock: instance } : {
|
|
84
|
+
permdock: instance,
|
|
85
|
+
permdockData: data
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
/** One connection per socket: every handler of `socket` gets the promise the first one opened. */
|
|
89
|
+
function socketConnection(sockets, socket, open) {
|
|
90
|
+
const hit = sockets.get(socket);
|
|
91
|
+
if (hit !== void 0) return hit;
|
|
92
|
+
const opened = open();
|
|
93
|
+
sockets.set(socket, opened);
|
|
94
|
+
return opened;
|
|
95
|
+
}
|
|
96
|
+
//#endregion
|
|
97
|
+
export { socketConnection as a, decorate as i, attached as n, bindKernel as r, adapterKernel as t };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { r as parsePermDockDigest } from "./digest-BI-6aa6d.js";
|
|
2
|
+
//#region src/client/boundary.ts
|
|
3
|
+
/** The digest of a PermDock error (`PermDockDeniedError`, `PermDockApprovalRequiredError`); `null` for any other error. */
|
|
4
|
+
function boundaryDigest(error) {
|
|
5
|
+
if (error === null || typeof error !== "object" || !("digest" in error)) return null;
|
|
6
|
+
return parsePermDockDigest(error.digest);
|
|
7
|
+
}
|
|
8
|
+
/** What a boundary renders for `digest`: `approval` for an approval request when given, otherwise `denied`. */
|
|
9
|
+
function boundaryFallback(digest, fallbacks) {
|
|
10
|
+
return digest.outcome === "approval-required" ? fallbacks.approval ?? fallbacks.denied : fallbacks.denied;
|
|
11
|
+
}
|
|
12
|
+
//#endregion
|
|
13
|
+
export { boundaryFallback as n, boundaryDigest as t };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { t as PermDockDigest } from "./digest-B3kc_PgQ.js";
|
|
2
|
+
//#region src/client/boundary.d.ts
|
|
3
|
+
type PermissionBoundaryState = PermDockDigest & {
|
|
4
|
+
/** Renders the boundary's children again, e.g. after an approval or a role change. */
|
|
5
|
+
readonly retry: () => void;
|
|
6
|
+
};
|
|
7
|
+
/** The digest of a PermDock error (`PermDockDeniedError`, `PermDockApprovalRequiredError`); `null` for any other error. */
|
|
8
|
+
declare function boundaryDigest(error: unknown): PermDockDigest | null;
|
|
9
|
+
/** What a boundary renders for `digest`: `approval` for an approval request when given, otherwise `denied`. */
|
|
10
|
+
declare function boundaryFallback<T>(digest: PermDockDigest, fallbacks: {
|
|
11
|
+
readonly denied?: T | undefined;
|
|
12
|
+
readonly approval?: T | undefined;
|
|
13
|
+
}): T | undefined;
|
|
14
|
+
//#endregion
|
|
15
|
+
export { boundaryDigest as n, boundaryFallback as r, PermissionBoundaryState as t };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
//#region src/core/canonical-json.ts
|
|
2
|
+
function isRecord(value) {
|
|
3
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* JSON with sorted keys and `undefined` members dropped, so equal values hash
|
|
7
|
+
* equally. Dates become ISO strings, bigints `"<n>n"`, and a repeated object
|
|
8
|
+
* on the current path `"[Circular]"`, so any validated row serialises.
|
|
9
|
+
*/
|
|
10
|
+
function canonicalJson(value, path = /* @__PURE__ */ new Set()) {
|
|
11
|
+
if (typeof value === "bigint") return JSON.stringify(`${value}n`);
|
|
12
|
+
if (value instanceof Date) return JSON.stringify(Number.isNaN(value.getTime()) ? null : value.toISOString());
|
|
13
|
+
if (value !== null && typeof value === "object") {
|
|
14
|
+
if (path.has(value)) return "\"[Circular]\"";
|
|
15
|
+
path.add(value);
|
|
16
|
+
try {
|
|
17
|
+
if (Array.isArray(value)) return `[${value.map((item) => canonicalJson(item === void 0 ? null : item, path)).join(",")}]`;
|
|
18
|
+
if (isRecord(value)) return `{${Object.keys(value).toSorted().filter((key) => value[key] !== void 0).map((key) => `${JSON.stringify(key)}:${canonicalJson(value[key], path)}`).join(",")}}`;
|
|
19
|
+
} finally {
|
|
20
|
+
path.delete(value);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return JSON.stringify(value) ?? "null";
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
26
|
+
export { canonicalJson as t };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { Nr as Principal, Pr as Subject, Pt as TokenSigner } from "./policy-IB6yxpC3.js";
|
|
2
|
+
import { f as Permission, m as PermissionTree } from "./permissions-DttnqqxC.js";
|
|
3
3
|
//#region src/core/capability.d.ts
|
|
4
4
|
/**
|
|
5
5
|
* Who may redeem a capability: anyone holding it, any signed-in principal,
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { t as compact } from "./compact-y6vfu2_f.js";
|
|
2
|
-
import { n as freezeDeep } from "./freeze-
|
|
3
|
-
import {
|
|
2
|
+
import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
|
|
3
|
+
import { T as isForbiddenKey, _ as listPermissions } from "./permissions-DVoF6dMt.js";
|
|
4
|
+
import { t as expiredAt } from "./expiry-BoBJ8Tvc.js";
|
|
5
|
+
import { n as sameId } from "./ids-DC4V4CFu.js";
|
|
4
6
|
import { t as anonymousSubject } from "./subject-C6dLxqHU.js";
|
|
5
7
|
//#region src/core/capability.ts
|
|
6
8
|
function redeemerKind(redeemer) {
|
|
@@ -126,9 +128,9 @@ function signCapability(input, signer, options = {}) {
|
|
|
126
128
|
}));
|
|
127
129
|
}
|
|
128
130
|
function holdsScope(membership, scope, id, now) {
|
|
129
|
-
if (membership
|
|
130
|
-
if (membership.scope === scope && membership.id
|
|
131
|
-
return scope === "tenant" && membership.tenant
|
|
131
|
+
if (expiredAt(membership, now)) return false;
|
|
132
|
+
if (membership.scope === scope && sameId(membership.id, id)) return true;
|
|
133
|
+
return scope === "tenant" && sameId(membership.tenant, id) || scope === "team" && sameId(membership.team, id);
|
|
132
134
|
}
|
|
133
135
|
/** Whether `viewer`, the request's own verified subject, may redeem a capability. */
|
|
134
136
|
function redeemerAllows(redeemer, viewer, now = Date.now() / 1e3) {
|
package/dist/catalog/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as CatalogDocument, c as CatalogResource, d as CatalogSupportAccess, f as CatalogUsage, i as CatalogDelegation, l as CatalogRole, n as CatalogApproval, o as CatalogGrant, p as CatalogValidity, r as CatalogBreakGlass, s as CatalogPermission, t as CatalogActivation, u as CatalogScope } from "../types-
|
|
1
|
+
import { a as CatalogDocument, c as CatalogResource, d as CatalogSupportAccess, f as CatalogUsage, i as CatalogDelegation, l as CatalogRole, n as CatalogApproval, o as CatalogGrant, p as CatalogValidity, r as CatalogBreakGlass, s as CatalogPermission, t as CatalogActivation, u as CatalogScope } from "../types-Dnemwd77.js";
|
|
2
2
|
//#region src/catalog/parse.d.ts
|
|
3
3
|
/**
|
|
4
4
|
* Reads a `permissions.catalog.json` document (parsed, or the JSON text) and
|
package/dist/catalog/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as rowConditionKeys, t as parseCatalog } from "../parse-
|
|
1
|
+
import { n as rowConditionKeys, t as parseCatalog } from "../parse-BuyjxhZV.js";
|
|
2
2
|
export { parseCatalog, rowConditionKeys };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { a as formatCatalogMarkdown, i as formatCatalogJson, r as catalogSchemaDocument, t as buildCatalog } from "./catalog-doc-
|
|
2
|
-
import {
|
|
3
|
-
import { a as loadModule, i as loadConfiguredPolicy, o as pickNamed, r as leavesOf, t as asPermissionTree } from "./load-
|
|
4
|
-
import {
|
|
1
|
+
import { a as formatCatalogMarkdown, i as formatCatalogJson, r as catalogSchemaDocument, t as buildCatalog } from "./catalog-doc-DdGm82XT.js";
|
|
2
|
+
import { r as listSourceFiles, t as defaultSrcPath } from "./files-DWUN9PzI.js";
|
|
3
|
+
import { a as loadModule, i as loadConfiguredPolicy, o as pickNamed, r as leavesOf, t as asPermissionTree } from "./load-DhWEB9P1.js";
|
|
4
|
+
import { i as scanSources, r as runCollect } from "./collect-DSTE3ml9.js";
|
|
5
5
|
import { existsSync } from "node:fs";
|
|
6
6
|
import { resolve } from "node:path";
|
|
7
7
|
//#region src/cli/catalog.ts
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as listArg, i as globalArgs, s as stringArg, t as COMMAND_DESCRIPTIONS } from "./commands-
|
|
1
|
+
import { a as listArg, i as globalArgs, s as stringArg, t as COMMAND_DESCRIPTIONS } from "./commands-DSxCqG9A.js";
|
|
2
2
|
import { defineCommand } from "citty";
|
|
3
3
|
//#region src/cli/commands/catalog.ts
|
|
4
4
|
function catalog(ctx) {
|
|
@@ -31,7 +31,7 @@ function catalog(ctx) {
|
|
|
31
31
|
}
|
|
32
32
|
},
|
|
33
33
|
async run({ args: parsed, rawArgs }) {
|
|
34
|
-
const result = await (await import("./catalog-
|
|
34
|
+
const result = await (await import("./catalog-CRW5Mx_B.js")).runCatalog({
|
|
35
35
|
cwd: ctx.cwd,
|
|
36
36
|
config: ctx.config,
|
|
37
37
|
format: parsed.format,
|
|
@@ -1,33 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as catalogFingerprint } from "./src-
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { _ as listPermissions, a as formerKeys, c as getResource } from "./permissions-DVoF6dMt.js";
|
|
2
|
+
import { t as catalogFingerprint } from "./src-BDwEZWrZ.js";
|
|
3
|
+
import { S as findRole } from "./grantee-Cv5Sogfv.js";
|
|
4
|
+
import { t as canonicalJson } from "./canonical-json-DemiK4Vp.js";
|
|
5
5
|
import { t as byCodePoint } from "./compare-pfyVnBjE.js";
|
|
6
|
-
import { t as catalogSchema } from "./schema-
|
|
7
|
-
import {
|
|
6
|
+
import { t as catalogSchema } from "./schema-D3MnDMxa.js";
|
|
7
|
+
import { t as policyRowConditionKeys } from "./row-conditions-h2HythXQ.js";
|
|
8
|
+
import { s as generatorBanner, t as CATALOG_SCHEMA } from "./version-BvacVTZR.js";
|
|
8
9
|
//#region src/cli/catalog-doc.ts
|
|
9
|
-
|
|
10
|
-
"
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
"assurance"
|
|
14
|
-
]);
|
|
15
|
-
/**
|
|
16
|
-
* Whether a grant depends on more than the role and the scope: a row or body
|
|
17
|
-
* condition, a closure, a field list, a purpose, a break-glass override, a
|
|
18
|
-
* validity window, or a relation, plan, actor or assurance grantee. The SQL helpers
|
|
19
|
-
* (`permdock_has`, `permitted_<scope>_ids`) check only role and scope, so a
|
|
20
|
-
* policy that calls them for such a permission would widen access.
|
|
21
|
-
*/
|
|
22
|
-
function grantHasRowConditions(grant) {
|
|
23
|
-
const grantees = Array.isArray(grant.to) ? grant.to : [grant.to];
|
|
24
|
-
return grant.where !== void 0 || grant.check !== void 0 || grant.closure !== void 0 || !grant.portable || grant.fields !== void 0 || grant.purpose !== void 0 || grant.breakGlass !== void 0 || grant.validity !== void 0 || grantees.some((grantee) => ROW_GRANTEES.has(grantee.kind));
|
|
25
|
-
}
|
|
26
|
-
/** Per permission key, whether any code grant for it has row conditions. */
|
|
27
|
-
function policyRowConditionKeys(policy) {
|
|
28
|
-
const keys = /* @__PURE__ */ new Set();
|
|
29
|
-
for (const grant of [...policy.grants, ...policy.roles.flatMap((binding) => binding.grants)]) if (grant.hosted === void 0 && grantHasRowConditions(grant)) keys.add(grant.permission.key);
|
|
30
|
-
return keys;
|
|
10
|
+
function leafLevels(tree, leaf) {
|
|
11
|
+
if (leaf.kind !== "instance") return;
|
|
12
|
+
const names = Object.keys({ ...getResource(tree, leaf.resource)?.levels });
|
|
13
|
+
return names.length === 0 ? void 0 : names;
|
|
31
14
|
}
|
|
32
15
|
/** With `policy`, permissions carry `hostable` and a known `rowConditions` (without, it is `true`), and roles carry `on`, `assignable` and their ownership rules. */
|
|
33
16
|
function buildCatalog(tree, scan, generatedAt, policy) {
|
|
@@ -43,14 +26,16 @@ function buildCatalog(tree, scan, generatedAt, policy) {
|
|
|
43
26
|
schema: node === void 0 ? null : jsonSchemaOf(node),
|
|
44
27
|
relations: node?.relations,
|
|
45
28
|
version: node?.version,
|
|
46
|
-
restricted: node?.restricted
|
|
29
|
+
restricted: node?.restricted,
|
|
30
|
+
restrictedStops: node?.restrictedStops
|
|
47
31
|
} : {
|
|
48
32
|
id: node?.id ?? "id",
|
|
49
33
|
schema: node === void 0 ? null : jsonSchemaOf(node),
|
|
50
34
|
definedIn,
|
|
51
35
|
relations: node?.relations,
|
|
52
36
|
version: node?.version,
|
|
53
|
-
restricted: node?.restricted
|
|
37
|
+
restricted: node?.restricted,
|
|
38
|
+
restrictedStops: node?.restrictedStops
|
|
54
39
|
});
|
|
55
40
|
}
|
|
56
41
|
const approvals = codeApprovals(policy);
|
|
@@ -66,6 +51,7 @@ function buildCatalog(tree, scan, generatedAt, policy) {
|
|
|
66
51
|
meta: metaRecord(leaf.meta),
|
|
67
52
|
usages: scan.usages[leaf.key] ?? [],
|
|
68
53
|
renamedFrom: formerKeys(leaf).length === 0 ? void 0 : formerKeys(leaf),
|
|
54
|
+
levels: leafLevels(tree, leaf),
|
|
69
55
|
hostable: hostable.has(leaf.key) ? true : void 0,
|
|
70
56
|
rowConditions: rowConditions?.has(leaf.key) ?? true,
|
|
71
57
|
approvals: approvals.get(leaf.key),
|
|
@@ -131,6 +117,7 @@ function catalogGrant(grant) {
|
|
|
131
117
|
validity: grant.validity,
|
|
132
118
|
name: grant.name,
|
|
133
119
|
purpose: grant.purpose,
|
|
120
|
+
requires: grant.requires?.length === 1 ? grant.requires[0] : grant.requires,
|
|
134
121
|
limit,
|
|
135
122
|
portable: grant.portable ? void 0 : false
|
|
136
123
|
})
|
|
@@ -252,7 +239,8 @@ function compactResource(resource) {
|
|
|
252
239
|
definedIn: resource.definedIn,
|
|
253
240
|
relations,
|
|
254
241
|
version: resource.version,
|
|
255
|
-
restricted: resource.restricted
|
|
242
|
+
restricted: resource.restricted,
|
|
243
|
+
restrictedStops: resource.restrictedStops
|
|
256
244
|
})
|
|
257
245
|
};
|
|
258
246
|
}
|
|
@@ -295,4 +283,4 @@ function catalogSchemaDocument() {
|
|
|
295
283
|
return catalogSchema;
|
|
296
284
|
}
|
|
297
285
|
//#endregion
|
|
298
|
-
export { formatCatalogMarkdown as a, formatCatalogJson as i, catalogForCompare as n, jsonSchemaOf as o, catalogSchemaDocument as r,
|
|
286
|
+
export { formatCatalogMarkdown as a, formatCatalogJson as i, catalogForCompare as n, jsonSchemaOf as o, catalogSchemaDocument as r, buildCatalog as t };
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { f as ApprovalStore } from "../types-
|
|
3
|
-
import { t as
|
|
1
|
+
import { C as Policy, D as PolicyVocabulary, Nr as Principal, kr as Delegation, ln as PermDock } from "../policy-IB6yxpC3.js";
|
|
2
|
+
import { f as ApprovalStore } from "../types-aqOHTHcp.js";
|
|
3
|
+
import { t as InstanceOptions } from "../instance-options-jARdwfPN.js";
|
|
4
|
+
import { t as ToolMap } from "../types-Bvc4oWT6.js";
|
|
4
5
|
//#region src/claude-agent/create.d.ts
|
|
5
6
|
/** Structural `McpServerProvenance` from `@anthropic-ai/claude-agent-sdk`. */
|
|
6
7
|
type ClaudeMcpServer = {
|
|
@@ -18,7 +19,7 @@ type ClaudeAgentContext = {
|
|
|
18
19
|
readonly sessionId?: string;
|
|
19
20
|
readonly agentId?: string;
|
|
20
21
|
};
|
|
21
|
-
type ClaudeAgentPermDockOptions<TUser = unknown> = {
|
|
22
|
+
type ClaudeAgentPermDockOptions<TUser = unknown> = InstanceOptions & {
|
|
22
23
|
readonly subject: (context: ClaudeAgentContext) => TUser | Promise<TUser>;
|
|
23
24
|
readonly actor?: (context: ClaudeAgentContext) => unknown;
|
|
24
25
|
readonly delegation?: (context: ClaudeAgentContext) => Delegation | undefined | Promise<Delegation | undefined>;
|
|
@@ -26,17 +27,7 @@ type ClaudeAgentPermDockOptions<TUser = unknown> = {
|
|
|
26
27
|
readonly tools: ToolMap;
|
|
27
28
|
/** MCP server sources whose `mcp__*` tools may be decided; default `['sdk']`. */
|
|
28
29
|
readonly mcpSources?: readonly string[];
|
|
29
|
-
readonly memberships?: MembershipSource | readonly MembershipSource[];
|
|
30
|
-
/** The object graph for relation grants that walk a parent chain; without it they deny. */
|
|
31
|
-
readonly relations?: RelationSource;
|
|
32
|
-
readonly entitlements?: EntitlementSource;
|
|
33
|
-
readonly customRoles?: RoleSource;
|
|
34
|
-
/** Hosted grants, read once per instance; see `PolicySource`. */
|
|
35
|
-
readonly policies?: PolicySource;
|
|
36
30
|
readonly store?: ApprovalStore;
|
|
37
|
-
readonly sink?: DecisionSink;
|
|
38
|
-
readonly limits?: LimitStore;
|
|
39
|
-
readonly snapshots?: SnapshotSource;
|
|
40
31
|
};
|
|
41
32
|
type PermissionResult = {
|
|
42
33
|
readonly behavior: "allow";
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { t as compact } from "../compact-y6vfu2_f.js";
|
|
2
|
-
import {
|
|
2
|
+
import { t as instanceOptions } from "../instance-options-Dhhcnm3y.js";
|
|
3
|
+
import { n as createAgentKernel } from "../kernel-_RRHmnMY.js";
|
|
3
4
|
//#region src/claude-agent/create.ts
|
|
4
5
|
const MCP_PREFIX = "mcp__";
|
|
5
6
|
function asInput(input) {
|
|
@@ -34,16 +35,9 @@ function createPermDock(policy, options) {
|
|
|
34
35
|
actor: options.actor,
|
|
35
36
|
delegation: options.delegation,
|
|
36
37
|
tenant: options.tenant,
|
|
37
|
-
|
|
38
|
-
relations: options.relations,
|
|
39
|
-
entitlements: options.entitlements,
|
|
40
|
-
customRoles: options.customRoles,
|
|
41
|
-
policies: options.policies,
|
|
42
|
-
store: options.store,
|
|
43
|
-
sink: options.sink,
|
|
44
|
-
limits: options.limits,
|
|
45
|
-
snapshots: options.snapshots
|
|
38
|
+
store: options.store
|
|
46
39
|
}),
|
|
40
|
+
...instanceOptions(options),
|
|
47
41
|
subject: options.subject,
|
|
48
42
|
tools: options.tools,
|
|
49
43
|
adapter: "claude-agent"
|
package/dist/clerk/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { Nr as Principal, Pr as Subject, xt as RoleSource } from "../policy-IB6yxpC3.js";
|
|
2
|
+
import { f as Permission } from "../permissions-DttnqqxC.js";
|
|
3
|
+
import { s as RemotePdpCache } from "../types-DxiCGmmd.js";
|
|
3
4
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
4
5
|
//#region src/clerk/types.d.ts
|
|
5
6
|
type ClerkPrincipal = Principal & {
|
|
@@ -49,8 +50,16 @@ type ClerkAuthObject = {
|
|
|
49
50
|
readonly sessionClaims?: Readonly<Record<string, unknown>> | null;
|
|
50
51
|
readonly has?: (...args: never[]) => unknown;
|
|
51
52
|
};
|
|
53
|
+
type ClerkSubjectResolverOptions = ClerkSubjectOptions & {
|
|
54
|
+
readonly cache?: RemotePdpCache;
|
|
55
|
+
};
|
|
52
56
|
//#endregion
|
|
53
57
|
//#region src/clerk/subject.d.ts
|
|
54
58
|
export declare function subjectFromClerk(authObject: unknown, options?: ClerkSubjectOptions): Promise<Subject<ClerkPrincipal>>;
|
|
59
|
+
/**
|
|
60
|
+
* A resolver that keeps each user's `memberships: 'all'` list for
|
|
61
|
+
* `cache.ttl` (at most 30 seconds), so a removed membership grants until then.
|
|
62
|
+
*/
|
|
63
|
+
export declare function createClerkSubjectResolver(options?: ClerkSubjectResolverOptions): (authObject: unknown) => Promise<Subject<ClerkPrincipal>>;
|
|
55
64
|
//#endregion
|
|
56
|
-
export type { ClerkAuthObject, ClerkBackend, ClerkGlobalRoles, ClerkMembershipListItem, ClerkPrincipal, ClerkSubjectOptions };
|
|
65
|
+
export type { ClerkAuthObject, ClerkBackend, ClerkGlobalRoles, ClerkMembershipListItem, ClerkPrincipal, ClerkSubjectOptions, ClerkSubjectResolverOptions };
|
package/dist/clerk/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { t as compact } from "../compact-y6vfu2_f.js";
|
|
2
|
-
import { n as freezeDeep } from "../freeze-
|
|
2
|
+
import { n as freezeDeep } from "../freeze-CrU8nQeX.js";
|
|
3
3
|
import { t as ignoreRejection } from "../thenable-okc2xDsj.js";
|
|
4
4
|
import { t as anonymousSubject } from "../subject-C6dLxqHU.js";
|
|
5
|
+
import { c as ttlMs, s as ttlCache } from "../shared-DRu8VFVM.js";
|
|
5
6
|
//#region src/clerk/subject.ts
|
|
6
7
|
function isRecord(value) {
|
|
7
8
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
@@ -197,6 +198,7 @@ function membershipRow(item, userId) {
|
|
|
197
198
|
roles
|
|
198
199
|
});
|
|
199
200
|
}
|
|
201
|
+
/** The memberships Clerk lists for `userId`, or `undefined` when a page fails. */
|
|
200
202
|
async function extraMemberships(backend, userId) {
|
|
201
203
|
const list = backend?.users?.getOrganizationMembershipList;
|
|
202
204
|
if (list === void 0) return [];
|
|
@@ -219,10 +221,29 @@ async function extraMemberships(backend, userId) {
|
|
|
219
221
|
}
|
|
220
222
|
return out;
|
|
221
223
|
} catch {
|
|
222
|
-
return
|
|
224
|
+
return;
|
|
223
225
|
}
|
|
224
226
|
}
|
|
225
|
-
|
|
227
|
+
function subjectFromClerk(authObject, options = {}) {
|
|
228
|
+
return fromClerk(authObject, options, extraMemberships);
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* A resolver that keeps each user's `memberships: 'all'` list for
|
|
232
|
+
* `cache.ttl` (at most 30 seconds), so a removed membership grants until then.
|
|
233
|
+
*/
|
|
234
|
+
function createClerkSubjectResolver(options = {}) {
|
|
235
|
+
const { cache, ...rest } = options;
|
|
236
|
+
const lists = ttlCache(ttlMs(cache));
|
|
237
|
+
const load = async (backend, userId) => {
|
|
238
|
+
const hit = lists.get(userId);
|
|
239
|
+
if (hit !== void 0) return hit;
|
|
240
|
+
const loaded = await extraMemberships(backend, userId);
|
|
241
|
+
if (loaded !== void 0) lists.set(userId, loaded);
|
|
242
|
+
return loaded;
|
|
243
|
+
};
|
|
244
|
+
return (authObject) => fromClerk(authObject, rest, load);
|
|
245
|
+
}
|
|
246
|
+
async function fromClerk(authObject, options, loadMemberships) {
|
|
226
247
|
try {
|
|
227
248
|
const trustedObject = isAuthObject(authObject);
|
|
228
249
|
const trustedPayload = isVerifiedPayload(authObject);
|
|
@@ -244,7 +265,7 @@ async function subjectFromClerk(authObject, options = {}) {
|
|
|
244
265
|
roles: membershipRoles,
|
|
245
266
|
entitlements: plans.org.length === 0 ? void 0 : plans.org
|
|
246
267
|
})] : [];
|
|
247
|
-
const loaded = options.memberships === "all" ? await
|
|
268
|
+
const loaded = options.memberships === "all" ? await loadMemberships(options.backend, mapped.id) ?? [] : [];
|
|
248
269
|
const seen = new Set(sessionMembership.map((item) => item.tenant));
|
|
249
270
|
const memberships = [...sessionMembership, ...loaded.filter((item) => {
|
|
250
271
|
if (seen.has(item.tenant)) return false;
|
|
@@ -277,4 +298,4 @@ async function subjectFromClerk(authObject, options = {}) {
|
|
|
277
298
|
}
|
|
278
299
|
}
|
|
279
300
|
//#endregion
|
|
280
|
-
export { subjectFromClerk };
|
|
301
|
+
export { createClerkSubjectResolver, subjectFromClerk };
|
package/dist/cli/bin.js
CHANGED
package/dist/cli/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { a as CatalogDocument, c as CatalogResource, d as CatalogSupportAccess, f as CatalogUsage, l as CatalogRole, n as CatalogApproval, r as CatalogBreakGlass, s as CatalogPermission, t as CatalogActivation, u as CatalogScope } from "../types-
|
|
2
|
-
import { c as
|
|
1
|
+
import { a as CatalogDocument, c as CatalogResource, d as CatalogSupportAccess, f as CatalogUsage, l as CatalogRole, n as CatalogApproval, r as CatalogBreakGlass, s as CatalogPermission, t as CatalogActivation, u as CatalogScope } from "../types-Dnemwd77.js";
|
|
2
|
+
import { _ as RunResult, c as RlsConfig, d as RlsMembershipTable, f as RlsMemberships, g as RlsTarget, h as RlsSuspension, i as PermDockConfig, l as RlsDialect, m as RlsSuspendedScope, n as CliIo, o as RlsActiveRow, p as RlsSuspendedMembership, r as CollectConfig, s as RlsApiKeys, t as CatalogConfig, u as RlsFunctionMapping } from "../types-DbjRN55U.js";
|
|
3
3
|
//#region src/cli/catalog-path.d.ts
|
|
4
4
|
/**
|
|
5
5
|
* The absolute path `permdock collect` writes the catalog to: `collect.out`,
|
|
@@ -43,4 +43,4 @@ export declare function run(argv: readonly string[], options?: {
|
|
|
43
43
|
readonly io?: CliIo;
|
|
44
44
|
}): Promise<RunResult>;
|
|
45
45
|
//#endregion
|
|
46
|
-
export type { CatalogActivation, CatalogApproval, CatalogBreakGlass, CatalogConfig, CatalogDocument, CatalogPermission, CatalogResource, CatalogRole, CatalogScope, CatalogSupportAccess, CatalogUsage, CollectConfig, PermDockConfig, RlsActiveRow, RlsConfig, RlsDialect, RlsFunctionMapping, RlsMembershipTable, RlsMemberships, RlsSuspension, RlsTarget, RunResult, SupabaseGrantsMarker, SupabaseHookMarker };
|
|
46
|
+
export type { CatalogActivation, CatalogApproval, CatalogBreakGlass, CatalogConfig, CatalogDocument, CatalogPermission, CatalogResource, CatalogRole, CatalogScope, CatalogSupportAccess, CatalogUsage, CollectConfig, PermDockConfig, RlsActiveRow, RlsApiKeys, RlsConfig, RlsDialect, RlsFunctionMapping, RlsMembershipTable, RlsMemberships, RlsSuspendedMembership, RlsSuspendedScope, RlsSuspension, RlsTarget, RunResult, SupabaseGrantsMarker, SupabaseHookMarker };
|
package/dist/cli/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as catalogPath } from "../catalog-path-CnI0XTFK.js";
|
|
2
|
-
import { t as defineConfig } from "../config-
|
|
2
|
+
import { t as defineConfig } from "../config-BJiM-xAm.js";
|
|
3
3
|
import { o as parseGrantsMarker, s as parseHookMarker } from "../markers-B0hYLvMD.js";
|
|
4
|
-
import { t as run } from "../run-
|
|
4
|
+
import { t as run } from "../run-DKDbM4Du.js";
|
|
5
5
|
export { catalogPath, defineConfig, parseGrantsMarker, parseHookMarker, run };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//#region src/core/clients.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Stable names for OAuth clients whose ids differ per environment or are
|
|
4
|
+
* assigned at dynamic registration. A record maps each name to the client
|
|
5
|
+
* id (or ids) it stands for; an unset id (an environment variable that is
|
|
6
|
+
* not defined) names nothing. A function maps a verified client id to a
|
|
7
|
+
* name, or `undefined`. Policy delegations name the client (`to: { kind,
|
|
8
|
+
* client }`), never its id.
|
|
9
|
+
*/
|
|
10
|
+
type ClientNames = Readonly<Record<string, string | readonly string[] | undefined>> | ((clientId: string) => string | undefined);
|
|
11
|
+
//#endregion
|
|
12
|
+
export { ClientNames as t };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
//#region src/core/clients.ts
|
|
2
|
+
/**
|
|
3
|
+
* The name `clients` gives `clientId`, or `undefined`: unknown ids, an id
|
|
4
|
+
* two names claim, a function that throws or returns anything but a
|
|
5
|
+
* non-empty string. Never throws.
|
|
6
|
+
*/
|
|
7
|
+
function clientNameOf(clients, clientId) {
|
|
8
|
+
if (clients === void 0 || clientId === "") return;
|
|
9
|
+
try {
|
|
10
|
+
if (typeof clients === "function") {
|
|
11
|
+
const name = clients(clientId);
|
|
12
|
+
return typeof name === "string" && name !== "" ? name : void 0;
|
|
13
|
+
}
|
|
14
|
+
const names = Object.entries(clients).flatMap(([name, ids]) => {
|
|
15
|
+
return name !== "" && (typeof ids === "string" ? [ids] : Array.isArray(ids) ? ids : []).includes(clientId) ? [name] : [];
|
|
16
|
+
});
|
|
17
|
+
return names.length === 1 ? names[0] : void 0;
|
|
18
|
+
} catch {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//#endregion
|
|
23
|
+
export { clientNameOf as t };
|
package/dist/cloud/index.d.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { $ as
|
|
2
|
-
import { f as ApprovalStore } from "../types-
|
|
3
|
-
import { n as CatalogEventData, o as CloudEventType } from "../sink-
|
|
4
|
-
import { a as JsonWebKeySet } from "../types-
|
|
5
|
-
import { a as ReplayStore } from "../types-i4BAOvdb.js";
|
|
1
|
+
import { $ as AccessEvent, At as SnapshotSource, Ft as TokenVerifier, Nt as TokenFailureCause, at as DecisionSink, bn as PolicySource, ht as MembershipEvent, ot as DirectoryEvent, rt as DecisionEvent, tt as CredentialEvent } from "../policy-IB6yxpC3.js";
|
|
2
|
+
import { f as ApprovalStore } from "../types-aqOHTHcp.js";
|
|
3
|
+
import { n as CatalogEventData, o as CloudEventType } from "../sink-B1fZzIMf.js";
|
|
4
|
+
import { a as JsonWebKeySet, g as ReplayStore } from "../types-Cq_H8N_X.js";
|
|
6
5
|
//#region src/cloud/types.d.ts
|
|
7
6
|
type CloudEndpointOptions = {
|
|
8
7
|
readonly url?: string;
|
package/dist/cloud/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { t as compact } from "../compact-y6vfu2_f.js";
|
|
2
|
-
import { n as freezeDeep } from "../freeze-
|
|
3
|
-
import {
|
|
4
|
-
import { i as parsePolicyDocument } from "../hosted-
|
|
2
|
+
import { n as freezeDeep } from "../freeze-CrU8nQeX.js";
|
|
3
|
+
import { T as isForbiddenKey } from "../permissions-DVoF6dMt.js";
|
|
4
|
+
import { i as parsePolicyDocument } from "../hosted-DJQw46hn.js";
|
|
5
5
|
import { t as CLOUD_EVENT_TYPES } from "../sink-Bd9PSyfq.js";
|
|
6
|
-
import { t as ApprovalError } from "../errors-
|
|
7
|
-
import { t as joseTokenVerifier } from "../verifier-
|
|
6
|
+
import { r as isApprovalErrorCode, t as ApprovalError } from "../errors-DRnGZHzF.js";
|
|
7
|
+
import { t as joseTokenVerifier } from "../verifier-BxBo6I44.js";
|
|
8
8
|
import { t as timeoutSignal } from "../timeout-D51niuQP.js";
|
|
9
9
|
//#region src/cloud/create.ts
|
|
10
10
|
/** Milliseconds a PermDock Cloud request may take; a slower one fails like an unreachable Cloud. */
|
|
@@ -30,6 +30,20 @@ function asApproval(value) {
|
|
|
30
30
|
function isCompactJws$1(value) {
|
|
31
31
|
return !value.startsWith("{") && value.split(".").length === 3;
|
|
32
32
|
}
|
|
33
|
+
/** The refusal PermDock Cloud names in its body, else the one its status implies. */
|
|
34
|
+
async function approvalErrorFrom(response) {
|
|
35
|
+
let body;
|
|
36
|
+
try {
|
|
37
|
+
body = await response.json();
|
|
38
|
+
} catch {
|
|
39
|
+
return approvalErrorFromStatus(response.status);
|
|
40
|
+
}
|
|
41
|
+
if (body === null || typeof body !== "object" || !("code" in body)) return approvalErrorFromStatus(response.status);
|
|
42
|
+
const code = body.code;
|
|
43
|
+
if (!isApprovalErrorCode(code)) return approvalErrorFromStatus(response.status);
|
|
44
|
+
const detail = "detail" in body ? body.detail : void 0;
|
|
45
|
+
return new ApprovalError(code, typeof detail === "string" && detail.length > 0 ? detail : code);
|
|
46
|
+
}
|
|
33
47
|
function approvalErrorFromStatus(status) {
|
|
34
48
|
if (status === 409) return new ApprovalError("approval-not-pending", "approval is not pending");
|
|
35
49
|
if (status === 410) return new ApprovalError("approval-expired", "approval has expired");
|
|
@@ -92,7 +106,7 @@ function cloud(options = {}) {
|
|
|
92
106
|
method: "POST",
|
|
93
107
|
body: JSON.stringify(verdict)
|
|
94
108
|
});
|
|
95
|
-
if (!response.ok) throw
|
|
109
|
+
if (!response.ok) throw await approvalErrorFrom(response);
|
|
96
110
|
const parsed = asApproval(await response.json());
|
|
97
111
|
if (parsed === null) throw new ApprovalError("approval-not-found", "PermDock Cloud returned an unknown approval shape");
|
|
98
112
|
return parsed;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as globalArgs, s as stringArg, t as COMMAND_DESCRIPTIONS } from "./commands-
|
|
1
|
+
import { i as globalArgs, s as stringArg, t as COMMAND_DESCRIPTIONS } from "./commands-DSxCqG9A.js";
|
|
2
2
|
import { defineCommand } from "citty";
|
|
3
3
|
//#region src/cli/commands/cloud.ts
|
|
4
4
|
function cloud(ctx) {
|
|
@@ -30,7 +30,7 @@ function cloud(ctx) {
|
|
|
30
30
|
}
|
|
31
31
|
},
|
|
32
32
|
async run({ args: parsed }) {
|
|
33
|
-
const result = await (await import("./cloud-
|
|
33
|
+
const result = await (await import("./cloud-DWLXO2af.js")).runCloud({
|
|
34
34
|
cwd: ctx.cwd,
|
|
35
35
|
config: ctx.config,
|
|
36
36
|
rest: parsed._,
|