@vellumai/credential-executor 0.4.55 → 0.4.56
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/Dockerfile +6 -2
- package/node_modules/@vellumai/ces-contracts/bun.lock +29 -0
- package/node_modules/@vellumai/ces-contracts/package.json +24 -0
- package/node_modules/@vellumai/ces-contracts/src/__tests__/contracts.test.ts +293 -0
- package/node_modules/@vellumai/ces-contracts/src/__tests__/grants.test.ts +686 -0
- package/node_modules/@vellumai/ces-contracts/src/error.ts +25 -0
- package/node_modules/@vellumai/ces-contracts/src/grants.ts +184 -0
- package/node_modules/@vellumai/ces-contracts/src/handles.ts +213 -0
- package/node_modules/@vellumai/ces-contracts/src/index.ts +147 -0
- package/node_modules/@vellumai/ces-contracts/src/rendering.ts +135 -0
- package/node_modules/@vellumai/ces-contracts/src/rpc.ts +511 -0
- package/node_modules/@vellumai/ces-contracts/tsconfig.json +20 -0
- package/node_modules/@vellumai/credential-storage/bun.lock +24 -0
- package/node_modules/@vellumai/credential-storage/package.json +17 -0
- package/node_modules/@vellumai/credential-storage/src/__tests__/package-boundary.test.ts +151 -0
- package/node_modules/@vellumai/credential-storage/src/index.ts +213 -0
- package/node_modules/@vellumai/credential-storage/src/oauth-runtime.ts +340 -0
- package/node_modules/@vellumai/credential-storage/src/static-credentials.ts +365 -0
- package/node_modules/@vellumai/credential-storage/tsconfig.json +20 -0
- package/node_modules/@vellumai/egress-proxy/bun.lock +24 -0
- package/node_modules/@vellumai/egress-proxy/package.json +17 -0
- package/node_modules/@vellumai/egress-proxy/src/__tests__/package-boundary.test.ts +131 -0
- package/node_modules/@vellumai/egress-proxy/src/index.ts +54 -0
- package/node_modules/@vellumai/egress-proxy/src/session-core.ts +466 -0
- package/node_modules/@vellumai/egress-proxy/src/types.ts +227 -0
- package/node_modules/@vellumai/egress-proxy/tsconfig.json +20 -0
- package/node_modules/zod/LICENSE +21 -0
- package/node_modules/zod/README.md +208 -0
- package/node_modules/zod/index.cjs +33 -0
- package/node_modules/zod/index.d.cts +4 -0
- package/node_modules/zod/index.d.ts +4 -0
- package/node_modules/zod/index.js +4 -0
- package/node_modules/zod/locales/index.cjs +17 -0
- package/node_modules/zod/locales/index.d.cts +1 -0
- package/node_modules/zod/locales/index.d.ts +1 -0
- package/node_modules/zod/locales/index.js +1 -0
- package/node_modules/zod/locales/package.json +6 -0
- package/node_modules/zod/mini/index.cjs +32 -0
- package/node_modules/zod/mini/index.d.cts +3 -0
- package/node_modules/zod/mini/index.d.ts +3 -0
- package/node_modules/zod/mini/index.js +3 -0
- package/node_modules/zod/mini/package.json +6 -0
- package/node_modules/zod/package.json +135 -0
- package/node_modules/zod/src/index.ts +4 -0
- package/node_modules/zod/src/locales/index.ts +1 -0
- package/node_modules/zod/src/mini/index.ts +3 -0
- package/node_modules/zod/src/v3/ZodError.ts +330 -0
- package/node_modules/zod/src/v3/benchmarks/datetime.ts +58 -0
- package/node_modules/zod/src/v3/benchmarks/discriminatedUnion.ts +80 -0
- package/node_modules/zod/src/v3/benchmarks/index.ts +59 -0
- package/node_modules/zod/src/v3/benchmarks/ipv4.ts +57 -0
- package/node_modules/zod/src/v3/benchmarks/object.ts +69 -0
- package/node_modules/zod/src/v3/benchmarks/primitives.ts +162 -0
- package/node_modules/zod/src/v3/benchmarks/realworld.ts +63 -0
- package/node_modules/zod/src/v3/benchmarks/string.ts +55 -0
- package/node_modules/zod/src/v3/benchmarks/union.ts +80 -0
- package/node_modules/zod/src/v3/errors.ts +13 -0
- package/node_modules/zod/src/v3/external.ts +6 -0
- package/node_modules/zod/src/v3/helpers/enumUtil.ts +17 -0
- package/node_modules/zod/src/v3/helpers/errorUtil.ts +8 -0
- package/node_modules/zod/src/v3/helpers/parseUtil.ts +176 -0
- package/node_modules/zod/src/v3/helpers/partialUtil.ts +34 -0
- package/node_modules/zod/src/v3/helpers/typeAliases.ts +2 -0
- package/node_modules/zod/src/v3/helpers/util.ts +224 -0
- package/node_modules/zod/src/v3/index.ts +4 -0
- package/node_modules/zod/src/v3/locales/en.ts +124 -0
- package/node_modules/zod/src/v3/standard-schema.ts +113 -0
- package/node_modules/zod/src/v3/tests/Mocker.ts +54 -0
- package/node_modules/zod/src/v3/tests/all-errors.test.ts +157 -0
- package/node_modules/zod/src/v3/tests/anyunknown.test.ts +28 -0
- package/node_modules/zod/src/v3/tests/array.test.ts +71 -0
- package/node_modules/zod/src/v3/tests/async-parsing.test.ts +388 -0
- package/node_modules/zod/src/v3/tests/async-refinements.test.ts +46 -0
- package/node_modules/zod/src/v3/tests/base.test.ts +29 -0
- package/node_modules/zod/src/v3/tests/bigint.test.ts +55 -0
- package/node_modules/zod/src/v3/tests/branded.test.ts +53 -0
- package/node_modules/zod/src/v3/tests/catch.test.ts +220 -0
- package/node_modules/zod/src/v3/tests/coerce.test.ts +133 -0
- package/node_modules/zod/src/v3/tests/complex.test.ts +70 -0
- package/node_modules/zod/src/v3/tests/custom.test.ts +31 -0
- package/node_modules/zod/src/v3/tests/date.test.ts +32 -0
- package/node_modules/zod/src/v3/tests/deepmasking.test.ts +186 -0
- package/node_modules/zod/src/v3/tests/default.test.ts +112 -0
- package/node_modules/zod/src/v3/tests/description.test.ts +33 -0
- package/node_modules/zod/src/v3/tests/discriminated-unions.test.ts +315 -0
- package/node_modules/zod/src/v3/tests/enum.test.ts +80 -0
- package/node_modules/zod/src/v3/tests/error.test.ts +551 -0
- package/node_modules/zod/src/v3/tests/firstparty.test.ts +87 -0
- package/node_modules/zod/src/v3/tests/firstpartyschematypes.test.ts +21 -0
- package/node_modules/zod/src/v3/tests/function.test.ts +261 -0
- package/node_modules/zod/src/v3/tests/generics.test.ts +48 -0
- package/node_modules/zod/src/v3/tests/instanceof.test.ts +37 -0
- package/node_modules/zod/src/v3/tests/intersection.test.ts +110 -0
- package/node_modules/zod/src/v3/tests/language-server.source.ts +76 -0
- package/node_modules/zod/src/v3/tests/language-server.test.ts +207 -0
- package/node_modules/zod/src/v3/tests/literal.test.ts +36 -0
- package/node_modules/zod/src/v3/tests/map.test.ts +110 -0
- package/node_modules/zod/src/v3/tests/masking.test.ts +4 -0
- package/node_modules/zod/src/v3/tests/mocker.test.ts +19 -0
- package/node_modules/zod/src/v3/tests/nan.test.ts +24 -0
- package/node_modules/zod/src/v3/tests/nativeEnum.test.ts +87 -0
- package/node_modules/zod/src/v3/tests/nullable.test.ts +42 -0
- package/node_modules/zod/src/v3/tests/number.test.ts +176 -0
- package/node_modules/zod/src/v3/tests/object-augmentation.test.ts +29 -0
- package/node_modules/zod/src/v3/tests/object-in-es5-env.test.ts +29 -0
- package/node_modules/zod/src/v3/tests/object.test.ts +434 -0
- package/node_modules/zod/src/v3/tests/optional.test.ts +42 -0
- package/node_modules/zod/src/v3/tests/parseUtil.test.ts +23 -0
- package/node_modules/zod/src/v3/tests/parser.test.ts +41 -0
- package/node_modules/zod/src/v3/tests/partials.test.ts +243 -0
- package/node_modules/zod/src/v3/tests/pickomit.test.ts +111 -0
- package/node_modules/zod/src/v3/tests/pipeline.test.ts +29 -0
- package/node_modules/zod/src/v3/tests/preprocess.test.ts +186 -0
- package/node_modules/zod/src/v3/tests/primitive.test.ts +440 -0
- package/node_modules/zod/src/v3/tests/promise.test.ts +90 -0
- package/node_modules/zod/src/v3/tests/readonly.test.ts +194 -0
- package/node_modules/zod/src/v3/tests/record.test.ts +171 -0
- package/node_modules/zod/src/v3/tests/recursive.test.ts +197 -0
- package/node_modules/zod/src/v3/tests/refine.test.ts +313 -0
- package/node_modules/zod/src/v3/tests/safeparse.test.ts +27 -0
- package/node_modules/zod/src/v3/tests/set.test.ts +142 -0
- package/node_modules/zod/src/v3/tests/standard-schema.test.ts +83 -0
- package/node_modules/zod/src/v3/tests/string.test.ts +916 -0
- package/node_modules/zod/src/v3/tests/transformer.test.ts +233 -0
- package/node_modules/zod/src/v3/tests/tuple.test.ts +90 -0
- package/node_modules/zod/src/v3/tests/unions.test.ts +57 -0
- package/node_modules/zod/src/v3/tests/validations.test.ts +133 -0
- package/node_modules/zod/src/v3/tests/void.test.ts +15 -0
- package/node_modules/zod/src/v3/types.ts +5138 -0
- package/node_modules/zod/src/v4/classic/checks.ts +32 -0
- package/node_modules/zod/src/v4/classic/coerce.ts +27 -0
- package/node_modules/zod/src/v4/classic/compat.ts +70 -0
- package/node_modules/zod/src/v4/classic/errors.ts +82 -0
- package/node_modules/zod/src/v4/classic/external.ts +51 -0
- package/node_modules/zod/src/v4/classic/from-json-schema.ts +643 -0
- package/node_modules/zod/src/v4/classic/index.ts +5 -0
- package/node_modules/zod/src/v4/classic/iso.ts +90 -0
- package/node_modules/zod/src/v4/classic/parse.ts +82 -0
- package/node_modules/zod/src/v4/classic/schemas.ts +2409 -0
- package/node_modules/zod/src/v4/classic/tests/anyunknown.test.ts +26 -0
- package/node_modules/zod/src/v4/classic/tests/apply.test.ts +59 -0
- package/node_modules/zod/src/v4/classic/tests/array.test.ts +264 -0
- package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +210 -0
- package/node_modules/zod/src/v4/classic/tests/async-parsing.test.ts +381 -0
- package/node_modules/zod/src/v4/classic/tests/async-refinements.test.ts +68 -0
- package/node_modules/zod/src/v4/classic/tests/base.test.ts +7 -0
- package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +54 -0
- package/node_modules/zod/src/v4/classic/tests/brand.test.ts +106 -0
- package/node_modules/zod/src/v4/classic/tests/catch.test.ts +276 -0
- package/node_modules/zod/src/v4/classic/tests/coalesce.test.ts +20 -0
- package/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +573 -0
- package/node_modules/zod/src/v4/classic/tests/codec.test.ts +562 -0
- package/node_modules/zod/src/v4/classic/tests/coerce.test.ts +160 -0
- package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +374 -0
- package/node_modules/zod/src/v4/classic/tests/custom.test.ts +40 -0
- package/node_modules/zod/src/v4/classic/tests/date.test.ts +62 -0
- package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +302 -0
- package/node_modules/zod/src/v4/classic/tests/default.test.ts +365 -0
- package/node_modules/zod/src/v4/classic/tests/describe-meta-checks.test.ts +27 -0
- package/node_modules/zod/src/v4/classic/tests/description.test.ts +32 -0
- package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +661 -0
- package/node_modules/zod/src/v4/classic/tests/enum.test.ts +285 -0
- package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +595 -0
- package/node_modules/zod/src/v4/classic/tests/error.test.ts +711 -0
- package/node_modules/zod/src/v4/classic/tests/file.test.ts +96 -0
- package/node_modules/zod/src/v4/classic/tests/firstparty.test.ts +179 -0
- package/node_modules/zod/src/v4/classic/tests/fix-json-issue.test.ts +26 -0
- package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +734 -0
- package/node_modules/zod/src/v4/classic/tests/function.test.ts +360 -0
- package/node_modules/zod/src/v4/classic/tests/generics.test.ts +72 -0
- package/node_modules/zod/src/v4/classic/tests/hash.test.ts +68 -0
- package/node_modules/zod/src/v4/classic/tests/index.test.ts +939 -0
- package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +60 -0
- package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +198 -0
- package/node_modules/zod/src/v4/classic/tests/json.test.ts +109 -0
- package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +227 -0
- package/node_modules/zod/src/v4/classic/tests/literal.test.ts +117 -0
- package/node_modules/zod/src/v4/classic/tests/map.test.ts +330 -0
- package/node_modules/zod/src/v4/classic/tests/nan.test.ts +21 -0
- package/node_modules/zod/src/v4/classic/tests/nested-refine.test.ts +168 -0
- package/node_modules/zod/src/v4/classic/tests/nonoptional.test.ts +101 -0
- package/node_modules/zod/src/v4/classic/tests/nullable.test.ts +22 -0
- package/node_modules/zod/src/v4/classic/tests/number.test.ts +270 -0
- package/node_modules/zod/src/v4/classic/tests/object.test.ts +640 -0
- package/node_modules/zod/src/v4/classic/tests/optional.test.ts +223 -0
- package/node_modules/zod/src/v4/classic/tests/partial.test.ts +427 -0
- package/node_modules/zod/src/v4/classic/tests/pickomit.test.ts +211 -0
- package/node_modules/zod/src/v4/classic/tests/pipe.test.ts +101 -0
- package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +74 -0
- package/node_modules/zod/src/v4/classic/tests/preprocess.test.ts +282 -0
- package/node_modules/zod/src/v4/classic/tests/primitive.test.ts +175 -0
- package/node_modules/zod/src/v4/classic/tests/promise.test.ts +81 -0
- package/node_modules/zod/src/v4/classic/tests/prototypes.test.ts +23 -0
- package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +252 -0
- package/node_modules/zod/src/v4/classic/tests/record.test.ts +632 -0
- package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +582 -0
- package/node_modules/zod/src/v4/classic/tests/refine.test.ts +570 -0
- package/node_modules/zod/src/v4/classic/tests/registries.test.ts +243 -0
- package/node_modules/zod/src/v4/classic/tests/set.test.ts +181 -0
- package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +134 -0
- package/node_modules/zod/src/v4/classic/tests/string-formats.test.ts +125 -0
- package/node_modules/zod/src/v4/classic/tests/string.test.ts +1175 -0
- package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +106 -0
- package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +771 -0
- package/node_modules/zod/src/v4/classic/tests/to-json-schema-methods.test.ts +438 -0
- package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +2990 -0
- package/node_modules/zod/src/v4/classic/tests/transform.test.ts +361 -0
- package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +183 -0
- package/node_modules/zod/src/v4/classic/tests/union.test.ts +219 -0
- package/node_modules/zod/src/v4/classic/tests/url.test.ts +13 -0
- package/node_modules/zod/src/v4/classic/tests/validations.test.ts +283 -0
- package/node_modules/zod/src/v4/classic/tests/void.test.ts +12 -0
- package/node_modules/zod/src/v4/core/api.ts +1798 -0
- package/node_modules/zod/src/v4/core/checks.ts +1293 -0
- package/node_modules/zod/src/v4/core/config.ts +15 -0
- package/node_modules/zod/src/v4/core/core.ts +138 -0
- package/node_modules/zod/src/v4/core/doc.ts +44 -0
- package/node_modules/zod/src/v4/core/errors.ts +448 -0
- package/node_modules/zod/src/v4/core/index.ts +16 -0
- package/node_modules/zod/src/v4/core/json-schema-generator.ts +126 -0
- package/node_modules/zod/src/v4/core/json-schema-processors.ts +667 -0
- package/node_modules/zod/src/v4/core/json-schema.ts +147 -0
- package/node_modules/zod/src/v4/core/parse.ts +195 -0
- package/node_modules/zod/src/v4/core/regexes.ts +183 -0
- package/node_modules/zod/src/v4/core/registries.ts +105 -0
- package/node_modules/zod/src/v4/core/schemas.ts +4538 -0
- package/node_modules/zod/src/v4/core/standard-schema.ts +159 -0
- package/node_modules/zod/src/v4/core/tests/extend.test.ts +59 -0
- package/node_modules/zod/src/v4/core/tests/index.test.ts +46 -0
- package/node_modules/zod/src/v4/core/tests/locales/be.test.ts +124 -0
- package/node_modules/zod/src/v4/core/tests/locales/en.test.ts +22 -0
- package/node_modules/zod/src/v4/core/tests/locales/es.test.ts +181 -0
- package/node_modules/zod/src/v4/core/tests/locales/he.test.ts +379 -0
- package/node_modules/zod/src/v4/core/tests/locales/nl.test.ts +46 -0
- package/node_modules/zod/src/v4/core/tests/locales/ru.test.ts +128 -0
- package/node_modules/zod/src/v4/core/tests/locales/tr.test.ts +69 -0
- package/node_modules/zod/src/v4/core/tests/locales/uz.test.ts +83 -0
- package/node_modules/zod/src/v4/core/tests/record-constructor.test.ts +67 -0
- package/node_modules/zod/src/v4/core/tests/recursive-tuples.test.ts +45 -0
- package/node_modules/zod/src/v4/core/to-json-schema.ts +613 -0
- package/node_modules/zod/src/v4/core/util.ts +966 -0
- package/node_modules/zod/src/v4/core/versions.ts +5 -0
- package/node_modules/zod/src/v4/core/zsf.ts +323 -0
- package/node_modules/zod/src/v4/index.ts +4 -0
- package/node_modules/zod/src/v4/locales/ar.ts +115 -0
- package/node_modules/zod/src/v4/locales/az.ts +111 -0
- package/node_modules/zod/src/v4/locales/be.ts +176 -0
- package/node_modules/zod/src/v4/locales/bg.ts +128 -0
- package/node_modules/zod/src/v4/locales/ca.ts +116 -0
- package/node_modules/zod/src/v4/locales/cs.ts +118 -0
- package/node_modules/zod/src/v4/locales/da.ts +123 -0
- package/node_modules/zod/src/v4/locales/de.ts +116 -0
- package/node_modules/zod/src/v4/locales/en.ts +119 -0
- package/node_modules/zod/src/v4/locales/eo.ts +118 -0
- package/node_modules/zod/src/v4/locales/es.ts +141 -0
- package/node_modules/zod/src/v4/locales/fa.ts +126 -0
- package/node_modules/zod/src/v4/locales/fi.ts +121 -0
- package/node_modules/zod/src/v4/locales/fr-CA.ts +116 -0
- package/node_modules/zod/src/v4/locales/fr.ts +116 -0
- package/node_modules/zod/src/v4/locales/he.ts +246 -0
- package/node_modules/zod/src/v4/locales/hu.ts +117 -0
- package/node_modules/zod/src/v4/locales/hy.ts +164 -0
- package/node_modules/zod/src/v4/locales/id.ts +115 -0
- package/node_modules/zod/src/v4/locales/index.ts +49 -0
- package/node_modules/zod/src/v4/locales/is.ts +119 -0
- package/node_modules/zod/src/v4/locales/it.ts +116 -0
- package/node_modules/zod/src/v4/locales/ja.ts +114 -0
- package/node_modules/zod/src/v4/locales/ka.ts +123 -0
- package/node_modules/zod/src/v4/locales/kh.ts +7 -0
- package/node_modules/zod/src/v4/locales/km.ts +119 -0
- package/node_modules/zod/src/v4/locales/ko.ts +121 -0
- package/node_modules/zod/src/v4/locales/lt.ts +239 -0
- package/node_modules/zod/src/v4/locales/mk.ts +118 -0
- package/node_modules/zod/src/v4/locales/ms.ts +115 -0
- package/node_modules/zod/src/v4/locales/nl.ts +121 -0
- package/node_modules/zod/src/v4/locales/no.ts +116 -0
- package/node_modules/zod/src/v4/locales/ota.ts +117 -0
- package/node_modules/zod/src/v4/locales/pl.ts +118 -0
- package/node_modules/zod/src/v4/locales/ps.ts +126 -0
- package/node_modules/zod/src/v4/locales/pt.ts +116 -0
- package/node_modules/zod/src/v4/locales/ru.ts +176 -0
- package/node_modules/zod/src/v4/locales/sl.ts +118 -0
- package/node_modules/zod/src/v4/locales/sv.ts +119 -0
- package/node_modules/zod/src/v4/locales/ta.ts +118 -0
- package/node_modules/zod/src/v4/locales/th.ts +119 -0
- package/node_modules/zod/src/v4/locales/tr.ts +111 -0
- package/node_modules/zod/src/v4/locales/ua.ts +7 -0
- package/node_modules/zod/src/v4/locales/uk.ts +117 -0
- package/node_modules/zod/src/v4/locales/ur.ts +119 -0
- package/node_modules/zod/src/v4/locales/uz.ts +116 -0
- package/node_modules/zod/src/v4/locales/vi.ts +117 -0
- package/node_modules/zod/src/v4/locales/yo.ts +124 -0
- package/node_modules/zod/src/v4/locales/zh-CN.ts +116 -0
- package/node_modules/zod/src/v4/locales/zh-TW.ts +115 -0
- package/node_modules/zod/src/v4/mini/checks.ts +32 -0
- package/node_modules/zod/src/v4/mini/coerce.ts +27 -0
- package/node_modules/zod/src/v4/mini/external.ts +40 -0
- package/node_modules/zod/src/v4/mini/index.ts +3 -0
- package/node_modules/zod/src/v4/mini/iso.ts +66 -0
- package/node_modules/zod/src/v4/mini/parse.ts +14 -0
- package/node_modules/zod/src/v4/mini/schemas.ts +1916 -0
- package/node_modules/zod/src/v4/mini/tests/apply.test.ts +24 -0
- package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +129 -0
- package/node_modules/zod/src/v4/mini/tests/brand.test.ts +94 -0
- package/node_modules/zod/src/v4/mini/tests/checks.test.ts +144 -0
- package/node_modules/zod/src/v4/mini/tests/codec.test.ts +529 -0
- package/node_modules/zod/src/v4/mini/tests/computed.test.ts +36 -0
- package/node_modules/zod/src/v4/mini/tests/error.test.ts +22 -0
- package/node_modules/zod/src/v4/mini/tests/functions.test.ts +5 -0
- package/node_modules/zod/src/v4/mini/tests/index.test.ts +963 -0
- package/node_modules/zod/src/v4/mini/tests/number.test.ts +95 -0
- package/node_modules/zod/src/v4/mini/tests/object.test.ts +227 -0
- package/node_modules/zod/src/v4/mini/tests/prototypes.test.ts +43 -0
- package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +275 -0
- package/node_modules/zod/src/v4/mini/tests/standard-schema.test.ts +50 -0
- package/node_modules/zod/src/v4/mini/tests/string.test.ts +347 -0
- package/node_modules/zod/src/v4-mini/index.ts +3 -0
- package/node_modules/zod/v3/ZodError.cjs +138 -0
- package/node_modules/zod/v3/ZodError.d.cts +164 -0
- package/node_modules/zod/v3/ZodError.d.ts +164 -0
- package/node_modules/zod/v3/ZodError.js +133 -0
- package/node_modules/zod/v3/errors.cjs +17 -0
- package/node_modules/zod/v3/errors.d.cts +5 -0
- package/node_modules/zod/v3/errors.d.ts +5 -0
- package/node_modules/zod/v3/errors.js +9 -0
- package/node_modules/zod/v3/external.cjs +22 -0
- package/node_modules/zod/v3/external.d.cts +6 -0
- package/node_modules/zod/v3/external.d.ts +6 -0
- package/node_modules/zod/v3/external.js +6 -0
- package/node_modules/zod/v3/helpers/enumUtil.cjs +2 -0
- package/node_modules/zod/v3/helpers/enumUtil.d.cts +8 -0
- package/node_modules/zod/v3/helpers/enumUtil.d.ts +8 -0
- package/node_modules/zod/v3/helpers/enumUtil.js +1 -0
- package/node_modules/zod/v3/helpers/errorUtil.cjs +9 -0
- package/node_modules/zod/v3/helpers/errorUtil.d.cts +9 -0
- package/node_modules/zod/v3/helpers/errorUtil.d.ts +9 -0
- package/node_modules/zod/v3/helpers/errorUtil.js +6 -0
- package/node_modules/zod/v3/helpers/parseUtil.cjs +124 -0
- package/node_modules/zod/v3/helpers/parseUtil.d.cts +78 -0
- package/node_modules/zod/v3/helpers/parseUtil.d.ts +78 -0
- package/node_modules/zod/v3/helpers/parseUtil.js +109 -0
- package/node_modules/zod/v3/helpers/partialUtil.cjs +2 -0
- package/node_modules/zod/v3/helpers/partialUtil.d.cts +8 -0
- package/node_modules/zod/v3/helpers/partialUtil.d.ts +8 -0
- package/node_modules/zod/v3/helpers/partialUtil.js +1 -0
- package/node_modules/zod/v3/helpers/typeAliases.cjs +2 -0
- package/node_modules/zod/v3/helpers/typeAliases.d.cts +2 -0
- package/node_modules/zod/v3/helpers/typeAliases.d.ts +2 -0
- package/node_modules/zod/v3/helpers/typeAliases.js +1 -0
- package/node_modules/zod/v3/helpers/util.cjs +137 -0
- package/node_modules/zod/v3/helpers/util.d.cts +85 -0
- package/node_modules/zod/v3/helpers/util.d.ts +85 -0
- package/node_modules/zod/v3/helpers/util.js +133 -0
- package/node_modules/zod/v3/index.cjs +33 -0
- package/node_modules/zod/v3/index.d.cts +4 -0
- package/node_modules/zod/v3/index.d.ts +4 -0
- package/node_modules/zod/v3/index.js +4 -0
- package/node_modules/zod/v3/locales/en.cjs +112 -0
- package/node_modules/zod/v3/locales/en.d.cts +3 -0
- package/node_modules/zod/v3/locales/en.d.ts +3 -0
- package/node_modules/zod/v3/locales/en.js +109 -0
- package/node_modules/zod/v3/package.json +6 -0
- package/node_modules/zod/v3/standard-schema.cjs +2 -0
- package/node_modules/zod/v3/standard-schema.d.cts +102 -0
- package/node_modules/zod/v3/standard-schema.d.ts +102 -0
- package/node_modules/zod/v3/standard-schema.js +1 -0
- package/node_modules/zod/v3/types.cjs +3777 -0
- package/node_modules/zod/v3/types.d.cts +1034 -0
- package/node_modules/zod/v3/types.d.ts +1034 -0
- package/node_modules/zod/v3/types.js +3695 -0
- package/node_modules/zod/v4/classic/checks.cjs +33 -0
- package/node_modules/zod/v4/classic/checks.d.cts +1 -0
- package/node_modules/zod/v4/classic/checks.d.ts +1 -0
- package/node_modules/zod/v4/classic/checks.js +1 -0
- package/node_modules/zod/v4/classic/coerce.cjs +47 -0
- package/node_modules/zod/v4/classic/coerce.d.cts +17 -0
- package/node_modules/zod/v4/classic/coerce.d.ts +17 -0
- package/node_modules/zod/v4/classic/coerce.js +17 -0
- package/node_modules/zod/v4/classic/compat.cjs +61 -0
- package/node_modules/zod/v4/classic/compat.d.cts +50 -0
- package/node_modules/zod/v4/classic/compat.d.ts +50 -0
- package/node_modules/zod/v4/classic/compat.js +31 -0
- package/node_modules/zod/v4/classic/errors.cjs +74 -0
- package/node_modules/zod/v4/classic/errors.d.cts +30 -0
- package/node_modules/zod/v4/classic/errors.d.ts +30 -0
- package/node_modules/zod/v4/classic/errors.js +48 -0
- package/node_modules/zod/v4/classic/external.cjs +73 -0
- package/node_modules/zod/v4/classic/external.d.cts +15 -0
- package/node_modules/zod/v4/classic/external.d.ts +15 -0
- package/node_modules/zod/v4/classic/external.js +20 -0
- package/node_modules/zod/v4/classic/from-json-schema.cjs +610 -0
- package/node_modules/zod/v4/classic/from-json-schema.d.cts +12 -0
- package/node_modules/zod/v4/classic/from-json-schema.d.ts +12 -0
- package/node_modules/zod/v4/classic/from-json-schema.js +584 -0
- package/node_modules/zod/v4/classic/index.cjs +33 -0
- package/node_modules/zod/v4/classic/index.d.cts +4 -0
- package/node_modules/zod/v4/classic/index.d.ts +4 -0
- package/node_modules/zod/v4/classic/index.js +4 -0
- package/node_modules/zod/v4/classic/iso.cjs +60 -0
- package/node_modules/zod/v4/classic/iso.d.cts +22 -0
- package/node_modules/zod/v4/classic/iso.d.ts +22 -0
- package/node_modules/zod/v4/classic/iso.js +30 -0
- package/node_modules/zod/v4/classic/package.json +6 -0
- package/node_modules/zod/v4/classic/parse.cjs +41 -0
- package/node_modules/zod/v4/classic/parse.d.cts +31 -0
- package/node_modules/zod/v4/classic/parse.d.ts +31 -0
- package/node_modules/zod/v4/classic/parse.js +15 -0
- package/node_modules/zod/v4/classic/schemas.cjs +1272 -0
- package/node_modules/zod/v4/classic/schemas.d.cts +739 -0
- package/node_modules/zod/v4/classic/schemas.d.ts +739 -0
- package/node_modules/zod/v4/classic/schemas.js +1157 -0
- package/node_modules/zod/v4/core/api.cjs +1222 -0
- package/node_modules/zod/v4/core/api.d.cts +304 -0
- package/node_modules/zod/v4/core/api.d.ts +304 -0
- package/node_modules/zod/v4/core/api.js +1082 -0
- package/node_modules/zod/v4/core/checks.cjs +601 -0
- package/node_modules/zod/v4/core/checks.d.cts +278 -0
- package/node_modules/zod/v4/core/checks.d.ts +278 -0
- package/node_modules/zod/v4/core/checks.js +575 -0
- package/node_modules/zod/v4/core/core.cjs +83 -0
- package/node_modules/zod/v4/core/core.d.cts +70 -0
- package/node_modules/zod/v4/core/core.d.ts +70 -0
- package/node_modules/zod/v4/core/core.js +76 -0
- package/node_modules/zod/v4/core/doc.cjs +39 -0
- package/node_modules/zod/v4/core/doc.d.cts +14 -0
- package/node_modules/zod/v4/core/doc.d.ts +14 -0
- package/node_modules/zod/v4/core/doc.js +35 -0
- package/node_modules/zod/v4/core/errors.cjs +213 -0
- package/node_modules/zod/v4/core/errors.d.cts +220 -0
- package/node_modules/zod/v4/core/errors.d.ts +220 -0
- package/node_modules/zod/v4/core/errors.js +182 -0
- package/node_modules/zod/v4/core/index.cjs +47 -0
- package/node_modules/zod/v4/core/index.d.cts +16 -0
- package/node_modules/zod/v4/core/index.d.ts +16 -0
- package/node_modules/zod/v4/core/index.js +16 -0
- package/node_modules/zod/v4/core/json-schema-generator.cjs +99 -0
- package/node_modules/zod/v4/core/json-schema-generator.d.cts +65 -0
- package/node_modules/zod/v4/core/json-schema-generator.d.ts +65 -0
- package/node_modules/zod/v4/core/json-schema-generator.js +95 -0
- package/node_modules/zod/v4/core/json-schema-processors.cjs +648 -0
- package/node_modules/zod/v4/core/json-schema-processors.d.cts +49 -0
- package/node_modules/zod/v4/core/json-schema-processors.d.ts +49 -0
- package/node_modules/zod/v4/core/json-schema-processors.js +605 -0
- package/node_modules/zod/v4/core/json-schema.cjs +2 -0
- package/node_modules/zod/v4/core/json-schema.d.cts +88 -0
- package/node_modules/zod/v4/core/json-schema.d.ts +88 -0
- package/node_modules/zod/v4/core/json-schema.js +1 -0
- package/node_modules/zod/v4/core/package.json +6 -0
- package/node_modules/zod/v4/core/parse.cjs +131 -0
- package/node_modules/zod/v4/core/parse.d.cts +49 -0
- package/node_modules/zod/v4/core/parse.d.ts +49 -0
- package/node_modules/zod/v4/core/parse.js +93 -0
- package/node_modules/zod/v4/core/regexes.cjs +166 -0
- package/node_modules/zod/v4/core/regexes.d.cts +79 -0
- package/node_modules/zod/v4/core/regexes.d.ts +79 -0
- package/node_modules/zod/v4/core/regexes.js +133 -0
- package/node_modules/zod/v4/core/registries.cjs +56 -0
- package/node_modules/zod/v4/core/registries.d.cts +35 -0
- package/node_modules/zod/v4/core/registries.d.ts +35 -0
- package/node_modules/zod/v4/core/registries.js +51 -0
- package/node_modules/zod/v4/core/schemas.cjs +2124 -0
- package/node_modules/zod/v4/core/schemas.d.cts +1146 -0
- package/node_modules/zod/v4/core/schemas.d.ts +1146 -0
- package/node_modules/zod/v4/core/schemas.js +2093 -0
- package/node_modules/zod/v4/core/standard-schema.cjs +2 -0
- package/node_modules/zod/v4/core/standard-schema.d.cts +126 -0
- package/node_modules/zod/v4/core/standard-schema.d.ts +126 -0
- package/node_modules/zod/v4/core/standard-schema.js +1 -0
- package/node_modules/zod/v4/core/to-json-schema.cjs +446 -0
- package/node_modules/zod/v4/core/to-json-schema.d.cts +114 -0
- package/node_modules/zod/v4/core/to-json-schema.d.ts +114 -0
- package/node_modules/zod/v4/core/to-json-schema.js +437 -0
- package/node_modules/zod/v4/core/util.cjs +710 -0
- package/node_modules/zod/v4/core/util.d.cts +199 -0
- package/node_modules/zod/v4/core/util.d.ts +199 -0
- package/node_modules/zod/v4/core/util.js +651 -0
- package/node_modules/zod/v4/core/versions.cjs +8 -0
- package/node_modules/zod/v4/core/versions.d.cts +5 -0
- package/node_modules/zod/v4/core/versions.d.ts +5 -0
- package/node_modules/zod/v4/core/versions.js +5 -0
- package/node_modules/zod/v4/index.cjs +22 -0
- package/node_modules/zod/v4/index.d.cts +3 -0
- package/node_modules/zod/v4/index.d.ts +3 -0
- package/node_modules/zod/v4/index.js +3 -0
- package/node_modules/zod/v4/locales/ar.cjs +133 -0
- package/node_modules/zod/v4/locales/ar.d.cts +5 -0
- package/node_modules/zod/v4/locales/ar.d.ts +4 -0
- package/node_modules/zod/v4/locales/ar.js +106 -0
- package/node_modules/zod/v4/locales/az.cjs +132 -0
- package/node_modules/zod/v4/locales/az.d.cts +5 -0
- package/node_modules/zod/v4/locales/az.d.ts +4 -0
- package/node_modules/zod/v4/locales/az.js +105 -0
- package/node_modules/zod/v4/locales/be.cjs +183 -0
- package/node_modules/zod/v4/locales/be.d.cts +5 -0
- package/node_modules/zod/v4/locales/be.d.ts +4 -0
- package/node_modules/zod/v4/locales/be.js +156 -0
- package/node_modules/zod/v4/locales/bg.cjs +147 -0
- package/node_modules/zod/v4/locales/bg.d.cts +5 -0
- package/node_modules/zod/v4/locales/bg.d.ts +4 -0
- package/node_modules/zod/v4/locales/bg.js +120 -0
- package/node_modules/zod/v4/locales/ca.cjs +134 -0
- package/node_modules/zod/v4/locales/ca.d.cts +5 -0
- package/node_modules/zod/v4/locales/ca.d.ts +4 -0
- package/node_modules/zod/v4/locales/ca.js +107 -0
- package/node_modules/zod/v4/locales/cs.cjs +138 -0
- package/node_modules/zod/v4/locales/cs.d.cts +5 -0
- package/node_modules/zod/v4/locales/cs.d.ts +4 -0
- package/node_modules/zod/v4/locales/cs.js +111 -0
- package/node_modules/zod/v4/locales/da.cjs +142 -0
- package/node_modules/zod/v4/locales/da.d.cts +5 -0
- package/node_modules/zod/v4/locales/da.d.ts +4 -0
- package/node_modules/zod/v4/locales/da.js +115 -0
- package/node_modules/zod/v4/locales/de.cjs +135 -0
- package/node_modules/zod/v4/locales/de.d.cts +5 -0
- package/node_modules/zod/v4/locales/de.d.ts +4 -0
- package/node_modules/zod/v4/locales/de.js +108 -0
- package/node_modules/zod/v4/locales/en.cjs +136 -0
- package/node_modules/zod/v4/locales/en.d.cts +5 -0
- package/node_modules/zod/v4/locales/en.d.ts +4 -0
- package/node_modules/zod/v4/locales/en.js +109 -0
- package/node_modules/zod/v4/locales/eo.cjs +136 -0
- package/node_modules/zod/v4/locales/eo.d.cts +5 -0
- package/node_modules/zod/v4/locales/eo.d.ts +4 -0
- package/node_modules/zod/v4/locales/eo.js +109 -0
- package/node_modules/zod/v4/locales/es.cjs +159 -0
- package/node_modules/zod/v4/locales/es.d.cts +5 -0
- package/node_modules/zod/v4/locales/es.d.ts +4 -0
- package/node_modules/zod/v4/locales/es.js +132 -0
- package/node_modules/zod/v4/locales/fa.cjs +141 -0
- package/node_modules/zod/v4/locales/fa.d.cts +5 -0
- package/node_modules/zod/v4/locales/fa.d.ts +4 -0
- package/node_modules/zod/v4/locales/fa.js +114 -0
- package/node_modules/zod/v4/locales/fi.cjs +139 -0
- package/node_modules/zod/v4/locales/fi.d.cts +5 -0
- package/node_modules/zod/v4/locales/fi.d.ts +4 -0
- package/node_modules/zod/v4/locales/fi.js +112 -0
- package/node_modules/zod/v4/locales/fr-CA.cjs +134 -0
- package/node_modules/zod/v4/locales/fr-CA.d.cts +5 -0
- package/node_modules/zod/v4/locales/fr-CA.d.ts +4 -0
- package/node_modules/zod/v4/locales/fr-CA.js +107 -0
- package/node_modules/zod/v4/locales/fr.cjs +135 -0
- package/node_modules/zod/v4/locales/fr.d.cts +5 -0
- package/node_modules/zod/v4/locales/fr.d.ts +4 -0
- package/node_modules/zod/v4/locales/fr.js +108 -0
- package/node_modules/zod/v4/locales/he.cjs +241 -0
- package/node_modules/zod/v4/locales/he.d.cts +5 -0
- package/node_modules/zod/v4/locales/he.d.ts +4 -0
- package/node_modules/zod/v4/locales/he.js +214 -0
- package/node_modules/zod/v4/locales/hu.cjs +135 -0
- package/node_modules/zod/v4/locales/hu.d.cts +5 -0
- package/node_modules/zod/v4/locales/hu.d.ts +4 -0
- package/node_modules/zod/v4/locales/hu.js +108 -0
- package/node_modules/zod/v4/locales/hy.cjs +174 -0
- package/node_modules/zod/v4/locales/hy.d.cts +5 -0
- package/node_modules/zod/v4/locales/hy.d.ts +4 -0
- package/node_modules/zod/v4/locales/hy.js +147 -0
- package/node_modules/zod/v4/locales/id.cjs +133 -0
- package/node_modules/zod/v4/locales/id.d.cts +5 -0
- package/node_modules/zod/v4/locales/id.d.ts +4 -0
- package/node_modules/zod/v4/locales/id.js +106 -0
- package/node_modules/zod/v4/locales/index.cjs +104 -0
- package/node_modules/zod/v4/locales/index.d.cts +49 -0
- package/node_modules/zod/v4/locales/index.d.ts +49 -0
- package/node_modules/zod/v4/locales/index.js +49 -0
- package/node_modules/zod/v4/locales/is.cjs +136 -0
- package/node_modules/zod/v4/locales/is.d.cts +5 -0
- package/node_modules/zod/v4/locales/is.d.ts +4 -0
- package/node_modules/zod/v4/locales/is.js +109 -0
- package/node_modules/zod/v4/locales/it.cjs +135 -0
- package/node_modules/zod/v4/locales/it.d.cts +5 -0
- package/node_modules/zod/v4/locales/it.d.ts +4 -0
- package/node_modules/zod/v4/locales/it.js +108 -0
- package/node_modules/zod/v4/locales/ja.cjs +134 -0
- package/node_modules/zod/v4/locales/ja.d.cts +5 -0
- package/node_modules/zod/v4/locales/ja.d.ts +4 -0
- package/node_modules/zod/v4/locales/ja.js +107 -0
- package/node_modules/zod/v4/locales/ka.cjs +139 -0
- package/node_modules/zod/v4/locales/ka.d.cts +5 -0
- package/node_modules/zod/v4/locales/ka.d.ts +4 -0
- package/node_modules/zod/v4/locales/ka.js +112 -0
- package/node_modules/zod/v4/locales/kh.cjs +12 -0
- package/node_modules/zod/v4/locales/kh.d.cts +5 -0
- package/node_modules/zod/v4/locales/kh.d.ts +5 -0
- package/node_modules/zod/v4/locales/kh.js +5 -0
- package/node_modules/zod/v4/locales/km.cjs +137 -0
- package/node_modules/zod/v4/locales/km.d.cts +5 -0
- package/node_modules/zod/v4/locales/km.d.ts +4 -0
- package/node_modules/zod/v4/locales/km.js +110 -0
- package/node_modules/zod/v4/locales/ko.cjs +138 -0
- package/node_modules/zod/v4/locales/ko.d.cts +5 -0
- package/node_modules/zod/v4/locales/ko.d.ts +4 -0
- package/node_modules/zod/v4/locales/ko.js +111 -0
- package/node_modules/zod/v4/locales/lt.cjs +230 -0
- package/node_modules/zod/v4/locales/lt.d.cts +5 -0
- package/node_modules/zod/v4/locales/lt.d.ts +4 -0
- package/node_modules/zod/v4/locales/lt.js +203 -0
- package/node_modules/zod/v4/locales/mk.cjs +136 -0
- package/node_modules/zod/v4/locales/mk.d.cts +5 -0
- package/node_modules/zod/v4/locales/mk.d.ts +4 -0
- package/node_modules/zod/v4/locales/mk.js +109 -0
- package/node_modules/zod/v4/locales/ms.cjs +134 -0
- package/node_modules/zod/v4/locales/ms.d.cts +5 -0
- package/node_modules/zod/v4/locales/ms.d.ts +4 -0
- package/node_modules/zod/v4/locales/ms.js +107 -0
- package/node_modules/zod/v4/locales/nl.cjs +137 -0
- package/node_modules/zod/v4/locales/nl.d.cts +5 -0
- package/node_modules/zod/v4/locales/nl.d.ts +4 -0
- package/node_modules/zod/v4/locales/nl.js +110 -0
- package/node_modules/zod/v4/locales/no.cjs +135 -0
- package/node_modules/zod/v4/locales/no.d.cts +5 -0
- package/node_modules/zod/v4/locales/no.d.ts +4 -0
- package/node_modules/zod/v4/locales/no.js +108 -0
- package/node_modules/zod/v4/locales/ota.cjs +136 -0
- package/node_modules/zod/v4/locales/ota.d.cts +5 -0
- package/node_modules/zod/v4/locales/ota.d.ts +4 -0
- package/node_modules/zod/v4/locales/ota.js +109 -0
- package/node_modules/zod/v4/locales/package.json +6 -0
- package/node_modules/zod/v4/locales/pl.cjs +136 -0
- package/node_modules/zod/v4/locales/pl.d.cts +5 -0
- package/node_modules/zod/v4/locales/pl.d.ts +4 -0
- package/node_modules/zod/v4/locales/pl.js +109 -0
- package/node_modules/zod/v4/locales/ps.cjs +141 -0
- package/node_modules/zod/v4/locales/ps.d.cts +5 -0
- package/node_modules/zod/v4/locales/ps.d.ts +4 -0
- package/node_modules/zod/v4/locales/ps.js +114 -0
- package/node_modules/zod/v4/locales/pt.cjs +135 -0
- package/node_modules/zod/v4/locales/pt.d.cts +5 -0
- package/node_modules/zod/v4/locales/pt.d.ts +4 -0
- package/node_modules/zod/v4/locales/pt.js +108 -0
- package/node_modules/zod/v4/locales/ru.cjs +183 -0
- package/node_modules/zod/v4/locales/ru.d.cts +5 -0
- package/node_modules/zod/v4/locales/ru.d.ts +4 -0
- package/node_modules/zod/v4/locales/ru.js +156 -0
- package/node_modules/zod/v4/locales/sl.cjs +136 -0
- package/node_modules/zod/v4/locales/sl.d.cts +5 -0
- package/node_modules/zod/v4/locales/sl.d.ts +4 -0
- package/node_modules/zod/v4/locales/sl.js +109 -0
- package/node_modules/zod/v4/locales/sv.cjs +137 -0
- package/node_modules/zod/v4/locales/sv.d.cts +5 -0
- package/node_modules/zod/v4/locales/sv.d.ts +4 -0
- package/node_modules/zod/v4/locales/sv.js +110 -0
- package/node_modules/zod/v4/locales/ta.cjs +137 -0
- package/node_modules/zod/v4/locales/ta.d.cts +5 -0
- package/node_modules/zod/v4/locales/ta.d.ts +4 -0
- package/node_modules/zod/v4/locales/ta.js +110 -0
- package/node_modules/zod/v4/locales/th.cjs +137 -0
- package/node_modules/zod/v4/locales/th.d.cts +5 -0
- package/node_modules/zod/v4/locales/th.d.ts +4 -0
- package/node_modules/zod/v4/locales/th.js +110 -0
- package/node_modules/zod/v4/locales/tr.cjs +132 -0
- package/node_modules/zod/v4/locales/tr.d.cts +5 -0
- package/node_modules/zod/v4/locales/tr.d.ts +4 -0
- package/node_modules/zod/v4/locales/tr.js +105 -0
- package/node_modules/zod/v4/locales/ua.cjs +12 -0
- package/node_modules/zod/v4/locales/ua.d.cts +5 -0
- package/node_modules/zod/v4/locales/ua.d.ts +5 -0
- package/node_modules/zod/v4/locales/ua.js +5 -0
- package/node_modules/zod/v4/locales/uk.cjs +135 -0
- package/node_modules/zod/v4/locales/uk.d.cts +5 -0
- package/node_modules/zod/v4/locales/uk.d.ts +4 -0
- package/node_modules/zod/v4/locales/uk.js +108 -0
- package/node_modules/zod/v4/locales/ur.cjs +137 -0
- package/node_modules/zod/v4/locales/ur.d.cts +5 -0
- package/node_modules/zod/v4/locales/ur.d.ts +4 -0
- package/node_modules/zod/v4/locales/ur.js +110 -0
- package/node_modules/zod/v4/locales/uz.cjs +136 -0
- package/node_modules/zod/v4/locales/uz.d.cts +5 -0
- package/node_modules/zod/v4/locales/uz.d.ts +4 -0
- package/node_modules/zod/v4/locales/uz.js +109 -0
- package/node_modules/zod/v4/locales/vi.cjs +135 -0
- package/node_modules/zod/v4/locales/vi.d.cts +5 -0
- package/node_modules/zod/v4/locales/vi.d.ts +4 -0
- package/node_modules/zod/v4/locales/vi.js +108 -0
- package/node_modules/zod/v4/locales/yo.cjs +134 -0
- package/node_modules/zod/v4/locales/yo.d.cts +5 -0
- package/node_modules/zod/v4/locales/yo.d.ts +4 -0
- package/node_modules/zod/v4/locales/yo.js +107 -0
- package/node_modules/zod/v4/locales/zh-CN.cjs +136 -0
- package/node_modules/zod/v4/locales/zh-CN.d.cts +5 -0
- package/node_modules/zod/v4/locales/zh-CN.d.ts +4 -0
- package/node_modules/zod/v4/locales/zh-CN.js +109 -0
- package/node_modules/zod/v4/locales/zh-TW.cjs +134 -0
- package/node_modules/zod/v4/locales/zh-TW.d.cts +5 -0
- package/node_modules/zod/v4/locales/zh-TW.d.ts +4 -0
- package/node_modules/zod/v4/locales/zh-TW.js +107 -0
- package/node_modules/zod/v4/mini/checks.cjs +34 -0
- package/node_modules/zod/v4/mini/checks.d.cts +1 -0
- package/node_modules/zod/v4/mini/checks.d.ts +1 -0
- package/node_modules/zod/v4/mini/checks.js +1 -0
- package/node_modules/zod/v4/mini/coerce.cjs +52 -0
- package/node_modules/zod/v4/mini/coerce.d.cts +7 -0
- package/node_modules/zod/v4/mini/coerce.d.ts +7 -0
- package/node_modules/zod/v4/mini/coerce.js +22 -0
- package/node_modules/zod/v4/mini/external.cjs +63 -0
- package/node_modules/zod/v4/mini/external.d.cts +12 -0
- package/node_modules/zod/v4/mini/external.d.ts +12 -0
- package/node_modules/zod/v4/mini/external.js +14 -0
- package/node_modules/zod/v4/mini/index.cjs +32 -0
- package/node_modules/zod/v4/mini/index.d.cts +3 -0
- package/node_modules/zod/v4/mini/index.d.ts +3 -0
- package/node_modules/zod/v4/mini/index.js +3 -0
- package/node_modules/zod/v4/mini/iso.cjs +64 -0
- package/node_modules/zod/v4/mini/iso.d.cts +22 -0
- package/node_modules/zod/v4/mini/iso.d.ts +22 -0
- package/node_modules/zod/v4/mini/iso.js +34 -0
- package/node_modules/zod/v4/mini/package.json +6 -0
- package/node_modules/zod/v4/mini/parse.cjs +16 -0
- package/node_modules/zod/v4/mini/parse.d.cts +1 -0
- package/node_modules/zod/v4/mini/parse.d.ts +1 -0
- package/node_modules/zod/v4/mini/parse.js +1 -0
- package/node_modules/zod/v4/mini/schemas.cjs +1046 -0
- package/node_modules/zod/v4/mini/schemas.d.cts +427 -0
- package/node_modules/zod/v4/mini/schemas.d.ts +427 -0
- package/node_modules/zod/v4/mini/schemas.js +925 -0
- package/node_modules/zod/v4/package.json +6 -0
- package/node_modules/zod/v4-mini/index.cjs +32 -0
- package/node_modules/zod/v4-mini/index.d.cts +3 -0
- package/node_modules/zod/v4-mini/index.d.ts +3 -0
- package/node_modules/zod/v4-mini/index.js +3 -0
- package/node_modules/zod/v4-mini/package.json +6 -0
- package/package.json +3 -2
- package/src/__tests__/command-executor.test.ts +575 -60
- package/src/__tests__/command-validator.test.ts +697 -0
- package/src/__tests__/command-workspace.test.ts +30 -0
- package/src/__tests__/grant-store.test.ts +151 -33
- package/src/__tests__/http-executor.test.ts +106 -16
- package/src/__tests__/http-policy.test.ts +121 -22
- package/src/__tests__/local-materializers.test.ts +34 -0
- package/src/__tests__/managed-integration.test.ts +633 -0
- package/src/__tests__/managed-lazy-getters.test.ts +245 -0
- package/src/__tests__/managed-materializers.test.ts +107 -38
- package/src/__tests__/managed-rejection.test.ts +43 -0
- package/src/__tests__/toolstore.test.ts +207 -18
- package/src/__tests__/transport.test.ts +26 -6
- package/src/commands/auth-adapters.ts +2 -2
- package/src/commands/egress-hooks.ts +203 -0
- package/src/commands/executor.ts +403 -87
- package/src/commands/profiles.ts +4 -0
- package/src/commands/validator.ts +267 -3
- package/src/commands/workspace.ts +59 -21
- package/src/grants/index.ts +1 -1
- package/src/grants/persistent-store.ts +79 -17
- package/src/grants/rpc-handlers.ts +67 -43
- package/src/grants/temporary-store.ts +26 -19
- package/src/http/executor.ts +170 -25
- package/src/http/path-template.ts +75 -9
- package/src/http/policy.ts +9 -27
- package/src/index.ts +3 -0
- package/src/main.ts +102 -43
- package/src/managed-errors.ts +9 -0
- package/src/managed-lazy-getters.ts +70 -0
- package/src/managed-main.ts +191 -65
- package/src/materializers/local-oauth-lookup.ts +97 -0
- package/src/materializers/local-secure-key-backend.ts +254 -0
- package/src/materializers/local-token-refresh.ts +263 -0
- package/src/materializers/local.ts +21 -5
- package/src/materializers/managed-platform.ts +50 -25
- package/src/paths.ts +28 -10
- package/src/server.ts +147 -11
- package/src/subjects/managed.ts +33 -12
- package/src/subjects/policy.ts +79 -0
- package/src/toolstore/publish.ts +236 -7
package/src/commands/profiles.ts
CHANGED
|
@@ -23,11 +23,13 @@
|
|
|
23
23
|
|
|
24
24
|
import {
|
|
25
25
|
validateAuthAdapterConfig,
|
|
26
|
+
AuthAdapterType,
|
|
26
27
|
} from "./auth-adapters.js";
|
|
27
28
|
import {
|
|
28
29
|
type SecureCommandManifest,
|
|
29
30
|
type CommandProfile,
|
|
30
31
|
type AllowedArgvPattern,
|
|
32
|
+
type AllowedNetworkTarget,
|
|
31
33
|
MANIFEST_SCHEMA_VERSION,
|
|
32
34
|
EGRESS_MODES,
|
|
33
35
|
EgressMode,
|
|
@@ -116,6 +118,50 @@ export function validateManifest(
|
|
|
116
118
|
for (const e of adapterErrors) {
|
|
117
119
|
errors.push(`authAdapter: ${e}`);
|
|
118
120
|
}
|
|
121
|
+
|
|
122
|
+
// -- credential_process helperCommand denied binary check
|
|
123
|
+
if (manifest.authAdapter.type === AuthAdapterType.CredentialProcess) {
|
|
124
|
+
const helper = manifest.authAdapter.helperCommand;
|
|
125
|
+
if (helper && helper.trim().length > 0) {
|
|
126
|
+
// Reject shell metacharacters that could chain a denied binary
|
|
127
|
+
// after an allowed one (e.g. "aws-vault exec ; curl ...").
|
|
128
|
+
// Since helperCommand is executed via `sh -c`, these operators
|
|
129
|
+
// allow arbitrary command chaining that bypasses the denylist.
|
|
130
|
+
if (containsShellMetacharacters(helper)) {
|
|
131
|
+
errors.push(
|
|
132
|
+
`authAdapter: credential_process helperCommand contains shell metacharacters. ` +
|
|
133
|
+
`Command chaining operators (;, &&, ||, |) and subshell expansion ($()) ` +
|
|
134
|
+
`are not allowed in helperCommand because they can bypass the denied binary check.`,
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
const firstWord = extractShellBinary(helper);
|
|
139
|
+
const basename = pathBasename(firstWord);
|
|
140
|
+
if (isDeniedBinary(firstWord)) {
|
|
141
|
+
errors.push(
|
|
142
|
+
`authAdapter: credential_process helperCommand starts with denied binary "${basename}". ` +
|
|
143
|
+
`Generic HTTP clients, interpreters, and shell trampolines cannot be used as credential helpers.`,
|
|
144
|
+
);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// -- cleanConfigDirs key validation (defense-in-depth against path traversal)
|
|
151
|
+
if (manifest.cleanConfigDirs) {
|
|
152
|
+
for (const key of Object.keys(manifest.cleanConfigDirs)) {
|
|
153
|
+
if (key.includes("..")) {
|
|
154
|
+
errors.push(
|
|
155
|
+
`cleanConfigDirs key "${key}" contains path traversal sequence "..". ` +
|
|
156
|
+
`This is not allowed.`,
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
if (key.trim().length === 0) {
|
|
160
|
+
errors.push(
|
|
161
|
+
`cleanConfigDirs contains an empty key.`,
|
|
162
|
+
);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
119
165
|
}
|
|
120
166
|
|
|
121
167
|
// -- Command profiles (must have at least one)
|
|
@@ -179,8 +225,13 @@ function validateProfile(
|
|
|
179
225
|
}
|
|
180
226
|
}
|
|
181
227
|
|
|
182
|
-
// -- Denied subcommands (
|
|
183
|
-
if (profile.deniedSubcommands) {
|
|
228
|
+
// -- Denied subcommands (required — runtime iterates unconditionally)
|
|
229
|
+
if (!profile.deniedSubcommands || !Array.isArray(profile.deniedSubcommands)) {
|
|
230
|
+
errors.push(
|
|
231
|
+
`${prefix}: deniedSubcommands is required and must be an array. ` +
|
|
232
|
+
"Use an empty array if no subcommands need to be denied.",
|
|
233
|
+
);
|
|
234
|
+
} else {
|
|
184
235
|
for (const sub of profile.deniedSubcommands) {
|
|
185
236
|
if (!sub || sub.trim().length === 0) {
|
|
186
237
|
errors.push(
|
|
@@ -215,6 +266,15 @@ function validateProfile(
|
|
|
215
266
|
`${prefix}: egressMode is "proxy_required" but no allowedNetworkTargets are declared. ` +
|
|
216
267
|
"Commands with network egress must declare their allowed network targets.",
|
|
217
268
|
);
|
|
269
|
+
} else {
|
|
270
|
+
for (let i = 0; i < profile.allowedNetworkTargets.length; i++) {
|
|
271
|
+
const target = profile.allowedNetworkTargets[i]!;
|
|
272
|
+
const targetErrors = validateNetworkTarget(
|
|
273
|
+
`${prefix}: allowedNetworkTargets[${i}]`,
|
|
274
|
+
target,
|
|
275
|
+
);
|
|
276
|
+
errors.push(...targetErrors);
|
|
277
|
+
}
|
|
218
278
|
}
|
|
219
279
|
}
|
|
220
280
|
|
|
@@ -233,6 +293,100 @@ function validateProfile(
|
|
|
233
293
|
return errors;
|
|
234
294
|
}
|
|
235
295
|
|
|
296
|
+
// ---------------------------------------------------------------------------
|
|
297
|
+
// Network target validation
|
|
298
|
+
// ---------------------------------------------------------------------------
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* Overbroad host patterns that effectively match everything.
|
|
302
|
+
* These defeat the purpose of declaring allowed network targets.
|
|
303
|
+
*/
|
|
304
|
+
const OVERBROAD_HOST_PATTERNS: ReadonlySet<string> = new Set([
|
|
305
|
+
"*",
|
|
306
|
+
"*.*",
|
|
307
|
+
"*.*.*",
|
|
308
|
+
"*.*.*.*",
|
|
309
|
+
]);
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* Validate a single {@link AllowedNetworkTarget} entry.
|
|
313
|
+
*
|
|
314
|
+
* Returns an array of error messages (empty if valid). Checks:
|
|
315
|
+
* - `hostPattern` is non-empty
|
|
316
|
+
* - `hostPattern` is not overbroad (e.g. `"*"`, `"*.*"`)
|
|
317
|
+
* - `hostPattern` is either an exact hostname or a wildcard-subdomain pattern (`*.domain.tld`)
|
|
318
|
+
* - `ports` (if specified) are valid (1–65535)
|
|
319
|
+
* - `protocols` (if specified) are `"http"` or `"https"` only
|
|
320
|
+
*/
|
|
321
|
+
function validateNetworkTarget(
|
|
322
|
+
prefix: string,
|
|
323
|
+
target: AllowedNetworkTarget,
|
|
324
|
+
): string[] {
|
|
325
|
+
const errors: string[] = [];
|
|
326
|
+
|
|
327
|
+
// -- hostPattern must be non-empty
|
|
328
|
+
if (!target.hostPattern || target.hostPattern.trim().length === 0) {
|
|
329
|
+
errors.push(`${prefix}: hostPattern is required and must be non-empty.`);
|
|
330
|
+
return errors; // Can't validate further without a pattern
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
const pattern = target.hostPattern;
|
|
334
|
+
|
|
335
|
+
// -- Reject overbroad patterns
|
|
336
|
+
if (OVERBROAD_HOST_PATTERNS.has(pattern)) {
|
|
337
|
+
errors.push(
|
|
338
|
+
`${prefix}: hostPattern "${pattern}" is overbroad and matches effectively any host. ` +
|
|
339
|
+
"Use exact hostnames (e.g. \"api.github.com\") or wildcard-subdomain patterns (e.g. \"*.github.com\").",
|
|
340
|
+
);
|
|
341
|
+
return errors;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
// -- Validate pattern shape: exact hostname or *.domain.tld
|
|
345
|
+
if (pattern.includes("*")) {
|
|
346
|
+
// Only *.domain.tld form is allowed
|
|
347
|
+
if (!pattern.startsWith("*.") || pattern.indexOf("*", 1) !== -1) {
|
|
348
|
+
errors.push(
|
|
349
|
+
`${prefix}: hostPattern "${pattern}" uses an unsupported wildcard format. ` +
|
|
350
|
+
"Only wildcard-subdomain patterns (\"*.domain.tld\") are allowed. " +
|
|
351
|
+
"Wildcards in the middle or end of a hostname are not supported.",
|
|
352
|
+
);
|
|
353
|
+
} else {
|
|
354
|
+
// Ensure the domain part after *. is non-empty and looks like a domain
|
|
355
|
+
const domain = pattern.slice(2);
|
|
356
|
+
if (!domain || domain.trim().length === 0) {
|
|
357
|
+
errors.push(
|
|
358
|
+
`${prefix}: hostPattern "${pattern}" has an empty domain after the wildcard prefix.`,
|
|
359
|
+
);
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
// -- Validate ports
|
|
365
|
+
if (target.ports) {
|
|
366
|
+
for (const port of target.ports) {
|
|
367
|
+
if (!Number.isInteger(port) || port < 1 || port > 65535) {
|
|
368
|
+
errors.push(
|
|
369
|
+
`${prefix}: port ${port} is invalid. Ports must be integers between 1 and 65535.`,
|
|
370
|
+
);
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
// -- Validate protocols
|
|
376
|
+
if (target.protocols) {
|
|
377
|
+
const validProtocols = new Set(["http", "https"]);
|
|
378
|
+
for (const proto of target.protocols) {
|
|
379
|
+
if (!validProtocols.has(proto)) {
|
|
380
|
+
errors.push(
|
|
381
|
+
`${prefix}: protocol "${proto}" is invalid. Only "http" and "https" are allowed.`,
|
|
382
|
+
);
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
return errors;
|
|
388
|
+
}
|
|
389
|
+
|
|
236
390
|
// ---------------------------------------------------------------------------
|
|
237
391
|
// Argv pattern validation
|
|
238
392
|
// ---------------------------------------------------------------------------
|
|
@@ -279,9 +433,108 @@ function validateArgvPattern(
|
|
|
279
433
|
}
|
|
280
434
|
}
|
|
281
435
|
|
|
436
|
+
// Only check denied binaries in executable positions — the first token
|
|
437
|
+
// (index 0) is the subcommand position for multi-call umbrella binaries
|
|
438
|
+
// (e.g. busybox wget). Tokens at other positions are argument values and
|
|
439
|
+
// may legitimately use names that overlap with denied binaries (e.g.
|
|
440
|
+
// "--scheme https" where "https" is an httpie alias in DENIED_BINARIES).
|
|
441
|
+
const firstToken = pattern.tokens[0];
|
|
442
|
+
if (firstToken && !isPlaceholder(firstToken) && !isRestPlaceholder(firstToken) && isDeniedBinary(firstToken)) {
|
|
443
|
+
errors.push(
|
|
444
|
+
`${profilePrefix}: argv pattern "${pattern.name}" token "${firstToken}" matches a denied binary. ` +
|
|
445
|
+
`Multi-call umbrella binaries and shell trampolines cannot appear in executable argv positions.`,
|
|
446
|
+
);
|
|
447
|
+
}
|
|
448
|
+
|
|
282
449
|
return errors;
|
|
283
450
|
}
|
|
284
451
|
|
|
452
|
+
// ---------------------------------------------------------------------------
|
|
453
|
+
// Shell metacharacter detection (for helperCommand safety)
|
|
454
|
+
// ---------------------------------------------------------------------------
|
|
455
|
+
|
|
456
|
+
/**
|
|
457
|
+
* Shell metacharacters that enable command chaining or subshell expansion.
|
|
458
|
+
* Since helperCommand is executed via `sh -c`, these operators allow an
|
|
459
|
+
* attacker to chain a denied binary after an allowed one, bypassing the
|
|
460
|
+
* denylist check on the first token.
|
|
461
|
+
*
|
|
462
|
+
* Detected patterns:
|
|
463
|
+
* - `;` — command separator
|
|
464
|
+
* - `&&` — logical AND
|
|
465
|
+
* - `||` — logical OR
|
|
466
|
+
* - `|` — pipe (but not `||`)
|
|
467
|
+
* - `$(` — command substitution
|
|
468
|
+
* - `` ` `` — backtick command substitution
|
|
469
|
+
* - `\n` — newline (POSIX command separator, equivalent to `;`)
|
|
470
|
+
* - `\r` — carriage return
|
|
471
|
+
*/
|
|
472
|
+
const SHELL_METACHAR_RE = /;|&&|\|\||(?<!\|)\|(?!\|)|\$\(|`|\n|\r/;
|
|
473
|
+
|
|
474
|
+
/**
|
|
475
|
+
* Returns true if the command string contains shell metacharacters that
|
|
476
|
+
* could be used for command chaining or subshell expansion.
|
|
477
|
+
*/
|
|
478
|
+
export function containsShellMetacharacters(command: string): boolean {
|
|
479
|
+
return SHELL_METACHAR_RE.test(command);
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
// ---------------------------------------------------------------------------
|
|
483
|
+
// Shell binary extraction (for helperCommand denylist checks)
|
|
484
|
+
// ---------------------------------------------------------------------------
|
|
485
|
+
|
|
486
|
+
/**
|
|
487
|
+
* Regex matching shell variable assignments (KEY=VALUE) at the start of a
|
|
488
|
+
* command. These are environment overrides and not the binary. Handles
|
|
489
|
+
* bare values, single-quoted values, and double-quoted values.
|
|
490
|
+
*/
|
|
491
|
+
const ENV_ASSIGNMENT_RE = /^[A-Za-z_][A-Za-z0-9_]*=(?:'[^']*'|"[^"]*"|(?:\\.|[^\s])*)\s+/;
|
|
492
|
+
|
|
493
|
+
/**
|
|
494
|
+
* Extract the actual binary name from a shell command string, accounting for
|
|
495
|
+
* leading env-var assignments (KEY=VALUE prefixes) and shell quoting around
|
|
496
|
+
* the binary token. This is necessary because helperCommand is executed via
|
|
497
|
+
* `sh -c`, so the shell resolves assignments and quotes before execution.
|
|
498
|
+
*
|
|
499
|
+
* Examples:
|
|
500
|
+
* "curl https://..." → "curl"
|
|
501
|
+
* "'curl' https://..." → "curl"
|
|
502
|
+
* "AWS_PROFILE=x curl ..." → "curl"
|
|
503
|
+
* "AWS_PROFILE=x FOO=bar curl ..." → "curl"
|
|
504
|
+
* "/usr/bin/python3 script.py" → "/usr/bin/python3"
|
|
505
|
+
*/
|
|
506
|
+
export function extractShellBinary(command: string): string {
|
|
507
|
+
let remaining = command.trim();
|
|
508
|
+
|
|
509
|
+
// Strip leading KEY=VALUE assignments
|
|
510
|
+
let match: RegExpExecArray | null;
|
|
511
|
+
while ((match = ENV_ASSIGNMENT_RE.exec(remaining)) !== null) {
|
|
512
|
+
remaining = remaining.slice(match[0].length);
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
// Extract the first whitespace-delimited token
|
|
516
|
+
const firstToken = remaining.split(/\s+/)[0] ?? remaining;
|
|
517
|
+
|
|
518
|
+
// Strip surrounding quotes (single or double)
|
|
519
|
+
return stripShellQuotes(firstToken);
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
/**
|
|
523
|
+
* Remove surrounding single or double quotes from a token.
|
|
524
|
+
* Only strips matching pairs at the boundaries (e.g., `'curl'` → `curl`).
|
|
525
|
+
*/
|
|
526
|
+
function stripShellQuotes(token: string): string {
|
|
527
|
+
if (token.length >= 2) {
|
|
528
|
+
if (
|
|
529
|
+
(token.startsWith("'") && token.endsWith("'")) ||
|
|
530
|
+
(token.startsWith('"') && token.endsWith('"'))
|
|
531
|
+
) {
|
|
532
|
+
return token.slice(1, -1);
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
return token;
|
|
536
|
+
}
|
|
537
|
+
|
|
285
538
|
// ---------------------------------------------------------------------------
|
|
286
539
|
// Argv matching (used by the runtime to check commands against profiles)
|
|
287
540
|
// ---------------------------------------------------------------------------
|
|
@@ -405,7 +658,7 @@ export function validateCommand(
|
|
|
405
658
|
}
|
|
406
659
|
}
|
|
407
660
|
|
|
408
|
-
// Check denied flags
|
|
661
|
+
// Check denied flags — also handle --flag=value combined tokens
|
|
409
662
|
for (const arg of argv) {
|
|
410
663
|
if (allDeniedFlags.has(arg)) {
|
|
411
664
|
return {
|
|
@@ -413,6 +666,17 @@ export function validateCommand(
|
|
|
413
666
|
reason: `Flag "${arg}" is explicitly denied.`,
|
|
414
667
|
};
|
|
415
668
|
}
|
|
669
|
+
|
|
670
|
+
// Handle --flag=value form: extract the flag prefix before '='
|
|
671
|
+
if (arg.startsWith("-") && arg.includes("=")) {
|
|
672
|
+
const flagPrefix = arg.slice(0, arg.indexOf("="));
|
|
673
|
+
if (allDeniedFlags.has(flagPrefix)) {
|
|
674
|
+
return {
|
|
675
|
+
allowed: false,
|
|
676
|
+
reason: `Flag "${flagPrefix}" is explicitly denied (via "${arg}").`,
|
|
677
|
+
};
|
|
678
|
+
}
|
|
679
|
+
}
|
|
416
680
|
}
|
|
417
681
|
|
|
418
682
|
// Try to match against allowed argv patterns in each profile
|
|
@@ -31,7 +31,6 @@ import {
|
|
|
31
31
|
lstatSync,
|
|
32
32
|
mkdirSync,
|
|
33
33
|
readFileSync,
|
|
34
|
-
readlinkSync,
|
|
35
34
|
realpathSync,
|
|
36
35
|
rmSync,
|
|
37
36
|
} from "node:fs";
|
|
@@ -163,27 +162,70 @@ export function validateRelativePath(
|
|
|
163
162
|
|
|
164
163
|
/**
|
|
165
164
|
* Verify that a resolved path is contained within the expected root
|
|
166
|
-
* directory.
|
|
165
|
+
* directory. When the path exists on disk, symlinks are fully resolved
|
|
166
|
+
* via `realpathSync` so that symlinked segments cannot escape the root.
|
|
167
|
+
* When the path doesn't exist yet, its closest existing ancestor is
|
|
168
|
+
* resolved via `realpathSync` to ensure consistent symlink handling
|
|
169
|
+
* (e.g. `/tmp` → `/private/tmp` on macOS).
|
|
167
170
|
*/
|
|
168
171
|
export function validateContainedPath(
|
|
169
172
|
resolvedPath: string,
|
|
170
173
|
rootDir: string,
|
|
171
174
|
label: string,
|
|
172
175
|
): string | undefined {
|
|
173
|
-
|
|
174
|
-
|
|
176
|
+
// Resolve symlinks when path exists; fall back to lexical resolve
|
|
177
|
+
let normalizedRoot: string;
|
|
178
|
+
let normalizedPath: string = resolve(resolvedPath);
|
|
179
|
+
try {
|
|
180
|
+
normalizedRoot = realpathSync(rootDir);
|
|
181
|
+
} catch {
|
|
182
|
+
normalizedRoot = resolve(rootDir);
|
|
183
|
+
}
|
|
184
|
+
try {
|
|
185
|
+
normalizedPath = realpathSync(resolvedPath);
|
|
186
|
+
} catch {
|
|
187
|
+
// Path doesn't exist yet — walk up to the nearest existing ancestor and
|
|
188
|
+
// resolve it via realpathSync so that symlinks in parent dirs (e.g.
|
|
189
|
+
// /tmp → /private/tmp on macOS) are resolved consistently with the root
|
|
190
|
+
// directory. A single dirname call isn't enough for multi-level
|
|
191
|
+
// non-existent paths like "reports/output.json" where "reports/" also
|
|
192
|
+
// doesn't exist.
|
|
193
|
+
let current = resolvedPath;
|
|
194
|
+
let resolved = false;
|
|
195
|
+
while (!resolved) {
|
|
196
|
+
const ancestor = dirname(current);
|
|
197
|
+
const tail = resolvedPath.slice(ancestor.length);
|
|
198
|
+
try {
|
|
199
|
+
normalizedPath = realpathSync(ancestor) + tail;
|
|
200
|
+
resolved = true;
|
|
201
|
+
} catch {
|
|
202
|
+
if (ancestor === current) {
|
|
203
|
+
// Reached filesystem root without finding an existing ancestor
|
|
204
|
+
normalizedPath = resolve(resolvedPath);
|
|
205
|
+
resolved = true;
|
|
206
|
+
}
|
|
207
|
+
current = ancestor;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
const rootPrefix = normalizedRoot + "/";
|
|
175
213
|
|
|
176
214
|
// The path must start with the root directory prefix
|
|
177
215
|
// (or be the root directory itself, though that's unusual for files)
|
|
178
|
-
if (!normalizedPath.startsWith(
|
|
179
|
-
return `${label}: resolved path "${normalizedPath}" escapes the root directory "${
|
|
216
|
+
if (!normalizedPath.startsWith(rootPrefix) && normalizedPath !== normalizedRoot) {
|
|
217
|
+
return `${label}: resolved path "${normalizedPath}" escapes the root directory "${normalizedRoot}".`;
|
|
180
218
|
}
|
|
181
219
|
return undefined;
|
|
182
220
|
}
|
|
183
221
|
|
|
184
222
|
/**
|
|
185
|
-
* Check if a path
|
|
186
|
-
*
|
|
223
|
+
* Check if a path (or any of its parent components) involves symlinks
|
|
224
|
+
* that resolve outside the given root directory.
|
|
225
|
+
*
|
|
226
|
+
* Uses `realpathSync` to fully resolve all symlink chains (including
|
|
227
|
+
* chained symlinks and symlinked parent directories) and then validates
|
|
228
|
+
* that the fully-resolved path is still within the root.
|
|
187
229
|
*/
|
|
188
230
|
export function checkSymlinkEscape(
|
|
189
231
|
filePath: string,
|
|
@@ -191,24 +233,20 @@ export function checkSymlinkEscape(
|
|
|
191
233
|
label: string,
|
|
192
234
|
): string | undefined {
|
|
193
235
|
try {
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
// Resolve the symlink target
|
|
200
|
-
const target = readlinkSync(filePath);
|
|
201
|
-
const resolvedTarget = resolve(dirname(filePath), target);
|
|
202
|
-
const normalizedRoot = resolve(rootDir) + "/";
|
|
236
|
+
// Fully resolve all symlinks (handles chained symlinks and
|
|
237
|
+
// symlinked parent directories in a single call)
|
|
238
|
+
const resolvedTarget = realpathSync(filePath);
|
|
239
|
+
const resolvedRoot = realpathSync(rootDir);
|
|
240
|
+
const rootPrefix = resolvedRoot + "/";
|
|
203
241
|
|
|
204
242
|
if (
|
|
205
|
-
!resolvedTarget.startsWith(
|
|
206
|
-
resolvedTarget !==
|
|
243
|
+
!resolvedTarget.startsWith(rootPrefix) &&
|
|
244
|
+
resolvedTarget !== resolvedRoot
|
|
207
245
|
) {
|
|
208
|
-
return `${label}:
|
|
246
|
+
return `${label}: path "${filePath}" resolves to "${resolvedTarget}" which is outside the scratch directory "${resolvedRoot}".`;
|
|
209
247
|
}
|
|
210
248
|
} catch {
|
|
211
|
-
// If we can't
|
|
249
|
+
// If we can't resolve the file, it doesn't exist yet or is inaccessible.
|
|
212
250
|
// This will be caught later during the actual copy.
|
|
213
251
|
return undefined;
|
|
214
252
|
}
|
package/src/grants/index.ts
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* - **Persistent store**: Durable grants (e.g. `always_allow`) persisted
|
|
8
8
|
* to `grants.json` inside the CES-private data root. Survives restarts.
|
|
9
9
|
* - **Temporary store**: Ephemeral grants (`allow_once`, `allow_10m`,
|
|
10
|
-
* `
|
|
10
|
+
* `allow_conversation`) held in memory. Never survives a process restart.
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
13
|
export { PersistentGrantStore } from "./persistent-store.js";
|
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
* to a permissive default when the persistent state is corrupt.
|
|
12
12
|
* - **Atomic writes**: Uses rename-over-tmp to prevent partial writes.
|
|
13
13
|
* - **Deduplication**: Grants are keyed by a canonical hash (the `id`
|
|
14
|
-
* field) — adding
|
|
14
|
+
* field) — adding an active grant with an existing ID is a no-op.
|
|
15
|
+
* Revoked grants with the same ID are reactivated (upsert).
|
|
15
16
|
*/
|
|
16
17
|
|
|
17
18
|
import {
|
|
@@ -43,6 +44,12 @@ export interface PersistentGrant {
|
|
|
43
44
|
scope: string;
|
|
44
45
|
/** When the grant was created (epoch ms). */
|
|
45
46
|
createdAt: number;
|
|
47
|
+
/** The agent session that created this grant. Backfilled to "unknown" on legacy grants. */
|
|
48
|
+
sessionId: string;
|
|
49
|
+
/** When the grant was revoked (epoch ms), or undefined if active. */
|
|
50
|
+
revokedAt?: number;
|
|
51
|
+
/** Human-readable reason for revocation. */
|
|
52
|
+
revokedReason?: string;
|
|
46
53
|
}
|
|
47
54
|
|
|
48
55
|
/** On-disk format for the grants file. */
|
|
@@ -60,7 +67,6 @@ const GRANTS_FILENAME = "grants.json";
|
|
|
60
67
|
|
|
61
68
|
export class PersistentGrantStore {
|
|
62
69
|
private readonly filePath: string;
|
|
63
|
-
private cache: PersistentGrant[] | null = null;
|
|
64
70
|
/** Set to true when the store detects corruption; blocks all operations. */
|
|
65
71
|
private corrupt = false;
|
|
66
72
|
|
|
@@ -94,43 +100,81 @@ export class PersistentGrantStore {
|
|
|
94
100
|
|
|
95
101
|
// Validate the existing file is readable and well-formed.
|
|
96
102
|
// If it isn't, mark corrupt and throw (fail closed).
|
|
97
|
-
this.loadFromDisk();
|
|
103
|
+
const grants = this.loadFromDisk();
|
|
104
|
+
|
|
105
|
+
// Migration: backfill sessionId on legacy grants that pre-date the field.
|
|
106
|
+
let migrated = false;
|
|
107
|
+
for (const grant of grants) {
|
|
108
|
+
if (grant.sessionId == null) {
|
|
109
|
+
(grant as { sessionId: string }).sessionId = "unknown";
|
|
110
|
+
migrated = true;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
if (migrated) {
|
|
114
|
+
this.writeToDisk(grants);
|
|
115
|
+
}
|
|
98
116
|
}
|
|
99
117
|
|
|
100
118
|
/**
|
|
101
|
-
* Return all persisted grants.
|
|
119
|
+
* Return all persisted grants that are not revoked.
|
|
102
120
|
*
|
|
103
121
|
* Returns an empty array if the store has never been initialised
|
|
104
122
|
* (no file on disk). Throws if the store is corrupt.
|
|
105
123
|
*/
|
|
106
124
|
getAll(): PersistentGrant[] {
|
|
125
|
+
return this.getAllIncludingRevoked().filter((g) => g.revokedAt == null);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Return all persisted grants including revoked ones.
|
|
130
|
+
*
|
|
131
|
+
* Used by the listing handler to expose the full audit trail.
|
|
132
|
+
*/
|
|
133
|
+
getAllIncludingRevoked(): PersistentGrant[] {
|
|
107
134
|
this.assertNotCorrupt();
|
|
108
|
-
if (this.cache !== null) return [...this.cache];
|
|
109
135
|
if (!existsSync(this.filePath)) return [];
|
|
110
136
|
return [...this.loadFromDisk()];
|
|
111
137
|
}
|
|
112
138
|
|
|
113
139
|
/**
|
|
114
|
-
* Look up a grant by its canonical ID.
|
|
140
|
+
* Look up a grant by its canonical ID (active grants only).
|
|
115
141
|
*
|
|
116
|
-
* Returns `undefined` if not found. Throws if the store is corrupt.
|
|
142
|
+
* Returns `undefined` if not found or revoked. Throws if the store is corrupt.
|
|
117
143
|
*/
|
|
118
144
|
getById(id: string): PersistentGrant | undefined {
|
|
119
145
|
return this.getAll().find((g) => g.id === id);
|
|
120
146
|
}
|
|
121
147
|
|
|
122
148
|
/**
|
|
123
|
-
* Add a grant. If
|
|
124
|
-
* a no-op (idempotent deduplication by canonical hash).
|
|
149
|
+
* Add a grant. If an active grant with the same `id` already exists,
|
|
150
|
+
* this is a no-op (idempotent deduplication by canonical hash).
|
|
151
|
+
*
|
|
152
|
+
* If a revoked grant with the same `id` exists, it is reactivated
|
|
153
|
+
* with the new grant's fields — this supports the revoke-then-re-approve
|
|
154
|
+
* workflow where the same proposal hash is re-granted.
|
|
125
155
|
*
|
|
126
|
-
* Returns `true` if the grant was newly added, `false`
|
|
127
|
-
* duplicate.
|
|
156
|
+
* Returns `true` if the grant was newly added or reactivated, `false`
|
|
157
|
+
* if it was a duplicate of an already-active grant.
|
|
128
158
|
*/
|
|
129
159
|
add(grant: PersistentGrant): boolean {
|
|
130
160
|
this.assertNotCorrupt();
|
|
131
161
|
const grants = this.loadFromDisk();
|
|
132
|
-
|
|
133
|
-
|
|
162
|
+
const existing = grants.find((g) => g.id === grant.id);
|
|
163
|
+
if (existing) {
|
|
164
|
+
// Already active — deduplicate as before.
|
|
165
|
+
if (existing.revokedAt == null) {
|
|
166
|
+
return false;
|
|
167
|
+
}
|
|
168
|
+
// Revoked — reactivate with fresh fields.
|
|
169
|
+
existing.tool = grant.tool;
|
|
170
|
+
existing.pattern = grant.pattern;
|
|
171
|
+
existing.scope = grant.scope;
|
|
172
|
+
existing.createdAt = grant.createdAt;
|
|
173
|
+
existing.sessionId = grant.sessionId;
|
|
174
|
+
existing.revokedAt = undefined;
|
|
175
|
+
existing.revokedReason = undefined;
|
|
176
|
+
this.writeToDisk(grants);
|
|
177
|
+
return true;
|
|
134
178
|
}
|
|
135
179
|
grants.push(grant);
|
|
136
180
|
this.writeToDisk(grants);
|
|
@@ -138,9 +182,11 @@ export class PersistentGrantStore {
|
|
|
138
182
|
}
|
|
139
183
|
|
|
140
184
|
/**
|
|
141
|
-
* Remove a grant by its canonical ID.
|
|
185
|
+
* Remove a grant by its canonical ID (hard delete).
|
|
142
186
|
*
|
|
143
187
|
* Returns `true` if the grant was found and removed, `false` otherwise.
|
|
188
|
+
*
|
|
189
|
+
* Prefer `markRevoked()` for audit-preserving revocation.
|
|
144
190
|
*/
|
|
145
191
|
remove(id: string): boolean {
|
|
146
192
|
this.assertNotCorrupt();
|
|
@@ -152,6 +198,25 @@ export class PersistentGrantStore {
|
|
|
152
198
|
return true;
|
|
153
199
|
}
|
|
154
200
|
|
|
201
|
+
/**
|
|
202
|
+
* Mark a grant as revoked by its canonical ID. The grant remains
|
|
203
|
+
* on disk for audit purposes but is excluded from `getAll()` and
|
|
204
|
+
* `getById()` lookups.
|
|
205
|
+
*
|
|
206
|
+
* Returns `true` if the grant was found and marked revoked,
|
|
207
|
+
* `false` if the grant does not exist or is already revoked.
|
|
208
|
+
*/
|
|
209
|
+
markRevoked(id: string, reason?: string): boolean {
|
|
210
|
+
this.assertNotCorrupt();
|
|
211
|
+
const grants = this.loadFromDisk();
|
|
212
|
+
const grant = grants.find((g) => g.id === id);
|
|
213
|
+
if (!grant || grant.revokedAt != null) return false;
|
|
214
|
+
grant.revokedAt = Date.now();
|
|
215
|
+
grant.revokedReason = reason;
|
|
216
|
+
this.writeToDisk(grants);
|
|
217
|
+
return true;
|
|
218
|
+
}
|
|
219
|
+
|
|
155
220
|
/**
|
|
156
221
|
* Check whether a grant with the given ID exists.
|
|
157
222
|
*/
|
|
@@ -210,7 +275,6 @@ export class PersistentGrantStore {
|
|
|
210
275
|
throw new Error("CES grants file is malformed: grants is not an array");
|
|
211
276
|
}
|
|
212
277
|
|
|
213
|
-
this.cache = file.grants;
|
|
214
278
|
return [...file.grants];
|
|
215
279
|
} catch (err) {
|
|
216
280
|
if (this.corrupt) throw err;
|
|
@@ -241,7 +305,5 @@ export class PersistentGrantStore {
|
|
|
241
305
|
// Enforce owner-only permissions even if the file already existed
|
|
242
306
|
// with wider permissions.
|
|
243
307
|
chmodSync(this.filePath, 0o600);
|
|
244
|
-
|
|
245
|
-
this.cache = grants;
|
|
246
308
|
}
|
|
247
309
|
}
|