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,225 @@
|
|
|
1
|
+
import { Ct as Credential, Jt as AutomationEvent, Kt as AccessEvent, Yt as CredentialEvent, gt as SupportSession, nn as MembershipEvent, q as DecisionSink, rn as SinkEvent, ut as TokenSigner } from "./policy-types-DzwivBgR.js";
|
|
2
|
+
import { V as AppData } from "./vocabulary-D6lPdb4Z.js";
|
|
3
|
+
import { u as OperationRisk } from "./operations-CxybZErY.js";
|
|
4
|
+
import { t as Automation } from "./automation-BMZPIVUM.js";
|
|
5
|
+
//#region src/core/sink.d.ts
|
|
6
|
+
/**
|
|
7
|
+
* The closed list of CloudEvents `type` values, `com.permdock.<family>` or
|
|
8
|
+
* `com.permdock.<family>.<operation>`. `RESERVED_CLOUD_EVENT_TYPES` are named
|
|
9
|
+
* for later releases and nothing emits them yet.
|
|
10
|
+
*/
|
|
11
|
+
declare const CLOUD_EVENT_TYPES: {
|
|
12
|
+
readonly decision: "com.permdock.decision";
|
|
13
|
+
readonly approvalRequested: "com.permdock.approval.requested";
|
|
14
|
+
readonly approvalResolved: "com.permdock.approval.resolved";
|
|
15
|
+
readonly approvalExpired: "com.permdock.approval.expired";
|
|
16
|
+
readonly approvalCancelled: "com.permdock.approval.cancelled";
|
|
17
|
+
readonly membershipAdded: "com.permdock.membership.added";
|
|
18
|
+
readonly membershipRemoved: "com.permdock.membership.removed";
|
|
19
|
+
readonly membershipChanged: "com.permdock.membership.changed";
|
|
20
|
+
readonly credentialCreated: "com.permdock.credential.created";
|
|
21
|
+
readonly credentialUsed: "com.permdock.credential.used";
|
|
22
|
+
readonly credentialRotated: "com.permdock.credential.rotated";
|
|
23
|
+
readonly credentialRevoked: "com.permdock.credential.revoked";
|
|
24
|
+
readonly directoryCreated: "com.permdock.directory.created";
|
|
25
|
+
readonly directoryReplaced: "com.permdock.directory.replaced";
|
|
26
|
+
readonly directoryPatched: "com.permdock.directory.patched";
|
|
27
|
+
readonly directoryDeleted: "com.permdock.directory.deleted";
|
|
28
|
+
readonly catalogPublished: "com.permdock.catalog.published";
|
|
29
|
+
readonly catalogDrifted: "com.permdock.catalog.drifted";
|
|
30
|
+
readonly supportSessionStarted: "com.permdock.support-session.started";
|
|
31
|
+
readonly supportSessionEnded: "com.permdock.support-session.ended";
|
|
32
|
+
readonly automationPublished: "com.permdock.automation.published";
|
|
33
|
+
readonly automationChanged: "com.permdock.automation.changed";
|
|
34
|
+
readonly automationRevoked: "com.permdock.automation.revoked";
|
|
35
|
+
readonly automationRun: "com.permdock.automation.run";
|
|
36
|
+
readonly deliverySent: "com.permdock.delivery.sent";
|
|
37
|
+
readonly deliveryDelivered: "com.permdock.delivery.delivered";
|
|
38
|
+
readonly deliveryBounced: "com.permdock.delivery.bounced";
|
|
39
|
+
readonly deliveryComplained: "com.permdock.delivery.complained";
|
|
40
|
+
readonly deliveryFailed: "com.permdock.delivery.failed";
|
|
41
|
+
};
|
|
42
|
+
type CloudEventType = (typeof CLOUD_EVENT_TYPES)[keyof typeof CLOUD_EVENT_TYPES];
|
|
43
|
+
/** Types named for a later release; a receiver refuses them until then. None are reserved now. */
|
|
44
|
+
declare const RESERVED_CLOUD_EVENT_TYPES: readonly CloudEventType[];
|
|
45
|
+
/** The CloudEvents JSON format media type for one event (structured mode). */
|
|
46
|
+
declare const CLOUDEVENTS_CONTENT_TYPE = "application/cloudevents+json";
|
|
47
|
+
/** The CloudEvents JSON batch format media type: a JSON array of events. */
|
|
48
|
+
declare const CLOUDEVENTS_BATCH_CONTENT_TYPE = "application/cloudevents-batch+json";
|
|
49
|
+
/**
|
|
50
|
+
* Why a published catalog drifted. The first four broke a live hosted grant,
|
|
51
|
+
* which the Cloud then suspends; the `operation-*` codes only report.
|
|
52
|
+
*/
|
|
53
|
+
type CatalogFindingCode = "permission-removed" | "not-hostable" | "grantee-removed" | "approval-tightened" | "operation-risk-raised" | "operation-approval-removed";
|
|
54
|
+
/** One drift finding: the permission key and, when one broke, the hosted grant id. */
|
|
55
|
+
type CatalogFinding = {
|
|
56
|
+
readonly code: CatalogFindingCode;
|
|
57
|
+
readonly permission: string;
|
|
58
|
+
readonly grant?: string;
|
|
59
|
+
/** The operation name, on the `operation-*` codes. */
|
|
60
|
+
readonly operation?: string;
|
|
61
|
+
/** `meta.risk` before the publish, on `operation-risk-raised`; an unset risk is `low`. */
|
|
62
|
+
readonly previous?: OperationRisk;
|
|
63
|
+
/** `meta.risk` after the publish, on `operation-risk-raised`. */
|
|
64
|
+
readonly risk?: OperationRisk;
|
|
65
|
+
};
|
|
66
|
+
/** `data` of a `com.permdock.catalog.*` event: a `permdock cloud push` or a drift against live hosted grants. */
|
|
67
|
+
type CatalogEventData = {
|
|
68
|
+
readonly kind: "publish" | "drift";
|
|
69
|
+
/** The catalog fingerprint after the publish, or the one drift was measured against. */
|
|
70
|
+
readonly fingerprint: string;
|
|
71
|
+
readonly previous?: string;
|
|
72
|
+
readonly findings?: readonly CatalogFinding[];
|
|
73
|
+
};
|
|
74
|
+
/** A CloudEvents 1.0 event in the JSON format, with the distributed-tracing extension. */
|
|
75
|
+
type CloudEvent = {
|
|
76
|
+
readonly specversion: "1.0";
|
|
77
|
+
readonly type: CloudEventType;
|
|
78
|
+
/** An absolute URI naming the producer. */
|
|
79
|
+
readonly source: string;
|
|
80
|
+
readonly subject?: string;
|
|
81
|
+
readonly id: string;
|
|
82
|
+
/** An RFC 3339 instant: the sink event's `at`. */
|
|
83
|
+
readonly time: string;
|
|
84
|
+
readonly datacontenttype: "application/json";
|
|
85
|
+
/** The published JSON Schema of `data`, `https://permdock.com/schemas/<family>-event-v1.json`. */
|
|
86
|
+
readonly dataschema: string;
|
|
87
|
+
/** W3C Trace Context `traceparent`, the CloudEvents distributed-tracing extension. */
|
|
88
|
+
readonly traceparent?: string;
|
|
89
|
+
readonly tracestate?: string;
|
|
90
|
+
readonly data: SinkEvent | CatalogEventData;
|
|
91
|
+
};
|
|
92
|
+
type CloudEventOptions = {
|
|
93
|
+
/** An absolute URI naming the producer, such as the app's origin. */
|
|
94
|
+
readonly source: string;
|
|
95
|
+
/** Defaults to a random UUID. */
|
|
96
|
+
readonly id?: string;
|
|
97
|
+
readonly traceparent?: string;
|
|
98
|
+
readonly tracestate?: string;
|
|
99
|
+
};
|
|
100
|
+
type SignDecisionBatchOptions = {
|
|
101
|
+
readonly audience?: string | readonly string[];
|
|
102
|
+
/** An absolute URI naming the producer, the `source` of every CloudEvent. */
|
|
103
|
+
readonly source: string;
|
|
104
|
+
};
|
|
105
|
+
type MemoryDecisionSinkOptions = {
|
|
106
|
+
readonly capacity?: number;
|
|
107
|
+
} & ({
|
|
108
|
+
readonly signer?: undefined;
|
|
109
|
+
readonly audience?: undefined;
|
|
110
|
+
readonly source?: undefined;
|
|
111
|
+
} | {
|
|
112
|
+
/** Signs each write as an evidence export of CloudEvents. */
|
|
113
|
+
readonly signer: TokenSigner;
|
|
114
|
+
readonly audience?: string | readonly string[];
|
|
115
|
+
/** An absolute URI naming the producer, the `source` of every CloudEvent. */
|
|
116
|
+
readonly source: string;
|
|
117
|
+
});
|
|
118
|
+
type MemoryDecisionSink = DecisionSink & {
|
|
119
|
+
readonly events: () => readonly SinkEvent[];
|
|
120
|
+
readonly batches: () => readonly string[];
|
|
121
|
+
};
|
|
122
|
+
/**
|
|
123
|
+
* The CloudEvents `type` of a sink event. A support access event maps onto the
|
|
124
|
+
* `support-session` family, and a consent the tenant pulls early (`revoked`)
|
|
125
|
+
* ends the session like a lapse; `data.operation` keeps the difference.
|
|
126
|
+
*/
|
|
127
|
+
declare function cloudEventType(event: SinkEvent): CloudEventType;
|
|
128
|
+
/**
|
|
129
|
+
* An `automation` sink event for `automation`. `run` carries the run id and
|
|
130
|
+
* belongs on `run` events only.
|
|
131
|
+
*/
|
|
132
|
+
declare function automationEvent(input: {
|
|
133
|
+
readonly operation: AutomationEvent["operation"];
|
|
134
|
+
readonly automation: Automation;
|
|
135
|
+
readonly run?: string;
|
|
136
|
+
readonly source?: string;
|
|
137
|
+
readonly by?: AutomationEvent["by"];
|
|
138
|
+
/** An RFC 3339 instant; defaults to now. */
|
|
139
|
+
readonly at?: string;
|
|
140
|
+
/** The application's own data; plain JSON, checked here. */
|
|
141
|
+
readonly x?: AppData;
|
|
142
|
+
}): AutomationEvent;
|
|
143
|
+
/**
|
|
144
|
+
* The `access` event of a `SupportSession`: `started` when it begins,
|
|
145
|
+
* `ended` when it lapses, `revoked` when it is ended early. `principal` is
|
|
146
|
+
* the staff member, as for a support membership.
|
|
147
|
+
*/
|
|
148
|
+
declare function supportSessionEvent(input: {
|
|
149
|
+
readonly operation: AccessEvent["operation"];
|
|
150
|
+
readonly session: SupportSession;
|
|
151
|
+
readonly source?: string;
|
|
152
|
+
/** An RFC 3339 instant; defaults to now. */
|
|
153
|
+
readonly at?: string;
|
|
154
|
+
/** The application's own data; plain JSON, checked here. */
|
|
155
|
+
readonly x?: AppData;
|
|
156
|
+
}): AccessEvent;
|
|
157
|
+
/**
|
|
158
|
+
* A `credential` sink event for `credential`. `sample` belongs on `used`
|
|
159
|
+
* events only and must be in `(0, 1]`.
|
|
160
|
+
*/
|
|
161
|
+
declare function credentialEvent(input: {
|
|
162
|
+
readonly operation: CredentialEvent["operation"];
|
|
163
|
+
readonly credential: Credential;
|
|
164
|
+
readonly source?: string;
|
|
165
|
+
readonly by?: CredentialEvent["by"];
|
|
166
|
+
readonly sample?: number;
|
|
167
|
+
/** An RFC 3339 instant; defaults to now. */
|
|
168
|
+
readonly at?: string;
|
|
169
|
+
/** The application's own data; plain JSON, checked here. */
|
|
170
|
+
readonly x?: AppData;
|
|
171
|
+
}): CredentialEvent;
|
|
172
|
+
declare function membershipEvent(input: {
|
|
173
|
+
readonly source: string;
|
|
174
|
+
readonly operation: MembershipEvent["operation"];
|
|
175
|
+
readonly principal: MembershipEvent["principal"];
|
|
176
|
+
readonly scope?: string;
|
|
177
|
+
readonly id?: string;
|
|
178
|
+
readonly within?: MembershipEvent["within"];
|
|
179
|
+
readonly via?: string;
|
|
180
|
+
/** An RFC 3339 instant, or NumericDate seconds as a `Membership` holds them. */
|
|
181
|
+
readonly expiresAt?: string | number;
|
|
182
|
+
readonly roles: MembershipEvent["roles"];
|
|
183
|
+
readonly by?: MembershipEvent["by"];
|
|
184
|
+
/** An RFC 3339 instant; defaults to now. */
|
|
185
|
+
readonly at?: string;
|
|
186
|
+
/** The application's own data; plain JSON, checked here. */
|
|
187
|
+
readonly x?: AppData;
|
|
188
|
+
}): MembershipEvent;
|
|
189
|
+
/**
|
|
190
|
+
* A support-access lifecycle event. `started` on consent, `ended` when the
|
|
191
|
+
* session lapses, `revoked` when the tenant pulls consent early. It never
|
|
192
|
+
* decides; the app writes and revokes the membership.
|
|
193
|
+
*/
|
|
194
|
+
declare function accessEvent(input: {
|
|
195
|
+
readonly source: string;
|
|
196
|
+
readonly operation: AccessEvent["operation"];
|
|
197
|
+
readonly tenant: string;
|
|
198
|
+
readonly principal: AccessEvent["principal"];
|
|
199
|
+
readonly via?: string;
|
|
200
|
+
readonly roles: readonly string[];
|
|
201
|
+
readonly member?: AccessEvent["member"];
|
|
202
|
+
/** An RFC 3339 instant, or NumericDate seconds as a `Membership` holds them. */
|
|
203
|
+
readonly expiresAt?: string | number;
|
|
204
|
+
readonly grantedBy?: string;
|
|
205
|
+
readonly reason?: string;
|
|
206
|
+
readonly actor?: AccessEvent["actor"];
|
|
207
|
+
/** An RFC 3339 instant; defaults to now. */
|
|
208
|
+
readonly at?: string;
|
|
209
|
+
/** The application's own data; plain JSON, checked here. */
|
|
210
|
+
readonly x?: AppData;
|
|
211
|
+
}): AccessEvent;
|
|
212
|
+
/**
|
|
213
|
+
* Wraps a sink event in a CloudEvents 1.0 envelope. Throws a `TypeError` when
|
|
214
|
+
* `source` is not an absolute URI or `traceparent` is not W3C Trace Context.
|
|
215
|
+
*/
|
|
216
|
+
declare function toCloudEvent(event: SinkEvent, options: CloudEventOptions): CloudEvent;
|
|
217
|
+
/**
|
|
218
|
+
* Signs sink events as an offline evidence export: a compact JWS with
|
|
219
|
+
* `typ: vnd.permdock.evidence+jwt` whose `events` claim holds CloudEvents.
|
|
220
|
+
* Live deliveries use Standard Webhooks instead.
|
|
221
|
+
*/
|
|
222
|
+
declare function signDecisionBatch(events: readonly SinkEvent[], signer: TokenSigner, options: SignDecisionBatchOptions): Promise<string>;
|
|
223
|
+
declare function memoryDecisionSink(options?: MemoryDecisionSinkOptions): MemoryDecisionSink;
|
|
224
|
+
//#endregion
|
|
225
|
+
export { toCloudEvent as S, credentialEvent as _, CatalogFinding as a, signDecisionBatch as b, CloudEventOptions as c, MemoryDecisionSinkOptions as d, RESERVED_CLOUD_EVENT_TYPES as f, cloudEventType as g, automationEvent as h, CatalogEventData as i, CloudEventType as l, accessEvent as m, CLOUDEVENTS_CONTENT_TYPE as n, CatalogFindingCode as o, SignDecisionBatchOptions as p, CLOUD_EVENT_TYPES as r, CloudEvent as s, CLOUDEVENTS_BATCH_CONTENT_TYPE as t, MemoryDecisionSink as u, membershipEvent as v, supportSessionEvent as x, memoryDecisionSink as y };
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { t as byCodePoint } from "./compare-pfyVnBjE.js";
|
|
2
2
|
import { i as readJsonFile } from "./files-D_JIzUrP.js";
|
|
3
|
-
import { t as packageRoot } from "./package-root-
|
|
3
|
+
import { t as packageRoot } from "./package-root-Dk_ETdkp.js";
|
|
4
|
+
import { t as didYouMean } from "./args-IIolxxKA.js";
|
|
4
5
|
import { cpSync, existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, readlinkSync, realpathSync, writeFileSync } from "node:fs";
|
|
5
6
|
import { basename, dirname, join, relative, resolve } from "node:path";
|
|
6
7
|
import { createRequire } from "node:module";
|
|
@@ -20,13 +21,22 @@ const AGENT_FOLDERS = {
|
|
|
20
21
|
claude: ".claude/skills",
|
|
21
22
|
cursor: ".cursor/skills"
|
|
22
23
|
};
|
|
23
|
-
/** The `--
|
|
24
|
+
/** The `--for` names `skills install` knows, with the folder each writes. */
|
|
24
25
|
const SKILL_AGENTS = AGENT_FOLDERS;
|
|
25
26
|
/** Agents whose config folder (`.claude`, `.cursor`, `.agents`) the project already has. */
|
|
26
27
|
function detectedAgents(cwd) {
|
|
27
28
|
return Object.entries(AGENT_FOLDERS).filter(([, folder]) => existsSync(join(cwd, dirname(folder)))).map(([agent]) => agent);
|
|
28
29
|
}
|
|
29
30
|
function runSkills(input) {
|
|
31
|
+
const names = /* @__PURE__ */ new Set([...Object.keys(AGENT_FOLDERS), "agent"]);
|
|
32
|
+
const unknown = input.agents.find((agent) => !names.has(agent));
|
|
33
|
+
if (unknown !== void 0) {
|
|
34
|
+
const suggestion = didYouMean(unknown, Object.keys(AGENT_FOLDERS));
|
|
35
|
+
return {
|
|
36
|
+
code: 2,
|
|
37
|
+
output: `skills: unknown --for '${unknown}'.${suggestion === void 0 ? "" : ` Did you mean ${suggestion}?`} Use ${Object.keys(AGENT_FOLDERS).join(", ")}.`
|
|
38
|
+
};
|
|
39
|
+
}
|
|
30
40
|
switch (input.action) {
|
|
31
41
|
case void 0:
|
|
32
42
|
case "install":
|
|
@@ -169,10 +179,7 @@ function listSkills(cwd) {
|
|
|
169
179
|
}
|
|
170
180
|
function resolveTargets(agents) {
|
|
171
181
|
if (agents.length === 0) return Object.values(AGENT_FOLDERS);
|
|
172
|
-
return agents.map((agent) =>
|
|
173
|
-
const key = agent === "agent" ? "agents" : agent;
|
|
174
|
-
return AGENT_FOLDERS[key] ?? `.${key}/skills`;
|
|
175
|
-
});
|
|
182
|
+
return agents.map((agent) => AGENT_FOLDERS[agent === "agent" ? "agents" : agent] ?? ".agents/skills");
|
|
176
183
|
}
|
|
177
184
|
function resolveSkillsRoot(cwd, bundled) {
|
|
178
185
|
try {
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { t as defineLeaf } from "./command-L8EstFNm.js";
|
|
2
|
+
import { t as checkFlag } from "./flags-C3DktBDY.js";
|
|
3
|
+
import { r as pick, t as CANCELLED } from "./prompt-DfZLJLIn.js";
|
|
4
|
+
import { n as detectedAgents, r as runSkills, t as SKILL_AGENTS } from "./skills-B6lVdD_W.js";
|
|
5
|
+
//#region src/cli/commands/skills.ts
|
|
6
|
+
const forFlag = { for: {
|
|
7
|
+
type: "string",
|
|
8
|
+
repeatable: true,
|
|
9
|
+
description: "Agent folders to write: agents, claude or cursor",
|
|
10
|
+
valueHint: "name",
|
|
11
|
+
complete: () => Object.keys(SKILL_AGENTS)
|
|
12
|
+
} };
|
|
13
|
+
async function installTo(ctx, action, clients, check) {
|
|
14
|
+
let agents = clients;
|
|
15
|
+
if (ctx.interactive && !ctx.yes && !check && agents.length === 0) {
|
|
16
|
+
const detected = detectedAgents(ctx.cwd);
|
|
17
|
+
const picked = await pick("Which agents should get the PermDock skills?", Object.entries(SKILL_AGENTS).map(([value, hint]) => ({
|
|
18
|
+
value,
|
|
19
|
+
hint
|
|
20
|
+
})), detected.length > 0 ? detected : Object.keys(SKILL_AGENTS));
|
|
21
|
+
if (picked === void 0) return CANCELLED;
|
|
22
|
+
agents = picked;
|
|
23
|
+
}
|
|
24
|
+
return runSkills({
|
|
25
|
+
cwd: ctx.cwd,
|
|
26
|
+
action,
|
|
27
|
+
agents,
|
|
28
|
+
check
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
const install = defineLeaf({
|
|
32
|
+
flags: {
|
|
33
|
+
...forFlag,
|
|
34
|
+
...checkFlag
|
|
35
|
+
},
|
|
36
|
+
run: (ctx, { flags }) => installTo(ctx, "install", flags.for, flags.check)
|
|
37
|
+
});
|
|
38
|
+
const update = defineLeaf({
|
|
39
|
+
flags: { ...forFlag },
|
|
40
|
+
run: (ctx, { flags }) => installTo(ctx, "update", flags.for, false)
|
|
41
|
+
});
|
|
42
|
+
const list = defineLeaf({
|
|
43
|
+
flags: {},
|
|
44
|
+
run: (ctx) => runSkills({
|
|
45
|
+
cwd: ctx.cwd,
|
|
46
|
+
action: "list",
|
|
47
|
+
agents: []
|
|
48
|
+
})
|
|
49
|
+
});
|
|
50
|
+
//#endregion
|
|
51
|
+
export { install, list, update };
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
import { t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
+
import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
|
|
3
|
+
import { n as isForbiddenKey } from "./paths-DXSHAMIa.js";
|
|
4
|
+
import { c as isConditionRef, i as resolveConditionRef } from "./refs-K6eWUJ0H.js";
|
|
5
|
+
import { l as isRfc3339, m as rfc3339, p as nowSeconds } from "./time-DkWjdL98.js";
|
|
6
|
+
import { d as scopeList } from "./scopes-CUPSjo9q.js";
|
|
7
|
+
import { _ as listPlans, v as listRoles } from "./grantee-Cn1HyUsI.js";
|
|
8
|
+
import { i as wireValidity } from "./validity-CZ7-y0Cj.js";
|
|
9
|
+
import { m as tenantsOf } from "./tenancy-DN2QAx9z.js";
|
|
10
|
+
import { n as toWireDelegation } from "./wire-delegation-Cv3W2eaM.js";
|
|
11
|
+
//#region src/conditions/bind.ts
|
|
12
|
+
function isPrimitive(value) {
|
|
13
|
+
return typeof value === "string" || typeof value === "number" || typeof value === "boolean";
|
|
14
|
+
}
|
|
15
|
+
const ALWAYS = {
|
|
16
|
+
op: "eq",
|
|
17
|
+
field: "_",
|
|
18
|
+
value: true
|
|
19
|
+
};
|
|
20
|
+
const NEVER = {
|
|
21
|
+
op: "or",
|
|
22
|
+
conditions: []
|
|
23
|
+
};
|
|
24
|
+
function bindValue(value, subject, only) {
|
|
25
|
+
if (isConditionRef(value) && only !== void 0 && !only(value.ref)) return value;
|
|
26
|
+
if (isConditionRef(value)) {
|
|
27
|
+
const resolved = resolveConditionRef(value.ref, subject);
|
|
28
|
+
if (Array.isArray(resolved)) return resolved.filter((item) => isPrimitive(item));
|
|
29
|
+
return isPrimitive(resolved) ? resolved : null;
|
|
30
|
+
}
|
|
31
|
+
if (Array.isArray(value)) return value.map((item) => bindValue(item, subject, only));
|
|
32
|
+
return value;
|
|
33
|
+
}
|
|
34
|
+
function bindArg(arg, subject, only) {
|
|
35
|
+
return arg !== null && typeof arg === "object" && "field" in arg && !isConditionRef(arg) ? arg : bindValue(arg, subject, only);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Replaces every `principal.*` / `context.*` ref with the subject's value, and
|
|
39
|
+
* a `liveSession` node with a constant, so a `where()` result compiles the
|
|
40
|
+
* same without the subject. A ref the subject
|
|
41
|
+
* does not hold binds to `null` (or `[]` in a list), which never matches, as
|
|
42
|
+
* in `evaluateCondition`. With `only`, refs it rejects stay refs.
|
|
43
|
+
*/
|
|
44
|
+
function bindConditionRefs(condition, subject, only) {
|
|
45
|
+
switch (condition.op) {
|
|
46
|
+
case "and":
|
|
47
|
+
case "or": return {
|
|
48
|
+
op: condition.op,
|
|
49
|
+
conditions: condition.conditions.map((child) => bindConditionRefs(child, subject, only))
|
|
50
|
+
};
|
|
51
|
+
case "not": return {
|
|
52
|
+
op: "not",
|
|
53
|
+
condition: bindConditionRefs(condition.condition, subject, only)
|
|
54
|
+
};
|
|
55
|
+
case "in":
|
|
56
|
+
case "notIn": {
|
|
57
|
+
const value = condition.value;
|
|
58
|
+
if (isConditionRef(value) && only !== void 0 && !only(value.ref)) return condition;
|
|
59
|
+
const bound = bindValue(value, subject, only);
|
|
60
|
+
return {
|
|
61
|
+
...condition,
|
|
62
|
+
value: Array.isArray(bound) ? bound : []
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
case "eq":
|
|
66
|
+
case "ne":
|
|
67
|
+
case "gt":
|
|
68
|
+
case "gte":
|
|
69
|
+
case "lt":
|
|
70
|
+
case "lte":
|
|
71
|
+
case "contains": return {
|
|
72
|
+
...condition,
|
|
73
|
+
value: bindValue(condition.value, subject, only)
|
|
74
|
+
};
|
|
75
|
+
case "sqlFunction": return {
|
|
76
|
+
...condition,
|
|
77
|
+
args: condition.args.map((arg) => bindArg(arg, subject, only)),
|
|
78
|
+
twin: bindConditionRefs(condition.twin, subject, only)
|
|
79
|
+
};
|
|
80
|
+
case "liveSession": return subject.liveSession === true ? ALWAYS : NEVER;
|
|
81
|
+
case "isNull":
|
|
82
|
+
case "memberOf":
|
|
83
|
+
case "related":
|
|
84
|
+
case "opaque": return condition;
|
|
85
|
+
default: return condition;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//#endregion
|
|
89
|
+
//#region src/core/snapshot.ts
|
|
90
|
+
function plainPermission(leaf) {
|
|
91
|
+
return {
|
|
92
|
+
key: leaf.key,
|
|
93
|
+
scope: leaf.scope,
|
|
94
|
+
resource: leaf.resource,
|
|
95
|
+
action: leaf.action,
|
|
96
|
+
meta: leaf.meta,
|
|
97
|
+
kind: leaf.kind
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
function plainRole(leaf) {
|
|
101
|
+
return compact({
|
|
102
|
+
key: leaf.key,
|
|
103
|
+
on: leaf.on,
|
|
104
|
+
assignable: leaf.assignable,
|
|
105
|
+
meta: leaf.meta,
|
|
106
|
+
kind: leaf.kind
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
function plainPlan(leaf) {
|
|
110
|
+
return {
|
|
111
|
+
key: leaf.key,
|
|
112
|
+
meta: leaf.meta,
|
|
113
|
+
kind: leaf.kind
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
function snapshotGrant(grant, membership) {
|
|
117
|
+
const scope = grant.scope === "global" ? void 0 : typeof grant.scope === "string" ? grant.scope : { resource: grant.scope.resource };
|
|
118
|
+
const entry = compact({
|
|
119
|
+
permission: grant.permission.key,
|
|
120
|
+
effect: grant.effect,
|
|
121
|
+
role: grant.role,
|
|
122
|
+
to: grant.to,
|
|
123
|
+
where: grant.portable ? grant.where : void 0,
|
|
124
|
+
check: grant.portable ? grant.check : void 0,
|
|
125
|
+
approval: grant.approval,
|
|
126
|
+
scope,
|
|
127
|
+
membership,
|
|
128
|
+
portable: grant.portable ? void 0 : false,
|
|
129
|
+
fields: grant.fields,
|
|
130
|
+
validity: wireValidity(grant.validity),
|
|
131
|
+
name: grant.name,
|
|
132
|
+
meta: grant.meta,
|
|
133
|
+
obligations: grant.obligations
|
|
134
|
+
});
|
|
135
|
+
return freezeDeep(entry);
|
|
136
|
+
}
|
|
137
|
+
const CARRIED = /* @__PURE__ */ new Set([
|
|
138
|
+
"id",
|
|
139
|
+
"roles",
|
|
140
|
+
"plans",
|
|
141
|
+
"tenant",
|
|
142
|
+
"memberships"
|
|
143
|
+
]);
|
|
144
|
+
/** Principal refs the snapshot principal does not carry (`claims`, `teamIds`, …) are bound to the subject's values. */
|
|
145
|
+
function isClaimRef(ref) {
|
|
146
|
+
const [root, head] = ref.split(".", 2);
|
|
147
|
+
return root === "principal" && !CARRIED.has(String(head));
|
|
148
|
+
}
|
|
149
|
+
function bindClaims(grant, subject) {
|
|
150
|
+
if (grant.where === void 0 && grant.check === void 0) return grant;
|
|
151
|
+
return freezeDeep(compact({
|
|
152
|
+
...grant,
|
|
153
|
+
where: grant.where === void 0 ? void 0 : bindConditionRefs(grant.where, subject, isClaimRef),
|
|
154
|
+
check: grant.check === void 0 ? void 0 : bindConditionRefs(grant.check, subject, isClaimRef)
|
|
155
|
+
}));
|
|
156
|
+
}
|
|
157
|
+
function notEntitledOf(items) {
|
|
158
|
+
const seen = /* @__PURE__ */ new Map();
|
|
159
|
+
for (const { grant } of items) {
|
|
160
|
+
const key = `${grant.permission.key}\u0000${grant.role ?? ""}`;
|
|
161
|
+
if (!seen.has(key)) seen.set(key, {
|
|
162
|
+
permission: grant.permission.key,
|
|
163
|
+
role: grant.role,
|
|
164
|
+
to: grant.to
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
return seen.size === 0 ? void 0 : [...seen.values()];
|
|
168
|
+
}
|
|
169
|
+
function buildSnapshot(input) {
|
|
170
|
+
const now = input.now ?? nowSeconds();
|
|
171
|
+
const principal = input.subject.principal;
|
|
172
|
+
const allTenants = tenantsOf(principal, scopeList(input.scopes));
|
|
173
|
+
const tenants = input.tenants === "all" ? allTenants : principal?.tenant === void 0 ? [] : [principal.tenant];
|
|
174
|
+
const include = input.include;
|
|
175
|
+
const included = (permission) => include === void 0 || include.length === 0 || include.some((prefix) => permission.key === prefix || permission.key.startsWith(`${prefix}.`) || permission.resource === prefix);
|
|
176
|
+
const grants = input.grants.filter((item) => included(item.grant.permission)).map((item) => bindClaims(snapshotGrant(item.grant, item.membership), input.subject));
|
|
177
|
+
const ids = {};
|
|
178
|
+
for (const item of input.grants) {
|
|
179
|
+
const name = item.grant.permission.resource;
|
|
180
|
+
const field = input.idOf?.(name);
|
|
181
|
+
if (field !== void 0 && field !== "id" && included(item.grant.permission)) ids[name] = field;
|
|
182
|
+
}
|
|
183
|
+
const assignableFor = input.assignable;
|
|
184
|
+
const assignable = assignableFor === void 0 ? [] : tenants.map((tenant) => {
|
|
185
|
+
const entry = assignableFor(tenant);
|
|
186
|
+
const permissions = entry.permissions.filter(included).map(plainPermission);
|
|
187
|
+
if (entry.levels === void 0) return {
|
|
188
|
+
...entry,
|
|
189
|
+
permissions
|
|
190
|
+
};
|
|
191
|
+
const keys = new Set(permissions.map((leaf) => leaf.key));
|
|
192
|
+
const levels = Object.fromEntries(Object.entries(entry.levels).filter(([key]) => keys.has(key)));
|
|
193
|
+
return compact({
|
|
194
|
+
...entry,
|
|
195
|
+
permissions,
|
|
196
|
+
levels: Object.keys(levels).length === 0 ? void 0 : levels
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
return freezeDeep(compact({
|
|
200
|
+
v: 1,
|
|
201
|
+
issuedAt: rfc3339(now),
|
|
202
|
+
subject: compact({
|
|
203
|
+
principal: principal === null ? null : compact({
|
|
204
|
+
id: principal.id,
|
|
205
|
+
roles: principal.roles ?? [],
|
|
206
|
+
plans: principal.plans,
|
|
207
|
+
tenant: principal.tenant,
|
|
208
|
+
memberships: principal.memberships
|
|
209
|
+
}),
|
|
210
|
+
delegation: toWireDelegation(snapshotDelegation(input.subject, input.delegated !== void 0)),
|
|
211
|
+
context: input.subject.context
|
|
212
|
+
}),
|
|
213
|
+
roles: input.roles,
|
|
214
|
+
audiences: input.audiences,
|
|
215
|
+
grants,
|
|
216
|
+
tenants,
|
|
217
|
+
include,
|
|
218
|
+
simulated: input.simulated === true ? true : void 0,
|
|
219
|
+
expiresAt: input.subject.expiresAt === void 0 ? void 0 : rfc3339(input.subject.expiresAt),
|
|
220
|
+
scopes: input.scopes,
|
|
221
|
+
ids: Object.keys(ids).length === 0 ? void 0 : ids,
|
|
222
|
+
assignable: assignable.length > 0 ? assignable : void 0,
|
|
223
|
+
delegated: input.delegated === void 0 ? void 0 : [...input.delegated].toSorted(),
|
|
224
|
+
notEntitled: notEntitledOf((input.notEntitled ?? []).filter((item) => included(item.grant.permission))),
|
|
225
|
+
vocabulary: input.vocabulary === void 0 ? void 0 : compact({
|
|
226
|
+
roles: listRoles(input.vocabulary.roles).length === 0 ? void 0 : Object.fromEntries(listRoles(input.vocabulary.roles).map((leaf) => [leaf.key, plainRole(leaf)])),
|
|
227
|
+
plans: listPlans(input.vocabulary.plans).length === 0 ? void 0 : Object.fromEntries(listPlans(input.vocabulary.plans).map((leaf) => [leaf.key, plainPlan(leaf)]))
|
|
228
|
+
})
|
|
229
|
+
}));
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* The token delegation as the client sees it. An actor with no token
|
|
233
|
+
* delegation gets an empty `scopes` list so the client ceiling agrees with
|
|
234
|
+
* `no-delegation`, unless a policy delegation applies (`delegated`), which
|
|
235
|
+
* then is the ceiling.
|
|
236
|
+
*/
|
|
237
|
+
function snapshotDelegation(subject, delegated) {
|
|
238
|
+
const delegation = subject.delegation;
|
|
239
|
+
if (subject.actor === void 0 || delegated) return delegation;
|
|
240
|
+
if (delegation?.scopes === void 0 && delegation?.authorizationDetails === void 0 && delegation?.access === void 0) return {
|
|
241
|
+
...delegation,
|
|
242
|
+
scopes: []
|
|
243
|
+
};
|
|
244
|
+
return delegation;
|
|
245
|
+
}
|
|
246
|
+
function rejectUnsafe(value, path) {
|
|
247
|
+
if (value === null || typeof value !== "object") return;
|
|
248
|
+
if (Array.isArray(value)) {
|
|
249
|
+
for (const [index, item] of value.entries()) rejectUnsafe(item, `${path}[${index}]`);
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
for (const key of Object.keys(value)) {
|
|
253
|
+
if (isForbiddenKey(key)) throw new Error(`PermDock: unsafe snapshot key '${key}' at ${path}`);
|
|
254
|
+
rejectUnsafe(value[key], `${path}.${key}`);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
function parseSnapshot(json) {
|
|
258
|
+
const input = typeof json === "string" ? JSON.parse(json) : json;
|
|
259
|
+
if (input === null || typeof input !== "object" || Array.isArray(input)) throw new Error("PermDock: snapshot must be an object");
|
|
260
|
+
const value = typeof json === "string" || Object.isFrozen(input) ? input : JSON.parse(JSON.stringify(input));
|
|
261
|
+
rejectUnsafe(value, "$");
|
|
262
|
+
const record = value;
|
|
263
|
+
const version = record["v"];
|
|
264
|
+
if (version !== 1) throw new Error(`PermDock: unsupported snapshot version '${String(version)}'`);
|
|
265
|
+
if (!isRfc3339(record["issuedAt"]) || record["expiresAt"] !== void 0 && !isRfc3339(record["expiresAt"])) throw new Error("PermDock: snapshot times must be RFC 3339");
|
|
266
|
+
return freezeDeep(value);
|
|
267
|
+
}
|
|
268
|
+
//#endregion
|
|
269
|
+
export { bindConditionRefs as i, parseSnapshot as n, snapshotGrant as r, buildSnapshot as t };
|
|
@@ -1,5 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { g as secondsOf, p as nowSeconds } from "./time-DkWjdL98.js";
|
|
2
|
+
import { n as payloadDigest } from "./token-BLZcjQgt.js";
|
|
2
3
|
//#region src/core/snapshot-cache.ts
|
|
4
|
+
/** Seconds since the epoch of a NumericDate or an RFC 3339 instant. */
|
|
5
|
+
function epochSeconds(value) {
|
|
6
|
+
return typeof value === "number" ? value : secondsOf(value);
|
|
7
|
+
}
|
|
3
8
|
/**
|
|
4
9
|
* `{ stale }` in seconds: `max` when the value never expires, otherwise the seconds left, clamped
|
|
5
10
|
* to `[min, max]`. A value with less than `min` seconds left gets its real remainder, so Next.js
|
|
@@ -8,10 +13,11 @@ import { n as payloadDigest } from "./token-Bx9qy30p.js";
|
|
|
8
13
|
function cacheLifeFor(value, options = {}) {
|
|
9
14
|
const min = options.min ?? 30;
|
|
10
15
|
const max = Math.max(options.max ?? 300, min);
|
|
11
|
-
const expiresAt = value?.expiresAt;
|
|
12
|
-
if (expiresAt === void 0
|
|
13
|
-
const
|
|
14
|
-
const
|
|
16
|
+
const expiresAt = epochSeconds(value?.expiresAt);
|
|
17
|
+
if (expiresAt === void 0) return { stale: max };
|
|
18
|
+
const issued = epochSeconds(value?.issuedAt);
|
|
19
|
+
const issuedAt = issued !== void 0 && issued > 0 ? issued : void 0;
|
|
20
|
+
const now = options.now === void 0 ? issuedAt ?? nowSeconds() : nowSeconds(options.now);
|
|
15
21
|
const remaining = Math.floor(expiresAt - now);
|
|
16
22
|
if (remaining < min) return { stale: Math.max(0, remaining) };
|
|
17
23
|
return { stale: Math.min(max, remaining) };
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Rt as Instant, Vt as Snapshot } from "./policy-types-DzwivBgR.js";
|
|
2
2
|
//#region src/core/snapshot-cache.d.ts
|
|
3
3
|
type CacheLifeForOptions = {
|
|
4
4
|
/** Lower bound in seconds. Next.js includes a private entry in per-link prefetches from 30. */
|
|
5
5
|
readonly min?: number;
|
|
6
6
|
/** Upper bound in seconds. Next.js keeps a per-session App Shell entry from 300. */
|
|
7
7
|
readonly max?: number;
|
|
8
|
-
/**
|
|
9
|
-
readonly now?:
|
|
8
|
+
/** Defaults to the snapshot's `issuedAt`, then the clock. */
|
|
9
|
+
readonly now?: Instant;
|
|
10
10
|
};
|
|
11
11
|
/**
|
|
12
12
|
* `{ stale }` in seconds: `max` when the value never expires, otherwise the seconds left, clamped
|
|
@@ -14,8 +14,10 @@ type CacheLifeForOptions = {
|
|
|
14
14
|
* leaves it out of prefetches and an HTTP cache does not serve it past `expiresAt`.
|
|
15
15
|
*/
|
|
16
16
|
declare function cacheLifeFor(value: {
|
|
17
|
-
|
|
18
|
-
readonly
|
|
17
|
+
/** RFC 3339, or a NumericDate. */
|
|
18
|
+
readonly expiresAt?: number | string | null;
|
|
19
|
+
/** RFC 3339, or a NumericDate. */
|
|
20
|
+
readonly issuedAt?: number | string;
|
|
19
21
|
} | null, options?: CacheLifeForOptions): {
|
|
20
22
|
readonly stale: number;
|
|
21
23
|
};
|