permdock 0.4.0 → 0.6.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 +37 -35
- package/dist/{schema-Bol6gqXA.js → 2020-C9VN-x8c.js} +5 -130
- package/dist/a2a/index.d.ts +6 -6
- package/dist/a2a/index.js +14 -17
- package/dist/{adapter-context-mlWsVGGg.js → adapter-context-CRhqyzCk.js} +1 -1
- package/dist/adoption-scan-DCYe60Pi.js +107 -0
- package/dist/agent/index.d.ts +3 -0
- package/dist/agent/index.js +1 -0
- package/dist/ai-sdk/index.d.ts +18 -35
- package/dist/ai-sdk/index.js +37 -23
- package/dist/{app-data-CV8pqqMi.js → app-data-MuyzVqX8.js} +2 -1
- package/dist/approval-header-CJACtHkv.js +23 -0
- package/dist/approval-prompt-Dg5LeAcT.js +62 -0
- package/dist/approval-prompt-DvSSPQJX.d.ts +57 -0
- package/dist/approvals/index.d.ts +5 -3
- package/dist/approvals/index.js +8 -5
- package/dist/approvals-p1PGoVjb.js +995 -0
- package/dist/arazzo-41WuzHou.js +36 -0
- package/dist/{arazzo-C4BcskbX.js → arazzo-CaUVBn7D.js} +20 -14
- package/dist/args-IIolxxKA.js +197 -0
- package/dist/astro/index.d.ts +43 -0
- package/dist/astro/index.js +27 -0
- package/dist/audience-DabClFLQ.js +55 -0
- package/dist/auth-DRLEizbL.js +178 -0
- package/dist/authzen/index.d.ts +26 -6
- package/dist/authzen/index.js +94 -79
- package/dist/automation-BNM3TtDo.d.ts +114 -0
- package/dist/automation-DVjOckjV.js +157 -0
- package/dist/better-auth/index.d.ts +8 -6
- package/dist/better-auth/index.js +9 -8
- package/dist/better-supabase/index.d.ts +357 -30
- package/dist/better-supabase/index.js +936 -194
- package/dist/{bind-kk-uyCwH.js → bind-CAvgUuKs.js} +14 -10
- package/dist/{bind-BzqG8SMb.d.ts → bind-DOyrv6zi.d.ts} +12 -10
- package/dist/body-CH5of8Ne.js +10 -0
- package/dist/body-text-QcXok_SI.js +52 -0
- package/dist/{build-instance-DIIV9DbC.js → build-instance-Bu_eDqYw.js} +4 -3
- package/dist/{canonical-json-CFKyFOke.js → canonical-json-BC8_nMTw.js} +5 -3
- package/dist/{capability-CksyCWDH.d.ts → capability-Drg-1YhL.d.ts} +44 -25
- package/dist/{capability-txATtKV4.js → capability-N1K9IpqS.js} +68 -42
- package/dist/casbin-Cr7RLtA3.js +30 -0
- package/dist/casbin-Dyu2gnUD.js +234 -0
- package/dist/casl-64gpT-8x.js +24 -0
- package/dist/casl-DjEDhTCP.js +299 -0
- package/dist/catalog/index.d.ts +74 -2
- package/dist/catalog/index.js +51 -2
- package/dist/catalog-BoWglDPI.js +1 -0
- package/dist/catalog-DZVbrF-z.js +52 -0
- package/dist/{catalog-tZUyOfOv.js → catalog-HD2gf5mY.js} +51 -6
- package/dist/{catalog-doc-DWtg0gGR.js → catalog-doc-Cdn7-0pQ.js} +45 -23
- package/dist/catalog-fingerprint-CCP0-yQS.js +153 -0
- package/dist/chat/index.d.ts +2 -0
- package/dist/chat/index.js +224 -0
- package/dist/chat-sdk/index.d.ts +87 -0
- package/dist/chat-sdk/index.js +197 -0
- package/dist/claims-map-7oQ3ue4X.js +13 -0
- package/dist/claims-map-Ca-QX8C6.d.ts +32 -0
- package/dist/claude-agent/index.d.ts +7 -14
- package/dist/claude-agent/index.js +24 -27
- package/dist/clerk/index.d.ts +9 -8
- package/dist/clerk/index.js +9 -14
- package/dist/cli/bin.js +36 -17
- package/dist/cli/index.d.ts +19 -5
- package/dist/cli/index.js +164 -4
- package/dist/cloud/index.d.ts +102 -63
- package/dist/cloud/index.js +239 -340
- package/dist/cloud-ytQ3uviA.js +87 -0
- package/dist/codemod-5mpSpnUY.js +37 -0
- package/dist/codemod-ua2hHy7w.js +2084 -0
- package/dist/collect-Ci6akVwH.js +55 -0
- package/dist/collect-D7eQDffE.js +1 -0
- package/dist/{collect-2SrB7lfk.js → collect-mLTY4nwb.js} +75 -11
- package/dist/command-L8EstFNm.js +6 -0
- package/dist/compile/index.d.ts +1 -1
- package/dist/compile/index.js +1 -2
- package/dist/{compile-CtTP7eur.d.ts → compile-1bsAezL0.d.ts} +5 -3
- package/dist/{compile-CcEu2ZQ1.js → compile-CMqMx_IN.js} +11 -8
- package/dist/completion-BTFrHZhX.js +143 -0
- package/dist/config-Bj2Ixq3d.js +26 -0
- package/dist/{config-BIjREpyE.js → config-bs_kZeYq.js} +12 -7
- package/dist/{config-report--Xb9APJS.js → config-report-DSpsLpCE.js} +15 -5
- package/dist/{connection-DUsczpB5.js → connection-DjhIJSs2.js} +6 -5
- package/dist/{context-DieZVJXu.js → context-B_u3_bDJ.js} +2 -2
- package/dist/convex/index.d.ts +11 -10
- package/dist/convex/index.js +6 -4
- package/dist/create-B30OMUOJ.d.ts +107 -0
- package/dist/create-CBMmFie-.d.ts +138 -0
- package/dist/create-CGm28gyI.js +130 -0
- package/dist/create-CQWIpUG-.js +403 -0
- package/dist/{create-BBO24vj6.js → create-DCF2SvoT.js} +31 -32
- package/dist/create-D_NmPOdH.d.ts +110 -0
- package/dist/{credential-kue0qpbm.js → credential-BcoiejpY.js} +152 -31
- package/dist/credentials-DPyHmYz5.js +74 -0
- package/dist/delegation-j6-rc37o.js +286 -0
- package/dist/delivery/index.d.ts +5 -0
- package/dist/delivery/index.js +5 -0
- package/dist/delivery-DCAgNyCn.js +499 -0
- package/dist/delivery-event-xX4obB8F.js +40 -0
- package/dist/{denied-text-DfRk15uw.d.ts → denied-text-CiFQNuMV.d.ts} +5 -5
- package/dist/{describe-C3ldA9os.d.ts → describe-B5qgDvEW.d.ts} +2 -2
- package/dist/{describe-Cgkp7eP0.js → describe-BybMRY7A.js} +6 -2
- package/dist/device-BARQ8eYG.js +193 -0
- package/dist/{diff-rpqoe7Ag.js → diff-3jbx6Rm4.js} +60 -54
- package/dist/diff-CmuSD3vc.js +37 -0
- package/dist/doctor-3ZqNHX_G.js +44 -0
- package/dist/{doctor-owlv6ddh.js → doctor-BdZw53-k.js} +245 -50
- package/dist/drizzle/index.d.ts +5 -3
- package/dist/drizzle/index.js +2 -2
- package/dist/elysia/index.d.ts +16 -13
- package/dist/elysia/index.js +13 -12
- package/dist/env-DJZrPjRi.js +8 -0
- package/dist/errors-BDUwg2qC.js +27 -0
- package/dist/{errors-drnfxYtm.js → errors-BKy0EfhN.js} +5 -9
- package/dist/errors-BWXBMaKK.d.ts +11 -0
- package/dist/errors-CWTY6uih.js +143 -0
- package/dist/{errors-OD_4c__H.d.ts → errors-DH5QEGXh.d.ts} +2 -2
- package/dist/evaluate-CNClBvcj.js +1785 -0
- package/dist/evaluations-C_1vdSZc.d.ts +32 -0
- package/dist/{evaluations-C9YJsv3H.js → evaluations-beAooV0n.js} +145 -34
- package/dist/eve/index.d.ts +12 -16
- package/dist/eve/index.js +22 -28
- package/dist/event-time-CsegxXxB.js +23 -0
- package/dist/expiry-D4_YKRKD.js +52 -0
- package/dist/express/index.d.ts +13 -10
- package/dist/express/index.js +12 -11
- package/dist/fastify/index.d.ts +25 -22
- package/dist/fastify/index.js +13 -12
- package/dist/fetch-adapter-DD_gfmrC.js +120 -0
- package/dist/fetch-adapter-Dw0MTS3D.d.ts +31 -0
- package/dist/fields-OYG_JR78.js +203 -0
- package/dist/files-C5ZI27eV.js +124 -0
- package/dist/{fixtures-h2eG2OZV.js → fixtures-B7XrLeY7.js} +8 -7
- package/dist/flags-C3DktBDY.js +86 -0
- package/dist/{from-snapshot-7REQZe0H.js → from-snapshot-CTCMsFZk.js} +55 -52
- package/dist/{grantee-conditions-MQs5NIuX.js → grantee-conditions-CcXf8hMM.js} +4 -3
- package/dist/{grantee-CXY-0C87.js → grantee-hxrUsbpM.js} +16 -6
- package/dist/{grantee-match-fxYp9Nmt.js → grantee-match-DbENBHLB.js} +5 -4
- package/dist/h3/index.d.ts +37 -0
- package/dist/h3/index.js +35 -0
- package/dist/headers-BIjfMaoC.js +8 -0
- package/dist/headers-CIbDTUTK.d.ts +7 -0
- package/dist/{helpers-C9YmyBIa.js → helpers-CBYVMjwh.js} +45 -38
- package/dist/hono/index.d.ts +12 -9
- package/dist/hono/index.js +13 -12
- package/dist/hosted-B46-5LYE.js +315 -0
- package/dist/hosted-BPk51-kX.d.ts +78 -0
- package/dist/{http-DPuDaChb.d.ts → http-B_LphE5Y.d.ts} +1 -2
- package/dist/http-DXJ37RDA.js +46 -0
- package/dist/{http-BEbdMZ05.js → http-ujKm0JXE.js} +1 -2
- package/dist/{import-UHk1N7vH.js → import-CNV7I2Dw.js} +25 -20
- package/dist/{import-BFIlhetD.js → import-wyqXUyjm.js} +190 -53
- package/dist/index-B8YjkEZ4.d.ts +210 -0
- package/dist/index-C-6Letxg.d.ts +431 -0
- package/dist/index-CaxrMD1A.d.ts +1 -0
- package/dist/{index-BwMe94Xq.d.ts → index-Ch8LpNDp.d.ts} +34 -16
- package/dist/index-Cp_ilKi1.d.ts +91 -0
- package/dist/index-CueFnxQc.d.ts +110 -0
- package/dist/index-DuWxc5dt.d.ts +909 -0
- package/dist/index.d.ts +19 -15
- package/dist/index.js +31 -21
- package/dist/init-DeMYsnYJ.js +96 -0
- package/dist/init-GG6Jh8HD.js +95 -0
- package/dist/{instance-options-plkrsAog.d.ts → instance-options-BsVpyGIk.d.ts} +2 -2
- package/dist/instance-snapshot-BOEhcqIF.js +601 -0
- package/dist/instant-BluqDvyS.js +19 -0
- package/dist/internals-Dk8A8fX3.js +17 -0
- package/dist/{json-schema-DBkdUuCO.js → json-schema-B-vAwlde.js} +45 -6
- package/dist/json-schema-CN_iLFH2.d.ts +40 -0
- package/dist/jwt/index.d.ts +18 -11
- package/dist/jwt/index.js +156 -135
- package/dist/{kernel-CB3LrIJM.js → kernel-D0NVb1cK.js} +52 -24
- package/dist/kysely/index.d.ts +5 -3
- package/dist/kysely/index.js +2 -2
- package/dist/load-BxEtwlBS.js +1 -0
- package/dist/{load-C3_oTHyO.js → load-DFS_ry0W.js} +22 -6
- package/dist/{load-jose-BL6LH4bL.js → load-jose-DZ4dnjri.js} +1 -4
- package/dist/login-Dfe5RlYk.js +68 -0
- package/dist/login-imhuwvn3.js +254 -0
- package/dist/manifest-C8IzW3Do.js +42 -0
- package/dist/manifest-dvL2XEe1.js +370 -0
- package/dist/manifest-json-CAGzls-C.js +9 -0
- package/dist/{manifest-uDS9y5de.d.ts → manifest-mx5ghSFM.d.ts} +9 -2
- package/dist/manifest-schema-C0kK_8V0.js +399 -0
- package/dist/{map-claims-AVlBaJoa.js → map-claims-D3oRmTk0.js} +13 -10
- package/dist/{map-error-BE27PYkE.js → map-error-Dr70oA_3.js} +3 -3
- package/dist/{markers-CiwAOZtO.js → markers-C6joDI3o.js} +2 -1
- package/dist/mcp/index.d.ts +22 -12
- package/dist/mcp/index.js +57 -39
- package/dist/{migrate-BwlB5-Wk.js → migrate-CIq4-E9F.js} +53 -14
- package/dist/nest/index.d.ts +12 -9
- package/dist/nest/index.js +15 -14
- package/dist/next/index.d.ts +18 -21
- package/dist/next/index.js +13 -11
- package/dist/next/plugin.d.ts +1 -1
- package/dist/next/plugin.js +2 -2
- package/dist/node/index.d.ts +10 -10
- package/dist/node/index.js +7 -9
- package/dist/{ocsf-uYFXGVw2.js → ocsf-BFp-PZZA.js} +22 -11
- package/dist/openai/index.d.ts +9 -16
- package/dist/openai/index.js +17 -24
- package/dist/openapi/index.d.ts +3 -3
- package/dist/openapi/index.js +1 -1
- package/dist/{openapi-DBzHQbov.js → openapi-B7HZ0f-r.js} +8 -8
- package/dist/openapi-C4dDTVEd.js +138 -0
- package/dist/{openapi-BJdBmYDG.js → openapi-DD1SV-5-.js} +10 -9
- package/dist/operation-findings-DgATDpvh.js +36 -0
- package/dist/operations-X0VM7F3m.d.ts +59 -0
- package/dist/orpc/index.d.ts +13 -10
- package/dist/orpc/index.js +20 -15
- package/dist/otel/index.d.ts +3 -2
- package/dist/otel/index.js +30 -7
- package/dist/output-1im__-08.js +88 -0
- package/dist/output-files-B3IZJksC.js +1 -0
- package/dist/{output-files-CgIsvdSa.js → output-files-DhRBBE4n.js} +24 -26
- package/dist/{permission-keys-B26jeyUv.js → ownership-DqaJNJPn.js} +1045 -153
- package/dist/{package-root-DtNnpmUd.js → package-root-Dk_ETdkp.js} +1 -1
- package/dist/{parse-CVFQHk6c.js → parse-Cxq0WxrA.js} +2 -2
- package/dist/{parse-local-manifest-DvYUR0QL.d.ts → parse-local-manifest-5ODwqu8b.d.ts} +1 -1
- package/dist/{parse-local-manifest-C-q02Pal.js → parse-local-manifest-CVSs6J9I.js} +1 -1
- package/dist/parse-request-D_tUXG6M.js +26 -0
- package/dist/paths-DXSHAMIa.js +42 -0
- package/dist/pdp/index.d.ts +7 -3
- package/dist/pdp/index.js +45 -26
- package/dist/{peer-BOr_kJE1.js → peer-C8swJ2GH.js} +23 -4
- package/dist/peer-CRvC7Hg1.js +1 -0
- package/dist/permdock-BrAscV28.js +868 -0
- package/dist/permdock-SV8ZINYT.d.ts +502 -0
- package/dist/{permission-registry-BsblpB-z.js → permission-registry-Br4jSNVi.js} +3 -3
- package/dist/permissions-B-wCP5ZC.js +30 -0
- package/dist/{permissions-CCJ6lmxB.js → permissions-BPxlwVhN.js} +4 -3
- package/dist/{permissions-COH-KRgT.d.ts → permissions-u_KHg-sN.d.ts} +1 -2
- package/dist/policies-DP2nqRoF.js +295 -0
- package/dist/{policy-ur0BBK_e.d.ts → policy-77FSAq_V.d.ts} +2 -2
- package/dist/{hosted-CBHgkzDl.js → policy-DbM5YYtV.js} +17 -273
- package/dist/policy-from-catalog-C2gMa2Dj.js +450 -0
- package/dist/policy-module-CTlwMvLI.js +89 -0
- package/dist/{policy-types-sp9P1iIV.d.ts → policy-types-n0uRTsW8.d.ts} +460 -632
- package/dist/postgrest-CEgRbefE.d.ts +100 -0
- package/dist/postgrest-DAjUkF9w.js +575 -0
- package/dist/{powersync-cZe4kzhL.js → powersync-BkWWCS1K.js} +23 -24
- package/dist/powersync-DISt6SUe.js +62 -0
- package/dist/powersync-MMJ2mI2q.js +1 -0
- package/dist/preset/index.d.ts +146 -0
- package/dist/preset/index.js +1 -0
- package/dist/preset-DZdU0tne.js +1768 -0
- package/dist/principal-source-pHneukrx.js +103 -0
- package/dist/prisma/index.d.ts +6 -3
- package/dist/prisma/index.js +2 -2
- package/dist/{problem-CnWraVhC.js → problem-CTviyH5L.js} +13 -23
- package/dist/{problem-details-rIIo8B2C.d.ts → problem-details-B45V5d2b.d.ts} +1 -1
- package/dist/{problem-details-DECUnXAn.js → problem-details-cn5X30gZ.js} +43 -40
- package/dist/problem-types-CJ2325SZ.js +5 -0
- package/dist/{prompt-CXYhLfsS.js → prompt-DfZLJLIn.js} +2 -2
- package/dist/{protected-BN7BUdY1.js → protected-BlF0F6wL.js} +21 -4
- package/dist/{protected-B3_P7xuw.d.ts → protected-RFGpakN9.d.ts} +16 -8
- package/dist/{provider-Bi-0HNL3.js → provider-B1al-AZz.js} +2 -2
- package/dist/{provider-kwHC9CZD.d.ts → provider-DILL9oPK.d.ts} +1 -1
- package/dist/{provider-store-Ctt-81Ni.js → provider-store-DM6DNcta.js} +2 -2
- package/dist/pull-CvpINcMK.js +1 -0
- package/dist/pull-jEwbf80J.js +256 -0
- package/dist/push-BD4f15co.js +116 -0
- package/dist/pushed-policy-CqtxkV4G.js +238 -0
- package/dist/pushed-policy-DCW91KQU.d.ts +57 -0
- package/dist/react/index.d.ts +8 -8
- package/dist/react/index.js +6 -6
- package/dist/react/provider-client.d.ts +1 -1
- package/dist/react/provider-client.js +1 -2
- package/dist/react-native/index.d.ts +24 -72
- package/dist/react-native/index.js +29 -25
- package/dist/{refs-f3imMjNW.js → refs-K6eWUJ0H.js} +1 -1
- package/dist/{relation-walk-BXnlLtg2.js → relation-walk-3OyDBF0S.js} +2 -2
- package/dist/{relations-CvmSpG67.js → relations-BnCWnJGI.js} +3 -3
- package/dist/renames-CGj7YwcQ.js +175 -0
- package/dist/{replay-COpmZUfx.d.ts → replay-Bkm-Ne4l.d.ts} +1 -1
- package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
- package/dist/{request-context-BVM7aWNs.js → request-context-C81Pip9n.js} +3 -3
- package/dist/request-schema-CMreVuFM.js +148 -0
- package/dist/resend/index.d.ts +126 -0
- package/dist/resend/index.js +379 -0
- package/dist/{resource-relations-D1Un3pcz.js → resource-relations-D_jw0BFx.js} +1 -1
- package/dist/{retire-BFcxL6un.js → retire-CALjIQ7e.js} +2 -2
- package/dist/{revocations-Cy06JNx2.d.ts → revocations-R07lFBnX.d.ts} +2 -0
- package/dist/rls-BAqP4q66.js +336 -0
- package/dist/{rls-BEktUaqg.js → rls-DTvYd-lI.js} +288 -690
- package/dist/{role-builder-B4GbKM-i.js → role-builder-uWQZ4v84.js} +14 -207
- package/dist/{rpc-nYC3cR_u.js → rpc-VSl5ylaQ.js} +7 -7
- package/dist/run-CUKuz0A8.js +723 -0
- package/dist/run-DDwUaJDU.js +1 -0
- package/dist/run-ticket-DocwaTKn.d.ts +124 -0
- package/dist/run-ticket-sxFI6LAk.js +337 -0
- package/dist/{runtime-D_tMXnsq.js → runtime-D3VTAiCA.js} +1 -1
- package/dist/{saas-DtaA4JuW.js → saas-BCXRuXca.js} +16 -14
- package/dist/scan-qvOe0hS3.js +29 -0
- package/dist/{schema-DjQBcAP9.js → schema-B4v0Qrac.js} +102 -8
- package/dist/schema-yLuBWWsh.js +130 -0
- package/dist/scim/index.d.ts +2 -2
- package/dist/scim/index.js +1 -2
- package/dist/{scim-vFR1O5oG.js → scim-ClHtpyV3.js} +208 -76
- package/dist/{scopes-tvpa34ep.js → scopes-CUPSjo9q.js} +12 -7
- package/dist/server/index.d.ts +12 -143
- package/dist/server/index.js +12 -9
- package/dist/server-C3WXAHZj.js +453 -0
- package/dist/{server-types-DdqBwZN_.d.ts → server-types-CKQiCnON.d.ts} +51 -68
- package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
- package/dist/{shared-1uhI-e-b.js → shared-BAK8t4Uo.js} +20 -9
- package/dist/{shared-JhMeOsDF.js → shared-DvvFzYXe.js} +8 -9
- package/dist/signals-D3NcTKUS.js +32 -0
- package/dist/sink-4-eQIRWf.d.ts +225 -0
- package/dist/sink-BEZSlMS_.js +957 -0
- package/dist/{skills-BZdRQkxs.js → skills-B6lVdD_W.js} +13 -6
- package/dist/skills-CTYwkl44.js +51 -0
- package/dist/snapshot-B7DkYg6g.js +269 -0
- package/dist/{snapshot-cache-Cod40D-X.js → snapshot-cache-DZHQ0KF6.js} +11 -5
- package/dist/{snapshot-cache-J5T7t_vD.d.ts → snapshot-cache-PXI-vGpY.d.ts} +7 -5
- package/dist/solid/index.d.ts +11 -12
- package/dist/solid/index.js +7 -7
- package/dist/solid-start/index.d.ts +52 -0
- package/dist/solid-start/index.js +49 -0
- package/dist/{sources-Dljy06zL.d.ts → sources-Xc4zkszI.d.ts} +7 -13
- package/dist/{sources-B1-b-R0t.js → sources-vs5dGOsS.js} +125 -119
- package/dist/{sql-t8teWOfo.js → sql-B5T1IL83.js} +13 -1
- package/dist/src-Cu2m75uo.js +1860 -0
- package/dist/ssf/index.d.ts +4 -4
- package/dist/ssf/index.js +384 -47
- package/dist/standard-webhooks-DgFFD-Ga.js +228 -0
- package/dist/standard-webhooks-rbD7LS6h.d.ts +88 -0
- package/dist/storage-C2bWdvJH.js +132 -0
- package/dist/{store-ILkLUj_o.js → store-BDutJkDL.js} +40 -53
- package/dist/{store-options-CbUHDoSe.js → store-options-u0ycEe8s.js} +26 -21
- package/dist/{stores-Cxz_80g-.d.ts → stores-BUGNbJTt.d.ts} +7 -8
- package/dist/{stores-BHXdSbw9.js → stores-CGhM8BN_.js} +2 -2
- package/dist/{stream-Dwsg6WwE.d.ts → stream-CeCMJmBB.d.ts} +2 -2
- package/dist/{stream-BMui98KK.js → stream-CvdUS9V1.js} +9 -2
- package/dist/style-DiKWnAvn.js +1 -0
- package/dist/{style-CTm1AXDT.js → style-Uao76wO7.js} +3 -2
- package/dist/subject-BGoM5o8B.js +17 -0
- package/dist/supabase/index.d.ts +23 -106
- package/dist/supabase/index.js +5 -4
- package/dist/supabase/middleware.d.ts +7 -6
- package/dist/supabase/middleware.js +13 -11
- package/dist/supabase-By_frk3U.js +92 -0
- package/dist/{supabase-hook-Cva3ikXz.js → supabase-hook-BMoEhZir.js} +960 -64
- package/dist/supabase-hook-CCw5m35C.js +1 -0
- package/dist/{supabase-C1TWlnYt.js → supabase-x5JtR2tc.js} +99 -206
- package/dist/support-session-C6xJQYut.js +158 -0
- package/dist/svelte/Protected.svelte +4 -4
- package/dist/svelte/index.d.ts +7 -7
- package/dist/svelte/index.js +10 -10
- package/dist/svelte/runtime.d.ts +3 -3
- package/dist/svelte/runtime.js +3 -3
- package/dist/svelte/source.d.ts +7 -7
- package/dist/svelte/source.js +4 -4
- package/dist/sveltekit/index.d.ts +51 -0
- package/dist/sveltekit/index.js +27 -0
- package/dist/tanstack-start/index.d.ts +51 -0
- package/dist/tanstack-start/index.js +40 -0
- package/dist/target-Bw37TFNA.js +51 -0
- package/dist/{tenancy-DshjqY0n.js → tenancy-DN2QAx9z.js} +5 -5
- package/dist/terminal/index.d.ts +11 -9
- package/dist/terminal/index.js +23 -287
- package/dist/testing/index.d.ts +311 -38
- package/dist/testing/index.js +3475 -201
- package/dist/testing/saas/index.d.ts +9 -8
- package/dist/testing/saas/index.js +2 -2
- package/dist/testing/saas/permissions.d.ts +1 -1
- package/dist/testing/saas/permissions.js +1 -2
- package/dist/text-BMFRfBqc.js +8 -0
- package/dist/{text-diff-BdkkYSbi.js → text-diff-BQcUapOb.js} +1 -1
- package/dist/thenable-yD7SabqG.js +31 -0
- package/dist/time-DkWjdL98.js +71 -0
- package/dist/{token-Bx9qy30p.js → token-BLZcjQgt.js} +15 -6
- package/dist/{tool-refusal-CQ7OEia9.js → tool-refusal-CMLN5xhn.js} +2 -2
- package/dist/trpc/index.d.ts +12 -9
- package/dist/trpc/index.js +16 -14
- package/dist/types-8RnwUAvE.d.ts +107 -0
- package/dist/{store-9KO4BlkB.d.ts → types-B3_ooZgZ.d.ts} +100 -75
- package/dist/{types-Br9IXUBG.d.ts → types-BdtSDbBO.d.ts} +77 -17
- package/dist/types-BtHtcKMr.d.ts +157 -0
- package/dist/{types-CqrjB9o6.d.ts → types-BzzaHxt3.d.ts} +23 -11
- package/dist/types-C791HFu9.d.ts +332 -0
- package/dist/types-C863OQiR.d.ts +57 -0
- package/dist/{types-ByUo56un.d.ts → types-CVZSNocA.d.ts} +23 -22
- package/dist/{types-DHrmBJLH.d.ts → types-CX7AvRqP.d.ts} +7 -7
- package/dist/types-C_IiEs64.d.ts +65 -0
- package/dist/{types-7rJVLWe5.d.ts → types-Dfv0aTER.d.ts} +63 -11
- package/dist/types-DqzsnlSA.js +67 -0
- package/dist/{types-DpWfQdSh.d.ts → types-Druu9wLM.d.ts} +46 -11
- package/dist/{types-CIlTojhq.d.ts → types-_WhUP7ud.d.ts} +9 -6
- package/dist/{types-CUcFZfpU.d.ts → types-lUlG3TVd.d.ts} +2 -1
- package/dist/unplugin/index.d.ts +1 -1
- package/dist/unplugin/index.js +2 -2
- package/dist/usage-CRVl9V3t.js +32 -0
- package/dist/usage-CZpSQP6L.js +1 -0
- package/dist/{usage-CG9nOYZw.js → usage-SveTRTyr.js} +54 -11
- package/dist/{validation-error-BSSw0l_8.d.ts → validation-error-DHUrAkku.d.ts} +1 -1
- package/dist/{validity-dVrUEPJt.js → validity-CZ7-y0Cj.js} +32 -15
- package/dist/{verifier-DMr_Zmb_.js → verifier-DHuh-okk.js} +18 -7
- package/dist/{verify-BztUB3GX.js → verify-BaAKx7t6.js} +645 -50
- package/dist/{version-BEogC-rB.js → version-CEbQ5UeM.js} +4 -3
- package/dist/version-DXkYUISx.js +1 -0
- package/dist/{views-CJsrBS1f.js → views-DTIIO-oQ.js} +22 -5
- package/dist/{permission-types-Dg39z9Kv.d.ts → vocabulary-CN8H_9UF.d.ts} +67 -2
- package/dist/vue/index.d.ts +9 -10
- package/dist/vue/index.js +8 -8
- package/dist/waiter-B986w1oK.d.ts +36 -0
- package/dist/waiter-BGUtGYoU.js +67 -0
- package/dist/watch--ovlPOc0.js +1 -0
- package/dist/{watch-zeucB7eF.js → watch-vea54PRw.js} +44 -5
- package/dist/webmcp/index.d.ts +2 -2
- package/dist/webmcp/index.js +3 -3
- package/dist/where-scope-C9vfEphl.js +306 -0
- package/dist/who-can-DWBAcaCQ.js +364 -0
- package/dist/wire-delegation-Cv3W2eaM.js +36 -0
- package/dist/wire-denial-C7PaVYEM.js +27 -0
- package/dist/workflow/index.d.ts +5 -0
- package/dist/workflow/index.js +223 -0
- package/dist/workflow-sdk/index.d.ts +56 -0
- package/dist/workflow-sdk/index.js +78 -0
- package/dist/{wrap-Cr93qqdP.d.ts → wrap-C5jC6sKI.d.ts} +2 -1
- package/dist/{wrap-DWsU_5Bd.js → wrap-gX61EtpB.js} +7 -6
- package/package.json +136 -37
- package/schemas/access-event-v1.json +118 -0
- package/schemas/approval-request-v1.json +34 -1
- package/schemas/approval-signature-v1.json +94 -0
- package/schemas/automation-event-v1.json +113 -0
- package/schemas/capability-v1.json +84 -0
- package/schemas/catalog-event-v1.json +87 -0
- package/schemas/catalog-v1.json +123 -12
- package/schemas/cli-commands-v1.json +164 -0
- package/schemas/cli-result-v1.json +96 -0
- package/schemas/cloud-api-v1.json +5407 -0
- package/schemas/connector-v1.json +408 -0
- package/schemas/credential-event-v1.json +81 -0
- package/schemas/credential-v1.json +134 -0
- package/schemas/decision-event-v1.json +288 -0
- package/schemas/delivery-event-v1.json +117 -0
- package/schemas/directory-event-v1.json +85 -0
- package/schemas/evidence-export-v1.json +54 -0
- package/schemas/membership-event-v1.json +93 -0
- package/schemas/policy-v1.json +68 -0
- package/schemas/pushed-policy-v1.json +236 -0
- package/schemas/run-v1.json +162 -0
- package/schemas/snapshot-v1.json +138 -0
- package/schemas/supabase-claims-v1.json +4 -4
- package/schemas/supabase-manifest-v1.json +5 -1
- package/schemas/support-session-v1.json +111 -0
- package/skills/permdock/SKILL.md +16 -12
- package/skills/permdock-agents/SKILL.md +40 -23
- package/skills/permdock-agents/references/operations-automations-chat.md +221 -0
- package/skills/permdock-agents/references/runtimes.md +22 -18
- package/skills/permdock-approvals/SKILL.md +29 -13
- package/skills/permdock-approvals/references/delivery-and-waiters.md +172 -0
- package/skills/permdock-approvals/references/stores-and-resume.md +21 -7
- package/skills/permdock-audit/SKILL.md +3 -3
- package/skills/permdock-credentials/SKILL.md +5 -5
- package/skills/permdock-credentials/references/tokens-keys-links.md +14 -10
- package/skills/permdock-data/SKILL.md +6 -6
- package/skills/permdock-data/references/queries-and-rls.md +10 -9
- package/skills/permdock-data/references/relationships.md +3 -3
- package/skills/permdock-tenancy/SKILL.md +20 -7
- package/skills/permdock-tenancy/references/contacts-and-support-sessions.md +122 -0
- package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +6 -4
- package/skills/permdock-wire/SKILL.md +17 -11
- package/skills/permdock-wire/references/adapters.md +139 -51
- package/skills/permdock-wire/references/policy-options.md +5 -5
- package/skills/permdock-wire/references/presets-and-recipes.md +58 -0
- package/dist/approvals-DZL76lKW.js +0 -240
- package/dist/arazzo-CD8d0WLb.js +0 -54
- package/dist/catalog-6yWAX6Ps.js +0 -2
- package/dist/catalog-WHG4kBq7.js +0 -48
- package/dist/cloud-C7bSDgX4.js +0 -50
- package/dist/cloud-PeBN3IEn.js +0 -118
- package/dist/collect-Bw2Jdq1q.js +0 -2
- package/dist/collect-CQx4hX4N.js +0 -83
- package/dist/commands-Cpip4ULx.js +0 -97
- package/dist/config-DLt6BvV7.js +0 -36
- package/dist/diff-Cnghh_Ip.js +0 -48
- package/dist/doctor-CuVJvhV_.js +0 -53
- package/dist/duration-xK2jGFVc.js +0 -25
- package/dist/errors-CWfoNg9N.js +0 -47
- package/dist/errors-DRnGZHzF.js +0 -30
- package/dist/expiry-BoBJ8Tvc.js +0 -7
- package/dist/fields-fwfXN01n.js +0 -1016
- package/dist/headers-BZSDieNT.js +0 -6
- package/dist/headers-Cf-zWvsO.d.ts +0 -6
- package/dist/ids-DC4V4CFu.js +0 -18
- package/dist/index-DgM7w96K.d.ts +0 -6
- package/dist/index-Dz7didpC.d.ts +0 -201
- package/dist/index-UdVQgq48.d.ts +0 -550
- package/dist/load-B_shHrmd.js +0 -2
- package/dist/manifest-BngWKryL.js +0 -770
- package/dist/may-use-BOn_dR_w.js +0 -78
- package/dist/openapi-DcQ1Kg40.js +0 -164
- package/dist/ownership-BgnbOJFT.js +0 -851
- package/dist/permdock-L26udHSk.js +0 -3646
- package/dist/powersync-BFSbSElQ.js +0 -62
- package/dist/powersync-DCDgZgfZ.js +0 -2
- package/dist/rls-55DQTuf5.js +0 -250
- package/dist/run-DMcNW_8T.js +0 -174
- package/dist/server-ZYEHtNHS.js +0 -268
- package/dist/sink-BTtmfPnE.js +0 -141
- package/dist/sink-CPN4zLfs.d.ts +0 -104
- package/dist/skills-Dle4ZoLF.js +0 -56
- package/dist/snapshot-Dc9CHPME.js +0 -1078
- package/dist/src-Bb7no-hS.js +0 -639
- package/dist/subject-C6dLxqHU.js +0 -24
- package/dist/supabase-Dbqr141s.js +0 -83
- package/dist/supabase-hook-BULg7Ut_.js +0 -2
- package/dist/thenable-QSmvt-vZ.js +0 -65
- package/dist/types-C0dee0Qf.d.ts +0 -197
- package/dist/types-DvupZE0w.d.ts +0 -9
- package/dist/usage-4G6t643F.js +0 -42
- package/dist/usage-iFLJ0-rr.js +0 -2
- package/dist/vocabulary-hhEFLFoL.d.ts +0 -65
- package/dist/watch-C8TpsAl4.js +0 -2
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { n as
|
|
2
|
+
import { c as withApp } from "./permdock-BrAscV28.js";
|
|
3
|
+
import { t as composeWraps } from "./wrap-gX61EtpB.js";
|
|
4
|
+
import { r as instanceOptions } from "./build-instance-Bu_eDqYw.js";
|
|
5
|
+
import { p as invalidSignatureResponse } from "./evaluations-beAooV0n.js";
|
|
6
|
+
import { n as tenantScope } from "./adapter-context-CRhqyzCk.js";
|
|
7
|
+
import { t as createPermDock } from "./create-DCF2SvoT.js";
|
|
7
8
|
//#region src/server/bind.ts
|
|
8
9
|
/** The server kernel with the subject and actor callbacks reading the context `contextOf` maps a `Request` to. */
|
|
9
10
|
function adapterKernel(policy, options, adapter, contextOf) {
|
|
10
|
-
return
|
|
11
|
+
return createPermDock(policy, compact({
|
|
11
12
|
subject: (request) => {
|
|
12
13
|
const context = contextOf(request);
|
|
13
14
|
return context === void 0 ? null : options.subject(context);
|
|
@@ -27,14 +28,15 @@ function adapterKernel(policy, options, adapter, contextOf) {
|
|
|
27
28
|
revocations: options.revocations,
|
|
28
29
|
adapter,
|
|
29
30
|
wrap: composeWraps(options.otel, options.wrap),
|
|
30
|
-
|
|
31
|
+
deniedResponse: options.deniedResponse
|
|
31
32
|
}));
|
|
32
33
|
}
|
|
33
34
|
/**
|
|
34
35
|
* The kernel of a framework adapter, with the subject, actor and tenant
|
|
35
36
|
* callbacks reading the framework context each `Request` was built from.
|
|
36
37
|
*/
|
|
37
|
-
function bindKernel(policy,
|
|
38
|
+
function bindKernel(policy, given, adapter, toRequest) {
|
|
39
|
+
const options = withApp(policy, given);
|
|
38
40
|
const contexts = /* @__PURE__ */ new WeakMap();
|
|
39
41
|
const bound = /* @__PURE__ */ new WeakMap();
|
|
40
42
|
const kernel = adapterKernel(policy, options, adapter, (request) => contexts.get(request));
|
|
@@ -58,14 +60,16 @@ function bindKernel(policy, options, adapter, toRequest) {
|
|
|
58
60
|
const context = contexts.get(request);
|
|
59
61
|
return context === void 0 ? Promise.resolve({ tenant: void 0 }) : scopeOf(context);
|
|
60
62
|
};
|
|
61
|
-
const
|
|
62
|
-
const
|
|
63
|
+
const getPermDock = async (context) => kernel.getPermDock(bind(context), await scopeOf(context));
|
|
64
|
+
const attach = (context) => attached(() => getPermDock(context));
|
|
65
|
+
const guard = async (permission, data, context, protectOptions) => kernel.protect(permission, data === void 0 ? void 0 : () => data(context), protectOptions)(bind(context), await scopeOf(context));
|
|
63
66
|
return {
|
|
64
67
|
kernel,
|
|
65
68
|
bind,
|
|
66
69
|
rebind,
|
|
67
70
|
scopeOf,
|
|
68
71
|
handlerScope,
|
|
72
|
+
getPermDock,
|
|
69
73
|
attach,
|
|
70
74
|
guard
|
|
71
75
|
};
|
|
@@ -1,14 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { ar as Subject } from "./policy-types-n0uRTsW8.js";
|
|
2
|
+
import { m as ApprovalStore } from "./types-BdtSDbBO.js";
|
|
3
|
+
import { t as InstanceOptions } from "./instance-options-BsVpyGIk.js";
|
|
3
4
|
import { t as RequestContext } from "./request-context-C2_1lchh.js";
|
|
4
|
-
import { n as PermDockWrap } from "./wrap-
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
5
|
+
import { n as PermDockWrap } from "./wrap-C5jC6sKI.js";
|
|
6
|
+
import { o as OtelWrap } from "./types-lUlG3TVd.js";
|
|
7
|
+
import { r as PdpFactory } from "./types-_WhUP7ud.js";
|
|
8
|
+
import { S as TenantOption, _ as WebBotAuthVerifier, t as DeniedResponse } from "./server-types-CKQiCnON.js";
|
|
8
9
|
//#region src/server/bind.d.ts
|
|
9
10
|
/** The options of every framework adapter; `TContext` is what its callbacks receive. */
|
|
10
11
|
type ServerAdapterOptions<TContext, TUser = unknown> = InstanceOptions & ServerAdapterServices & {
|
|
11
|
-
|
|
12
|
+
/** The user, or a full `Subject` (core then skips `policy.subject`). */
|
|
13
|
+
readonly subject: (context: TContext) => TUser | Subject | Promise<TUser | Subject>;
|
|
12
14
|
/** The agent or service acting for the subject; anything but an `Actor` is ignored. */
|
|
13
15
|
readonly actor?: (context: TContext) => unknown;
|
|
14
16
|
readonly tenant?: TenantOption<TContext>;
|
|
@@ -21,16 +23,16 @@ type ServerAdapterOptions<TContext, TUser = unknown> = InstanceOptions & ServerA
|
|
|
21
23
|
/** The services an adapter hands to its kernel unchanged. */
|
|
22
24
|
type ServerAdapterServices = {
|
|
23
25
|
readonly store?: ApprovalStore;
|
|
24
|
-
/** `
|
|
26
|
+
/** `getPermDock` from `permdock/pdp`; `protect` then decides delegated permissions remotely. */
|
|
25
27
|
readonly pdp?: PdpFactory;
|
|
26
28
|
/** `(permdock) => withOtel(permdock, options)` from `permdock/otel`. */
|
|
27
29
|
readonly otel?: OtelWrap;
|
|
28
|
-
/** `(
|
|
30
|
+
/** `webBotAuthVerifier(options)`; a verified bot becomes the actor. */
|
|
29
31
|
readonly webBotAuth?: WebBotAuthVerifier;
|
|
30
32
|
/** Wraps each instance after `otel`; build it with `wrapPermDock` to cover derived instances. */
|
|
31
33
|
readonly wrap?: PermDockWrap;
|
|
32
34
|
/** Replaces the response of a refused guard; it can never turn a refusal into a grant. */
|
|
33
|
-
readonly
|
|
35
|
+
readonly deniedResponse?: DeniedResponse;
|
|
34
36
|
};
|
|
35
37
|
//#endregion
|
|
36
38
|
export { ServerAdapterServices as n, ServerAdapterOptions as t };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { o as statusProblem } from "./problem-details-cn5X30gZ.js";
|
|
2
|
+
import { t as MAX_BODY_BYTES } from "./body-text-QcXok_SI.js";
|
|
3
|
+
import { c as problemResponse } from "./problem-CTviyH5L.js";
|
|
4
|
+
//#region src/server/body.ts
|
|
5
|
+
/** The 413 Problem Details for a body over `maxBytes`. */
|
|
6
|
+
function bodyTooLarge(maxBytes = MAX_BODY_BYTES) {
|
|
7
|
+
return problemResponse(statusProblem(413, `request body exceeds ${String(maxBytes)} bytes`));
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
export { bodyTooLarge as t };
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
//#region src/server/body-text.ts
|
|
2
|
+
/** The largest request body PermDock reads when a handler sets no smaller cap: 1 MiB. */
|
|
3
|
+
const MAX_BODY_BYTES = 1048576;
|
|
4
|
+
/**
|
|
5
|
+
* The request or response body as UTF-8 text, read until `maxBytes` and no further. A
|
|
6
|
+
* `Content-Length` above the cap is refused before the body is touched; a body
|
|
7
|
+
* that runs past the cap whatever its header says is cancelled mid-stream.
|
|
8
|
+
*/
|
|
9
|
+
async function readBodyText(request, maxBytes = MAX_BODY_BYTES) {
|
|
10
|
+
const declared = request.headers.get("content-length");
|
|
11
|
+
if (declared !== null && Number(declared) > maxBytes) return {
|
|
12
|
+
ok: false,
|
|
13
|
+
cause: "too-large"
|
|
14
|
+
};
|
|
15
|
+
if (request.bodyUsed) return {
|
|
16
|
+
ok: false,
|
|
17
|
+
cause: "unreadable"
|
|
18
|
+
};
|
|
19
|
+
if (request.body === null) return {
|
|
20
|
+
ok: true,
|
|
21
|
+
text: ""
|
|
22
|
+
};
|
|
23
|
+
const decoder = new TextDecoder();
|
|
24
|
+
let size = 0;
|
|
25
|
+
let text = "";
|
|
26
|
+
try {
|
|
27
|
+
const reader = request.body.getReader();
|
|
28
|
+
for (;;) {
|
|
29
|
+
const chunk = await reader.read();
|
|
30
|
+
if (chunk.done) return {
|
|
31
|
+
ok: true,
|
|
32
|
+
text: text + decoder.decode()
|
|
33
|
+
};
|
|
34
|
+
size += chunk.value.byteLength;
|
|
35
|
+
if (size > maxBytes) {
|
|
36
|
+
await reader.cancel();
|
|
37
|
+
return {
|
|
38
|
+
ok: false,
|
|
39
|
+
cause: "too-large"
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
text += decoder.decode(chunk.value, { stream: true });
|
|
43
|
+
}
|
|
44
|
+
} catch {
|
|
45
|
+
return {
|
|
46
|
+
ok: false,
|
|
47
|
+
cause: "unreadable"
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//#endregion
|
|
52
|
+
export { readBodyText as n, MAX_BODY_BYTES as t };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
-
import { t as
|
|
2
|
+
import { t as getPermDock } from "./permdock-BrAscV28.js";
|
|
3
3
|
//#region src/core/instance-options.ts
|
|
4
4
|
const INSTANCE_KEYS = {
|
|
5
5
|
memberships: true,
|
|
@@ -9,7 +9,8 @@ const INSTANCE_KEYS = {
|
|
|
9
9
|
policies: true,
|
|
10
10
|
approvalPolicies: true,
|
|
11
11
|
sink: true,
|
|
12
|
-
limits: true
|
|
12
|
+
limits: true,
|
|
13
|
+
principals: true
|
|
13
14
|
};
|
|
14
15
|
/** The `InstanceOptions` set on `options`, without the adapter's own keys. */
|
|
15
16
|
function instanceOptions(options) {
|
|
@@ -41,7 +42,7 @@ async function buildInstance(input) {
|
|
|
41
42
|
...instanceOptions(input.sources),
|
|
42
43
|
...input.scope
|
|
43
44
|
});
|
|
44
|
-
const created = await
|
|
45
|
+
const created = await getPermDock(input.policy, input.user, options);
|
|
45
46
|
return {
|
|
46
47
|
permdock: input.wrap === void 0 ? created : input.wrap(created),
|
|
47
48
|
options
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { r as isRecord } from "./compact-CAf557ZB.js";
|
|
2
2
|
//#region src/core/canonical-json.ts
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* RFC 8785 (JCS) output for I-JSON input: keys sorted by UTF-16 code units,
|
|
5
|
+
* ECMAScript number and string serialisation, no whitespace. `undefined`
|
|
6
|
+
* members are dropped. Outside I-JSON, Dates become ISO strings, bigints
|
|
7
|
+
* `"<n>n"`, and a repeated object on the current path `"[Circular]"`, so any
|
|
8
|
+
* validated row serialises.
|
|
7
9
|
*/
|
|
8
10
|
function canonicalJson(value, path = /* @__PURE__ */ new Set()) {
|
|
9
11
|
if (typeof value === "bigint") return JSON.stringify(`${value}n`);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { Rt as Instant, rr as Principal, ut as TokenSigner } from "./policy-types-n0uRTsW8.js";
|
|
2
|
+
import { E as PermissionTree, w as Permission } from "./vocabulary-CN8H_9UF.js";
|
|
3
3
|
//#region src/core/capability.d.ts
|
|
4
4
|
/**
|
|
5
5
|
* Who may redeem a capability: anyone holding it, any signed-in principal,
|
|
@@ -12,15 +12,18 @@ type CapabilityRedeemer = "anyone" | "signed-in" | {
|
|
|
12
12
|
readonly scope: string;
|
|
13
13
|
readonly id: string;
|
|
14
14
|
};
|
|
15
|
+
/** RFC 7800 confirmation: the SHA-256 JWK thumbprint (RFC 7638) of the key that must redeem it. */
|
|
16
|
+
type CapabilityConfirmation = {
|
|
17
|
+
readonly jkt: string;
|
|
18
|
+
};
|
|
15
19
|
/**
|
|
16
|
-
* Capability v1: the `capability` claim of a `permdock
|
|
17
|
-
* holds `roles` on one resource instance (`on`, the `Membership.on`
|
|
18
|
-
* optionally narrowed to `permissions` (keys).
|
|
19
|
-
* token's `sub` and the
|
|
20
|
+
* Capability v1: the `capability` claim of a `vnd.permdock.capability+jwt`.
|
|
21
|
+
* It holds `roles` on one resource instance (`on`, the `Membership.on`
|
|
22
|
+
* shape), optionally narrowed to `permissions` (keys). The link id is the
|
|
23
|
+
* token's `sub` and its expiry the token's `exp`; neither repeats here.
|
|
20
24
|
*/
|
|
21
|
-
type
|
|
25
|
+
type CapabilityClaim = {
|
|
22
26
|
readonly v: 1;
|
|
23
|
-
readonly id: string;
|
|
24
27
|
/** `key` is reserved for user-bound credentials and resolves to no subject. */
|
|
25
28
|
readonly holder: "link" | "key";
|
|
26
29
|
readonly on: {
|
|
@@ -32,10 +35,18 @@ type Capability = {
|
|
|
32
35
|
readonly redeemer?: CapabilityRedeemer;
|
|
33
36
|
/** One request per token: the resolver claims the token's `jti` in a `ReplayStore`. */
|
|
34
37
|
readonly once?: true;
|
|
35
|
-
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* A verified capability: the claim plus `id` (the token's `sub`, the handle
|
|
41
|
+
* an application revokes), `expiresAt` (its `exp`, Unix seconds, also the
|
|
42
|
+
* membership's `expiresAt`) and `cnf` when the token binds a redeemer key.
|
|
43
|
+
*/
|
|
44
|
+
type Capability = CapabilityClaim & {
|
|
45
|
+
readonly id: string;
|
|
36
46
|
readonly expiresAt: number;
|
|
47
|
+
readonly cnf?: CapabilityConfirmation;
|
|
37
48
|
};
|
|
38
|
-
type
|
|
49
|
+
type CapabilityPrincipal = Principal & {
|
|
39
50
|
readonly kind: "link";
|
|
40
51
|
readonly capability: Capability;
|
|
41
52
|
};
|
|
@@ -49,7 +60,10 @@ type CapabilityInput = {
|
|
|
49
60
|
readonly permissions?: readonly Permission[];
|
|
50
61
|
readonly redeemer?: CapabilityRedeemer;
|
|
51
62
|
readonly once?: boolean;
|
|
63
|
+
/** `exp`, Unix seconds. */
|
|
52
64
|
readonly expiresAt: number;
|
|
65
|
+
/** Binds the link to the key with this RFC 7638 thumbprint; redeeming it then needs a DPoP proof from that key. */
|
|
66
|
+
readonly cnf?: CapabilityConfirmation;
|
|
53
67
|
};
|
|
54
68
|
/**
|
|
55
69
|
* What one scope instance (a tenant, a customer) allows for links on its
|
|
@@ -64,8 +78,10 @@ type LinkPolicy = {
|
|
|
64
78
|
readonly once?: boolean;
|
|
65
79
|
};
|
|
66
80
|
type LinkPolicyViolation = "lifetime" | "redeemer" | "once";
|
|
67
|
-
type
|
|
81
|
+
type CapabilityOptions = {
|
|
68
82
|
readonly audience?: string | readonly string[];
|
|
83
|
+
/** `iat`; the clock when absent. */
|
|
84
|
+
readonly issuedAt?: Instant;
|
|
69
85
|
/** Refuse to sign a link these policies would refuse at resolution. */
|
|
70
86
|
readonly linkPolicy?: LinkPolicy | readonly LinkPolicy[];
|
|
71
87
|
};
|
|
@@ -76,24 +92,27 @@ type SignCapabilityOptions = {
|
|
|
76
92
|
*/
|
|
77
93
|
declare function linkPolicyViolation(capability: Capability, policy: LinkPolicy | readonly LinkPolicy[], issuedAt: number | undefined): LinkPolicyViolation | undefined;
|
|
78
94
|
/**
|
|
79
|
-
* Validates
|
|
80
|
-
*
|
|
81
|
-
* type in a known field rejects the whole claim.
|
|
95
|
+
* Validates a verified capability (a claim plus `id`, `expiresAt` and
|
|
96
|
+
* an optional `cnf`) and returns a frozen copy, or `undefined`.
|
|
82
97
|
*/
|
|
83
98
|
declare function parseCapability(input: unknown): Capability | undefined;
|
|
84
99
|
/**
|
|
85
|
-
*
|
|
86
|
-
* `exp`
|
|
100
|
+
* The capability verified claims carry: the `capability` claim, `sub` as
|
|
101
|
+
* `id`, `exp` as `expiresAt` and the RFC 7800 `cnf`. `undefined` when any
|
|
102
|
+
* of them is missing or malformed.
|
|
103
|
+
*/
|
|
104
|
+
declare function capabilityFromClaims(claims: Readonly<Record<string, unknown>>): Capability | undefined;
|
|
105
|
+
/**
|
|
106
|
+
* Validates an untrusted `capability` claim and returns a frozen copy with
|
|
107
|
+
* only the v1 fields, or `undefined`. Unknown fields are dropped; a wrong
|
|
108
|
+
* type in a known field rejects the whole claim.
|
|
87
109
|
*/
|
|
88
|
-
declare function
|
|
110
|
+
declare function parseCapabilityClaim(input: unknown): CapabilityClaim | undefined;
|
|
89
111
|
/**
|
|
90
|
-
*
|
|
91
|
-
* `
|
|
92
|
-
* `
|
|
93
|
-
* the anonymous subject until user-bound credentials ship.
|
|
112
|
+
* Signs a capability as a `vnd.permdock.capability+jwt`: `sub` is the link
|
|
113
|
+
* id, `exp` is `expiresAt`, `cnf` binds the redeemer's key, and the signer
|
|
114
|
+
* sets `iss`, `aud`, `iat` (`issuedAt`, else now) and a fresh `jti`.
|
|
94
115
|
*/
|
|
95
|
-
declare function
|
|
96
|
-
readonly issuer?: string;
|
|
97
|
-
}): Subject<LinkPrincipal> | Subject;
|
|
116
|
+
declare function signCapability(input: CapabilityInput, signer: TokenSigner, options?: CapabilityOptions): Promise<string>;
|
|
98
117
|
//#endregion
|
|
99
|
-
export {
|
|
118
|
+
export { CapabilityOptions as a, LinkPolicy as c, linkPolicyViolation as d, parseCapability as f, CapabilityInput as i, LinkPolicyViolation as l, signCapability as m, CapabilityClaim as n, CapabilityPrincipal as o, parseCapabilityClaim as p, CapabilityConfirmation as r, CapabilityRedeemer as s, Capability as t, capabilityFromClaims as u };
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { t as compact } from "./compact-CAf557ZB.js";
|
|
2
2
|
import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
|
|
3
|
-
import {
|
|
4
|
-
import { t as expiredAt } from "./expiry-
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { t as anonymousSubject } from "./subject-
|
|
3
|
+
import { a as ownRecord } from "./paths-DXSHAMIa.js";
|
|
4
|
+
import { a as isId, o as sameId, r as idList, t as expiredAt } from "./expiry-D4_YKRKD.js";
|
|
5
|
+
import { c as listPermissions } from "./permission-registry-Br4jSNVi.js";
|
|
6
|
+
import { o as epochSeconds, p as nowSeconds } from "./time-DkWjdL98.js";
|
|
7
|
+
import { t as anonymousSubject } from "./subject-BGoM5o8B.js";
|
|
8
8
|
//#region src/core/capability.ts
|
|
9
9
|
function redeemerKind(redeemer) {
|
|
10
10
|
if (redeemer === void 0 || typeof redeemer === "string") return redeemer ?? "anyone";
|
|
@@ -24,22 +24,6 @@ function linkPolicyViolation(capability, policy, issuedAt) {
|
|
|
24
24
|
if (item.once === true && capability.once !== true) return "once";
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
|
-
const MAX_ID = 256;
|
|
28
|
-
const MAX_ENTRIES = 64;
|
|
29
|
-
/** A copy holding only own enumerable properties, so a prototype never supplies a field. */
|
|
30
|
-
function ownRecord(value) {
|
|
31
|
-
if (value === null || typeof value !== "object" || Array.isArray(value)) return;
|
|
32
|
-
const record = {};
|
|
33
|
-
for (const [key, item] of Object.entries(value)) if (!isForbiddenKey(key)) record[key] = item;
|
|
34
|
-
return record;
|
|
35
|
-
}
|
|
36
|
-
function isId(value) {
|
|
37
|
-
return typeof value === "string" && value.length > 0 && value.length <= MAX_ID;
|
|
38
|
-
}
|
|
39
|
-
function idList(value) {
|
|
40
|
-
if (!Array.isArray(value) || value.length === 0 || value.length > MAX_ENTRIES || !value.every(isId)) return;
|
|
41
|
-
return [...new Set(value)];
|
|
42
|
-
}
|
|
43
27
|
function parseRedeemer(input) {
|
|
44
28
|
if (input === "anyone" || input === "signed-in") return input;
|
|
45
29
|
const value = ownRecord(input);
|
|
@@ -51,14 +35,54 @@ function parseRedeemer(input) {
|
|
|
51
35
|
id: value["id"]
|
|
52
36
|
};
|
|
53
37
|
}
|
|
38
|
+
function parseConfirmation(input) {
|
|
39
|
+
const jkt = ownRecord(input)?.["jkt"];
|
|
40
|
+
return typeof jkt === "string" && /^[\w-]{43}$/u.test(jkt) ? { jkt } : void 0;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Validates a verified capability (a claim plus `id`, `expiresAt` and
|
|
44
|
+
* an optional `cnf`) and returns a frozen copy, or `undefined`.
|
|
45
|
+
*/
|
|
46
|
+
function parseCapability(input) {
|
|
47
|
+
const value = ownRecord(input);
|
|
48
|
+
const claim = parseCapabilityClaim(input);
|
|
49
|
+
if (value === void 0 || claim === void 0 || !isId(value["id"])) return;
|
|
50
|
+
const expiresAt = value["expiresAt"];
|
|
51
|
+
if (typeof expiresAt !== "number" || !Number.isFinite(expiresAt)) return;
|
|
52
|
+
const cnf = value["cnf"] === void 0 ? void 0 : parseConfirmation(value["cnf"]);
|
|
53
|
+
if (value["cnf"] !== void 0 && cnf === void 0) return;
|
|
54
|
+
return freezeDeep(compact({
|
|
55
|
+
...claim,
|
|
56
|
+
id: value["id"],
|
|
57
|
+
expiresAt,
|
|
58
|
+
cnf
|
|
59
|
+
}));
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* The capability verified claims carry: the `capability` claim, `sub` as
|
|
63
|
+
* `id`, `exp` as `expiresAt` and the RFC 7800 `cnf`. `undefined` when any
|
|
64
|
+
* of them is missing or malformed.
|
|
65
|
+
*/
|
|
66
|
+
function capabilityFromClaims(claims) {
|
|
67
|
+
const claim = parseCapabilityClaim(claims["capability"]);
|
|
68
|
+
const sub = claims["sub"];
|
|
69
|
+
const exp = claims["exp"];
|
|
70
|
+
if (claim === void 0 || !isId(sub) || typeof exp !== "number") return;
|
|
71
|
+
return parseCapability({
|
|
72
|
+
...claim,
|
|
73
|
+
id: sub,
|
|
74
|
+
expiresAt: exp,
|
|
75
|
+
cnf: claims["cnf"]
|
|
76
|
+
});
|
|
77
|
+
}
|
|
54
78
|
/**
|
|
55
79
|
* Validates an untrusted `capability` claim and returns a frozen copy with
|
|
56
80
|
* only the v1 fields, or `undefined`. Unknown fields are dropped; a wrong
|
|
57
81
|
* type in a known field rejects the whole claim.
|
|
58
82
|
*/
|
|
59
|
-
function
|
|
83
|
+
function parseCapabilityClaim(input) {
|
|
60
84
|
const value = ownRecord(input);
|
|
61
|
-
if (value === void 0 || value["v"] !== 1
|
|
85
|
+
if (value === void 0 || value["v"] !== 1) return;
|
|
62
86
|
if (value["holder"] !== "link" && value["holder"] !== "key") return;
|
|
63
87
|
const on = ownRecord(value["on"]);
|
|
64
88
|
if (on === void 0 || !isId(on["resource"]) || !isId(on["id"])) return;
|
|
@@ -69,11 +93,8 @@ function parseCapability(input) {
|
|
|
69
93
|
const redeemer = value["redeemer"] === void 0 ? void 0 : parseRedeemer(value["redeemer"]);
|
|
70
94
|
if (value["redeemer"] !== void 0 && redeemer === void 0) return;
|
|
71
95
|
if (value["once"] !== void 0 && value["once"] !== true) return;
|
|
72
|
-
const expiresAt = value["expiresAt"];
|
|
73
|
-
if (typeof expiresAt !== "number" || !Number.isFinite(expiresAt)) return;
|
|
74
96
|
return freezeDeep(compact({
|
|
75
97
|
v: 1,
|
|
76
|
-
id: value["id"],
|
|
77
98
|
holder: value["holder"],
|
|
78
99
|
on: {
|
|
79
100
|
resource: on["resource"],
|
|
@@ -82,8 +103,7 @@ function parseCapability(input) {
|
|
|
82
103
|
roles,
|
|
83
104
|
permissions,
|
|
84
105
|
redeemer,
|
|
85
|
-
once: value["once"]
|
|
86
|
-
expiresAt
|
|
106
|
+
once: value["once"]
|
|
87
107
|
}));
|
|
88
108
|
}
|
|
89
109
|
function resourceName(resource) {
|
|
@@ -106,26 +126,32 @@ function capabilityOf(input) {
|
|
|
106
126
|
permissions: input.permissions?.map((permission) => permission.key),
|
|
107
127
|
redeemer: input.redeemer,
|
|
108
128
|
once: input.once === true ? true : void 0,
|
|
109
|
-
expiresAt: Math.floor(input.expiresAt)
|
|
129
|
+
expiresAt: Math.floor(input.expiresAt),
|
|
130
|
+
cnf: input.cnf
|
|
110
131
|
}));
|
|
111
|
-
if (capability === void 0) throw new Error("PermDock: invalid capability (id, on.id and roles are required; roles and permissions hold at most 64 entries)");
|
|
132
|
+
if (capability === void 0) throw new Error("PermDock: invalid capability (id, on.id and roles are required; roles and permissions hold at most 64 entries; cnf.jkt is a base64url SHA-256 thumbprint)");
|
|
112
133
|
return capability;
|
|
113
134
|
}
|
|
114
135
|
/**
|
|
115
|
-
* Signs a capability as a `permdock
|
|
116
|
-
* `exp` is `expiresAt`,
|
|
136
|
+
* Signs a capability as a `vnd.permdock.capability+jwt`: `sub` is the link
|
|
137
|
+
* id, `exp` is `expiresAt`, `cnf` binds the redeemer's key, and the signer
|
|
138
|
+
* sets `iss`, `aud`, `iat` (`issuedAt`, else now) and a fresh `jti`.
|
|
117
139
|
*/
|
|
118
140
|
function signCapability(input, signer, options = {}) {
|
|
119
141
|
const capability = capabilityOf(input);
|
|
120
|
-
const
|
|
142
|
+
const issuedAt = nowSeconds(options.issuedAt);
|
|
143
|
+
const violation = options.linkPolicy === void 0 ? void 0 : linkPolicyViolation(capability, options.linkPolicy, issuedAt);
|
|
121
144
|
if (violation !== void 0) return Promise.reject(/* @__PURE__ */ new Error(`PermDock: capability breaks the link policy (${violation})`));
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
145
|
+
const { id, expiresAt, cnf, ...claim } = capability;
|
|
146
|
+
return signer.sign(compact({
|
|
147
|
+
capability: claim,
|
|
148
|
+
sub: id,
|
|
149
|
+
cnf
|
|
150
|
+
}), compact({
|
|
151
|
+
typ: "vnd.permdock.capability+jwt",
|
|
127
152
|
audience: options.audience,
|
|
128
|
-
expiresAt
|
|
153
|
+
expiresAt,
|
|
154
|
+
issuedAt
|
|
129
155
|
}));
|
|
130
156
|
}
|
|
131
157
|
function holdsScope(membership, scope, id, now) {
|
|
@@ -134,10 +160,10 @@ function holdsScope(membership, scope, id, now) {
|
|
|
134
160
|
return scope === "tenant" && sameId(membership.tenant, id) || scope === "team" && sameId(membership.team, id);
|
|
135
161
|
}
|
|
136
162
|
/** Whether `viewer`, the request's own verified subject, may redeem a capability. */
|
|
137
|
-
function redeemerAllows(redeemer, viewer, now =
|
|
163
|
+
function redeemerAllows(redeemer, viewer, now = epochSeconds()) {
|
|
138
164
|
if (redeemer === void 0 || redeemer === "anyone") return true;
|
|
139
165
|
const principal = viewer?.principal ?? null;
|
|
140
|
-
if (principal === null || principal.kind === "link") return false;
|
|
166
|
+
if (principal === null || principal.kind === "link" || principal.kind === "feed") return false;
|
|
141
167
|
if (redeemer === "signed-in") return true;
|
|
142
168
|
if ("user" in redeemer) return principal.id === redeemer.user;
|
|
143
169
|
return (principal.memberships ?? []).some((membership) => holdsScope(membership, redeemer.scope, redeemer.id, now));
|
|
@@ -171,4 +197,4 @@ function capabilitySubject(capability, options = {}) {
|
|
|
171
197
|
}));
|
|
172
198
|
}
|
|
173
199
|
//#endregion
|
|
174
|
-
export {
|
|
200
|
+
export { parseCapability as a, signCapability as c, linkPolicyViolation as i, capabilityOf as n, parseCapabilityClaim as o, capabilitySubject as r, redeemerAllows as s, capabilityFromClaims as t };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { t as defineLeaf } from "./command-L8EstFNm.js";
|
|
2
|
+
import { c as given, l as outFlag, o as fileOut } from "./flags-C3DktBDY.js";
|
|
3
|
+
//#region src/cli/commands/casbin.ts
|
|
4
|
+
const casbinImport = defineLeaf({
|
|
5
|
+
flags: {
|
|
6
|
+
model: {
|
|
7
|
+
type: "string",
|
|
8
|
+
description: "The Casbin model.conf",
|
|
9
|
+
valueHint: "file"
|
|
10
|
+
},
|
|
11
|
+
policy: {
|
|
12
|
+
type: "string",
|
|
13
|
+
description: "The Casbin policy.csv",
|
|
14
|
+
valueHint: "file"
|
|
15
|
+
},
|
|
16
|
+
...outFlag
|
|
17
|
+
},
|
|
18
|
+
async run(ctx, { flags }) {
|
|
19
|
+
const { runCasbinImport } = await import("./casbin-Dyu2gnUD.js");
|
|
20
|
+
return runCasbinImport({
|
|
21
|
+
cwd: ctx.cwd,
|
|
22
|
+
model: given(flags.model),
|
|
23
|
+
policy: given(flags.policy),
|
|
24
|
+
out: fileOut("casbin import", flags.out),
|
|
25
|
+
json: ctx.json
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
//#endregion
|
|
30
|
+
export { casbinImport };
|