@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,340 @@
1
+ /**
2
+ * OAuth connection persistence, token persistence, and refresh support
3
+ * primitives.
4
+ *
5
+ * This module provides portable, backend-agnostic helpers for:
6
+ * - Secure-key path conventions for OAuth tokens and client secrets
7
+ * - Token expiry checking with proactive refresh buffering
8
+ * - Token refresh circuit breaker to prevent retry storms
9
+ * - Per-connection refresh deduplication
10
+ * - Abstract token persistence interface
11
+ *
12
+ * It has NO dependency on the assistant daemon, SQLite, Drizzle, or any
13
+ * service-specific module. The assistant's token-manager.ts and
14
+ * token-persistence.ts wire in the platform-specific backends and
15
+ * delegate here for shared logic.
16
+ */
17
+
18
+ import type { SecureKeyBackend } from "./index.js";
19
+
20
+ // ---------------------------------------------------------------------------
21
+ // Secure-key path conventions
22
+ // ---------------------------------------------------------------------------
23
+
24
+ /**
25
+ * Build the secure-key path for an OAuth connection's access token.
26
+ */
27
+ export function oauthConnectionAccessTokenPath(connectionId: string): string {
28
+ return `oauth_connection/${connectionId}/access_token`;
29
+ }
30
+
31
+ /**
32
+ * Build the secure-key path for an OAuth connection's refresh token.
33
+ */
34
+ export function oauthConnectionRefreshTokenPath(connectionId: string): string {
35
+ return `oauth_connection/${connectionId}/refresh_token`;
36
+ }
37
+
38
+ /**
39
+ * Build the secure-key path for an OAuth app's client secret.
40
+ */
41
+ export function oauthAppClientSecretPath(appId: string): string {
42
+ return `oauth_app/${appId}/client_secret`;
43
+ }
44
+
45
+ // ---------------------------------------------------------------------------
46
+ // Token expiry
47
+ // ---------------------------------------------------------------------------
48
+
49
+ /** Buffer before expiry to trigger proactive refresh (5 minutes). */
50
+ export const EXPIRY_BUFFER_MS = 5 * 60 * 1000;
51
+
52
+ /**
53
+ * Check whether a token is expired or will expire within the buffer window.
54
+ */
55
+ export function isTokenExpired(
56
+ expiresAt: number | null,
57
+ bufferMs: number = EXPIRY_BUFFER_MS
58
+ ): boolean {
59
+ if (!expiresAt) return false;
60
+ return Date.now() >= expiresAt - bufferMs;
61
+ }
62
+
63
+ /**
64
+ * Compute the absolute expiry timestamp from an `expires_in` seconds value.
65
+ * Returns null if the value is missing or zero.
66
+ */
67
+ export function computeExpiresAt(
68
+ expiresIn: number | null | undefined
69
+ ): number | null {
70
+ if (expiresIn == null || expiresIn <= 0) return null;
71
+ return Date.now() + expiresIn * 1000;
72
+ }
73
+
74
+ // ---------------------------------------------------------------------------
75
+ // Token refresh circuit breaker
76
+ // ---------------------------------------------------------------------------
77
+ // Prevents retry storms when a provider persistently rejects refresh
78
+ // attempts (e.g. revoked refresh token returning 401 repeatedly).
79
+ // Per-key state: after FAILURE_THRESHOLD consecutive failures, stop
80
+ // attempting refreshes for a cooldown period that doubles on each
81
+ // successive trip (exponential backoff), capped at MAX_COOLDOWN_MS.
82
+ // A successful refresh resets the breaker for that key.
83
+
84
+ export const REFRESH_FAILURE_THRESHOLD = 3;
85
+ export const INITIAL_COOLDOWN_MS = 30_000;
86
+ export const MAX_COOLDOWN_MS = 10 * 60 * 1000;
87
+
88
+ export interface RefreshBreakerState {
89
+ consecutiveFailures: number;
90
+ openedAt: number;
91
+ cooldownMs: number;
92
+ }
93
+
94
+ /**
95
+ * In-memory token refresh circuit breaker.
96
+ *
97
+ * Tracks per-key (typically connection ID) failure state. After
98
+ * FAILURE_THRESHOLD consecutive failures, the breaker opens for a
99
+ * cooldown period that doubles on each successive trip.
100
+ */
101
+ export class RefreshCircuitBreaker {
102
+ private breakers = new Map<string, RefreshBreakerState>();
103
+
104
+ /**
105
+ * Check whether the breaker is currently open (refusing refresh attempts)
106
+ * for the given key. If the cooldown has expired, transitions to half-open
107
+ * by resetting the failure count.
108
+ */
109
+ isOpen(key: string): boolean {
110
+ const state = this.breakers.get(key);
111
+ if (!state || state.consecutiveFailures < REFRESH_FAILURE_THRESHOLD)
112
+ return false;
113
+ if (Date.now() - state.openedAt < state.cooldownMs) return true;
114
+ // Cooldown expired — transition to half-open: reset failure count so the
115
+ // next batch of failures must reach the threshold again to re-trip. The
116
+ // existing cooldownMs is preserved so re-tripping will escalate it.
117
+ state.consecutiveFailures = 0;
118
+ return false;
119
+ }
120
+
121
+ /** Get the breaker state for a key, if it exists. */
122
+ getState(key: string): RefreshBreakerState | undefined {
123
+ return this.breakers.get(key);
124
+ }
125
+
126
+ /** Record a successful refresh, resetting the breaker for the key. */
127
+ recordSuccess(key: string): void {
128
+ this.breakers.delete(key);
129
+ }
130
+
131
+ /** Record a failed refresh attempt, potentially opening the breaker. */
132
+ recordFailure(key: string): void {
133
+ const state = this.breakers.get(key);
134
+ if (!state) {
135
+ this.breakers.set(key, {
136
+ consecutiveFailures: 1,
137
+ openedAt: 0,
138
+ cooldownMs: INITIAL_COOLDOWN_MS,
139
+ });
140
+ return;
141
+ }
142
+ state.consecutiveFailures++;
143
+ if (state.consecutiveFailures >= REFRESH_FAILURE_THRESHOLD) {
144
+ // Only escalate cooldown on the exact failure that trips the breaker.
145
+ // Concurrent in-flight failures that arrive after the threshold is
146
+ // already crossed must not double the cooldown again.
147
+ if (
148
+ state.consecutiveFailures === REFRESH_FAILURE_THRESHOLD &&
149
+ state.openedAt > 0
150
+ ) {
151
+ state.cooldownMs = Math.min(state.cooldownMs * 2, MAX_COOLDOWN_MS);
152
+ }
153
+ state.openedAt = Date.now();
154
+ }
155
+ }
156
+
157
+ /** Reset all breaker state (primarily for testing). */
158
+ clear(): void {
159
+ this.breakers.clear();
160
+ }
161
+ }
162
+
163
+ // ---------------------------------------------------------------------------
164
+ // Refresh deduplication
165
+ // ---------------------------------------------------------------------------
166
+
167
+ /**
168
+ * Deduplicates concurrent refresh attempts for the same key.
169
+ *
170
+ * When multiple callers detect an expired or rejected token for the same
171
+ * connection simultaneously, only one actual refresh attempt is made.
172
+ * Other callers join the in-flight promise.
173
+ */
174
+ export class RefreshDeduplicator {
175
+ private inflight = new Map<string, Promise<string>>();
176
+
177
+ /**
178
+ * Execute a refresh operation, deduplicating concurrent calls for the same key.
179
+ * If a refresh is already in flight for the given key, returns the existing promise.
180
+ */
181
+ deduplicate(key: string, refreshFn: () => Promise<string>): Promise<string> {
182
+ const existing = this.inflight.get(key);
183
+ if (existing) return existing;
184
+
185
+ const promise = refreshFn().finally(() => {
186
+ this.inflight.delete(key);
187
+ });
188
+ this.inflight.set(key, promise);
189
+ return promise;
190
+ }
191
+
192
+ /** Reset all in-flight state (primarily for testing). */
193
+ clear(): void {
194
+ this.inflight.clear();
195
+ }
196
+ }
197
+
198
+ // ---------------------------------------------------------------------------
199
+ // Credential error classification
200
+ // ---------------------------------------------------------------------------
201
+
202
+ /**
203
+ * Distinguish credential-specific refresh failures (which need reauthorization)
204
+ * from transient errors (network timeouts, 5xx) that can be retried.
205
+ *
206
+ * Credential errors: 400 with invalid_grant or invalid_client, 401, 403.
207
+ * Everything else (5xx, network errors, non-credential 400s) is transient.
208
+ */
209
+ export function isCredentialError(err: unknown): boolean {
210
+ if (!(err instanceof Error)) return false;
211
+ const msg = err.message;
212
+ // 401/403 are always credential errors
213
+ if (/HTTP\s+40[13]\b/.test(msg)) return true;
214
+ // 400 with invalid_grant means the refresh token is revoked/expired;
215
+ // invalid_client means client credentials are bad/rotated
216
+ if (/HTTP\s+400\b/.test(msg) && /invalid_grant|invalid_client/.test(msg))
217
+ return true;
218
+ return false;
219
+ }
220
+
221
+ // ---------------------------------------------------------------------------
222
+ // Token persistence helpers
223
+ // ---------------------------------------------------------------------------
224
+
225
+ /**
226
+ * Persist an OAuth access token (and optionally a refresh token) to the
227
+ * secure-key backend for a given connection ID.
228
+ *
229
+ * When `refreshToken` is provided, it is stored. When omitted (undefined),
230
+ * any existing refresh token is cleared to prevent stale token usage.
231
+ */
232
+ export async function persistOAuthTokens(
233
+ backend: SecureKeyBackend,
234
+ connectionId: string,
235
+ tokens: {
236
+ accessToken: string;
237
+ refreshToken?: string;
238
+ }
239
+ ): Promise<void> {
240
+ const accessPath = oauthConnectionAccessTokenPath(connectionId);
241
+ const stored = await backend.set(accessPath, tokens.accessToken);
242
+ if (!stored) {
243
+ throw new Error("Failed to store access token in secure storage");
244
+ }
245
+
246
+ const refreshPath = oauthConnectionRefreshTokenPath(connectionId);
247
+ if (tokens.refreshToken) {
248
+ await backend.set(refreshPath, tokens.refreshToken);
249
+ } else {
250
+ // Re-auth grants that omit refresh_token must clear any stale stored
251
+ // token — otherwise refresh attempts will use invalid credentials.
252
+ await backend.delete(refreshPath);
253
+ }
254
+ }
255
+
256
+ /**
257
+ * Retrieve the stored access token for a connection from the secure-key backend.
258
+ * Returns undefined if no token is stored.
259
+ */
260
+ export async function getStoredAccessToken(
261
+ backend: SecureKeyBackend,
262
+ connectionId: string
263
+ ): Promise<string | undefined> {
264
+ return backend.get(oauthConnectionAccessTokenPath(connectionId));
265
+ }
266
+
267
+ /**
268
+ * Retrieve the stored refresh token for a connection from the secure-key backend.
269
+ * Returns undefined if no token is stored.
270
+ */
271
+ export async function getStoredRefreshToken(
272
+ backend: SecureKeyBackend,
273
+ connectionId: string
274
+ ): Promise<string | undefined> {
275
+ return backend.get(oauthConnectionRefreshTokenPath(connectionId));
276
+ }
277
+
278
+ /**
279
+ * Delete all OAuth tokens (access + refresh) for a connection from the
280
+ * secure-key backend. Returns the individual deletion results.
281
+ */
282
+ export async function deleteOAuthTokens(
283
+ backend: SecureKeyBackend,
284
+ connectionId: string
285
+ ): Promise<{
286
+ accessTokenResult: "deleted" | "not-found" | "error";
287
+ refreshTokenResult: "deleted" | "not-found" | "error";
288
+ }> {
289
+ // Delete sequentially to avoid lost updates — the encrypted store uses
290
+ // read-modify-write, so concurrent deletes can restore a deleted key.
291
+ const accessTokenResult = await backend.delete(oauthConnectionAccessTokenPath(connectionId));
292
+ const refreshTokenResult = await backend.delete(oauthConnectionRefreshTokenPath(connectionId));
293
+ return { accessTokenResult, refreshTokenResult };
294
+ }
295
+
296
+ /**
297
+ * Store a refreshed access token in the secure-key backend and update
298
+ * connection metadata. Returns the new access token on success.
299
+ *
300
+ * This is the portable portion of the post-refresh persistence logic.
301
+ * Callers are responsible for updating their connection store (e.g. SQLite)
302
+ * with the new expiresAt and hasRefreshToken values.
303
+ */
304
+ export async function persistRefreshedTokens(
305
+ backend: SecureKeyBackend,
306
+ connectionId: string,
307
+ result: {
308
+ accessToken: string;
309
+ refreshToken?: string;
310
+ expiresIn?: number | null;
311
+ }
312
+ ): Promise<{
313
+ accessToken: string;
314
+ expiresAt: number | null;
315
+ hasRefreshToken: boolean;
316
+ }> {
317
+ const accessPath = oauthConnectionAccessTokenPath(connectionId);
318
+ if (!(await backend.set(accessPath, result.accessToken))) {
319
+ throw new Error(
320
+ `Failed to store refreshed access token for connection ${connectionId}`
321
+ );
322
+ }
323
+
324
+ if (result.refreshToken) {
325
+ const refreshPath = oauthConnectionRefreshTokenPath(connectionId);
326
+ if (!(await backend.set(refreshPath, result.refreshToken))) {
327
+ throw new Error(
328
+ `Failed to store refreshed refresh token for connection ${connectionId}`
329
+ );
330
+ }
331
+ }
332
+
333
+ const expiresAt = computeExpiresAt(result.expiresIn);
334
+
335
+ return {
336
+ accessToken: result.accessToken,
337
+ expiresAt,
338
+ hasRefreshToken: !!result.refreshToken,
339
+ };
340
+ }
@@ -0,0 +1,365 @@
1
+ /**
2
+ * Static credential metadata persistence primitives.
3
+ *
4
+ * Provides a portable, path-parameterized metadata store for local static
5
+ * credential records. This module has NO dependency on the assistant daemon,
6
+ * platform helpers, or any service-specific code — callers supply the file
7
+ * path and this module handles versioned JSON persistence with atomic writes.
8
+ *
9
+ * The assistant's `metadata-store.ts` wires in the platform-specific data
10
+ * directory and re-exports convenience functions that delegate here.
11
+ */
12
+
13
+ import { randomUUID } from "node:crypto";
14
+ import {
15
+ existsSync,
16
+ mkdirSync,
17
+ readFileSync,
18
+ renameSync,
19
+ writeFileSync,
20
+ } from "node:fs";
21
+ import { dirname, join } from "node:path";
22
+
23
+ import type { InjectionTemplate, StaticCredentialRecord } from "./index.js";
24
+
25
+ // ---------------------------------------------------------------------------
26
+ // On-disk schema
27
+ // ---------------------------------------------------------------------------
28
+
29
+ /** Current on-disk schema version. */
30
+ const CURRENT_VERSION = 5;
31
+
32
+ interface MetadataFile {
33
+ version: typeof CURRENT_VERSION;
34
+ credentials: StaticCredentialRecord[];
35
+ }
36
+
37
+ /**
38
+ * Returned when the on-disk file has a version we don't understand.
39
+ * Callers that mutate state must check for this to avoid overwriting
40
+ * data written by a newer version of the app.
41
+ */
42
+ interface UnknownVersionResult {
43
+ readonly unknownVersion: true;
44
+ }
45
+
46
+ type LoadResult = MetadataFile | UnknownVersionResult;
47
+
48
+ function isUnknownVersion(r: LoadResult): r is UnknownVersionResult {
49
+ return "unknownVersion" in r;
50
+ }
51
+
52
+ // ---------------------------------------------------------------------------
53
+ // Validation & migration helpers
54
+ // ---------------------------------------------------------------------------
55
+
56
+ /**
57
+ * Returns true if a value looks like a valid credential record (has required fields).
58
+ * Filters out corrupted or incomplete entries during migration.
59
+ */
60
+ function isValidCredentialRecord(
61
+ record: unknown
62
+ ): record is Record<string, unknown> {
63
+ if (typeof record !== "object" || record == null) return false;
64
+ const r = record as Record<string, unknown>;
65
+ return (
66
+ typeof r.credentialId === "string" &&
67
+ typeof r.service === "string" &&
68
+ typeof r.field === "string" &&
69
+ typeof r.createdAt === "number" &&
70
+ typeof r.updatedAt === "number"
71
+ );
72
+ }
73
+
74
+ /**
75
+ * Migrate any record to v5 by stripping OAuth-specific fields that are
76
+ * now exclusively managed by the SQLite oauth-store.
77
+ */
78
+ function migrateRecordToV5(
79
+ record: Record<string, unknown>
80
+ ): StaticCredentialRecord {
81
+ return {
82
+ credentialId: record.credentialId as string,
83
+ service: record.service as string,
84
+ field: record.field as string,
85
+ allowedTools: Array.isArray(record.allowedTools)
86
+ ? (record.allowedTools as string[])
87
+ : [],
88
+ allowedDomains: Array.isArray(record.allowedDomains)
89
+ ? (record.allowedDomains as string[])
90
+ : [],
91
+ usageDescription:
92
+ typeof record.usageDescription === "string"
93
+ ? record.usageDescription
94
+ : undefined,
95
+ alias: typeof record.alias === "string" ? record.alias : undefined,
96
+ injectionTemplates: Array.isArray(record.injectionTemplates)
97
+ ? (record.injectionTemplates as InjectionTemplate[])
98
+ : undefined,
99
+ createdAt: record.createdAt as number,
100
+ updatedAt: record.updatedAt as number,
101
+ };
102
+ }
103
+
104
+ // ---------------------------------------------------------------------------
105
+ // Filesystem helpers (inlined to avoid assistant-specific imports)
106
+ // ---------------------------------------------------------------------------
107
+
108
+ function ensureDir(dir: string): void {
109
+ if (!existsSync(dir)) {
110
+ mkdirSync(dir, { recursive: true });
111
+ }
112
+ }
113
+
114
+ function readTextFileSync(path: string): string | null {
115
+ try {
116
+ if (!existsSync(path)) return null;
117
+ return readFileSync(path, "utf-8");
118
+ } catch {
119
+ return null;
120
+ }
121
+ }
122
+
123
+ // ---------------------------------------------------------------------------
124
+ // Core store implementation
125
+ // ---------------------------------------------------------------------------
126
+
127
+ function loadFile(
128
+ metadataPath: string,
129
+ saveFileFn: (data: MetadataFile, path: string) => void
130
+ ): LoadResult {
131
+ const raw = readTextFileSync(metadataPath);
132
+ if (raw == null) {
133
+ return { version: CURRENT_VERSION, credentials: [] };
134
+ }
135
+ try {
136
+ const data = JSON.parse(raw);
137
+ if (typeof data !== "object" || data == null) {
138
+ return { version: CURRENT_VERSION, credentials: [] };
139
+ }
140
+ const fileVersion = typeof data.version === "number" ? data.version : 1;
141
+ if (
142
+ fileVersion !== 1 &&
143
+ fileVersion !== 2 &&
144
+ fileVersion !== 3 &&
145
+ fileVersion !== 4 &&
146
+ fileVersion !== 5
147
+ ) {
148
+ // Unrecognized version (future, fractional, negative, zero) — refuse to touch it
149
+ return { unknownVersion: true };
150
+ }
151
+ const rawCredentials: unknown[] = Array.isArray(data.credentials)
152
+ ? data.credentials
153
+ : [];
154
+ // Filter out malformed entries that lack required fields
155
+ const validRecords = rawCredentials.filter(isValidCredentialRecord);
156
+
157
+ if (fileVersion < CURRENT_VERSION) {
158
+ // Migrate all older versions to v5 by stripping OAuth-specific fields
159
+ // and removing ghost refresh_token records
160
+ const filtered = validRecords.filter(
161
+ (r) => (r as Record<string, unknown>).field !== "refresh_token"
162
+ );
163
+ const credentials = filtered.map(migrateRecordToV5);
164
+ const migrated: MetadataFile = { version: CURRENT_VERSION, credentials };
165
+ try {
166
+ saveFileFn(migrated, metadataPath);
167
+ } catch {
168
+ /* persist failed — will retry on next write */
169
+ }
170
+ return migrated;
171
+ }
172
+
173
+ return {
174
+ version: CURRENT_VERSION,
175
+ credentials: (validRecords as unknown) as StaticCredentialRecord[],
176
+ };
177
+ } catch {
178
+ // Corrupted / unparseable file — treat as empty to avoid data loss on next write
179
+ return { version: CURRENT_VERSION, credentials: [] };
180
+ }
181
+ }
182
+
183
+ function saveFile(data: MetadataFile, path: string): void {
184
+ const dir = dirname(path);
185
+ ensureDir(dir);
186
+ const tmpPath = join(dir, `.tmp-${randomUUID()}`);
187
+ writeFileSync(tmpPath, JSON.stringify(data, null, 2), "utf-8");
188
+ renameSync(tmpPath, path);
189
+ }
190
+
191
+ // ---------------------------------------------------------------------------
192
+ // Policy input for upsert
193
+ // ---------------------------------------------------------------------------
194
+
195
+ /** Policy fields that can be set or updated when upserting a credential. */
196
+ export interface StaticCredentialPolicyInput {
197
+ allowedTools?: string[];
198
+ allowedDomains?: string[];
199
+ usageDescription?: string;
200
+ /** Pass `null` to explicitly clear a previously-set alias. */
201
+ alias?: string | null;
202
+ /** Pass `null` to explicitly clear injection templates. */
203
+ injectionTemplates?: InjectionTemplate[] | null;
204
+ }
205
+
206
+ // ---------------------------------------------------------------------------
207
+ // StaticCredentialMetadataStore
208
+ // ---------------------------------------------------------------------------
209
+
210
+ /**
211
+ * Portable, path-parameterized metadata store for local static credentials.
212
+ *
213
+ * Callers supply the file path; this class handles versioned JSON persistence,
214
+ * schema migration, and CRUD operations. It has no dependency on the assistant
215
+ * daemon or platform-specific code.
216
+ */
217
+ export class StaticCredentialMetadataStore {
218
+ private metadataPath: string;
219
+
220
+ constructor(metadataPath: string) {
221
+ this.metadataPath = metadataPath;
222
+ }
223
+
224
+ /** Update the metadata file path (primarily for testing). */
225
+ setPath(path: string): void {
226
+ this.metadataPath = path;
227
+ }
228
+
229
+ /** Get the current metadata file path. */
230
+ getPath(): string {
231
+ return this.metadataPath;
232
+ }
233
+
234
+ /**
235
+ * Throws if the metadata file has an unrecognized version.
236
+ * Call this before performing irreversible keychain operations
237
+ * so the operation fails cleanly before any side effects.
238
+ */
239
+ assertWritable(): void {
240
+ const result = loadFile(this.metadataPath, saveFile);
241
+ if (isUnknownVersion(result)) {
242
+ throw new Error(
243
+ "Credential metadata file has an unrecognized version; refusing to mutate to avoid data loss"
244
+ );
245
+ }
246
+ }
247
+
248
+ /**
249
+ * Create or update a credential metadata record.
250
+ * If a record with the same service+field exists, it is updated.
251
+ */
252
+ upsert(
253
+ service: string,
254
+ field: string,
255
+ policy?: StaticCredentialPolicyInput
256
+ ): StaticCredentialRecord {
257
+ const result = loadFile(this.metadataPath, saveFile);
258
+ if (isUnknownVersion(result)) {
259
+ throw new Error(
260
+ "Credential metadata file has an unrecognized version; refusing to mutate to avoid data loss"
261
+ );
262
+ }
263
+ const data = result;
264
+ const now = Date.now();
265
+
266
+ const existing = data.credentials.find(
267
+ (c) => c.service === service && c.field === field
268
+ );
269
+
270
+ if (existing) {
271
+ if (policy?.allowedTools !== undefined)
272
+ existing.allowedTools = policy.allowedTools;
273
+ if (policy?.allowedDomains !== undefined)
274
+ existing.allowedDomains = policy.allowedDomains;
275
+ if (policy?.usageDescription !== undefined)
276
+ existing.usageDescription = policy.usageDescription;
277
+ if (policy?.alias !== undefined) {
278
+ if (policy.alias == null) {
279
+ delete existing.alias;
280
+ } else {
281
+ existing.alias = policy.alias;
282
+ }
283
+ }
284
+ if (policy?.injectionTemplates !== undefined) {
285
+ if (policy.injectionTemplates == null) {
286
+ delete existing.injectionTemplates;
287
+ } else {
288
+ existing.injectionTemplates = policy.injectionTemplates;
289
+ }
290
+ }
291
+ existing.updatedAt = now;
292
+ saveFile(data, this.metadataPath);
293
+ return existing;
294
+ }
295
+
296
+ const record: StaticCredentialRecord = {
297
+ credentialId: randomUUID(),
298
+ service,
299
+ field,
300
+ allowedTools: policy?.allowedTools ?? [],
301
+ allowedDomains: policy?.allowedDomains ?? [],
302
+ usageDescription: policy?.usageDescription,
303
+ alias: policy?.alias ?? undefined,
304
+ injectionTemplates: policy?.injectionTemplates ?? undefined,
305
+ createdAt: now,
306
+ updatedAt: now,
307
+ };
308
+
309
+ data.credentials.push(record);
310
+ saveFile(data, this.metadataPath);
311
+ return record;
312
+ }
313
+
314
+ /**
315
+ * Get metadata for a credential by service and field.
316
+ */
317
+ getByServiceField(
318
+ service: string,
319
+ field: string
320
+ ): StaticCredentialRecord | undefined {
321
+ const result = loadFile(this.metadataPath, saveFile);
322
+ if (isUnknownVersion(result)) return undefined;
323
+ return result.credentials.find(
324
+ (c) => c.service === service && c.field === field
325
+ );
326
+ }
327
+
328
+ /**
329
+ * Get metadata for a credential by its opaque ID.
330
+ */
331
+ getById(credentialId: string): StaticCredentialRecord | undefined {
332
+ const result = loadFile(this.metadataPath, saveFile);
333
+ if (isUnknownVersion(result)) return undefined;
334
+ return result.credentials.find((c) => c.credentialId === credentialId);
335
+ }
336
+
337
+ /**
338
+ * List all credential metadata records.
339
+ */
340
+ list(): StaticCredentialRecord[] {
341
+ const result = loadFile(this.metadataPath, saveFile);
342
+ if (isUnknownVersion(result)) return [];
343
+ return result.credentials;
344
+ }
345
+
346
+ /**
347
+ * Delete metadata for a credential.
348
+ */
349
+ delete(service: string, field: string): boolean {
350
+ const result = loadFile(this.metadataPath, saveFile);
351
+ if (isUnknownVersion(result)) {
352
+ throw new Error(
353
+ "Credential metadata file has an unrecognized version; refusing to mutate to avoid data loss"
354
+ );
355
+ }
356
+ const data = result;
357
+ const idx = data.credentials.findIndex(
358
+ (c) => c.service === service && c.field === field
359
+ );
360
+ if (idx === -1) return false;
361
+ data.credentials.splice(idx, 1);
362
+ saveFile(data, this.metadataPath);
363
+ return true;
364
+ }
365
+ }