@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
@@ -0,0 +1,254 @@
1
+ /**
2
+ * CES-native SecureKeyBackend for **local mode only**.
3
+ *
4
+ * In local mode, CES runs as a child process of the assistant on the same
5
+ * machine as the same user and can read/write the assistant's encrypted key
6
+ * store file at `<vellumRoot>/protected/keys.enc`.
7
+ *
8
+ * This implementation replicates the encryption/decryption logic from the
9
+ * assistant's `encrypted-store.ts` without importing assistant-internal
10
+ * modules. Writes are needed for OAuth token refresh — when CES refreshes
11
+ * an expired access token, the new token must be persisted back to the
12
+ * encrypted store so subsequent reads (by both CES and the assistant)
13
+ * see the updated value.
14
+ *
15
+ * The encrypted store uses AES-256-GCM with a key derived from machine-
16
+ * specific entropy via PBKDF2. The derivation includes `userInfo().username`
17
+ * and `userInfo().homedir`, so the key is only correct when CES runs as the
18
+ * same OS user as the assistant.
19
+ *
20
+ * **This backend must NOT be used in managed mode.** In managed (sidecar)
21
+ * deployments, the assistant container runs as `root` while the CES
22
+ * container runs as `ces` (uid 1001). The different user identity produces
23
+ * a different PBKDF2-derived key, causing silent decryption failures.
24
+ * Managed deployments must use `platform_oauth` handles exclusively.
25
+ */
26
+
27
+ import {
28
+ createCipheriv,
29
+ createDecipheriv,
30
+ pbkdf2Sync,
31
+ randomBytes,
32
+ } from "node:crypto";
33
+ import { chmodSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
34
+ import { hostname, userInfo } from "node:os";
35
+ import { dirname, join } from "node:path";
36
+
37
+ import type {
38
+ SecureKeyBackend,
39
+ SecureKeyDeleteResult,
40
+ } from "@vellumai/credential-storage";
41
+
42
+ // ---------------------------------------------------------------------------
43
+ // Constants (must match assistant/src/security/encrypted-store.ts)
44
+ // ---------------------------------------------------------------------------
45
+
46
+ const ALGORITHM = "aes-256-gcm";
47
+ const KEY_LENGTH = 32; // bytes (256 bits)
48
+ const IV_LENGTH = 16; // bytes (128 bits)
49
+ const AUTH_TAG_LENGTH = 16; // bytes
50
+ const PBKDF2_ITERATIONS =
51
+ process.env.BUN_TEST === "1" ? 1 : 100_000;
52
+
53
+ // ---------------------------------------------------------------------------
54
+ // On-disk format (must match assistant/src/security/encrypted-store.ts)
55
+ // ---------------------------------------------------------------------------
56
+
57
+ interface EncryptedEntry {
58
+ iv: string;
59
+ tag: string;
60
+ data: string;
61
+ }
62
+
63
+ interface StoreFile {
64
+ version: 1;
65
+ salt: string;
66
+ entries: Record<string, EncryptedEntry>;
67
+ }
68
+
69
+ // ---------------------------------------------------------------------------
70
+ // Machine entropy (must match assistant/src/security/encrypted-store.ts)
71
+ // ---------------------------------------------------------------------------
72
+
73
+ function getMachineEntropy(): string {
74
+ const parts: string[] = [];
75
+ try {
76
+ parts.push(hostname());
77
+ } catch {
78
+ parts.push("unknown-host");
79
+ }
80
+ try {
81
+ parts.push(userInfo().username);
82
+ } catch {
83
+ parts.push("unknown-user");
84
+ }
85
+ parts.push(process.platform);
86
+ parts.push(process.arch);
87
+ try {
88
+ parts.push(userInfo().homedir);
89
+ } catch {
90
+ parts.push("/tmp");
91
+ }
92
+ return parts.join(":");
93
+ }
94
+
95
+ function deriveKey(salt: Buffer, entropyOverride?: string): Buffer {
96
+ const entropy = entropyOverride ?? getMachineEntropy();
97
+ return pbkdf2Sync(entropy, salt, PBKDF2_ITERATIONS, KEY_LENGTH, "sha512");
98
+ }
99
+
100
+ // ---------------------------------------------------------------------------
101
+ // Decrypt
102
+ // ---------------------------------------------------------------------------
103
+
104
+ function decrypt(entry: EncryptedEntry, key: Buffer): string {
105
+ const iv = Buffer.from(entry.iv, "hex");
106
+ const tag = Buffer.from(entry.tag, "hex");
107
+ const data = Buffer.from(entry.data, "hex");
108
+ const decipher = createDecipheriv(ALGORITHM, key, iv, {
109
+ authTagLength: AUTH_TAG_LENGTH,
110
+ });
111
+ decipher.setAuthTag(tag);
112
+ const decrypted = Buffer.concat([decipher.update(data), decipher.final()]);
113
+ return decrypted.toString("utf-8");
114
+ }
115
+
116
+ function encrypt(plaintext: string, key: Buffer): EncryptedEntry {
117
+ const iv = randomBytes(IV_LENGTH);
118
+ const cipher = createCipheriv(ALGORITHM, key, iv, {
119
+ authTagLength: AUTH_TAG_LENGTH,
120
+ });
121
+ const encrypted = Buffer.concat([
122
+ cipher.update(plaintext, "utf-8"),
123
+ cipher.final(),
124
+ ]);
125
+ const tag = cipher.getAuthTag();
126
+ return {
127
+ iv: iv.toString("hex"),
128
+ tag: tag.toString("hex"),
129
+ data: encrypted.toString("hex"),
130
+ };
131
+ }
132
+
133
+ // ---------------------------------------------------------------------------
134
+ // Store writer
135
+ // ---------------------------------------------------------------------------
136
+
137
+ function writeStore(store: StoreFile, storePath: string): void {
138
+ const protectedDir = dirname(storePath);
139
+ mkdirSync(protectedDir, { recursive: true });
140
+ // Atomic write: write to temp file then rename to avoid partial/corrupt writes.
141
+ const tmpPath = storePath + `.tmp.${process.pid}`;
142
+ writeFileSync(tmpPath, JSON.stringify(store, null, 2), { mode: 0o600 });
143
+ chmodSync(tmpPath, 0o600);
144
+ renameSync(tmpPath, storePath);
145
+ }
146
+
147
+ // ---------------------------------------------------------------------------
148
+ // Store reader
149
+ // ---------------------------------------------------------------------------
150
+
151
+ function readStore(storePath: string): StoreFile | null {
152
+ try {
153
+ const raw = readFileSync(storePath, "utf-8");
154
+ const parsed = JSON.parse(raw);
155
+ if (
156
+ parsed.version !== 1 ||
157
+ typeof parsed.salt !== "string" ||
158
+ typeof parsed.entries !== "object"
159
+ ) {
160
+ return null;
161
+ }
162
+ return parsed as StoreFile;
163
+ } catch {
164
+ return null;
165
+ }
166
+ }
167
+
168
+ // ---------------------------------------------------------------------------
169
+ // Backend implementation
170
+ // ---------------------------------------------------------------------------
171
+
172
+ /**
173
+ * Create a SecureKeyBackend backed by the assistant's encrypted key store.
174
+ *
175
+ * Supports `get` and `set` operations. `set` is needed for persisting
176
+ * refreshed OAuth tokens. `delete` remains unsupported (returns "error")
177
+ * because CES never needs to remove keys.
178
+ *
179
+ * @param vellumRoot - The Vellum root directory (e.g. `~/.vellum`).
180
+ * @param options.entropyOverride - If provided, used instead of local
181
+ * machine entropy for key derivation. In managed mode the CES sidecar
182
+ * runs in a different container with a different hostname/user, so it
183
+ * must use the assistant's entropy (read from the shared data mount)
184
+ * to derive the same AES key.
185
+ * @param options.entropyGetter - If provided, called on each `get()`/`set()`
186
+ * to lazily resolve entropy. This handles the startup race where the
187
+ * entropy file may not exist at construction time but appears later.
188
+ * Takes precedence over `entropyOverride`.
189
+ */
190
+ export function createLocalSecureKeyBackend(
191
+ vellumRoot: string,
192
+ options?: { entropyOverride?: string; entropyGetter?: () => string | undefined },
193
+ ): SecureKeyBackend {
194
+ const storePath = join(vellumRoot, "protected", "keys.enc");
195
+ const staticEntropy = options?.entropyOverride;
196
+ const entropyGetter = options?.entropyGetter;
197
+
198
+ return {
199
+ async get(key: string): Promise<string | undefined> {
200
+ try {
201
+ const store = readStore(storePath);
202
+ if (!store) return undefined;
203
+
204
+ const entry = store.entries[key];
205
+ if (!entry) return undefined;
206
+
207
+ // Lazy re-read: prefer getter (handles startup race) over static value.
208
+ const entropy = entropyGetter?.() ?? staticEntropy;
209
+
210
+ const salt = Buffer.from(store.salt, "hex");
211
+ const derivedKey = deriveKey(salt, entropy);
212
+ return decrypt(entry, derivedKey);
213
+ } catch {
214
+ return undefined;
215
+ }
216
+ },
217
+
218
+ // NOTE: read-modify-write without file locking. The atomic rename
219
+ // (writeStore) prevents corruption from partial writes, but concurrent
220
+ // set() calls can lose updates. The window is small in practice because
221
+ // CES serialises refresh via RefreshDeduplicator. File locking is a
222
+ // future improvement.
223
+ async set(key: string, value: string): Promise<boolean> {
224
+ try {
225
+ const store = readStore(storePath);
226
+ if (!store) return false;
227
+
228
+ const entropy = entropyGetter?.() ?? staticEntropy;
229
+ const salt = Buffer.from(store.salt, "hex");
230
+ const derivedKey = deriveKey(salt, entropy);
231
+ store.entries[key] = encrypt(value, derivedKey);
232
+ writeStore(store, storePath);
233
+ return true;
234
+ } catch {
235
+ return false;
236
+ }
237
+ },
238
+
239
+ // CES never deletes keys — only reads and writes (for token refresh).
240
+ async delete(_key: string): Promise<SecureKeyDeleteResult> {
241
+ return "error";
242
+ },
243
+
244
+ async list(): Promise<string[]> {
245
+ try {
246
+ const store = readStore(storePath);
247
+ if (!store) return [];
248
+ return Object.keys(store.entries);
249
+ } catch {
250
+ return [];
251
+ }
252
+ },
253
+ };
254
+ }
@@ -0,0 +1,263 @@
1
+ /**
2
+ * OAuth token refresh implementation for CES local mode.
3
+ *
4
+ * Performs the actual OAuth2 token refresh by:
5
+ * 1. Looking up the connection's provider and app configuration from the
6
+ * assistant's SQLite database (read-only).
7
+ * 2. Retrieving the client secret from the secure-key backend.
8
+ * 3. Calling the provider's token endpoint with the refresh token.
9
+ * 4. Returning a `TokenRefreshResult` for the `LocalMaterialiser` to persist.
10
+ *
11
+ * This module does NOT import any assistant-internal modules. It queries
12
+ * the SQLite database directly (like `local-oauth-lookup.ts`) and performs
13
+ * the HTTP refresh call inline (replicating the logic from the assistant's
14
+ * `security/oauth2.ts:refreshOAuth2Token`).
15
+ */
16
+
17
+ import Database from "bun:sqlite";
18
+ import { existsSync } from "node:fs";
19
+ import { join } from "node:path";
20
+
21
+ import {
22
+ computeExpiresAt,
23
+ type SecureKeyBackend,
24
+ type TokenRefreshResult,
25
+ } from "@vellumai/credential-storage";
26
+
27
+ import type { TokenRefreshFn } from "./local.js";
28
+
29
+ // ---------------------------------------------------------------------------
30
+ // SQLite row shapes (match assistant schema without importing Drizzle)
31
+ // ---------------------------------------------------------------------------
32
+
33
+ interface OAuthConnectionRow {
34
+ id: string;
35
+ oauth_app_id: string;
36
+ provider_key: string;
37
+ }
38
+
39
+ interface OAuthAppRow {
40
+ id: string;
41
+ provider_key: string;
42
+ client_id: string;
43
+ client_secret_credential_path: string;
44
+ }
45
+
46
+ interface OAuthProviderRow {
47
+ provider_key: string;
48
+ token_url: string;
49
+ token_endpoint_auth_method: string | null;
50
+ }
51
+
52
+ // ---------------------------------------------------------------------------
53
+ // Token endpoint auth method (matches assistant/src/security/oauth2.ts)
54
+ // ---------------------------------------------------------------------------
55
+
56
+ type TokenEndpointAuthMethod = "client_secret_basic" | "client_secret_post";
57
+
58
+ // ---------------------------------------------------------------------------
59
+ // Refresh config resolution
60
+ // ---------------------------------------------------------------------------
61
+
62
+ interface RefreshConfig {
63
+ tokenUrl: string;
64
+ clientId: string;
65
+ clientSecret?: string;
66
+ authMethod: TokenEndpointAuthMethod;
67
+ }
68
+
69
+ /**
70
+ * Resolve the OAuth refresh configuration for a connection by querying
71
+ * the assistant's SQLite database (read-only) and the secure-key backend.
72
+ */
73
+ async function resolveRefreshConfig(
74
+ dbPath: string,
75
+ connectionId: string,
76
+ secureKeyBackend: SecureKeyBackend,
77
+ ): Promise<RefreshConfig | { error: string }> {
78
+ if (!existsSync(dbPath)) {
79
+ return { error: `Database not found at ${dbPath}` };
80
+ }
81
+
82
+ let db: Database | undefined;
83
+ try {
84
+ db = new Database(dbPath, { readonly: true });
85
+
86
+ // 1. Look up the connection to get oauth_app_id and provider_key
87
+ const conn = db
88
+ .query<OAuthConnectionRow, [string, string]>(
89
+ `SELECT id, oauth_app_id, provider_key FROM oauth_connections WHERE id = ? AND status = ? LIMIT 1`,
90
+ )
91
+ .get(connectionId, "active");
92
+
93
+ if (!conn) {
94
+ return { error: `No active OAuth connection found for "${connectionId}"` };
95
+ }
96
+
97
+ // 2. Look up the app to get client_id and client_secret_credential_path
98
+ const app = db
99
+ .query<OAuthAppRow, [string]>(
100
+ `SELECT id, provider_key, client_id, client_secret_credential_path FROM oauth_apps WHERE id = ? LIMIT 1`,
101
+ )
102
+ .get(conn.oauth_app_id);
103
+
104
+ if (!app) {
105
+ return { error: `No OAuth app found for connection "${connectionId}"` };
106
+ }
107
+
108
+ // 3. Look up the provider to get token_url and auth method
109
+ const provider = db
110
+ .query<OAuthProviderRow, [string]>(
111
+ `SELECT provider_key, token_url, token_endpoint_auth_method FROM oauth_providers WHERE provider_key = ? LIMIT 1`,
112
+ )
113
+ .get(conn.provider_key);
114
+
115
+ if (!provider) {
116
+ return { error: `No OAuth provider found for "${conn.provider_key}"` };
117
+ }
118
+
119
+ if (!provider.token_url || !app.client_id) {
120
+ return { error: `Missing OAuth2 refresh config for "${conn.provider_key}"` };
121
+ }
122
+
123
+ // 4. Retrieve the client secret from secure storage
124
+ const clientSecret = await secureKeyBackend.get(
125
+ app.client_secret_credential_path,
126
+ );
127
+
128
+ const authMethod = (provider.token_endpoint_auth_method as TokenEndpointAuthMethod | null) ?? "client_secret_post";
129
+
130
+ return {
131
+ tokenUrl: provider.token_url,
132
+ clientId: app.client_id,
133
+ clientSecret,
134
+ authMethod,
135
+ };
136
+ } catch (err) {
137
+ const msg = err instanceof Error ? err.message : String(err);
138
+ return { error: `Failed to resolve refresh config: ${msg}` };
139
+ } finally {
140
+ db?.close();
141
+ }
142
+ }
143
+
144
+ // ---------------------------------------------------------------------------
145
+ // HTTP token refresh (replicates assistant/src/security/oauth2.ts logic)
146
+ // ---------------------------------------------------------------------------
147
+
148
+ interface RefreshTokenResponse {
149
+ accessToken: string;
150
+ refreshToken?: string;
151
+ expiresIn?: number;
152
+ }
153
+
154
+ async function performTokenRefresh(
155
+ config: RefreshConfig,
156
+ refreshToken: string,
157
+ ): Promise<RefreshTokenResponse> {
158
+ const body: Record<string, string> = {
159
+ grant_type: "refresh_token",
160
+ refresh_token: refreshToken,
161
+ };
162
+
163
+ const headers: Record<string, string> = {
164
+ "Content-Type": "application/x-www-form-urlencoded",
165
+ };
166
+
167
+ if (config.clientSecret && config.authMethod === "client_secret_basic") {
168
+ const credentials = Buffer.from(
169
+ `${config.clientId}:${config.clientSecret}`,
170
+ ).toString("base64");
171
+ headers["Authorization"] = `Basic ${credentials}`;
172
+ } else {
173
+ body.client_id = config.clientId;
174
+ if (config.clientSecret) {
175
+ body.client_secret = config.clientSecret;
176
+ }
177
+ }
178
+
179
+ const resp = await fetch(config.tokenUrl, {
180
+ method: "POST",
181
+ headers,
182
+ body: new URLSearchParams(body),
183
+ });
184
+
185
+ if (!resp.ok) {
186
+ const rawBody = await resp.text().catch(() => "");
187
+ let errorCode = "";
188
+ try {
189
+ const parsed = JSON.parse(rawBody) as Record<string, unknown>;
190
+ if (parsed.error) {
191
+ errorCode = String(parsed.error);
192
+ }
193
+ } catch {
194
+ // non-JSON response
195
+ }
196
+ const detail = errorCode
197
+ ? `HTTP ${resp.status}: ${errorCode}`
198
+ : `HTTP ${resp.status}`;
199
+ throw new Error(`OAuth2 token refresh failed (${detail})`);
200
+ }
201
+
202
+ const data = (await resp.json()) as Record<string, unknown>;
203
+
204
+ return {
205
+ accessToken: data.access_token as string,
206
+ refreshToken: (data.refresh_token as string | undefined) ?? refreshToken,
207
+ expiresIn: data.expires_in as number | undefined,
208
+ };
209
+ }
210
+
211
+ // ---------------------------------------------------------------------------
212
+ // Public factory
213
+ // ---------------------------------------------------------------------------
214
+
215
+ /**
216
+ * Create a `TokenRefreshFn` for CES local mode.
217
+ *
218
+ * The returned function looks up OAuth configuration from the assistant's
219
+ * SQLite database (read-only) and performs the HTTP token refresh call.
220
+ * Token persistence is handled by the `LocalMaterialiser` after this
221
+ * function returns.
222
+ *
223
+ * @param vellumRoot - The Vellum root directory (e.g. `~/.vellum`).
224
+ * @param secureKeyBackend - Backend for retrieving the OAuth client secret.
225
+ */
226
+ export function createLocalTokenRefreshFn(
227
+ vellumRoot: string,
228
+ secureKeyBackend: SecureKeyBackend,
229
+ ): TokenRefreshFn {
230
+ const dbPath = join(vellumRoot, "workspace", "data", "db", "assistant.db");
231
+
232
+ return async (
233
+ connectionId: string,
234
+ refreshToken: string,
235
+ ): Promise<TokenRefreshResult> => {
236
+ // 1. Resolve the refresh config from SQLite + secure storage
237
+ const config = await resolveRefreshConfig(
238
+ dbPath,
239
+ connectionId,
240
+ secureKeyBackend,
241
+ );
242
+
243
+ if ("error" in config) {
244
+ return { success: false, error: config.error };
245
+ }
246
+
247
+ // 2. Perform the HTTP token refresh
248
+ try {
249
+ const result = await performTokenRefresh(config, refreshToken);
250
+ const expiresAt = computeExpiresAt(result.expiresIn ?? null);
251
+
252
+ return {
253
+ success: true,
254
+ accessToken: result.accessToken,
255
+ expiresAt,
256
+ refreshToken: result.refreshToken,
257
+ };
258
+ } catch (err) {
259
+ const message = err instanceof Error ? err.message : String(err);
260
+ return { success: false, error: message };
261
+ }
262
+ };
263
+ }
@@ -22,6 +22,7 @@
22
22
  */
23
23
 
24
24
  import {
25
+ type InjectionTemplate,
25
26
  type SecureKeyBackend,
26
27
  type TokenRefreshResult,
27
28
  getStoredAccessToken,
@@ -55,6 +56,8 @@ export interface MaterialisedCredential {
55
56
  handleType: HandleType;
56
57
  /** For OAuth: the token expiry timestamp (null if unknown). */
57
58
  expiresAt?: number | null;
59
+ /** Injection templates from the credential metadata (local_static only). */
60
+ injectionTemplates?: InjectionTemplate[];
58
61
  }
59
62
 
60
63
  export type MaterialisationResult =
@@ -152,6 +155,7 @@ export class LocalMaterialiser {
152
155
  credential: {
153
156
  value: secretValue,
154
157
  handleType: HandleType.LocalStatic,
158
+ injectionTemplates: subject.metadata.injectionTemplates,
155
159
  },
156
160
  };
157
161
  }
@@ -181,11 +185,22 @@ export class LocalMaterialiser {
181
185
  }
182
186
 
183
187
  // 2. Check if the token is expired and needs refresh
184
- if (
185
- isTokenExpired(connection.expiresAt) &&
186
- connection.hasRefreshToken
187
- ) {
188
- return this.refreshAndMaterialise(subject, connectionId);
188
+ if (connection.hasRefreshToken) {
189
+ // For refreshable tokens, use the proactive buffer so we can refresh
190
+ // before the token actually expires.
191
+ if (isTokenExpired(connection.expiresAt)) {
192
+ return this.refreshAndMaterialise(subject, connectionId);
193
+ }
194
+ } else {
195
+ // For non-refreshable tokens, check against the hard expiry — use
196
+ // every valid second rather than the 5-minute proactive buffer.
197
+ if (connection.expiresAt && Date.now() >= connection.expiresAt) {
198
+ return {
199
+ ok: false,
200
+ error: `Token for OAuth connection "${connectionId}" is expired and no refresh ` +
201
+ `token is available. Re-authorization required.`,
202
+ };
203
+ }
189
204
  }
190
205
 
191
206
  // 3. Token is valid — return it
@@ -263,6 +278,7 @@ export class LocalMaterialiser {
263
278
  connectionId,
264
279
  {
265
280
  accessToken: result.accessToken,
281
+ refreshToken: result.refreshToken,
266
282
  expiresIn: result.expiresAt
267
283
  ? Math.floor((result.expiresAt - Date.now()) / 1000)
268
284
  : null,