@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/executor.ts
CHANGED
|
@@ -16,21 +16,27 @@
|
|
|
16
16
|
* 4. **Workspace staging** — Stage declared workspace inputs into a
|
|
17
17
|
* CES-private scratch directory.
|
|
18
18
|
*
|
|
19
|
-
* 5. **
|
|
20
|
-
*
|
|
19
|
+
* 5. **Credential materialization** — Materialize the raw credential
|
|
20
|
+
* value from the credential store.
|
|
21
21
|
*
|
|
22
22
|
* 6. **Egress proxy startup** — Start a CES-owned egress proxy session
|
|
23
23
|
* (when egressMode is `proxy_required`) to enforce network target
|
|
24
|
-
* allowlists.
|
|
24
|
+
* allowlists. This happens BEFORE the auth adapter runs so that
|
|
25
|
+
* credential_process helpers also execute under egress control.
|
|
25
26
|
*
|
|
26
|
-
* 7. **
|
|
27
|
+
* 7. **Auth adapter construction** — Build the credential environment
|
|
28
|
+
* through the declared auth adapter (env_var, temp_file, or
|
|
29
|
+
* credential_process). For credential_process, the helper runs
|
|
30
|
+
* with proxy env vars injected.
|
|
31
|
+
*
|
|
32
|
+
* 8. **Command execution** — Run the command with clean config dirs,
|
|
27
33
|
* materialized credential env vars, and proxy env vars. The command
|
|
28
34
|
* runs in the scratch directory, never in the assistant workspace.
|
|
29
35
|
*
|
|
30
|
-
*
|
|
36
|
+
* 9. **Output copyback** — After exit, validate and copy declared output
|
|
31
37
|
* files from the scratch directory back into the workspace.
|
|
32
38
|
*
|
|
33
|
-
*
|
|
39
|
+
* 10. **Cleanup** — Stop the egress proxy session, remove temp files, and
|
|
34
40
|
* clean up the scratch directory.
|
|
35
41
|
*
|
|
36
42
|
* The executor is fail-closed: bundle mismatches, missing grants,
|
|
@@ -38,9 +44,9 @@
|
|
|
38
44
|
* violations all result in command rejection before or after execution.
|
|
39
45
|
*/
|
|
40
46
|
|
|
41
|
-
import {
|
|
42
|
-
import { dirname, join } from "node:path";
|
|
43
|
-
import { mkdirSync, writeFileSync, unlinkSync, rmSync } from "node:fs";
|
|
47
|
+
import { randomUUID } from "node:crypto";
|
|
48
|
+
import { dirname, join, resolve } from "node:path";
|
|
49
|
+
import { mkdirSync, writeFileSync, unlinkSync, rmSync, realpathSync } from "node:fs";
|
|
44
50
|
import { tmpdir } from "node:os";
|
|
45
51
|
import {
|
|
46
52
|
SessionStore,
|
|
@@ -56,7 +62,7 @@ import { readPublishedManifest, getBundleContentPath, isBundlePublished } from "
|
|
|
56
62
|
import { getCesToolStoreDir, type CesMode } from "../paths.js";
|
|
57
63
|
import type { SecureCommandManifest, CommandProfile } from "./profiles.js";
|
|
58
64
|
import { isDeniedBinary, EgressMode } from "./profiles.js";
|
|
59
|
-
import { validateCommand, type CommandValidationResult } from "./validator.js";
|
|
65
|
+
import { validateCommand, extractShellBinary, containsShellMetacharacters, type CommandValidationResult } from "./validator.js";
|
|
60
66
|
import type { AuthAdapterConfig } from "./auth-adapters.js";
|
|
61
67
|
import { AuthAdapterType, validateAuthAdapterConfig } from "./auth-adapters.js";
|
|
62
68
|
import {
|
|
@@ -68,8 +74,12 @@ import {
|
|
|
68
74
|
type WorkspaceOutput,
|
|
69
75
|
type CopybackResult,
|
|
70
76
|
} from "./workspace.js";
|
|
77
|
+
import { hashProposal, type AuditRecordSummary, type CommandGrantProposal } from "@vellumai/ces-contracts";
|
|
78
|
+
|
|
79
|
+
import type { AuditStore } from "../audit/store.js";
|
|
71
80
|
import type { PersistentGrantStore } from "../grants/persistent-store.js";
|
|
72
81
|
import type { TemporaryGrantStore } from "../grants/temporary-store.js";
|
|
82
|
+
import type { SessionIdRef } from "../server.js";
|
|
73
83
|
|
|
74
84
|
// ---------------------------------------------------------------------------
|
|
75
85
|
// Types
|
|
@@ -97,10 +107,8 @@ export interface ExecuteCommandRequest {
|
|
|
97
107
|
purpose: string;
|
|
98
108
|
/** Explicit grant ID to consume, if the caller holds one. */
|
|
99
109
|
grantId?: string;
|
|
100
|
-
/** Conversation ID for
|
|
110
|
+
/** Conversation ID for conversation-scoped temporary grants. */
|
|
101
111
|
conversationId?: string;
|
|
102
|
-
/** Session ID for the egress proxy. */
|
|
103
|
-
sessionId?: string;
|
|
104
112
|
}
|
|
105
113
|
|
|
106
114
|
/**
|
|
@@ -121,6 +129,19 @@ export interface ExecuteCommandResult {
|
|
|
121
129
|
error?: string;
|
|
122
130
|
/** Audit-relevant metadata. */
|
|
123
131
|
auditId?: string;
|
|
132
|
+
/**
|
|
133
|
+
* When the failure reason is a missing grant, this field contains the
|
|
134
|
+
* proposal metadata needed by the approval bridge. Present only when
|
|
135
|
+
* the error is an approval-required grant failure.
|
|
136
|
+
*/
|
|
137
|
+
approvalRequired?: {
|
|
138
|
+
credentialHandle: string;
|
|
139
|
+
bundleId: string;
|
|
140
|
+
bundleDigest: string;
|
|
141
|
+
profileName: string;
|
|
142
|
+
command: string;
|
|
143
|
+
purpose: string;
|
|
144
|
+
};
|
|
124
145
|
}
|
|
125
146
|
|
|
126
147
|
/**
|
|
@@ -148,6 +169,10 @@ export interface CommandExecutorDeps {
|
|
|
148
169
|
temporaryStore: TemporaryGrantStore;
|
|
149
170
|
/** Credential materializer function. */
|
|
150
171
|
materializeCredential: MaterializeCredentialFn;
|
|
172
|
+
/** Audit store for persisting token-free audit records. */
|
|
173
|
+
auditStore?: AuditStore;
|
|
174
|
+
/** Mutable reference to the session ID for audit records. Updated to the handshake session ID once the RPC handshake completes. */
|
|
175
|
+
sessionId?: SessionIdRef;
|
|
151
176
|
/** CES operating mode (for toolstore path resolution). */
|
|
152
177
|
cesMode?: CesMode;
|
|
153
178
|
/** Egress proxy session start hooks (for creating the proxy server). */
|
|
@@ -228,6 +253,14 @@ export async function executeAuthenticatedCommand(
|
|
|
228
253
|
success: false,
|
|
229
254
|
error: grantResult.error,
|
|
230
255
|
auditId,
|
|
256
|
+
approvalRequired: {
|
|
257
|
+
credentialHandle: request.credentialHandle,
|
|
258
|
+
bundleId: manifest.bundleId,
|
|
259
|
+
bundleDigest: request.bundleDigest,
|
|
260
|
+
profileName: request.profileName,
|
|
261
|
+
command: `${request.bundleDigest}/${request.profileName} ${request.argv.join(" ")}`.trim(),
|
|
262
|
+
purpose: request.purpose,
|
|
263
|
+
},
|
|
231
264
|
};
|
|
232
265
|
}
|
|
233
266
|
|
|
@@ -269,33 +302,17 @@ export async function executeAuthenticatedCommand(
|
|
|
269
302
|
secrets: secretSet,
|
|
270
303
|
};
|
|
271
304
|
|
|
272
|
-
// -- 6.
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
const adapterResult = await buildAuthAdapterEnv(
|
|
277
|
-
manifest.authAdapter,
|
|
278
|
-
matResult.value,
|
|
279
|
-
);
|
|
280
|
-
adapterEnv = adapterResult.env;
|
|
281
|
-
tempFilePath = adapterResult.tempFilePath;
|
|
282
|
-
} catch (err) {
|
|
283
|
-
cleanupScratchDir(scratchDir);
|
|
284
|
-
return {
|
|
285
|
-
success: false,
|
|
286
|
-
error: `Auth adapter materialization failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
287
|
-
auditId,
|
|
288
|
-
};
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
// -- 7. Start egress proxy (if proxy_required) ----------------------------
|
|
305
|
+
// -- 6. Start egress proxy (if proxy_required) ----------------------------
|
|
306
|
+
// The egress proxy must be started BEFORE the auth adapter runs, so that
|
|
307
|
+
// credential_process helpers execute under egress control (not in an
|
|
308
|
+
// uncontrolled network state).
|
|
292
309
|
let proxyEnv: ProxyEnvVars | undefined;
|
|
293
310
|
let proxySessionId: string | undefined;
|
|
294
311
|
const sessionStore = deps.egressSessionStore ?? new SessionStore();
|
|
295
312
|
|
|
296
313
|
if (manifest.egressMode === EgressMode.ProxyRequired) {
|
|
297
314
|
if (!deps.egressHooks) {
|
|
298
|
-
|
|
315
|
+
cleanupScratchDir(scratchDir);
|
|
299
316
|
return {
|
|
300
317
|
success: false,
|
|
301
318
|
error: "Egress mode is proxy_required but no egress hooks were provided. " +
|
|
@@ -306,10 +323,19 @@ export async function executeAuthenticatedCommand(
|
|
|
306
323
|
|
|
307
324
|
try {
|
|
308
325
|
const conversationId = request.conversationId ?? `ces-cmd-${auditId}`;
|
|
326
|
+
// Carry the profile's allowedNetworkTargets into the session config
|
|
327
|
+
// so the egress proxy can enforce the allowlist.
|
|
328
|
+
const profile = manifest.commandProfiles[request.profileName];
|
|
329
|
+
const allowedTargets = profile?.allowedNetworkTargets?.map((t) => ({
|
|
330
|
+
host: t.hostPattern,
|
|
331
|
+
...(t.ports ? { ports: t.ports } : {}),
|
|
332
|
+
...(t.protocols ? { protocols: t.protocols } : {}),
|
|
333
|
+
}));
|
|
309
334
|
const session = createSession(
|
|
310
335
|
sessionStore,
|
|
311
336
|
conversationId,
|
|
312
337
|
[request.credentialHandle],
|
|
338
|
+
{ allowedTargets },
|
|
313
339
|
);
|
|
314
340
|
const started = await startSession(
|
|
315
341
|
sessionStore,
|
|
@@ -319,7 +345,7 @@ export async function executeAuthenticatedCommand(
|
|
|
319
345
|
proxySessionId = started.id;
|
|
320
346
|
proxyEnv = getSessionEnv(sessionStore, started.id);
|
|
321
347
|
} catch (err) {
|
|
322
|
-
|
|
348
|
+
cleanupScratchDir(scratchDir);
|
|
323
349
|
return {
|
|
324
350
|
success: false,
|
|
325
351
|
error: `Egress proxy startup failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
@@ -328,17 +354,148 @@ export async function executeAuthenticatedCommand(
|
|
|
328
354
|
}
|
|
329
355
|
}
|
|
330
356
|
|
|
357
|
+
// For no_network mode, block all outbound by pointing proxy vars at a
|
|
358
|
+
// non-existent address. This prevents subprocesses from making direct
|
|
359
|
+
// connections even without a running egress proxy.
|
|
360
|
+
let noNetworkEnv: Record<string, string> | undefined;
|
|
361
|
+
if (manifest.egressMode === EgressMode.NoNetwork) {
|
|
362
|
+
const blockedProxy = "http://127.0.0.1:0";
|
|
363
|
+
noNetworkEnv = {
|
|
364
|
+
HTTP_PROXY: blockedProxy,
|
|
365
|
+
HTTPS_PROXY: blockedProxy,
|
|
366
|
+
http_proxy: blockedProxy,
|
|
367
|
+
https_proxy: blockedProxy,
|
|
368
|
+
NO_PROXY: "",
|
|
369
|
+
no_proxy: "",
|
|
370
|
+
};
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
// -- 7. Build auth adapter environment ------------------------------------
|
|
374
|
+
// Pass proxy/no-network env vars so credential_process helpers also run
|
|
375
|
+
// under egress control.
|
|
376
|
+
let adapterEnv: Record<string, string>;
|
|
377
|
+
let tempFilePath: string | undefined;
|
|
378
|
+
try {
|
|
379
|
+
const adapterResult = await buildAuthAdapterEnv(
|
|
380
|
+
manifest.authAdapter,
|
|
381
|
+
matResult.value,
|
|
382
|
+
proxyEnv,
|
|
383
|
+
noNetworkEnv,
|
|
384
|
+
);
|
|
385
|
+
adapterEnv = adapterResult.env;
|
|
386
|
+
tempFilePath = adapterResult.tempFilePath;
|
|
387
|
+
} catch (err) {
|
|
388
|
+
// Stop the proxy session before returning — it may already be running
|
|
389
|
+
if (proxySessionId) {
|
|
390
|
+
try {
|
|
391
|
+
await stopSession(proxySessionId, sessionStore);
|
|
392
|
+
} catch {
|
|
393
|
+
// Best-effort proxy cleanup
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
cleanupScratchDir(scratchDir);
|
|
397
|
+
return {
|
|
398
|
+
success: false,
|
|
399
|
+
error: `Auth adapter materialization failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
400
|
+
auditId,
|
|
401
|
+
};
|
|
402
|
+
}
|
|
403
|
+
|
|
331
404
|
// -- 8. Build the execution environment -----------------------------------
|
|
332
|
-
const
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
)
|
|
405
|
+
const bundleDir = dirname(getBundleContentPath(toolstoreDir, request.bundleDigest));
|
|
406
|
+
const entrypointPath = resolve(bundleDir, manifest.entrypoint);
|
|
407
|
+
|
|
408
|
+
// Containment check: entrypoint must resolve inside the bundle directory
|
|
409
|
+
// (lexical check for path traversal via ../)
|
|
410
|
+
if (!entrypointPath.startsWith(bundleDir + "/") && entrypointPath !== bundleDir) {
|
|
411
|
+
// Stop the proxy session before returning — it may already be running
|
|
412
|
+
if (proxySessionId) {
|
|
413
|
+
try {
|
|
414
|
+
await stopSession(proxySessionId, sessionStore);
|
|
415
|
+
} catch {
|
|
416
|
+
// Best-effort proxy cleanup
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
cleanupAll(scratchDir, tempFilePath);
|
|
420
|
+
return {
|
|
421
|
+
success: false,
|
|
422
|
+
error: `Entrypoint "${manifest.entrypoint}" resolves outside the bundle directory. ` +
|
|
423
|
+
`Path traversal is not allowed.`,
|
|
424
|
+
auditId,
|
|
425
|
+
};
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
// Symlink escape check: follow symlinks and verify the real path is
|
|
429
|
+
// still inside the bundle directory. A symlink entrypoint like
|
|
430
|
+
// `bin/tool -> /usr/bin/curl` passes the lexical check above but
|
|
431
|
+
// executes outside the bundle boundary.
|
|
432
|
+
let realEntrypointPath: string;
|
|
433
|
+
try {
|
|
434
|
+
realEntrypointPath = realpathSync(entrypointPath);
|
|
435
|
+
} catch {
|
|
436
|
+
// realpathSync fails if the file doesn't exist or is a broken symlink
|
|
437
|
+
if (proxySessionId) {
|
|
438
|
+
try {
|
|
439
|
+
await stopSession(proxySessionId, sessionStore);
|
|
440
|
+
} catch {
|
|
441
|
+
// Best-effort proxy cleanup
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
cleanupAll(scratchDir, tempFilePath);
|
|
445
|
+
return {
|
|
446
|
+
success: false,
|
|
447
|
+
error: `Entrypoint "${manifest.entrypoint}" could not be resolved (broken symlink or missing file).`,
|
|
448
|
+
auditId,
|
|
449
|
+
};
|
|
450
|
+
}
|
|
451
|
+
const realBundleDir = realpathSync(bundleDir);
|
|
452
|
+
if (!realEntrypointPath.startsWith(realBundleDir + "/") && realEntrypointPath !== realBundleDir) {
|
|
453
|
+
if (proxySessionId) {
|
|
454
|
+
try {
|
|
455
|
+
await stopSession(proxySessionId, sessionStore);
|
|
456
|
+
} catch {
|
|
457
|
+
// Best-effort proxy cleanup
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
cleanupAll(scratchDir, tempFilePath);
|
|
461
|
+
return {
|
|
462
|
+
success: false,
|
|
463
|
+
error: `Entrypoint "${manifest.entrypoint}" is a symlink that resolves to "${realEntrypointPath}", ` +
|
|
464
|
+
`which is outside the bundle directory. Symlink escape is not allowed.`,
|
|
465
|
+
auditId,
|
|
466
|
+
};
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
// Generate HOME path before buildCommandEnv so we have a known-safe value
|
|
470
|
+
// for cleanup. buildCommandEnv sets HOME after spreading adapterEnv to
|
|
471
|
+
// prevent auth adapters from overriding the isolated home directory.
|
|
472
|
+
const generatedHomeDir = join(tmpdir(), `ces-home-${randomUUID()}`);
|
|
473
|
+
|
|
474
|
+
// Create the HOME directory and enforce cleanConfigDirs before building env
|
|
475
|
+
try {
|
|
476
|
+
mkdirSync(generatedHomeDir, { recursive: true });
|
|
477
|
+
enforceCleanConfigDirs(manifest, generatedHomeDir);
|
|
478
|
+
} catch (err) {
|
|
479
|
+
if (proxySessionId) {
|
|
480
|
+
try {
|
|
481
|
+
await stopSession(proxySessionId, sessionStore);
|
|
482
|
+
} catch {
|
|
483
|
+
// Best-effort proxy cleanup
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
cleanupAll(scratchDir, tempFilePath, generatedHomeDir);
|
|
487
|
+
return {
|
|
488
|
+
success: false,
|
|
489
|
+
error: `Clean config dirs setup failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
490
|
+
auditId,
|
|
491
|
+
};
|
|
492
|
+
}
|
|
337
493
|
|
|
338
494
|
const commandEnv = buildCommandEnv(
|
|
339
495
|
adapterEnv,
|
|
340
496
|
proxyEnv,
|
|
341
|
-
|
|
497
|
+
noNetworkEnv,
|
|
498
|
+
generatedHomeDir,
|
|
342
499
|
);
|
|
343
500
|
|
|
344
501
|
// -- 9. Execute the command -----------------------------------------------
|
|
@@ -400,7 +557,23 @@ export async function executeAuthenticatedCommand(
|
|
|
400
557
|
}
|
|
401
558
|
}
|
|
402
559
|
|
|
403
|
-
cleanupAll(scratchDir, tempFilePath);
|
|
560
|
+
cleanupAll(scratchDir, tempFilePath, generatedHomeDir);
|
|
561
|
+
|
|
562
|
+
// -- 12. Persist audit record -----------------------------------------------
|
|
563
|
+
if (deps.auditStore) {
|
|
564
|
+
const auditRecord: AuditRecordSummary = {
|
|
565
|
+
auditId,
|
|
566
|
+
grantId: grantResult.grantId ?? "unknown",
|
|
567
|
+
credentialHandle: request.credentialHandle,
|
|
568
|
+
toolName: "command",
|
|
569
|
+
target: `${request.bundleDigest}/${request.profileName}`,
|
|
570
|
+
sessionId: deps.sessionId?.current ?? "unknown",
|
|
571
|
+
success: execResult.success,
|
|
572
|
+
...(execResult.error ? { errorMessage: execResult.error } : {}),
|
|
573
|
+
timestamp: new Date().toISOString(),
|
|
574
|
+
};
|
|
575
|
+
try { deps.auditStore.append(auditRecord); } catch { /* audit persistence must not block execution */ }
|
|
576
|
+
}
|
|
404
577
|
|
|
405
578
|
return execResult;
|
|
406
579
|
}
|
|
@@ -529,13 +702,25 @@ function checkGrant(
|
|
|
529
702
|
persistentStore: PersistentGrantStore,
|
|
530
703
|
temporaryStore: TemporaryGrantStore,
|
|
531
704
|
): GrantCheckResult {
|
|
532
|
-
//
|
|
705
|
+
// Build the full legacy command string for exact matching against legacy grants.
|
|
706
|
+
const legacyCommand = `${request.bundleDigest}/${profileName} ${request.argv.join(" ")}`.trim();
|
|
707
|
+
|
|
708
|
+
// If an explicit grantId is provided, check it directly — but verify
|
|
709
|
+
// that the grant's scope matches the current request. Without this
|
|
710
|
+
// check, an agent with a valid grant for one command/credential could
|
|
711
|
+
// reuse the grantId for a different command/credential (authorization
|
|
712
|
+
// bypass).
|
|
533
713
|
if (request.grantId) {
|
|
534
714
|
const grant = persistentStore.getById(request.grantId);
|
|
535
|
-
if (
|
|
715
|
+
if (
|
|
716
|
+
grant &&
|
|
717
|
+
grant.tool === "command" &&
|
|
718
|
+
grant.scope === request.credentialHandle &&
|
|
719
|
+
grantMatchesCommand(grant.pattern, request.credentialHandle, request.bundleDigest, profileName, legacyCommand)
|
|
720
|
+
) {
|
|
536
721
|
return { ok: true, grantId: grant.id };
|
|
537
722
|
}
|
|
538
|
-
// Explicit grant not found — fall through to pattern matching
|
|
723
|
+
// Explicit grant not found or does not match this request — fall through to pattern matching
|
|
539
724
|
}
|
|
540
725
|
|
|
541
726
|
// Check persistent grants for a matching command grant
|
|
@@ -544,18 +729,23 @@ function checkGrant(
|
|
|
544
729
|
if (
|
|
545
730
|
grant.tool === "command" &&
|
|
546
731
|
grant.scope === request.credentialHandle &&
|
|
547
|
-
grantMatchesCommand(grant.pattern,
|
|
732
|
+
grantMatchesCommand(grant.pattern, request.credentialHandle, request.bundleDigest, profileName, legacyCommand)
|
|
548
733
|
) {
|
|
549
734
|
return { ok: true, grantId: grant.id };
|
|
550
735
|
}
|
|
551
736
|
}
|
|
552
737
|
|
|
553
|
-
// Check temporary grants
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
738
|
+
// Check temporary grants — build the same proposal shape that the
|
|
739
|
+
// approval bridge produces, then hash with the canonical algorithm
|
|
740
|
+
// from `@vellumai/ces-contracts` so the hashes align.
|
|
741
|
+
const tempProposal: CommandGrantProposal = {
|
|
742
|
+
type: "command",
|
|
743
|
+
credentialHandle: request.credentialHandle,
|
|
744
|
+
command: `${request.bundleDigest}/${profileName} ${request.argv.join(" ")}`.trim(),
|
|
745
|
+
purpose: request.purpose,
|
|
746
|
+
allowedCommandPatterns: [`${request.credentialHandle}:${request.bundleDigest}:${profileName}`],
|
|
747
|
+
};
|
|
748
|
+
const proposalHash = hashProposal(tempProposal);
|
|
559
749
|
const tempKind = temporaryStore.checkAny(
|
|
560
750
|
proposalHash,
|
|
561
751
|
request.conversationId,
|
|
@@ -575,29 +765,38 @@ function checkGrant(
|
|
|
575
765
|
/**
|
|
576
766
|
* Check if a persistent grant pattern matches a command invocation.
|
|
577
767
|
*
|
|
578
|
-
* Grant patterns for commands
|
|
768
|
+
* Grant patterns for commands can be stored in two formats:
|
|
769
|
+
* 1. Canonical: `<credentialHandle>:<bundleDigest>:<profileName>` (from allowedCommandPatterns)
|
|
770
|
+
* 2. Legacy: `<bundleDigest>/<profileName> <argv...>` (from proposal.command fallback)
|
|
771
|
+
*
|
|
772
|
+
* The legacy format exists because older grants were persisted using
|
|
773
|
+
* `proposal.command` before `allowedCommandPatterns` was introduced.
|
|
774
|
+
* Credential scope is already verified by the caller (`grant.scope === credentialHandle`),
|
|
775
|
+
* so for legacy patterns we match the full command string (including argv) to prevent
|
|
776
|
+
* a grant for one argv from authorizing a different argv on the same profile.
|
|
579
777
|
*/
|
|
580
778
|
function grantMatchesCommand(
|
|
581
779
|
pattern: string,
|
|
582
|
-
|
|
780
|
+
credentialHandle: string,
|
|
781
|
+
bundleDigest: string,
|
|
583
782
|
profileName: string,
|
|
783
|
+
legacyCommand: string,
|
|
584
784
|
): boolean {
|
|
585
|
-
|
|
586
|
-
}
|
|
785
|
+
// Canonical format: <credentialHandle>:<bundleDigest>:<profileName>
|
|
786
|
+
if (pattern === `${credentialHandle}:${bundleDigest}:${profileName}`) {
|
|
787
|
+
return true;
|
|
788
|
+
}
|
|
587
789
|
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
): string {
|
|
596
|
-
const parts = ["command", credentialHandle, bundleId, profileName];
|
|
597
|
-
const canonical = JSON.stringify(parts);
|
|
598
|
-
return createHash("sha256").update(canonical, "utf8").digest("hex");
|
|
790
|
+
// Legacy format: <bundleDigest>/<profileName> <argv...>
|
|
791
|
+
// Match the full legacy command string exactly to prevent approval scope widening.
|
|
792
|
+
if (pattern === legacyCommand) {
|
|
793
|
+
return true;
|
|
794
|
+
}
|
|
795
|
+
|
|
796
|
+
return false;
|
|
599
797
|
}
|
|
600
798
|
|
|
799
|
+
|
|
601
800
|
// ---------------------------------------------------------------------------
|
|
602
801
|
// Internal: Auth adapter environment construction
|
|
603
802
|
// ---------------------------------------------------------------------------
|
|
@@ -612,6 +811,8 @@ interface AuthAdapterEnvResult {
|
|
|
612
811
|
async function buildAuthAdapterEnv(
|
|
613
812
|
adapter: AuthAdapterConfig,
|
|
614
813
|
credentialValue: string,
|
|
814
|
+
proxyEnv?: ProxyEnvVars,
|
|
815
|
+
noNetworkEnv?: Record<string, string>,
|
|
615
816
|
): Promise<AuthAdapterEnvResult> {
|
|
616
817
|
// Validate adapter config
|
|
617
818
|
const errors = validateAuthAdapterConfig(adapter);
|
|
@@ -646,12 +847,16 @@ async function buildAuthAdapterEnv(
|
|
|
646
847
|
}
|
|
647
848
|
|
|
648
849
|
case AuthAdapterType.CredentialProcess: {
|
|
649
|
-
// Run the helper command and capture its stdout
|
|
850
|
+
// Run the helper command and capture its stdout.
|
|
851
|
+
// Proxy env vars are forwarded so the helper runs under the same
|
|
852
|
+
// egress control as the main command.
|
|
650
853
|
const timeoutMs = adapter.timeoutMs ?? CREDENTIAL_PROCESS_TIMEOUT_MS;
|
|
651
854
|
const helperResult = await runCredentialProcess(
|
|
652
855
|
adapter.helperCommand,
|
|
653
856
|
credentialValue,
|
|
654
857
|
timeoutMs,
|
|
858
|
+
proxyEnv,
|
|
859
|
+
noNetworkEnv,
|
|
655
860
|
);
|
|
656
861
|
if (!helperResult.ok) {
|
|
657
862
|
throw new Error(
|
|
@@ -677,23 +882,77 @@ async function buildAuthAdapterEnv(
|
|
|
677
882
|
*/
|
|
678
883
|
async function runCredentialProcess(
|
|
679
884
|
helperCommand: string,
|
|
680
|
-
|
|
885
|
+
credentialValue: string,
|
|
681
886
|
timeoutMs: number,
|
|
887
|
+
proxyEnv?: ProxyEnvVars,
|
|
888
|
+
noNetworkEnv?: Record<string, string>,
|
|
682
889
|
): Promise<{ ok: true; stdout: string } | { ok: false; error: string }> {
|
|
890
|
+
// Defense-in-depth: re-check denied binary and metacharacters at execution
|
|
891
|
+
// time, mirroring the validator's static checks. If a manifest was tampered
|
|
892
|
+
// with after validation, this blocks execution before spawning the shell.
|
|
893
|
+
if (containsShellMetacharacters(helperCommand)) {
|
|
894
|
+
return {
|
|
895
|
+
ok: false,
|
|
896
|
+
error: `Credential process helperCommand contains shell metacharacters. ` +
|
|
897
|
+
`Command chaining operators are not allowed.`,
|
|
898
|
+
};
|
|
899
|
+
}
|
|
900
|
+
|
|
901
|
+
const helperBinary = extractShellBinary(helperCommand);
|
|
902
|
+
if (isDeniedBinary(helperBinary)) {
|
|
903
|
+
return {
|
|
904
|
+
ok: false,
|
|
905
|
+
error: `Credential process helperCommand starts with denied binary "${helperBinary}". ` +
|
|
906
|
+
`Generic HTTP clients, interpreters, and shell trampolines cannot be used as credential helpers.`,
|
|
907
|
+
};
|
|
908
|
+
}
|
|
909
|
+
|
|
683
910
|
try {
|
|
911
|
+
// Build a minimal environment for the helper. No host env is inherited,
|
|
912
|
+
// but egress proxy or no-network env vars are injected so the helper
|
|
913
|
+
// runs under the same network controls as the main command.
|
|
914
|
+
const helperEnv: Record<string, string> = {};
|
|
915
|
+
|
|
916
|
+
if (proxyEnv) {
|
|
917
|
+
helperEnv["HTTP_PROXY"] = proxyEnv.HTTP_PROXY;
|
|
918
|
+
helperEnv["HTTPS_PROXY"] = proxyEnv.HTTPS_PROXY;
|
|
919
|
+
helperEnv["NO_PROXY"] = proxyEnv.NO_PROXY;
|
|
920
|
+
helperEnv["http_proxy"] = proxyEnv.HTTP_PROXY;
|
|
921
|
+
helperEnv["https_proxy"] = proxyEnv.HTTPS_PROXY;
|
|
922
|
+
helperEnv["no_proxy"] = proxyEnv.NO_PROXY;
|
|
923
|
+
if (proxyEnv.NODE_EXTRA_CA_CERTS) {
|
|
924
|
+
helperEnv["NODE_EXTRA_CA_CERTS"] = proxyEnv.NODE_EXTRA_CA_CERTS;
|
|
925
|
+
}
|
|
926
|
+
if (proxyEnv.SSL_CERT_FILE) {
|
|
927
|
+
helperEnv["SSL_CERT_FILE"] = proxyEnv.SSL_CERT_FILE;
|
|
928
|
+
}
|
|
929
|
+
}
|
|
930
|
+
|
|
931
|
+
if (noNetworkEnv) {
|
|
932
|
+
Object.assign(helperEnv, noNetworkEnv);
|
|
933
|
+
}
|
|
934
|
+
|
|
684
935
|
const proc = Bun.spawn(["sh", "-c", helperCommand], {
|
|
685
936
|
stdin: "pipe",
|
|
686
937
|
stdout: "pipe",
|
|
687
938
|
stderr: "pipe",
|
|
688
|
-
env:
|
|
939
|
+
env: helperEnv,
|
|
689
940
|
});
|
|
690
941
|
|
|
691
|
-
//
|
|
942
|
+
// Write the credential value to stdin for the helper to consume
|
|
943
|
+
proc.stdin.write(credentialValue);
|
|
692
944
|
proc.stdin.end();
|
|
693
945
|
|
|
694
946
|
const timeoutSignal = AbortSignal.timeout(timeoutMs);
|
|
695
|
-
|
|
696
|
-
|
|
947
|
+
|
|
948
|
+
// Consume stdout/stderr concurrently with waiting for exit to avoid
|
|
949
|
+
// pipe buffer deadlocks when the helper produces large output.
|
|
950
|
+
const [exitCode, stdout, stderr] = await Promise.race([
|
|
951
|
+
Promise.all([
|
|
952
|
+
proc.exited,
|
|
953
|
+
new Response(proc.stdout).text(),
|
|
954
|
+
new Response(proc.stderr).text(),
|
|
955
|
+
]),
|
|
697
956
|
new Promise<never>((_, reject) => {
|
|
698
957
|
timeoutSignal.addEventListener("abort", () => {
|
|
699
958
|
proc.kill();
|
|
@@ -702,9 +961,6 @@ async function runCredentialProcess(
|
|
|
702
961
|
}),
|
|
703
962
|
]);
|
|
704
963
|
|
|
705
|
-
const stdout = await new Response(proc.stdout).text();
|
|
706
|
-
const stderr = await new Response(proc.stderr).text();
|
|
707
|
-
|
|
708
964
|
if (exitCode !== 0) {
|
|
709
965
|
return {
|
|
710
966
|
ok: false,
|
|
@@ -740,15 +996,17 @@ async function runCredentialProcess(
|
|
|
740
996
|
function buildCommandEnv(
|
|
741
997
|
adapterEnv: Record<string, string>,
|
|
742
998
|
proxyEnv?: ProxyEnvVars,
|
|
743
|
-
|
|
999
|
+
noNetworkEnv?: Record<string, string>,
|
|
1000
|
+
homeDir?: string,
|
|
744
1001
|
): Record<string, string> {
|
|
745
1002
|
const env: Record<string, string> = {
|
|
746
|
-
//
|
|
1003
|
+
// Inject auth adapter env vars first so they cannot override protected keys
|
|
1004
|
+
...adapterEnv,
|
|
1005
|
+
// PATH, LANG, and HOME are set after adapterEnv spread to prevent auth
|
|
1006
|
+
// adapters from overriding baseline environment invariants.
|
|
747
1007
|
PATH: process.env["PATH"] ?? "/usr/local/bin:/usr/bin:/bin",
|
|
748
|
-
HOME: join(tmpdir(), `ces-home-${randomUUID()}`),
|
|
749
1008
|
LANG: "en_US.UTF-8",
|
|
750
|
-
|
|
751
|
-
...adapterEnv,
|
|
1009
|
+
HOME: homeDir ?? join(tmpdir(), `ces-home-${randomUUID()}`),
|
|
752
1010
|
};
|
|
753
1011
|
|
|
754
1012
|
// Inject proxy env vars if the egress proxy is active
|
|
@@ -767,9 +1025,55 @@ function buildCommandEnv(
|
|
|
767
1025
|
}
|
|
768
1026
|
}
|
|
769
1027
|
|
|
1028
|
+
// For no_network mode, inject proxy vars pointing at a dead address to
|
|
1029
|
+
// block direct outbound connections from the subprocess.
|
|
1030
|
+
if (noNetworkEnv) {
|
|
1031
|
+
Object.assign(env, noNetworkEnv);
|
|
1032
|
+
}
|
|
1033
|
+
|
|
770
1034
|
return env;
|
|
771
1035
|
}
|
|
772
1036
|
|
|
1037
|
+
// ---------------------------------------------------------------------------
|
|
1038
|
+
// Internal: Clean config dirs enforcement
|
|
1039
|
+
// ---------------------------------------------------------------------------
|
|
1040
|
+
|
|
1041
|
+
/**
|
|
1042
|
+
* Enforce the manifest's `cleanConfigDirs` contract by creating empty
|
|
1043
|
+
* directories under the temp HOME directory.
|
|
1044
|
+
*
|
|
1045
|
+
* For each entry in `cleanConfigDirs`:
|
|
1046
|
+
* - `~/`-prefixed paths are resolved relative to the temp HOME dir and
|
|
1047
|
+
* created as empty directories. This ensures the command finds an empty
|
|
1048
|
+
* config directory instead of reading host config that might contain secrets.
|
|
1049
|
+
* - Absolute paths (not `~/`-prefixed) are skipped for v1 — they would
|
|
1050
|
+
* require filesystem-level isolation (bind mounts, overlayfs).
|
|
1051
|
+
*/
|
|
1052
|
+
function enforceCleanConfigDirs(
|
|
1053
|
+
manifest: SecureCommandManifest,
|
|
1054
|
+
homeDir: string,
|
|
1055
|
+
): void {
|
|
1056
|
+
const dirs = manifest.cleanConfigDirs;
|
|
1057
|
+
if (!dirs) return;
|
|
1058
|
+
|
|
1059
|
+
for (const dirPath of Object.keys(dirs)) {
|
|
1060
|
+
// Only handle ~/‑prefixed paths for v1
|
|
1061
|
+
if (dirPath.startsWith("~/")) {
|
|
1062
|
+
const relativePath = dirPath.slice(2); // strip "~/"
|
|
1063
|
+
const resolvedPath = resolve(homeDir, relativePath);
|
|
1064
|
+
// Containment check: resolved path must stay inside homeDir
|
|
1065
|
+
if (!resolvedPath.startsWith(homeDir + "/") && resolvedPath !== homeDir) {
|
|
1066
|
+
continue; // Skip paths that escape the home directory
|
|
1067
|
+
}
|
|
1068
|
+
mkdirSync(resolvedPath, { recursive: true });
|
|
1069
|
+
} else if (dirPath === "~") {
|
|
1070
|
+
// "~" alone is just the home dir itself, already created
|
|
1071
|
+
continue;
|
|
1072
|
+
}
|
|
1073
|
+
// Absolute paths are skipped — would require filesystem-level isolation
|
|
1074
|
+
}
|
|
1075
|
+
}
|
|
1076
|
+
|
|
773
1077
|
// ---------------------------------------------------------------------------
|
|
774
1078
|
// Internal: Command execution
|
|
775
1079
|
// ---------------------------------------------------------------------------
|
|
@@ -795,11 +1099,14 @@ async function runCommand(
|
|
|
795
1099
|
stderr: "pipe",
|
|
796
1100
|
});
|
|
797
1101
|
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
//
|
|
801
|
-
const stdoutRaw = await
|
|
802
|
-
|
|
1102
|
+
// Consume stdout/stderr concurrently with waiting for exit to avoid
|
|
1103
|
+
// pipe buffer deadlocks when the command produces output exceeding the
|
|
1104
|
+
// OS pipe buffer size (~64KB).
|
|
1105
|
+
const [exitCode, stdoutRaw, stderrRaw] = await Promise.all([
|
|
1106
|
+
proc.exited,
|
|
1107
|
+
new Response(proc.stdout).text(),
|
|
1108
|
+
new Response(proc.stderr).text(),
|
|
1109
|
+
]);
|
|
803
1110
|
|
|
804
1111
|
const stdout = stdoutRaw.length > maxOutputBytes
|
|
805
1112
|
? stdoutRaw.slice(0, maxOutputBytes) + "\n[output truncated]"
|
|
@@ -823,7 +1130,7 @@ async function runCommand(
|
|
|
823
1130
|
// Internal: Cleanup helpers
|
|
824
1131
|
// ---------------------------------------------------------------------------
|
|
825
1132
|
|
|
826
|
-
function cleanupAll(scratchDir: string, tempFilePath?: string): void {
|
|
1133
|
+
function cleanupAll(scratchDir: string, tempFilePath?: string, homeDir?: string): void {
|
|
827
1134
|
// Clean up temp auth file
|
|
828
1135
|
if (tempFilePath) {
|
|
829
1136
|
try {
|
|
@@ -835,6 +1142,15 @@ function cleanupAll(scratchDir: string, tempFilePath?: string): void {
|
|
|
835
1142
|
}
|
|
836
1143
|
}
|
|
837
1144
|
|
|
1145
|
+
// Clean up per-execution HOME temp directory
|
|
1146
|
+
if (homeDir) {
|
|
1147
|
+
try {
|
|
1148
|
+
rmSync(homeDir, { recursive: true, force: true });
|
|
1149
|
+
} catch {
|
|
1150
|
+
// Best-effort cleanup
|
|
1151
|
+
}
|
|
1152
|
+
}
|
|
1153
|
+
|
|
838
1154
|
// Clean up scratch directory
|
|
839
1155
|
cleanupScratchDir(scratchDir);
|
|
840
1156
|
}
|