@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
@@ -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. The internal store uses a simpler schema;
40
- * the wire format includes additional status/lifecycle fields.
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: grant.tool as "http" | "command",
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: null,
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
- const persistentGrant: PersistentGrant = {
103
- id: grantId,
104
- tool: proposal.type,
105
- pattern:
106
- proposal.type === "http"
107
- ? `${proposal.method} ${proposal.url}`
108
- : proposal.command,
109
- scope: proposal.credentialHandle,
110
- createdAt: now,
111
- };
112
-
113
- // Persist the grant.
114
- deps.persistentGrantStore.add(persistentGrant);
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
- // Also record a temporary grant so the caller can use it immediately.
117
- // Map TTL to the appropriate temporary grant kind.
118
- if (decision.ttl === "PT10M") {
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, optionally filtered by session ID,
169
- * credential handle, or status. Returns wire-format PersistentGrantRecords
170
- * that never include raw secret material.
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
- const allGrants = deps.persistentGrantStore.getAll();
177
- const projected = allGrants.map((g) => projectGrant(g, deps.sessionId));
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
- * Removes a grant from the persistent store by its stable ID. Returns
211
- * success/failure. The reason field is logged but not persisted (the
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 removed = deps.persistentGrantStore.remove(request.grantId);
239
+ const revoked = deps.persistentGrantStore.markRevoked(
240
+ request.grantId,
241
+ request.reason,
242
+ );
219
243
 
220
- if (!removed) {
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 `allow_thread` decisions.
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
- * - `allow_thread`: Keyed by proposal hash + conversation ID. Scoped to a
13
- * single conversation thread.
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" | "allow_thread";
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 `allow_thread`, ignored otherwise. */
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). Only set for `allow_10m`. */
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
- * - `allow_thread`: keyed by proposal hash + conversation ID.
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 === "allow_thread") {
53
+ if (kind === "allow_conversation") {
54
54
  if (!conversationId) {
55
55
  throw new Error(
56
- "allow_thread grants require a conversationId",
56
+ "allow_conversation grants require a conversationId",
57
57
  );
58
58
  }
59
- return `thread:${conversationId}:${proposalHash}`;
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 thread grants,
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
- * - `allow_thread`: Returns `true` only if a grant exists for the given
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
- // allow_thread — no expiry, just existence check
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 `allow_thread` in order.
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 allow_thread (requires conversationId)
169
- if (conversationId && this.check("allow_thread", proposalHash, conversationId)) {
170
- return "allow_thread";
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/thread ends. Only removes `allow_thread`
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 = `thread:${conversationId}:`;
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);
@@ -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
- /** Session ID for audit records. */
79
- sessionId: string;
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 outboundHeaders = buildOutboundHeaders(
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
- request.url,
212
- outboundHeaders,
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 header injection
390
+ // Auth injection
362
391
  // ---------------------------------------------------------------------------
363
392
 
364
393
  /**
365
- * Build the outbound request headers by:
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 as an Authorization header.
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 buildOutboundHeaders(
415
+ function buildAuthenticatedRequest(
416
+ url: string,
370
417
  callerHeaders: Record<string, string>,
371
418
  credential: MaterialisedCredential,
372
- ): Record<string, string> {
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
- // Static secrets are injected as Bearer tokens by default.
386
- // The subject metadata could specify a different injection strategy
387
- // in the future, but for now Bearer is the safe default.
388
- headers["Authorization"] = `Bearer ${credential.value}`;
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: currentMethod,
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
- // For 303 redirects, convert to GET
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
- currentUrl = redirectUrl;
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