@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
|
@@ -36,29 +36,29 @@ import type { RpcMethodHandler } from "../server.js";
|
|
|
36
36
|
|
|
37
37
|
/**
|
|
38
38
|
* Project a CES internal PersistentGrant into the wire-format
|
|
39
|
-
* PersistentGrantRecord.
|
|
40
|
-
* the wire
|
|
41
|
-
*
|
|
42
|
-
* Since the persistent store does not track lifecycle states (expiry,
|
|
43
|
-
* revocation, consumption), all persisted grants are considered "active".
|
|
39
|
+
* PersistentGrantRecord. Maps real fields from the persistent store
|
|
40
|
+
* schema into the wire contract.
|
|
44
41
|
*/
|
|
45
|
-
function projectGrant(
|
|
46
|
-
grant: PersistentGrant,
|
|
47
|
-
sessionId: string,
|
|
48
|
-
): PersistentGrantRecord {
|
|
42
|
+
function projectGrant(grant: PersistentGrant): PersistentGrantRecord {
|
|
49
43
|
return {
|
|
50
44
|
grantId: grant.id,
|
|
51
|
-
sessionId,
|
|
45
|
+
sessionId: grant.sessionId,
|
|
52
46
|
credentialHandle: grant.scope,
|
|
53
|
-
proposalType:
|
|
47
|
+
proposalType:
|
|
48
|
+
grant.tool === "http" || grant.tool === "command"
|
|
49
|
+
? grant.tool
|
|
50
|
+
: "command",
|
|
54
51
|
proposalHash: grant.id,
|
|
55
52
|
allowedPurposes: [grant.pattern],
|
|
56
|
-
status: "active",
|
|
53
|
+
status: grant.revokedAt != null ? "revoked" : "active",
|
|
57
54
|
grantedBy: "user",
|
|
58
55
|
createdAt: new Date(grant.createdAt).toISOString(),
|
|
59
56
|
expiresAt: null,
|
|
60
57
|
consumedAt: null,
|
|
61
|
-
revokedAt:
|
|
58
|
+
revokedAt:
|
|
59
|
+
grant.revokedAt != null
|
|
60
|
+
? new Date(grant.revokedAt).toISOString()
|
|
61
|
+
: null,
|
|
62
62
|
};
|
|
63
63
|
}
|
|
64
64
|
|
|
@@ -94,30 +94,52 @@ export function createRecordGrantHandler(
|
|
|
94
94
|
return { success: true };
|
|
95
95
|
}
|
|
96
96
|
|
|
97
|
-
// Build a PersistentGrant from the decision.
|
|
98
97
|
const proposal = decision.proposal;
|
|
99
98
|
const now = Date.now();
|
|
100
99
|
const grantId = decision.proposalHash;
|
|
101
100
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
101
|
+
// Determine the grant type. When omitted (backwards compat), default
|
|
102
|
+
// to `always_allow` so existing callers that don't send `grantType`
|
|
103
|
+
// continue to create persistent grants.
|
|
104
|
+
const grantType = decision.grantType ?? "always_allow";
|
|
105
|
+
|
|
106
|
+
// Only `always_allow` creates a persistent grant. All other approved
|
|
107
|
+
// decisions create only a temporary grant — this prevents allow_once,
|
|
108
|
+
// allow_10m, and allow_conversation from becoming effectively permanent.
|
|
109
|
+
if (grantType === "always_allow") {
|
|
110
|
+
let pattern: string;
|
|
111
|
+
if (proposal.type === "http") {
|
|
112
|
+
// Use the templated allowedUrlPatterns (e.g. "https://api.example.com/repos/{:uuid}/pulls")
|
|
113
|
+
// so the persistent grant covers future requests with different IDs but the same URL structure.
|
|
114
|
+
// Falls back to the exact URL only if allowedUrlPatterns is missing.
|
|
115
|
+
const urlPattern = proposal.allowedUrlPatterns?.[0] ?? proposal.url;
|
|
116
|
+
pattern = `${proposal.method} ${urlPattern}`;
|
|
117
|
+
} else {
|
|
118
|
+
pattern = proposal.allowedCommandPatterns?.[0] ?? proposal.command;
|
|
119
|
+
}
|
|
120
|
+
const persistentGrant: PersistentGrant = {
|
|
121
|
+
id: grantId,
|
|
122
|
+
tool: proposal.type,
|
|
123
|
+
pattern,
|
|
124
|
+
scope: proposal.credentialHandle,
|
|
125
|
+
createdAt: now,
|
|
126
|
+
sessionId,
|
|
127
|
+
};
|
|
128
|
+
deps.persistentGrantStore.add(persistentGrant);
|
|
129
|
+
}
|
|
115
130
|
|
|
116
|
-
//
|
|
117
|
-
//
|
|
118
|
-
|
|
131
|
+
// Record a temporary grant so the caller can use it immediately.
|
|
132
|
+
// For `always_allow`, an `allow_once` temp grant bridges the gap until
|
|
133
|
+
// the next policy check hits the persistent store.
|
|
134
|
+
if (grantType === "allow_10m") {
|
|
119
135
|
deps.temporaryGrantStore.add("allow_10m", decision.proposalHash);
|
|
136
|
+
} else if (grantType === "allow_conversation") {
|
|
137
|
+
deps.temporaryGrantStore.add("allow_conversation", decision.proposalHash, {
|
|
138
|
+
conversationId: request.conversationId ?? sessionId,
|
|
139
|
+
});
|
|
120
140
|
} else {
|
|
141
|
+
// allow_once and always_allow both get a single-use temp grant
|
|
142
|
+
// for immediate retry.
|
|
121
143
|
deps.temporaryGrantStore.add("allow_once", decision.proposalHash);
|
|
122
144
|
}
|
|
123
145
|
|
|
@@ -158,23 +180,23 @@ export function createRecordGrantHandler(
|
|
|
158
180
|
|
|
159
181
|
export interface ListGrantsHandlerDeps {
|
|
160
182
|
persistentGrantStore: PersistentGrantStore;
|
|
161
|
-
/** Default session ID for grants that don't track session. */
|
|
162
|
-
sessionId: string;
|
|
163
183
|
}
|
|
164
184
|
|
|
165
185
|
/**
|
|
166
186
|
* Create an RPC handler for the `list_grants` method.
|
|
167
187
|
*
|
|
168
|
-
* Lists all persistent grants
|
|
169
|
-
* credential handle, or status.
|
|
170
|
-
* that never include raw
|
|
188
|
+
* Lists all persistent grants (including revoked, for audit trail),
|
|
189
|
+
* optionally filtered by session ID, credential handle, or status.
|
|
190
|
+
* Returns wire-format PersistentGrantRecords that never include raw
|
|
191
|
+
* secret material.
|
|
171
192
|
*/
|
|
172
193
|
export function createListGrantsHandler(
|
|
173
194
|
deps: ListGrantsHandlerDeps,
|
|
174
195
|
): RpcMethodHandler<ListGrants, ListGrantsResponse> {
|
|
175
196
|
return (request) => {
|
|
176
|
-
|
|
177
|
-
const
|
|
197
|
+
// Include revoked grants in the listing for audit visibility.
|
|
198
|
+
const allGrants = deps.persistentGrantStore.getAllIncludingRevoked();
|
|
199
|
+
const projected = allGrants.map((g) => projectGrant(g));
|
|
178
200
|
|
|
179
201
|
let filtered = projected;
|
|
180
202
|
|
|
@@ -207,22 +229,24 @@ export interface RevokeGrantHandlerDeps {
|
|
|
207
229
|
/**
|
|
208
230
|
* Create an RPC handler for the `revoke_grant` method.
|
|
209
231
|
*
|
|
210
|
-
*
|
|
211
|
-
*
|
|
212
|
-
* persistent store does not track revocation metadata).
|
|
232
|
+
* Marks a grant as revoked in the persistent store by its stable ID,
|
|
233
|
+
* preserving the record for audit trail. Returns success/failure.
|
|
213
234
|
*/
|
|
214
235
|
export function createRevokeGrantHandler(
|
|
215
236
|
deps: RevokeGrantHandlerDeps,
|
|
216
237
|
): RpcMethodHandler<RevokeGrant, RevokeGrantResponse> {
|
|
217
238
|
return (request) => {
|
|
218
|
-
const
|
|
239
|
+
const revoked = deps.persistentGrantStore.markRevoked(
|
|
240
|
+
request.grantId,
|
|
241
|
+
request.reason,
|
|
242
|
+
);
|
|
219
243
|
|
|
220
|
-
if (!
|
|
244
|
+
if (!revoked) {
|
|
221
245
|
return {
|
|
222
246
|
success: false,
|
|
223
247
|
error: {
|
|
224
248
|
code: "GRANT_NOT_FOUND",
|
|
225
|
-
message: `No grant found with ID "${request.grantId}"`,
|
|
249
|
+
message: `No grant found with ID "${request.grantId}" (or already revoked)`,
|
|
226
250
|
},
|
|
227
251
|
};
|
|
228
252
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CES in-memory temporary grant store.
|
|
3
3
|
*
|
|
4
|
-
* Manages grants for `allow_once`, `allow_10m`, and `
|
|
4
|
+
* Manages grants for `allow_once`, `allow_10m`, and `allow_conversation` decisions.
|
|
5
5
|
* All state is in-memory — temporary grants never survive a process restart,
|
|
6
6
|
* which is the desired behaviour for ephemeral approvals.
|
|
7
7
|
*
|
|
@@ -9,26 +9,26 @@
|
|
|
9
9
|
* - `allow_once`: Keyed by proposal hash. Consumed (deleted) on first use.
|
|
10
10
|
* - `allow_10m`: Keyed by proposal hash. Checked for expiry on every read;
|
|
11
11
|
* expired entries are lazily purged.
|
|
12
|
-
* - `
|
|
13
|
-
* single conversation
|
|
12
|
+
* - `allow_conversation`: Keyed by proposal hash + conversation ID. Scoped to a
|
|
13
|
+
* single conversation.
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
16
|
// ---------------------------------------------------------------------------
|
|
17
17
|
// Types
|
|
18
18
|
// ---------------------------------------------------------------------------
|
|
19
19
|
|
|
20
|
-
export type TemporaryGrantKind = "allow_once" | "allow_10m" | "
|
|
20
|
+
export type TemporaryGrantKind = "allow_once" | "allow_10m" | "allow_conversation";
|
|
21
21
|
|
|
22
22
|
export interface TemporaryGrant {
|
|
23
23
|
/** The kind of temporary grant. */
|
|
24
24
|
kind: TemporaryGrantKind;
|
|
25
25
|
/** Canonical proposal hash identifying the operation being granted. */
|
|
26
26
|
proposalHash: string;
|
|
27
|
-
/** Conversation ID — required for `
|
|
27
|
+
/** Conversation ID — required for `allow_conversation`, ignored otherwise. */
|
|
28
28
|
conversationId?: string;
|
|
29
29
|
/** When the grant was created (epoch ms). */
|
|
30
30
|
createdAt: number;
|
|
31
|
-
/** When the grant expires (epoch ms).
|
|
31
|
+
/** When the grant expires (epoch ms). Set for `allow_10m`; optionally set for `allow_once`. */
|
|
32
32
|
expiresAt?: number;
|
|
33
33
|
}
|
|
34
34
|
|
|
@@ -43,20 +43,20 @@ const DEFAULT_TIMED_DURATION_MS = 10 * 60 * 1000;
|
|
|
43
43
|
* Compute the storage key for a temporary grant.
|
|
44
44
|
*
|
|
45
45
|
* - `allow_once` / `allow_10m`: keyed by proposal hash alone.
|
|
46
|
-
* - `
|
|
46
|
+
* - `allow_conversation`: keyed by proposal hash + conversation ID.
|
|
47
47
|
*/
|
|
48
48
|
function storageKey(
|
|
49
49
|
kind: TemporaryGrantKind,
|
|
50
50
|
proposalHash: string,
|
|
51
51
|
conversationId?: string,
|
|
52
52
|
): string {
|
|
53
|
-
if (kind === "
|
|
53
|
+
if (kind === "allow_conversation") {
|
|
54
54
|
if (!conversationId) {
|
|
55
55
|
throw new Error(
|
|
56
|
-
"
|
|
56
|
+
"allow_conversation grants require a conversationId",
|
|
57
57
|
);
|
|
58
58
|
}
|
|
59
|
-
return `
|
|
59
|
+
return `conversation:${conversationId}:${proposalHash}`;
|
|
60
60
|
}
|
|
61
61
|
return `${kind}:${proposalHash}`;
|
|
62
62
|
}
|
|
@@ -76,7 +76,7 @@ export class TemporaryGrantStore {
|
|
|
76
76
|
*
|
|
77
77
|
* @param kind - The type of temporary grant.
|
|
78
78
|
* @param proposalHash - Canonical hash of the operation proposal.
|
|
79
|
-
* @param options - Additional options (conversationId for
|
|
79
|
+
* @param options - Additional options (conversationId for conversation grants,
|
|
80
80
|
* custom duration for timed grants).
|
|
81
81
|
*/
|
|
82
82
|
add(
|
|
@@ -102,6 +102,8 @@ export class TemporaryGrantStore {
|
|
|
102
102
|
if (kind === "allow_10m") {
|
|
103
103
|
grant.expiresAt =
|
|
104
104
|
Date.now() + (options?.durationMs ?? DEFAULT_TIMED_DURATION_MS);
|
|
105
|
+
} else if (kind === "allow_once" && options?.durationMs !== undefined) {
|
|
106
|
+
grant.expiresAt = Date.now() + options.durationMs;
|
|
105
107
|
}
|
|
106
108
|
|
|
107
109
|
this.store.set(key, grant);
|
|
@@ -113,7 +115,7 @@ export class TemporaryGrantStore {
|
|
|
113
115
|
* - `allow_once`: Returns `true` and **consumes** the grant (deletes it).
|
|
114
116
|
* - `allow_10m`: Returns `true` only if the grant has not expired.
|
|
115
117
|
* Expired grants are lazily purged.
|
|
116
|
-
* - `
|
|
118
|
+
* - `allow_conversation`: Returns `true` only if a grant exists for the given
|
|
117
119
|
* proposal hash scoped to the specified conversation ID.
|
|
118
120
|
*
|
|
119
121
|
* Returns `false` if no matching grant exists.
|
|
@@ -128,6 +130,11 @@ export class TemporaryGrantStore {
|
|
|
128
130
|
if (!grant) return false;
|
|
129
131
|
|
|
130
132
|
if (grant.kind === "allow_once") {
|
|
133
|
+
// Check TTL if set
|
|
134
|
+
if (grant.expiresAt !== undefined && Date.now() >= grant.expiresAt) {
|
|
135
|
+
this.store.delete(key);
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
131
138
|
// Consume on first use
|
|
132
139
|
this.store.delete(key);
|
|
133
140
|
return true;
|
|
@@ -142,7 +149,7 @@ export class TemporaryGrantStore {
|
|
|
142
149
|
return true;
|
|
143
150
|
}
|
|
144
151
|
|
|
145
|
-
//
|
|
152
|
+
// allow_conversation — no expiry, just existence check
|
|
146
153
|
return true;
|
|
147
154
|
}
|
|
148
155
|
|
|
@@ -150,7 +157,7 @@ export class TemporaryGrantStore {
|
|
|
150
157
|
* Check whether any kind of active temporary grant exists for the given
|
|
151
158
|
* proposal hash and optional conversation ID.
|
|
152
159
|
*
|
|
153
|
-
* Checks `allow_once`, `allow_10m`, and `
|
|
160
|
+
* Checks `allow_once`, `allow_10m`, and `allow_conversation` in order.
|
|
154
161
|
* Returns the kind of the matched grant, or `undefined` if none match.
|
|
155
162
|
*
|
|
156
163
|
* Note: If an `allow_once` grant matches, it is consumed.
|
|
@@ -165,9 +172,9 @@ export class TemporaryGrantStore {
|
|
|
165
172
|
// Check allow_10m
|
|
166
173
|
if (this.check("allow_10m", proposalHash)) return "allow_10m";
|
|
167
174
|
|
|
168
|
-
// Check
|
|
169
|
-
if (conversationId && this.check("
|
|
170
|
-
return "
|
|
175
|
+
// Check allow_conversation (requires conversationId)
|
|
176
|
+
if (conversationId && this.check("allow_conversation", proposalHash, conversationId)) {
|
|
177
|
+
return "allow_conversation";
|
|
171
178
|
}
|
|
172
179
|
|
|
173
180
|
return undefined;
|
|
@@ -190,11 +197,11 @@ export class TemporaryGrantStore {
|
|
|
190
197
|
/**
|
|
191
198
|
* Remove all temporary grants for a given conversation ID.
|
|
192
199
|
*
|
|
193
|
-
* Useful when a conversation
|
|
200
|
+
* Useful when a conversation ends. Only removes `allow_conversation`
|
|
194
201
|
* grants scoped to that conversation.
|
|
195
202
|
*/
|
|
196
203
|
clearConversation(conversationId: string): void {
|
|
197
|
-
const prefix = `
|
|
204
|
+
const prefix = `conversation:${conversationId}:`;
|
|
198
205
|
for (const key of this.store.keys()) {
|
|
199
206
|
if (key.startsWith(prefix)) {
|
|
200
207
|
this.store.delete(key);
|
package/src/http/executor.ts
CHANGED
|
@@ -28,18 +28,22 @@ import type {
|
|
|
28
28
|
MakeAuthenticatedRequestResponse,
|
|
29
29
|
} from "@vellumai/ces-contracts";
|
|
30
30
|
import { HandleType, parseHandle, hashProposal } from "@vellumai/ces-contracts";
|
|
31
|
+
import type { InjectionTemplate } from "@vellumai/credential-storage";
|
|
31
32
|
|
|
32
33
|
import { evaluateHttpPolicy, type PolicyResult } from "./policy.js";
|
|
33
34
|
import { filterHttpResponse, type RawHttpResponse } from "./response-filter.js";
|
|
34
35
|
import { generateHttpAuditSummary } from "./audit.js";
|
|
35
36
|
|
|
37
|
+
import type { AuditStore } from "../audit/store.js";
|
|
36
38
|
import type { PersistentGrantStore } from "../grants/persistent-store.js";
|
|
37
39
|
import type { TemporaryGrantStore } from "../grants/temporary-store.js";
|
|
38
40
|
|
|
39
41
|
import type { LocalMaterialiser, MaterialisedCredential } from "../materializers/local.js";
|
|
40
42
|
import { materializeManagedToken, type ManagedMaterializerOptions } from "../materializers/managed-platform.js";
|
|
41
43
|
import { resolveLocalSubject, type LocalSubjectResolverDeps } from "../subjects/local.js";
|
|
44
|
+
import { checkCredentialPolicy } from "../subjects/policy.js";
|
|
42
45
|
import { resolveManagedSubject, type ManagedSubjectResolverOptions } from "../subjects/managed.js";
|
|
46
|
+
import type { SessionIdRef } from "../server.js";
|
|
43
47
|
|
|
44
48
|
// ---------------------------------------------------------------------------
|
|
45
49
|
// Auth injection constants
|
|
@@ -75,8 +79,10 @@ export interface HttpExecutorDeps {
|
|
|
75
79
|
managedSubjectOptions?: ManagedSubjectResolverOptions;
|
|
76
80
|
/** Options for managed token materialisation (null if managed mode is unavailable). */
|
|
77
81
|
managedMaterializerOptions?: ManagedMaterializerOptions;
|
|
78
|
-
/**
|
|
79
|
-
|
|
82
|
+
/** Audit store for persisting token-free audit records. */
|
|
83
|
+
auditStore: AuditStore;
|
|
84
|
+
/** Mutable reference to the session ID for audit records. Updated to the handshake session ID once the RPC handshake completes. */
|
|
85
|
+
sessionId: SessionIdRef;
|
|
80
86
|
/** Optional custom fetch implementation (for testing). */
|
|
81
87
|
fetch?: typeof globalThis.fetch;
|
|
82
88
|
/** Optional logger. */
|
|
@@ -135,6 +141,7 @@ export async function executeAuthenticatedHttpRequest(
|
|
|
135
141
|
headers: request.headers,
|
|
136
142
|
purpose: request.purpose,
|
|
137
143
|
grantId: request.grantId,
|
|
144
|
+
conversationId: request.conversationId,
|
|
138
145
|
},
|
|
139
146
|
deps.persistentGrantStore,
|
|
140
147
|
deps.temporaryGrantStore,
|
|
@@ -178,13 +185,15 @@ export async function executeAuthenticatedHttpRequest(
|
|
|
178
185
|
const audit = generateHttpAuditSummary({
|
|
179
186
|
credentialHandle: request.credentialHandle,
|
|
180
187
|
grantId,
|
|
181
|
-
sessionId: deps.sessionId,
|
|
188
|
+
sessionId: deps.sessionId.current,
|
|
182
189
|
method: request.method,
|
|
183
190
|
url: request.url,
|
|
184
191
|
success: false,
|
|
185
192
|
errorMessage: materialiseResult.error,
|
|
186
193
|
});
|
|
187
194
|
|
|
195
|
+
try { deps.auditStore.append(audit); } catch { /* audit persistence must not block execution */ }
|
|
196
|
+
|
|
188
197
|
return {
|
|
189
198
|
success: false,
|
|
190
199
|
error: {
|
|
@@ -198,7 +207,8 @@ export async function executeAuthenticatedHttpRequest(
|
|
|
198
207
|
const { credential, secrets } = materialiseResult;
|
|
199
208
|
|
|
200
209
|
// 4. Build the outbound request with injected auth
|
|
201
|
-
const
|
|
210
|
+
const authenticated = buildAuthenticatedRequest(
|
|
211
|
+
request.url,
|
|
202
212
|
request.headers ?? {},
|
|
203
213
|
credential,
|
|
204
214
|
);
|
|
@@ -208,12 +218,14 @@ export async function executeAuthenticatedHttpRequest(
|
|
|
208
218
|
try {
|
|
209
219
|
rawResponse = await performHttpRequest(
|
|
210
220
|
request.method,
|
|
211
|
-
|
|
212
|
-
|
|
221
|
+
authenticated.url,
|
|
222
|
+
authenticated.headers,
|
|
213
223
|
request.body,
|
|
214
224
|
policyResult,
|
|
215
225
|
request.credentialHandle,
|
|
216
226
|
deps,
|
|
227
|
+
credential,
|
|
228
|
+
request.headers ?? {},
|
|
217
229
|
);
|
|
218
230
|
} catch (err) {
|
|
219
231
|
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
@@ -223,13 +235,15 @@ export async function executeAuthenticatedHttpRequest(
|
|
|
223
235
|
const audit = generateHttpAuditSummary({
|
|
224
236
|
credentialHandle: request.credentialHandle,
|
|
225
237
|
grantId,
|
|
226
|
-
sessionId: deps.sessionId,
|
|
238
|
+
sessionId: deps.sessionId.current,
|
|
227
239
|
method: request.method,
|
|
228
240
|
url: request.url,
|
|
229
241
|
success: false,
|
|
230
242
|
errorMessage: safeError,
|
|
231
243
|
});
|
|
232
244
|
|
|
245
|
+
try { deps.auditStore.append(audit); } catch { /* audit persistence must not block execution */ }
|
|
246
|
+
|
|
233
247
|
return {
|
|
234
248
|
success: false,
|
|
235
249
|
error: {
|
|
@@ -243,17 +257,19 @@ export async function executeAuthenticatedHttpRequest(
|
|
|
243
257
|
// 6. Filter the response through the sanitisation pipeline
|
|
244
258
|
const filtered = filterHttpResponse(rawResponse, secrets);
|
|
245
259
|
|
|
246
|
-
// 7. Generate audit summary
|
|
260
|
+
// 7. Generate and persist audit summary
|
|
247
261
|
const audit = generateHttpAuditSummary({
|
|
248
262
|
credentialHandle: request.credentialHandle,
|
|
249
263
|
grantId,
|
|
250
|
-
sessionId: deps.sessionId,
|
|
264
|
+
sessionId: deps.sessionId.current,
|
|
251
265
|
method: request.method,
|
|
252
266
|
url: request.url,
|
|
253
267
|
success: true,
|
|
254
268
|
statusCode: rawResponse.statusCode,
|
|
255
269
|
});
|
|
256
270
|
|
|
271
|
+
try { deps.auditStore.append(audit); } catch { /* audit persistence must not block execution */ }
|
|
272
|
+
|
|
257
273
|
logger.log(
|
|
258
274
|
`[ces-http] ${request.method} ${request.url} -> ${rawResponse.statusCode} (grant=${grantId})`,
|
|
259
275
|
);
|
|
@@ -299,6 +315,19 @@ async function materialiseCredential(
|
|
|
299
315
|
return { ok: false, error: subjectResult.error };
|
|
300
316
|
}
|
|
301
317
|
|
|
318
|
+
// Enforce credential-level policies for local static handles.
|
|
319
|
+
// OAuth connections don't carry allowedTools/allowedDomains in the
|
|
320
|
+
// same way, so policy checks are skipped for OAuth.
|
|
321
|
+
if (subjectResult.subject.type === HandleType.LocalStatic) {
|
|
322
|
+
const policyCheck = checkCredentialPolicy(
|
|
323
|
+
subjectResult.subject.metadata,
|
|
324
|
+
"make_authenticated_request",
|
|
325
|
+
);
|
|
326
|
+
if (!policyCheck.ok) {
|
|
327
|
+
return { ok: false, error: policyCheck.error! };
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
|
|
302
331
|
// Materialise through the local materialiser
|
|
303
332
|
const matResult = await deps.localMaterialiser.materialise(subjectResult.subject);
|
|
304
333
|
if (!matResult.ok) {
|
|
@@ -358,18 +387,36 @@ async function materialiseCredential(
|
|
|
358
387
|
}
|
|
359
388
|
|
|
360
389
|
// ---------------------------------------------------------------------------
|
|
361
|
-
// Auth
|
|
390
|
+
// Auth injection
|
|
362
391
|
// ---------------------------------------------------------------------------
|
|
363
392
|
|
|
364
393
|
/**
|
|
365
|
-
*
|
|
394
|
+
* Result of building an authenticated request — may contain a modified URL
|
|
395
|
+
* (e.g. when the credential is injected as a query parameter).
|
|
396
|
+
*/
|
|
397
|
+
interface AuthenticatedRequest {
|
|
398
|
+
headers: Record<string, string>;
|
|
399
|
+
url: string;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
/**
|
|
403
|
+
* Build the outbound request by:
|
|
366
404
|
* 1. Stripping any caller-supplied auth headers (defense-in-depth).
|
|
367
|
-
* 2. Injecting the credential
|
|
405
|
+
* 2. Injecting the credential using the appropriate strategy.
|
|
406
|
+
*
|
|
407
|
+
* For `local_static` handles, the credential's `injectionTemplates` are
|
|
408
|
+
* checked for a template matching the target URL's hostname. If found,
|
|
409
|
+
* the template controls how the credential is injected (header name,
|
|
410
|
+
* value prefix, or query parameter). If no matching template exists,
|
|
411
|
+
* falls back to `Authorization: Bearer <value>`.
|
|
412
|
+
*
|
|
413
|
+
* OAuth handles always use `Authorization: Bearer <value>`.
|
|
368
414
|
*/
|
|
369
|
-
function
|
|
415
|
+
function buildAuthenticatedRequest(
|
|
416
|
+
url: string,
|
|
370
417
|
callerHeaders: Record<string, string>,
|
|
371
418
|
credential: MaterialisedCredential,
|
|
372
|
-
):
|
|
419
|
+
): AuthenticatedRequest {
|
|
373
420
|
const headers: Record<string, string> = {};
|
|
374
421
|
|
|
375
422
|
// Copy caller headers, stripping any auth headers
|
|
@@ -379,14 +426,28 @@ function buildOutboundHeaders(
|
|
|
379
426
|
}
|
|
380
427
|
}
|
|
381
428
|
|
|
429
|
+
let finalUrl = url;
|
|
430
|
+
|
|
382
431
|
// Inject credential based on handle type
|
|
383
432
|
switch (credential.handleType) {
|
|
384
|
-
case HandleType.LocalStatic:
|
|
385
|
-
//
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
433
|
+
case HandleType.LocalStatic: {
|
|
434
|
+
// Check for a matching injection template
|
|
435
|
+
const template = findMatchingTemplate(url, credential.injectionTemplates);
|
|
436
|
+
if (template) {
|
|
437
|
+
if (template.injectionType === "header") {
|
|
438
|
+
const headerName = template.headerName ?? "Authorization";
|
|
439
|
+
const prefix = template.valuePrefix ?? "";
|
|
440
|
+
headers[headerName] = `${prefix}${credential.value}`;
|
|
441
|
+
} else if (template.injectionType === "query") {
|
|
442
|
+
const paramName = template.queryParamName ?? "api_key";
|
|
443
|
+
finalUrl = appendQueryParam(url, paramName, credential.value);
|
|
444
|
+
}
|
|
445
|
+
} else {
|
|
446
|
+
// No matching template — fall back to Bearer auth
|
|
447
|
+
headers["Authorization"] = `Bearer ${credential.value}`;
|
|
448
|
+
}
|
|
389
449
|
break;
|
|
450
|
+
}
|
|
390
451
|
|
|
391
452
|
case HandleType.LocalOAuth:
|
|
392
453
|
case HandleType.PlatformOAuth:
|
|
@@ -401,7 +462,62 @@ function buildOutboundHeaders(
|
|
|
401
462
|
break;
|
|
402
463
|
}
|
|
403
464
|
|
|
404
|
-
return headers;
|
|
465
|
+
return { headers, url: finalUrl };
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
/**
|
|
469
|
+
* Find the first injection template whose `hostPattern` matches the
|
|
470
|
+
* target URL's hostname. Returns undefined if no template matches or
|
|
471
|
+
* no templates are defined.
|
|
472
|
+
*/
|
|
473
|
+
function findMatchingTemplate(
|
|
474
|
+
url: string,
|
|
475
|
+
templates: InjectionTemplate[] | undefined,
|
|
476
|
+
): InjectionTemplate | undefined {
|
|
477
|
+
if (!templates || templates.length === 0) return undefined;
|
|
478
|
+
|
|
479
|
+
let hostname: string;
|
|
480
|
+
try {
|
|
481
|
+
hostname = new URL(url).hostname;
|
|
482
|
+
} catch {
|
|
483
|
+
return undefined;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
return templates.find((t) => matchHostPattern(t.hostPattern, hostname));
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
/**
|
|
490
|
+
* Simple glob-style host pattern matching.
|
|
491
|
+
*
|
|
492
|
+
* Supports:
|
|
493
|
+
* - Exact match: `"api.fal.ai"` matches `"api.fal.ai"`
|
|
494
|
+
* - Leading wildcard: `"*.fal.ai"` matches `"api.fal.ai"`, `"queue.fal.ai"`
|
|
495
|
+
* - Bare wildcard: `"*"` matches everything
|
|
496
|
+
*/
|
|
497
|
+
function matchHostPattern(pattern: string, hostname: string): boolean {
|
|
498
|
+
const lPattern = pattern.toLowerCase();
|
|
499
|
+
const lHostname = hostname.toLowerCase();
|
|
500
|
+
if (lPattern === "*") return true;
|
|
501
|
+
if (lPattern.startsWith("*.")) {
|
|
502
|
+
const suffix = lPattern.slice(1); // e.g. ".fal.ai"
|
|
503
|
+
return lHostname.endsWith(suffix) || lHostname === lPattern.slice(2);
|
|
504
|
+
}
|
|
505
|
+
return lPattern === lHostname;
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
/**
|
|
509
|
+
* Append a query parameter to a URL, preserving existing query params.
|
|
510
|
+
*/
|
|
511
|
+
function appendQueryParam(url: string, name: string, value: string): string {
|
|
512
|
+
try {
|
|
513
|
+
const parsed = new URL(url);
|
|
514
|
+
parsed.searchParams.set(name, value);
|
|
515
|
+
return parsed.toString();
|
|
516
|
+
} catch {
|
|
517
|
+
// If URL parsing fails, fall back to naive append
|
|
518
|
+
const separator = url.includes("?") ? "&" : "?";
|
|
519
|
+
return `${url}${separator}${encodeURIComponent(name)}=${encodeURIComponent(value)}`;
|
|
520
|
+
}
|
|
405
521
|
}
|
|
406
522
|
|
|
407
523
|
// ---------------------------------------------------------------------------
|
|
@@ -420,9 +536,17 @@ async function performHttpRequest(
|
|
|
420
536
|
originalPolicy: PolicyResult & { allowed: true },
|
|
421
537
|
credentialHandle: string,
|
|
422
538
|
deps: HttpExecutorDeps,
|
|
539
|
+
credential?: MaterialisedCredential,
|
|
540
|
+
callerHeaders?: Record<string, string>,
|
|
423
541
|
): Promise<RawHttpResponse> {
|
|
424
542
|
const fetchFn = deps.fetch ?? globalThis.fetch;
|
|
425
543
|
|
|
544
|
+
// Preserve the original caller headers (before auth injection) so that
|
|
545
|
+
// redirect re-authentication starts from a clean slate on each hop.
|
|
546
|
+
// This prevents previously injected auth headers from being treated as
|
|
547
|
+
// caller headers and leaking credentials across redirect hops.
|
|
548
|
+
const originalCallerHeaders = callerHeaders ?? headers;
|
|
549
|
+
|
|
426
550
|
let currentUrl = url;
|
|
427
551
|
let currentMethod = method;
|
|
428
552
|
let currentHeaders = headers;
|
|
@@ -466,14 +590,21 @@ async function performHttpRequest(
|
|
|
466
590
|
// Resolve the redirect URL (may be relative)
|
|
467
591
|
const redirectUrl = new URL(locationHeader, currentUrl).toString();
|
|
468
592
|
|
|
593
|
+
// Determine the method that will actually be used on the next hop.
|
|
594
|
+
// 303 converts any method to GET (per RFC 9110 §15.4.4); other
|
|
595
|
+
// redirect statuses preserve the method.
|
|
596
|
+
const nextMethod = response.status === 303 ? "GET" : currentMethod;
|
|
597
|
+
|
|
469
598
|
// Enforce grant policy on the redirect target — the redirect must
|
|
470
|
-
// independently satisfy the same credential handle's grant policy
|
|
599
|
+
// independently satisfy the same credential handle's grant policy
|
|
600
|
+
// using the method we will actually send.
|
|
601
|
+
// Sanitise purpose string to avoid leaking query-injected secrets.
|
|
471
602
|
const redirectPolicy = evaluateHttpPolicy(
|
|
472
603
|
{
|
|
473
604
|
credentialHandle,
|
|
474
|
-
method:
|
|
605
|
+
method: nextMethod,
|
|
475
606
|
url: redirectUrl,
|
|
476
|
-
purpose: `redirect from ${currentUrl}`,
|
|
607
|
+
purpose: `redirect from ${sanitiseUrl(currentUrl)}`,
|
|
477
608
|
},
|
|
478
609
|
deps.persistentGrantStore,
|
|
479
610
|
deps.temporaryGrantStore,
|
|
@@ -485,13 +616,27 @@ async function performHttpRequest(
|
|
|
485
616
|
);
|
|
486
617
|
}
|
|
487
618
|
|
|
488
|
-
//
|
|
619
|
+
// Apply the method/body changes for 303 redirects
|
|
489
620
|
if (response.status === 303) {
|
|
490
621
|
currentMethod = "GET";
|
|
491
622
|
currentBody = undefined;
|
|
492
623
|
}
|
|
493
624
|
|
|
494
|
-
|
|
625
|
+
// Re-apply auth injection for the redirect URL starting from the
|
|
626
|
+
// original caller headers — not currentHeaders which already contain
|
|
627
|
+
// auth injected on the previous hop. This prevents credential leakage
|
|
628
|
+
// across multi-redirect flows.
|
|
629
|
+
if (credential) {
|
|
630
|
+
const reAuthenticated = buildAuthenticatedRequest(
|
|
631
|
+
redirectUrl,
|
|
632
|
+
originalCallerHeaders,
|
|
633
|
+
credential,
|
|
634
|
+
);
|
|
635
|
+
currentUrl = reAuthenticated.url;
|
|
636
|
+
currentHeaders = reAuthenticated.headers;
|
|
637
|
+
} else {
|
|
638
|
+
currentUrl = redirectUrl;
|
|
639
|
+
}
|
|
495
640
|
continue;
|
|
496
641
|
}
|
|
497
642
|
|