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/ai-sdk/index.js
CHANGED
|
@@ -1,7 +1,18 @@
|
|
|
1
1
|
import { t as compact } from "../compact-y6vfu2_f.js";
|
|
2
|
-
import { n as PermDockDeniedError, t as PermDockApprovalRequiredError } from "../errors-
|
|
3
|
-
import {
|
|
2
|
+
import { n as PermDockDeniedError, t as PermDockApprovalRequiredError } from "../errors-Cz5zn0mW.js";
|
|
3
|
+
import { t as instanceOptions } from "../instance-options-Dhhcnm3y.js";
|
|
4
|
+
import { n as createAgentKernel, t as approvalTokenOf } from "../kernel-GSQnMz3O.js";
|
|
4
5
|
//#region src/ai-sdk/create.ts
|
|
6
|
+
const APPROVAL_STATUSES = /* @__PURE__ */ new Set([
|
|
7
|
+
"approved",
|
|
8
|
+
"not-applicable",
|
|
9
|
+
"denied",
|
|
10
|
+
"user-approval"
|
|
11
|
+
]);
|
|
12
|
+
function isToolApprovalResult(value) {
|
|
13
|
+
if (value === void 0 || APPROVAL_STATUSES.has(value)) return true;
|
|
14
|
+
return typeof value === "object" && value !== null && "type" in value && APPROVAL_STATUSES.has(value.type) && (!("reason" in value) || value.reason === void 0 || typeof value.reason === "string");
|
|
15
|
+
}
|
|
5
16
|
function contextOf(call) {
|
|
6
17
|
const runtime = call.runtimeContext !== null && typeof call.runtimeContext === "object" ? call.runtimeContext : {};
|
|
7
18
|
return compact({
|
|
@@ -56,24 +67,19 @@ function createPermDock(policy, options) {
|
|
|
56
67
|
actor: options.actor,
|
|
57
68
|
delegation: options.delegation,
|
|
58
69
|
tenant: options.tenant,
|
|
59
|
-
|
|
60
|
-
relations: options.relations,
|
|
61
|
-
entitlements: options.entitlements,
|
|
62
|
-
customRoles: options.customRoles,
|
|
63
|
-
policies: options.policies,
|
|
64
|
-
store: options.store,
|
|
65
|
-
sink: options.sink,
|
|
66
|
-
limits: options.limits,
|
|
67
|
-
snapshots: options.snapshots
|
|
70
|
+
store: options.store
|
|
68
71
|
}),
|
|
72
|
+
...instanceOptions(options),
|
|
69
73
|
subject: options.subject,
|
|
70
74
|
tools: options.tools,
|
|
71
75
|
adapter: "ai-sdk"
|
|
72
76
|
});
|
|
73
77
|
const byPermission = /* @__PURE__ */ new Map();
|
|
74
78
|
for (const [name, binding] of Object.entries(options.tools)) byPermission.set(binding.permission.key, name);
|
|
79
|
+
const passes = (toolName) => options.unmapped === "allow" && !Object.hasOwn(options.tools, toolName);
|
|
75
80
|
const decide = (toolName, args, context) => kernel.decideTool(toolName, args, context, compact({ resumeToken: approvalTokenOf(context) }));
|
|
76
81
|
const toolApproval = async (call) => {
|
|
82
|
+
if (passes(call.toolCall.toolName)) return "approved";
|
|
77
83
|
const context = contextOf(call);
|
|
78
84
|
const verdict = await decide(call.toolCall.toolName, call.toolCall.input, context);
|
|
79
85
|
if (verdict.outcome === "granted") return "approved";
|
|
@@ -96,9 +102,10 @@ function createPermDock(policy, options) {
|
|
|
96
102
|
transformParams: async ({ params }) => {
|
|
97
103
|
if (params.tools === void 0) return params;
|
|
98
104
|
const allowed = await kernel.allowedToolNames(context);
|
|
99
|
-
const
|
|
105
|
+
const keeps = (name) => typeof name === "string" && (allowed.has(name) || passes(name));
|
|
106
|
+
const tools = params.tools.filter((tool) => keeps(tool.name));
|
|
100
107
|
const choice = params.toolChoice;
|
|
101
|
-
const forcedAway = choice?.type === "tool" && !(
|
|
108
|
+
const forcedAway = choice?.type === "tool" && !keeps(choice.toolName);
|
|
102
109
|
return {
|
|
103
110
|
...params,
|
|
104
111
|
tools,
|
|
@@ -127,8 +134,18 @@ function createPermDock(policy, options) {
|
|
|
127
134
|
});
|
|
128
135
|
return true;
|
|
129
136
|
};
|
|
137
|
+
const composeToolApproval = (app) => async (call) => {
|
|
138
|
+
const verdict = await toolApproval(call);
|
|
139
|
+
if (verdict !== "approved") return verdict;
|
|
140
|
+
const answer = await app(call);
|
|
141
|
+
return isToolApprovalResult(answer) ? answer : {
|
|
142
|
+
type: "denied",
|
|
143
|
+
reason: "The tool approval answer was not valid."
|
|
144
|
+
};
|
|
145
|
+
};
|
|
130
146
|
return {
|
|
131
147
|
toolApproval,
|
|
148
|
+
composeToolApproval,
|
|
132
149
|
capabilityMiddleware,
|
|
133
150
|
needsApproval
|
|
134
151
|
};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { _ as approverRelationKey, a as ApprovalListFilter, c as ApprovalRequest, d as ApprovalStatus, f as ApprovalStore, g as approvalQuorum, h as DEFAULT_APPROVAL_TTL_MS, i as ApprovalInspectResult, l as ApprovalResumeFailure, m as ApprovalVerdict, n as ApprovalApprovers, o as ApprovalListQuery, p as ApprovalSubjectSummary, r as ApprovalCancelMeta, s as ApprovalPage, t as APPROVAL_HEADER, u as ApprovalSignature, v as escalationOpenAt } from "../types-
|
|
2
|
-
import {
|
|
3
|
-
export { APPROVAL_HEADER, type ApprovalApprovers, type ApprovalCancelMeta, ApprovalError, type ApprovalErrorCode, type ApprovalInspectResult, type ApprovalListFilter, type ApprovalListQuery, type ApprovalPage, type ApprovalRequest, type ApprovalResumeFailure, type ApprovalSignature, type ApprovalStatus, type ApprovalStore, type ApprovalSubjectSummary, type ApprovalVerdict, type ApprovalsHandlerOptions, type ApproverRelationsOptions, DEFAULT_APPROVAL_TTL_MS, type MemoryApprovalStore, applyApprovalVerdict, approvalQuorum, approvalsHandler, approverRelationKey, approverRelations, assertApprover, cancelApprovals, consumeApproval, escalationOpenAt, inspectApproval, isApprovalError, memoryApprovalStore, readApprovalHeader, requestApproval, resolveApproval, resumeDecision, resumeFromHeader, summariseSubject };
|
|
1
|
+
import { _ as approverRelationKey, a as ApprovalListFilter, c as ApprovalRequest, d as ApprovalStatus, f as ApprovalStore, g as approvalQuorum, h as DEFAULT_APPROVAL_TTL_MS, i as ApprovalInspectResult, l as ApprovalResumeFailure, m as ApprovalVerdict, n as ApprovalApprovers, o as ApprovalListQuery, p as ApprovalSubjectSummary, r as ApprovalCancelMeta, s as ApprovalPage, t as APPROVAL_HEADER, u as ApprovalSignature, v as escalationOpenAt } from "../types-vKyAMtcX.js";
|
|
2
|
+
import { C as ApproverRelationsOptions, D as ApprovalError, E as approvalsHandler, O as ApprovalErrorCode, S as vouchApproval, T as ApprovalsHandlerOptions, _ as resolveApproval, a as approverPermissions, b as storedApprovalToken, c as decodeApprovalCursor, d as pageApprovals, f as cancelApprovals, g as requestApproval, h as readApprovalHeader, i as memoryApprovalStore, k as isApprovalError, l as encodeApprovalCursor, m as inspectApproval, n as applyApprovalVerdict, o as ApprovalCursorPosition, p as consumeApproval, r as assertApprover, s as approvalPageSize, t as MemoryApprovalStore, u as listAllApprovals, v as resumeDecision, w as approverRelations, x as summariseSubject, y as resumeFromHeader } from "../index-D6_cSa1z.js";
|
|
3
|
+
export { APPROVAL_HEADER, type ApprovalApprovers, type ApprovalCancelMeta, type ApprovalCursorPosition, ApprovalError, type ApprovalErrorCode, type ApprovalInspectResult, type ApprovalListFilter, type ApprovalListQuery, type ApprovalPage, type ApprovalRequest, type ApprovalResumeFailure, type ApprovalSignature, type ApprovalStatus, type ApprovalStore, type ApprovalSubjectSummary, type ApprovalVerdict, type ApprovalsHandlerOptions, type ApproverRelationsOptions, DEFAULT_APPROVAL_TTL_MS, type MemoryApprovalStore, applyApprovalVerdict, approvalPageSize, approvalQuorum, approvalsHandler, approverPermissions, approverRelationKey, approverRelations, assertApprover, cancelApprovals, consumeApproval, decodeApprovalCursor, encodeApprovalCursor, escalationOpenAt, inspectApproval, isApprovalError, listAllApprovals, memoryApprovalStore, pageApprovals, readApprovalHeader, requestApproval, resolveApproval, resumeDecision, resumeFromHeader, storedApprovalToken, summariseSubject, vouchApproval };
|
package/dist/approvals/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { n as isApprovalError, t as ApprovalError } from "../errors-
|
|
2
|
-
import {
|
|
3
|
-
import { t as
|
|
4
|
-
|
|
1
|
+
import { n as isApprovalError, t as ApprovalError } from "../errors-DRnGZHzF.js";
|
|
2
|
+
import { a as decodeApprovalCursor, c as pageApprovals, d as approvalQuorum, f as approverRelationKey, i as approvalPageSize, l as APPROVAL_HEADER, n as assertApprover, o as encodeApprovalCursor, p as escalationOpenAt, r as memoryApprovalStore, s as listAllApprovals, t as applyApprovalVerdict, u as DEFAULT_APPROVAL_TTL_MS } from "../store-DMAWwAJV.js";
|
|
3
|
+
import { a as requestApproval, c as resumeFromHeader, d as vouchApproval, f as approverPermissions, i as readApprovalHeader, l as storedApprovalToken, m as approverRelations, n as consumeApproval, o as resolveApproval, r as inspectApproval, s as resumeDecision, t as cancelApprovals, u as summariseSubject } from "../helpers-H_KARDVC.js";
|
|
4
|
+
import { t as approvalsHandler } from "../approvals-DbYAuNkG.js";
|
|
5
|
+
export { APPROVAL_HEADER, ApprovalError, DEFAULT_APPROVAL_TTL_MS, applyApprovalVerdict, approvalPageSize, approvalQuorum, approvalsHandler, approverPermissions, approverRelationKey, approverRelations, assertApprover, cancelApprovals, consumeApproval, decodeApprovalCursor, encodeApprovalCursor, escalationOpenAt, inspectApproval, isApprovalError, listAllApprovals, memoryApprovalStore, pageApprovals, readApprovalHeader, requestApproval, resolveApproval, resumeDecision, resumeFromHeader, storedApprovalToken, summariseSubject, vouchApproval };
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { t as compact } from "./compact-y6vfu2_f.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { t as PROBLEM_BASE } from "./validation-error-CnjZ4t92.js";
|
|
3
|
+
import { s as rootMembershipId } from "./scopes-CVdPrWN-.js";
|
|
4
|
+
import { n as isApprovalError } from "./errors-DRnGZHzF.js";
|
|
5
|
+
import { n as hasCredentials } from "./http-SO7qGttf.js";
|
|
6
|
+
import { l as unauthenticatedProblem } from "./problem-B43ztKIm.js";
|
|
7
|
+
import { n as assertApprover } from "./store-DMAWwAJV.js";
|
|
8
|
+
import { m as approverRelations, p as heldPermissions } from "./helpers-H_KARDVC.js";
|
|
5
9
|
//#region src/approvals/handler.ts
|
|
6
|
-
const PROBLEM_BASE = "https://permdock.dev/problems";
|
|
7
10
|
function problem(status, title, detail, slug) {
|
|
8
11
|
const body = {
|
|
9
12
|
type: `${PROBLEM_BASE}/${slug}`,
|
|
@@ -68,7 +71,8 @@ function belongsToTenant(subject, tenant) {
|
|
|
68
71
|
async function mayResolve(request, subject, requireDistinct, options) {
|
|
69
72
|
try {
|
|
70
73
|
const relations = await approverRelations(request, subject, options);
|
|
71
|
-
|
|
74
|
+
const permissions = await heldPermissions(request, subject, options.permdockFor);
|
|
75
|
+
assertApprover(request, subject, requireDistinct, /* @__PURE__ */ new Date(), relations, permissions);
|
|
72
76
|
return true;
|
|
73
77
|
} catch {
|
|
74
78
|
return false;
|
|
@@ -143,11 +147,11 @@ async function readNote(request) {
|
|
|
143
147
|
return;
|
|
144
148
|
}
|
|
145
149
|
}
|
|
146
|
-
function mapError(error) {
|
|
150
|
+
function mapError(error, credentials) {
|
|
147
151
|
if (!isApprovalError(error)) return problem(500, "Internal error", "approval store failed", "internal");
|
|
148
152
|
if (error.code === "approval-not-found") return problem(404, "Not found", error.message, "not-found");
|
|
149
153
|
if (error.code === "approval-not-pending" || error.code === "approval-expired" || error.code === "approver-repeated") return problem(409, "Conflict", error.message, "conflict");
|
|
150
|
-
if (error.code === "approver-unauthenticated") return
|
|
154
|
+
if (error.code === "approver-unauthenticated") return unauthenticatedProblem(credentials);
|
|
151
155
|
return problem(403, "Permission denied", error.message, "denied");
|
|
152
156
|
}
|
|
153
157
|
function approvalsHandler(store, options) {
|
|
@@ -159,7 +163,7 @@ function approvalsHandler(store, options) {
|
|
|
159
163
|
await store.expire();
|
|
160
164
|
const subject = await resolveSubject(request, options.subject);
|
|
161
165
|
const principal = subject?.principal ?? null;
|
|
162
|
-
if (subject === null || principal === null) return
|
|
166
|
+
if (subject === null || principal === null) return unauthenticatedProblem(hasCredentials(request));
|
|
163
167
|
try {
|
|
164
168
|
if (route.kind === "pending") {
|
|
165
169
|
const scoped = inboxScope(url, subject);
|
|
@@ -196,13 +200,15 @@ function approvalsHandler(store, options) {
|
|
|
196
200
|
const current = await store.get(route.token);
|
|
197
201
|
if (current === null) return problem(404, "Not found", "approval was not found", "not-found");
|
|
198
202
|
const relations = await approverRelations(current, subject, options);
|
|
199
|
-
|
|
203
|
+
const permissions = await heldPermissions(current, subject, options.permdockFor);
|
|
204
|
+
assertApprover(current, subject, requireDistinct, /* @__PURE__ */ new Date(), relations, permissions);
|
|
200
205
|
const note = await readNote(request);
|
|
201
206
|
const resolved = await store.resolve(route.token, compact({
|
|
202
207
|
status: route.kind === "approve" ? "approved" : "rejected",
|
|
203
208
|
by: subject,
|
|
204
209
|
note,
|
|
205
|
-
relations
|
|
210
|
+
relations,
|
|
211
|
+
permissions
|
|
206
212
|
}));
|
|
207
213
|
const signed = await signedApproval(resolved, options.signer, options.audience);
|
|
208
214
|
return json(200, compact({
|
|
@@ -210,7 +216,7 @@ function approvalsHandler(store, options) {
|
|
|
210
216
|
signed
|
|
211
217
|
}));
|
|
212
218
|
} catch (error) {
|
|
213
|
-
return mapError(error);
|
|
219
|
+
return mapError(error, hasCredentials(request));
|
|
214
220
|
}
|
|
215
221
|
};
|
|
216
222
|
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { n as isReadonlyArray } from "./compact-y6vfu2_f.js";
|
|
2
|
+
//#region src/core/approvers.ts
|
|
3
|
+
/** Approves when the approver holds `permission` in the request's tenant (any role, custom roles included). */
|
|
4
|
+
function holder(permission) {
|
|
5
|
+
const key = permission?.key;
|
|
6
|
+
if (typeof key !== "string" || key === "") throw new Error("PermDock: holder() needs a permission");
|
|
7
|
+
return Object.freeze({
|
|
8
|
+
kind: "permission",
|
|
9
|
+
permission: key
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
/** Approves when the approver matches any one of `items`. */
|
|
13
|
+
function anyOf(...items) {
|
|
14
|
+
if (items.length === 0) throw new Error("PermDock: anyOf() needs at least one approver");
|
|
15
|
+
return Object.freeze({
|
|
16
|
+
kind: "any-of",
|
|
17
|
+
of: Object.freeze([...items])
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
/** Approves when the approver matches every one of `items`; the same as a list. */
|
|
21
|
+
function allOf(...items) {
|
|
22
|
+
if (items.length === 0) throw new Error("PermDock: allOf() needs at least one approver");
|
|
23
|
+
return Object.freeze([...items]);
|
|
24
|
+
}
|
|
25
|
+
/** A named approver for `approval.by`, matched on the approver's principal id. */
|
|
26
|
+
function user(id) {
|
|
27
|
+
if (typeof id !== "string" || id === "") throw new Error("PermDock: user() needs a non-empty principal id");
|
|
28
|
+
return Object.freeze({
|
|
29
|
+
kind: "user",
|
|
30
|
+
id
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
function isUserApprover(value) {
|
|
34
|
+
return value !== null && typeof value === "object" && "kind" in value && value.kind === "user";
|
|
35
|
+
}
|
|
36
|
+
function flattenApprovers(input) {
|
|
37
|
+
if (input === void 0) return [];
|
|
38
|
+
if (isReadonlyArray(input)) return input;
|
|
39
|
+
return [input];
|
|
40
|
+
}
|
|
41
|
+
/** Every approver `input` names, inside `anyOf` groups too, for reading facts and labels. */
|
|
42
|
+
function approverLeaves(input) {
|
|
43
|
+
return flattenApprovers(input).flatMap((item) => item.kind === "any-of" ? item.of.flatMap((entry) => approverLeaves(entry)) : [item]);
|
|
44
|
+
}
|
|
45
|
+
function isPermissionApprover(value) {
|
|
46
|
+
return value !== null && typeof value === "object" && "kind" in value && value.kind === "permission";
|
|
47
|
+
}
|
|
48
|
+
function isAnyOfInput(value) {
|
|
49
|
+
return value !== null && typeof value === "object" && "kind" in value && value.kind === "any-of";
|
|
50
|
+
}
|
|
51
|
+
//#endregion
|
|
52
|
+
export { holder as a, isUserApprover as c, flattenApprovers as i, user as l, anyOf as n, isAnyOfInput as o, approverLeaves as r, isPermissionApprover as s, allOf as t };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { a as loadModule, o as pickNamed, t as asPermissionTree } from "./load-
|
|
1
|
+
import { u as arazzoFindings } from "./snapshot-Enxd0n-s.js";
|
|
2
|
+
import { a as loadModule, o as pickNamed, t as asPermissionTree } from "./load-DhWEB9P1.js";
|
|
3
3
|
import { existsSync, readFileSync } from "node:fs";
|
|
4
4
|
import { resolve } from "node:path";
|
|
5
5
|
//#region src/cli/arazzo.ts
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as listArg, i as globalArgs, s as stringArg, t as COMMAND_DESCRIPTIONS } from "./commands-
|
|
1
|
+
import { a as listArg, i as globalArgs, s as stringArg, t as COMMAND_DESCRIPTIONS } from "./commands-DWOrSQic.js";
|
|
2
2
|
import { defineCommand } from "citty";
|
|
3
3
|
//#region src/cli/commands/arazzo.ts
|
|
4
4
|
function arazzo(ctx) {
|
|
@@ -36,7 +36,7 @@ function arazzo(ctx) {
|
|
|
36
36
|
}
|
|
37
37
|
},
|
|
38
38
|
async run({ args: parsed, rawArgs }) {
|
|
39
|
-
const result = await (await import("./arazzo-
|
|
39
|
+
const result = await (await import("./arazzo-BAgw9ap6.js")).runArazzo({
|
|
40
40
|
cwd: ctx.cwd,
|
|
41
41
|
config: ctx.config,
|
|
42
42
|
rest: parsed._,
|
package/dist/authzen/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { f as ApprovalStore } from "../types-
|
|
1
|
+
import { C as Policy, Nr as Principal } from "../policy-CFZAr_Al.js";
|
|
2
|
+
import { f as ApprovalStore } from "../types-vKyAMtcX.js";
|
|
3
|
+
import { t as InstanceOptions } from "../instance-options-BK_rNOSC.js";
|
|
3
4
|
//#region src/authzen/types.d.ts
|
|
4
5
|
type AuthzenResourceAdapter = {
|
|
5
6
|
readonly load?: (id: string) => unknown;
|
|
@@ -11,7 +12,7 @@ type AuthzenSubjectRecord = {
|
|
|
11
12
|
readonly id: string;
|
|
12
13
|
readonly [key: string]: unknown;
|
|
13
14
|
};
|
|
14
|
-
type AuthzenPermDockOptions<TUser = unknown> = {
|
|
15
|
+
type AuthzenPermDockOptions<TUser = unknown> = InstanceOptions & {
|
|
15
16
|
readonly subject: (request: Request) => TUser | Promise<TUser>;
|
|
16
17
|
readonly anonymous?: boolean;
|
|
17
18
|
/**
|
|
@@ -24,17 +25,7 @@ type AuthzenPermDockOptions<TUser = unknown> = {
|
|
|
24
25
|
readonly subjects?: {
|
|
25
26
|
readonly list?: () => readonly AuthzenSubjectRecord[] | Promise<readonly AuthzenSubjectRecord[]>;
|
|
26
27
|
};
|
|
27
|
-
readonly memberships?: MembershipSource | readonly MembershipSource[];
|
|
28
|
-
/** The object graph for relation grants that walk a parent chain; without it they deny. */
|
|
29
|
-
readonly relations?: RelationSource;
|
|
30
|
-
readonly entitlements?: EntitlementSource;
|
|
31
|
-
readonly customRoles?: RoleSource;
|
|
32
|
-
/** Hosted grants, read once per instance; see `PolicySource`. */
|
|
33
|
-
readonly policies?: PolicySource;
|
|
34
28
|
readonly store?: ApprovalStore;
|
|
35
|
-
readonly sink?: DecisionSink;
|
|
36
|
-
readonly limits?: LimitStore;
|
|
37
|
-
readonly snapshots?: SnapshotSource;
|
|
38
29
|
readonly maxEvaluations?: number;
|
|
39
30
|
};
|
|
40
31
|
type AuthzenPermDock = {
|
package/dist/authzen/index.js
CHANGED
|
@@ -1,35 +1,15 @@
|
|
|
1
1
|
import { t as compact } from "../compact-y6vfu2_f.js";
|
|
2
|
-
import {
|
|
3
|
-
import { t as
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
2
|
+
import { E as ownGet, _ as listPermissions, c as getResource } from "../permissions-DVoF6dMt.js";
|
|
3
|
+
import { t as PROBLEM_BASE } from "../validation-error-CnjZ4t92.js";
|
|
4
|
+
import { t as createPermDock$1 } from "../permdock-CzqXjCpU.js";
|
|
5
|
+
import { n as resourceRef } from "../resource-ref-CaS9yVPi.js";
|
|
6
|
+
import { n as hasCredentials } from "../http-SO7qGttf.js";
|
|
7
|
+
import { i as methodNotAllowed, l as unauthenticatedProblem, s as problemResponse, t as batchTooLarge, u as validationProblem } from "../problem-B43ztKIm.js";
|
|
8
|
+
import { t as applyApprovalResume } from "../evaluations-tz6D9A2G.js";
|
|
9
|
+
import { t as instanceOptions } from "../instance-options-Dhhcnm3y.js";
|
|
10
|
+
import { n as permissionLookup } from "../evaluation-items-CfCCejQd.js";
|
|
11
|
+
import { a as endsWithPath, c as mergeItem, d as pathnameOf, f as permissionOf, g as userFromEntity, h as tenantOf, i as delegationOf, l as pageOf, m as resourceIdOf, n as UNKNOWN, o as evaluationRow, p as resourceData, r as actorOf, s as isRecord, t as UNAVAILABLE, u as paged } from "../map-AcxK9o_D.js";
|
|
7
12
|
//#region src/authzen/create.ts
|
|
8
|
-
function unauthorized() {
|
|
9
|
-
return problemResponse({
|
|
10
|
-
type: `${PROBLEM_BASE}/unauthenticated`,
|
|
11
|
-
title: "Unauthenticated",
|
|
12
|
-
status: 401,
|
|
13
|
-
detail: "AuthZEN decision endpoint requires authentication"
|
|
14
|
-
}, void 0, {
|
|
15
|
-
outcome: "denied",
|
|
16
|
-
denials: [{
|
|
17
|
-
role: null,
|
|
18
|
-
reason: "anonymous"
|
|
19
|
-
}],
|
|
20
|
-
alternatives: []
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
function methodNotAllowed(allow) {
|
|
24
|
-
const response = problemResponse({
|
|
25
|
-
type: `${PROBLEM_BASE}/method-not-allowed`,
|
|
26
|
-
title: "Method not allowed",
|
|
27
|
-
status: 405,
|
|
28
|
-
detail: `use ${allow}`
|
|
29
|
-
});
|
|
30
|
-
response.headers.set("Allow", allow);
|
|
31
|
-
return response;
|
|
32
|
-
}
|
|
33
13
|
function notFound(detail) {
|
|
34
14
|
return problemResponse({
|
|
35
15
|
type: `${PROBLEM_BASE}/not-found`,
|
|
@@ -62,17 +42,9 @@ function withRequestId(request, response) {
|
|
|
62
42
|
if (id !== null && id !== "") response.headers.set("X-Request-ID", id);
|
|
63
43
|
return response;
|
|
64
44
|
}
|
|
65
|
-
function resourceRef(permission, data, item) {
|
|
66
|
-
const fromRow = data !== null && typeof data === "object" && "id" in data ? data.id : void 0;
|
|
67
|
-
const fromWire = item.resource?.id;
|
|
68
|
-
const id = typeof fromRow === "string" || typeof fromRow === "number" ? String(fromRow) : typeof fromWire === "string" || typeof fromWire === "number" ? String(fromWire) : void 0;
|
|
69
|
-
return compact({
|
|
70
|
-
type: permission.resource,
|
|
71
|
-
id
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
45
|
const createPermDock = (policy, options) => {
|
|
75
46
|
const maxEvaluations = options.maxEvaluations ?? 256;
|
|
47
|
+
const lookup = permissionLookup(policy.permissions);
|
|
76
48
|
const trusts = (pep) => {
|
|
77
49
|
const allow = options.trustedPep;
|
|
78
50
|
if (typeof allow !== "function" || pep === null) return false;
|
|
@@ -90,7 +62,7 @@ const createPermDock = (policy, options) => {
|
|
|
90
62
|
} catch {
|
|
91
63
|
pep = null;
|
|
92
64
|
}
|
|
93
|
-
if ((pep === null || pep === void 0) && !allowAnonymous) return
|
|
65
|
+
if ((pep === null || pep === void 0) && !allowAnonymous) return unauthenticatedProblem(hasCredentials(request));
|
|
94
66
|
return { pep: pep ?? null };
|
|
95
67
|
}
|
|
96
68
|
function instantiate(pep, item) {
|
|
@@ -100,13 +72,7 @@ const createPermDock = (policy, options) => {
|
|
|
100
72
|
actor: trusted ? actorOf(item) : void 0,
|
|
101
73
|
delegation: trusted ? delegationOf(item) : void 0,
|
|
102
74
|
tenant: tenantOf(item),
|
|
103
|
-
|
|
104
|
-
relations: options.relations,
|
|
105
|
-
entitlements: options.entitlements,
|
|
106
|
-
customRoles: options.customRoles,
|
|
107
|
-
policies: options.policies,
|
|
108
|
-
sink: options.sink,
|
|
109
|
-
limits: options.limits
|
|
75
|
+
...instanceOptions(options)
|
|
110
76
|
}));
|
|
111
77
|
}
|
|
112
78
|
async function resourceOf(item) {
|
|
@@ -132,7 +98,7 @@ const createPermDock = (policy, options) => {
|
|
|
132
98
|
};
|
|
133
99
|
}
|
|
134
100
|
async function decideItem(request, pep, item) {
|
|
135
|
-
const permission = permissionOf(
|
|
101
|
+
const permission = permissionOf(lookup, item);
|
|
136
102
|
if (permission === void 0) return UNKNOWN;
|
|
137
103
|
const resolved = await resourceOf(item);
|
|
138
104
|
if (resolved === void 0) return UNAVAILABLE;
|
|
@@ -149,7 +115,7 @@ const createPermDock = (policy, options) => {
|
|
|
149
115
|
trusted: false,
|
|
150
116
|
boundary: "decision-endpoint"
|
|
151
117
|
});
|
|
152
|
-
return applyApprovalResume(decision, permission, permdock, options.store, request, resourceRef(permission, data, item), "authzen");
|
|
118
|
+
return applyApprovalResume(decision, permission, permdock, options.store, request, resourceRef(permission, data, item.resource?.id), "authzen");
|
|
153
119
|
}
|
|
154
120
|
async function evaluation(request, pep) {
|
|
155
121
|
const body = await readJson(request);
|
|
@@ -220,7 +186,7 @@ const createPermDock = (policy, options) => {
|
|
|
220
186
|
if (!isRecord(body)) return validationProblem("search/resource body must be an object");
|
|
221
187
|
const item = body;
|
|
222
188
|
const type = typeof item.resource?.type === "string" ? item.resource.type : void 0;
|
|
223
|
-
const permission = permissionOf(
|
|
189
|
+
const permission = permissionOf(lookup, item);
|
|
224
190
|
if (type === void 0 || permission === void 0) return Response.json(paged([], 0, 1));
|
|
225
191
|
const rows = await listRows(type, isRecord(item.resource?.properties) ? item.resource.properties : void 0);
|
|
226
192
|
const permdock = await instantiate(pep, item);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { Nr as Principal, Pr as Subject, at as DecisionSink, k as RoleBinding, xt as RoleSource } from "../policy-CFZAr_Al.js";
|
|
2
|
+
import { m as PermissionTree } from "../permissions-DttnqqxC.js";
|
|
3
3
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
4
4
|
//#region src/better-auth/types.d.ts
|
|
5
5
|
type BetterAuthPrincipal = Principal & {
|
|
@@ -19,7 +19,20 @@ type BetterAuthAssignableRole = {
|
|
|
19
19
|
readonly name: string;
|
|
20
20
|
readonly statements: BetterAuthStatements;
|
|
21
21
|
};
|
|
22
|
+
type BetterAuthMemberQuery = {
|
|
23
|
+
readonly model: string;
|
|
24
|
+
where: {
|
|
25
|
+
readonly field: string;
|
|
26
|
+
readonly value: string;
|
|
27
|
+
}[];
|
|
28
|
+
readonly limit?: number;
|
|
29
|
+
};
|
|
22
30
|
type BetterAuthLike = {
|
|
31
|
+
readonly $context?: Promise<{
|
|
32
|
+
readonly adapter?: {
|
|
33
|
+
readonly findMany?: (query: BetterAuthMemberQuery) => Promise<unknown>;
|
|
34
|
+
};
|
|
35
|
+
}>;
|
|
23
36
|
readonly api?: {
|
|
24
37
|
readonly listOrganizations?: (args?: {
|
|
25
38
|
readonly headers?: unknown;
|
|
@@ -49,6 +62,10 @@ type BetterAuthLike = {
|
|
|
49
62
|
};
|
|
50
63
|
type BetterAuthSubjectOptions = {
|
|
51
64
|
readonly memberships?: "all" | "active";
|
|
65
|
+
/**
|
|
66
|
+
* Parses the user's additional fields into `principal.claims`. Without it no
|
|
67
|
+
* field reaches claims, because a user may edit their own additional fields.
|
|
68
|
+
*/
|
|
52
69
|
readonly schema?: StandardSchemaV1;
|
|
53
70
|
readonly headers?: unknown;
|
|
54
71
|
readonly declared?: readonly string[];
|
|
@@ -89,4 +106,4 @@ export declare function onRoleChange(refresh: (event: BetterAuthRoleChangeEvent)
|
|
|
89
106
|
//#region src/better-auth/subject.d.ts
|
|
90
107
|
export declare function subjectFromBetterAuth(auth: BetterAuthLike, session: unknown, options?: BetterAuthSubjectOptions): Promise<Subject<BetterAuthPrincipal>>;
|
|
91
108
|
//#endregion
|
|
92
|
-
export type { BetterAuthAccessControl, BetterAuthAccessRole, BetterAuthAssignableRole, BetterAuthLike, BetterAuthPrincipal, BetterAuthRoleChangeEvent, BetterAuthRoleSourceOptions, BetterAuthStatements, BetterAuthSubjectOptions, BetterAuthUnmatchedStatement, SeededRoles };
|
|
109
|
+
export type { BetterAuthAccessControl, BetterAuthAccessRole, BetterAuthAssignableRole, BetterAuthLike, BetterAuthMemberQuery, BetterAuthPrincipal, BetterAuthRoleChangeEvent, BetterAuthRoleSourceOptions, BetterAuthStatements, BetterAuthSubjectOptions, BetterAuthUnmatchedStatement, SeededRoles };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { n as isReadonlyArray, t as compact } from "../compact-y6vfu2_f.js";
|
|
2
|
-
import { n as freezeDeep } from "../freeze-
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { n as freezeDeep } from "../freeze-CrU8nQeX.js";
|
|
3
|
+
import { _ as listPermissions } from "../permissions-DVoF6dMt.js";
|
|
4
|
+
import { m as role, t as allow } from "../policy-xyWg7QdR.js";
|
|
5
5
|
import { t as ignoreRejection } from "../thenable-okc2xDsj.js";
|
|
6
6
|
import { t as anonymousSubject } from "../subject-C6dLxqHU.js";
|
|
7
7
|
import { i as membershipEvent } from "../sink-Bd9PSyfq.js";
|
|
@@ -255,6 +255,24 @@ async function organizationIds(auth, tenant, options) {
|
|
|
255
255
|
}, [])).map((row) => isRecord(row) && typeof row["id"] === "string" ? row["id"] : void 0).filter((id) => id !== void 0 && id !== "");
|
|
256
256
|
return [...new Set(ids)];
|
|
257
257
|
}
|
|
258
|
+
const MEMBER_LIMIT = 5e3;
|
|
259
|
+
/** Every member row of the user in one adapter query, or `undefined` without an adapter. */
|
|
260
|
+
async function memberRows(auth, userId) {
|
|
261
|
+
try {
|
|
262
|
+
const findMany = (await auth.$context)?.adapter?.findMany;
|
|
263
|
+
if (findMany === void 0) return;
|
|
264
|
+
return parseMemberRows(await findMany({
|
|
265
|
+
model: "member",
|
|
266
|
+
where: [{
|
|
267
|
+
field: "userId",
|
|
268
|
+
value: userId
|
|
269
|
+
}],
|
|
270
|
+
limit: MEMBER_LIMIT
|
|
271
|
+
}), userId);
|
|
272
|
+
} catch {
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
258
276
|
function memberIn(auth, userId, organizationId, tenant, headers) {
|
|
259
277
|
const active = auth.api?.getActiveMember;
|
|
260
278
|
if (organizationId === tenant && active !== void 0) return settle(async () => parseMemberRows(await active({ headers }), userId), []);
|
|
@@ -275,8 +293,11 @@ async function loadMemberships(auth, session, user, userId, tenant, options) {
|
|
|
275
293
|
let teams = parseTeamRows(session["teamMembers"] ?? session["teams"] ?? user["teamMembers"], userId);
|
|
276
294
|
const headers = options.headers;
|
|
277
295
|
if (members.length === 0) {
|
|
278
|
-
const
|
|
279
|
-
|
|
296
|
+
const rows = options.memberships === "active" ? void 0 : await memberRows(auth, userId);
|
|
297
|
+
if (rows === void 0) {
|
|
298
|
+
const ids = await organizationIds(auth, tenant, options);
|
|
299
|
+
members = (await Promise.all(ids.map((id) => memberIn(auth, userId, id, tenant, headers)))).flat();
|
|
300
|
+
} else members = rows;
|
|
280
301
|
}
|
|
281
302
|
const listUserTeams = auth.api?.listUserTeams;
|
|
282
303
|
if (teams.length === 0 && listUserTeams !== void 0) teams = await settle(async () => parseTeamRows(await listUserTeams({ headers }), userId), []);
|
|
@@ -298,8 +319,7 @@ async function subjectFromBetterAuth(auth, session, options = {}) {
|
|
|
298
319
|
const roles = asRoles(user["role"] ?? user["roles"]);
|
|
299
320
|
const declared = options.declared;
|
|
300
321
|
const globalRoles = declared === void 0 ? roles : roles.filter((role) => declared.includes(role));
|
|
301
|
-
|
|
302
|
-
if (options.schema !== void 0) extra = validateClaims(extra, options.schema) ?? {};
|
|
322
|
+
const extra = options.schema === void 0 ? {} : validateClaims(extraFields(user), options.schema) ?? {};
|
|
303
323
|
const memberships = await loadMemberships(auth, session, user, id, tenant, options);
|
|
304
324
|
const principal = compact({
|
|
305
325
|
id,
|