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
|
@@ -0,0 +1,403 @@
|
|
|
1
|
+
import { r as isRecord, t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
+
import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
|
|
3
|
+
import { i as dateAt, p as nowSeconds } from "./time-DkWjdL98.js";
|
|
4
|
+
import { s as policyDocumentFromClaims } from "./hosted-BZIAYvon.js";
|
|
5
|
+
import { l as isApprovalErrorCode, s as ApprovalError, t as APPROVAL_HEADER } from "./types-DqzsnlSA.js";
|
|
6
|
+
import { h as toCloudEvent, l as isAbsoluteUri } from "./sink-BEZSlMS_.js";
|
|
7
|
+
import { n as parseCatalogEventData, t as catalogFingerprint } from "./catalog-fingerprint-CCP0-yQS.js";
|
|
8
|
+
import { t as parseApprovalRequest } from "./parse-request-D_tUXG6M.js";
|
|
9
|
+
import { t as timeoutSignal } from "./timeout-D51niuQP.js";
|
|
10
|
+
//#region src/cloud/approver.ts
|
|
11
|
+
const APPROVER_HEADER = "PermDock-Approver";
|
|
12
|
+
/** The RFC 9396 `authorization_details` type that binds an approver token to one verdict. */
|
|
13
|
+
const APPROVAL_DETAIL_TYPE = "permdock_approval";
|
|
14
|
+
/** Seconds an approver token lives: it proves one resolve call, and the Cloud refuses a replayed `jti`. */
|
|
15
|
+
const APPROVER_TTL = 60;
|
|
16
|
+
async function facts(read, request, verdict, fallback) {
|
|
17
|
+
if (read === void 0) return fallback ?? [];
|
|
18
|
+
try {
|
|
19
|
+
return (await read(request, verdict.by)).filter((item) => typeof item === "string");
|
|
20
|
+
} catch {
|
|
21
|
+
return [];
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function unauthenticated(detail) {
|
|
25
|
+
return new ApprovalError("approver-unauthenticated", detail);
|
|
26
|
+
}
|
|
27
|
+
/** A rejection only denies, so the Cloud takes a `system` one without an approver token. */
|
|
28
|
+
function isSystemRejection(verdict) {
|
|
29
|
+
return verdict.status === "rejected" && verdict.by.actor?.kind === "system";
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* The `PermDock-Approver` header for `verdict`: an RFC 9068 `at+jwt` whose
|
|
33
|
+
* `sub` is the approver, signed by `options.signer` for `<issuer>/approvals`,
|
|
34
|
+
* with a fresh `jti` and one `permdock_approval` authorization detail naming
|
|
35
|
+
* the request id, the verdict status, `vouched`, and the approver's
|
|
36
|
+
* `permissions` and `relations`. With the `roles`, `memberships` and `tenant`
|
|
37
|
+
* claims they are the only facts the Cloud checks a request's `approvers`
|
|
38
|
+
* against in bring-your-own mode. `target` runs only after the
|
|
39
|
+
* approver checks pass. Throws an `ApprovalError` before any resolve when the
|
|
40
|
+
* approver cannot be proven: no signer, no principal, an actor, a failed
|
|
41
|
+
* lookup or a signer failure.
|
|
42
|
+
*/
|
|
43
|
+
async function approverHeaders(verdict, options, issuer, target) {
|
|
44
|
+
if (isSystemRejection(verdict)) return {};
|
|
45
|
+
if (verdict.by.actor !== void 0) throw new ApprovalError("approver-not-eligible", "PermDock Cloud: a person approves; a verdict with an actor has no approver token");
|
|
46
|
+
const principal = verdict.by.principal;
|
|
47
|
+
if (principal === null || principal.id === "") throw unauthenticated("PermDock Cloud: the approver has no principal id");
|
|
48
|
+
if (options === void 0) throw unauthenticated("PermDock Cloud: cloud() needs approver.signer to prove who resolves an approval");
|
|
49
|
+
const { request, etag } = await target();
|
|
50
|
+
const permissions = await facts(options.permissions, request, verdict, verdict.permissions);
|
|
51
|
+
const relations = await facts(options.relations, request, verdict, verdict.relations);
|
|
52
|
+
const issuedAt = nowSeconds();
|
|
53
|
+
try {
|
|
54
|
+
const token = await options.signer.sign({
|
|
55
|
+
sub: principal.id,
|
|
56
|
+
roles: principal.roles,
|
|
57
|
+
...principal.memberships === void 0 ? {} : { memberships: principal.memberships },
|
|
58
|
+
...principal.tenant === void 0 ? {} : { tenant: principal.tenant },
|
|
59
|
+
authorization_details: [{
|
|
60
|
+
type: APPROVAL_DETAIL_TYPE,
|
|
61
|
+
id: request.id,
|
|
62
|
+
status: verdict.status,
|
|
63
|
+
permissions,
|
|
64
|
+
relations,
|
|
65
|
+
...etag === void 0 ? {} : { etag },
|
|
66
|
+
...verdict.vouched === void 0 ? {} : { vouched: verdict.vouched }
|
|
67
|
+
}]
|
|
68
|
+
}, {
|
|
69
|
+
typ: "at+jwt",
|
|
70
|
+
audience: options.audience ?? `${issuer}/approvals`,
|
|
71
|
+
issuedAt,
|
|
72
|
+
expiresAt: issuedAt + APPROVER_TTL,
|
|
73
|
+
jti: globalThis.crypto.randomUUID()
|
|
74
|
+
});
|
|
75
|
+
return { [APPROVER_HEADER]: token };
|
|
76
|
+
} catch {
|
|
77
|
+
throw unauthenticated("PermDock Cloud: the approver signer failed");
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//#endregion
|
|
81
|
+
//#region src/cloud/request.ts
|
|
82
|
+
/** Milliseconds a PermDock Cloud request may take; a slower one fails like an unreachable Cloud. */
|
|
83
|
+
const CLOUD_TIMEOUT_MS = 1e4;
|
|
84
|
+
function readEnv(name) {
|
|
85
|
+
const value = globalThis.process?.env?.[name];
|
|
86
|
+
return typeof value === "string" ? value : "";
|
|
87
|
+
}
|
|
88
|
+
function firstNonEmpty(...values) {
|
|
89
|
+
for (const value of values) if (value !== void 0 && value !== "") return value;
|
|
90
|
+
return "";
|
|
91
|
+
}
|
|
92
|
+
function trimSlash(value) {
|
|
93
|
+
return value.endsWith("/") ? value.slice(0, -1) : value;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* The environment URL and JWK Set URL `cloud()` uses, resolved with the same
|
|
97
|
+
* fallbacks (`PERMDOCK_CLOUD_URL`; `PERMDOCK_CLOUD_ENV`, `VERCEL_ENV`, `production`).
|
|
98
|
+
*/
|
|
99
|
+
function cloudEndpoints(options = {}) {
|
|
100
|
+
const url = trimSlash(firstNonEmpty(options.url, readEnv("PERMDOCK_CLOUD_URL")));
|
|
101
|
+
if (url === "") throw new Error("PermDock: cloud() requires url and key.");
|
|
102
|
+
const environment = firstNonEmpty(options.environment, readEnv("PERMDOCK_CLOUD_ENV"), readEnv("VERCEL_ENV"), "production");
|
|
103
|
+
const issuer = `${url}/v1/environments/${encodeURIComponent(environment)}`;
|
|
104
|
+
return Object.freeze({
|
|
105
|
+
issuer,
|
|
106
|
+
jwks: `${issuer}/.well-known/jwks.json`
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
/** The authenticated connection every `permdock/cloud` client shares. Throws without a URL or key. */
|
|
110
|
+
function cloudConnection(options) {
|
|
111
|
+
const key = firstNonEmpty(options.key, readEnv("PERMDOCK_CLOUD_KEY"));
|
|
112
|
+
if (key === "") throw new Error("PermDock: cloud() requires url and key.");
|
|
113
|
+
const endpoints = cloudEndpoints(options);
|
|
114
|
+
const fetchFn = options.fetch ?? globalThis.fetch.bind(globalThis);
|
|
115
|
+
const request = (path, init = {}, accept, contentType) => {
|
|
116
|
+
const headers = new Headers();
|
|
117
|
+
headers.set("authorization", `Bearer ${key}`);
|
|
118
|
+
headers.set("content-type", "application/json");
|
|
119
|
+
for (const [name, value] of new Headers(init.headers)) headers.set(name, value);
|
|
120
|
+
if (accept !== void 0) headers.set("accept", accept);
|
|
121
|
+
if (contentType !== void 0) headers.set("content-type", contentType);
|
|
122
|
+
return fetchFn(`${endpoints.issuer}${path}`, {
|
|
123
|
+
...init,
|
|
124
|
+
headers,
|
|
125
|
+
signal: timeoutSignal(CLOUD_TIMEOUT_MS, init.signal)
|
|
126
|
+
});
|
|
127
|
+
};
|
|
128
|
+
return Object.freeze({
|
|
129
|
+
...endpoints,
|
|
130
|
+
request
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
/** `true` for a compact JWS: three dot-separated parts, not JSON. */
|
|
134
|
+
function isCompactJws(value) {
|
|
135
|
+
return !value.startsWith("{") && value.split(".").length === 3;
|
|
136
|
+
}
|
|
137
|
+
//#endregion
|
|
138
|
+
//#region src/cloud/create.ts
|
|
139
|
+
/** Carries the `at+jwt` that names the subject of `GET /snapshot`. */
|
|
140
|
+
const SUBJECT_HEADER = "PermDock-Subject";
|
|
141
|
+
function catalogPushOf(value) {
|
|
142
|
+
if (!isRecord(value) || !Number.isSafeInteger(value["version"]) || typeof value["fingerprint"] !== "string") return null;
|
|
143
|
+
const version = Number(value["version"]);
|
|
144
|
+
const fingerprint = value["fingerprint"];
|
|
145
|
+
if (value["unchanged"] === true) return {
|
|
146
|
+
version,
|
|
147
|
+
fingerprint,
|
|
148
|
+
unchanged: true
|
|
149
|
+
};
|
|
150
|
+
const data = parseCatalogEventData({
|
|
151
|
+
kind: "drift",
|
|
152
|
+
fingerprint,
|
|
153
|
+
findings: value["findings"]
|
|
154
|
+
});
|
|
155
|
+
return data?.findings === void 0 ? null : {
|
|
156
|
+
version,
|
|
157
|
+
fingerprint,
|
|
158
|
+
findings: data.findings
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
function asApproval(value) {
|
|
162
|
+
if (!isRecord(value) || value["v"] !== 1 || typeof value["token"] !== "string") return null;
|
|
163
|
+
return value;
|
|
164
|
+
}
|
|
165
|
+
/** The refusal PermDock Cloud names in its body, else the one its status implies. */
|
|
166
|
+
async function approvalErrorFrom(response) {
|
|
167
|
+
let body;
|
|
168
|
+
try {
|
|
169
|
+
body = await response.json();
|
|
170
|
+
} catch {
|
|
171
|
+
return approvalErrorFromStatus(response.status);
|
|
172
|
+
}
|
|
173
|
+
if (body === null || typeof body !== "object" || !("code" in body)) return approvalErrorFromStatus(response.status);
|
|
174
|
+
const code = body.code;
|
|
175
|
+
if (!isApprovalErrorCode(code)) return approvalErrorFromStatus(response.status);
|
|
176
|
+
const detail = "detail" in body ? body.detail : void 0;
|
|
177
|
+
return new ApprovalError(code, typeof detail === "string" && detail.length > 0 ? detail : code);
|
|
178
|
+
}
|
|
179
|
+
function approvalErrorFromStatus(status) {
|
|
180
|
+
if (status === 409) return new ApprovalError("approval-not-pending", "approval is not pending");
|
|
181
|
+
if (status === 410) return new ApprovalError("approval-expired", "approval has expired");
|
|
182
|
+
return new ApprovalError("approval-not-found", "approval was not found");
|
|
183
|
+
}
|
|
184
|
+
function cloud(options = {}) {
|
|
185
|
+
const { issuer: root, jwks, request } = cloudConnection(options);
|
|
186
|
+
const flushAt = options.flushAt ?? 32;
|
|
187
|
+
const waitUntil = options.waitUntil;
|
|
188
|
+
const approvals = {
|
|
189
|
+
async create(record) {
|
|
190
|
+
if (!(await request("/approvals", {
|
|
191
|
+
method: "POST",
|
|
192
|
+
body: JSON.stringify(record)
|
|
193
|
+
})).ok) throw new Error("PermDock Cloud rejected the approval create");
|
|
194
|
+
},
|
|
195
|
+
async get(token) {
|
|
196
|
+
try {
|
|
197
|
+
const response = await request("/approvals/by-token", { headers: { [APPROVAL_HEADER]: token } });
|
|
198
|
+
if (!response.ok) return null;
|
|
199
|
+
return asApproval(await response.json());
|
|
200
|
+
} catch {
|
|
201
|
+
return null;
|
|
202
|
+
}
|
|
203
|
+
},
|
|
204
|
+
async getById(id) {
|
|
205
|
+
try {
|
|
206
|
+
const response = await request(`/approvals/${encodeURIComponent(id)}`);
|
|
207
|
+
if (!response.ok) return null;
|
|
208
|
+
return asApproval(await response.json());
|
|
209
|
+
} catch {
|
|
210
|
+
return null;
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
async resolve(token, verdict) {
|
|
214
|
+
const approver = await approverHeaders(verdict, options.approver, root, async () => {
|
|
215
|
+
const response = await request("/approvals/by-token", { headers: { [APPROVAL_HEADER]: token } });
|
|
216
|
+
if (!response.ok) throw await approvalErrorFrom(response);
|
|
217
|
+
const found = parseApprovalRequest(await response.json());
|
|
218
|
+
if (found === null) throw new ApprovalError("approval-not-found", "PermDock Cloud returned an unknown approval shape");
|
|
219
|
+
const etag = response.headers.get("etag");
|
|
220
|
+
return etag === null ? { request: found } : {
|
|
221
|
+
request: found,
|
|
222
|
+
etag
|
|
223
|
+
};
|
|
224
|
+
});
|
|
225
|
+
const response = await request("/approvals/by-token/resolve", {
|
|
226
|
+
method: "POST",
|
|
227
|
+
headers: {
|
|
228
|
+
[APPROVAL_HEADER]: token,
|
|
229
|
+
...approver
|
|
230
|
+
},
|
|
231
|
+
body: JSON.stringify(verdict)
|
|
232
|
+
});
|
|
233
|
+
if (!response.ok) throw await approvalErrorFrom(response);
|
|
234
|
+
const parsed = asApproval(await response.json());
|
|
235
|
+
if (parsed === null) throw new ApprovalError("approval-not-found", "PermDock Cloud returned an unknown approval shape");
|
|
236
|
+
return parsed;
|
|
237
|
+
},
|
|
238
|
+
async consume(token, now) {
|
|
239
|
+
try {
|
|
240
|
+
const response = await request("/approvals/by-token/consume", {
|
|
241
|
+
method: "POST",
|
|
242
|
+
headers: { [APPROVAL_HEADER]: token },
|
|
243
|
+
body: JSON.stringify(compact({ now: now === void 0 ? void 0 : dateAt(now).toISOString() }))
|
|
244
|
+
});
|
|
245
|
+
if (!response.ok) return null;
|
|
246
|
+
return asApproval(await response.json());
|
|
247
|
+
} catch {
|
|
248
|
+
return null;
|
|
249
|
+
}
|
|
250
|
+
},
|
|
251
|
+
async list(query) {
|
|
252
|
+
const params = new URLSearchParams(compact({
|
|
253
|
+
status: query.status,
|
|
254
|
+
principalId: query.principalId,
|
|
255
|
+
actorId: query.actorId,
|
|
256
|
+
tenant: query.tenant,
|
|
257
|
+
session: query.session,
|
|
258
|
+
limit: query.limit === void 0 ? void 0 : String(query.limit),
|
|
259
|
+
cursor: query.cursor
|
|
260
|
+
}));
|
|
261
|
+
const suffix = params.size === 0 ? "" : `?${params.toString()}`;
|
|
262
|
+
try {
|
|
263
|
+
const response = await request(`/approvals${suffix}`);
|
|
264
|
+
if (!response.ok) return { items: [] };
|
|
265
|
+
const body = await response.json();
|
|
266
|
+
if (!isRecord(body) || !Array.isArray(body["items"])) return { items: [] };
|
|
267
|
+
const items = body["items"].flatMap((item) => {
|
|
268
|
+
const parsed = asApproval(item);
|
|
269
|
+
return parsed === null ? [] : [parsed];
|
|
270
|
+
});
|
|
271
|
+
return typeof body["next"] === "string" && body["next"] !== "" ? {
|
|
272
|
+
items,
|
|
273
|
+
next: body["next"]
|
|
274
|
+
} : { items };
|
|
275
|
+
} catch {
|
|
276
|
+
return { items: [] };
|
|
277
|
+
}
|
|
278
|
+
},
|
|
279
|
+
async cancel(filter, meta) {
|
|
280
|
+
const response = await request("/approvals/cancel", {
|
|
281
|
+
method: "POST",
|
|
282
|
+
body: JSON.stringify(compact({
|
|
283
|
+
filter,
|
|
284
|
+
by: meta.by,
|
|
285
|
+
note: meta.note
|
|
286
|
+
}))
|
|
287
|
+
});
|
|
288
|
+
if (!response.ok) throw new Error("PermDock Cloud rejected the approval cancel");
|
|
289
|
+
const body = await response.json();
|
|
290
|
+
if (!isRecord(body) || typeof body["cancelled"] !== "number") throw new Error("PermDock Cloud returned an unknown cancel shape");
|
|
291
|
+
return body["cancelled"];
|
|
292
|
+
},
|
|
293
|
+
async expire(now) {
|
|
294
|
+
try {
|
|
295
|
+
const response = await request("/approvals/expire", {
|
|
296
|
+
method: "POST",
|
|
297
|
+
body: JSON.stringify(compact({ now: now === void 0 ? void 0 : dateAt(now).toISOString() }))
|
|
298
|
+
});
|
|
299
|
+
if (!response.ok) return 0;
|
|
300
|
+
const body = await response.json();
|
|
301
|
+
if (!isRecord(body) || typeof body["expired"] !== "number") return 0;
|
|
302
|
+
return body["expired"];
|
|
303
|
+
} catch {
|
|
304
|
+
return 0;
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
};
|
|
308
|
+
const capacity = options.capacity ?? 1e4;
|
|
309
|
+
const source = options.source ?? root;
|
|
310
|
+
if (!isAbsoluteUri(source)) throw new TypeError("PermDock: cloud() source is an absolute URI");
|
|
311
|
+
const pending = [];
|
|
312
|
+
const bound = () => {
|
|
313
|
+
if (pending.length > capacity) pending.splice(0, pending.length - capacity);
|
|
314
|
+
};
|
|
315
|
+
const flush = async () => {
|
|
316
|
+
if (pending.length === 0) return;
|
|
317
|
+
const events = pending.splice(0);
|
|
318
|
+
try {
|
|
319
|
+
if (!(await request("/decisions", {
|
|
320
|
+
method: "POST",
|
|
321
|
+
body: JSON.stringify(events.map((event) => toCloudEvent(event, { source })))
|
|
322
|
+
}, void 0, "application/cloudevents-batch+json")).ok) pending.unshift(...events);
|
|
323
|
+
} catch {
|
|
324
|
+
pending.unshift(...events);
|
|
325
|
+
}
|
|
326
|
+
bound();
|
|
327
|
+
};
|
|
328
|
+
const sink = {
|
|
329
|
+
write(events) {
|
|
330
|
+
pending.push(...events);
|
|
331
|
+
bound();
|
|
332
|
+
if (pending.length >= flushAt) return flush();
|
|
333
|
+
if (waitUntil !== void 0 && pending.length > 0) waitUntil(flush());
|
|
334
|
+
},
|
|
335
|
+
flush
|
|
336
|
+
};
|
|
337
|
+
const snapshotsFor = (subject) => ({ async get() {
|
|
338
|
+
const response = await request("/snapshot", { headers: { [SUBJECT_HEADER]: subject } }, "application/jwt");
|
|
339
|
+
if (!response.ok) throw new Error("PermDock Cloud snapshot request failed");
|
|
340
|
+
const text = (await response.text()).trim();
|
|
341
|
+
if (!isCompactJws(text)) throw new Error("PermDock Cloud served an unsigned snapshot");
|
|
342
|
+
return text;
|
|
343
|
+
} });
|
|
344
|
+
let document = null;
|
|
345
|
+
return freezeDeep({
|
|
346
|
+
approvals,
|
|
347
|
+
sink,
|
|
348
|
+
snapshotsFor,
|
|
349
|
+
policies: {
|
|
350
|
+
current() {
|
|
351
|
+
return document;
|
|
352
|
+
},
|
|
353
|
+
async refresh() {
|
|
354
|
+
const verifier = options.verifier;
|
|
355
|
+
if (verifier === void 0) return;
|
|
356
|
+
let response;
|
|
357
|
+
try {
|
|
358
|
+
response = await request("/policy");
|
|
359
|
+
} catch {
|
|
360
|
+
return;
|
|
361
|
+
}
|
|
362
|
+
if (response.status === 404) {
|
|
363
|
+
document = null;
|
|
364
|
+
return;
|
|
365
|
+
}
|
|
366
|
+
if (!response.ok) return;
|
|
367
|
+
const token = (await response.text()).trim();
|
|
368
|
+
if (!isCompactJws(token)) return;
|
|
369
|
+
const verified = await verifier.verify(token, {
|
|
370
|
+
typ: "vnd.permdock.policy+jwt",
|
|
371
|
+
issuer: root,
|
|
372
|
+
audience: root
|
|
373
|
+
});
|
|
374
|
+
if (!verified.ok) return;
|
|
375
|
+
let next;
|
|
376
|
+
try {
|
|
377
|
+
next = policyDocumentFromClaims(verified.claims);
|
|
378
|
+
} catch {
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
document = next;
|
|
382
|
+
}
|
|
383
|
+
},
|
|
384
|
+
catalog: { async push(value) {
|
|
385
|
+
const fingerprint = catalogFingerprint(value);
|
|
386
|
+
const response = await request("/catalog", {
|
|
387
|
+
method: "POST",
|
|
388
|
+
body: JSON.stringify({
|
|
389
|
+
fingerprint,
|
|
390
|
+
catalog: value
|
|
391
|
+
})
|
|
392
|
+
});
|
|
393
|
+
if (!response.ok) throw new Error(`PermDock Cloud rejected the catalog: HTTP ${String(response.status)}`);
|
|
394
|
+
const parsed = catalogPushOf(await response.json());
|
|
395
|
+
if (parsed === null) throw new Error("PermDock Cloud answered the catalog push in an unknown shape");
|
|
396
|
+
return parsed;
|
|
397
|
+
} },
|
|
398
|
+
issuer: root,
|
|
399
|
+
jwks
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
//#endregion
|
|
403
|
+
export { approverHeaders as a, isCompactJws as i, cloudConnection as n, cloudEndpoints as r, cloud as t };
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
+
import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
|
|
3
|
+
import { a as deniedFor } from "./where-scope-Dv-WTP-w.js";
|
|
4
|
+
import { c as withApp } from "./permdock-B9JxkBwC.js";
|
|
5
|
+
import { t as composeWraps } from "./wrap-gX61EtpB.js";
|
|
6
|
+
import { r as instanceOptions } from "./build-instance-BMnAudHn.js";
|
|
7
|
+
import { n as createAgentKernel } from "./kernel-5JatXyND.js";
|
|
8
|
+
//#region src/agent/create.ts
|
|
9
|
+
function modelRow(modelId) {
|
|
10
|
+
return { id: modelId };
|
|
11
|
+
}
|
|
12
|
+
function unlistedModel(modelId) {
|
|
13
|
+
return freezeDeep({
|
|
14
|
+
outcome: "denied",
|
|
15
|
+
denials: [{
|
|
16
|
+
role: null,
|
|
17
|
+
reason: "no-grant",
|
|
18
|
+
detail: { model: modelId }
|
|
19
|
+
}],
|
|
20
|
+
alternatives: []
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
function decideModelOn(permdock, models, modelId, adapter) {
|
|
24
|
+
const permission = models !== void 0 && Object.hasOwn(models, modelId) ? models[modelId] : void 0;
|
|
25
|
+
if (permission === void 0) return unlistedModel(modelId);
|
|
26
|
+
try {
|
|
27
|
+
return permdock.decide(permission, permission.kind === "instance" ? modelRow(modelId) : void 0, {
|
|
28
|
+
trusted: true,
|
|
29
|
+
adapter,
|
|
30
|
+
call: "adapter",
|
|
31
|
+
model: modelId
|
|
32
|
+
});
|
|
33
|
+
} catch {
|
|
34
|
+
return deniedFor(permission, "closure-error");
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/** Builds the agent contract and its kernel for an adapter named `adapter`. */
|
|
38
|
+
function agentRuntime(policy, options, adapter) {
|
|
39
|
+
const kernel = createAgentKernel(policy, {
|
|
40
|
+
...compact({
|
|
41
|
+
actor: options.actor,
|
|
42
|
+
delegation: options.delegation,
|
|
43
|
+
tenant: options.tenant,
|
|
44
|
+
store: options.store,
|
|
45
|
+
context: options.context,
|
|
46
|
+
wrap: composeWraps(options.otel, options.wrap),
|
|
47
|
+
deniedText: options.deniedText
|
|
48
|
+
}),
|
|
49
|
+
...instanceOptions(options),
|
|
50
|
+
subject: options.subject,
|
|
51
|
+
tools: options.operations,
|
|
52
|
+
adapter
|
|
53
|
+
});
|
|
54
|
+
const operations = options.operations;
|
|
55
|
+
const bindingOf = (name) => Object.hasOwn(operations, name) ? operations[name] : void 0;
|
|
56
|
+
const decideModel = async (modelId, context) => {
|
|
57
|
+
try {
|
|
58
|
+
return decideModelOn(await kernel.instance(context), options.models, modelId, adapter);
|
|
59
|
+
} catch {
|
|
60
|
+
return unlistedModel(modelId);
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
const permittedModels = async (context) => {
|
|
64
|
+
if (options.models === void 0) return [];
|
|
65
|
+
let permdock;
|
|
66
|
+
try {
|
|
67
|
+
permdock = await kernel.instance(context);
|
|
68
|
+
} catch {
|
|
69
|
+
return [];
|
|
70
|
+
}
|
|
71
|
+
return Object.keys(options.models).filter((modelId) => decideModelOn(permdock, options.models, modelId, adapter).outcome === "granted");
|
|
72
|
+
};
|
|
73
|
+
const filterResults = async (name, rows, context) => {
|
|
74
|
+
const binding = bindingOf(name);
|
|
75
|
+
if (binding === void 0) return [];
|
|
76
|
+
if (binding.results === void 0) return [...rows];
|
|
77
|
+
try {
|
|
78
|
+
const permdock = await kernel.instance(context);
|
|
79
|
+
const results = binding.results;
|
|
80
|
+
if (results.kind !== "instance") return permdock.can(results, void 0) ? [...rows] : [];
|
|
81
|
+
await permdock.prefetchRelations(results, rows);
|
|
82
|
+
return permdock.filter(results, rows, {
|
|
83
|
+
adapter,
|
|
84
|
+
call: "filter"
|
|
85
|
+
});
|
|
86
|
+
} catch {
|
|
87
|
+
return [];
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
const gatewayOptions = async (context) => {
|
|
91
|
+
let permdock;
|
|
92
|
+
try {
|
|
93
|
+
permdock = await kernel.instance(context);
|
|
94
|
+
} catch {
|
|
95
|
+
return { gateway: {} };
|
|
96
|
+
}
|
|
97
|
+
const { principal, actor } = permdock.subject;
|
|
98
|
+
const tags = [...principal?.tenant === void 0 ? [] : [`tenant:${principal.tenant}`], ...actor === void 0 ? [] : [`actor:${actor.kind}`]];
|
|
99
|
+
return { gateway: compact({
|
|
100
|
+
user: principal?.id,
|
|
101
|
+
tags: tags.length > 0 ? tags : void 0
|
|
102
|
+
}) };
|
|
103
|
+
};
|
|
104
|
+
return {
|
|
105
|
+
agent: Object.freeze({
|
|
106
|
+
getPermDock: (context) => kernel.instance(context),
|
|
107
|
+
decideOperation: (name, input, context, decideOptions) => kernel.decideTool(name, input, context, decideOptions),
|
|
108
|
+
allowedOperations: (context) => kernel.allowedToolNames(context),
|
|
109
|
+
tokenFor: (name, input, context) => {
|
|
110
|
+
const binding = bindingOf(name);
|
|
111
|
+
return binding === void 0 ? Promise.resolve(void 0) : kernel.tokenFor(binding, input, context);
|
|
112
|
+
},
|
|
113
|
+
decideModel,
|
|
114
|
+
permittedModels,
|
|
115
|
+
filterResults,
|
|
116
|
+
gatewayOptions
|
|
117
|
+
}),
|
|
118
|
+
kernel
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* The agent contract for a runtime PermDock has no adapter for: decide
|
|
123
|
+
* operations by name, gate models and filter results. The subject comes from
|
|
124
|
+
* `subject(context)` on the server, never from model output.
|
|
125
|
+
*/
|
|
126
|
+
function createPermDock(policy, given) {
|
|
127
|
+
return agentRuntime(policy, withApp(policy, given), "agent").agent;
|
|
128
|
+
}
|
|
129
|
+
//#endregion
|
|
130
|
+
export { createPermDock as n, agentRuntime as t };
|