permdock 0.4.0 → 0.5.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-B4R5fnMU.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-Djo_PyZc.d.ts +57 -0
- package/dist/approvals/index.d.ts +5 -3
- package/dist/approvals/index.js +8 -5
- package/dist/approvals-DJ6Yd5z1.js +995 -0
- package/dist/arazzo-B6lebmiQ.js +36 -0
- package/dist/{arazzo-C4BcskbX.js → arazzo-BWhNF-k0.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-Dg8XsRaO.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-BMZPIVUM.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-BzqG8SMb.d.ts → bind--9EFVYWF.d.ts} +12 -10
- package/dist/{bind-kk-uyCwH.js → bind-CZzhx-Vj.js} +14 -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-BMnAudHn.js} +4 -3
- package/dist/{canonical-json-CFKyFOke.js → canonical-json-BC8_nMTw.js} +5 -3
- package/dist/{capability-CksyCWDH.d.ts → capability-BSslw1QV.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-tZUyOfOv.js → catalog-BECMPrwc.js} +51 -6
- package/dist/catalog-DjhMYYCq.js +1 -0
- package/dist/catalog-R_A__RsH.js +52 -0
- package/dist/{catalog-doc-DWtg0gGR.js → catalog-doc-C9wjsfNY.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-CIoHNevm.js +87 -0
- package/dist/codemod-Bmj9dWMH.js +37 -0
- package/dist/codemod-Cxvvc70T.js +2084 -0
- package/dist/{collect-2SrB7lfk.js → collect-CrZJJnEF.js} +75 -11
- package/dist/collect-DloHbDVa.js +55 -0
- package/dist/collect-FlXJlhus.js +1 -0
- 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-CcEu2ZQ1.js → compile-CMqMx_IN.js} +11 -8
- package/dist/{compile-CtTP7eur.d.ts → compile-Ckm2HqBZ.d.ts} +5 -3
- package/dist/completion-BqhRBJD8.js +143 -0
- package/dist/config-B46rm9sc.js +26 -0
- package/dist/{config-BIjREpyE.js → config-bs_kZeYq.js} +12 -7
- package/dist/{config-report--Xb9APJS.js → config-report-DUgj62Ai.js} +15 -5
- package/dist/{connection-DUsczpB5.js → connection-DjhIJSs2.js} +6 -5
- package/dist/{context-DieZVJXu.js → context-bbFHR-0D.js} +2 -2
- package/dist/convex/index.d.ts +11 -10
- package/dist/convex/index.js +6 -4
- package/dist/create-0VZ7Pdiu.d.ts +107 -0
- package/dist/create-BDS7wc3y.d.ts +138 -0
- package/dist/create-BFfm17UA.d.ts +110 -0
- package/dist/create-BWRSXgOF.js +403 -0
- package/dist/create-C3b4B5eF.js +130 -0
- package/dist/{create-BBO24vj6.js → create-DnrmLnLW.js} +31 -32
- package/dist/{credential-kue0qpbm.js → credential-DM2um3ha.js} +152 -31
- package/dist/credentials-DPyHmYz5.js +74 -0
- package/dist/delegation-DaXVdDhM.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-D8jDHgsl.d.ts} +5 -5
- package/dist/{describe-C3ldA9os.d.ts → describe-BZUsixiL.d.ts} +2 -2
- package/dist/{describe-Cgkp7eP0.js → describe-BybMRY7A.js} +6 -2
- package/dist/device-BARQ8eYG.js +193 -0
- package/dist/diff-CxZo9pTq.js +37 -0
- package/dist/{diff-rpqoe7Ag.js → diff-DCePiN6M.js} +60 -54
- package/dist/doctor-CxiwSfqH.js +44 -0
- package/dist/{doctor-owlv6ddh.js → doctor-DFjUxf2f.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-OD_4c__H.d.ts → errors-C2PXIv4c.d.ts} +2 -2
- package/dist/errors-CWTY6uih.js +143 -0
- package/dist/evaluate-_R8QkWaf.js +1732 -0
- package/dist/evaluations-16UqqQ6W.d.ts +32 -0
- package/dist/{evaluations-C9YJsv3H.js → evaluations-DZ2CbV5k.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-g0ypLkID.js +120 -0
- package/dist/fetch-adapter-qKJBuRqy.d.ts +31 -0
- package/dist/fields-D9tPVUUS.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-D2lZt4Dd.js} +55 -52
- package/dist/{grantee-CXY-0C87.js → grantee-Cn1HyUsI.js} +3 -3
- package/dist/{grantee-conditions-MQs5NIuX.js → grantee-conditions-CcXf8hMM.js} +4 -3
- package/dist/{grantee-match-fxYp9Nmt.js → grantee-match-DHArqY82.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-DTcZOzhF.js} +45 -38
- package/dist/hono/index.d.ts +12 -9
- package/dist/hono/index.js +13 -12
- package/dist/hosted-BZIAYvon.js +315 -0
- package/dist/hosted-DBDX0M-P.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-DMmOG27O.js} +190 -53
- package/dist/index-BcHcPyIo.d.ts +110 -0
- package/dist/index-CaxrMD1A.d.ts +1 -0
- package/dist/index-Chrs5fQ-.d.ts +210 -0
- package/dist/index-CxGUswIC.d.ts +431 -0
- package/dist/index-D8EovfsP.d.ts +91 -0
- package/dist/{index-UdVQgq48.d.ts → index-DOVf7RJv.d.ts} +431 -81
- package/dist/{index-BwMe94Xq.d.ts → index-SGdIQyzc.d.ts} +34 -16
- 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-Omfd793B.d.ts} +2 -2
- package/dist/instance-snapshot-Cxq4ygFc.js +600 -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-5JatXyND.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-CtKR3GXL.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-TCAdw-eW.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-BShP7Vf4.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-BJdBmYDG.js → openapi-DTaEmTSW.js} +10 -9
- package/dist/openapi-ahr8rHu3.js +138 -0
- package/dist/operation-findings-DgATDpvh.js +36 -0
- package/dist/operations-CxybZErY.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-Dyw8fyPF.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-BatFgAA4.js} +1698 -869
- 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-C-q02Pal.js → parse-local-manifest-CVSs6J9I.js} +1 -1
- package/dist/{parse-local-manifest-DvYUR0QL.d.ts → parse-local-manifest-DgqtruPn.d.ts} +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-B9JxkBwC.js +868 -0
- package/dist/permdock-D7eeLJER.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-CZKiUfFM.js} +4 -3
- package/dist/{permissions-COH-KRgT.d.ts → permissions-oEWfl-kl.d.ts} +1 -2
- package/dist/policies-CO1oOymN.js +295 -0
- package/dist/{policy-ur0BBK_e.d.ts → policy-Czo4n3Hs.d.ts} +2 -2
- package/dist/{hosted-CBHgkzDl.js → policy-DLZJ5gAp.js} +17 -273
- package/dist/policy-from-catalog-DzhEc3Y9.js +450 -0
- package/dist/policy-module-CTlwMvLI.js +89 -0
- package/dist/{policy-types-sp9P1iIV.d.ts → policy-types-DzwivBgR.d.ts} +434 -631
- package/dist/postgrest-CW0IqC-U.js +566 -0
- package/dist/postgrest-NUqZT-RB.d.ts +100 -0
- package/dist/powersync-BHfuehf3.js +62 -0
- package/dist/powersync-CbzkqL_M.js +1 -0
- package/dist/{powersync-cZe4kzhL.js → powersync-bYUDLOAO.js} +23 -24
- 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-DXlt-vks.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-B3_P7xuw.d.ts → protected-DEPHc2xV.d.ts} +16 -8
- package/dist/{protected-BN7BUdY1.js → protected-DfjY5mLA.js} +21 -4
- package/dist/{provider-Bi-0HNL3.js → provider-CC-u3bYP.js} +2 -2
- package/dist/{provider-kwHC9CZD.d.ts → provider-DMVt6yYn.d.ts} +1 -1
- package/dist/{provider-store-Ctt-81Ni.js → provider-store-B5Yrkhzr.js} +2 -2
- package/dist/pull-BgIfno6w.js +256 -0
- package/dist/pull-ByOks_Tg.js +1 -0
- package/dist/push-CmFVBOeI.js +116 -0
- package/dist/pushed-policy-BImMTTIM.d.ts +57 -0
- package/dist/pushed-policy-DobP7AHI.js +238 -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 +24 -22
- 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-D7iKcLFe.d.ts} +1 -1
- package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
- package/dist/{request-context-BVM7aWNs.js → request-context-BTRTG7OT.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-BA8an5Ap.js +336 -0
- package/dist/{rls-BEktUaqg.js → rls-j6t43t7n.js} +287 -689
- package/dist/{role-builder-B4GbKM-i.js → role-builder-CXbis5-X.js} +14 -207
- package/dist/{rpc-nYC3cR_u.js → rpc-aPyNi6tA.js} +7 -7
- package/dist/run-CNsApDpd.js +1 -0
- package/dist/run-DOfMtc9V.js +723 -0
- package/dist/run-ticket-BjhTOi6u.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-FO-Q8oj0.js} +16 -14
- package/dist/scan-BOI5tJ-6.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-DqCT4CgZ.js +453 -0
- package/dist/{server-types-DdqBwZN_.d.ts → server-types-BLd4MnBX.d.ts} +51 -68
- package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
- package/dist/{shared-1uhI-e-b.js → shared-CD11nBbC.js} +18 -8
- package/dist/{shared-JhMeOsDF.js → shared-DvvFzYXe.js} +8 -9
- package/dist/signals-D3NcTKUS.js +32 -0
- package/dist/sink-BEZSlMS_.js +957 -0
- package/dist/sink-Bj_lDUDq.d.ts +225 -0
- package/dist/{skills-BZdRQkxs.js → skills-B6lVdD_W.js} +13 -6
- package/dist/skills-CTYwkl44.js +51 -0
- package/dist/snapshot-CXUWfsNy.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-DqK9eDmM.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-BV9j0DeZ.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-DLfUWFAI.js +1851 -0
- package/dist/ssf/index.d.ts +4 -4
- package/dist/ssf/index.js +384 -47
- package/dist/standard-webhooks-6lg8v_is.d.ts +88 -0
- package/dist/standard-webhooks-DgFFD-Ga.js +228 -0
- package/dist/storage-C2bWdvJH.js +132 -0
- package/dist/{store-ILkLUj_o.js → store-4u_hxjWa.js} +40 -53
- package/dist/{store-options-CbUHDoSe.js → store-options-BqEakYRa.js} +26 -21
- package/dist/{stores-BHXdSbw9.js → stores-BbsD4fAR.js} +2 -2
- package/dist/{stores-Cxz_80g-.d.ts → stores-ClZUgeoP.d.ts} +7 -8
- package/dist/{stream-Dwsg6WwE.d.ts → stream-7-xmnf3U.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-9pqI57pW.js +92 -0
- package/dist/{supabase-C1TWlnYt.js → supabase-Dxlp8A94.js} +98 -205
- package/dist/supabase-hook-CXcGpHqq.js +1 -0
- package/dist/{supabase-hook-Cva3ikXz.js → supabase-hook-DdDQhMlw.js} +951 -60
- 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-7rJVLWe5.d.ts → types-5Ut_pbKy.d.ts} +61 -11
- package/dist/{store-9KO4BlkB.d.ts → types-BNORmDM8.d.ts} +100 -75
- package/dist/types-BjV-fqcA.d.ts +57 -0
- package/dist/{types-CUcFZfpU.d.ts → types-BqAKcRNW.d.ts} +2 -1
- package/dist/types-C8-KNsFf.d.ts +107 -0
- package/dist/{types-Br9IXUBG.d.ts → types-CCpc2Dcv.d.ts} +77 -17
- package/dist/{types-DpWfQdSh.d.ts → types-CZTnPFzM.d.ts} +46 -11
- package/dist/{types-CqrjB9o6.d.ts → types-CdlxsYQh.d.ts} +23 -11
- package/dist/{types-CIlTojhq.d.ts → types-ClZaWzfb.d.ts} +9 -6
- package/dist/types-DX0LaKTb.d.ts +157 -0
- package/dist/types-DiQjupG2.d.ts +332 -0
- package/dist/types-DqzsnlSA.js +67 -0
- package/dist/types-_sHy8BQf.d.ts +65 -0
- package/dist/{types-ByUo56un.d.ts → types-fbZ7JEXr.d.ts} +23 -22
- package/dist/{types-DHrmBJLH.d.ts → types-tIgIeIKJ.d.ts} +7 -7
- package/dist/unplugin/index.d.ts +1 -1
- package/dist/unplugin/index.js +2 -2
- package/dist/usage-CHOtwL19.js +1 -0
- package/dist/usage-DHtE8j4E.js +32 -0
- package/dist/{usage-CG9nOYZw.js → usage-T5mXq98v.js} +54 -11
- package/dist/{validation-error-BSSw0l_8.d.ts → validation-error-Bg5Tpluk.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-DbCL9bnB.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-D6lPdb4Z.d.ts} +65 -2
- package/dist/vue/index.d.ts +9 -10
- package/dist/vue/index.js +8 -8
- package/dist/waiter-BGUtGYoU.js +67 -0
- package/dist/waiter-CKy4MQSY.d.ts +36 -0
- package/dist/watch-Cb-NcaUw.js +1 -0
- package/dist/{watch-zeucB7eF.js → watch-CszoTJMq.js} +44 -5
- package/dist/webmcp/index.d.ts +2 -2
- package/dist/webmcp/index.js +3 -3
- package/dist/where-scope-Dv-WTP-w.js +306 -0
- package/dist/who-can-D0QoYbEb.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-Bd1Tejur.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 +9 -8
- 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 +5 -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/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
package/README.md
CHANGED
|
@@ -70,6 +70,7 @@ Server-only. Roles are data; conditions are a portable JSON tree.
|
|
|
70
70
|
```ts
|
|
71
71
|
// src/policy.ts
|
|
72
72
|
import { allow, definePolicy, principal, relation, role } from "permdock";
|
|
73
|
+
|
|
73
74
|
import { permissions, roles } from "./permissions";
|
|
74
75
|
|
|
75
76
|
const member = role(roles.member, [
|
|
@@ -93,7 +94,7 @@ export const policy = definePolicy(
|
|
|
93
94
|
{
|
|
94
95
|
roles: [member, admin],
|
|
95
96
|
scopes: { tenant: { key: "orgId" } },
|
|
96
|
-
|
|
97
|
+
subject: (user: User | null) =>
|
|
97
98
|
user && {
|
|
98
99
|
id: user.id,
|
|
99
100
|
roles: user.roles,
|
|
@@ -110,9 +111,9 @@ export const policy = definePolicy(
|
|
|
110
111
|
### 3. Decide
|
|
111
112
|
|
|
112
113
|
```ts
|
|
113
|
-
import {
|
|
114
|
+
import { getPermDock } from "permdock";
|
|
114
115
|
|
|
115
|
-
const permdock = await
|
|
116
|
+
const permdock = await getPermDock(policy, user); // frozen, request-scoped; getPermDockSync when every input is synchronous
|
|
116
117
|
permdock.can(permissions.post.update, post); // boolean
|
|
117
118
|
permdock.decide(permissions.post.delete, post); // { outcome: 'granted' | 'denied' | 'approval-required', ... }
|
|
118
119
|
permdock.explain(permissions.post.delete, post); // the decision plus a trace naming the deny that won
|
|
@@ -132,7 +133,7 @@ import { PermDockProvider, Protected, usePermission } from "permdock/react";
|
|
|
132
133
|
<Protected
|
|
133
134
|
permission={permissions.post.update}
|
|
134
135
|
data={post}
|
|
135
|
-
|
|
136
|
+
denied={<Locked />}
|
|
136
137
|
>
|
|
137
138
|
<EditButton />
|
|
138
139
|
</Protected>
|
|
@@ -149,15 +150,13 @@ The same hook names exist in React Native, Vue, Svelte and Solid. Read [building
|
|
|
149
150
|
// src/permdock/server.ts
|
|
150
151
|
import { createPermDock } from "permdock/next";
|
|
151
152
|
|
|
152
|
-
export const { getPermDock,
|
|
153
|
-
policy,
|
|
154
|
-
{
|
|
153
|
+
export const { getPermDock, requirePermission, permdockHandler } =
|
|
154
|
+
createPermDock(policy, {
|
|
155
155
|
subject: async () => getUser(await cookies()),
|
|
156
|
-
}
|
|
157
|
-
);
|
|
156
|
+
});
|
|
158
157
|
|
|
159
158
|
// in a page or Server Action
|
|
160
|
-
await
|
|
159
|
+
await requirePermission(permissions.post.update, post); // forbidden() / unauthorized() on a denial
|
|
161
160
|
```
|
|
162
161
|
|
|
163
162
|
### Hono
|
|
@@ -167,10 +166,10 @@ Express, Fastify, Elysia, Nest, Node, tRPC and oRPC have the same shape.
|
|
|
167
166
|
```ts
|
|
168
167
|
import { createPermDock } from "permdock/hono";
|
|
169
168
|
|
|
170
|
-
export const {
|
|
169
|
+
export const { middleware, protect } = createPermDock(policy, {
|
|
171
170
|
subject: (c) => c.get("user"),
|
|
172
171
|
});
|
|
173
|
-
app.use(
|
|
172
|
+
app.use(middleware());
|
|
174
173
|
app.delete(
|
|
175
174
|
"/posts/:id",
|
|
176
175
|
protect(permissions.post.delete, (c) => loadPost(c.req.param("id"))),
|
|
@@ -204,6 +203,7 @@ protectServer(server).registerTool(
|
|
|
204
203
|
The Claude Agent SDK, Eve, the OpenAI Agents SDK, WebMCP and A2A have their own entries with the same tool map.
|
|
205
204
|
|
|
206
205
|
```ts
|
|
206
|
+
import { defineOperations } from "permdock";
|
|
207
207
|
import { createPermDock } from "permdock/ai-sdk";
|
|
208
208
|
|
|
209
209
|
const { toolApproval } = createPermDock(policy, {
|
|
@@ -212,12 +212,12 @@ const { toolApproval } = createPermDock(policy, {
|
|
|
212
212
|
id: runtimeContext.agentId,
|
|
213
213
|
kind: "ai-sdk",
|
|
214
214
|
}),
|
|
215
|
-
|
|
215
|
+
operations: defineOperations(permissions, {
|
|
216
216
|
delete_post: {
|
|
217
217
|
permission: permissions.post.delete,
|
|
218
218
|
data: (args) => loadPost(args.id),
|
|
219
219
|
},
|
|
220
|
-
},
|
|
220
|
+
}),
|
|
221
221
|
});
|
|
222
222
|
generateText({ model, tools, toolApproval }); // granted → approved, denied → denied, approval-required → user-approval
|
|
223
223
|
```
|
|
@@ -226,7 +226,7 @@ generateText({ model, tools, toolApproval }); // granted → approved, denied
|
|
|
226
226
|
|
|
227
227
|
```bash
|
|
228
228
|
permdock rls generate --target drizzle --dialect supabase # roles × grants → policies
|
|
229
|
-
permdock rls verify --db
|
|
229
|
+
printf %s "$DATABASE_URL" | permdock rls verify --db-url-stdin # can() vs database parity
|
|
230
230
|
```
|
|
231
231
|
|
|
232
232
|
## Agents and approvals
|
|
@@ -253,8 +253,8 @@ allow(permissions.payout.release, {
|
|
|
253
253
|
approval: {
|
|
254
254
|
by: roles.finance,
|
|
255
255
|
quorum: 2, // two distinct finance approvers
|
|
256
|
-
ttl:
|
|
257
|
-
escalation: { after:
|
|
256
|
+
ttl: 1800, // seconds: 30 minutes
|
|
257
|
+
escalation: { after: 600, to: roles.cfo },
|
|
258
258
|
},
|
|
259
259
|
});
|
|
260
260
|
```
|
|
@@ -284,28 +284,30 @@ PermDock adopts the permission keys, SQL helpers, tokens and stored custom roles
|
|
|
284
284
|
|
|
285
285
|
Any Standard Schema validator: Zod, Valibot, ArkType, Effect Schema. One import path per target:
|
|
286
286
|
|
|
287
|
-
| Group | Entries
|
|
288
|
-
| ------------------ |
|
|
289
|
-
| UI | `permdock/react` · `permdock/react-native` · `permdock/vue` · `permdock/svelte` · `permdock/solid`
|
|
290
|
-
| Full-stack | `permdock/next`
|
|
291
|
-
| HTTP | `permdock/server` · `permdock/hono` · `permdock/express` · `permdock/fastify` · `permdock/elysia` · `permdock/nest` · `permdock/node`
|
|
292
|
-
| Terminal | `permdock/terminal` for your own CLI (not the `permdock` binary)
|
|
293
|
-
| RPC | `permdock/trpc` · `permdock/orpc`
|
|
294
|
-
| Agents | `permdock/mcp` · `permdock/ai-sdk` · `permdock/claude-agent` · `permdock/eve` · `permdock/openai` · `permdock/webmcp` · `permdock/a2a`
|
|
295
|
-
|
|
|
296
|
-
|
|
|
297
|
-
|
|
|
298
|
-
|
|
|
299
|
-
|
|
|
300
|
-
|
|
301
|
-
|
|
287
|
+
| Group | Entries |
|
|
288
|
+
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
289
|
+
| UI | `permdock/react` · `permdock/react-native` · `permdock/vue` · `permdock/svelte` · `permdock/solid` |
|
|
290
|
+
| Full-stack | `permdock/next` · `permdock/sveltekit` · `permdock/astro` · `permdock/solid-start` · `permdock/tanstack-start` |
|
|
291
|
+
| HTTP | `permdock/server` · `permdock/hono` · `permdock/h3` · `permdock/express` · `permdock/fastify` · `permdock/elysia` · `permdock/nest` · `permdock/node` |
|
|
292
|
+
| Terminal | `permdock/terminal` for your own CLI (not the `permdock` binary) |
|
|
293
|
+
| RPC | `permdock/trpc` · `permdock/orpc` |
|
|
294
|
+
| Agents | `permdock/agent` · `permdock/mcp` · `permdock/ai-sdk` · `permdock/claude-agent` · `permdock/eve` · `permdock/openai` · `permdock/webmcp` · `permdock/a2a` |
|
|
295
|
+
| Messaging | `permdock/delivery` · `permdock/resend` · `permdock/chat` · `permdock/chat-sdk` |
|
|
296
|
+
| Decision plane | `permdock/authzen` · `permdock/approvals` · `permdock/workflow` · `permdock/workflow-sdk` · `permdock/cloud` · `permdock/scim` · `permdock/ssf` · `permdock/openapi` · `permdock/otel` · `permdock/pdp` |
|
|
297
|
+
| Data | `permdock/drizzle` · `permdock/prisma` · `permdock/kysely` · `permdock rls` · `permdock powersync` |
|
|
298
|
+
| Auth and providers | `permdock/jwt` · `permdock/supabase` · `permdock/supabase/middleware` · `permdock/better-supabase` · `permdock/better-auth` · `permdock/clerk` · `permdock/convex` |
|
|
299
|
+
| Build | `permdock/next/plugin` · `permdock/unplugin` |
|
|
300
|
+
| Testing | `permdock/testing` |
|
|
301
|
+
|
|
302
|
+
React Router loaders call `getSnapshot(request)` from `permdock/server` and send `snapshotHeaders(snapshot)`; Nitro and Nuxt server routes use `permdock/h3`. Effect uses these entries plus `permdock/unplugin`. The full matrix with example apps and related standards is on the [adapters page](https://permdock.com/docs/adapters).
|
|
302
303
|
|
|
303
304
|
## Secure by default
|
|
304
305
|
|
|
305
306
|
- Fail-closed: an unknown, invalid or thrown check denies, and `can()` never throws.
|
|
306
307
|
- Deny overrides allow, an unknown reference is a type error, and evaluation is prototype-safe with no eval.
|
|
307
308
|
- `service_role` is never emitted, a model-supplied subject is never trusted, and an agent with no delegation is denied.
|
|
308
|
-
- No one approves their own request by default, there is never a default tenant, and data is validated against the resource schema unless the caller marks a row it loaded `trusted: true`.
|
|
309
|
+
- No one approves their own request by default, a delegate is held to the same rule as the person they cover, there is never a default tenant, and data is validated against the resource schema unless the caller marks a row it loaded `trusted: true`.
|
|
310
|
+
- A user or service API key expires unless the tenant sets `allowNoExpiry`. A feed key (`pdfeed_`) does not expire; rotation replaces the secret and keeps the id, and the key is bound to one resource.
|
|
309
311
|
- Authentication stays upstream: PermDock consumes verified sessions, JWKS-verified JWTs (`permdock/jwt`, with `jose` as an optional peer), provider claims and MCP `authInfo`. Core never verifies a token. User-editable fields never become claims: `subjectFromBetterAuth` copies `additionalFields` only through a `schema`. Read [authentication](https://permdock.com/docs/concepts/authentication).
|
|
310
312
|
- Every decision runs in-process. [PermDock Cloud](https://permdock.com/docs/adapters/cloud) adds a decision log, an approval inbox, a hosted AuthZEN endpoint and a SCIM relay, behind interfaces this package ships with in-process defaults.
|
|
311
313
|
|
|
@@ -319,10 +321,10 @@ Other TypeScript permission libraries (CASL, permix, Kilpi, `@zap-studio/permit`
|
|
|
319
321
|
|
|
320
322
|
```bash
|
|
321
323
|
npx skills add ScaleDockHQ/PermDock # the permdock, permdock-wire, permdock-audit and topic skills
|
|
322
|
-
permdock skills # the same skills, offline, from node_modules/permdock/skills
|
|
324
|
+
permdock skills install # the same skills, offline, from node_modules/permdock/skills
|
|
323
325
|
```
|
|
324
326
|
|
|
325
|
-
Claude Code users can add the plugin marketplace instead: `/plugin marketplace add ScaleDockHQ/permdock`. Every docs page is served as Markdown, with `llms.txt`, `llms-full.txt` and a docs MCP server at `https://permdock.com/mcp`. Read [for AI agents](https://permdock.com/docs/for-ai-agents).
|
|
327
|
+
Claude Code users can add the plugin marketplace instead: `/plugin marketplace add ScaleDockHQ/permdock`. Every docs page is served as Markdown, with `llms.txt`, `llms-full.txt` and a docs MCP server at `https://permdock.com/docs/mcp`. Read [for AI agents](https://permdock.com/docs/for-ai-agents).
|
|
326
328
|
|
|
327
329
|
## License
|
|
328
330
|
|
|
@@ -1,10 +1,5 @@
|
|
|
1
|
-
import { r as isRecord } from "./compact-CAf557ZB.js";
|
|
2
|
-
import { t as packageRoot } from "./package-root-DtNnpmUd.js";
|
|
3
|
-
import { t as DRAFT_PINS } from "./pins-8ILTftC9.js";
|
|
4
|
-
import { readFileSync } from "node:fs";
|
|
5
|
-
import { join } from "node:path";
|
|
6
1
|
//#region \0rolldown/runtime.js
|
|
7
|
-
var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
|
|
2
|
+
var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod, mod.exports), cb = null), mod.exports);
|
|
8
3
|
//#endregion
|
|
9
4
|
//#region ../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/codegen/code.js
|
|
10
5
|
var require_code$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
@@ -6678,8 +6673,8 @@ var require_json_schema_2020_12 = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
6678
6673
|
exports.default = addMetaSchema2020;
|
|
6679
6674
|
}));
|
|
6680
6675
|
//#endregion
|
|
6681
|
-
//#region
|
|
6682
|
-
var
|
|
6676
|
+
//#region ../../node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/2020.js
|
|
6677
|
+
var require__2020 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
6683
6678
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6684
6679
|
exports.MissingRefError = exports.ValidationError = exports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = exports.Ajv2020 = void 0;
|
|
6685
6680
|
const core_1 = require_core$2();
|
|
@@ -6775,126 +6770,6 @@ var import__2020 = (/* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
6775
6770
|
return ref_error_1.default;
|
|
6776
6771
|
}
|
|
6777
6772
|
});
|
|
6778
|
-
}))
|
|
6779
|
-
function schemaDir() {
|
|
6780
|
-
return join(packageRoot(), "schemas", "openapi");
|
|
6781
|
-
}
|
|
6782
|
-
const validators = /* @__PURE__ */ new Map();
|
|
6783
|
-
/** Parses a bundled schema file; throws on anything but a JSON object. */
|
|
6784
|
-
function parseSchema(text, file) {
|
|
6785
|
-
const parsed = JSON.parse(text.replaceAll("\"$dynamicRef\": \"#meta\"", "\"$ref\": \"#/$defs/schema\""));
|
|
6786
|
-
if (!isRecord(parsed)) throw new TypeError(`PermDock CLI: ${file} is not a JSON Schema`);
|
|
6787
|
-
return parsed;
|
|
6788
|
-
}
|
|
6789
|
-
function schemaFile(file) {
|
|
6790
|
-
return parseSchema(readFileSync(join(schemaDir(), file), "utf8"), file);
|
|
6791
|
-
}
|
|
6792
|
-
function child(parent, ...path) {
|
|
6793
|
-
let node = parent;
|
|
6794
|
-
for (const key of path) {
|
|
6795
|
-
const next = node[key];
|
|
6796
|
-
if (!isRecord(next)) throw new TypeError(`PermDock CLI: OpenAPI schema has no ${path.join(".")}`);
|
|
6797
|
-
node = next;
|
|
6798
|
-
}
|
|
6799
|
-
return node;
|
|
6800
|
-
}
|
|
6801
|
-
const STRINGS = {
|
|
6802
|
-
type: "array",
|
|
6803
|
-
items: { type: "string" }
|
|
6804
|
-
};
|
|
6805
|
-
/**
|
|
6806
|
-
* No official 3.3 schema exists: the 3.2 schema plus the pinned draft's
|
|
6807
|
-
* Security Profiles (a `profile` scheme type and
|
|
6808
|
-
* `components.securityProfileRequirements`). Mutates and returns `schema`.
|
|
6809
|
-
*/
|
|
6810
|
-
function patchOas33(schema) {
|
|
6811
|
-
schema["$id"] = `https://permdock.com/schemas/openapi/oas-3.3/${DRAFT_PINS.oas}`;
|
|
6812
|
-
child(schema, "properties", "openapi")["pattern"] = String.raw`^3\.3\.\d+(-.+)?$`;
|
|
6813
|
-
const defs = child(schema, "$defs");
|
|
6814
|
-
const scheme = child(defs, "security-scheme");
|
|
6815
|
-
const type = child(scheme, "properties", "type");
|
|
6816
|
-
type["enum"] = [...Array.isArray(type["enum"]) ? type["enum"] : [], "profile"];
|
|
6817
|
-
scheme["allOf"] = [...Array.isArray(scheme["allOf"]) ? scheme["allOf"] : [], {
|
|
6818
|
-
if: { properties: { type: { const: "profile" } } },
|
|
6819
|
-
then: {
|
|
6820
|
-
properties: { profileMetadata: {
|
|
6821
|
-
type: "object",
|
|
6822
|
-
required: ["name"],
|
|
6823
|
-
properties: {
|
|
6824
|
-
name: { type: "string" },
|
|
6825
|
-
supportedParametersSchema: { type: ["string", "object"] },
|
|
6826
|
-
supportedOperations: {},
|
|
6827
|
-
servers: {
|
|
6828
|
-
type: "array",
|
|
6829
|
-
items: {
|
|
6830
|
-
type: "object",
|
|
6831
|
-
required: ["url"],
|
|
6832
|
-
properties: {
|
|
6833
|
-
name: { type: "string" },
|
|
6834
|
-
url: { type: "string" }
|
|
6835
|
-
}
|
|
6836
|
-
}
|
|
6837
|
-
}
|
|
6838
|
-
}
|
|
6839
|
-
} },
|
|
6840
|
-
required: ["profileMetadata"]
|
|
6841
|
-
}
|
|
6842
|
-
}];
|
|
6843
|
-
child(defs, "components", "properties")["securityProfileRequirements"] = {
|
|
6844
|
-
type: "object",
|
|
6845
|
-
additionalProperties: {
|
|
6846
|
-
type: "object",
|
|
6847
|
-
required: ["securityScheme", "scopes"],
|
|
6848
|
-
properties: {
|
|
6849
|
-
securityScheme: { $ref: "#/$defs/reference" },
|
|
6850
|
-
token_endpoint_auth_methods: STRINGS,
|
|
6851
|
-
grant_types: STRINGS,
|
|
6852
|
-
scopes: STRINGS
|
|
6853
|
-
}
|
|
6854
|
-
}
|
|
6855
|
-
};
|
|
6856
|
-
return schema;
|
|
6857
|
-
}
|
|
6858
|
-
function validatorFor(file) {
|
|
6859
|
-
const cached = validators.get(file);
|
|
6860
|
-
if (cached !== void 0) return cached;
|
|
6861
|
-
const compiled = new import__2020.Ajv2020({
|
|
6862
|
-
strict: false,
|
|
6863
|
-
allErrors: false,
|
|
6864
|
-
validateFormats: false
|
|
6865
|
-
}).compile(file === "oas-3.3.json" ? patchOas33(schemaFile("oas-3.2.json")) : schemaFile(file));
|
|
6866
|
-
validators.set(file, compiled);
|
|
6867
|
-
return compiled;
|
|
6868
|
-
}
|
|
6869
|
-
function describeErrors(errors) {
|
|
6870
|
-
return (errors ?? []).slice(0, 5).map((error) => ` ${error.instancePath || "/"} ${error.message ?? ""}`).join("\n");
|
|
6871
|
-
}
|
|
6872
|
-
/** Validates an OpenAPI 3.1 or 3.2 document against the official JSON Schema, and 3.3 against the pinned patch of 3.2. */
|
|
6873
|
-
function validateOpenapi(document) {
|
|
6874
|
-
const version = isRecord(document) ? document["openapi"] : void 0;
|
|
6875
|
-
const match = typeof version === "string" ? /^3\.([123])\.\d+$/u.exec(version) : null;
|
|
6876
|
-
if (match === null) return {
|
|
6877
|
-
ok: false,
|
|
6878
|
-
error: "expected an OpenAPI 3.1, 3.2 or 3.3 document"
|
|
6879
|
-
};
|
|
6880
|
-
const minor = match[1] === "1" ? "3.1" : match[1] === "2" ? "3.2" : "3.3";
|
|
6881
|
-
const validate = validatorFor(`oas-${minor}.json`);
|
|
6882
|
-
if (!validate(document)) return {
|
|
6883
|
-
ok: false,
|
|
6884
|
-
error: `document is not valid OpenAPI ${minor}:\n${describeErrors(validate.errors)}`
|
|
6885
|
-
};
|
|
6886
|
-
return {
|
|
6887
|
-
ok: true,
|
|
6888
|
-
version: minor
|
|
6889
|
-
};
|
|
6890
|
-
}
|
|
6891
|
-
/** Validates an Overlay 1.1 document against the official JSON Schema. */
|
|
6892
|
-
function validateOverlay(document) {
|
|
6893
|
-
const validate = validatorFor("overlay-1.1.json");
|
|
6894
|
-
return validate(document) ? { ok: true } : {
|
|
6895
|
-
ok: false,
|
|
6896
|
-
error: `document is not a valid Overlay 1.1:\n${describeErrors(validate.errors)}`
|
|
6897
|
-
};
|
|
6898
|
-
}
|
|
6773
|
+
}));
|
|
6899
6774
|
//#endregion
|
|
6900
|
-
export {
|
|
6775
|
+
export { require__2020 as t };
|
package/dist/a2a/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { a as ProblemDetails } from "../errors-
|
|
5
|
-
import { t as InstanceOptions } from "../instance-options-
|
|
1
|
+
import { T as Policy, Yn as AuthorizationDetail, rr as Principal } from "../policy-types-DzwivBgR.js";
|
|
2
|
+
import { w as Permission } from "../vocabulary-D6lPdb4Z.js";
|
|
3
|
+
import { m as ApprovalStore } from "../types-CCpc2Dcv.js";
|
|
4
|
+
import { a as ProblemDetails } from "../errors-C2PXIv4c.js";
|
|
5
|
+
import { t as InstanceOptions } from "../instance-options-Omfd793B.js";
|
|
6
6
|
//#region src/a2a/types.d.ts
|
|
7
7
|
type A2aAuth = {
|
|
8
8
|
readonly clientId?: string;
|
|
@@ -166,6 +166,6 @@ type A2aPermDock = {
|
|
|
166
166
|
};
|
|
167
167
|
//#endregion
|
|
168
168
|
//#region src/a2a/create.d.ts
|
|
169
|
-
export declare function createPermDock<TUser, TPrincipal extends Principal = Principal>(policy: Policy<TUser, TPrincipal>,
|
|
169
|
+
export declare function createPermDock<TUser, TPrincipal extends Principal = Principal>(policy: Policy<TUser, TPrincipal>, given: A2aPermDockOptions<TUser>): A2aPermDock;
|
|
170
170
|
//#endregion
|
|
171
171
|
export type { A2aAgentCard, A2aAgentCardSignature, A2aAuth, A2aCardInfo, A2aPermDock, A2aPermDockOptions, A2aSecurityRequirement, A2aSecurityScheme, A2aSkill, A2aSkillConfig, A2aTaskOutcome, A2aWireSecurityScheme };
|
package/dist/a2a/index.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
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
|
|
5
|
-
import { t as
|
|
6
|
-
import {
|
|
3
|
+
import { o as statusProblem } from "../problem-details-cn5X30gZ.js";
|
|
4
|
+
import { n as PermDockDeniedError, t as PermDockApprovalRequiredError } from "../errors-BKy0EfhN.js";
|
|
5
|
+
import { t as canonicalJson } from "../canonical-json-BC8_nMTw.js";
|
|
6
|
+
import { t as bytesToBase64Url } from "../sha256-D9ihqmvd.js";
|
|
7
7
|
import { n as resourceRef } from "../resource-ref-CaS9yVPi.js";
|
|
8
|
-
import {
|
|
9
|
-
import { f as wwwAuthenticate, r as bearerChallenge } from "../problem-
|
|
10
|
-
import { r as instanceOptions } from "../build-instance-
|
|
11
|
-
import { n as createAgentKernel } from "../kernel-
|
|
8
|
+
import { a as hasScope, c as withApp, i as challengeScope, o as scopesReaching } from "../permdock-B9JxkBwC.js";
|
|
9
|
+
import { f as wwwAuthenticate, r as bearerChallenge } from "../problem-CTviyH5L.js";
|
|
10
|
+
import { r as instanceOptions } from "../build-instance-BMnAudHn.js";
|
|
11
|
+
import { n as createAgentKernel } from "../kernel-5JatXyND.js";
|
|
12
12
|
import { t as delegationFrom } from "../delegation-input-FTxMK3ji.js";
|
|
13
13
|
//#region src/a2a/create.ts
|
|
14
14
|
function firstScheme(options) {
|
|
@@ -146,23 +146,20 @@ async function signCard(card, signPayload) {
|
|
|
146
146
|
function missingScope(permission, scope) {
|
|
147
147
|
return {
|
|
148
148
|
ok: false,
|
|
149
|
-
status:
|
|
149
|
+
status: 403,
|
|
150
150
|
state: "failed",
|
|
151
|
-
problem: {
|
|
152
|
-
type: "https://permdock.com/problems/unauthenticated",
|
|
153
|
-
title: "Insufficient scope",
|
|
154
|
-
status: 401,
|
|
155
|
-
detail: `insufficient_scope: ${scope}`,
|
|
151
|
+
problem: statusProblem(403, `insufficient_scope: ${scope}`, {
|
|
156
152
|
permission: permission.key,
|
|
157
153
|
scope
|
|
158
|
-
},
|
|
154
|
+
}),
|
|
159
155
|
wwwAuthenticate: bearerChallenge({
|
|
160
156
|
error: "insufficient_scope",
|
|
161
157
|
scopes: [scope]
|
|
162
158
|
})
|
|
163
159
|
};
|
|
164
160
|
}
|
|
165
|
-
function createPermDock(policy,
|
|
161
|
+
function createPermDock(policy, given) {
|
|
162
|
+
const options = withApp(policy, given);
|
|
166
163
|
for (const [id, config] of Object.entries(options.skills)) if (config.permission.kind === "instance" && config.data === void 0) throw new TypeError(`PermDock: A2A skill '${id}' checks ${config.permission.key} on a row and needs a data loader; the task body is never used as the row`);
|
|
167
164
|
const kernel = createAgentKernel(policy, compact({
|
|
168
165
|
subject: options.subject,
|
|
@@ -183,7 +180,7 @@ function createPermDock(policy, options) {
|
|
|
183
180
|
}
|
|
184
181
|
const scheme = firstScheme(options);
|
|
185
182
|
const skills = [];
|
|
186
|
-
for (const [id, config] of Object.entries(options.skills)) if (mayUse(
|
|
183
|
+
for (const [id, config] of Object.entries(options.skills)) if (permdock.mayUse(config.permission)) skills.push(skillOf(id, config, scheme));
|
|
187
184
|
return cardOf(options, skills);
|
|
188
185
|
};
|
|
189
186
|
const protectSkill = (selector) => async (task, auth) => {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as isActor } from "./subject-
|
|
1
|
+
import { n as isActor } from "./subject-BGoM5o8B.js";
|
|
2
2
|
//#region src/core/adapter-context.ts
|
|
3
3
|
/** Resolves an adapter `tenant` option against its framework context; a throw is no tenant. */
|
|
4
4
|
async function tenantScope(option, context) {
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { r as listSourceFiles } from "./files-D_JIzUrP.js";
|
|
2
|
+
import { t as DOCS_BASE } from "./manifest-CtKR3GXL.js";
|
|
3
|
+
import { readFileSync } from "node:fs";
|
|
4
|
+
import { relative } from "node:path";
|
|
5
|
+
//#region src/cli/adoption-scan.ts
|
|
6
|
+
/** Authorization checks written before PermDock, by the shape they usually take. */
|
|
7
|
+
const LEGACY_PATTERNS = [
|
|
8
|
+
{
|
|
9
|
+
name: "role comparison",
|
|
10
|
+
pattern: /\brole\s*[!=]==?\s*['"`]/u
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
name: "roles.includes",
|
|
14
|
+
pattern: /\broles?\.(?:includes|some|has)\(/u
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
name: "isAdmin flag",
|
|
18
|
+
pattern: /\bis(?:Admin|Owner|SuperUser|Staff)\b/u
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
name: "hasRole / hasPermission",
|
|
22
|
+
pattern: /\b(?:has|check|require)(?:Role|Permission|Access)s?\(/u
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
name: "CASL ability",
|
|
26
|
+
pattern: /\bability\.(?:can|cannot)\(/u
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
name: "Clerk has()",
|
|
30
|
+
pattern: /\bhas\(\s*\{\s*(?:role|permission)\s*:/u
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: "JWT role claim",
|
|
34
|
+
pattern: /\[['"](?:role|roles|user_role)['"]\]/u
|
|
35
|
+
}
|
|
36
|
+
];
|
|
37
|
+
/**
|
|
38
|
+
* Lines that look like an authorization check written without PermDock:
|
|
39
|
+
* the work left before a permission can be enforced. It reads source text
|
|
40
|
+
* only and runs nothing; a finding is a place to look, not a verdict.
|
|
41
|
+
*/
|
|
42
|
+
function scanLegacy(options) {
|
|
43
|
+
const custom = (options.patterns ?? []).map((source) => ({
|
|
44
|
+
name: "custom",
|
|
45
|
+
pattern: new RegExp(source, "u")
|
|
46
|
+
}));
|
|
47
|
+
const patterns = [...LEGACY_PATTERNS, ...custom];
|
|
48
|
+
const findings = [];
|
|
49
|
+
for (const file of listSourceFiles(options.cwd, options.srcPath)) {
|
|
50
|
+
const lines = readFileSync(file, "utf8").split("\n");
|
|
51
|
+
for (const [index, line] of lines.entries()) {
|
|
52
|
+
if (/permdock/iu.test(line)) continue;
|
|
53
|
+
const hit = patterns.find((item) => item.pattern.test(line));
|
|
54
|
+
if (hit !== void 0) findings.push({
|
|
55
|
+
file: relative(options.cwd, file),
|
|
56
|
+
line: index + 1,
|
|
57
|
+
kind: hit.name,
|
|
58
|
+
text: line.trim().slice(0, 160)
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return findings;
|
|
63
|
+
}
|
|
64
|
+
function runAdoptionScan(options) {
|
|
65
|
+
let findings;
|
|
66
|
+
try {
|
|
67
|
+
findings = scanLegacy(options);
|
|
68
|
+
} catch (error) {
|
|
69
|
+
return {
|
|
70
|
+
code: 2,
|
|
71
|
+
output: `permdock scan: ${error instanceof Error ? error.message : String(error)}\n`
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
const located = findings.map((finding) => ({
|
|
75
|
+
code: "legacy-check",
|
|
76
|
+
severity: "info",
|
|
77
|
+
message: `${finding.kind}: ${finding.text}`,
|
|
78
|
+
file: finding.file,
|
|
79
|
+
line: finding.line,
|
|
80
|
+
docs: `${DOCS_BASE}/scan`
|
|
81
|
+
}));
|
|
82
|
+
if (options.json === true) return {
|
|
83
|
+
code: 0,
|
|
84
|
+
output: `${JSON.stringify(findings, null, 2)}\n`,
|
|
85
|
+
findings: located
|
|
86
|
+
};
|
|
87
|
+
if (findings.length === 0) return {
|
|
88
|
+
code: 0,
|
|
89
|
+
output: "No legacy authorization checks found.\n",
|
|
90
|
+
findings: []
|
|
91
|
+
};
|
|
92
|
+
const byKind = /* @__PURE__ */ new Map();
|
|
93
|
+
for (const finding of findings) byKind.set(finding.kind, (byKind.get(finding.kind) ?? 0) + 1);
|
|
94
|
+
return {
|
|
95
|
+
code: 0,
|
|
96
|
+
output: `${[
|
|
97
|
+
...findings.map((finding) => `${finding.file}:${finding.line} ${finding.kind} ${finding.text}`),
|
|
98
|
+
"",
|
|
99
|
+
`${findings.length} checks to move to PermDock: ${[...byKind].map(([kind, count]) => `${count} ${kind}`).join(", ")}.`,
|
|
100
|
+
"Run them beside PermDock with shadowMode before enforcing (https://permdock.com/docs/getting-started/existing-apps).",
|
|
101
|
+
...byKind.has("CASL ability") ? ["CASL rules import as roles: permdock casl import --rules <file> --out <file> (https://permdock.com/docs/cli/casl)."] : []
|
|
102
|
+
].join("\n")}\n`,
|
|
103
|
+
findings: located
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
//#endregion
|
|
107
|
+
export { runAdoptionScan };
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { n as DeniedTextEvent, t as DeniedText } from "../denied-text-D8jDHgsl.js";
|
|
2
|
+
import { a as createPermDock, c as ModelMap, i as OperationVerdict, l as ToolBinding, n as AgentPermDockOptions, o as AgentAdapterOptions, r as GatewayOptions, s as DecideToolOptions, t as AgentPermDock, u as ToolMap } from "../create-BDS7wc3y.js";
|
|
3
|
+
export { type AgentAdapterOptions, type AgentPermDock, type AgentPermDockOptions, type DecideToolOptions, type DeniedText, type DeniedTextEvent, type GatewayOptions, type ModelMap, type OperationVerdict, type ToolBinding, type ToolMap, createPermDock };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { n as createPermDock } from "../create-C3b4B5eF.js";
|
package/dist/ai-sdk/index.d.ts
CHANGED
|
@@ -1,40 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { t as
|
|
5
|
-
import { n as OnDeniedText, t as DeniedTextEvent } from "../denied-text-DfRk15uw.js";
|
|
6
|
-
import { t as RequestContext } from "../request-context-C2_1lchh.js";
|
|
7
|
-
import { t as ToolMap } from "../types-DvupZE0w.js";
|
|
8
|
-
import { n as PermDockWrap } from "../wrap-Cr93qqdP.js";
|
|
1
|
+
import { T as Policy, j as PolicyVocabulary, rr as Principal } from "../policy-types-DzwivBgR.js";
|
|
2
|
+
import { w as Permission } from "../vocabulary-D6lPdb4Z.js";
|
|
3
|
+
import { n as DeniedTextEvent, t as DeniedText } from "../denied-text-D8jDHgsl.js";
|
|
4
|
+
import { o as AgentAdapterOptions, t as AgentPermDock } from "../create-BDS7wc3y.js";
|
|
9
5
|
//#region src/ai-sdk/create.d.ts
|
|
10
6
|
type AiSdkContext = {
|
|
11
7
|
readonly runtimeContext?: unknown;
|
|
12
8
|
readonly permdockApproval?: string;
|
|
13
9
|
readonly [key: string]: unknown;
|
|
14
10
|
};
|
|
15
|
-
type AiSdkPermDockOptions<TUser = unknown> =
|
|
16
|
-
readonly subject: (context: AiSdkContext) => TUser | Promise<TUser>;
|
|
17
|
-
readonly actor?: (context: AiSdkContext) => unknown;
|
|
18
|
-
readonly delegation?: (context: AiSdkContext) => Delegation | undefined | Promise<Delegation | undefined>;
|
|
19
|
-
readonly tenant?: string | ((context: AiSdkContext) => string | undefined | Promise<string | undefined>);
|
|
20
|
-
readonly tools: ToolMap;
|
|
21
|
-
readonly store?: ApprovalStore;
|
|
22
|
-
/**
|
|
23
|
-
* Tools the `tools` map does not bind to a permission. `'deny'` (default):
|
|
24
|
-
* the middleware hides them and `toolApproval` denies them. `'allow'`: they
|
|
25
|
-
* pass through both, to the application's own `toolApproval`.
|
|
26
|
-
*/
|
|
27
|
-
readonly unmapped?: "deny" | "allow";
|
|
28
|
-
/**
|
|
29
|
-
* Request values merged into `subject.context`, under `policy.context`.
|
|
30
|
-
* Only values the server derived belong here, never model output.
|
|
31
|
-
*/
|
|
32
|
-
readonly context?: (context: AiSdkContext) => RequestContext | undefined | Promise<RequestContext | undefined>;
|
|
33
|
-
/** Wraps each instance; build it with `wrapPermDock` to cover derived instances. */
|
|
34
|
-
readonly wrap?: PermDockWrap;
|
|
35
|
-
/** Replaces the denial reason or approval summary text; nothing else. */
|
|
36
|
-
readonly onDenied?: OnDeniedText;
|
|
37
|
-
};
|
|
11
|
+
type AiSdkPermDockOptions<TUser = unknown> = AgentAdapterOptions<AiSdkContext, TUser>;
|
|
38
12
|
/** What an AI SDK tool approval function may return; `undefined` is `not-applicable`. */
|
|
39
13
|
type ToolApprovalResult = ToolApprovalStatus | undefined | "not-applicable" | "denied" | "user-approval" | {
|
|
40
14
|
readonly type: "not-applicable";
|
|
@@ -80,14 +54,19 @@ type CallParams = {
|
|
|
80
54
|
}[];
|
|
81
55
|
readonly toolChoice?: unknown;
|
|
82
56
|
};
|
|
57
|
+
/** The part of `LanguageModelV4` the model gate reads. */
|
|
58
|
+
type CallModel = {
|
|
59
|
+
readonly modelId?: unknown;
|
|
60
|
+
};
|
|
83
61
|
/** Structural `LanguageModelMiddleware` (specification `v4`) from `ai`. */
|
|
84
62
|
type LanguageModelMiddleware = {
|
|
85
63
|
readonly specificationVersion: "v4";
|
|
86
64
|
readonly transformParams: <TParams extends CallParams>(options: {
|
|
87
65
|
readonly params: TParams;
|
|
66
|
+
readonly model?: CallModel;
|
|
88
67
|
}) => Promise<TParams>;
|
|
89
68
|
};
|
|
90
|
-
type AiSdkPermDock = {
|
|
69
|
+
type AiSdkPermDock<V extends PolicyVocabulary = PolicyVocabulary> = AgentPermDock<AiSdkContext, V> & {
|
|
91
70
|
readonly toolApproval: (call: ToolApprovalCall) => Promise<ToolApprovalStatus>;
|
|
92
71
|
/**
|
|
93
72
|
* PermDock's `toolApproval` followed by the application's own: `app` is
|
|
@@ -98,10 +77,14 @@ type AiSdkPermDock = {
|
|
|
98
77
|
* come first.
|
|
99
78
|
*/
|
|
100
79
|
readonly composeToolApproval: (app: AppToolApproval) => (call: ToolApprovalCall) => Promise<ToolApprovalResult>;
|
|
101
|
-
/**
|
|
80
|
+
/**
|
|
81
|
+
* Hides tools the subject in `context` can never use, before the model
|
|
82
|
+
* sees them. With `models`, a call to a model the subject is not granted
|
|
83
|
+
* throws `PermDockDeniedError` before the provider is called.
|
|
84
|
+
*/
|
|
102
85
|
readonly capabilityMiddleware: (context: AiSdkContext) => LanguageModelMiddleware;
|
|
103
86
|
readonly needsApproval: (permission: Permission) => (input: unknown, options?: NeedsApprovalOptions) => Promise<boolean>;
|
|
104
87
|
};
|
|
105
|
-
export declare function createPermDock<TUser, TPrincipal extends Principal = Principal>(policy: Policy<TUser, TPrincipal>,
|
|
88
|
+
export declare function createPermDock<TUser, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, given: AiSdkPermDockOptions<TUser>): AiSdkPermDock<V>;
|
|
106
89
|
//#endregion
|
|
107
|
-
export type { AiSdkContext, AiSdkPermDock, AiSdkPermDockOptions, AppToolApproval, DeniedTextEvent, LanguageModelMiddleware, NeedsApprovalOptions,
|
|
90
|
+
export type { AiSdkContext, AiSdkPermDock, AiSdkPermDockOptions, AppToolApproval, DeniedText, DeniedTextEvent, LanguageModelMiddleware, NeedsApprovalOptions, ToolApprovalCall, ToolApprovalResult, ToolApprovalStatus };
|