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/eve/index.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { t as compact } from "../compact-y6vfu2_f.js";
|
|
2
|
-
import { n as isApprovalError } from "../errors-
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { n as isApprovalError } from "../errors-DRnGZHzF.js";
|
|
3
|
+
import { r as memoryApprovalStore } from "../store-DMAWwAJV.js";
|
|
4
|
+
import { o as resolveApproval } from "../helpers-H_KARDVC.js";
|
|
5
|
+
import { t as instanceOptions } from "../instance-options-Dhhcnm3y.js";
|
|
6
|
+
import { n as createAgentKernel } from "../kernel-_RRHmnMY.js";
|
|
5
7
|
import { t as boundedMap } from "../lru-8q4WZjBV.js";
|
|
6
8
|
//#region src/eve/create.ts
|
|
7
9
|
const TOKENS_PER_PROCESS = 1e3;
|
|
@@ -55,16 +57,9 @@ function createPermDock(policy, options) {
|
|
|
55
57
|
const kernel = createAgentKernel(policy, {
|
|
56
58
|
...compact({
|
|
57
59
|
tenant: options.tenant,
|
|
58
|
-
delegation: options.delegation
|
|
59
|
-
memberships: options.memberships,
|
|
60
|
-
relations: options.relations,
|
|
61
|
-
entitlements: options.entitlements,
|
|
62
|
-
customRoles: options.customRoles,
|
|
63
|
-
policies: options.policies,
|
|
64
|
-
sink: options.sink,
|
|
65
|
-
limits: options.limits,
|
|
66
|
-
snapshots: options.snapshots
|
|
60
|
+
delegation: options.delegation
|
|
67
61
|
}),
|
|
62
|
+
...instanceOptions(options),
|
|
68
63
|
subject: options.subject ?? subjectFromSession,
|
|
69
64
|
actor: options.actor ?? actorFromSession,
|
|
70
65
|
tools: options.tools,
|
package/dist/express/index.d.ts
CHANGED
|
@@ -1,41 +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, 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 { h as InvalidSignatureError, i as ProtectOptions, n as OpenApiHooks, 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 } from "../http-DPuDaChb.js";
|
|
8
6
|
import { ErrorRequestHandler, Request, RequestHandler, Response, Router } from "express";
|
|
9
7
|
//#region src/express/create.d.ts
|
|
10
|
-
type ExpressPermDockOptions<TUser = unknown> =
|
|
11
|
-
readonly subject: (req: Request) => TUser | Promise<TUser>;
|
|
12
|
-
readonly tenant?: TenantOption<Request>;
|
|
13
|
-
readonly memberships?: MembershipSource | readonly MembershipSource[];
|
|
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;
|
|
31
|
-
};
|
|
8
|
+
type ExpressPermDockOptions<TUser = unknown> = ServerAdapterOptions<Request, TUser>;
|
|
32
9
|
type PermDockRequest<T = unknown, V extends PolicyVocabulary = PolicyVocabulary> = Request & {
|
|
33
10
|
permdock: PermDock<V>;
|
|
34
11
|
permdockData?: T;
|
|
35
12
|
};
|
|
36
13
|
type ExpressPermDock<V extends PolicyVocabulary = PolicyVocabulary> = {
|
|
37
14
|
readonly permdock: () => RequestHandler;
|
|
38
|
-
readonly protect: (permission: Permission, loadData?: (req: Request) => unknown, protectOptions?: ProtectOptions) => RequestHandler;
|
|
15
|
+
readonly protect: (permission: Permission | null, loadData?: (req: Request) => unknown, protectOptions?: ProtectOptions) => RequestHandler;
|
|
39
16
|
readonly errorHandler: () => ErrorRequestHandler;
|
|
40
17
|
readonly permdockHandler: () => Router;
|
|
41
18
|
readonly withPermDock: (fn: (req: PermDockRequest<unknown, V>, res: Response) => unknown) => RequestHandler;
|
package/dist/express/index.js
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { i as toRequest, r as sendResponse } from "../http-GgVApX1k.js";
|
|
1
|
+
import { i as discoverViaSignatureAgent, r as InvalidSignatureError, s as verifyWebBotAuth } from "../evaluations-tz6D9A2G.js";
|
|
2
|
+
import { t as problemFromError } from "../map-error-pgUWNNtG.js";
|
|
3
|
+
import { i as decorate, r as bindKernel } from "../bind-CuzGytRf.js";
|
|
4
|
+
import { i as toRequest, r as sendResponse } from "../http-BIhmLfCc.js";
|
|
6
5
|
import express from "express";
|
|
7
6
|
//#region src/express/create.ts
|
|
8
7
|
function run(work, next) {
|
|
9
8
|
work().catch(next);
|
|
10
9
|
}
|
|
11
|
-
|
|
12
|
-
const problem = problemFromError(err);
|
|
10
|
+
function sendProblem(err, req, res, next) {
|
|
11
|
+
const problem = problemFromError(err, { credentials: req.headers.authorization !== void 0 });
|
|
13
12
|
if (problem === void 0) {
|
|
14
13
|
next(err);
|
|
15
14
|
return;
|
|
@@ -17,81 +16,52 @@ const errorHandler = () => (err, _req, res, next) => {
|
|
|
17
16
|
run(async () => {
|
|
18
17
|
await sendResponse(res, problem);
|
|
19
18
|
}, next);
|
|
19
|
+
}
|
|
20
|
+
/** Answers a PermDock error with Problem Details; anything else reaches the app's error middleware. */
|
|
21
|
+
function respond(req, res, next, work) {
|
|
22
|
+
work().catch((err) => {
|
|
23
|
+
sendProblem(err, req, res, next);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
const errorHandler = () => (err, req, res, next) => {
|
|
27
|
+
sendProblem(err, req, res, next);
|
|
20
28
|
};
|
|
21
29
|
const withPermDock = (fn) => (req, res, next) => {
|
|
22
30
|
run(async () => {
|
|
23
31
|
await fn(req, res);
|
|
24
32
|
}, next);
|
|
25
33
|
};
|
|
26
|
-
/** Runs `use` on the Express request bound to `request`; `fallback` for a request this adapter never bound. */
|
|
27
|
-
function withBound(contexts, request, use, fallback) {
|
|
28
|
-
const req = contexts.get(request);
|
|
29
|
-
return req === void 0 ? fallback : use(req);
|
|
30
|
-
}
|
|
31
34
|
function createPermDock(policy, options) {
|
|
32
|
-
const
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
memberships: options.memberships,
|
|
37
|
-
relations: options.relations,
|
|
38
|
-
entitlements: options.entitlements,
|
|
39
|
-
customRoles: options.customRoles,
|
|
40
|
-
policies: options.policies,
|
|
41
|
-
store: options.store,
|
|
42
|
-
sink: options.sink,
|
|
43
|
-
limits: options.limits,
|
|
44
|
-
pdp: options.pdp,
|
|
45
|
-
webBotAuth: options.webBotAuth,
|
|
46
|
-
adapter: "express",
|
|
47
|
-
wrap: options.otel
|
|
48
|
-
}));
|
|
49
|
-
const bind = (req) => {
|
|
50
|
-
const hit = bound.get(req);
|
|
51
|
-
if (hit !== void 0) return hit;
|
|
52
|
-
const request = toRequest(req);
|
|
53
|
-
bound.set(req, request);
|
|
54
|
-
contexts.set(request, req);
|
|
55
|
-
return request;
|
|
56
|
-
};
|
|
57
|
-
const scopeOf = (req) => tenantScope(options.tenant, req);
|
|
58
|
-
/** The decision endpoint reads the body a parser may have consumed since `bind`. */
|
|
59
|
-
const rebind = (req) => {
|
|
60
|
-
const request = toRequest(req);
|
|
61
|
-
contexts.set(request, req);
|
|
62
|
-
return request;
|
|
63
|
-
};
|
|
64
|
-
const permdock = () => (req, _res, next) => {
|
|
65
|
-
run(async () => {
|
|
66
|
-
req.permdock = await kernel.permdock(bind(req), await scopeOf(req));
|
|
35
|
+
const { kernel, bind, rebind, scopeOf, handlerScope } = bindKernel(policy, options, "express", toRequest);
|
|
36
|
+
const permdock = () => (req, res, next) => {
|
|
37
|
+
respond(req, res, next, async () => {
|
|
38
|
+
decorate(req, await kernel.permdock(bind(req), await scopeOf(req)));
|
|
67
39
|
next();
|
|
68
|
-
}
|
|
40
|
+
});
|
|
69
41
|
};
|
|
70
42
|
const protect = (permission, loadData, protectOptions) => (req, res, next) => {
|
|
71
|
-
|
|
43
|
+
respond(req, res, next, async () => {
|
|
72
44
|
const guard = await kernel.protect(permission, loadData === void 0 ? void 0 : () => loadData(req), protectOptions)(bind(req), await scopeOf(req));
|
|
73
45
|
if (!guard.ok) {
|
|
74
46
|
await sendResponse(res, guard.response);
|
|
75
47
|
return;
|
|
76
48
|
}
|
|
77
|
-
|
|
78
|
-
scoped.permdock = guard.permdock;
|
|
79
|
-
scoped.permdockData = guard.data;
|
|
49
|
+
decorate(req, guard.permdock, guard.data);
|
|
80
50
|
next();
|
|
81
|
-
}
|
|
51
|
+
});
|
|
82
52
|
};
|
|
83
53
|
const permdockHandler = () => {
|
|
84
|
-
const { POST, GET } = kernel.permdockHandler(
|
|
54
|
+
const { POST, GET } = kernel.permdockHandler(handlerScope);
|
|
85
55
|
const router = express.Router({ mergeParams: true });
|
|
86
56
|
router.post("/", (req, res, next) => {
|
|
87
|
-
|
|
57
|
+
respond(req, res, next, async () => {
|
|
88
58
|
await sendResponse(res, await POST(rebind(req)));
|
|
89
|
-
}
|
|
59
|
+
});
|
|
90
60
|
});
|
|
91
61
|
router.get("/", (req, res, next) => {
|
|
92
|
-
|
|
62
|
+
respond(req, res, next, async () => {
|
|
93
63
|
await sendResponse(res, await GET(bind(req)));
|
|
94
|
-
}
|
|
64
|
+
});
|
|
95
65
|
});
|
|
96
66
|
return router;
|
|
97
67
|
};
|
package/dist/fastify/index.d.ts
CHANGED
|
@@ -1,33 +1,10 @@
|
|
|
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, 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 { h as InvalidSignatureError, i as ProtectOptions, n as OpenApiHooks, w as verifyWebBotAuth, x as discoverViaSignatureAgent } from "../create-B1d519XK.js";
|
|
4
|
+
import { t as ServerAdapterOptions } from "../bind-C_ob3LKa.js";
|
|
7
5
|
import { FastifyPluginAsync, FastifyReply, FastifyRequest, FastifySchema, FastifyTypeProvider, FastifyTypeProviderDefault, RawRequestDefaultExpression, RawServerDefault, RouteGenericInterface } from "fastify";
|
|
8
6
|
//#region src/fastify/create.d.ts
|
|
9
|
-
type FastifyPermDockOptions<TUser = unknown> =
|
|
10
|
-
readonly subject: (request: FastifyRequest) => TUser | Promise<TUser>;
|
|
11
|
-
readonly tenant?: TenantOption<FastifyRequest>;
|
|
12
|
-
readonly memberships?: MembershipSource | readonly MembershipSource[];
|
|
13
|
-
/** The object graph for relation grants that walk a parent chain; without it they deny. */
|
|
14
|
-
readonly relations?: RelationSource;
|
|
15
|
-
readonly entitlements?: EntitlementSource;
|
|
16
|
-
readonly customRoles?: RoleSource;
|
|
17
|
-
/** Hosted grants, read once per instance; see `PolicySource`. */
|
|
18
|
-
readonly policies?: PolicySource;
|
|
19
|
-
readonly store?: ApprovalStore;
|
|
20
|
-
readonly sink?: DecisionSink;
|
|
21
|
-
readonly limits?: LimitStore;
|
|
22
|
-
/** `createPermDock` from `permdock/pdp`; `protect` then decides delegated permissions remotely. */
|
|
23
|
-
readonly pdp?: PdpFactory;
|
|
24
|
-
/** Accepted for adapter parity; not read by this adapter. */
|
|
25
|
-
readonly snapshots?: SnapshotSource;
|
|
26
|
-
/** `(permdock) => withOtel(permdock, options)` from `permdock/otel`. */
|
|
27
|
-
readonly otel?: OtelWrap;
|
|
28
|
-
/** `(request) => verifyWebBotAuth(request, options)`; a verified bot becomes the actor. */
|
|
29
|
-
readonly webBotAuth?: WebBotAuthVerifier;
|
|
30
|
-
};
|
|
7
|
+
type FastifyPermDockOptions<TUser = unknown> = ServerAdapterOptions<FastifyRequest, TUser>;
|
|
31
8
|
type PermDockRequest<Route extends RouteGenericInterface = RouteGenericInterface, V extends PolicyVocabulary = PolicyVocabulary> = FastifyRequest<Route> & {
|
|
32
9
|
permdock: PermDock<V>;
|
|
33
10
|
permdockData?: unknown;
|
|
@@ -38,7 +15,7 @@ type ProtectRequest<Route extends RouteGenericInterface = RouteGenericInterface,
|
|
|
38
15
|
* Generic over the route, schema and type provider so a `preHandler` slot
|
|
39
16
|
* infers them: `loadData` sees the same typed `request.body` as the handler.
|
|
40
17
|
*/
|
|
41
|
-
type FastifyProtect = <Route extends RouteGenericInterface = RouteGenericInterface, Schema extends FastifySchema = FastifySchema, Provider extends FastifyTypeProvider = FastifyTypeProviderDefault>(permission: Permission, loadData?: (request: ProtectRequest<Route, Schema, Provider>) => unknown, protectOptions?: ProtectOptions) => (request: ProtectRequest<Route, Schema, Provider>, reply: FastifyReply) => Promise<void>;
|
|
18
|
+
type FastifyProtect = <Route extends RouteGenericInterface = RouteGenericInterface, Schema extends FastifySchema = FastifySchema, Provider extends FastifyTypeProvider = FastifyTypeProviderDefault>(permission: Permission | null, loadData?: (request: ProtectRequest<Route, Schema, Provider>) => unknown, protectOptions?: ProtectOptions) => (request: ProtectRequest<Route, Schema, Provider>, reply: FastifyReply) => Promise<void>;
|
|
42
19
|
type FastifyPermDock<V extends PolicyVocabulary = PolicyVocabulary> = {
|
|
43
20
|
readonly permdock: FastifyPluginAsync;
|
|
44
21
|
readonly protect: FastifyProtect;
|
package/dist/fastify/index.js
CHANGED
|
@@ -1,25 +1,18 @@
|
|
|
1
|
-
import { t as
|
|
2
|
-
import { i as discoverViaSignatureAgent, r as InvalidSignatureError, s as verifyWebBotAuth } from "../evaluations-
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { i as parsedBody, r as headersFrom, t as firstHeader } from "../http-SO7qGttf.js";
|
|
2
|
+
import { i as discoverViaSignatureAgent, r as InvalidSignatureError, s as verifyWebBotAuth } from "../evaluations-tz6D9A2G.js";
|
|
3
|
+
import { t as problemFromError } from "../map-error-pgUWNNtG.js";
|
|
4
|
+
import { i as decorate, r as bindKernel } from "../bind-CuzGytRf.js";
|
|
5
5
|
//#region src/fastify/http.ts
|
|
6
6
|
function toRequest(request) {
|
|
7
|
-
const host =
|
|
7
|
+
const host = firstHeader(request.headers.host) ?? "localhost";
|
|
8
8
|
const url = `${request.protocol}://${host}${request.url}`;
|
|
9
|
-
const headers =
|
|
10
|
-
for (const [key, value] of Object.entries(request.headers)) {
|
|
11
|
-
if (typeof value === "string") {
|
|
12
|
-
headers.set(key, value);
|
|
13
|
-
continue;
|
|
14
|
-
}
|
|
15
|
-
if (Array.isArray(value)) for (const item of value) headers.append(key, item);
|
|
16
|
-
}
|
|
9
|
+
const headers = headersFrom(request.headers);
|
|
17
10
|
const method = request.method;
|
|
18
11
|
if (method === "GET" || method === "HEAD") return new Request(url, {
|
|
19
12
|
method,
|
|
20
13
|
headers
|
|
21
14
|
});
|
|
22
|
-
const body =
|
|
15
|
+
const body = parsedBody(request.body, headers);
|
|
23
16
|
if (body === void 0) return new Request(url, {
|
|
24
17
|
method,
|
|
25
18
|
headers
|
|
@@ -30,16 +23,6 @@ function toRequest(request) {
|
|
|
30
23
|
body
|
|
31
24
|
});
|
|
32
25
|
}
|
|
33
|
-
function headerValue(value) {
|
|
34
|
-
if (typeof value === "string" && value.length > 0) return value;
|
|
35
|
-
if (Array.isArray(value) && typeof value[0] === "string") return value[0];
|
|
36
|
-
}
|
|
37
|
-
function bodyOf(request, headers) {
|
|
38
|
-
if (request.body === void 0) return;
|
|
39
|
-
if (typeof request.body === "string") return request.body;
|
|
40
|
-
if (!headers.has("content-type")) headers.set("content-type", "application/json");
|
|
41
|
-
return JSON.stringify(request.body);
|
|
42
|
-
}
|
|
43
26
|
async function sendReply(reply, response) {
|
|
44
27
|
reply.code(response.status);
|
|
45
28
|
for (const [key, value] of response.headers.entries()) reply.header(key, value);
|
|
@@ -52,50 +35,23 @@ function breakEncapsulation(plugin) {
|
|
|
52
35
|
Object.defineProperty(plugin, SKIP_OVERRIDE, { value: true });
|
|
53
36
|
return plugin;
|
|
54
37
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
38
|
+
/** A route registered with `config: { permdock: false }`, such as a health check, gets no instance. */
|
|
39
|
+
function skipped(request) {
|
|
40
|
+
const config = request.routeOptions.config;
|
|
41
|
+
return typeof config === "object" && config !== null && Reflect.get(config, "permdock") === false;
|
|
59
42
|
}
|
|
60
43
|
function createPermDock(policy, options) {
|
|
61
|
-
const
|
|
62
|
-
const bound = /* @__PURE__ */ new WeakMap();
|
|
63
|
-
const kernel = createKernel(policy, compact({
|
|
64
|
-
subject: (request) => {
|
|
65
|
-
const req = contexts.get(request);
|
|
66
|
-
return req === void 0 ? null : options.subject(req);
|
|
67
|
-
},
|
|
68
|
-
memberships: options.memberships,
|
|
69
|
-
relations: options.relations,
|
|
70
|
-
entitlements: options.entitlements,
|
|
71
|
-
customRoles: options.customRoles,
|
|
72
|
-
policies: options.policies,
|
|
73
|
-
store: options.store,
|
|
74
|
-
sink: options.sink,
|
|
75
|
-
limits: options.limits,
|
|
76
|
-
pdp: options.pdp,
|
|
77
|
-
webBotAuth: options.webBotAuth,
|
|
78
|
-
adapter: "fastify",
|
|
79
|
-
wrap: options.otel
|
|
80
|
-
}));
|
|
81
|
-
const bind = (request) => {
|
|
82
|
-
const hit = bound.get(request);
|
|
83
|
-
if (hit !== void 0) return hit;
|
|
84
|
-
const next = toRequest(request);
|
|
85
|
-
bound.set(request, next);
|
|
86
|
-
contexts.set(next, request);
|
|
87
|
-
return next;
|
|
88
|
-
};
|
|
89
|
-
const scopeOf = (request) => tenantScope(options.tenant, request);
|
|
44
|
+
const { kernel, bind, rebind, scopeOf, handlerScope } = bindKernel(policy, options, "fastify", toRequest);
|
|
90
45
|
const permdock = breakEncapsulation((app) => {
|
|
91
46
|
app.decorateRequest("permdock", null);
|
|
92
47
|
app.decorateRequest("permdockData", null);
|
|
93
48
|
app.addHook("onRequest", async (request) => {
|
|
49
|
+
if (skipped(request)) return;
|
|
94
50
|
decorate(request, await kernel.permdock(bind(request), await scopeOf(request)));
|
|
95
51
|
});
|
|
96
52
|
const previous = app.errorHandler;
|
|
97
53
|
app.setErrorHandler(async function permdockErrors(err, request, reply) {
|
|
98
|
-
const problem = problemFromError(err);
|
|
54
|
+
const problem = problemFromError(err, { credentials: request.headers.authorization !== void 0 });
|
|
99
55
|
if (problem === void 0) {
|
|
100
56
|
await previous.call(this, err, request, reply);
|
|
101
57
|
return;
|
|
@@ -114,14 +70,9 @@ function createPermDock(policy, options) {
|
|
|
114
70
|
decorate(plain, guard.permdock, guard.data);
|
|
115
71
|
};
|
|
116
72
|
const permdockHandler = (app) => {
|
|
117
|
-
const { POST, GET } = kernel.permdockHandler(
|
|
118
|
-
const req = contexts.get(request);
|
|
119
|
-
return req === void 0 ? { tenant: void 0 } : scopeOf(req);
|
|
120
|
-
});
|
|
73
|
+
const { POST, GET } = kernel.permdockHandler(handlerScope);
|
|
121
74
|
app.post("/", async (request, reply) => {
|
|
122
|
-
|
|
123
|
-
contexts.set(parsed, request);
|
|
124
|
-
await sendReply(reply, await POST(parsed));
|
|
75
|
+
await sendReply(reply, await POST(rebind(request)));
|
|
125
76
|
});
|
|
126
77
|
app.get("/", async (request, reply) => {
|
|
127
78
|
await sendReply(reply, await GET(bind(request)));
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
|
|
2
|
+
import { D as ownKeys, E as ownGet, T as isForbiddenKey } from "./permissions-DVoF6dMt.js";
|
|
3
|
+
//#region src/core/fields.ts
|
|
4
|
+
function sanitizeFields(fields) {
|
|
5
|
+
if (fields === void 0) return;
|
|
6
|
+
return fields.filter((field) => field.length > 0 && !isForbiddenKey(field));
|
|
7
|
+
}
|
|
8
|
+
function grantCoversField(fields, field, effect) {
|
|
9
|
+
if (fields === void 0) return true;
|
|
10
|
+
if (fields.length === 0) return false;
|
|
11
|
+
if (field === void 0) return effect === "allow";
|
|
12
|
+
return fields.includes(field);
|
|
13
|
+
}
|
|
14
|
+
function pickVisible(row, canField) {
|
|
15
|
+
const out = {};
|
|
16
|
+
for (const key of ownKeys(row)) if (canField(key)) out[key] = ownGet(row, key);
|
|
17
|
+
return freezeDeep(out);
|
|
18
|
+
}
|
|
19
|
+
function sanitizeContext(value) {
|
|
20
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) return {};
|
|
21
|
+
const out = {};
|
|
22
|
+
for (const key of ownKeys(value)) out[key] = ownGet(value, key);
|
|
23
|
+
return out;
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
26
|
+
export { sanitizeFields as i, pickVisible as n, sanitizeContext as r, grantCoversField as t };
|
|
@@ -117,5 +117,9 @@ function rel(cwd, abs) {
|
|
|
117
117
|
function defaultSrcPath() {
|
|
118
118
|
return ["./src"];
|
|
119
119
|
}
|
|
120
|
+
/** Where `doctor` reads source files: `doctor.srcPath`, else `collect.srcPath`, else `./src`. */
|
|
121
|
+
function doctorSrcPath(config) {
|
|
122
|
+
return config.doctor?.srcPath ?? config.collect?.srcPath ?? defaultSrcPath();
|
|
123
|
+
}
|
|
120
124
|
//#endregion
|
|
121
|
-
export { sqlFiles as i,
|
|
125
|
+
export { sqlFiles as a, rel as i, doctorSrcPath as n, listSourceFiles as r, defaultSrcPath as t };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as loadModule, o as pickNamed } from "./load-
|
|
1
|
+
import { a as loadModule, o as pickNamed } from "./load-DhWEB9P1.js";
|
|
2
2
|
import { existsSync, readFileSync } from "node:fs";
|
|
3
3
|
import { resolve } from "node:path";
|
|
4
4
|
//#region src/cli/fixtures.ts
|
|
@@ -16,6 +16,8 @@ function asFixtures(value) {
|
|
|
16
16
|
if (memberships !== void 0 && !Array.isArray(memberships)) throw new Error(`PermDock CLI: fixture ${index} subject.memberships must be an array`);
|
|
17
17
|
const tenant = item["subject"]["tenant"];
|
|
18
18
|
if (tenant !== void 0 && typeof tenant !== "string") throw new Error(`PermDock CLI: fixture ${index} subject.tenant must be a string`);
|
|
19
|
+
const claims = item["subject"]["claims"];
|
|
20
|
+
if (claims !== void 0 && !isRecord(claims)) throw new Error(`PermDock CLI: fixture ${index} subject.claims must be an object`);
|
|
19
21
|
return item;
|
|
20
22
|
});
|
|
21
23
|
}
|
|
@@ -48,7 +50,8 @@ function fixtureSubject(fixture) {
|
|
|
48
50
|
id: fixture.id,
|
|
49
51
|
roles: fixture.roles ?? [],
|
|
50
52
|
...fixture.tenant === void 0 ? {} : { tenant: fixture.tenant },
|
|
51
|
-
memberships: fixture.memberships ?? []
|
|
53
|
+
memberships: fixture.memberships ?? [],
|
|
54
|
+
...fixture.claims === void 0 ? {} : { claims: fixture.claims }
|
|
52
55
|
},
|
|
53
56
|
context: {}
|
|
54
57
|
};
|
|
@@ -1,11 +1,40 @@
|
|
|
1
1
|
//#region src/core/freeze.ts
|
|
2
|
+
function refuse() {
|
|
3
|
+
throw new TypeError("PermDock: this collection is frozen");
|
|
4
|
+
}
|
|
5
|
+
const LOCKED = {
|
|
6
|
+
value: refuse,
|
|
7
|
+
writable: false,
|
|
8
|
+
enumerable: false
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* `Object.freeze` leaves a `Map` or `Set` writable through `set`, `add`,
|
|
12
|
+
* `delete` and `clear`, so those are shadowed on the instance with a method
|
|
13
|
+
* that throws. Identity and `instanceof` stay as they were.
|
|
14
|
+
*/
|
|
15
|
+
function freezeCollection(value) {
|
|
16
|
+
Object.defineProperties(value, value instanceof Map ? {
|
|
17
|
+
set: LOCKED,
|
|
18
|
+
delete: LOCKED,
|
|
19
|
+
clear: LOCKED
|
|
20
|
+
} : {
|
|
21
|
+
add: LOCKED,
|
|
22
|
+
delete: LOCKED,
|
|
23
|
+
clear: LOCKED
|
|
24
|
+
});
|
|
25
|
+
Object.freeze(value);
|
|
26
|
+
for (const [key, item] of value.entries()) {
|
|
27
|
+
freezeDeep(key);
|
|
28
|
+
freezeDeep(item);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
2
31
|
function freezeDeep(value) {
|
|
3
32
|
if (value === null || typeof value !== "object") return value;
|
|
33
|
+
if (Object.isFrozen(value)) return value;
|
|
4
34
|
if (value instanceof Map || value instanceof Set) {
|
|
5
|
-
|
|
35
|
+
freezeCollection(value);
|
|
6
36
|
return value;
|
|
7
37
|
}
|
|
8
|
-
if (Object.isFrozen(value)) return value;
|
|
9
38
|
Object.freeze(value);
|
|
10
39
|
if (Array.isArray(value)) {
|
|
11
40
|
for (const item of value) freezeDeep(item);
|