permdock 0.3.1 → 0.4.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/dist/a2a/index.d.ts +7 -5
- package/dist/a2a/index.js +14 -21
- package/dist/ai-sdk/index.d.ts +18 -6
- package/dist/ai-sdk/index.js +8 -5
- package/dist/app-data-CV8pqqMi.js +59 -0
- package/dist/approvals/index.d.ts +2 -2
- package/dist/approvals/index.js +3 -3
- package/dist/{approvals-DbYAuNkG.js → approvals-DZL76lKW.js} +35 -19
- package/dist/{approvers-DT4AVyIg.js → approvers-CqPOLD-o.js} +1 -1
- package/dist/{arazzo-BAgw9ap6.js → arazzo-C4BcskbX.js} +6 -5
- package/dist/{arazzo-C9chp3ST.js → arazzo-CD8d0WLb.js} +2 -2
- package/dist/authzen/index.d.ts +3 -3
- package/dist/authzen/index.js +161 -23
- package/dist/better-auth/index.d.ts +2 -2
- package/dist/better-auth/index.js +6 -19
- package/dist/better-supabase/index.d.ts +112 -87
- package/dist/better-supabase/index.js +257 -156
- package/dist/{bind-C_ob3LKa.d.ts → bind-BzqG8SMb.d.ts} +16 -5
- package/dist/{bind-CuzGytRf.js → bind-kk-uyCwH.js} +14 -6
- package/dist/build-instance-DIIV9DbC.js +51 -0
- package/dist/{canonical-json-DemiK4Vp.js → canonical-json-CFKyFOke.js} +1 -3
- package/dist/{capability-2kYTMWDv.d.ts → capability-CksyCWDH.d.ts} +2 -2
- package/dist/{capability-4qPdO9gk.js → capability-txATtKV4.js} +3 -2
- package/dist/catalog/index.d.ts +1 -1
- package/dist/catalog/index.js +1 -1
- package/dist/catalog-6yWAX6Ps.js +2 -0
- package/dist/{catalog-CYj-mX2O.js → catalog-WHG4kBq7.js} +2 -2
- package/dist/{catalog-doc-DdGm82XT.js → catalog-doc-DWtg0gGR.js} +17 -10
- package/dist/{catalog-DWF5cYqB.js → catalog-tZUyOfOv.js} +4 -4
- package/dist/claude-agent/index.d.ts +4 -4
- package/dist/claude-agent/index.js +4 -5
- package/dist/clerk/index.d.ts +3 -3
- package/dist/clerk/index.js +8 -33
- package/dist/cli/bin.js +1 -1
- package/dist/cli/index.d.ts +3 -3
- package/dist/cli/index.js +3 -3
- package/dist/cloud/index.d.ts +4 -4
- package/dist/cloud/index.js +9 -15
- package/dist/{cloud-CfwZ39Rl.js → cloud-C7bSDgX4.js} +2 -2
- package/dist/{cloud-DWLXO2af.js → cloud-PeBN3IEn.js} +5 -5
- package/dist/{collect-DSTE3ml9.js → collect-2SrB7lfk.js} +6 -8
- package/dist/collect-Bw2Jdq1q.js +2 -0
- package/dist/{collect-CHB22Sx4.js → collect-CQx4hX4N.js} +3 -3
- package/dist/{commands-BeaGNj_o.js → commands-Cpip4ULx.js} +13 -13
- package/dist/{compact-y6vfu2_f.js → compact-CAf557ZB.js} +11 -1
- package/dist/compile/index.d.ts +1 -1
- package/dist/compile/index.js +1 -1
- package/dist/{compile-Ba4blROR.js → compile-CcEu2ZQ1.js} +6 -5
- package/dist/{compile-BkRyBDBw.d.ts → compile-CtTP7eur.d.ts} +2 -2
- package/dist/{config-BJiM-xAm.js → config-BIjREpyE.js} +4 -4
- package/dist/{config-ir40y8m0.js → config-DLt6BvV7.js} +2 -2
- package/dist/{config-report-CdCgbRnV.js → config-report--Xb9APJS.js} +5 -6
- package/dist/{connection-CU8MQxRi.js → connection-DUsczpB5.js} +3 -2
- package/dist/constants-DcJABbLW.js +20 -0
- package/dist/{context-Bcy85rGi.js → context-DieZVJXu.js} +16 -5
- package/dist/convex/index.d.ts +4 -4
- package/dist/convex/index.js +14 -16
- package/dist/create-BBO24vj6.js +324 -0
- package/dist/{credential-8P81ff4u.js → credential-kue0qpbm.js} +4 -4
- package/dist/deciding-columns-Sq12mEA6.js +123 -0
- package/dist/delegation-input-FTxMK3ji.js +19 -0
- package/dist/denied-text-DfRk15uw.d.ts +19 -0
- package/dist/{describe-DMYiCjJV.d.ts → describe-C3ldA9os.d.ts} +11 -2
- package/dist/{describe-B_gVZEVi.js → describe-Cgkp7eP0.js} +5 -4
- package/dist/{diff-C9RDjjhs.js → diff-Cnghh_Ip.js} +2 -2
- package/dist/{diff-2VaeChzX.js → diff-rpqoe7Ag.js} +9 -9
- package/dist/{doctor-Djh6JDEk.js → doctor-CuVJvhV_.js} +2 -2
- package/dist/doctor-owlv6ddh.js +2166 -0
- package/dist/drizzle/index.d.ts +2 -2
- package/dist/drizzle/index.js +6 -14
- package/dist/elysia/index.d.ts +4 -4
- package/dist/elysia/index.js +7 -7
- package/dist/{errors-DPdqI50v.d.ts → errors-OD_4c__H.d.ts} +2 -2
- package/dist/{errors-Cz5zn0mW.js → errors-drnfxYtm.js} +3 -3
- package/dist/{evaluations-tz6D9A2G.js → evaluations-C9YJsv3H.js} +45 -7
- package/dist/eve/index.d.ts +5 -5
- package/dist/eve/index.js +5 -5
- package/dist/express/index.d.ts +4 -4
- package/dist/express/index.js +8 -7
- package/dist/fastify/index.d.ts +15 -5
- package/dist/fastify/index.js +9 -29
- package/dist/fields-fwfXN01n.js +1016 -0
- package/dist/{files-DWUN9PzI.js → files-D_JIzUrP.js} +12 -3
- package/dist/{fixtures-ht28Cplr.js → fixtures-h2eG2OZV.js} +5 -6
- package/dist/{from-snapshot-CTLijvdm.js → from-snapshot-7REQZe0H.js} +32 -22
- package/dist/{generate-CH7ThJ14.js → generate-CNU1pIOo.js} +1 -3
- package/dist/grantee-CXY-0C87.js +254 -0
- package/dist/grantee-conditions-MQs5NIuX.js +270 -0
- package/dist/grantee-match-fxYp9Nmt.js +141 -0
- package/dist/{helpers-H_KARDVC.js → helpers-C9YmyBIa.js} +7 -6
- package/dist/hono/index.d.ts +4 -4
- package/dist/hono/index.js +8 -8
- package/dist/hosted-CBHgkzDl.js +655 -0
- package/dist/{http-SO7qGttf.js → http-BBoKefeS.js} +35 -2
- package/dist/{http-BIhmLfCc.js → http-BEbdMZ05.js} +2 -24
- package/dist/{rls-import-4lLW_pbb.js → import-BFIlhetD.js} +86 -80
- package/dist/{openapi-import-cmwetbzw.js → import-UHk1N7vH.js} +6 -7
- package/dist/{index-C8z4RjQV.d.ts → index-BwMe94Xq.d.ts} +1 -1
- package/dist/{index-0nNqHspG.d.ts → index-DgM7w96K.d.ts} +2 -2
- package/dist/{index-C7Tw7MaW.d.ts → index-Dz7didpC.d.ts} +3 -3
- package/dist/{index-BNc7Wer_.d.ts → index-UdVQgq48.d.ts} +105 -38
- package/dist/index.d.ts +15 -13
- package/dist/index.js +22 -22
- package/dist/{instance-options-jARdwfPN.d.ts → instance-options-plkrsAog.d.ts} +1 -1
- package/dist/{json-schema-BsAflUGW.js → json-schema-DBkdUuCO.js} +1 -3
- package/dist/jwt/index.d.ts +4 -4
- package/dist/jwt/index.js +13 -13
- package/dist/{kernel-_RRHmnMY.js → kernel-CB3LrIJM.js} +81 -32
- package/dist/kysely/index.d.ts +2 -2
- package/dist/kysely/index.js +6 -14
- package/dist/{live-options-H2eG8dfJ.js → live-options-BaAFCIiu.js} +16 -3
- package/dist/load-B_shHrmd.js +2 -0
- package/dist/{load-DhWEB9P1.js → load-C3_oTHyO.js} +11 -3
- package/dist/{manifest-iaoBXHKc.js → manifest-BngWKryL.js} +5 -18
- package/dist/{map-claims-Z4QZOiFF.js → map-claims-AVlBaJoa.js} +7 -16
- package/dist/{map-error-pgUWNNtG.js → map-error-BE27PYkE.js} +5 -5
- package/dist/{markers-B0hYLvMD.js → markers-CiwAOZtO.js} +6 -2
- package/dist/{may-use-DndQ5tQ-.js → may-use-BOn_dR_w.js} +4 -3
- package/dist/mcp/index.d.ts +26 -9
- package/dist/mcp/index.js +456 -446
- package/dist/{rls-migrate-CN4TlJTO.js → migrate-BwlB5-Wk.js} +75 -15
- package/dist/nest/index.d.ts +4 -4
- package/dist/nest/index.js +11 -12
- package/dist/next/index.d.ts +31 -8
- package/dist/next/index.js +29 -33
- package/dist/next/plugin.d.ts +1 -1
- package/dist/next/plugin.js +1 -1
- package/dist/node/index.d.ts +4 -4
- package/dist/node/index.js +4 -4
- package/dist/ocsf-uYFXGVw2.js +115 -0
- package/dist/openai/index.d.ts +5 -5
- package/dist/openai/index.js +4 -4
- package/dist/openapi/index.d.ts +3 -3
- package/dist/openapi/index.js +1 -1
- package/dist/{openapi-CqqEbHsL.js → openapi-BJdBmYDG.js} +19 -23
- package/dist/{openapi-BqRBvAng.js → openapi-DBzHQbov.js} +2 -5
- package/dist/{openapi-CQTsgKoB.js → openapi-DcQ1Kg40.js} +3 -3
- package/dist/orpc/index.d.ts +5 -5
- package/dist/orpc/index.js +9 -11
- package/dist/otel/index.d.ts +2 -2
- package/dist/otel/index.js +26 -23
- package/dist/output-files-CgIsvdSa.js +140 -0
- package/dist/{rls-ownership-DcYlZ09B.js → ownership-BgnbOJFT.js} +387 -379
- package/dist/{package-root-zGkxO3oN.js → package-root-DtNnpmUd.js} +3 -2
- package/dist/{parse-BuyjxhZV.js → parse-CVFQHk6c.js} +3 -3
- package/dist/{parse-local-manifest-BrMozJCo.js → parse-local-manifest-C-q02Pal.js} +2 -4
- package/dist/{parse-local-manifest-JLnaBH0S.d.ts → parse-local-manifest-DvYUR0QL.d.ts} +1 -1
- package/dist/pdp/index.d.ts +2 -2
- package/dist/pdp/index.js +8 -9
- package/dist/{permdock-CbgvLnuo.js → permdock-L26udHSk.js} +1387 -1220
- package/dist/{rls-fields-CZOMlwHl.js → permission-keys-B26jeyUv.js} +1268 -2053
- package/dist/permission-registry-BsblpB-z.js +385 -0
- package/dist/{permissions-DttnqqxC.d.ts → permission-types-Dg39z9Kv.d.ts} +59 -31
- package/dist/{permissions-RJrovw98.js → permissions-CCJ6lmxB.js} +3 -3
- package/dist/{permissions-CDgvKG5L.d.ts → permissions-COH-KRgT.d.ts} +2 -2
- package/dist/{policy-IB6yxpC3.d.ts → policy-types-sp9P1iIV.d.ts} +661 -582
- package/dist/{policy-D2W7uv19.d.ts → policy-ur0BBK_e.d.ts} +2 -2
- package/dist/{powersync-DE19b9dT.js → powersync-BFSbSElQ.js} +2 -2
- package/dist/powersync-DCDgZgfZ.js +2 -0
- package/dist/{powersync-Dv1_aWF7.js → powersync-cZe4kzhL.js} +26 -27
- package/dist/prisma/index.d.ts +1 -1
- package/dist/prisma/index.js +6 -12
- package/dist/{problem-B43ztKIm.js → problem-CnWraVhC.js} +8 -7
- package/dist/{problem-details-_AMOYz-w.js → problem-details-DECUnXAn.js} +2 -2
- package/dist/{problem-details-DX075l9V.d.ts → problem-details-rIIo8B2C.d.ts} +1 -1
- package/dist/{protected-BdnIEFkY.d.ts → protected-B3_P7xuw.d.ts} +9 -6
- package/dist/{protected-utU-SLuy.js → protected-BN7BUdY1.js} +20 -8
- package/dist/{provider-CSQd7m92.js → provider-Bi-0HNL3.js} +23 -10
- package/dist/{provider-DZY281jO.d.ts → provider-kwHC9CZD.d.ts} +1 -1
- package/dist/{provider-store-Cfbvo4DE.js → provider-store-Ctt-81Ni.js} +6 -3
- package/dist/react/index.d.ts +7 -7
- package/dist/react/index.js +5 -5
- package/dist/react/provider-client.d.ts +1 -1
- package/dist/react/provider-client.js +1 -1
- package/dist/react-native/index.d.ts +20 -11
- package/dist/react-native/index.js +33 -17
- package/dist/{refs-KYb4ntaz.js → refs-f3imMjNW.js} +1 -1
- package/dist/relation-walk-BXnlLtg2.js +186 -0
- package/dist/relations-CvmSpG67.js +163 -0
- package/dist/{replay-CYyiLiwO.d.ts → replay-COpmZUfx.d.ts} +1 -1
- package/dist/request-context-BVM7aWNs.js +71 -0
- package/dist/request-context-C2_1lchh.d.ts +5 -0
- package/dist/resource-relations-D1Un3pcz.js +243 -0
- package/dist/retire-BFcxL6un.js +240 -0
- package/dist/{rls-P-BeBx0n.js → rls-55DQTuf5.js} +14 -2
- package/dist/{rls-DiinlRML.js → rls-BEktUaqg.js} +884 -484
- package/dist/{policy-xyWg7QdR.js → role-builder-B4GbKM-i.js} +235 -541
- package/dist/{rpc-DL9Sqvb1.js → rpc-nYC3cR_u.js} +15 -5
- package/dist/{run-BWc9qqvE.js → run-DMcNW_8T.js} +3 -3
- package/dist/{runtime-CB8gQFvS.js → runtime-D_tMXnsq.js} +1 -1
- package/dist/{saas-DhpJjnBA.js → saas-DtaA4JuW.js} +9 -8
- package/dist/{openapi-schema--ARjyfQr.js → schema-Bol6gqXA.js} +3 -5
- package/dist/{schema-D3MnDMxa.js → schema-DjQBcAP9.js} +4 -2
- package/dist/scim/index.d.ts +1 -1
- package/dist/scim/index.js +1 -1
- package/dist/{scim-BFGBBAqR.js → scim-vFR1O5oG.js} +6 -12
- package/dist/{scopes-CVdPrWN-.js → scopes-tvpa34ep.js} +10 -2
- package/dist/server/index.d.ts +18 -8
- package/dist/server/index.js +8 -8
- package/dist/{server-DlZ28Oz5.js → server-ZYEHtNHS.js} +4 -4
- package/dist/{create-B1d519XK.d.ts → server-types-DdqBwZN_.d.ts} +69 -33
- package/dist/shared-1uhI-e-b.js +294 -0
- package/dist/{shared-DRu8VFVM.js → shared-JhMeOsDF.js} +1 -1
- package/dist/{sink-Bd9PSyfq.js → sink-BTtmfPnE.js} +1 -1
- package/dist/{sink-B1fZzIMf.d.ts → sink-CPN4zLfs.d.ts} +1 -1
- package/dist/{skills-Biq5uup3.js → skills-BZdRQkxs.js} +4 -3
- package/dist/{skills-C5CbhhpG.js → skills-Dle4ZoLF.js} +2 -2
- package/dist/{snapshot-Enxd0n-s.js → snapshot-Dc9CHPME.js} +116 -13
- package/dist/{snapshot-cache-D6jLelln.js → snapshot-cache-Cod40D-X.js} +1 -1
- package/dist/{snapshot-cache-B-LxUahj.d.ts → snapshot-cache-J5T7t_vD.d.ts} +1 -1
- package/dist/solid/index.d.ts +22 -22
- package/dist/solid/index.js +40 -10
- package/dist/{sources-4p0-4xQm.js → sources-B1-b-R0t.js} +25 -26
- package/dist/{sources-BdOYLw9j.d.ts → sources-Dljy06zL.d.ts} +6 -2
- package/dist/{sql-xdg5f4Fi.js → sql-t8teWOfo.js} +19 -3
- package/dist/{src-BDwEZWrZ.js → src-Bb7no-hS.js} +194 -123
- package/dist/ssf/index.d.ts +3 -3
- package/dist/ssf/index.js +58 -61
- package/dist/store-9KO4BlkB.d.ts +147 -0
- package/dist/{store-DMAWwAJV.js → store-ILkLUj_o.js} +4 -4
- package/dist/{store-options-ByhZq1jV.js → store-options-CbUHDoSe.js} +16 -7
- package/dist/{stores-BT2pSCub.js → stores-BHXdSbw9.js} +7 -3
- package/dist/stores-Cxz_80g-.d.ts +31 -0
- package/dist/{stream-DDpvynSB.js → stream-BMui98KK.js} +2 -1
- package/dist/{stream-D1RXubw2.d.ts → stream-Dwsg6WwE.d.ts} +2 -2
- package/dist/{subject-settings-BwBmCdTR.js → subject-settings-CkEwrw3W.js} +23 -5
- package/dist/supabase/index.d.ts +4 -4
- package/dist/supabase/index.js +3 -3
- package/dist/supabase/middleware.d.ts +11 -5
- package/dist/supabase/middleware.js +10 -7
- package/dist/{supabase-C0qESOa-.js → supabase-C1TWlnYt.js} +36 -52
- package/dist/{supabase-s4o9s1O1.js → supabase-Dbqr141s.js} +2 -2
- package/dist/supabase-hook-BULg7Ut_.js +2 -0
- package/dist/{supabase-hook-ntETYCQu.js → supabase-hook-Cva3ikXz.js} +730 -781
- package/dist/{supautils-u8jXTGrt.js → supautils-B6HYL9eL.js} +2 -2
- package/dist/svelte/Protected.svelte +9 -2
- package/dist/svelte/index.d.ts +6 -6
- package/dist/svelte/index.js +25 -11
- package/dist/svelte/runtime.d.ts +10 -3
- package/dist/svelte/runtime.js +4 -3
- package/dist/svelte/source.d.ts +6 -6
- package/dist/svelte/source.js +4 -4
- package/dist/{validity-uOp8UpYn.js → tenancy-DshjqY0n.js} +3 -39
- package/dist/terminal/index.d.ts +5 -5
- package/dist/terminal/index.js +18 -34
- package/dist/testing/index.d.ts +89 -77
- package/dist/testing/index.js +1276 -1262
- 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/thenable-QSmvt-vZ.js +65 -0
- package/dist/{token-CIWxJOCh.js → token-Bx9qy30p.js} +1 -1
- package/dist/tool-refusal-CQ7OEia9.js +41 -0
- package/dist/trpc/index.d.ts +5 -5
- package/dist/trpc/index.js +7 -8
- package/dist/{types-DbjRN55U.d.ts → types-7rJVLWe5.d.ts} +82 -4
- package/dist/{types-aqOHTHcp.d.ts → types-Br9IXUBG.d.ts} +1 -1
- package/dist/types-ByUo56un.d.ts +88 -0
- package/dist/{types-Cq_H8N_X.d.ts → types-C0dee0Qf.d.ts} +2 -2
- package/dist/{types-DxiCGmmd.d.ts → types-CIlTojhq.d.ts} +2 -2
- package/dist/{types-QCuYJh4q.d.ts → types-CUcFZfpU.d.ts} +1 -1
- package/dist/{types-C97IskBw.d.ts → types-CqrjB9o6.d.ts} +1 -1
- package/dist/{types-BnIEz1sU.d.ts → types-DHrmBJLH.d.ts} +24 -6
- package/dist/{types-Dnemwd77.d.ts → types-DpWfQdSh.d.ts} +5 -1
- package/dist/{types-Bvc4oWT6.d.ts → types-DvupZE0w.d.ts} +1 -1
- package/dist/unplugin/index.d.ts +1 -1
- package/dist/unplugin/index.js +1 -1
- package/dist/{usage-B0YuTQRO.js → usage-4G6t643F.js} +2 -2
- package/dist/{usage-ItS7nLcl.js → usage-CG9nOYZw.js} +7 -7
- package/dist/usage-iFLJ0-rr.js +2 -0
- package/dist/{validation-error-Ba264OaJ.d.ts → validation-error-BSSw0l_8.d.ts} +1 -1
- package/dist/{validation-error-CnjZ4t92.js → validation-error-ZfUHbKvf.js} +1 -1
- package/dist/validity-dVrUEPJt.js +62 -0
- package/dist/{verifier-BxBo6I44.js → verifier-DMr_Zmb_.js} +51 -15
- package/dist/{rls-verify-CMv9H3wV.js → verify-BztUB3GX.js} +668 -239
- package/dist/{version-BvacVTZR.js → version-BEogC-rB.js} +1 -1
- package/dist/{views-Soe7bGSC.js → views-CJsrBS1f.js} +23 -1
- package/dist/{vocabulary-DA8a8zif.d.ts → vocabulary-hhEFLFoL.d.ts} +15 -6
- package/dist/vue/index.d.ts +24 -19
- package/dist/vue/index.js +24 -8
- package/dist/watch-C8TpsAl4.js +2 -0
- package/dist/{watch-DVBJ9cBq.js → watch-zeucB7eF.js} +6 -6
- package/dist/webmcp/index.d.ts +2 -2
- package/dist/webmcp/index.js +13 -37
- package/dist/wrap-Cr93qqdP.d.ts +14 -0
- package/dist/wrap-DWsU_5Bd.js +26 -0
- package/package.json +8 -8
- package/schemas/catalog-v1.json +6 -0
- package/skills/permdock-credentials/SKILL.md +1 -1
- package/skills/permdock-credentials/references/tokens-keys-links.md +7 -2
- package/skills/permdock-data/references/queries-and-rls.md +4 -0
- package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +1 -0
- package/skills/permdock-wire/SKILL.md +2 -2
- package/skills/permdock-wire/references/adapters.md +9 -1
- package/skills/permdock-wire/references/policy-options.md +10 -1
- package/dist/catalog-CRW5Mx_B.js +0 -2
- package/dist/collect-DSWOk19R.js +0 -2
- package/dist/create-CMwIl-w2.js +0 -253
- package/dist/delegation-D8pUEuce.js +0 -103
- package/dist/doctor-DvH0IQff.js +0 -1194
- package/dist/doctor-collect-CjdO0wQX.js +0 -665
- package/dist/evaluation-items-CfCCejQd.js +0 -40
- package/dist/fields-BMl1RxoX.js +0 -26
- package/dist/grantee-Cv5Sogfv.js +0 -602
- package/dist/hosted-DJQw46hn.js +0 -266
- package/dist/instance-options-Dhhcnm3y.js +0 -22
- package/dist/load-DwJUafYN.js +0 -2
- package/dist/map-AcxK9o_D.js +0 -147
- package/dist/permissions-DVoF6dMt.js +0 -662
- package/dist/powersync-CrBX8hY6.js +0 -2
- package/dist/protected-xAr24FEC.d.ts +0 -40
- package/dist/relations-cjOL01hZ.js +0 -505
- package/dist/rls-graph-CHwx0V8q.js +0 -435
- package/dist/rls-shared-Cewd_-zI.js +0 -495
- package/dist/store-jOBYpiXC.d.ts +0 -36
- package/dist/stores-C0IMQrGI.d.ts +0 -52
- package/dist/supabase-config-Bj3iDH2I.js +0 -472
- package/dist/supabase-hook-gd3s8bxB.js +0 -2
- package/dist/thenable-okc2xDsj.js +0 -10
- package/dist/types-CKNSyIf_.d.ts +0 -52
- package/dist/usage-DorAJiU_.js +0 -2
- package/dist/watch-BwxLTYMZ.js +0 -2
package/dist/create-CMwIl-w2.js
DELETED
|
@@ -1,253 +0,0 @@
|
|
|
1
|
-
import { t as compact } from "./compact-y6vfu2_f.js";
|
|
2
|
-
import { _ as listPermissions } from "./permissions-DVoF6dMt.js";
|
|
3
|
-
import { n as problemDetails } from "./problem-details-_AMOYz-w.js";
|
|
4
|
-
import { r as challengeScope, t as createPermDock$1 } from "./permdock-CbgvLnuo.js";
|
|
5
|
-
import { n as resourceRef } from "./resource-ref-CaS9yVPi.js";
|
|
6
|
-
import { n as hasCredentials } from "./http-SO7qGttf.js";
|
|
7
|
-
import { a as notFoundProblem, l as unauthenticatedProblem, o as problemFromDecision, r as decisionResponse } from "./problem-B43ztKIm.js";
|
|
8
|
-
import { n as createEvaluationsHandler, r as InvalidSignatureError, t as applyApprovalResume } from "./evaluations-tz6D9A2G.js";
|
|
9
|
-
import { t as instanceOptions } from "./instance-options-Dhhcnm3y.js";
|
|
10
|
-
import { n as tenantScope, t as actorFrom } from "./adapter-context-mlWsVGGg.js";
|
|
11
|
-
//#region src/server/create.ts
|
|
12
|
-
async function resolveActor(request, options) {
|
|
13
|
-
return (options.webBotAuth === void 0 ? void 0 : await options.webBotAuth(request)) ?? actorFrom(options.actor, request);
|
|
14
|
-
}
|
|
15
|
-
const NO_TENANT = "\0";
|
|
16
|
-
function routeScopes(value) {
|
|
17
|
-
if (value === void 0) return;
|
|
18
|
-
const scopes = Array.isArray(value) ? value : [];
|
|
19
|
-
const names = scopes.filter((scope) => typeof scope === "string" && scope !== "");
|
|
20
|
-
if (names.length === 0 || names.length !== scopes.length) throw new TypeError("PermDock: oauthScopes must be a non-empty list of scope names");
|
|
21
|
-
return names;
|
|
22
|
-
}
|
|
23
|
-
const NOT_DELEGATED = {
|
|
24
|
-
outcome: "denied",
|
|
25
|
-
denials: [{
|
|
26
|
-
role: null,
|
|
27
|
-
reason: "not-delegated"
|
|
28
|
-
}],
|
|
29
|
-
alternatives: []
|
|
30
|
-
};
|
|
31
|
-
/** The `403` `insufficient_scope` for a token that holds none of a route's OAuth scopes. */
|
|
32
|
-
function scopeProblem(permission, subject, credentials, scope) {
|
|
33
|
-
return permission === null ? decisionResponse(problemDetails(compact({
|
|
34
|
-
decision: NOT_DELEGATED,
|
|
35
|
-
detail: `the token holds none of the OAuth scopes this route needs, such as ${String(scope)}`,
|
|
36
|
-
scope
|
|
37
|
-
})), NOT_DELEGATED, compact({
|
|
38
|
-
credentials,
|
|
39
|
-
scope
|
|
40
|
-
})) : problemFromDecision(NOT_DELEGATED, permission, subject, compact({
|
|
41
|
-
credentials,
|
|
42
|
-
scope
|
|
43
|
-
}));
|
|
44
|
-
}
|
|
45
|
-
function createPermDock(policy, options) {
|
|
46
|
-
return createServerKernel(policy, options);
|
|
47
|
-
}
|
|
48
|
-
function problemFor(decision, init, approval) {
|
|
49
|
-
if (init?.permission !== void 0) return problemFromDecision(decision, init.permission, void 0, compact({
|
|
50
|
-
instance: init.instance,
|
|
51
|
-
approval
|
|
52
|
-
}));
|
|
53
|
-
if (decision.outcome === "granted") return new Response(null, { status: 204 });
|
|
54
|
-
return decisionResponse(problemDetails(compact({
|
|
55
|
-
decision,
|
|
56
|
-
detail: decision.outcome,
|
|
57
|
-
instance: init?.instance
|
|
58
|
-
})), decision);
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* The kernel behind every HTTP adapter. The subject and actor are resolved
|
|
62
|
-
* once per `Request`; one instance is cached per `(Request, tenant)`, so a
|
|
63
|
-
* global middleware and a later tenant-scoped `protect` never share a tenant.
|
|
64
|
-
*/
|
|
65
|
-
function createServerKernel(policy, options) {
|
|
66
|
-
const adapter = options.adapter ?? "server";
|
|
67
|
-
const subjects = /* @__PURE__ */ new WeakMap();
|
|
68
|
-
const instances = /* @__PURE__ */ new WeakMap();
|
|
69
|
-
const freshSubject = async (request) => {
|
|
70
|
-
const actor = await resolveActor(request, options);
|
|
71
|
-
try {
|
|
72
|
-
return {
|
|
73
|
-
user: await options.subject(request),
|
|
74
|
-
actor
|
|
75
|
-
};
|
|
76
|
-
} catch {
|
|
77
|
-
return {
|
|
78
|
-
user: null,
|
|
79
|
-
actor
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
};
|
|
83
|
-
const resolveSubject = (request) => {
|
|
84
|
-
const hit = subjects.get(request);
|
|
85
|
-
if (hit !== void 0) return hit;
|
|
86
|
-
const resolved = freshSubject(request);
|
|
87
|
-
subjects.set(request, resolved);
|
|
88
|
-
return resolved;
|
|
89
|
-
};
|
|
90
|
-
const instanceFor = async ({ user, actor }, tenant) => {
|
|
91
|
-
const coreOptions = compact({
|
|
92
|
-
tenant,
|
|
93
|
-
...instanceOptions(options),
|
|
94
|
-
actor
|
|
95
|
-
});
|
|
96
|
-
const permdock = await createPermDock$1(policy, user, coreOptions);
|
|
97
|
-
const remote = options.pdp === void 0 ? void 0 : await options.pdp(policy, user, coreOptions);
|
|
98
|
-
return {
|
|
99
|
-
permdock: options.wrap === void 0 ? permdock : options.wrap(permdock),
|
|
100
|
-
remote
|
|
101
|
-
};
|
|
102
|
-
};
|
|
103
|
-
const build = async (request, scope) => {
|
|
104
|
-
const { tenant } = scope ?? await tenantScope(options.tenant, request);
|
|
105
|
-
let byTenant = instances.get(request);
|
|
106
|
-
if (byTenant === void 0) {
|
|
107
|
-
byTenant = /* @__PURE__ */ new Map();
|
|
108
|
-
instances.set(request, byTenant);
|
|
109
|
-
}
|
|
110
|
-
const key = tenant ?? NO_TENANT;
|
|
111
|
-
const hit = byTenant.get(key);
|
|
112
|
-
if (hit !== void 0) return hit;
|
|
113
|
-
const built = (async () => instanceFor(await resolveSubject(request), tenant))();
|
|
114
|
-
byTenant.set(key, built);
|
|
115
|
-
return built;
|
|
116
|
-
};
|
|
117
|
-
const connection = async (request, connectionOptions = {}, scope) => {
|
|
118
|
-
const { tenant } = scope ?? await tenantScope(options.tenant, request);
|
|
119
|
-
const { openConnection } = await import("./connection-CU8MQxRi.js");
|
|
120
|
-
return openConnection({
|
|
121
|
-
open: async () => (await build(request, { tenant })).permdock,
|
|
122
|
-
rebuild: async () => (await instanceFor(await freshSubject(request), tenant)).permdock,
|
|
123
|
-
tenant,
|
|
124
|
-
...options.revocations === void 0 ? {} : { feed: options.revocations },
|
|
125
|
-
adapter,
|
|
126
|
-
options: connectionOptions
|
|
127
|
-
});
|
|
128
|
-
};
|
|
129
|
-
const permdock = async (request, scope) => (await build(request, scope)).permdock;
|
|
130
|
-
const getSnapshot = async (request, query = {}) => {
|
|
131
|
-
return (await permdock(request, query.tenant === void 0 ? void 0 : { tenant: query.tenant })).snapshot(compact({
|
|
132
|
-
include: query.include,
|
|
133
|
-
tenants: query.tenants
|
|
134
|
-
}));
|
|
135
|
-
};
|
|
136
|
-
const protectRoute = (permission, loadData, protectOptions = {}) => {
|
|
137
|
-
if (permission === null && routeScopes(protectOptions.oauthScopes) === void 0 && options.operations === void 0) throw new TypeError("PermDock: protect(null) needs oauthScopes, in its options or an operations entry");
|
|
138
|
-
return async (request, scope) => {
|
|
139
|
-
let instance;
|
|
140
|
-
let remote;
|
|
141
|
-
try {
|
|
142
|
-
({permdock: instance, remote} = await build(request, scope));
|
|
143
|
-
} catch (error) {
|
|
144
|
-
if (error instanceof InvalidSignatureError) return {
|
|
145
|
-
ok: false,
|
|
146
|
-
response: error.response
|
|
147
|
-
};
|
|
148
|
-
throw error;
|
|
149
|
-
}
|
|
150
|
-
return guardOn(instance, remote, request, permission, loadData === void 0 ? void 0 : () => loadData(request), protectOptions);
|
|
151
|
-
};
|
|
152
|
-
};
|
|
153
|
-
const guardOn = async (instance, remote, request, permission, load, protectOptions) => {
|
|
154
|
-
const declared = routeScopes(protectOptions.oauthScopes ?? (request === void 0 ? void 0 : options.operations?.oauthScopesForRequest(request.method, new URL(request.url).pathname)));
|
|
155
|
-
const credentials = request === void 0 ? false : hasCredentials(request);
|
|
156
|
-
if (permission === null) {
|
|
157
|
-
if (declared === void 0) throw new TypeError(request === void 0 ? "PermDock: protect(null) needs oauthScopes" : `PermDock: protect(null) needs oauthScopes, and no operation declares them for ${request.method} ${new URL(request.url).pathname}`);
|
|
158
|
-
if (instance.subject.principal === null) return {
|
|
159
|
-
ok: false,
|
|
160
|
-
response: unauthenticatedProblem(credentials)
|
|
161
|
-
};
|
|
162
|
-
}
|
|
163
|
-
const held = instance.subject.delegation?.scopes;
|
|
164
|
-
if (declared !== void 0 && held !== void 0 && !declared.some((granted) => held.includes(granted))) return {
|
|
165
|
-
ok: false,
|
|
166
|
-
response: scopeProblem(permission, instance.subject, credentials, declared[0])
|
|
167
|
-
};
|
|
168
|
-
let data;
|
|
169
|
-
if (load !== void 0) {
|
|
170
|
-
const loaded = await load();
|
|
171
|
-
if (loaded === null || loaded === void 0) return {
|
|
172
|
-
ok: false,
|
|
173
|
-
response: notFoundProblem()
|
|
174
|
-
};
|
|
175
|
-
data = loaded;
|
|
176
|
-
}
|
|
177
|
-
if (permission === null) return {
|
|
178
|
-
ok: true,
|
|
179
|
-
permdock: instance,
|
|
180
|
-
data
|
|
181
|
-
};
|
|
182
|
-
const decideOptions = compact({
|
|
183
|
-
source: "adapter",
|
|
184
|
-
adapter,
|
|
185
|
-
...protectOptions.trusted === true ? { trusted: true } : {
|
|
186
|
-
trusted: false,
|
|
187
|
-
boundary: "http-body"
|
|
188
|
-
}
|
|
189
|
-
});
|
|
190
|
-
const raw = remote === void 0 ? instance.decide(permission, data, decideOptions) : await remote.decide(permission, data, decideOptions).catch(() => ({
|
|
191
|
-
outcome: "denied",
|
|
192
|
-
denials: [{
|
|
193
|
-
role: null,
|
|
194
|
-
reason: "pdp-unavailable"
|
|
195
|
-
}],
|
|
196
|
-
alternatives: []
|
|
197
|
-
}));
|
|
198
|
-
const decision = await applyApprovalResume(raw, permission, instance, options.store, request, resourceRef(permission, data), adapter);
|
|
199
|
-
if (decision.outcome === "granted") return {
|
|
200
|
-
ok: true,
|
|
201
|
-
permdock: instance,
|
|
202
|
-
decision,
|
|
203
|
-
data
|
|
204
|
-
};
|
|
205
|
-
return {
|
|
206
|
-
ok: false,
|
|
207
|
-
response: problemFromDecision(decision, permission, instance.subject, compact({
|
|
208
|
-
approval: options.approval,
|
|
209
|
-
credentials,
|
|
210
|
-
scope: declared?.[0] ?? challengeScope(policy, permission),
|
|
211
|
-
disclosure: data === void 0 ? void 0 : policy.resources.get(permission.resource)?.disclosure
|
|
212
|
-
}))
|
|
213
|
-
};
|
|
214
|
-
};
|
|
215
|
-
const protect = protectRoute;
|
|
216
|
-
const openapi = {
|
|
217
|
-
security: (permission) => ({
|
|
218
|
-
security: [{ oauth2: [permission.scope] }],
|
|
219
|
-
"x-permdock-permissions": [permission.key]
|
|
220
|
-
}),
|
|
221
|
-
securitySchemes: () => {
|
|
222
|
-
const scopes = {};
|
|
223
|
-
for (const leaf of listPermissions(policy.permissions)) scopes[leaf.scope] = leaf.meta.title ?? leaf.key;
|
|
224
|
-
return { oauth2: {
|
|
225
|
-
type: "oauth2",
|
|
226
|
-
flows: {},
|
|
227
|
-
scopes
|
|
228
|
-
} };
|
|
229
|
-
}
|
|
230
|
-
};
|
|
231
|
-
const permdockHandler = (scope) => createEvaluationsHandler(compact({
|
|
232
|
-
policy,
|
|
233
|
-
resolve: scope === void 0 ? permdock : async (request) => permdock(request, await scope(request)),
|
|
234
|
-
store: options.store,
|
|
235
|
-
adapter
|
|
236
|
-
}));
|
|
237
|
-
return {
|
|
238
|
-
permdock,
|
|
239
|
-
getSnapshot,
|
|
240
|
-
protect,
|
|
241
|
-
protectOn: (instance, permission, load, protectOptions = {}, request) => guardOn(instance, void 0, request, permission, load, protectOptions),
|
|
242
|
-
connection,
|
|
243
|
-
shareSubject: (from, to) => {
|
|
244
|
-
const resolved = subjects.get(from);
|
|
245
|
-
if (resolved !== void 0 && !subjects.has(to)) subjects.set(to, resolved);
|
|
246
|
-
},
|
|
247
|
-
problem: (decision, init) => problemFor(decision, init, options.approval),
|
|
248
|
-
openapi,
|
|
249
|
-
permdockHandler
|
|
250
|
-
};
|
|
251
|
-
}
|
|
252
|
-
//#endregion
|
|
253
|
-
export { createServerKernel as n, createPermDock as t };
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import { i as findPermission, o as formerScopes, t as annotationsFor } from "./permissions-DVoF6dMt.js";
|
|
2
|
-
import { d as matchGrantee, s as flattenGrantee } from "./grantee-Cv5Sogfv.js";
|
|
3
|
-
import { t as isActive } from "./validity-uOp8UpYn.js";
|
|
4
|
-
//#region src/core/delegation.ts
|
|
5
|
-
/** The permission's scope and any scope it was renamed from: tokens issued before a rename keep working. */
|
|
6
|
-
function scopeNames(permission) {
|
|
7
|
-
return [permission.scope, ...formerScopes(permission)];
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* Whether a delegated caller may use a permission its principal holds, through
|
|
11
|
-
* OAuth `scopes`, RFC 9396 `authorizationDetails` or GNAP `access`.
|
|
12
|
-
* `undefined` means covered; otherwise the denial reason `decide` would add.
|
|
13
|
-
*/
|
|
14
|
-
function coveredByDelegation(permission, delegation, resourceId, hasActor = false) {
|
|
15
|
-
const unscoped = hasActor ? "no-delegation" : void 0;
|
|
16
|
-
if (delegation === void 0) return unscoped;
|
|
17
|
-
const hasScopes = delegation.scopes !== void 0;
|
|
18
|
-
const hasDetails = delegation.authorizationDetails !== void 0;
|
|
19
|
-
const hasAccess = delegation.access !== void 0;
|
|
20
|
-
if (!hasScopes && !hasDetails && !hasAccess) return unscoped;
|
|
21
|
-
const emptyScopes = hasScopes && (delegation.scopes?.length ?? 0) === 0;
|
|
22
|
-
const emptyAccess = hasAccess && (delegation.access?.length ?? 0) === 0;
|
|
23
|
-
if (emptyScopes && !hasDetails && !hasAccess) return "no-delegation";
|
|
24
|
-
if (emptyAccess && !hasScopes && !hasDetails) return "no-delegation";
|
|
25
|
-
if (emptyScopes && emptyAccess && !hasDetails) return "no-delegation";
|
|
26
|
-
const scopes = scopeNames(permission);
|
|
27
|
-
const scopeOk = delegation.scopes?.some((scope) => scopes.includes(scope)) ?? false;
|
|
28
|
-
const detailOk = delegation.authorizationDetails?.some((detail) => {
|
|
29
|
-
if (detail.type !== permission.resource) return false;
|
|
30
|
-
const identifier = detail["identifier"];
|
|
31
|
-
if (identifier !== void 0 && (typeof identifier !== "string" || identifier !== resourceId)) return false;
|
|
32
|
-
const actions = detail.actions;
|
|
33
|
-
if (actions === void 0) return true;
|
|
34
|
-
return Array.isArray(actions) && actions.includes(permission.action);
|
|
35
|
-
}) ?? false;
|
|
36
|
-
const accessOk = accessCovers(permission, delegation.access, resourceId);
|
|
37
|
-
if (scopeOk || detailOk || accessOk) return;
|
|
38
|
-
return "not-delegated";
|
|
39
|
-
}
|
|
40
|
-
function coversRequirements(tree, requires, delegation, resourceId, hasActor = false) {
|
|
41
|
-
return (requires ?? []).every((key) => {
|
|
42
|
-
const leaf = findPermission(tree, key);
|
|
43
|
-
return leaf !== void 0 && coveredByDelegation(leaf, delegation, resourceId, hasActor) === void 0;
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
function requiresStandIn(grant) {
|
|
47
|
-
return (grant.requires ?? []).length > 0 && annotationsFor(grant.permission).readOnlyHint && !flattenGrantee(grant.to).some((item) => item.kind === "role");
|
|
48
|
-
}
|
|
49
|
-
function accessCovers(permission, access, resourceId) {
|
|
50
|
-
if (access === void 0) return false;
|
|
51
|
-
return access.some((entry) => {
|
|
52
|
-
if (typeof entry === "string") return scopeNames(permission).includes(entry);
|
|
53
|
-
if (entry === null || typeof entry !== "object") return false;
|
|
54
|
-
const type = entry["type"];
|
|
55
|
-
if (typeof type !== "string" || !typeMatches(type, permission.resource)) return false;
|
|
56
|
-
const actions = entry["actions"];
|
|
57
|
-
if (actions !== void 0 && (!Array.isArray(actions) || !actions.includes(permission.action))) return false;
|
|
58
|
-
const identifier = entry["identifier"];
|
|
59
|
-
if (identifier !== void 0 && (typeof identifier !== "string" || identifier !== resourceId)) return false;
|
|
60
|
-
return true;
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
function typeMatches(type, resource) {
|
|
64
|
-
if (type === resource) return true;
|
|
65
|
-
return type.endsWith(`/${resource}`);
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Whether the subject's principal is a `from` of the delegation: every item
|
|
69
|
-
* matches, with roles checked against the roles the principal holds here
|
|
70
|
-
* (`matchGrantee` leaves role holding to the caller) and nothing that needs a
|
|
71
|
-
* row.
|
|
72
|
-
*/
|
|
73
|
-
function handsOver(delegation, subject, heldRoles, now) {
|
|
74
|
-
const items = flattenGrantee(delegation.from);
|
|
75
|
-
if (items.length === 0 || subject.principal === null) return false;
|
|
76
|
-
return items.every((item) => {
|
|
77
|
-
if (item.kind === "role") return heldRoles.has(item.role);
|
|
78
|
-
if (item.kind === "relation") return false;
|
|
79
|
-
const match = matchGrantee(item, subject, now, void 0);
|
|
80
|
-
return match.matched && match.where === void 0;
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* The permission keys the policy's delegations let `subject.actor` use for
|
|
85
|
-
* `subject.principal` right now: the union over every active delegation whose
|
|
86
|
-
* `to` matches the actor and whose `from` the principal holds. `undefined`
|
|
87
|
-
* when none applies, so the call falls back to the token delegation alone.
|
|
88
|
-
* An actor with `readOnly: true` gets only each delegation's read-only keys.
|
|
89
|
-
* Attenuation only: a key here still needs a matching allow and no deny.
|
|
90
|
-
*/
|
|
91
|
-
function delegatedPermissions(delegations, subject, heldRoles, now) {
|
|
92
|
-
const actor = subject.actor;
|
|
93
|
-
if (actor === void 0 || delegations === void 0) return;
|
|
94
|
-
let keys;
|
|
95
|
-
for (const delegation of delegations) {
|
|
96
|
-
if (delegation.to.kind !== actor.kind || delegation.to.id !== void 0 && delegation.to.id !== actor.id || delegation.to.client !== void 0 && delegation.to.client !== actor.client || !isActive(delegation.validity, now) || !handsOver(delegation, subject, heldRoles, now)) continue;
|
|
97
|
-
keys ??= /* @__PURE__ */ new Set();
|
|
98
|
-
for (const key of actor.readOnly === true ? delegation.readOnly : delegation.permissions) keys.add(key);
|
|
99
|
-
}
|
|
100
|
-
return keys;
|
|
101
|
-
}
|
|
102
|
-
//#endregion
|
|
103
|
-
export { requiresStandIn as i, coversRequirements as n, delegatedPermissions as r, coveredByDelegation as t };
|