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
package/dist/next/index.js
CHANGED
|
@@ -1,53 +1,28 @@
|
|
|
1
1
|
import { t as compact } from "../compact-y6vfu2_f.js";
|
|
2
|
-
import { t as createPermDock$1 } from "../permdock-
|
|
3
|
-
import { t as
|
|
4
|
-
import { n as createEvaluationsHandler } from "../evaluations-
|
|
2
|
+
import { t as createPermDock$1 } from "../permdock-CbgvLnuo.js";
|
|
3
|
+
import { n as snapshotHeaders, r as snapshotTag, t as cacheLifeFor } from "../snapshot-cache-D6jLelln.js";
|
|
4
|
+
import { c as NO_GRANT, n as createEvaluationsHandler } from "../evaluations-tz6D9A2G.js";
|
|
5
|
+
import { t as instanceOptions } from "../instance-options-Dhhcnm3y.js";
|
|
5
6
|
import { cache } from "react";
|
|
6
7
|
import { jsx } from "react/jsx-runtime";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import { after } from "next/server";
|
|
8
|
+
import { forbidden, unauthorized, unstable_rethrow } from "#next/navigation";
|
|
9
|
+
import { cacheLife, cacheTag, io } from "next/cache.js";
|
|
10
|
+
import { after } from "next/server.js";
|
|
10
11
|
import { PermDockProvider } from "../react/provider-client.js";
|
|
11
|
-
//#region src/next/cache-life.ts
|
|
12
|
-
/**
|
|
13
|
-
* `{ stale }` for `cacheLife()` inside an app-owned `'use cache: private'` function: `max` when the
|
|
14
|
-
* value never expires, otherwise the seconds left, clamped to `[min, max]`. A value with less than
|
|
15
|
-
* `min` seconds left gets its real remainder, so Next.js leaves it out of prefetches instead of
|
|
16
|
-
* serving it past `expiresAt`.
|
|
17
|
-
*/
|
|
18
|
-
function cacheLifeFor(value, options = {}) {
|
|
19
|
-
const min = options.min ?? 30;
|
|
20
|
-
const max = Math.max(options.max ?? 300, min);
|
|
21
|
-
const expiresAt = value?.expiresAt;
|
|
22
|
-
if (expiresAt === void 0 || expiresAt === null) return { stale: max };
|
|
23
|
-
const issuedAt = value?.issuedAt !== void 0 && value.issuedAt > 0 ? value.issuedAt : void 0;
|
|
24
|
-
const now = options.now ?? issuedAt ?? Math.floor(Date.now() / 1e3);
|
|
25
|
-
const remaining = Math.floor(expiresAt - now);
|
|
26
|
-
if (remaining < min) return { stale: Math.max(0, remaining) };
|
|
27
|
-
return { stale: Math.min(max, remaining) };
|
|
28
|
-
}
|
|
29
|
-
//#endregion
|
|
30
12
|
//#region src/next/provider.tsx
|
|
31
13
|
function renderClientProvider(options) {
|
|
32
14
|
return /* @__PURE__ */ jsx(PermDockProvider, {
|
|
33
15
|
...compact({
|
|
34
16
|
snapshotPromise: options.snapshotPromise,
|
|
35
17
|
endpoint: options.endpoint,
|
|
36
|
-
tenant: options.tenant
|
|
18
|
+
tenant: options.tenant,
|
|
19
|
+
suspend: options.suspend
|
|
37
20
|
}),
|
|
38
21
|
children: options.children
|
|
39
22
|
});
|
|
40
23
|
}
|
|
41
24
|
//#endregion
|
|
42
25
|
//#region src/next/create.ts
|
|
43
|
-
const DENIED = {
|
|
44
|
-
outcome: "denied",
|
|
45
|
-
denials: [{
|
|
46
|
-
role: null,
|
|
47
|
-
reason: "no-grant"
|
|
48
|
-
}],
|
|
49
|
-
alternatives: []
|
|
50
|
-
};
|
|
51
26
|
function assertServerOnly() {
|
|
52
27
|
if (globalThis.document !== void 0) throw new TypeError("permdock/next is server-only. Import hooks and Protected from permdock/react.");
|
|
53
28
|
}
|
|
@@ -90,14 +65,21 @@ function afterResponse(sink) {
|
|
|
90
65
|
}
|
|
91
66
|
function wrapInstance(permdock, onDenied) {
|
|
92
67
|
if (onDenied === void 0) return permdock;
|
|
68
|
+
const wrap = (next) => wrapInstance(next, onDenied);
|
|
93
69
|
const assert = ((permission, data, options) => permdock.assert(permission, data, compact({
|
|
94
70
|
...options,
|
|
95
71
|
onDenied: options?.onDenied ?? onDenied
|
|
96
72
|
})));
|
|
97
|
-
return {
|
|
73
|
+
return Object.freeze({
|
|
98
74
|
...permdock,
|
|
99
|
-
assert
|
|
100
|
-
|
|
75
|
+
assert,
|
|
76
|
+
tenant: (id) => wrap(permdock.tenant(id)),
|
|
77
|
+
team: (id) => wrap(permdock.team(id)),
|
|
78
|
+
derive: (options) => {
|
|
79
|
+
const derived = permdock.derive(options);
|
|
80
|
+
return derived instanceof Promise ? derived.then(wrap) : wrap(derived);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
101
83
|
}
|
|
102
84
|
function createPermDock(policy, options) {
|
|
103
85
|
assertServerOnly();
|
|
@@ -117,13 +99,8 @@ function createPermDock(policy, options) {
|
|
|
117
99
|
await io();
|
|
118
100
|
const built = await createPermDock$1(policy, user, compact({
|
|
119
101
|
tenant,
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
entitlements: options.entitlements,
|
|
123
|
-
customRoles: options.customRoles,
|
|
124
|
-
policies: options.policies,
|
|
125
|
-
sink,
|
|
126
|
-
limits: options.limits
|
|
102
|
+
...instanceOptions(options),
|
|
103
|
+
sink
|
|
127
104
|
}));
|
|
128
105
|
return wrapInstance(options.otel === void 0 ? built : options.otel(built), options.onDenied);
|
|
129
106
|
});
|
|
@@ -131,22 +108,38 @@ function createPermDock(policy, options) {
|
|
|
131
108
|
const tenant = query?.tenant ?? await resolveFallbackTenant();
|
|
132
109
|
return instantiate(tenant ?? "");
|
|
133
110
|
};
|
|
134
|
-
const getPermission = async (permission, data) => {
|
|
111
|
+
const getPermission = async (permission, data, query) => {
|
|
135
112
|
try {
|
|
136
|
-
const decision = (await getPermDock()).decide(permission, data);
|
|
113
|
+
const decision = (await getPermDock(query)).decide(permission, data);
|
|
137
114
|
return {
|
|
138
115
|
allowed: decision.outcome === "granted",
|
|
139
116
|
status: "ready",
|
|
140
117
|
decision
|
|
141
118
|
};
|
|
142
|
-
} catch {
|
|
119
|
+
} catch (error) {
|
|
120
|
+
unstable_rethrow(error);
|
|
143
121
|
return {
|
|
144
122
|
allowed: false,
|
|
145
123
|
status: "ready",
|
|
146
|
-
decision:
|
|
124
|
+
decision: NO_GRANT
|
|
147
125
|
};
|
|
148
126
|
}
|
|
149
127
|
};
|
|
128
|
+
const getSnapshot = async (query = {}) => {
|
|
129
|
+
const permdock = await getPermDock(compact({ tenant: query.tenant }));
|
|
130
|
+
const snapshot = permdock.snapshot(compact({
|
|
131
|
+
include: query.include,
|
|
132
|
+
tenants: query.tenants
|
|
133
|
+
}));
|
|
134
|
+
try {
|
|
135
|
+
cacheLife(cacheLifeFor(snapshot));
|
|
136
|
+
cacheTag(snapshotTag(permdock.subject.principal?.id), ...query.tags ?? []);
|
|
137
|
+
} catch (error) {
|
|
138
|
+
unstable_rethrow(error);
|
|
139
|
+
throw new Error("PermDock: getSnapshot() sets cacheLife() and cacheTag(), so call it inside a 'use cache: private' function with cacheComponents enabled.", { cause: error });
|
|
140
|
+
}
|
|
141
|
+
return snapshot;
|
|
142
|
+
};
|
|
150
143
|
const requireAccess = async (input) => {
|
|
151
144
|
const permdock = await getPermDock(input.tenant === void 0 ? void 0 : { tenant: input.tenant });
|
|
152
145
|
const assert = permdock.assert;
|
|
@@ -160,11 +153,12 @@ function createPermDock(policy, options) {
|
|
|
160
153
|
const snapshotPromise = getPermDock(props.tenant === void 0 ? void 0 : { tenant: props.tenant }).then((permdock) => permdock.snapshot(compact({
|
|
161
154
|
include: props.include,
|
|
162
155
|
tenants: props.tenants
|
|
163
|
-
})))
|
|
156
|
+
})));
|
|
164
157
|
return renderClientProvider(compact({
|
|
165
158
|
snapshotPromise,
|
|
166
159
|
endpoint: props.endpoint ?? options.endpoint ?? "/api/permdock",
|
|
167
160
|
tenant: props.tenant,
|
|
161
|
+
suspend: props.suspend,
|
|
168
162
|
children: props.children
|
|
169
163
|
}));
|
|
170
164
|
};
|
|
@@ -176,20 +170,11 @@ function createPermDock(policy, options) {
|
|
|
176
170
|
return {
|
|
177
171
|
getPermDock,
|
|
178
172
|
getPermission,
|
|
173
|
+
getSnapshot,
|
|
179
174
|
requireAccess,
|
|
180
175
|
PermDockProvider,
|
|
181
176
|
permdockHandler
|
|
182
177
|
};
|
|
183
178
|
}
|
|
184
179
|
//#endregion
|
|
185
|
-
|
|
186
|
-
/**
|
|
187
|
-
* The `cacheTag` for one subject's cached snapshots: `permdock:<sub>`, or `permdock:anon`
|
|
188
|
-
* without a subject. Tag the private cache with it and pass it to `updateTag` or
|
|
189
|
-
* `revalidateTag` on every write that changes the subject's snapshot.
|
|
190
|
-
*/
|
|
191
|
-
function snapshotTag(sub) {
|
|
192
|
-
return `permdock:${sub === void 0 || sub === null || sub === "" ? "anon" : sub}`;
|
|
193
|
-
}
|
|
194
|
-
//#endregion
|
|
195
|
-
export { cacheLifeFor, createPermDock, snapshotTag };
|
|
180
|
+
export { cacheLifeFor, createPermDock, snapshotHeaders, snapshotTag };
|
package/dist/next/plugin.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as PermDockPluginOptions } from "../types-
|
|
1
|
+
import { a as PermDockPluginOptions } from "../types-DbjRN55U.js";
|
|
2
2
|
//#region src/cli/plugin.d.ts
|
|
3
3
|
/** Any object: Next's `NextConfig` is an interface, so no index signature. */
|
|
4
4
|
type NextConfigLike = object;
|
package/dist/next/plugin.js
CHANGED
|
@@ -1,2 +1,33 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { i as describeError } from "../errors-CWfoNg9N.js";
|
|
2
|
+
import { n as createCollectScheduler, r as report, t as collectOnce } from "../watch-DVBJ9cBq.js";
|
|
3
|
+
//#region src/cli/plugin.ts
|
|
4
|
+
const PHASE_BUILD = "phase-production-build";
|
|
5
|
+
const PHASE_DEV = "phase-development-server";
|
|
6
|
+
function createPermDockPlugin(options) {
|
|
7
|
+
const schedulers = /* @__PURE__ */ new Map();
|
|
8
|
+
return function permdockPlugin(nextConfig) {
|
|
9
|
+
return async (phase, context) => {
|
|
10
|
+
const resolved = typeof nextConfig === "function" ? await nextConfig(phase, context) : nextConfig;
|
|
11
|
+
const cwd = process.cwd();
|
|
12
|
+
if (phase === PHASE_BUILD) {
|
|
13
|
+
const check = process.env["PERMDOCK_COLLECT"] !== "write";
|
|
14
|
+
report(await runPluginCollect(cwd, options, check));
|
|
15
|
+
} else if (phase === PHASE_DEV) {
|
|
16
|
+
const scheduler = schedulers.get(cwd) ?? createCollectScheduler(cwd, options);
|
|
17
|
+
schedulers.set(cwd, scheduler);
|
|
18
|
+
try {
|
|
19
|
+
report(await scheduler.run(false));
|
|
20
|
+
} catch (error) {
|
|
21
|
+
report(describeError(error));
|
|
22
|
+
}
|
|
23
|
+
scheduler.watch();
|
|
24
|
+
}
|
|
25
|
+
return resolved;
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
async function runPluginCollect(cwd, options, check) {
|
|
30
|
+
return (await collectOnce(cwd, options, check, false)).message;
|
|
31
|
+
}
|
|
32
|
+
//#endregion
|
|
2
33
|
export { createPermDockPlugin };
|
package/dist/node/index.d.ts
CHANGED
|
@@ -1,37 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { r as PdpFactory } from "../types-BvBk1wgn.js";
|
|
6
|
-
import { g as discoverViaSignatureAgent, h as WebBotAuthVerifier, n as OpenApiHooks, o as TenantOption, r as ProtectOptions, t as Guard, u as InvalidSignatureError, y as verifyWebBotAuth } from "../create-BKF3dgFk.js";
|
|
1
|
+
import { C as Policy, D as PolicyVocabulary, Nr as Principal, ln as PermDock } from "../policy-IB6yxpC3.js";
|
|
2
|
+
import { f as Permission } from "../permissions-DttnqqxC.js";
|
|
3
|
+
import { a as ScopeGuard, h as InvalidSignatureError, i as ProtectOptions, n as OpenApiHooks, t as Guard, w as verifyWebBotAuth, x as discoverViaSignatureAgent } from "../create-B1d519XK.js";
|
|
4
|
+
import { t as ServerAdapterOptions } from "../bind-C_ob3LKa.js";
|
|
7
5
|
import { a as toRequest, i as sendResponse, n as fromResponse, r as isServerResponse, t as NodeRequest } from "../http-DPuDaChb.js";
|
|
8
6
|
import { IncomingMessage, ServerResponse } from "node:http";
|
|
9
7
|
//#region src/node/create.d.ts
|
|
10
|
-
type NodePermDockOptions<TUser = unknown> =
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
/** The object graph for relation grants that walk a parent chain; without it they deny. */
|
|
15
|
-
readonly relations?: RelationSource;
|
|
16
|
-
readonly entitlements?: EntitlementSource;
|
|
17
|
-
readonly customRoles?: RoleSource;
|
|
18
|
-
/** Hosted grants, read once per instance; see `PolicySource`. */
|
|
19
|
-
readonly policies?: PolicySource;
|
|
20
|
-
readonly store?: ApprovalStore;
|
|
21
|
-
readonly sink?: DecisionSink;
|
|
22
|
-
readonly limits?: LimitStore;
|
|
23
|
-
/** `createPermDock` from `permdock/pdp`; `protect` then decides delegated permissions remotely. */
|
|
24
|
-
readonly pdp?: PdpFactory;
|
|
25
|
-
/** Accepted for adapter parity; not read by this adapter. */
|
|
26
|
-
readonly snapshots?: SnapshotSource;
|
|
27
|
-
/** `(permdock) => withOtel(permdock, options)` from `permdock/otel`. */
|
|
28
|
-
readonly otel?: OtelWrap;
|
|
29
|
-
/** `(request) => verifyWebBotAuth(request, options)`; a verified bot becomes the actor. */
|
|
30
|
-
readonly webBotAuth?: WebBotAuthVerifier;
|
|
8
|
+
type NodePermDockOptions<TUser = unknown> = ServerAdapterOptions<NodeRequest, TUser>;
|
|
9
|
+
type NodeProtect = {
|
|
10
|
+
(permission: Permission, loadData?: (req: NodeRequest) => unknown, protectOptions?: ProtectOptions): (req: IncomingMessage) => Promise<Guard>;
|
|
11
|
+
(permission: null, loadData?: (req: NodeRequest) => unknown, protectOptions?: ProtectOptions): (req: IncomingMessage) => Promise<ScopeGuard>;
|
|
31
12
|
};
|
|
32
13
|
type NodePermDock<V extends PolicyVocabulary = PolicyVocabulary> = {
|
|
33
14
|
readonly permdock: (req: IncomingMessage) => Promise<PermDock<V>>;
|
|
34
|
-
readonly protect:
|
|
15
|
+
readonly protect: NodeProtect;
|
|
35
16
|
readonly send: typeof sendResponse;
|
|
36
17
|
readonly permdockHandler: () => (req: IncomingMessage, res: ServerResponse) => Promise<void>;
|
|
37
18
|
readonly toRequest: typeof toRequest;
|
package/dist/node/index.js
CHANGED
|
@@ -1,55 +1,23 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { r as
|
|
4
|
-
import { i as toRequest, n as isServerResponse, r as sendResponse, t as fromResponse } from "../http-GgVApX1k.js";
|
|
1
|
+
import { i as discoverViaSignatureAgent, r as InvalidSignatureError, s as verifyWebBotAuth } from "../evaluations-tz6D9A2G.js";
|
|
2
|
+
import { r as bindKernel } from "../bind-CuzGytRf.js";
|
|
3
|
+
import { i as toRequest, n as isServerResponse, r as sendResponse, t as fromResponse } from "../http-BIhmLfCc.js";
|
|
5
4
|
//#region src/node/create.ts
|
|
5
|
+
const nodeRequest = (req) => req;
|
|
6
6
|
function createPermDock(policy, options) {
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
const req = contexts.get(request);
|
|
12
|
-
return req === void 0 ? null : options.subject(req);
|
|
13
|
-
},
|
|
14
|
-
memberships: options.memberships,
|
|
15
|
-
relations: options.relations,
|
|
16
|
-
entitlements: options.entitlements,
|
|
17
|
-
customRoles: options.customRoles,
|
|
18
|
-
policies: options.policies,
|
|
19
|
-
store: options.store,
|
|
20
|
-
sink: options.sink,
|
|
21
|
-
limits: options.limits,
|
|
22
|
-
pdp: options.pdp,
|
|
23
|
-
webBotAuth: options.webBotAuth,
|
|
24
|
-
adapter: "node",
|
|
25
|
-
wrap: options.otel
|
|
26
|
-
}));
|
|
27
|
-
const bind = (req) => {
|
|
28
|
-
const hit = bound.get(req);
|
|
29
|
-
if (hit !== void 0) return hit;
|
|
30
|
-
const nodeReq = req;
|
|
31
|
-
const request = toRequest(nodeReq);
|
|
32
|
-
bound.set(req, request);
|
|
33
|
-
contexts.set(request, nodeReq);
|
|
34
|
-
return request;
|
|
35
|
-
};
|
|
36
|
-
const scopeOf = (req) => tenantScope(options.tenant, req);
|
|
7
|
+
const bound = bindKernel(policy, options, "node", toRequest);
|
|
8
|
+
const { kernel, handlerScope } = bound;
|
|
9
|
+
const bind = (req) => bound.bind(nodeRequest(req));
|
|
10
|
+
const scopeOf = (req) => bound.scopeOf(nodeRequest(req));
|
|
37
11
|
const permdock = async (req) => kernel.permdock(bind(req), await scopeOf(req));
|
|
38
|
-
const protect = (permission, loadData, protectOptions) => async (req) => kernel.protect(permission, loadData === void 0 ? void 0 : () => loadData(req), protectOptions)(bind(req), await scopeOf(req));
|
|
12
|
+
const protect = ((permission, loadData, protectOptions) => async (req) => kernel.protect(permission, loadData === void 0 ? void 0 : () => loadData(nodeRequest(req)), protectOptions)(bind(req), await scopeOf(req)));
|
|
39
13
|
const permdockHandler = () => {
|
|
40
|
-
const { POST, GET } = kernel.permdockHandler(
|
|
41
|
-
const req = contexts.get(request);
|
|
42
|
-
return req === void 0 ? { tenant: void 0 } : scopeOf(req);
|
|
43
|
-
});
|
|
14
|
+
const { POST, GET } = kernel.permdockHandler(handlerScope);
|
|
44
15
|
return async (req, res) => {
|
|
45
16
|
if (req.method === "GET" || req.method === "HEAD") {
|
|
46
17
|
await sendResponse(res, await GET(bind(req)));
|
|
47
18
|
return;
|
|
48
19
|
}
|
|
49
|
-
|
|
50
|
-
const request = toRequest(nodeReq);
|
|
51
|
-
contexts.set(request, nodeReq);
|
|
52
|
-
await sendResponse(res, await POST(request));
|
|
20
|
+
await sendResponse(res, await POST(bound.rebind(nodeRequest(req))));
|
|
53
21
|
};
|
|
54
22
|
};
|
|
55
23
|
return {
|
package/dist/openai/index.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { c as ApprovalRequest, f as ApprovalStore } from "../types-
|
|
4
|
-
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 Permission } from "../permissions-DttnqqxC.js";
|
|
3
|
+
import { c as ApprovalRequest, f as ApprovalStore } from "../types-aqOHTHcp.js";
|
|
4
|
+
import { t as InstanceOptions } from "../instance-options-jARdwfPN.js";
|
|
5
|
+
import { t as ToolMap } from "../types-Bvc4oWT6.js";
|
|
5
6
|
//#region src/openai/create.d.ts
|
|
6
7
|
/** The app context passed to `run(agent, input, { context })`. */
|
|
7
8
|
type OpenAiContext = {
|
|
@@ -14,23 +15,13 @@ type OpenAiContext = {
|
|
|
14
15
|
type OpenAiRunContext = {
|
|
15
16
|
readonly context?: unknown;
|
|
16
17
|
};
|
|
17
|
-
type OpenAiPermDockOptions<TUser = unknown> = {
|
|
18
|
+
type OpenAiPermDockOptions<TUser = unknown> = InstanceOptions & {
|
|
18
19
|
readonly subject: (context: OpenAiContext) => TUser | Promise<TUser>;
|
|
19
20
|
readonly actor?: (context: OpenAiContext) => unknown;
|
|
20
21
|
readonly delegation?: (context: OpenAiContext) => Delegation | undefined | Promise<Delegation | undefined>;
|
|
21
22
|
readonly tenant?: string | ((context: OpenAiContext) => string | undefined | Promise<string | undefined>);
|
|
22
23
|
readonly tools: ToolMap;
|
|
23
|
-
readonly memberships?: MembershipSource | readonly MembershipSource[];
|
|
24
|
-
/** The object graph for relation grants that walk a parent chain; without it they deny. */
|
|
25
|
-
readonly relations?: RelationSource;
|
|
26
|
-
readonly entitlements?: EntitlementSource;
|
|
27
|
-
readonly customRoles?: RoleSource;
|
|
28
|
-
/** Hosted grants, read once per instance; see `PolicySource`. */
|
|
29
|
-
readonly policies?: PolicySource;
|
|
30
24
|
readonly store?: ApprovalStore;
|
|
31
|
-
readonly sink?: DecisionSink;
|
|
32
|
-
readonly limits?: LimitStore;
|
|
33
|
-
readonly snapshots?: SnapshotSource;
|
|
34
25
|
};
|
|
35
26
|
type OpenAiTool = {
|
|
36
27
|
readonly name: string;
|
package/dist/openai/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { t as compact } from "../compact-y6vfu2_f.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { r as memoryApprovalStore } from "../store-DMAWwAJV.js";
|
|
3
|
+
import { t as instanceOptions } from "../instance-options-Dhhcnm3y.js";
|
|
4
|
+
import { n as createAgentKernel, t as approvalTokenOf } from "../kernel-_RRHmnMY.js";
|
|
4
5
|
//#region src/openai/create.ts
|
|
5
6
|
function appContext(runContext) {
|
|
6
7
|
const context = runContext?.context;
|
|
@@ -31,16 +32,9 @@ function createPermDock(policy, options) {
|
|
|
31
32
|
...compact({
|
|
32
33
|
actor: options.actor,
|
|
33
34
|
delegation: options.delegation,
|
|
34
|
-
tenant: options.tenant
|
|
35
|
-
memberships: options.memberships,
|
|
36
|
-
relations: options.relations,
|
|
37
|
-
entitlements: options.entitlements,
|
|
38
|
-
customRoles: options.customRoles,
|
|
39
|
-
policies: options.policies,
|
|
40
|
-
sink: options.sink,
|
|
41
|
-
limits: options.limits,
|
|
42
|
-
snapshots: options.snapshots
|
|
35
|
+
tenant: options.tenant
|
|
43
36
|
}),
|
|
37
|
+
...instanceOptions(options),
|
|
44
38
|
subject: options.subject,
|
|
45
39
|
tools: options.tools,
|
|
46
40
|
store,
|
|
@@ -54,15 +48,8 @@ function createPermDock(policy, options) {
|
|
|
54
48
|
const context = appContext(runContext);
|
|
55
49
|
const binding = options.tools[toolName];
|
|
56
50
|
if (binding === void 0) return true;
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
if (binding.data === void 0) return !can(permission);
|
|
60
|
-
const data = await binding.data(input);
|
|
61
|
-
if (data === null || data === void 0) return true;
|
|
62
|
-
return !can(permission, data);
|
|
63
|
-
} catch {
|
|
64
|
-
return true;
|
|
65
|
-
}
|
|
51
|
+
const checked = await kernel.check(binding, input, context, { simulate: true });
|
|
52
|
+
return !checked.ok || checked.raw.outcome !== "granted";
|
|
66
53
|
};
|
|
67
54
|
const guardTools = async (tools, context) => {
|
|
68
55
|
const allowed = await kernel.allowedToolNames(context);
|
package/dist/openapi/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { C as Policy,
|
|
2
|
-
import {
|
|
1
|
+
import { C as Policy, Ir as Condition, Nr as Principal } from "../policy-IB6yxpC3.js";
|
|
2
|
+
import { f as Permission, m as PermissionTree } from "../permissions-DttnqqxC.js";
|
|
3
|
+
import { a as ProblemDetails } from "../errors-DPdqI50v.js";
|
|
4
|
+
import { StandardJSONSchemaV1, StandardSchemaV1 } from "@standard-schema/spec";
|
|
3
5
|
//#region src/openapi/types.d.ts
|
|
4
6
|
type OpenApiTarget = "3.1" | "3.2" | "3.3";
|
|
5
7
|
type OverlayVersion = "1.1" | "1.2";
|
|
@@ -83,11 +85,92 @@ export declare const DRAFT_PINS: {
|
|
|
83
85
|
export declare const PROFILE_NAMES: {
|
|
84
86
|
readonly fapi2: "fapi-20-security-profile";
|
|
85
87
|
};
|
|
86
|
-
export declare const GNAP_RESERVED = "scheme.type 'gnap' is reserved and emits nothing. See https://permdock.
|
|
88
|
+
export declare const GNAP_RESERVED = "scheme.type 'gnap' is reserved and emits nothing. See https://permdock.com/docs/standards/watch-list#gnap";
|
|
87
89
|
//#endregion
|
|
88
90
|
//#region src/openapi/emit.d.ts
|
|
89
91
|
export declare function securitySchemesOf(policy: Policy, options: OpenApiPermDockOptions): Record<string, unknown>;
|
|
90
92
|
export declare function catalogOf(options: OpenApiPermDockOptions, extraDrafts?: Readonly<Record<string, string>>): Record<string, unknown>;
|
|
91
93
|
export declare function openapiVersion(target: OpenApiTarget): string;
|
|
92
94
|
//#endregion
|
|
93
|
-
|
|
95
|
+
//#region src/openapi/operations.d.ts
|
|
96
|
+
/**
|
|
97
|
+
* One declared operation: a permission, or a permission with the operation id
|
|
98
|
+
* a tool name uses and the OAuth scopes that reach it, or only OAuth scopes
|
|
99
|
+
* for a route that checks no permission (`protect(null)`).
|
|
100
|
+
*/
|
|
101
|
+
type OperationEntry = Permission | {
|
|
102
|
+
readonly permission: Permission;
|
|
103
|
+
readonly operationId?: string;
|
|
104
|
+
readonly oauthScopes?: readonly string[];
|
|
105
|
+
} | {
|
|
106
|
+
readonly permission?: undefined;
|
|
107
|
+
readonly operationId?: string;
|
|
108
|
+
readonly oauthScopes: readonly string[];
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* The permission of each operation of an API, declared once and read by the
|
|
112
|
+
* HTTP gate and by `permdock/mcp`'s `permissionFor`, so a REST route and the
|
|
113
|
+
* MCP tool that calls it can never disagree.
|
|
114
|
+
*/
|
|
115
|
+
type OperationPermissions = {
|
|
116
|
+
/**
|
|
117
|
+
* The permission of a request: the declared operation whose method and
|
|
118
|
+
* path template match, a literal segment winning over a `{param}`.
|
|
119
|
+
* `undefined` for an undeclared operation, which a gate denies, and for an
|
|
120
|
+
* operation that declares only OAuth scopes. A `HEAD` request matches the
|
|
121
|
+
* `GET` entry of its path when no `HEAD` entry matches.
|
|
122
|
+
*/
|
|
123
|
+
forRequest(method: string, path: string): Permission | undefined;
|
|
124
|
+
/** The permission of an operation id; pass it as `permissionFor` when tool names are operation ids. */
|
|
125
|
+
forOperation(id: string): Permission | undefined;
|
|
126
|
+
oauthScopesForRequest(method: string, path: string): readonly string[] | undefined;
|
|
127
|
+
oauthScopesForOperation(id: string): readonly string[] | undefined;
|
|
128
|
+
};
|
|
129
|
+
/**
|
|
130
|
+
* Operations as `"METHOD /path/{param}"` keys, the OpenAPI path template, to
|
|
131
|
+
* a permission. `base` is a prefix requests carry and the keys do not
|
|
132
|
+
* (`/api/v1`). A key that is not a method and a path throws.
|
|
133
|
+
*/
|
|
134
|
+
export declare function operationPermissions(operations: Readonly<Record<string, OperationEntry>>, options?: {
|
|
135
|
+
readonly base?: string;
|
|
136
|
+
}): OperationPermissions;
|
|
137
|
+
/**
|
|
138
|
+
* The operation permissions an OpenAPI document declares: every operation
|
|
139
|
+
* whose `x-permdock-permissions` names exactly one permission of `tree`, keyed
|
|
140
|
+
* by its method, path and `operationId`. An operation naming none, several or
|
|
141
|
+
* an unknown key is left out, so a gate denies it.
|
|
142
|
+
*/
|
|
143
|
+
export declare function operationPermissionsFromOpenApi(document: unknown, tree: PermissionTree, options?: {
|
|
144
|
+
readonly base?: string;
|
|
145
|
+
}): OperationPermissions;
|
|
146
|
+
//#endregion
|
|
147
|
+
//#region src/openapi/problem-details.d.ts
|
|
148
|
+
/**
|
|
149
|
+
* The Problem Details body the adapters send on a denial, as a Standard
|
|
150
|
+
* Schema with a JSON Schema, for `oc.errors({ FORBIDDEN: { data: problemDetails } })`.
|
|
151
|
+
* Extension members pass through: RFC 9457 lets a problem type add them.
|
|
152
|
+
*/
|
|
153
|
+
export declare const problemDetails: StandardSchemaV1<ProblemDetails> & StandardJSONSchemaV1<ProblemDetails>;
|
|
154
|
+
//#endregion
|
|
155
|
+
//#region src/openapi/security.d.ts
|
|
156
|
+
type SecurityForOptions = {
|
|
157
|
+
/** The security scheme name; defaults to `oauth2`, the name the adapters' `openapi.securitySchemes()` declares. */
|
|
158
|
+
readonly scheme?: string;
|
|
159
|
+
/** Any one of the permissions suffices: one requirement per scope instead of one with every scope. */
|
|
160
|
+
readonly anyOf?: boolean;
|
|
161
|
+
};
|
|
162
|
+
type SecurityFor = {
|
|
163
|
+
readonly security: readonly OpenApiSecurityRequirement[];
|
|
164
|
+
readonly "x-permdock-permissions": readonly string[];
|
|
165
|
+
};
|
|
166
|
+
/** The `x-permdock-permissions` value: the permission keys an operation enforces. */
|
|
167
|
+
export declare function permissionsExtension(permissions: Permission | readonly Permission[]): readonly string[];
|
|
168
|
+
/**
|
|
169
|
+
* An operation's `security` and `x-permdock-permissions`, from permission
|
|
170
|
+
* references alone. Needs no policy, so a contract package can import it.
|
|
171
|
+
* Unlike `permdock openapi emit`, it never drops `security` for a public
|
|
172
|
+
* permission: that needs the policy.
|
|
173
|
+
*/
|
|
174
|
+
export declare function securityFor(permission: Permission | readonly Permission[], options?: SecurityForOptions): SecurityFor;
|
|
175
|
+
//#endregion
|
|
176
|
+
export type { OpenApiDescribe, OpenApiDocsHints, OpenApiFactory, OpenApiOverlayOptions, OpenApiPermDock, OpenApiPermDockOptions, OpenApiSchemeOptions, OpenApiSecurityRequirement, OpenApiTarget, OperationEntry, OperationPermissions, OverlayOperation, OverlayVersion, SchemeType, SecurityFor, SecurityForOptions, SecurityProfileName };
|
package/dist/openapi/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { n as GNAP_RESERVED, r as PROFILE_NAMES, t as DRAFT_PINS } from "../pins-
|
|
2
|
-
import { i as securitySchemesOf, n as
|
|
3
|
-
export { DRAFT_PINS, GNAP_RESERVED, PROFILE_NAMES, catalogOf, createPermDock, openapiVersion, securitySchemesOf };
|
|
1
|
+
import { n as GNAP_RESERVED, r as PROFILE_NAMES, t as DRAFT_PINS } from "../pins-8ILTftC9.js";
|
|
2
|
+
import { a as operationPermissionsFromOpenApi, c as openapiVersion, i as operationPermissions, l as securitySchemesOf, n as securityFor, o as createPermDock, r as problemDetails, s as catalogOf, t as permissionsExtension } from "../openapi-BqRBvAng.js";
|
|
3
|
+
export { DRAFT_PINS, GNAP_RESERVED, PROFILE_NAMES, catalogOf, createPermDock, openapiVersion, operationPermissions, operationPermissionsFromOpenApi, permissionsExtension, problemDetails, securityFor, securitySchemesOf };
|