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
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { t as compact } from "./compact-CAf557ZB.js";
|
|
2
2
|
import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
|
|
3
|
-
import { n as problemDetails } from "./problem-details-
|
|
4
|
-
import { c as listPermissions } from "./permission-registry-
|
|
5
|
-
import { r as challengeScope } from "./permdock-L26udHSk.js";
|
|
3
|
+
import { n as problemDetails } from "./problem-details-cn5X30gZ.js";
|
|
4
|
+
import { c as listPermissions } from "./permission-registry-Br4jSNVi.js";
|
|
6
5
|
import { n as resourceRef } from "./resource-ref-CaS9yVPi.js";
|
|
6
|
+
import { c as withApp, i as challengeScope } from "./permdock-B9JxkBwC.js";
|
|
7
7
|
import { r as hasCredentials } from "./http-BBoKefeS.js";
|
|
8
|
-
import { i as decisionResponse, o as notFoundProblem, s as problemFromDecision, t as ANONYMOUS, u as unauthenticatedProblem } from "./problem-
|
|
9
|
-
import { n as resolveOrNull } from "./build-instance-
|
|
10
|
-
import { n as
|
|
11
|
-
import { n as tenantScope, t as actorFrom } from "./adapter-context-
|
|
12
|
-
import { n as requestContext, t as buildReportingInstance } from "./request-context-
|
|
8
|
+
import { i as decisionResponse, o as notFoundProblem, s as problemFromDecision, t as ANONYMOUS, u as unauthenticatedProblem } from "./problem-CTviyH5L.js";
|
|
9
|
+
import { n as resolveOrNull } from "./build-instance-BMnAudHn.js";
|
|
10
|
+
import { n as applyApprovalResume, o as evaluationsHandler, u as InvalidSignatureError } from "./evaluations-DZ2CbV5k.js";
|
|
11
|
+
import { n as tenantScope, t as actorFrom } from "./adapter-context-CRhqyzCk.js";
|
|
12
|
+
import { n as requestContext, t as buildReportingInstance } from "./request-context-BTRTG7OT.js";
|
|
13
13
|
//#region src/server/kernel-problems.ts
|
|
14
14
|
const NOT_DELEGATED = freezeDeep({
|
|
15
15
|
outcome: "denied",
|
|
@@ -89,7 +89,7 @@ async function refused(hook, fallback, decision, request, report) {
|
|
|
89
89
|
decision
|
|
90
90
|
};
|
|
91
91
|
const status = result.status;
|
|
92
|
-
if (typeof status !== "number" || status < 300) throw new TypeError(`PermDock:
|
|
92
|
+
if (typeof status !== "number" || status < 300) throw new TypeError(`PermDock: deniedResponse returned status ${String(status)}; a refusal keeps a status of 300 or more`);
|
|
93
93
|
return {
|
|
94
94
|
ok: false,
|
|
95
95
|
response: result instanceof Response ? result : new Response(JSON.stringify(result), {
|
|
@@ -112,11 +112,11 @@ async function guardOn(deps, instance, remote, report, request, permission, load
|
|
|
112
112
|
const credentials = request === void 0 ? false : hasCredentials(request);
|
|
113
113
|
if (permission === null) {
|
|
114
114
|
if (declared === void 0) throw new TypeError(request === void 0 ? "PermDock: protect(null) needs oauthScopes" : `PermDock: protect(null) needs oauthScopes, and no operation declares them for ${request.method} ${new URL(request.url).pathname}`);
|
|
115
|
-
if (instance.subject.principal === null) return refused(deps.options.
|
|
115
|
+
if (instance.subject.principal === null) return refused(deps.options.deniedResponse, unauthenticatedProblem(credentials), ANONYMOUS, request, report);
|
|
116
116
|
}
|
|
117
117
|
const { actor, delegation } = instance.subject;
|
|
118
118
|
const held = permission === null && (actor !== void 0 || delegation !== void 0) ? delegation?.scopes ?? [] : delegation?.scopes;
|
|
119
|
-
if (declared !== void 0 && held !== void 0 && !declared.some((granted) => held.includes(granted))) return refused(deps.options.
|
|
119
|
+
if (declared !== void 0 && held !== void 0 && !declared.some((granted) => held.includes(granted))) return refused(deps.options.deniedResponse, scopeProblem(permission, instance.subject, credentials, declared[0]), NOT_DELEGATED, request, report);
|
|
120
120
|
let data;
|
|
121
121
|
if (load !== void 0) {
|
|
122
122
|
let loaded;
|
|
@@ -124,7 +124,7 @@ async function guardOn(deps, instance, remote, report, request, permission, load
|
|
|
124
124
|
loaded = await load();
|
|
125
125
|
} catch (error) {
|
|
126
126
|
report(error);
|
|
127
|
-
return refused(deps.options.
|
|
127
|
+
return refused(deps.options.deniedResponse, loadFailedProblem(permission), LOAD_FAILED, request, report);
|
|
128
128
|
}
|
|
129
129
|
if (loaded === null || loaded === void 0) return {
|
|
130
130
|
ok: false,
|
|
@@ -138,7 +138,7 @@ async function guardOn(deps, instance, remote, report, request, permission, load
|
|
|
138
138
|
data
|
|
139
139
|
};
|
|
140
140
|
const decideOptions = compact({
|
|
141
|
-
|
|
141
|
+
call: "adapter",
|
|
142
142
|
adapter: deps.adapter,
|
|
143
143
|
field: protectOptions.field,
|
|
144
144
|
explain: protectOptions.explain,
|
|
@@ -162,7 +162,7 @@ async function guardOn(deps, instance, remote, report, request, permission, load
|
|
|
162
162
|
decision,
|
|
163
163
|
data
|
|
164
164
|
};
|
|
165
|
-
return refused(deps.options.
|
|
165
|
+
return refused(deps.options.deniedResponse, problemFromDecision(decision, permission, instance.subject, compact({
|
|
166
166
|
approval: deps.options.approval,
|
|
167
167
|
credentials,
|
|
168
168
|
scope: declared?.[0] ?? challengeScope(deps.policy, permission),
|
|
@@ -172,18 +172,17 @@ async function guardOn(deps, instance, remote, report, request, permission, load
|
|
|
172
172
|
//#endregion
|
|
173
173
|
//#region src/server/create.ts
|
|
174
174
|
async function resolveActor(request, options) {
|
|
175
|
-
return (options.webBotAuth === void 0 ? void 0 : await options.webBotAuth(request)) ?? actorFrom(options.actor, request);
|
|
175
|
+
return (options.webBotAuth === void 0 ? void 0 : await options.webBotAuth.verify(request)) ?? actorFrom(options.actor, request);
|
|
176
176
|
}
|
|
177
177
|
const NO_TENANT = "\0";
|
|
178
|
-
function createPermDock(policy, options) {
|
|
179
|
-
return createServerKernel(policy, options);
|
|
180
|
-
}
|
|
181
178
|
/**
|
|
182
|
-
* The
|
|
183
|
-
* once per `Request`; one instance is cached per `(Request, tenant)`,
|
|
184
|
-
* global middleware and a later tenant-scoped `protect` never share a
|
|
179
|
+
* The Fetch factory behind every HTTP adapter. The subject and actor are
|
|
180
|
+
* resolved once per `Request`; one instance is cached per `(Request, tenant)`,
|
|
181
|
+
* so a global middleware and a later tenant-scoped `protect` never share a
|
|
182
|
+
* tenant.
|
|
185
183
|
*/
|
|
186
|
-
function
|
|
184
|
+
function createPermDock(policy, given) {
|
|
185
|
+
const options = withApp(policy, given);
|
|
187
186
|
const adapter = options.adapter ?? "server";
|
|
188
187
|
const subjects = /* @__PURE__ */ new WeakMap();
|
|
189
188
|
const instances = /* @__PURE__ */ new WeakMap();
|
|
@@ -217,7 +216,7 @@ function createServerKernel(policy, options) {
|
|
|
217
216
|
context
|
|
218
217
|
},
|
|
219
218
|
errors,
|
|
220
|
-
wrap: options.wrap
|
|
219
|
+
wrap: (created) => options.wrap === void 0 ? created : options.wrap(created)
|
|
221
220
|
});
|
|
222
221
|
const remote = options.pdp === void 0 ? void 0 : await options.pdp(policy, user, built.options);
|
|
223
222
|
reporters.set(built.permdock, built.report);
|
|
@@ -243,7 +242,7 @@ function createServerKernel(policy, options) {
|
|
|
243
242
|
};
|
|
244
243
|
const connection = async (request, connectionOptions = {}, scope) => {
|
|
245
244
|
const { tenant } = scope ?? await tenantScope(options.tenant, request);
|
|
246
|
-
const { openConnection } = await import("./connection-
|
|
245
|
+
const { openConnection } = await import("./connection-DjhIJSs2.js");
|
|
247
246
|
return openConnection({
|
|
248
247
|
open: async () => (await build(request, { tenant })).permdock,
|
|
249
248
|
rebuild: async () => (await instanceFor(await freshSubject(request), tenant)).permdock,
|
|
@@ -253,9 +252,9 @@ function createServerKernel(policy, options) {
|
|
|
253
252
|
options: connectionOptions
|
|
254
253
|
});
|
|
255
254
|
};
|
|
256
|
-
const
|
|
255
|
+
const getPermDock = async (request, scope) => (await build(request, scope)).permdock;
|
|
257
256
|
const getSnapshot = async (request, query = {}) => {
|
|
258
|
-
return (await
|
|
257
|
+
return (await getPermDock(request, query.tenant === void 0 ? void 0 : { tenant: query.tenant })).snapshot(compact({
|
|
259
258
|
include: query.include,
|
|
260
259
|
tenants: query.tenants
|
|
261
260
|
}));
|
|
@@ -265,7 +264,7 @@ function createServerKernel(policy, options) {
|
|
|
265
264
|
options,
|
|
266
265
|
adapter
|
|
267
266
|
};
|
|
268
|
-
const protectRoute = (permission,
|
|
267
|
+
const protectRoute = (permission, data, protectOptions = {}) => {
|
|
269
268
|
if (permission === null && routeScopes(protectOptions.oauthScopes) === void 0 && options.operations === void 0) throw new TypeError("PermDock: protect(null) needs oauthScopes, in its options or an operations entry");
|
|
270
269
|
return async (request, scope) => {
|
|
271
270
|
let instance;
|
|
@@ -280,7 +279,7 @@ function createServerKernel(policy, options) {
|
|
|
280
279
|
};
|
|
281
280
|
throw error;
|
|
282
281
|
}
|
|
283
|
-
return guardOn(deps, instance, remote, report, request, permission,
|
|
282
|
+
return guardOn(deps, instance, remote, report, request, permission, data === void 0 ? void 0 : () => data(request), protectOptions);
|
|
284
283
|
};
|
|
285
284
|
};
|
|
286
285
|
const protect = protectRoute;
|
|
@@ -299,14 +298,14 @@ function createServerKernel(policy, options) {
|
|
|
299
298
|
} };
|
|
300
299
|
}
|
|
301
300
|
};
|
|
302
|
-
const permdockHandler = (scope) =>
|
|
301
|
+
const permdockHandler = (scope) => evaluationsHandler(compact({
|
|
303
302
|
policy,
|
|
304
|
-
resolve: scope === void 0 ?
|
|
303
|
+
resolve: scope === void 0 ? getPermDock : async (request) => getPermDock(request, await scope(request)),
|
|
305
304
|
store: options.store,
|
|
306
305
|
adapter
|
|
307
306
|
}));
|
|
308
307
|
return {
|
|
309
|
-
|
|
308
|
+
getPermDock,
|
|
310
309
|
getSnapshot,
|
|
311
310
|
protect,
|
|
312
311
|
protectOn: (instance, permission, load, protectOptions = {}, request) => guardOn(deps, instance, void 0, reporters.get(instance) ?? (() => void 0), request, permission, load, protectOptions),
|
|
@@ -321,4 +320,4 @@ function createServerKernel(policy, options) {
|
|
|
321
320
|
};
|
|
322
321
|
}
|
|
323
322
|
//#endregion
|
|
324
|
-
export {
|
|
323
|
+
export { createPermDock as t };
|
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
import { n as isReadonlyArray, t as compact } from "./compact-CAf557ZB.js";
|
|
2
2
|
import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { n as
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
3
|
+
import { a as ownRecord } from "./paths-DXSHAMIa.js";
|
|
4
|
+
import { a as isId, r as idList } from "./expiry-D4_YKRKD.js";
|
|
5
|
+
import { n as internalsOf } from "./internals-Dk8A8fX3.js";
|
|
6
|
+
import { c as listPermissions, h as formerKeys } from "./permission-registry-Br4jSNVi.js";
|
|
7
|
+
import { g as secondsOf, l as isRfc3339, m as rfc3339, p as nowSeconds } from "./time-DkWjdL98.js";
|
|
8
|
+
import { t as canonicalJson } from "./canonical-json-BC8_nMTw.js";
|
|
9
|
+
import { r as sha256Digest } from "./sha256-D9ihqmvd.js";
|
|
10
|
+
import { n as coveredByDelegation } from "./delegation-DaXVdDhM.js";
|
|
11
|
+
import { o as flattenGrantee } from "./grantee-Cn1HyUsI.js";
|
|
12
|
+
import { t as anonymousSubject } from "./subject-BGoM5o8B.js";
|
|
8
13
|
//#region src/core/credential.ts
|
|
14
|
+
/** A feed id: lowercase, so a mail system that lowercases a local part still matches. At most 16 characters, so `pdfeed_<id>_<secret>` fits an email local part. */
|
|
15
|
+
function isFeedId(value) {
|
|
16
|
+
return /^[a-z0-9-]{1,16}$/u.test(value);
|
|
17
|
+
}
|
|
9
18
|
const MAX_NAME = 256;
|
|
10
19
|
function policies(policy) {
|
|
11
20
|
return isReadonlyArray(policy) ? policy : [policy];
|
|
@@ -18,10 +27,14 @@ function policies(policy) {
|
|
|
18
27
|
function credentialPolicyViolation(credential, policy) {
|
|
19
28
|
const list = policies(policy);
|
|
20
29
|
for (const item of list) if (item.kinds !== void 0 && !item.kinds.includes(credential.kind)) return "kind";
|
|
21
|
-
if (credential.expiresAt === void 0)
|
|
30
|
+
if (credential.expiresAt === void 0) {
|
|
31
|
+
if (credential.kind === "feed") return;
|
|
32
|
+
return list.some((item) => item.allowNoExpiry === true) && list.every((item) => item.maxTtl === void 0) ? void 0 : "no-expiry";
|
|
33
|
+
}
|
|
34
|
+
const lifetime = (secondsOf(credential.expiresAt) ?? NaN) - (secondsOf(credential.createdAt) ?? NaN);
|
|
22
35
|
for (const item of list) {
|
|
23
36
|
const max = item.maxTtl;
|
|
24
|
-
if (max !== void 0 && (
|
|
37
|
+
if (max !== void 0 && (!Number.isSafeInteger(max) || max < 0 || !(lifetime <= max))) return "ttl";
|
|
25
38
|
}
|
|
26
39
|
}
|
|
27
40
|
function parsePermissions(value) {
|
|
@@ -39,9 +52,6 @@ function parsePermissions(value) {
|
|
|
39
52
|
}
|
|
40
53
|
return out;
|
|
41
54
|
}
|
|
42
|
-
function isTime(value) {
|
|
43
|
-
return typeof value === "number" && Number.isFinite(value);
|
|
44
|
-
}
|
|
45
55
|
/**
|
|
46
56
|
* Validates an untrusted credential record and returns a frozen copy with
|
|
47
57
|
* only the v1 fields, or `undefined`. Unknown fields are dropped; a wrong
|
|
@@ -51,19 +61,30 @@ function isTime(value) {
|
|
|
51
61
|
function parseCredential(input) {
|
|
52
62
|
const value = ownRecord(input);
|
|
53
63
|
if (value === void 0 || value["v"] !== 1 || !isId(value["id"])) return;
|
|
54
|
-
if (value["kind"] !== "user" && value["kind"] !== "service") return;
|
|
64
|
+
if (value["kind"] !== "user" && value["kind"] !== "service" && value["kind"] !== "feed") return;
|
|
55
65
|
if (!isId(value["principal"]) || !isId(value["createdBy"])) return;
|
|
56
66
|
const permissions = parsePermissions(value["permissions"]);
|
|
57
|
-
if (permissions === void 0 || !
|
|
58
|
-
if (value["expiresAt"] !== void 0 && !
|
|
67
|
+
if (permissions === void 0 || !isRfc3339(value["createdAt"])) return;
|
|
68
|
+
if (value["expiresAt"] !== void 0 && !isRfc3339(value["expiresAt"])) return;
|
|
59
69
|
if (value["name"] !== void 0 && (typeof value["name"] !== "string" || value["name"].length > MAX_NAME)) return;
|
|
60
70
|
let tenant;
|
|
61
71
|
let roles;
|
|
72
|
+
let on;
|
|
62
73
|
if (value["kind"] === "service") {
|
|
63
74
|
roles = idList(value["roles"]);
|
|
64
|
-
if (!isId(value["tenant"]) || roles === void 0) return;
|
|
75
|
+
if (!isId(value["tenant"]) || roles === void 0 || value["on"] !== void 0) return;
|
|
65
76
|
tenant = value["tenant"];
|
|
66
|
-
} else if (value["
|
|
77
|
+
} else if (value["kind"] === "feed") {
|
|
78
|
+
roles = idList(value["roles"]);
|
|
79
|
+
const target = ownRecord(value["on"]);
|
|
80
|
+
if (roles === void 0 || target === void 0 || !isId(target["resource"]) || !isId(target["id"]) || value["principal"] !== value["id"] || !isFeedId(value["id"])) return;
|
|
81
|
+
if (value["tenant"] !== void 0 && !isId(value["tenant"])) return;
|
|
82
|
+
tenant = typeof value["tenant"] === "string" ? value["tenant"] : void 0;
|
|
83
|
+
on = {
|
|
84
|
+
resource: target["resource"],
|
|
85
|
+
id: target["id"]
|
|
86
|
+
};
|
|
87
|
+
} else if (value["roles"] !== void 0 || value["on"] !== void 0 || value["tenant"] !== void 0 && !isId(value["tenant"])) return;
|
|
67
88
|
else tenant = value["tenant"];
|
|
68
89
|
return freezeDeep(compact({
|
|
69
90
|
v: 1,
|
|
@@ -72,6 +93,7 @@ function parseCredential(input) {
|
|
|
72
93
|
principal: value["principal"],
|
|
73
94
|
tenant,
|
|
74
95
|
roles,
|
|
96
|
+
on,
|
|
75
97
|
permissions,
|
|
76
98
|
createdBy: value["createdBy"],
|
|
77
99
|
createdAt: value["createdAt"],
|
|
@@ -120,7 +142,7 @@ function credentialDelegation(credential, permissions) {
|
|
|
120
142
|
* owner, passed live as `owner` (roles and memberships as of this request),
|
|
121
143
|
* with the credential's delegation: every check is the owner's rights
|
|
122
144
|
* intersected with the key's. One that names a `tenant` makes it the active
|
|
123
|
-
* tenant, and `
|
|
145
|
+
* tenant, and `getPermDock` then keeps only the owner's memberships
|
|
124
146
|
* inside it and no global role. A `service` credential is a `service`
|
|
125
147
|
* principal whose only membership is `roles` in `tenant`. An owner whose id
|
|
126
148
|
* is not the credential's `principal`, or who is not a user, is anonymous.
|
|
@@ -128,7 +150,20 @@ function credentialDelegation(credential, permissions) {
|
|
|
128
150
|
function credentialSubject(credential, options) {
|
|
129
151
|
const delegation = credentialDelegation(credential, options.permissions);
|
|
130
152
|
let principal;
|
|
131
|
-
if (credential.kind === "
|
|
153
|
+
if (credential.kind === "feed") {
|
|
154
|
+
if (credential.on === void 0 || credential.roles === void 0) return anonymousSubject();
|
|
155
|
+
const membership = compact({
|
|
156
|
+
on: credential.on,
|
|
157
|
+
roles: credential.roles,
|
|
158
|
+
via: "feed"
|
|
159
|
+
});
|
|
160
|
+
principal = compact({
|
|
161
|
+
id: credential.id,
|
|
162
|
+
kind: "feed",
|
|
163
|
+
memberships: [membership],
|
|
164
|
+
credential
|
|
165
|
+
});
|
|
166
|
+
} else if (credential.kind === "user") {
|
|
132
167
|
const owner = options.owner ?? {
|
|
133
168
|
id: credential.principal,
|
|
134
169
|
kind: "user"
|
|
@@ -158,11 +193,11 @@ function credentialSubject(credential, options) {
|
|
|
158
193
|
principal,
|
|
159
194
|
delegation,
|
|
160
195
|
context: {},
|
|
161
|
-
expiresAt: credential.expiresAt
|
|
196
|
+
expiresAt: secondsOf(credential.expiresAt)
|
|
162
197
|
}));
|
|
163
198
|
}
|
|
164
199
|
function credentialToken(credential) {
|
|
165
|
-
const payload =
|
|
200
|
+
const payload = canonicalJson({
|
|
166
201
|
t: "credential",
|
|
167
202
|
id: credential.id,
|
|
168
203
|
kind: credential.kind,
|
|
@@ -170,11 +205,12 @@ function credentialToken(credential) {
|
|
|
170
205
|
tenant: credential.tenant ?? null,
|
|
171
206
|
roles: credential.roles ?? null,
|
|
172
207
|
permissions: credential.permissions,
|
|
208
|
+
...credential.on === void 0 ? {} : { on: credential.on },
|
|
173
209
|
createdBy: credential.createdBy,
|
|
174
210
|
expiresAt: credential.expiresAt ?? null,
|
|
175
211
|
name: credential.name ?? null
|
|
176
212
|
});
|
|
177
|
-
return
|
|
213
|
+
return sha256Digest(payload);
|
|
178
214
|
}
|
|
179
215
|
function denied(reason, detail) {
|
|
180
216
|
return freezeDeep({
|
|
@@ -213,28 +249,90 @@ function refuse(reason, detail) {
|
|
|
213
249
|
decision: denied(reason, detail)
|
|
214
250
|
};
|
|
215
251
|
}
|
|
252
|
+
function oneResource(resource) {
|
|
253
|
+
const names = new Set(listPermissions(resource).map((leaf) => leaf.resource));
|
|
254
|
+
const [name] = names;
|
|
255
|
+
return names.size === 1 && name !== void 0 ? name : void 0;
|
|
256
|
+
}
|
|
257
|
+
function granteeOnResource(to, resource, role) {
|
|
258
|
+
for (const grant of flattenGrantee(to)) if (grant.kind === "role" && grant.role === role && typeof grant.scope === "object" && grant.scope.resource === resource) return true;
|
|
259
|
+
return false;
|
|
260
|
+
}
|
|
261
|
+
function roleDeclaredOn(permdock, resource, resourceName, roleName, id, row) {
|
|
262
|
+
const preview = permdock.simulate({
|
|
263
|
+
roles: [],
|
|
264
|
+
memberships: [{
|
|
265
|
+
on: {
|
|
266
|
+
resource: resourceName,
|
|
267
|
+
id
|
|
268
|
+
},
|
|
269
|
+
roles: [roleName]
|
|
270
|
+
}]
|
|
271
|
+
});
|
|
272
|
+
for (const leaf of listPermissions(resource)) {
|
|
273
|
+
if (leaf.resource !== resourceName) continue;
|
|
274
|
+
const decision = preview.explain(leaf, row, { trusted: true });
|
|
275
|
+
const seen = [
|
|
276
|
+
..."matched" in decision && decision.matched !== void 0 ? [decision.matched] : [],
|
|
277
|
+
...decision.trace?.allows ?? [],
|
|
278
|
+
...decision.trace?.denies ?? [],
|
|
279
|
+
..."denials" in decision ? decision.denials : []
|
|
280
|
+
];
|
|
281
|
+
for (const grant of seen) {
|
|
282
|
+
if (grant.role !== roleName) continue;
|
|
283
|
+
if (granteeOnResource(grant.to, resourceName, roleName)) return true;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
return false;
|
|
287
|
+
}
|
|
288
|
+
function feedTarget(permdock, request, entries) {
|
|
289
|
+
const resource = oneResource(request.on.resource);
|
|
290
|
+
if (resource === void 0 || !isFeedId(request.id) || !isId(request.on.id) || request.row === void 0 || request.row === null || request.roles.length === 0) return refuse("validation");
|
|
291
|
+
for (const entry of entries) {
|
|
292
|
+
if (entry.leaf.resource !== resource) return refuse("exceeds-creator", { permission: entry.leaf.key });
|
|
293
|
+
if (entry.ids !== void 0 && (entry.ids.length !== 1 || entry.ids[0] !== request.on.id)) return refuse("exceeds-creator", { permission: entry.leaf.key });
|
|
294
|
+
if (permdock.decide(entry.leaf, request.row, { trusted: true }).outcome !== "granted") return refuse("exceeds-creator", { permission: entry.leaf.key });
|
|
295
|
+
}
|
|
296
|
+
for (const name of request.roles) if (!roleDeclaredOn(permdock, request.on.resource, resource, name, request.on.id, request.row)) return refuse("exceeds-creator", { role: name });
|
|
297
|
+
return {
|
|
298
|
+
ok: true,
|
|
299
|
+
resource
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
function feedOn(request, feed) {
|
|
303
|
+
if (request.kind !== "feed" || feed === void 0) return;
|
|
304
|
+
if (feed.ok && "resource" in feed) return {
|
|
305
|
+
resource: feed.resource,
|
|
306
|
+
id: request.on.id
|
|
307
|
+
};
|
|
308
|
+
}
|
|
216
309
|
function checkRequest(permdock, request, now) {
|
|
217
310
|
const creator = permdock.subject.principal;
|
|
218
311
|
if (creator === null) return refuse("anonymous");
|
|
219
|
-
if (creator.kind === "link" || "
|
|
312
|
+
if (creator.kind === "link" || creator.kind === "feed" || creator.kind === "contact") return refuse("exceeds-creator", { creator: creator.kind });
|
|
313
|
+
if ("credential" in creator) return refuse("exceeds-creator", { creator: "credential" });
|
|
220
314
|
const entries = permissionEntries(request, leafByKey(permdock.permissions));
|
|
221
|
-
|
|
315
|
+
const expires = request.expiresAt === void 0 ? void 0 : secondsOf(request.expiresAt);
|
|
316
|
+
if (entries === void 0 || !isId(request.id) || request.expiresAt !== void 0 && (expires === void 0 || expires <= now)) return refuse("validation");
|
|
317
|
+
const feed = request.kind === "feed" ? feedTarget(permdock, request, entries) : void 0;
|
|
318
|
+
if (feed !== void 0 && !feed.ok) return feed;
|
|
222
319
|
const subject = permdock.subject;
|
|
223
320
|
for (const entry of entries) for (const id of entry.ids ?? [void 0]) if (coveredByDelegation(entry.leaf, subject.delegation, id, subject.actor !== void 0) !== void 0) return refuse("exceeds-creator", { permission: entry.leaf.key });
|
|
224
321
|
const credential = parseCredential(compact({
|
|
225
322
|
v: 1,
|
|
226
323
|
id: request.id,
|
|
227
324
|
kind: request.kind,
|
|
228
|
-
principal: request.kind === "service" ? request.principal ?? request.id : creator.id,
|
|
229
|
-
tenant: request.tenant,
|
|
230
|
-
roles: request.kind === "service" ? request.roles : void 0,
|
|
325
|
+
principal: request.kind === "service" ? request.principal ?? request.id : request.kind === "feed" ? request.id : creator.id,
|
|
326
|
+
tenant: "tenant" in request ? request.tenant : void 0,
|
|
327
|
+
roles: request.kind === "service" || request.kind === "feed" ? request.roles : void 0,
|
|
328
|
+
on: feedOn(request, feed),
|
|
231
329
|
permissions: entries.map((entry) => compact({
|
|
232
330
|
permission: entry.leaf.key,
|
|
233
|
-
ids: entry.ids
|
|
331
|
+
ids: request.kind === "feed" ? [request.on.id] : entry.ids
|
|
234
332
|
})),
|
|
235
333
|
createdBy: creator.id,
|
|
236
|
-
createdAt: now,
|
|
237
|
-
expiresAt: request.expiresAt
|
|
334
|
+
createdAt: rfc3339(now),
|
|
335
|
+
expiresAt: request.expiresAt,
|
|
238
336
|
name: request.name
|
|
239
337
|
}));
|
|
240
338
|
if (credential === void 0) return refuse("validation");
|
|
@@ -275,8 +373,31 @@ function credentialTenant(credential, active) {
|
|
|
275
373
|
* its token. PermDock never stores the credential; the application does,
|
|
276
374
|
* after a `granted` result.
|
|
277
375
|
*/
|
|
278
|
-
|
|
279
|
-
|
|
376
|
+
/**
|
|
377
|
+
* Decides whether the subject of `permdock` may create the credential in
|
|
378
|
+
* `request`: the creator's own reach, the `credentials` policy of the key's
|
|
379
|
+
* tenant (the call's `settings`, else the instance's), and `approval`.
|
|
380
|
+
* PermDock never stores the credential; the application does, after a
|
|
381
|
+
* `granted` result. An instance built from a snapshot denies with
|
|
382
|
+
* `unsupported`.
|
|
383
|
+
*/
|
|
384
|
+
function decideCredential(permdock, request, options = {}) {
|
|
385
|
+
const internals = internalsOf(permdock);
|
|
386
|
+
if (internals === void 0) return Promise.resolve(freezeDeep({
|
|
387
|
+
outcome: "denied",
|
|
388
|
+
denials: [{
|
|
389
|
+
role: null,
|
|
390
|
+
reason: "unsupported"
|
|
391
|
+
}]
|
|
392
|
+
}));
|
|
393
|
+
const settings = options.settings ?? internals.env.settings;
|
|
394
|
+
return decideCredentialWith(internals.instance, request, settings === void 0 ? options : {
|
|
395
|
+
...options,
|
|
396
|
+
settings
|
|
397
|
+
});
|
|
398
|
+
}
|
|
399
|
+
async function decideCredentialWith(permdock, request, options) {
|
|
400
|
+
const checked = checkRequest(permdock, request, nowSeconds(options.now));
|
|
280
401
|
if (!checked.ok) return checked.decision;
|
|
281
402
|
const { credential } = checked;
|
|
282
403
|
const tenant = credentialTenant(credential, permdock.subject.principal?.tenant);
|
|
@@ -303,4 +424,4 @@ async function decideCredential(permdock, request, options = {}) {
|
|
|
303
424
|
});
|
|
304
425
|
}
|
|
305
426
|
//#endregion
|
|
306
|
-
export { decideCredential as a, credentialTenant as i, credentialPolicyViolation as n,
|
|
427
|
+
export { decideCredential as a, credentialTenant as i, credentialPolicyViolation as n, isFeedId as o, credentialSubject as r, parseCredential as s, credentialDelegation as t };
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { n as CliError } from "./errors-CWTY6uih.js";
|
|
2
|
+
//#region src/cli/core/io.ts
|
|
3
|
+
const FRAMES = [
|
|
4
|
+
"⠋",
|
|
5
|
+
"⠙",
|
|
6
|
+
"⠹",
|
|
7
|
+
"⠸",
|
|
8
|
+
"⠼",
|
|
9
|
+
"⠴",
|
|
10
|
+
"⠦",
|
|
11
|
+
"⠧",
|
|
12
|
+
"⠇",
|
|
13
|
+
"⠏"
|
|
14
|
+
];
|
|
15
|
+
const FRAME_MS = 80;
|
|
16
|
+
/**
|
|
17
|
+
* A spinner on a terminal stderr; a plain line elsewhere, so logs and CI
|
|
18
|
+
* output stay readable. `done` replaces the spinner with a final line.
|
|
19
|
+
*/
|
|
20
|
+
function progressReporter(input) {
|
|
21
|
+
return (message) => {
|
|
22
|
+
if (!input.tty) {
|
|
23
|
+
input.write(`${message}\n`);
|
|
24
|
+
return { done: (final) => {
|
|
25
|
+
if (final !== void 0) input.write(`${final}\n`);
|
|
26
|
+
} };
|
|
27
|
+
}
|
|
28
|
+
let frame = 0;
|
|
29
|
+
const draw = () => {
|
|
30
|
+
input.write(`\r${input.style.paint("cyan", FRAMES[frame % FRAMES.length] ?? "")} ${message}`);
|
|
31
|
+
frame += 1;
|
|
32
|
+
};
|
|
33
|
+
draw();
|
|
34
|
+
const timer = setInterval(draw, FRAME_MS);
|
|
35
|
+
timer.unref();
|
|
36
|
+
return { done: (final) => {
|
|
37
|
+
clearInterval(timer);
|
|
38
|
+
input.write(`\r\u001B[2K${final === void 0 ? "" : `${input.style.okMark} ${final}\n`}`);
|
|
39
|
+
} };
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/** The value of a `--*-stdin` secret: stdin up to the first newline, trimmed. */
|
|
43
|
+
async function readSecret(readStdin) {
|
|
44
|
+
if (readStdin === void 0) return;
|
|
45
|
+
const text = (await readStdin()).split(/\r?\n/u, 1)[0]?.trim() ?? "";
|
|
46
|
+
return text === "" ? void 0 : text;
|
|
47
|
+
}
|
|
48
|
+
//#endregion
|
|
49
|
+
//#region src/cli/core/credentials.ts
|
|
50
|
+
const URL_PASSWORD = /\b([a-z][a-z0-9+.-]*:\/\/[^\s:/@]+:)([^\s@/]+)@/giu;
|
|
51
|
+
/** `text` with every registered secret and every URL password masked. */
|
|
52
|
+
function redact(text, secrets) {
|
|
53
|
+
let out = text.replace(URL_PASSWORD, "$1***@");
|
|
54
|
+
for (const secret of secrets) if (secret.length >= 4) out = out.replaceAll(secret, "***");
|
|
55
|
+
return out;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* The secret piped in for `--<flag>-stdin`, when it was passed, registered
|
|
59
|
+
* for redaction.
|
|
60
|
+
*/
|
|
61
|
+
async function secretInput(ctx, input) {
|
|
62
|
+
let value;
|
|
63
|
+
if (input.stdin) {
|
|
64
|
+
value = await readSecret(ctx.io.readStdin);
|
|
65
|
+
if (value === void 0) throw new CliError("usage", `${ctx.command}: --${input.flag}-stdin read nothing from stdin`, {
|
|
66
|
+
code: "missing_value",
|
|
67
|
+
extensions: { flag: `--${input.flag}-stdin` }
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
if (value !== void 0) ctx.addSecret(value);
|
|
71
|
+
return value;
|
|
72
|
+
}
|
|
73
|
+
//#endregion
|
|
74
|
+
export { secretInput as n, progressReporter as r, redact as t };
|