permdock 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +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-cmvX2jDe.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 +206 -0
- package/dist/better-supabase/index.js +620 -0
- package/dist/bind-CVy3Espv.d.ts +25 -0
- package/dist/bind-VnYn2HKq.js +97 -0
- package/dist/boundary-BM8a_P6E.js +13 -0
- package/dist/boundary-BmHxVH1J.d.ts +15 -0
- package/dist/canonical-json-DemiK4Vp.js +26 -0
- package/dist/{capability-B68OFnZx.js → capability-4qPdO9gk.js} +7 -5
- package/dist/{capability-BDG_nkxt.d.ts → capability-Dq43tT1u.d.ts} +2 -2
- package/dist/catalog/index.d.ts +1 -1
- package/dist/catalog/index.js +1 -1
- package/dist/catalog-BjZSovXQ.js +2 -0
- package/dist/{catalog-doc-BSo_Q_-6.js → catalog-doc-Dsc9y7sd.js} +23 -12
- package/dist/{catalog-B0E6bggc.js → catalog-h2tlKFkq.js} +2 -2
- package/dist/{catalog-H-vFGwWK.js → catalog-z8q6bi_r.js} +4 -4
- 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-BGhHS-lY.js} +2 -2
- package/dist/{cloud-Cuxr6Czw.js → cloud-Bo3e9Ak3.js} +7 -6
- package/dist/{collect-O-tOtbnk.js → collect-DDDv_ESs.js} +194 -42
- package/dist/collect-DLlujdHC.js +83 -0
- package/dist/collect-rG2IQ3t0.js +2 -0
- package/dist/{commands-BMh_Etm2.js → commands-DWOrSQic.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-CNnl6uIt.d.ts +94 -0
- package/dist/config-BJiM-xAm.js +157 -0
- package/dist/config-Bn00Z3ks.js +36 -0
- package/dist/config-report-Dw_JcUqT.js +44 -0
- package/dist/{connection-JvqwHODC.js → connection-CU8MQxRi.js} +1 -1
- package/dist/{context-CKEAabd7.js → context-Ttp0ekMT.js} +36 -27
- package/dist/convex/index.d.ts +9 -4
- package/dist/convex/index.js +14 -4
- package/dist/create-BWyx3jua.d.ts +245 -0
- package/dist/create-CPhDL6qx.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-PdoqESvg.d.ts} +9 -10
- package/dist/{diff-x5Il8LVa.js → diff-B8Tunc3o.js} +44 -11
- package/dist/{diff-BUzf5Poi.js → diff-CzqLxZ77.js} +2 -2
- package/dist/doctor-WpvG6p4k.js +1194 -0
- package/dist/doctor-collect-ByfYlNv1.js +664 -0
- package/dist/{doctor-Bqo6FwUa.js → doctor-rOr-4ZfS.js} +2 -2
- 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-DAqevpNk.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-C3sHpZNS.js} +65 -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-LF_hS-yn.d.ts → index-A0YNL8jZ.d.ts} +1 -1
- package/dist/index-CtE07CBF.d.ts +6 -0
- package/dist/{index-xIxJLwOQ.d.ts → index-D3vbkoSI.d.ts} +75 -7
- package/dist/{index-CltcQ4Bf.d.ts → index-D6_cSa1z.d.ts} +68 -5
- package/dist/index.d.ts +14 -9
- package/dist/index.js +22 -17
- package/dist/instance-options-BK_rNOSC.d.ts +11 -0
- package/dist/instance-options-Dhhcnm3y.js +22 -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-GSQnMz3O.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-CwePaF7C.js → openapi-Bbg4wGVL.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-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-BkGQNzAh.d.ts +10 -0
- package/dist/parse-local-manifest-BrMozJCo.js +36 -0
- package/dist/pdp/index.d.ts +2 -2
- package/dist/pdp/index.js +14 -127
- package/dist/{permdock-yoZ7EjxX.js → permdock-CzqXjCpU.js} +641 -126
- package/dist/{permissions-B8vCg_bI.d.ts → permissions-CDgvKG5L.d.ts} +2 -2
- package/dist/{permissions-CofRqesP.js → permissions-CpZrivYv.js} +3 -3
- package/dist/{permissions-DC7GROPA.js → permissions-DVoF6dMt.js} +77 -15
- package/dist/{permissions-B4apnahQ.d.ts → permissions-DttnqqxC.d.ts} +34 -5
- package/dist/{pins-CqE1jZuF.js → pins-8ILTftC9.js} +2 -2
- package/dist/{policy-CInmNGkM.d.ts → policy-CFZAr_Al.d.ts} +330 -37
- package/dist/{policy-Cq2fB8Q5.d.ts → policy-D8UFyERw.d.ts} +2 -2
- package/dist/{policy-ANp36PnI.js → policy-xyWg7QdR.js} +173 -22
- package/dist/powersync-A8x_Yyvh.js +2 -0
- package/dist/powersync-C7kLglqX.js +540 -0
- package/dist/powersync-yW1UUFzp.js +62 -0
- package/dist/prisma/index.d.ts +3 -2
- package/dist/prisma/index.js +45 -20
- package/dist/{problem-Cgp9-KZA.js → problem-B43ztKIm.js} +74 -109
- package/dist/problem-details-CkL50EEf.d.ts +7 -0
- package/dist/problem-details-_AMOYz-w.js +144 -0
- package/dist/{protected-BuPAycJT.d.ts → protected-CNsMzrVd.d.ts} +5 -4
- package/dist/protected-Cs6kTaHo.js +100 -0
- package/dist/protected-bZs6rbT1.d.ts +40 -0
- package/dist/{provider-wTAUda2v.d.ts → provider-Cjr62YMV.d.ts} +1 -1
- package/dist/provider-DLzpb2Xz.js +52 -0
- package/dist/provider-store-DNyC1y48.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-sqBGMnNs.d.ts +5 -0
- package/dist/resource-ref-CaS9yVPi.js +20 -0
- package/dist/revocations-Bhr0aMIC.js +27 -0
- package/dist/rls-BMNydpHk.js +2521 -0
- package/dist/{rls-BOFU3chG.js → rls-CEvs64Kj.js} +8 -3
- package/dist/rls-fields-BMasREhR.js +3502 -0
- package/dist/{rls-graph-DxQ39PJj.js → rls-graph-pc9fuXYm.js} +100 -36
- package/dist/{rls-import-CXV6LBlS.js → rls-import-D8F7j35Q.js} +7 -6
- package/dist/{rls-migrate-DrFPbf8p.js → rls-migrate-7wikfrVI.js} +6 -5
- package/dist/rls-ownership-B5Lkq62W.js +843 -0
- package/dist/rls-shared-aOQ4hGTO.js +493 -0
- package/dist/rls-verify-D8B7dOTh.js +745 -0
- package/dist/{row-check-BajTgQZ-.d.ts → row-check-Dt35czLy.d.ts} +12 -15
- package/dist/rpc-DOK54_CS.js +89 -0
- package/dist/{run-CJ6UvS3a.js → run-YXCJDNYk.js} +31 -12
- package/dist/runtime-CB8gQFvS.js +11 -0
- package/dist/{saas-BRrZzJkM.js → saas-Bj_FFkjN.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-Gs6TTVa-.d.ts} +1 -1
- package/dist/skills-Biq5uup3.js +192 -0
- package/dist/{skills-C_lpV4Jx.js → skills-JaymNCdK.js} +10 -4
- package/dist/{snapshot-DE8dE_hz.js → snapshot-Enxd0n-s.js} +138 -214
- package/dist/snapshot-cache-D6jLelln.js +44 -0
- package/dist/snapshot-cache-DwQH8ufx.d.ts +45 -0
- package/dist/solid/index.d.ts +39 -9
- package/dist/solid/index.js +76 -85
- package/dist/sources-B0UvrJ21.js +534 -0
- package/dist/sources-BcJgw0lt.d.ts +192 -0
- package/dist/{sql-Bll1d7y0.js → sql-xdg5f4Fi.js} +6 -1
- package/dist/{src-CTNT-PBW.js → src-CSbUiozF.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-D_pjn91-.d.ts} +13 -4
- package/dist/store-options-yO0V6gRn.js +716 -0
- package/dist/{stores-CkG2HrSg.js → stores-4_sqiOA1.js} +10 -63
- package/dist/{stores-CvOnu_2T.d.ts → stores-DVR5NHLE.d.ts} +20 -9
- package/dist/{stream-Q_xlB6Ko.js → stream-DDpvynSB.js} +16 -2
- package/dist/{stream-BhMfZOwr.d.ts → stream-DlvG2hs-.d.ts} +2 -2
- package/dist/subject-settings-BwBmCdTR.js +128 -0
- package/dist/supabase/index.d.ts +122 -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-CwafwxxF.js} +3 -3
- package/dist/{supabase-DTxGtYdi.js → supabase-DTBaC20O.js} +345 -367
- package/dist/supabase-config-Bs44dare.js +472 -0
- package/dist/{supabase-hook-D_OqGb_V.js → supabase-hook-BuxLQLpU.js} +994 -708
- package/dist/supabase-hook-D5qVd_D8.js +2 -0
- package/dist/supautils-DYZnzRWV.js +91 -0
- package/dist/svelte/PermissionBoundary.svelte +37 -0
- package/dist/svelte/Protected.svelte +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-9AWO9EGt.d.ts +197 -0
- package/dist/{types-D6Z6-rKJ.d.ts → types-BPxgszlT.d.ts} +260 -22
- package/dist/{types-BvBk1wgn.d.ts → types-BVyImy5I.d.ts} +5 -3
- package/dist/{types-CxquUByI.d.ts → types-Bvc4oWT6.d.ts} +1 -1
- package/dist/types-C3s9xVJG.d.ts +48 -0
- package/dist/{types-BBK-exvJ.d.ts → types-Dnemwd77.d.ts} +7 -1
- package/dist/types-kxznc7cn.d.ts +52 -0
- package/dist/{types-B8w5PFtS.d.ts → types-vKyAMtcX.d.ts} +17 -1
- package/dist/{types-B9dmiiab.d.ts → types-vNSDF7Dq.d.ts} +1 -1
- package/dist/{sources-DOpW5Ila.d.ts → types-yF5LmQVD.d.ts} +86 -127
- package/dist/unplugin/index.d.ts +1 -1
- package/dist/unplugin/index.js +10 -9
- package/dist/{usage-1ozMubLY.js → usage-D07N9QJ3.js} +2 -2
- package/dist/usage-D82l1CwK.js +2 -0
- package/dist/{usage-CUnK6Ou9.js → usage-DG1oeCca.js} +225 -62
- package/dist/validation-error-CnjZ4t92.js +33 -0
- package/dist/validation-error-CtF23SrC.d.ts +26 -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-Etoa_Mvr.js +2 -0
- package/dist/watch-UihESpsJ.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/collect-B7_TIfmg.js
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { a as listArg, i as globalArgs, s as stringArg, t as COMMAND_DESCRIPTIONS } from "./commands-BMh_Etm2.js";
|
|
2
|
-
import { defineCommand } from "citty";
|
|
3
|
-
//#region src/cli/commands/collect.ts
|
|
4
|
-
function collect(ctx) {
|
|
5
|
-
return defineCommand({
|
|
6
|
-
meta: {
|
|
7
|
-
name: "collect",
|
|
8
|
-
description: COMMAND_DESCRIPTIONS.collect
|
|
9
|
-
},
|
|
10
|
-
args: {
|
|
11
|
-
...globalArgs,
|
|
12
|
-
check: {
|
|
13
|
-
type: "boolean",
|
|
14
|
-
description: "Exit 1 when the catalog on disk is stale; write nothing"
|
|
15
|
-
},
|
|
16
|
-
src: {
|
|
17
|
-
type: "string",
|
|
18
|
-
description: "Source roots or globs, repeatable or comma-separated",
|
|
19
|
-
valueHint: "path"
|
|
20
|
-
},
|
|
21
|
-
out: {
|
|
22
|
-
type: "string",
|
|
23
|
-
description: "Catalog file to write",
|
|
24
|
-
valueHint: "file"
|
|
25
|
-
}
|
|
26
|
-
},
|
|
27
|
-
async run({ args: parsed, rawArgs }) {
|
|
28
|
-
const src = listArg(rawArgs, "src");
|
|
29
|
-
const out = stringArg(parsed.out);
|
|
30
|
-
const result = await (await import("./collect-fRPAQIWb.js")).runCollect({
|
|
31
|
-
cwd: ctx.cwd,
|
|
32
|
-
config: ctx.config,
|
|
33
|
-
collect: {
|
|
34
|
-
...src.length > 0 ? { srcPath: src } : {},
|
|
35
|
-
...out === void 0 ? {} : { out }
|
|
36
|
-
},
|
|
37
|
-
check: parsed.check === true,
|
|
38
|
-
now: ctx.now,
|
|
39
|
-
io: ctx.io
|
|
40
|
-
});
|
|
41
|
-
ctx.report({
|
|
42
|
-
code: result.code,
|
|
43
|
-
output: result.message
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
//#endregion
|
|
49
|
-
export { collect };
|
package/dist/collect-fRPAQIWb.js
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
//#region src/conditions/compile.d.ts
|
|
2
|
-
type MembershipTable = {
|
|
3
|
-
readonly table: string;
|
|
4
|
-
readonly user: string;
|
|
5
|
-
readonly role: string;
|
|
6
|
-
/** Per scope name, the column holding that scope's id (the row's own scope and its ancestors). */
|
|
7
|
-
readonly columns?: Readonly<Record<string, string>>;
|
|
8
|
-
/** Column of the first scope's id; shorthand for `columns[<first scope>]`. */
|
|
9
|
-
readonly tenant?: string;
|
|
10
|
-
/** Column of the second scope's id; shorthand for `columns[<second scope>]`. */
|
|
11
|
-
readonly team?: string;
|
|
12
|
-
readonly id?: string;
|
|
13
|
-
/** Column naming the membership's resource, when one table holds several kinds. */
|
|
14
|
-
readonly resource?: string;
|
|
15
|
-
/** Column holding the membership kind (`Membership.via`); roles with `for` need it. */
|
|
16
|
-
readonly via?: string;
|
|
17
|
-
/** Unix seconds, like `Membership.expiresAt`; `null` never expires. */
|
|
18
|
-
readonly expiresAt?: string;
|
|
19
|
-
};
|
|
20
|
-
type MembershipsMapping = {
|
|
21
|
-
/** The membership table of each named scope. */
|
|
22
|
-
readonly scopes?: Readonly<Record<string, MembershipTable>>;
|
|
23
|
-
/** The first scope's table; shorthand for `scopes[<first scope>]`. */
|
|
24
|
-
readonly tenant?: MembershipTable;
|
|
25
|
-
/** The second scope's table; shorthand for `scopes[<second scope>]`. */
|
|
26
|
-
readonly team?: MembershipTable;
|
|
27
|
-
readonly resource?: Readonly<Record<string, MembershipTable>>;
|
|
28
|
-
};
|
|
29
|
-
//#endregion
|
|
30
|
-
export { MembershipsMapping as t };
|
package/dist/config-BPYmjTOp.js
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { existsSync } from "node:fs";
|
|
2
|
-
import { resolve } from "node:path";
|
|
3
|
-
//#region src/cli/config.ts
|
|
4
|
-
const CONFIG_FILES = [
|
|
5
|
-
"permdock.config.ts",
|
|
6
|
-
"permdock.config.mts",
|
|
7
|
-
"permdock.config.js",
|
|
8
|
-
"permdock.config.mjs"
|
|
9
|
-
];
|
|
10
|
-
function defineConfig(config) {
|
|
11
|
-
return config;
|
|
12
|
-
}
|
|
13
|
-
async function loadConfig(cwd, fromFlag) {
|
|
14
|
-
const path = fromFlag ? resolve(cwd, fromFlag) : CONFIG_FILES.map((name) => resolve(cwd, name)).find((file) => existsSync(file));
|
|
15
|
-
if (path === void 0) return {};
|
|
16
|
-
if (!existsSync(path)) throw new Error(`PermDock CLI: config file not found: ${path}`);
|
|
17
|
-
const { loadModule, pickNamed } = await import("./load-QOOm1z70.js");
|
|
18
|
-
const value = pickNamed(await loadModule(path), ["default"]);
|
|
19
|
-
if (value === null || typeof value !== "object") return {};
|
|
20
|
-
return value;
|
|
21
|
-
}
|
|
22
|
-
function resolveCwd(cwd, fallback) {
|
|
23
|
-
return cwd === void 0 ? fallback : resolve(fallback, cwd);
|
|
24
|
-
}
|
|
25
|
-
//#endregion
|
|
26
|
-
export { loadConfig as n, resolveCwd as r, defineConfig as t };
|
package/dist/context-gtAwAILx.js
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { createContext } from "react";
|
|
2
|
-
//#region src/react/context.ts
|
|
3
|
-
const PermDockStoreContext = createContext(null);
|
|
4
|
-
const PermDockSnapshotPromiseContext = createContext(null);
|
|
5
|
-
//#endregion
|
|
6
|
-
export { PermDockStoreContext as n, PermDockSnapshotPromiseContext as t };
|
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
import { $ as DecisionSink, C as Policy, E as PolicyVocabulary, Mn as Decision, Zt as PermDock, at as LimitStore, ct as MembershipSource, fr as JsonWebKeyLike, ft as RelationSource, hr as Subject, ir as Actor, mr as Principal, pt as RoleSource, sn as PolicySource, tt as EntitlementSource, xt as SnapshotSource } from "./policy-CInmNGkM.js";
|
|
2
|
-
import { d as Permission } from "./permissions-B4apnahQ.js";
|
|
3
|
-
import { f as ApprovalStore } from "./types-B8w5PFtS.js";
|
|
4
|
-
import { t as ApprovalHint } from "./errors-DbZ1YOnb.js";
|
|
5
|
-
import { n as RevocationFeed } from "./revocations-Cy06JNx2.js";
|
|
6
|
-
import { r as PdpFactory } from "./types-BvBk1wgn.js";
|
|
7
|
-
//#region src/server/connection.d.ts
|
|
8
|
-
type ConnectionData<T> = T | (() => T | null | undefined | Promise<T | null | undefined>);
|
|
9
|
-
type ConnectionOptions<T = unknown> = {
|
|
10
|
-
/** The permission the stream or socket is opened for; re-checked after every revalidation. */
|
|
11
|
-
readonly permission?: Permission;
|
|
12
|
-
/** The row for `permission`, or a loader re-run on every revalidation. */
|
|
13
|
-
readonly data?: ConnectionData<T>;
|
|
14
|
-
/** Milliseconds between periodic revalidations; off by default. */
|
|
15
|
-
readonly revalidate?: number;
|
|
16
|
-
};
|
|
17
|
-
type Connection = {
|
|
18
|
-
/** The current instance; replaced, never mutated, after a revalidation. */
|
|
19
|
-
readonly permdock: PermDock;
|
|
20
|
-
/** Aborts with a `PermDockRevokedError` when the connection must end. */
|
|
21
|
-
readonly signal: AbortSignal;
|
|
22
|
-
/**
|
|
23
|
-
* Per-message decision. Data is validated against the resource schema
|
|
24
|
-
* first unless `{ trusted: true }` marks it as a row the server loaded.
|
|
25
|
-
*/
|
|
26
|
-
readonly check: (permission: Permission, data?: unknown, options?: {
|
|
27
|
-
readonly trusted?: boolean;
|
|
28
|
-
}) => Decision;
|
|
29
|
-
readonly filter: <T>(permission: Permission<string, T, "instance">, items: readonly T[]) => T[];
|
|
30
|
-
/** Stops timers and the feed subscription. Call it when the transport closes. */
|
|
31
|
-
readonly close: () => void;
|
|
32
|
-
};
|
|
33
|
-
//#endregion
|
|
34
|
-
//#region src/server/web-bot-auth.d.ts
|
|
35
|
-
type WebBotAuthJwk = JsonWebKeyLike & {
|
|
36
|
-
readonly kid?: string;
|
|
37
|
-
readonly crv?: string;
|
|
38
|
-
};
|
|
39
|
-
type WebBotAuthKeyLookup = (input: {
|
|
40
|
-
readonly request: Request;
|
|
41
|
-
readonly keyid: string;
|
|
42
|
-
readonly agent: string | undefined;
|
|
43
|
-
}) => WebBotAuthJwk | undefined | Promise<WebBotAuthJwk | undefined>;
|
|
44
|
-
type WebBotAuthKeys = {
|
|
45
|
-
readonly lookup: WebBotAuthKeyLookup;
|
|
46
|
-
};
|
|
47
|
-
type WebBotAuthOptions = {
|
|
48
|
-
readonly verify?: boolean;
|
|
49
|
-
readonly keys: WebBotAuthKeys | WebBotAuthKeyLookup;
|
|
50
|
-
readonly required?: boolean;
|
|
51
|
-
readonly maxAge?: number;
|
|
52
|
-
/** Unix seconds; defaults to the system clock. */
|
|
53
|
-
readonly now?: () => number;
|
|
54
|
-
};
|
|
55
|
-
/**
|
|
56
|
-
* An adapter's `webBotAuth` option: `(request) => verifyWebBotAuth(request, options)`,
|
|
57
|
-
* so an app without it does not bundle RFC 9421 verification.
|
|
58
|
-
*/
|
|
59
|
-
type WebBotAuthVerifier = (request: Request) => Promise<Actor | undefined>;
|
|
60
|
-
type DiscoverViaSignatureAgentOptions = {
|
|
61
|
-
readonly allow: readonly string[];
|
|
62
|
-
readonly fetch?: typeof fetch;
|
|
63
|
-
};
|
|
64
|
-
declare class InvalidSignatureError extends Error {
|
|
65
|
-
override readonly name: "InvalidSignatureError";
|
|
66
|
-
readonly response: Response;
|
|
67
|
-
constructor(response: Response);
|
|
68
|
-
}
|
|
69
|
-
declare function invalidSignatureResponse(error: unknown): Response | undefined;
|
|
70
|
-
declare function invalidSignatureProblem(detail: string): Response;
|
|
71
|
-
declare function discoverViaSignatureAgent(options: DiscoverViaSignatureAgentOptions): WebBotAuthKeys;
|
|
72
|
-
declare function verifyWebBotAuth(request: Request, options: WebBotAuthOptions | undefined): Promise<Actor | undefined>;
|
|
73
|
-
//#endregion
|
|
74
|
-
//#region src/server/evaluations.d.ts
|
|
75
|
-
declare function createEvaluationsHandler(options: {
|
|
76
|
-
readonly policy: Policy;
|
|
77
|
-
readonly resolve?: (request: Request) => Promise<PermDock>;
|
|
78
|
-
readonly getPermDock?: (query?: {
|
|
79
|
-
readonly tenant?: string;
|
|
80
|
-
}) => Promise<PermDock>;
|
|
81
|
-
readonly store?: ApprovalStore;
|
|
82
|
-
readonly adapter?: string;
|
|
83
|
-
/** The most evaluations one POST may carry; a larger batch is a 413 before any instance is resolved. */
|
|
84
|
-
readonly maxEvaluations?: number;
|
|
85
|
-
}): {
|
|
86
|
-
readonly POST: (request: Request) => Promise<Response>;
|
|
87
|
-
readonly GET: (request: Request) => Promise<Response>;
|
|
88
|
-
};
|
|
89
|
-
//#endregion
|
|
90
|
-
//#region src/server/create.d.ts
|
|
91
|
-
type ServerPermDockOptions<TUser = unknown> = {
|
|
92
|
-
/** The user, or a full `Subject` (core then skips `policy.subject`); `null` is anonymous. */
|
|
93
|
-
readonly subject: (request: Request) => TUser | Subject | null | Promise<TUser | Subject | null>;
|
|
94
|
-
readonly actor?: (request: Request) => unknown;
|
|
95
|
-
/** `(request) => verifyWebBotAuth(request, options)`; a verified bot becomes the actor. */
|
|
96
|
-
readonly webBotAuth?: WebBotAuthVerifier;
|
|
97
|
-
readonly tenant?: string | ((request: Request) => string | undefined | Promise<string | undefined>);
|
|
98
|
-
readonly memberships?: MembershipSource | readonly MembershipSource[];
|
|
99
|
-
/** The object graph for relation grants that walk a parent chain; without it they deny. */
|
|
100
|
-
readonly relations?: RelationSource;
|
|
101
|
-
readonly entitlements?: EntitlementSource;
|
|
102
|
-
readonly customRoles?: RoleSource;
|
|
103
|
-
/** Hosted grants, read once per instance; see `PolicySource`. */
|
|
104
|
-
readonly policies?: PolicySource;
|
|
105
|
-
readonly store?: ApprovalStore;
|
|
106
|
-
readonly sink?: DecisionSink;
|
|
107
|
-
readonly limits?: LimitStore;
|
|
108
|
-
/** Ends or revalidates open connections; never a decision input. */
|
|
109
|
-
readonly revocations?: RevocationFeed;
|
|
110
|
-
/**
|
|
111
|
-
* `createPermDock` from `permdock/pdp`: `protect` then decides delegated
|
|
112
|
-
* permissions through the remote PDP. The instance handlers receive stays
|
|
113
|
-
* synchronous and keeps denying delegated permissions (`pdp-unavailable`).
|
|
114
|
-
*/
|
|
115
|
-
readonly pdp?: PdpFactory;
|
|
116
|
-
/** Accepted for adapter parity; HTTP adapters do not read it. */
|
|
117
|
-
readonly snapshots?: SnapshotSource;
|
|
118
|
-
/** Added as `approval` to every `approval-required` problem. */
|
|
119
|
-
readonly approval?: ApprovalHint;
|
|
120
|
-
};
|
|
121
|
-
type Guard<T = unknown, V extends PolicyVocabulary = PolicyVocabulary> = {
|
|
122
|
-
readonly ok: true;
|
|
123
|
-
readonly permdock: PermDock<V>;
|
|
124
|
-
readonly decision: Extract<Decision, {
|
|
125
|
-
readonly outcome: "granted";
|
|
126
|
-
}>;
|
|
127
|
-
readonly data: T;
|
|
128
|
-
} | {
|
|
129
|
-
readonly ok: false;
|
|
130
|
-
readonly response: Response;
|
|
131
|
-
};
|
|
132
|
-
type OpenApiHooks = {
|
|
133
|
-
readonly security: (permission: Permission) => {
|
|
134
|
-
readonly security: readonly Record<string, readonly string[]>[];
|
|
135
|
-
readonly "x-permdock-permissions": readonly string[];
|
|
136
|
-
};
|
|
137
|
-
readonly securitySchemes: () => Readonly<Record<string, unknown>>;
|
|
138
|
-
};
|
|
139
|
-
type ProtectOptions = {
|
|
140
|
-
/**
|
|
141
|
-
* `true` when `loadData` returns a row the server loaded itself, to skip
|
|
142
|
-
* schema validation. Anything else is validated against the resource
|
|
143
|
-
* schema before the check.
|
|
144
|
-
*/
|
|
145
|
-
readonly trusted?: boolean;
|
|
146
|
-
};
|
|
147
|
-
type TenantOption<TContext> = string | ((context: TContext) => string | undefined | Promise<string | undefined>);
|
|
148
|
-
type ServerPermDock<V extends PolicyVocabulary = PolicyVocabulary> = {
|
|
149
|
-
readonly permdock: (request: Request) => Promise<PermDock<V>>;
|
|
150
|
-
readonly protect: <T = unknown>(permission: Permission, loadData?: (request: Request) => T | null | undefined | Promise<T | null | undefined>, protectOptions?: ProtectOptions) => (request: Request) => Promise<Guard<T, V>>;
|
|
151
|
-
/** A long-lived connection for a stream or socket opened by `request`. */
|
|
152
|
-
readonly connection: <T = unknown>(request: Request, options?: ConnectionOptions<T>) => Promise<Connection>;
|
|
153
|
-
readonly problem: (decision: Decision, init?: {
|
|
154
|
-
readonly permission?: Permission;
|
|
155
|
-
readonly instance?: string;
|
|
156
|
-
}) => Response;
|
|
157
|
-
readonly openapi: OpenApiHooks;
|
|
158
|
-
readonly permdockHandler: () => ReturnType<typeof createEvaluationsHandler>;
|
|
159
|
-
};
|
|
160
|
-
declare function createPermDock<TUser, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, options: ServerPermDockOptions<TUser>): ServerPermDock<V>;
|
|
161
|
-
//#endregion
|
|
162
|
-
export { ConnectionOptions as S, invalidSignatureProblem as _, ServerPermDockOptions as a, Connection as b, createEvaluationsHandler as c, WebBotAuthJwk as d, WebBotAuthKeyLookup as f, discoverViaSignatureAgent as g, WebBotAuthVerifier as h, ServerPermDock as i, DiscoverViaSignatureAgentOptions as l, WebBotAuthOptions as m, OpenApiHooks as n, TenantOption as o, WebBotAuthKeys as p, ProtectOptions as r, createPermDock as s, Guard as t, InvalidSignatureError as u, invalidSignatureResponse as v, ConnectionData as x, verifyWebBotAuth as y };
|
package/dist/create-CSkhDU9T.js
DELETED
|
@@ -1,222 +0,0 @@
|
|
|
1
|
-
import { t as compact } from "./compact-y6vfu2_f.js";
|
|
2
|
-
import { g as listPermissions } from "./permissions-DC7GROPA.js";
|
|
3
|
-
import { t as createPermDock$1 } from "./permdock-yoZ7EjxX.js";
|
|
4
|
-
import { n as isActor } from "./subject-C6dLxqHU.js";
|
|
5
|
-
import { a as problemFromDecision, i as notFoundProblem, o as problemResponse, t as PROBLEM_BASE } from "./problem-Cgp9-KZA.js";
|
|
6
|
-
import { n as createEvaluationsHandler, r as InvalidSignatureError, t as applyApprovalResume } from "./evaluations-DsAU9ppl.js";
|
|
7
|
-
//#region src/server/create.ts
|
|
8
|
-
/** Resolves an adapter `tenant` option against its framework context; a throw is no tenant. */
|
|
9
|
-
async function tenantScope(option, context) {
|
|
10
|
-
if (option === void 0 || typeof option === "string") return { tenant: option };
|
|
11
|
-
try {
|
|
12
|
-
return { tenant: await option(context) };
|
|
13
|
-
} catch {
|
|
14
|
-
return { tenant: void 0 };
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
async function resolveActor(request, options) {
|
|
18
|
-
const verified = options.webBotAuth === void 0 ? void 0 : await options.webBotAuth(request);
|
|
19
|
-
if (verified !== void 0) return verified;
|
|
20
|
-
if (options.actor === void 0) return;
|
|
21
|
-
try {
|
|
22
|
-
const resolved = await options.actor(request);
|
|
23
|
-
return isActor(resolved) ? resolved : void 0;
|
|
24
|
-
} catch {
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
const NO_TENANT = "\0";
|
|
29
|
-
function createPermDock(policy, options) {
|
|
30
|
-
return createKernel(policy, options);
|
|
31
|
-
}
|
|
32
|
-
function problemFor(decision, init, approval) {
|
|
33
|
-
if (init?.permission !== void 0) return problemFromDecision(decision, init.permission, {
|
|
34
|
-
principal: null,
|
|
35
|
-
context: {}
|
|
36
|
-
}, compact({
|
|
37
|
-
instance: init.instance,
|
|
38
|
-
approval
|
|
39
|
-
}));
|
|
40
|
-
return problemResponse({
|
|
41
|
-
type: `${PROBLEM_BASE}/denied`,
|
|
42
|
-
title: "Permission denied",
|
|
43
|
-
status: 403,
|
|
44
|
-
detail: decision.outcome
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* The kernel behind every HTTP adapter. The subject and actor are resolved
|
|
49
|
-
* once per `Request`; one instance is cached per `(Request, tenant)`, so a
|
|
50
|
-
* global middleware and a later tenant-scoped `protect` never share a tenant.
|
|
51
|
-
*/
|
|
52
|
-
function createKernel(policy, options) {
|
|
53
|
-
const adapter = options.adapter ?? "server";
|
|
54
|
-
const subjects = /* @__PURE__ */ new WeakMap();
|
|
55
|
-
const instances = /* @__PURE__ */ new WeakMap();
|
|
56
|
-
const resolveSubject = (request) => {
|
|
57
|
-
const hit = subjects.get(request);
|
|
58
|
-
if (hit !== void 0) return hit;
|
|
59
|
-
const resolved = (async () => {
|
|
60
|
-
const actor = await resolveActor(request, options);
|
|
61
|
-
let user = null;
|
|
62
|
-
try {
|
|
63
|
-
user = await options.subject(request);
|
|
64
|
-
} catch {
|
|
65
|
-
user = null;
|
|
66
|
-
}
|
|
67
|
-
return {
|
|
68
|
-
user,
|
|
69
|
-
actor
|
|
70
|
-
};
|
|
71
|
-
})();
|
|
72
|
-
subjects.set(request, resolved);
|
|
73
|
-
return resolved;
|
|
74
|
-
};
|
|
75
|
-
const freshSubject = async (request) => {
|
|
76
|
-
const actor = await resolveActor(request, options);
|
|
77
|
-
try {
|
|
78
|
-
return {
|
|
79
|
-
user: await options.subject(request),
|
|
80
|
-
actor
|
|
81
|
-
};
|
|
82
|
-
} catch {
|
|
83
|
-
return {
|
|
84
|
-
user: null,
|
|
85
|
-
actor
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
};
|
|
89
|
-
const instanceFor = async ({ user, actor }, tenant) => {
|
|
90
|
-
const coreOptions = compact({
|
|
91
|
-
tenant,
|
|
92
|
-
memberships: options.memberships,
|
|
93
|
-
relations: options.relations,
|
|
94
|
-
entitlements: options.entitlements,
|
|
95
|
-
customRoles: options.customRoles,
|
|
96
|
-
policies: options.policies,
|
|
97
|
-
sink: options.sink,
|
|
98
|
-
limits: options.limits,
|
|
99
|
-
actor
|
|
100
|
-
});
|
|
101
|
-
const permdock = await createPermDock$1(policy, user, coreOptions);
|
|
102
|
-
const remote = options.pdp === void 0 ? void 0 : await options.pdp(policy, user, coreOptions);
|
|
103
|
-
return {
|
|
104
|
-
permdock: options.wrap === void 0 ? permdock : options.wrap(permdock),
|
|
105
|
-
remote
|
|
106
|
-
};
|
|
107
|
-
};
|
|
108
|
-
const build = async (request, scope) => {
|
|
109
|
-
const { tenant } = scope ?? await tenantScope(options.tenant, request);
|
|
110
|
-
let byTenant = instances.get(request);
|
|
111
|
-
if (byTenant === void 0) {
|
|
112
|
-
byTenant = /* @__PURE__ */ new Map();
|
|
113
|
-
instances.set(request, byTenant);
|
|
114
|
-
}
|
|
115
|
-
const key = tenant ?? NO_TENANT;
|
|
116
|
-
const hit = byTenant.get(key);
|
|
117
|
-
if (hit !== void 0) return hit;
|
|
118
|
-
const built = (async () => instanceFor(await resolveSubject(request), tenant))();
|
|
119
|
-
byTenant.set(key, built);
|
|
120
|
-
return built;
|
|
121
|
-
};
|
|
122
|
-
const connection = async (request, connectionOptions = {}, scope) => {
|
|
123
|
-
const { tenant } = scope ?? await tenantScope(options.tenant, request);
|
|
124
|
-
const { openConnection } = await import("./connection-JvqwHODC.js");
|
|
125
|
-
return openConnection({
|
|
126
|
-
open: async () => (await build(request, { tenant })).permdock,
|
|
127
|
-
rebuild: async () => (await instanceFor(await freshSubject(request), tenant)).permdock,
|
|
128
|
-
tenant,
|
|
129
|
-
...options.revocations === void 0 ? {} : { feed: options.revocations },
|
|
130
|
-
adapter,
|
|
131
|
-
options: connectionOptions
|
|
132
|
-
});
|
|
133
|
-
};
|
|
134
|
-
const permdock = async (request, scope) => (await build(request, scope)).permdock;
|
|
135
|
-
const protect = (permission, loadData, protectOptions = {}) => async (request, scope) => {
|
|
136
|
-
let instance;
|
|
137
|
-
let remote;
|
|
138
|
-
try {
|
|
139
|
-
({permdock: instance, remote} = await build(request, scope));
|
|
140
|
-
} catch (error) {
|
|
141
|
-
if (error instanceof InvalidSignatureError) return {
|
|
142
|
-
ok: false,
|
|
143
|
-
response: error.response
|
|
144
|
-
};
|
|
145
|
-
throw error;
|
|
146
|
-
}
|
|
147
|
-
let data;
|
|
148
|
-
if (loadData !== void 0) {
|
|
149
|
-
const loaded = await loadData(request);
|
|
150
|
-
if (loaded === null || loaded === void 0) return {
|
|
151
|
-
ok: false,
|
|
152
|
-
response: notFoundProblem()
|
|
153
|
-
};
|
|
154
|
-
data = loaded;
|
|
155
|
-
}
|
|
156
|
-
const decideOptions = compact({
|
|
157
|
-
source: "adapter",
|
|
158
|
-
adapter,
|
|
159
|
-
...protectOptions.trusted === true ? { trusted: true } : {
|
|
160
|
-
trusted: false,
|
|
161
|
-
boundary: "http-body"
|
|
162
|
-
}
|
|
163
|
-
});
|
|
164
|
-
const raw = remote === void 0 ? instance.decide(permission, data, decideOptions) : await remote.decide(permission, data, decideOptions).catch(() => ({
|
|
165
|
-
outcome: "denied",
|
|
166
|
-
denials: [{
|
|
167
|
-
role: null,
|
|
168
|
-
reason: "pdp-unavailable"
|
|
169
|
-
}],
|
|
170
|
-
alternatives: []
|
|
171
|
-
}));
|
|
172
|
-
const decision = await applyApprovalResume(raw, permission, instance, options.store, request, compact({
|
|
173
|
-
type: permission.resource,
|
|
174
|
-
id: data !== null && typeof data === "object" && "id" in data && (typeof data.id === "string" || typeof data.id === "number") ? String(data.id) : void 0
|
|
175
|
-
}), adapter);
|
|
176
|
-
if (decision.outcome === "granted") return {
|
|
177
|
-
ok: true,
|
|
178
|
-
permdock: instance,
|
|
179
|
-
decision,
|
|
180
|
-
data
|
|
181
|
-
};
|
|
182
|
-
return {
|
|
183
|
-
ok: false,
|
|
184
|
-
response: problemFromDecision(decision, permission, instance.subject, compact({
|
|
185
|
-
approval: options.approval,
|
|
186
|
-
credentials: request.headers.has("authorization"),
|
|
187
|
-
disclosure: data === void 0 ? void 0 : policy.resources.get(permission.resource)?.disclosure
|
|
188
|
-
}))
|
|
189
|
-
};
|
|
190
|
-
};
|
|
191
|
-
const openapi = {
|
|
192
|
-
security: (permission) => ({
|
|
193
|
-
security: [{ oauth2: [permission.scope] }],
|
|
194
|
-
"x-permdock-permissions": [permission.key]
|
|
195
|
-
}),
|
|
196
|
-
securitySchemes: () => {
|
|
197
|
-
const scopes = {};
|
|
198
|
-
for (const leaf of listPermissions(policy.permissions)) scopes[leaf.scope] = leaf.meta.title ?? leaf.key;
|
|
199
|
-
return { oauth2: {
|
|
200
|
-
type: "oauth2",
|
|
201
|
-
flows: {},
|
|
202
|
-
scopes
|
|
203
|
-
} };
|
|
204
|
-
}
|
|
205
|
-
};
|
|
206
|
-
const permdockHandler = (scope) => createEvaluationsHandler(compact({
|
|
207
|
-
policy,
|
|
208
|
-
resolve: scope === void 0 ? permdock : async (request) => permdock(request, await scope(request)),
|
|
209
|
-
store: options.store,
|
|
210
|
-
adapter
|
|
211
|
-
}));
|
|
212
|
-
return {
|
|
213
|
-
permdock,
|
|
214
|
-
protect,
|
|
215
|
-
connection,
|
|
216
|
-
problem: (decision, init) => problemFor(decision, init, options.approval),
|
|
217
|
-
openapi,
|
|
218
|
-
permdockHandler
|
|
219
|
-
};
|
|
220
|
-
}
|
|
221
|
-
//#endregion
|
|
222
|
-
export { createPermDock as n, tenantScope as r, createKernel as t };
|