@shuttl-io/core 0.2.0

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 (802) hide show
  1. package/CHANGELOG.md +96 -0
  2. package/README.md +3 -0
  3. package/dist/Server.d.ts +5 -0
  4. package/dist/Server.js +3 -0
  5. package/dist/Triggers.d.ts +0 -0
  6. package/dist/Triggers.js +2 -0
  7. package/dist/agent.d.ts +49 -0
  8. package/dist/agent.js +251 -0
  9. package/dist/app.d.ts +17 -0
  10. package/dist/app.js +46 -0
  11. package/dist/index.d.ts +12 -0
  12. package/dist/index.js +29 -0
  13. package/dist/model.d.ts +6 -0
  14. package/dist/model.js +16 -0
  15. package/dist/models/openAi.d.ts +40 -0
  16. package/dist/models/openAi.js +346 -0
  17. package/dist/models/types.d.ts +102 -0
  18. package/dist/models/types.js +27 -0
  19. package/dist/outcomes/CombinationOutcome.d.ts +9 -0
  20. package/dist/outcomes/CombinationOutcome.js +41 -0
  21. package/dist/outcomes/IOutcomes.d.ts +9 -0
  22. package/dist/outcomes/IOutcomes.js +19 -0
  23. package/dist/outcomes/StreamingOutcome.d.ts +6 -0
  24. package/dist/outcomes/StreamingOutcome.js +30 -0
  25. package/dist/outcomes/index.d.ts +3 -0
  26. package/dist/outcomes/index.js +20 -0
  27. package/dist/secrets.d.ts +19 -0
  28. package/dist/secrets.js +34 -0
  29. package/dist/server/http.d.ts +68 -0
  30. package/dist/server/http.js +654 -0
  31. package/dist/server/index.d.ts +1 -0
  32. package/dist/server/index.js +18 -0
  33. package/dist/src/Server.d.ts +5 -0
  34. package/dist/src/Server.js +3 -0
  35. package/dist/src/Triggers.d.ts +0 -0
  36. package/dist/src/Triggers.js +2 -0
  37. package/dist/src/agent.d.ts +49 -0
  38. package/dist/src/agent.js +251 -0
  39. package/dist/src/app.d.ts +17 -0
  40. package/dist/src/app.js +46 -0
  41. package/dist/src/index.d.ts +12 -0
  42. package/dist/src/index.js +29 -0
  43. package/dist/src/model.d.ts +6 -0
  44. package/dist/src/model.js +16 -0
  45. package/dist/src/models/openAi.d.ts +38 -0
  46. package/dist/src/models/openAi.js +344 -0
  47. package/dist/src/models/types.d.ts +101 -0
  48. package/dist/src/models/types.js +27 -0
  49. package/dist/src/outcomes/CombinationOutcome.d.ts +9 -0
  50. package/dist/src/outcomes/CombinationOutcome.js +41 -0
  51. package/dist/src/outcomes/IOutcomes.d.ts +9 -0
  52. package/dist/src/outcomes/IOutcomes.js +19 -0
  53. package/dist/src/outcomes/StreamingOutcome.d.ts +6 -0
  54. package/dist/src/outcomes/StreamingOutcome.js +30 -0
  55. package/dist/src/outcomes/index.d.ts +3 -0
  56. package/dist/src/outcomes/index.js +20 -0
  57. package/dist/src/secrets.d.ts +19 -0
  58. package/dist/src/secrets.js +34 -0
  59. package/dist/src/server/http.d.ts +68 -0
  60. package/dist/src/server/http.js +654 -0
  61. package/dist/src/server/index.d.ts +1 -0
  62. package/dist/src/server/index.js +18 -0
  63. package/dist/src/tools/tool.d.ts +33 -0
  64. package/dist/src/tools/tool.js +49 -0
  65. package/dist/src/tools/toolkit.d.ts +13 -0
  66. package/dist/src/tools/toolkit.js +19 -0
  67. package/dist/src/trigger/ApiTrigger.d.ts +37 -0
  68. package/dist/src/trigger/ApiTrigger.js +106 -0
  69. package/dist/src/trigger/EmailTrigger.d.ts +15 -0
  70. package/dist/src/trigger/EmailTrigger.js +22 -0
  71. package/dist/src/trigger/FileTrigger.d.ts +14 -0
  72. package/dist/src/trigger/FileTrigger.js +37 -0
  73. package/dist/src/trigger/ITrigger.d.ts +89 -0
  74. package/dist/src/trigger/ITrigger.js +35 -0
  75. package/dist/src/trigger/RateTrigger.d.ts +23 -0
  76. package/dist/src/trigger/RateTrigger.js +58 -0
  77. package/dist/src/trigger/index.d.ts +5 -0
  78. package/dist/src/trigger/index.js +22 -0
  79. package/dist/tests/agent.test.d.ts +1 -0
  80. package/dist/tests/agent.test.js +388 -0
  81. package/dist/tests/agentStreamer.test.d.ts +1 -0
  82. package/dist/tests/agentStreamer.test.js +530 -0
  83. package/dist/tests/app.test.d.ts +1 -0
  84. package/dist/tests/app.test.js +423 -0
  85. package/dist/tests/model.test.d.ts +1 -0
  86. package/dist/tests/model.test.js +310 -0
  87. package/dist/tests/openAi.test.d.ts +1 -0
  88. package/dist/tests/openAi.test.js +701 -0
  89. package/dist/tests/outcomes.test.d.ts +1 -0
  90. package/dist/tests/outcomes.test.js +257 -0
  91. package/dist/tests/secrets.test.d.ts +1 -0
  92. package/dist/tests/secrets.test.js +263 -0
  93. package/dist/tests/server/http.test.d.ts +1 -0
  94. package/dist/tests/server/http.test.js +553 -0
  95. package/dist/tests/tool.test.d.ts +1 -0
  96. package/dist/tests/tool.test.js +315 -0
  97. package/dist/tests/toolkit.test.d.ts +1 -0
  98. package/dist/tests/toolkit.test.js +189 -0
  99. package/dist/tests/triggers.test.d.ts +1 -0
  100. package/dist/tests/triggers.test.js +203 -0
  101. package/dist/tests/types.test.d.ts +1 -0
  102. package/dist/tests/types.test.js +429 -0
  103. package/dist/tools/tool.d.ts +33 -0
  104. package/dist/tools/tool.js +49 -0
  105. package/dist/tools/toolkit.d.ts +13 -0
  106. package/dist/tools/toolkit.js +19 -0
  107. package/dist/trigger/ApiTrigger.d.ts +37 -0
  108. package/dist/trigger/ApiTrigger.js +106 -0
  109. package/dist/trigger/EmailTrigger.d.ts +15 -0
  110. package/dist/trigger/EmailTrigger.js +22 -0
  111. package/dist/trigger/FileTrigger.d.ts +14 -0
  112. package/dist/trigger/FileTrigger.js +37 -0
  113. package/dist/trigger/ITrigger.d.ts +90 -0
  114. package/dist/trigger/ITrigger.js +38 -0
  115. package/dist/trigger/RateTrigger.d.ts +23 -0
  116. package/dist/trigger/RateTrigger.js +58 -0
  117. package/dist/trigger/index.d.ts +5 -0
  118. package/dist/trigger/index.js +22 -0
  119. package/jest.config.js +20 -0
  120. package/node_modules/zod/LICENSE +21 -0
  121. package/node_modules/zod/README.md +208 -0
  122. package/node_modules/zod/index.cjs +33 -0
  123. package/node_modules/zod/index.d.cts +4 -0
  124. package/node_modules/zod/index.d.ts +4 -0
  125. package/node_modules/zod/index.js +4 -0
  126. package/node_modules/zod/locales/index.cjs +17 -0
  127. package/node_modules/zod/locales/index.d.cts +1 -0
  128. package/node_modules/zod/locales/index.d.ts +1 -0
  129. package/node_modules/zod/locales/index.js +1 -0
  130. package/node_modules/zod/locales/package.json +6 -0
  131. package/node_modules/zod/mini/index.cjs +17 -0
  132. package/node_modules/zod/mini/index.d.cts +1 -0
  133. package/node_modules/zod/mini/index.d.ts +1 -0
  134. package/node_modules/zod/mini/index.js +1 -0
  135. package/node_modules/zod/mini/package.json +6 -0
  136. package/node_modules/zod/package.json +135 -0
  137. package/node_modules/zod/src/index.ts +4 -0
  138. package/node_modules/zod/src/locales/index.ts +1 -0
  139. package/node_modules/zod/src/mini/index.ts +1 -0
  140. package/node_modules/zod/src/v3/ZodError.ts +330 -0
  141. package/node_modules/zod/src/v3/benchmarks/datetime.ts +58 -0
  142. package/node_modules/zod/src/v3/benchmarks/discriminatedUnion.ts +80 -0
  143. package/node_modules/zod/src/v3/benchmarks/index.ts +59 -0
  144. package/node_modules/zod/src/v3/benchmarks/ipv4.ts +57 -0
  145. package/node_modules/zod/src/v3/benchmarks/object.ts +69 -0
  146. package/node_modules/zod/src/v3/benchmarks/primitives.ts +162 -0
  147. package/node_modules/zod/src/v3/benchmarks/realworld.ts +63 -0
  148. package/node_modules/zod/src/v3/benchmarks/string.ts +55 -0
  149. package/node_modules/zod/src/v3/benchmarks/union.ts +80 -0
  150. package/node_modules/zod/src/v3/errors.ts +13 -0
  151. package/node_modules/zod/src/v3/external.ts +6 -0
  152. package/node_modules/zod/src/v3/helpers/enumUtil.ts +17 -0
  153. package/node_modules/zod/src/v3/helpers/errorUtil.ts +8 -0
  154. package/node_modules/zod/src/v3/helpers/parseUtil.ts +176 -0
  155. package/node_modules/zod/src/v3/helpers/partialUtil.ts +34 -0
  156. package/node_modules/zod/src/v3/helpers/typeAliases.ts +2 -0
  157. package/node_modules/zod/src/v3/helpers/util.ts +224 -0
  158. package/node_modules/zod/src/v3/index.ts +4 -0
  159. package/node_modules/zod/src/v3/locales/en.ts +124 -0
  160. package/node_modules/zod/src/v3/standard-schema.ts +113 -0
  161. package/node_modules/zod/src/v3/tests/Mocker.ts +54 -0
  162. package/node_modules/zod/src/v3/tests/all-errors.test.ts +157 -0
  163. package/node_modules/zod/src/v3/tests/anyunknown.test.ts +28 -0
  164. package/node_modules/zod/src/v3/tests/array.test.ts +71 -0
  165. package/node_modules/zod/src/v3/tests/async-parsing.test.ts +388 -0
  166. package/node_modules/zod/src/v3/tests/async-refinements.test.ts +46 -0
  167. package/node_modules/zod/src/v3/tests/base.test.ts +29 -0
  168. package/node_modules/zod/src/v3/tests/bigint.test.ts +55 -0
  169. package/node_modules/zod/src/v3/tests/branded.test.ts +53 -0
  170. package/node_modules/zod/src/v3/tests/catch.test.ts +220 -0
  171. package/node_modules/zod/src/v3/tests/coerce.test.ts +133 -0
  172. package/node_modules/zod/src/v3/tests/complex.test.ts +70 -0
  173. package/node_modules/zod/src/v3/tests/custom.test.ts +31 -0
  174. package/node_modules/zod/src/v3/tests/date.test.ts +32 -0
  175. package/node_modules/zod/src/v3/tests/deepmasking.test.ts +186 -0
  176. package/node_modules/zod/src/v3/tests/default.test.ts +112 -0
  177. package/node_modules/zod/src/v3/tests/description.test.ts +33 -0
  178. package/node_modules/zod/src/v3/tests/discriminated-unions.test.ts +315 -0
  179. package/node_modules/zod/src/v3/tests/enum.test.ts +80 -0
  180. package/node_modules/zod/src/v3/tests/error.test.ts +551 -0
  181. package/node_modules/zod/src/v3/tests/firstparty.test.ts +87 -0
  182. package/node_modules/zod/src/v3/tests/firstpartyschematypes.test.ts +21 -0
  183. package/node_modules/zod/src/v3/tests/function.test.ts +261 -0
  184. package/node_modules/zod/src/v3/tests/generics.test.ts +48 -0
  185. package/node_modules/zod/src/v3/tests/instanceof.test.ts +37 -0
  186. package/node_modules/zod/src/v3/tests/intersection.test.ts +110 -0
  187. package/node_modules/zod/src/v3/tests/language-server.source.ts +76 -0
  188. package/node_modules/zod/src/v3/tests/language-server.test.ts +207 -0
  189. package/node_modules/zod/src/v3/tests/literal.test.ts +36 -0
  190. package/node_modules/zod/src/v3/tests/map.test.ts +110 -0
  191. package/node_modules/zod/src/v3/tests/masking.test.ts +4 -0
  192. package/node_modules/zod/src/v3/tests/mocker.test.ts +19 -0
  193. package/node_modules/zod/src/v3/tests/nan.test.ts +24 -0
  194. package/node_modules/zod/src/v3/tests/nativeEnum.test.ts +87 -0
  195. package/node_modules/zod/src/v3/tests/nullable.test.ts +42 -0
  196. package/node_modules/zod/src/v3/tests/number.test.ts +176 -0
  197. package/node_modules/zod/src/v3/tests/object-augmentation.test.ts +29 -0
  198. package/node_modules/zod/src/v3/tests/object-in-es5-env.test.ts +29 -0
  199. package/node_modules/zod/src/v3/tests/object.test.ts +434 -0
  200. package/node_modules/zod/src/v3/tests/optional.test.ts +42 -0
  201. package/node_modules/zod/src/v3/tests/parseUtil.test.ts +23 -0
  202. package/node_modules/zod/src/v3/tests/parser.test.ts +41 -0
  203. package/node_modules/zod/src/v3/tests/partials.test.ts +243 -0
  204. package/node_modules/zod/src/v3/tests/pickomit.test.ts +111 -0
  205. package/node_modules/zod/src/v3/tests/pipeline.test.ts +29 -0
  206. package/node_modules/zod/src/v3/tests/preprocess.test.ts +186 -0
  207. package/node_modules/zod/src/v3/tests/primitive.test.ts +440 -0
  208. package/node_modules/zod/src/v3/tests/promise.test.ts +90 -0
  209. package/node_modules/zod/src/v3/tests/readonly.test.ts +194 -0
  210. package/node_modules/zod/src/v3/tests/record.test.ts +171 -0
  211. package/node_modules/zod/src/v3/tests/recursive.test.ts +197 -0
  212. package/node_modules/zod/src/v3/tests/refine.test.ts +313 -0
  213. package/node_modules/zod/src/v3/tests/safeparse.test.ts +27 -0
  214. package/node_modules/zod/src/v3/tests/set.test.ts +142 -0
  215. package/node_modules/zod/src/v3/tests/standard-schema.test.ts +83 -0
  216. package/node_modules/zod/src/v3/tests/string.test.ts +916 -0
  217. package/node_modules/zod/src/v3/tests/transformer.test.ts +233 -0
  218. package/node_modules/zod/src/v3/tests/tuple.test.ts +90 -0
  219. package/node_modules/zod/src/v3/tests/unions.test.ts +57 -0
  220. package/node_modules/zod/src/v3/tests/validations.test.ts +133 -0
  221. package/node_modules/zod/src/v3/tests/void.test.ts +15 -0
  222. package/node_modules/zod/src/v3/types.ts +5138 -0
  223. package/node_modules/zod/src/v4/classic/checks.ts +32 -0
  224. package/node_modules/zod/src/v4/classic/coerce.ts +27 -0
  225. package/node_modules/zod/src/v4/classic/compat.ts +70 -0
  226. package/node_modules/zod/src/v4/classic/errors.ts +82 -0
  227. package/node_modules/zod/src/v4/classic/external.ts +51 -0
  228. package/node_modules/zod/src/v4/classic/from-json-schema.ts +536 -0
  229. package/node_modules/zod/src/v4/classic/index.ts +5 -0
  230. package/node_modules/zod/src/v4/classic/iso.ts +90 -0
  231. package/node_modules/zod/src/v4/classic/parse.ts +82 -0
  232. package/node_modules/zod/src/v4/classic/schemas.ts +2352 -0
  233. package/node_modules/zod/src/v4/classic/tests/anyunknown.test.ts +26 -0
  234. package/node_modules/zod/src/v4/classic/tests/array.test.ts +264 -0
  235. package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +210 -0
  236. package/node_modules/zod/src/v4/classic/tests/async-parsing.test.ts +381 -0
  237. package/node_modules/zod/src/v4/classic/tests/async-refinements.test.ts +68 -0
  238. package/node_modules/zod/src/v4/classic/tests/base.test.ts +7 -0
  239. package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +54 -0
  240. package/node_modules/zod/src/v4/classic/tests/brand.test.ts +63 -0
  241. package/node_modules/zod/src/v4/classic/tests/catch.test.ts +276 -0
  242. package/node_modules/zod/src/v4/classic/tests/coalesce.test.ts +20 -0
  243. package/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +573 -0
  244. package/node_modules/zod/src/v4/classic/tests/codec.test.ts +562 -0
  245. package/node_modules/zod/src/v4/classic/tests/coerce.test.ts +160 -0
  246. package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +374 -0
  247. package/node_modules/zod/src/v4/classic/tests/custom.test.ts +40 -0
  248. package/node_modules/zod/src/v4/classic/tests/date.test.ts +31 -0
  249. package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +302 -0
  250. package/node_modules/zod/src/v4/classic/tests/default.test.ts +365 -0
  251. package/node_modules/zod/src/v4/classic/tests/describe-meta-checks.test.ts +27 -0
  252. package/node_modules/zod/src/v4/classic/tests/description.test.ts +32 -0
  253. package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +661 -0
  254. package/node_modules/zod/src/v4/classic/tests/enum.test.ts +285 -0
  255. package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +595 -0
  256. package/node_modules/zod/src/v4/classic/tests/error.test.ts +711 -0
  257. package/node_modules/zod/src/v4/classic/tests/file.test.ts +96 -0
  258. package/node_modules/zod/src/v4/classic/tests/firstparty.test.ts +179 -0
  259. package/node_modules/zod/src/v4/classic/tests/fix-json-issue.test.ts +26 -0
  260. package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +537 -0
  261. package/node_modules/zod/src/v4/classic/tests/function.test.ts +308 -0
  262. package/node_modules/zod/src/v4/classic/tests/generics.test.ts +72 -0
  263. package/node_modules/zod/src/v4/classic/tests/hash.test.ts +68 -0
  264. package/node_modules/zod/src/v4/classic/tests/index.test.ts +898 -0
  265. package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +34 -0
  266. package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +171 -0
  267. package/node_modules/zod/src/v4/classic/tests/json.test.ts +109 -0
  268. package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +227 -0
  269. package/node_modules/zod/src/v4/classic/tests/literal.test.ts +117 -0
  270. package/node_modules/zod/src/v4/classic/tests/map.test.ts +196 -0
  271. package/node_modules/zod/src/v4/classic/tests/nan.test.ts +21 -0
  272. package/node_modules/zod/src/v4/classic/tests/nested-refine.test.ts +168 -0
  273. package/node_modules/zod/src/v4/classic/tests/nonoptional.test.ts +101 -0
  274. package/node_modules/zod/src/v4/classic/tests/nullable.test.ts +22 -0
  275. package/node_modules/zod/src/v4/classic/tests/number.test.ts +270 -0
  276. package/node_modules/zod/src/v4/classic/tests/object.test.ts +609 -0
  277. package/node_modules/zod/src/v4/classic/tests/optional.test.ts +136 -0
  278. package/node_modules/zod/src/v4/classic/tests/partial.test.ts +340 -0
  279. package/node_modules/zod/src/v4/classic/tests/pickomit.test.ts +127 -0
  280. package/node_modules/zod/src/v4/classic/tests/pipe.test.ts +101 -0
  281. package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +74 -0
  282. package/node_modules/zod/src/v4/classic/tests/preprocess.test.ts +282 -0
  283. package/node_modules/zod/src/v4/classic/tests/primitive.test.ts +175 -0
  284. package/node_modules/zod/src/v4/classic/tests/promise.test.ts +81 -0
  285. package/node_modules/zod/src/v4/classic/tests/prototypes.test.ts +23 -0
  286. package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +252 -0
  287. package/node_modules/zod/src/v4/classic/tests/record.test.ts +525 -0
  288. package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +582 -0
  289. package/node_modules/zod/src/v4/classic/tests/refine.test.ts +605 -0
  290. package/node_modules/zod/src/v4/classic/tests/registries.test.ts +208 -0
  291. package/node_modules/zod/src/v4/classic/tests/set.test.ts +181 -0
  292. package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +134 -0
  293. package/node_modules/zod/src/v4/classic/tests/string-formats.test.ts +125 -0
  294. package/node_modules/zod/src/v4/classic/tests/string.test.ts +1152 -0
  295. package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +106 -0
  296. package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +771 -0
  297. package/node_modules/zod/src/v4/classic/tests/to-json-schema-methods.test.ts +438 -0
  298. package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +2755 -0
  299. package/node_modules/zod/src/v4/classic/tests/transform.test.ts +361 -0
  300. package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +181 -0
  301. package/node_modules/zod/src/v4/classic/tests/union.test.ts +219 -0
  302. package/node_modules/zod/src/v4/classic/tests/url.test.ts +13 -0
  303. package/node_modules/zod/src/v4/classic/tests/validations.test.ts +283 -0
  304. package/node_modules/zod/src/v4/classic/tests/void.test.ts +12 -0
  305. package/node_modules/zod/src/v4/core/api.ts +1681 -0
  306. package/node_modules/zod/src/v4/core/checks.ts +1287 -0
  307. package/node_modules/zod/src/v4/core/config.ts +15 -0
  308. package/node_modules/zod/src/v4/core/core.ts +128 -0
  309. package/node_modules/zod/src/v4/core/doc.ts +44 -0
  310. package/node_modules/zod/src/v4/core/errors.ts +424 -0
  311. package/node_modules/zod/src/v4/core/index.ts +16 -0
  312. package/node_modules/zod/src/v4/core/json-schema-generator.ts +124 -0
  313. package/node_modules/zod/src/v4/core/json-schema-processors.ts +630 -0
  314. package/node_modules/zod/src/v4/core/json-schema.ts +147 -0
  315. package/node_modules/zod/src/v4/core/parse.ts +195 -0
  316. package/node_modules/zod/src/v4/core/regexes.ts +182 -0
  317. package/node_modules/zod/src/v4/core/registries.ts +108 -0
  318. package/node_modules/zod/src/v4/core/schemas.ts +4418 -0
  319. package/node_modules/zod/src/v4/core/standard-schema.ts +159 -0
  320. package/node_modules/zod/src/v4/core/tests/extend.test.ts +59 -0
  321. package/node_modules/zod/src/v4/core/tests/index.test.ts +46 -0
  322. package/node_modules/zod/src/v4/core/tests/locales/be.test.ts +124 -0
  323. package/node_modules/zod/src/v4/core/tests/locales/en.test.ts +22 -0
  324. package/node_modules/zod/src/v4/core/tests/locales/es.test.ts +181 -0
  325. package/node_modules/zod/src/v4/core/tests/locales/he.test.ts +379 -0
  326. package/node_modules/zod/src/v4/core/tests/locales/nl.test.ts +46 -0
  327. package/node_modules/zod/src/v4/core/tests/locales/ru.test.ts +128 -0
  328. package/node_modules/zod/src/v4/core/tests/locales/tr.test.ts +69 -0
  329. package/node_modules/zod/src/v4/core/tests/record-constructor.test.ts +67 -0
  330. package/node_modules/zod/src/v4/core/tests/recursive-tuples.test.ts +45 -0
  331. package/node_modules/zod/src/v4/core/to-json-schema.ts +554 -0
  332. package/node_modules/zod/src/v4/core/util.ts +921 -0
  333. package/node_modules/zod/src/v4/core/versions.ts +5 -0
  334. package/node_modules/zod/src/v4/core/zsf.ts +323 -0
  335. package/node_modules/zod/src/v4/index.ts +4 -0
  336. package/node_modules/zod/src/v4/locales/ar.ts +125 -0
  337. package/node_modules/zod/src/v4/locales/az.ts +121 -0
  338. package/node_modules/zod/src/v4/locales/be.ts +184 -0
  339. package/node_modules/zod/src/v4/locales/bg.ts +136 -0
  340. package/node_modules/zod/src/v4/locales/ca.ts +127 -0
  341. package/node_modules/zod/src/v4/locales/cs.ts +142 -0
  342. package/node_modules/zod/src/v4/locales/da.ts +141 -0
  343. package/node_modules/zod/src/v4/locales/de.ts +124 -0
  344. package/node_modules/zod/src/v4/locales/en.ts +128 -0
  345. package/node_modules/zod/src/v4/locales/eo.ts +125 -0
  346. package/node_modules/zod/src/v4/locales/es.ts +159 -0
  347. package/node_modules/zod/src/v4/locales/fa.ts +134 -0
  348. package/node_modules/zod/src/v4/locales/fi.ts +131 -0
  349. package/node_modules/zod/src/v4/locales/fr-CA.ts +126 -0
  350. package/node_modules/zod/src/v4/locales/fr.ts +124 -0
  351. package/node_modules/zod/src/v4/locales/he.ts +256 -0
  352. package/node_modules/zod/src/v4/locales/hu.ts +126 -0
  353. package/node_modules/zod/src/v4/locales/id.ts +125 -0
  354. package/node_modules/zod/src/v4/locales/index.ts +47 -0
  355. package/node_modules/zod/src/v4/locales/is.ts +127 -0
  356. package/node_modules/zod/src/v4/locales/it.ts +125 -0
  357. package/node_modules/zod/src/v4/locales/ja.ts +122 -0
  358. package/node_modules/zod/src/v4/locales/ka.ts +138 -0
  359. package/node_modules/zod/src/v4/locales/kh.ts +7 -0
  360. package/node_modules/zod/src/v4/locales/km.ts +126 -0
  361. package/node_modules/zod/src/v4/locales/ko.ts +131 -0
  362. package/node_modules/zod/src/v4/locales/lt.ts +265 -0
  363. package/node_modules/zod/src/v4/locales/mk.ts +127 -0
  364. package/node_modules/zod/src/v4/locales/ms.ts +124 -0
  365. package/node_modules/zod/src/v4/locales/nl.ts +126 -0
  366. package/node_modules/zod/src/v4/locales/no.ts +124 -0
  367. package/node_modules/zod/src/v4/locales/ota.ts +125 -0
  368. package/node_modules/zod/src/v4/locales/pl.ts +126 -0
  369. package/node_modules/zod/src/v4/locales/ps.ts +133 -0
  370. package/node_modules/zod/src/v4/locales/pt.ts +123 -0
  371. package/node_modules/zod/src/v4/locales/ru.ts +184 -0
  372. package/node_modules/zod/src/v4/locales/sl.ts +126 -0
  373. package/node_modules/zod/src/v4/locales/sv.ts +127 -0
  374. package/node_modules/zod/src/v4/locales/ta.ts +125 -0
  375. package/node_modules/zod/src/v4/locales/th.ts +126 -0
  376. package/node_modules/zod/src/v4/locales/tr.ts +121 -0
  377. package/node_modules/zod/src/v4/locales/ua.ts +7 -0
  378. package/node_modules/zod/src/v4/locales/uk.ts +126 -0
  379. package/node_modules/zod/src/v4/locales/ur.ts +126 -0
  380. package/node_modules/zod/src/v4/locales/vi.ts +125 -0
  381. package/node_modules/zod/src/v4/locales/yo.ts +131 -0
  382. package/node_modules/zod/src/v4/locales/zh-CN.ts +123 -0
  383. package/node_modules/zod/src/v4/locales/zh-TW.ts +125 -0
  384. package/node_modules/zod/src/v4/mini/checks.ts +32 -0
  385. package/node_modules/zod/src/v4/mini/coerce.ts +22 -0
  386. package/node_modules/zod/src/v4/mini/external.ts +40 -0
  387. package/node_modules/zod/src/v4/mini/index.ts +3 -0
  388. package/node_modules/zod/src/v4/mini/iso.ts +62 -0
  389. package/node_modules/zod/src/v4/mini/parse.ts +14 -0
  390. package/node_modules/zod/src/v4/mini/schemas.ts +1781 -0
  391. package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +129 -0
  392. package/node_modules/zod/src/v4/mini/tests/brand.test.ts +51 -0
  393. package/node_modules/zod/src/v4/mini/tests/checks.test.ts +144 -0
  394. package/node_modules/zod/src/v4/mini/tests/codec.test.ts +529 -0
  395. package/node_modules/zod/src/v4/mini/tests/computed.test.ts +36 -0
  396. package/node_modules/zod/src/v4/mini/tests/error.test.ts +22 -0
  397. package/node_modules/zod/src/v4/mini/tests/functions.test.ts +5 -0
  398. package/node_modules/zod/src/v4/mini/tests/index.test.ts +922 -0
  399. package/node_modules/zod/src/v4/mini/tests/number.test.ts +95 -0
  400. package/node_modules/zod/src/v4/mini/tests/object.test.ts +200 -0
  401. package/node_modules/zod/src/v4/mini/tests/prototypes.test.ts +43 -0
  402. package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +275 -0
  403. package/node_modules/zod/src/v4/mini/tests/standard-schema.test.ts +17 -0
  404. package/node_modules/zod/src/v4/mini/tests/string.test.ts +347 -0
  405. package/node_modules/zod/src/v4-mini/index.ts +1 -0
  406. package/node_modules/zod/v3/ZodError.cjs +138 -0
  407. package/node_modules/zod/v3/ZodError.d.cts +164 -0
  408. package/node_modules/zod/v3/ZodError.d.ts +164 -0
  409. package/node_modules/zod/v3/ZodError.js +133 -0
  410. package/node_modules/zod/v3/errors.cjs +17 -0
  411. package/node_modules/zod/v3/errors.d.cts +5 -0
  412. package/node_modules/zod/v3/errors.d.ts +5 -0
  413. package/node_modules/zod/v3/errors.js +9 -0
  414. package/node_modules/zod/v3/external.cjs +22 -0
  415. package/node_modules/zod/v3/external.d.cts +6 -0
  416. package/node_modules/zod/v3/external.d.ts +6 -0
  417. package/node_modules/zod/v3/external.js +6 -0
  418. package/node_modules/zod/v3/helpers/enumUtil.cjs +2 -0
  419. package/node_modules/zod/v3/helpers/enumUtil.d.cts +8 -0
  420. package/node_modules/zod/v3/helpers/enumUtil.d.ts +8 -0
  421. package/node_modules/zod/v3/helpers/enumUtil.js +1 -0
  422. package/node_modules/zod/v3/helpers/errorUtil.cjs +9 -0
  423. package/node_modules/zod/v3/helpers/errorUtil.d.cts +9 -0
  424. package/node_modules/zod/v3/helpers/errorUtil.d.ts +9 -0
  425. package/node_modules/zod/v3/helpers/errorUtil.js +6 -0
  426. package/node_modules/zod/v3/helpers/parseUtil.cjs +124 -0
  427. package/node_modules/zod/v3/helpers/parseUtil.d.cts +78 -0
  428. package/node_modules/zod/v3/helpers/parseUtil.d.ts +78 -0
  429. package/node_modules/zod/v3/helpers/parseUtil.js +109 -0
  430. package/node_modules/zod/v3/helpers/partialUtil.cjs +2 -0
  431. package/node_modules/zod/v3/helpers/partialUtil.d.cts +8 -0
  432. package/node_modules/zod/v3/helpers/partialUtil.d.ts +8 -0
  433. package/node_modules/zod/v3/helpers/partialUtil.js +1 -0
  434. package/node_modules/zod/v3/helpers/typeAliases.cjs +2 -0
  435. package/node_modules/zod/v3/helpers/typeAliases.d.cts +2 -0
  436. package/node_modules/zod/v3/helpers/typeAliases.d.ts +2 -0
  437. package/node_modules/zod/v3/helpers/typeAliases.js +1 -0
  438. package/node_modules/zod/v3/helpers/util.cjs +137 -0
  439. package/node_modules/zod/v3/helpers/util.d.cts +85 -0
  440. package/node_modules/zod/v3/helpers/util.d.ts +85 -0
  441. package/node_modules/zod/v3/helpers/util.js +133 -0
  442. package/node_modules/zod/v3/index.cjs +33 -0
  443. package/node_modules/zod/v3/index.d.cts +4 -0
  444. package/node_modules/zod/v3/index.d.ts +4 -0
  445. package/node_modules/zod/v3/index.js +4 -0
  446. package/node_modules/zod/v3/locales/en.cjs +112 -0
  447. package/node_modules/zod/v3/locales/en.d.cts +3 -0
  448. package/node_modules/zod/v3/locales/en.d.ts +3 -0
  449. package/node_modules/zod/v3/locales/en.js +109 -0
  450. package/node_modules/zod/v3/package.json +6 -0
  451. package/node_modules/zod/v3/standard-schema.cjs +2 -0
  452. package/node_modules/zod/v3/standard-schema.d.cts +102 -0
  453. package/node_modules/zod/v3/standard-schema.d.ts +102 -0
  454. package/node_modules/zod/v3/standard-schema.js +1 -0
  455. package/node_modules/zod/v3/types.cjs +3777 -0
  456. package/node_modules/zod/v3/types.d.cts +1034 -0
  457. package/node_modules/zod/v3/types.d.ts +1034 -0
  458. package/node_modules/zod/v3/types.js +3695 -0
  459. package/node_modules/zod/v4/classic/checks.cjs +33 -0
  460. package/node_modules/zod/v4/classic/checks.d.cts +1 -0
  461. package/node_modules/zod/v4/classic/checks.d.ts +1 -0
  462. package/node_modules/zod/v4/classic/checks.js +1 -0
  463. package/node_modules/zod/v4/classic/coerce.cjs +47 -0
  464. package/node_modules/zod/v4/classic/coerce.d.cts +17 -0
  465. package/node_modules/zod/v4/classic/coerce.d.ts +17 -0
  466. package/node_modules/zod/v4/classic/coerce.js +17 -0
  467. package/node_modules/zod/v4/classic/compat.cjs +61 -0
  468. package/node_modules/zod/v4/classic/compat.d.cts +50 -0
  469. package/node_modules/zod/v4/classic/compat.d.ts +50 -0
  470. package/node_modules/zod/v4/classic/compat.js +31 -0
  471. package/node_modules/zod/v4/classic/errors.cjs +74 -0
  472. package/node_modules/zod/v4/classic/errors.d.cts +30 -0
  473. package/node_modules/zod/v4/classic/errors.d.ts +30 -0
  474. package/node_modules/zod/v4/classic/errors.js +48 -0
  475. package/node_modules/zod/v4/classic/external.cjs +73 -0
  476. package/node_modules/zod/v4/classic/external.d.cts +15 -0
  477. package/node_modules/zod/v4/classic/external.d.ts +15 -0
  478. package/node_modules/zod/v4/classic/external.js +20 -0
  479. package/node_modules/zod/v4/classic/from-json-schema.cjs +511 -0
  480. package/node_modules/zod/v4/classic/from-json-schema.d.cts +10 -0
  481. package/node_modules/zod/v4/classic/from-json-schema.d.ts +10 -0
  482. package/node_modules/zod/v4/classic/from-json-schema.js +485 -0
  483. package/node_modules/zod/v4/classic/index.cjs +33 -0
  484. package/node_modules/zod/v4/classic/index.d.cts +4 -0
  485. package/node_modules/zod/v4/classic/index.d.ts +4 -0
  486. package/node_modules/zod/v4/classic/index.js +4 -0
  487. package/node_modules/zod/v4/classic/iso.cjs +60 -0
  488. package/node_modules/zod/v4/classic/iso.d.cts +22 -0
  489. package/node_modules/zod/v4/classic/iso.d.ts +22 -0
  490. package/node_modules/zod/v4/classic/iso.js +30 -0
  491. package/node_modules/zod/v4/classic/package.json +6 -0
  492. package/node_modules/zod/v4/classic/parse.cjs +41 -0
  493. package/node_modules/zod/v4/classic/parse.d.cts +31 -0
  494. package/node_modules/zod/v4/classic/parse.d.ts +31 -0
  495. package/node_modules/zod/v4/classic/parse.js +15 -0
  496. package/node_modules/zod/v4/classic/schemas.cjs +1240 -0
  497. package/node_modules/zod/v4/classic/schemas.d.cts +726 -0
  498. package/node_modules/zod/v4/classic/schemas.d.ts +726 -0
  499. package/node_modules/zod/v4/classic/schemas.js +1126 -0
  500. package/node_modules/zod/v4/core/api.cjs +1109 -0
  501. package/node_modules/zod/v4/core/api.d.cts +304 -0
  502. package/node_modules/zod/v4/core/api.d.ts +304 -0
  503. package/node_modules/zod/v4/core/api.js +969 -0
  504. package/node_modules/zod/v4/core/checks.cjs +595 -0
  505. package/node_modules/zod/v4/core/checks.d.cts +278 -0
  506. package/node_modules/zod/v4/core/checks.d.ts +278 -0
  507. package/node_modules/zod/v4/core/checks.js +569 -0
  508. package/node_modules/zod/v4/core/core.cjs +83 -0
  509. package/node_modules/zod/v4/core/core.d.cts +52 -0
  510. package/node_modules/zod/v4/core/core.d.ts +52 -0
  511. package/node_modules/zod/v4/core/core.js +76 -0
  512. package/node_modules/zod/v4/core/doc.cjs +39 -0
  513. package/node_modules/zod/v4/core/doc.d.cts +14 -0
  514. package/node_modules/zod/v4/core/doc.d.ts +14 -0
  515. package/node_modules/zod/v4/core/doc.js +35 -0
  516. package/node_modules/zod/v4/core/errors.cjs +213 -0
  517. package/node_modules/zod/v4/core/errors.d.cts +219 -0
  518. package/node_modules/zod/v4/core/errors.d.ts +219 -0
  519. package/node_modules/zod/v4/core/errors.js +182 -0
  520. package/node_modules/zod/v4/core/index.cjs +47 -0
  521. package/node_modules/zod/v4/core/index.d.cts +16 -0
  522. package/node_modules/zod/v4/core/index.d.ts +16 -0
  523. package/node_modules/zod/v4/core/index.js +16 -0
  524. package/node_modules/zod/v4/core/json-schema-generator.cjs +99 -0
  525. package/node_modules/zod/v4/core/json-schema-generator.d.cts +64 -0
  526. package/node_modules/zod/v4/core/json-schema-generator.d.ts +64 -0
  527. package/node_modules/zod/v4/core/json-schema-generator.js +95 -0
  528. package/node_modules/zod/v4/core/json-schema-processors.cjs +617 -0
  529. package/node_modules/zod/v4/core/json-schema-processors.d.cts +49 -0
  530. package/node_modules/zod/v4/core/json-schema-processors.d.ts +49 -0
  531. package/node_modules/zod/v4/core/json-schema-processors.js +574 -0
  532. package/node_modules/zod/v4/core/json-schema.cjs +2 -0
  533. package/node_modules/zod/v4/core/json-schema.d.cts +88 -0
  534. package/node_modules/zod/v4/core/json-schema.d.ts +88 -0
  535. package/node_modules/zod/v4/core/json-schema.js +1 -0
  536. package/node_modules/zod/v4/core/package.json +6 -0
  537. package/node_modules/zod/v4/core/parse.cjs +131 -0
  538. package/node_modules/zod/v4/core/parse.d.cts +49 -0
  539. package/node_modules/zod/v4/core/parse.d.ts +49 -0
  540. package/node_modules/zod/v4/core/parse.js +93 -0
  541. package/node_modules/zod/v4/core/regexes.cjs +165 -0
  542. package/node_modules/zod/v4/core/regexes.d.cts +79 -0
  543. package/node_modules/zod/v4/core/regexes.d.ts +79 -0
  544. package/node_modules/zod/v4/core/regexes.js +132 -0
  545. package/node_modules/zod/v4/core/registries.cjs +59 -0
  546. package/node_modules/zod/v4/core/registries.d.cts +35 -0
  547. package/node_modules/zod/v4/core/registries.d.ts +35 -0
  548. package/node_modules/zod/v4/core/registries.js +54 -0
  549. package/node_modules/zod/v4/core/schemas.cjs +2040 -0
  550. package/node_modules/zod/v4/core/schemas.d.cts +1135 -0
  551. package/node_modules/zod/v4/core/schemas.d.ts +1135 -0
  552. package/node_modules/zod/v4/core/schemas.js +2009 -0
  553. package/node_modules/zod/v4/core/standard-schema.cjs +2 -0
  554. package/node_modules/zod/v4/core/standard-schema.d.cts +126 -0
  555. package/node_modules/zod/v4/core/standard-schema.d.ts +126 -0
  556. package/node_modules/zod/v4/core/standard-schema.js +1 -0
  557. package/node_modules/zod/v4/core/to-json-schema.cjs +392 -0
  558. package/node_modules/zod/v4/core/to-json-schema.d.cts +113 -0
  559. package/node_modules/zod/v4/core/to-json-schema.d.ts +113 -0
  560. package/node_modules/zod/v4/core/to-json-schema.js +383 -0
  561. package/node_modules/zod/v4/core/util.cjs +669 -0
  562. package/node_modules/zod/v4/core/util.d.cts +198 -0
  563. package/node_modules/zod/v4/core/util.d.ts +198 -0
  564. package/node_modules/zod/v4/core/util.js +611 -0
  565. package/node_modules/zod/v4/core/versions.cjs +8 -0
  566. package/node_modules/zod/v4/core/versions.d.cts +5 -0
  567. package/node_modules/zod/v4/core/versions.d.ts +5 -0
  568. package/node_modules/zod/v4/core/versions.js +5 -0
  569. package/node_modules/zod/v4/index.cjs +22 -0
  570. package/node_modules/zod/v4/index.d.cts +3 -0
  571. package/node_modules/zod/v4/index.d.ts +3 -0
  572. package/node_modules/zod/v4/index.js +3 -0
  573. package/node_modules/zod/v4/locales/ar.cjs +143 -0
  574. package/node_modules/zod/v4/locales/ar.d.cts +5 -0
  575. package/node_modules/zod/v4/locales/ar.d.ts +4 -0
  576. package/node_modules/zod/v4/locales/ar.js +116 -0
  577. package/node_modules/zod/v4/locales/az.cjs +142 -0
  578. package/node_modules/zod/v4/locales/az.d.cts +5 -0
  579. package/node_modules/zod/v4/locales/az.d.ts +4 -0
  580. package/node_modules/zod/v4/locales/az.js +115 -0
  581. package/node_modules/zod/v4/locales/be.cjs +191 -0
  582. package/node_modules/zod/v4/locales/be.d.cts +5 -0
  583. package/node_modules/zod/v4/locales/be.d.ts +4 -0
  584. package/node_modules/zod/v4/locales/be.js +164 -0
  585. package/node_modules/zod/v4/locales/bg.cjs +156 -0
  586. package/node_modules/zod/v4/locales/bg.d.cts +5 -0
  587. package/node_modules/zod/v4/locales/bg.d.ts +5 -0
  588. package/node_modules/zod/v4/locales/bg.js +128 -0
  589. package/node_modules/zod/v4/locales/ca.cjs +145 -0
  590. package/node_modules/zod/v4/locales/ca.d.cts +5 -0
  591. package/node_modules/zod/v4/locales/ca.d.ts +4 -0
  592. package/node_modules/zod/v4/locales/ca.js +118 -0
  593. package/node_modules/zod/v4/locales/cs.cjs +162 -0
  594. package/node_modules/zod/v4/locales/cs.d.cts +5 -0
  595. package/node_modules/zod/v4/locales/cs.d.ts +4 -0
  596. package/node_modules/zod/v4/locales/cs.js +135 -0
  597. package/node_modules/zod/v4/locales/da.cjs +158 -0
  598. package/node_modules/zod/v4/locales/da.d.cts +5 -0
  599. package/node_modules/zod/v4/locales/da.d.ts +4 -0
  600. package/node_modules/zod/v4/locales/da.js +131 -0
  601. package/node_modules/zod/v4/locales/de.cjs +143 -0
  602. package/node_modules/zod/v4/locales/de.d.cts +5 -0
  603. package/node_modules/zod/v4/locales/de.d.ts +4 -0
  604. package/node_modules/zod/v4/locales/de.js +116 -0
  605. package/node_modules/zod/v4/locales/en.cjs +146 -0
  606. package/node_modules/zod/v4/locales/en.d.cts +5 -0
  607. package/node_modules/zod/v4/locales/en.d.ts +5 -0
  608. package/node_modules/zod/v4/locales/en.js +118 -0
  609. package/node_modules/zod/v4/locales/eo.cjs +144 -0
  610. package/node_modules/zod/v4/locales/eo.d.cts +5 -0
  611. package/node_modules/zod/v4/locales/eo.d.ts +5 -0
  612. package/node_modules/zod/v4/locales/eo.js +116 -0
  613. package/node_modules/zod/v4/locales/es.cjs +176 -0
  614. package/node_modules/zod/v4/locales/es.d.cts +5 -0
  615. package/node_modules/zod/v4/locales/es.d.ts +4 -0
  616. package/node_modules/zod/v4/locales/es.js +149 -0
  617. package/node_modules/zod/v4/locales/fa.cjs +149 -0
  618. package/node_modules/zod/v4/locales/fa.d.cts +5 -0
  619. package/node_modules/zod/v4/locales/fa.d.ts +4 -0
  620. package/node_modules/zod/v4/locales/fa.js +122 -0
  621. package/node_modules/zod/v4/locales/fi.cjs +149 -0
  622. package/node_modules/zod/v4/locales/fi.d.cts +5 -0
  623. package/node_modules/zod/v4/locales/fi.d.ts +4 -0
  624. package/node_modules/zod/v4/locales/fi.js +122 -0
  625. package/node_modules/zod/v4/locales/fr-CA.cjs +144 -0
  626. package/node_modules/zod/v4/locales/fr-CA.d.cts +5 -0
  627. package/node_modules/zod/v4/locales/fr-CA.d.ts +4 -0
  628. package/node_modules/zod/v4/locales/fr-CA.js +117 -0
  629. package/node_modules/zod/v4/locales/fr.cjs +143 -0
  630. package/node_modules/zod/v4/locales/fr.d.cts +5 -0
  631. package/node_modules/zod/v4/locales/fr.d.ts +4 -0
  632. package/node_modules/zod/v4/locales/fr.js +116 -0
  633. package/node_modules/zod/v4/locales/he.cjs +255 -0
  634. package/node_modules/zod/v4/locales/he.d.cts +5 -0
  635. package/node_modules/zod/v4/locales/he.d.ts +4 -0
  636. package/node_modules/zod/v4/locales/he.js +228 -0
  637. package/node_modules/zod/v4/locales/hu.cjs +144 -0
  638. package/node_modules/zod/v4/locales/hu.d.cts +5 -0
  639. package/node_modules/zod/v4/locales/hu.d.ts +4 -0
  640. package/node_modules/zod/v4/locales/hu.js +117 -0
  641. package/node_modules/zod/v4/locales/id.cjs +143 -0
  642. package/node_modules/zod/v4/locales/id.d.cts +5 -0
  643. package/node_modules/zod/v4/locales/id.d.ts +4 -0
  644. package/node_modules/zod/v4/locales/id.js +116 -0
  645. package/node_modules/zod/v4/locales/index.cjs +100 -0
  646. package/node_modules/zod/v4/locales/index.d.cts +47 -0
  647. package/node_modules/zod/v4/locales/index.d.ts +47 -0
  648. package/node_modules/zod/v4/locales/index.js +47 -0
  649. package/node_modules/zod/v4/locales/is.cjs +145 -0
  650. package/node_modules/zod/v4/locales/is.d.cts +5 -0
  651. package/node_modules/zod/v4/locales/is.d.ts +5 -0
  652. package/node_modules/zod/v4/locales/is.js +117 -0
  653. package/node_modules/zod/v4/locales/it.cjs +144 -0
  654. package/node_modules/zod/v4/locales/it.d.cts +5 -0
  655. package/node_modules/zod/v4/locales/it.d.ts +4 -0
  656. package/node_modules/zod/v4/locales/it.js +117 -0
  657. package/node_modules/zod/v4/locales/ja.cjs +142 -0
  658. package/node_modules/zod/v4/locales/ja.d.cts +5 -0
  659. package/node_modules/zod/v4/locales/ja.d.ts +4 -0
  660. package/node_modules/zod/v4/locales/ja.js +115 -0
  661. package/node_modules/zod/v4/locales/ka.cjs +153 -0
  662. package/node_modules/zod/v4/locales/ka.d.cts +5 -0
  663. package/node_modules/zod/v4/locales/ka.d.ts +5 -0
  664. package/node_modules/zod/v4/locales/ka.js +125 -0
  665. package/node_modules/zod/v4/locales/kh.cjs +12 -0
  666. package/node_modules/zod/v4/locales/kh.d.cts +5 -0
  667. package/node_modules/zod/v4/locales/kh.d.ts +5 -0
  668. package/node_modules/zod/v4/locales/kh.js +5 -0
  669. package/node_modules/zod/v4/locales/km.cjs +144 -0
  670. package/node_modules/zod/v4/locales/km.d.cts +5 -0
  671. package/node_modules/zod/v4/locales/km.d.ts +4 -0
  672. package/node_modules/zod/v4/locales/km.js +117 -0
  673. package/node_modules/zod/v4/locales/ko.cjs +148 -0
  674. package/node_modules/zod/v4/locales/ko.d.cts +5 -0
  675. package/node_modules/zod/v4/locales/ko.d.ts +4 -0
  676. package/node_modules/zod/v4/locales/ko.js +121 -0
  677. package/node_modules/zod/v4/locales/lt.cjs +258 -0
  678. package/node_modules/zod/v4/locales/lt.d.cts +5 -0
  679. package/node_modules/zod/v4/locales/lt.d.ts +5 -0
  680. package/node_modules/zod/v4/locales/lt.js +230 -0
  681. package/node_modules/zod/v4/locales/mk.cjs +145 -0
  682. package/node_modules/zod/v4/locales/mk.d.cts +5 -0
  683. package/node_modules/zod/v4/locales/mk.d.ts +4 -0
  684. package/node_modules/zod/v4/locales/mk.js +118 -0
  685. package/node_modules/zod/v4/locales/ms.cjs +143 -0
  686. package/node_modules/zod/v4/locales/ms.d.cts +5 -0
  687. package/node_modules/zod/v4/locales/ms.d.ts +4 -0
  688. package/node_modules/zod/v4/locales/ms.js +116 -0
  689. package/node_modules/zod/v4/locales/nl.cjs +144 -0
  690. package/node_modules/zod/v4/locales/nl.d.cts +5 -0
  691. package/node_modules/zod/v4/locales/nl.d.ts +4 -0
  692. package/node_modules/zod/v4/locales/nl.js +117 -0
  693. package/node_modules/zod/v4/locales/no.cjs +143 -0
  694. package/node_modules/zod/v4/locales/no.d.cts +5 -0
  695. package/node_modules/zod/v4/locales/no.d.ts +4 -0
  696. package/node_modules/zod/v4/locales/no.js +116 -0
  697. package/node_modules/zod/v4/locales/ota.cjs +144 -0
  698. package/node_modules/zod/v4/locales/ota.d.cts +5 -0
  699. package/node_modules/zod/v4/locales/ota.d.ts +4 -0
  700. package/node_modules/zod/v4/locales/ota.js +117 -0
  701. package/node_modules/zod/v4/locales/package.json +6 -0
  702. package/node_modules/zod/v4/locales/pl.cjs +144 -0
  703. package/node_modules/zod/v4/locales/pl.d.cts +5 -0
  704. package/node_modules/zod/v4/locales/pl.d.ts +4 -0
  705. package/node_modules/zod/v4/locales/pl.js +117 -0
  706. package/node_modules/zod/v4/locales/ps.cjs +149 -0
  707. package/node_modules/zod/v4/locales/ps.d.cts +5 -0
  708. package/node_modules/zod/v4/locales/ps.d.ts +4 -0
  709. package/node_modules/zod/v4/locales/ps.js +122 -0
  710. package/node_modules/zod/v4/locales/pt.cjs +143 -0
  711. package/node_modules/zod/v4/locales/pt.d.cts +5 -0
  712. package/node_modules/zod/v4/locales/pt.d.ts +4 -0
  713. package/node_modules/zod/v4/locales/pt.js +116 -0
  714. package/node_modules/zod/v4/locales/ru.cjs +191 -0
  715. package/node_modules/zod/v4/locales/ru.d.cts +5 -0
  716. package/node_modules/zod/v4/locales/ru.d.ts +4 -0
  717. package/node_modules/zod/v4/locales/ru.js +164 -0
  718. package/node_modules/zod/v4/locales/sl.cjs +144 -0
  719. package/node_modules/zod/v4/locales/sl.d.cts +5 -0
  720. package/node_modules/zod/v4/locales/sl.d.ts +4 -0
  721. package/node_modules/zod/v4/locales/sl.js +117 -0
  722. package/node_modules/zod/v4/locales/sv.cjs +145 -0
  723. package/node_modules/zod/v4/locales/sv.d.cts +5 -0
  724. package/node_modules/zod/v4/locales/sv.d.ts +4 -0
  725. package/node_modules/zod/v4/locales/sv.js +118 -0
  726. package/node_modules/zod/v4/locales/ta.cjs +144 -0
  727. package/node_modules/zod/v4/locales/ta.d.cts +5 -0
  728. package/node_modules/zod/v4/locales/ta.d.ts +4 -0
  729. package/node_modules/zod/v4/locales/ta.js +117 -0
  730. package/node_modules/zod/v4/locales/th.cjs +144 -0
  731. package/node_modules/zod/v4/locales/th.d.cts +5 -0
  732. package/node_modules/zod/v4/locales/th.d.ts +4 -0
  733. package/node_modules/zod/v4/locales/th.js +117 -0
  734. package/node_modules/zod/v4/locales/tr.cjs +143 -0
  735. package/node_modules/zod/v4/locales/tr.d.cts +5 -0
  736. package/node_modules/zod/v4/locales/tr.d.ts +5 -0
  737. package/node_modules/zod/v4/locales/tr.js +115 -0
  738. package/node_modules/zod/v4/locales/ua.cjs +12 -0
  739. package/node_modules/zod/v4/locales/ua.d.cts +5 -0
  740. package/node_modules/zod/v4/locales/ua.d.ts +5 -0
  741. package/node_modules/zod/v4/locales/ua.js +5 -0
  742. package/node_modules/zod/v4/locales/uk.cjs +144 -0
  743. package/node_modules/zod/v4/locales/uk.d.cts +5 -0
  744. package/node_modules/zod/v4/locales/uk.d.ts +4 -0
  745. package/node_modules/zod/v4/locales/uk.js +117 -0
  746. package/node_modules/zod/v4/locales/ur.cjs +144 -0
  747. package/node_modules/zod/v4/locales/ur.d.cts +5 -0
  748. package/node_modules/zod/v4/locales/ur.d.ts +4 -0
  749. package/node_modules/zod/v4/locales/ur.js +117 -0
  750. package/node_modules/zod/v4/locales/vi.cjs +143 -0
  751. package/node_modules/zod/v4/locales/vi.d.cts +5 -0
  752. package/node_modules/zod/v4/locales/vi.d.ts +4 -0
  753. package/node_modules/zod/v4/locales/vi.js +116 -0
  754. package/node_modules/zod/v4/locales/yo.cjs +142 -0
  755. package/node_modules/zod/v4/locales/yo.d.cts +5 -0
  756. package/node_modules/zod/v4/locales/yo.d.ts +4 -0
  757. package/node_modules/zod/v4/locales/yo.js +115 -0
  758. package/node_modules/zod/v4/locales/zh-CN.cjs +143 -0
  759. package/node_modules/zod/v4/locales/zh-CN.d.cts +5 -0
  760. package/node_modules/zod/v4/locales/zh-CN.d.ts +4 -0
  761. package/node_modules/zod/v4/locales/zh-CN.js +116 -0
  762. package/node_modules/zod/v4/locales/zh-TW.cjs +144 -0
  763. package/node_modules/zod/v4/locales/zh-TW.d.cts +5 -0
  764. package/node_modules/zod/v4/locales/zh-TW.d.ts +4 -0
  765. package/node_modules/zod/v4/locales/zh-TW.js +117 -0
  766. package/node_modules/zod/v4/mini/checks.cjs +34 -0
  767. package/node_modules/zod/v4/mini/checks.d.cts +1 -0
  768. package/node_modules/zod/v4/mini/checks.d.ts +1 -0
  769. package/node_modules/zod/v4/mini/checks.js +1 -0
  770. package/node_modules/zod/v4/mini/coerce.cjs +47 -0
  771. package/node_modules/zod/v4/mini/coerce.d.cts +7 -0
  772. package/node_modules/zod/v4/mini/coerce.d.ts +7 -0
  773. package/node_modules/zod/v4/mini/coerce.js +17 -0
  774. package/node_modules/zod/v4/mini/external.cjs +63 -0
  775. package/node_modules/zod/v4/mini/external.d.cts +12 -0
  776. package/node_modules/zod/v4/mini/external.d.ts +12 -0
  777. package/node_modules/zod/v4/mini/external.js +14 -0
  778. package/node_modules/zod/v4/mini/index.cjs +32 -0
  779. package/node_modules/zod/v4/mini/index.d.cts +3 -0
  780. package/node_modules/zod/v4/mini/index.d.ts +3 -0
  781. package/node_modules/zod/v4/mini/index.js +3 -0
  782. package/node_modules/zod/v4/mini/iso.cjs +60 -0
  783. package/node_modules/zod/v4/mini/iso.d.cts +22 -0
  784. package/node_modules/zod/v4/mini/iso.d.ts +22 -0
  785. package/node_modules/zod/v4/mini/iso.js +30 -0
  786. package/node_modules/zod/v4/mini/package.json +6 -0
  787. package/node_modules/zod/v4/mini/parse.cjs +16 -0
  788. package/node_modules/zod/v4/mini/parse.d.cts +1 -0
  789. package/node_modules/zod/v4/mini/parse.d.ts +1 -0
  790. package/node_modules/zod/v4/mini/parse.js +1 -0
  791. package/node_modules/zod/v4/mini/schemas.cjs +929 -0
  792. package/node_modules/zod/v4/mini/schemas.d.cts +421 -0
  793. package/node_modules/zod/v4/mini/schemas.d.ts +421 -0
  794. package/node_modules/zod/v4/mini/schemas.js +809 -0
  795. package/node_modules/zod/v4/package.json +6 -0
  796. package/node_modules/zod/v4-mini/index.cjs +17 -0
  797. package/node_modules/zod/v4-mini/index.d.cts +1 -0
  798. package/node_modules/zod/v4-mini/index.d.ts +1 -0
  799. package/node_modules/zod/v4-mini/index.js +1 -0
  800. package/node_modules/zod/v4-mini/package.json +6 -0
  801. package/package.json +93 -0
  802. package/publish.sh +449 -0
@@ -0,0 +1,423 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const app_1 = require("../src/app");
4
+ const agent_1 = require("../src/agent");
5
+ const model_1 = require("../src/model");
6
+ const secrets_1 = require("../src/secrets");
7
+ const toolkit_1 = require("../src/tools/toolkit");
8
+ const tool_1 = require("../src/tools/tool");
9
+ // Mock tool implementation for testing
10
+ class MockTool {
11
+ constructor(name, description, args = {}) {
12
+ this.name = name;
13
+ this.description = description;
14
+ this.schema = tool_1.Schema.objectValue(args);
15
+ }
16
+ execute(_args) {
17
+ return { executed: true };
18
+ }
19
+ }
20
+ // Mock server implementation for testing
21
+ class MockServer {
22
+ constructor() {
23
+ this.acceptedApp = null;
24
+ this.started = false;
25
+ this.stopped = false;
26
+ this.acceptCalls = 0;
27
+ this.startCalls = 0;
28
+ this.stopCalls = 0;
29
+ }
30
+ accept(app) {
31
+ this.acceptedApp = app;
32
+ this.acceptCalls++;
33
+ }
34
+ async start() {
35
+ this.started = true;
36
+ this.startCalls++;
37
+ }
38
+ async stop() {
39
+ this.stopped = true;
40
+ this.stopCalls++;
41
+ }
42
+ }
43
+ // Mock streamer for testing
44
+ class MockStreamer {
45
+ constructor() {
46
+ this.receivedResponses = [];
47
+ this.receivedModels = [];
48
+ }
49
+ async recieve(model, content) {
50
+ this.receivedModels.push(model);
51
+ this.receivedResponses.push(content);
52
+ }
53
+ }
54
+ // Mock model for testing without real API calls
55
+ class MockModel {
56
+ constructor() {
57
+ this.threadId = "mock-thread-id";
58
+ }
59
+ async invoke(prompt, streamer) {
60
+ await streamer.recieve(this, {
61
+ eventName: "response.output_text.done",
62
+ data: {
63
+ typeName: "output_text",
64
+ outputText: {
65
+ outputType: "output_text",
66
+ text: `Mock response to: ${prompt[0]?.content || "empty"}`,
67
+ },
68
+ },
69
+ });
70
+ }
71
+ }
72
+ // Mock factory for testing
73
+ class MockModelFactory {
74
+ async create(_props) {
75
+ return new MockModel();
76
+ }
77
+ }
78
+ describe("App", () => {
79
+ let mockServer;
80
+ let defaultModelFactory;
81
+ beforeEach(() => {
82
+ mockServer = new MockServer();
83
+ defaultModelFactory = model_1.Model.openAI("gpt-4", secrets_1.Secret.fromEnv("OPENAI_API_KEY"));
84
+ });
85
+ describe("constructor", () => {
86
+ it("should create an App with name and server", () => {
87
+ const app = new app_1.App("TestApp", mockServer);
88
+ expect(app.name).toBe("TestApp");
89
+ expect(app.server).toBe(mockServer);
90
+ expect(app.agents).toEqual([]);
91
+ expect(app.toolkits.size).toBe(0);
92
+ });
93
+ it("should call server.accept() during construction", () => {
94
+ const app = new app_1.App("TestApp", mockServer);
95
+ expect(mockServer.acceptCalls).toBe(1);
96
+ expect(mockServer.acceptedApp).toBe(app);
97
+ });
98
+ it("should create an App with empty string name", () => {
99
+ const app = new app_1.App("", mockServer);
100
+ expect(app.name).toBe("");
101
+ });
102
+ it("should initialize agents as empty array", () => {
103
+ const app = new app_1.App("TestApp", mockServer);
104
+ expect(app.agents).toBeDefined();
105
+ expect(Array.isArray(app.agents)).toBe(true);
106
+ expect(app.agents).toHaveLength(0);
107
+ });
108
+ it("should initialize toolkits as empty Set", () => {
109
+ const app = new app_1.App("TestApp", mockServer);
110
+ expect(app.toolkits).toBeDefined();
111
+ expect(app.toolkits).toBeInstanceOf(Set);
112
+ expect(app.toolkits.size).toBe(0);
113
+ });
114
+ });
115
+ describe("addAgent()", () => {
116
+ it("should add an agent to the app", () => {
117
+ const app = new app_1.App("TestApp", mockServer);
118
+ const agent = new agent_1.Agent({
119
+ name: "TestAgent",
120
+ toolkits: [],
121
+ systemPrompt: "Test prompt",
122
+ model: defaultModelFactory,
123
+ });
124
+ app.addAgent(agent);
125
+ expect(app.agents).toHaveLength(1);
126
+ expect(app.agents[0]).toBe(agent);
127
+ });
128
+ it("should add multiple agents", () => {
129
+ const app = new app_1.App("TestApp", mockServer);
130
+ const agent1 = new agent_1.Agent({
131
+ name: "Agent1",
132
+ toolkits: [],
133
+ systemPrompt: "Prompt 1",
134
+ model: defaultModelFactory,
135
+ });
136
+ const agent2 = new agent_1.Agent({
137
+ name: "Agent2",
138
+ toolkits: [],
139
+ systemPrompt: "Prompt 2",
140
+ model: defaultModelFactory,
141
+ });
142
+ app.addAgent(agent1);
143
+ app.addAgent(agent2);
144
+ expect(app.agents).toHaveLength(2);
145
+ expect(app.agents[0]).toBe(agent1);
146
+ expect(app.agents[1]).toBe(agent2);
147
+ });
148
+ it("should add agent toolkits to app toolkits", () => {
149
+ const app = new app_1.App("TestApp", mockServer);
150
+ const toolkit = new toolkit_1.Toolkit({ name: "TestToolkit" });
151
+ const agent = new agent_1.Agent({
152
+ name: "TestAgent",
153
+ toolkits: [toolkit],
154
+ systemPrompt: "Test prompt",
155
+ model: defaultModelFactory,
156
+ });
157
+ app.addAgent(agent);
158
+ expect(app.toolkits.size).toBe(1);
159
+ expect(app.toolkits.has(toolkit)).toBe(true);
160
+ });
161
+ it("should add multiple toolkits from agent", () => {
162
+ const app = new app_1.App("TestApp", mockServer);
163
+ const toolkit1 = new toolkit_1.Toolkit({ name: "Toolkit1" });
164
+ const toolkit2 = new toolkit_1.Toolkit({ name: "Toolkit2" });
165
+ const agent = new agent_1.Agent({
166
+ name: "TestAgent",
167
+ toolkits: [toolkit1, toolkit2],
168
+ systemPrompt: "Test prompt",
169
+ model: defaultModelFactory,
170
+ });
171
+ app.addAgent(agent);
172
+ expect(app.toolkits.size).toBe(2);
173
+ expect(app.toolkits.has(toolkit1)).toBe(true);
174
+ expect(app.toolkits.has(toolkit2)).toBe(true);
175
+ });
176
+ it("should not duplicate toolkits when adding same toolkit from multiple agents", () => {
177
+ const app = new app_1.App("TestApp", mockServer);
178
+ const sharedToolkit = new toolkit_1.Toolkit({ name: "SharedToolkit" });
179
+ const agent1 = new agent_1.Agent({
180
+ name: "Agent1",
181
+ toolkits: [sharedToolkit],
182
+ systemPrompt: "Prompt 1",
183
+ model: defaultModelFactory,
184
+ });
185
+ const agent2 = new agent_1.Agent({
186
+ name: "Agent2",
187
+ toolkits: [sharedToolkit],
188
+ systemPrompt: "Prompt 2",
189
+ model: defaultModelFactory,
190
+ });
191
+ app.addAgent(agent1);
192
+ app.addAgent(agent2);
193
+ expect(app.toolkits.size).toBe(1);
194
+ expect(app.toolkits.has(sharedToolkit)).toBe(true);
195
+ });
196
+ it("should allow adding the same agent twice", () => {
197
+ const app = new app_1.App("TestApp", mockServer);
198
+ const agent = new agent_1.Agent({
199
+ name: "TestAgent",
200
+ toolkits: [],
201
+ systemPrompt: "Test prompt",
202
+ model: defaultModelFactory,
203
+ });
204
+ app.addAgent(agent);
205
+ app.addAgent(agent);
206
+ expect(app.agents).toHaveLength(2);
207
+ expect(app.agents[0]).toBe(agent);
208
+ expect(app.agents[1]).toBe(agent);
209
+ });
210
+ it("should handle agent with no toolkits", () => {
211
+ const app = new app_1.App("TestApp", mockServer);
212
+ const agent = new agent_1.Agent({
213
+ name: "NoToolkitAgent",
214
+ toolkits: [],
215
+ systemPrompt: "No toolkits",
216
+ model: defaultModelFactory,
217
+ });
218
+ app.addAgent(agent);
219
+ expect(app.agents).toHaveLength(1);
220
+ expect(app.toolkits.size).toBe(0);
221
+ });
222
+ });
223
+ describe("addToolkit()", () => {
224
+ it("should add a toolkit to the app", () => {
225
+ const app = new app_1.App("TestApp", mockServer);
226
+ const toolkit = new toolkit_1.Toolkit({ name: "TestToolkit" });
227
+ app.addToolkit(toolkit);
228
+ expect(app.toolkits.size).toBe(1);
229
+ expect(app.toolkits.has(toolkit)).toBe(true);
230
+ });
231
+ it("should add multiple toolkits", () => {
232
+ const app = new app_1.App("TestApp", mockServer);
233
+ const toolkit1 = new toolkit_1.Toolkit({ name: "Toolkit1" });
234
+ const toolkit2 = new toolkit_1.Toolkit({ name: "Toolkit2" });
235
+ app.addToolkit(toolkit1);
236
+ app.addToolkit(toolkit2);
237
+ expect(app.toolkits.size).toBe(2);
238
+ expect(app.toolkits.has(toolkit1)).toBe(true);
239
+ expect(app.toolkits.has(toolkit2)).toBe(true);
240
+ });
241
+ it("should not duplicate toolkit when adding same toolkit twice", () => {
242
+ const app = new app_1.App("TestApp", mockServer);
243
+ const toolkit = new toolkit_1.Toolkit({ name: "TestToolkit" });
244
+ app.addToolkit(toolkit);
245
+ app.addToolkit(toolkit);
246
+ expect(app.toolkits.size).toBe(1);
247
+ });
248
+ it("should add toolkit with tools", () => {
249
+ const app = new app_1.App("TestApp", mockServer);
250
+ const tool = new MockTool("testTool", "A test tool");
251
+ const toolkit = new toolkit_1.Toolkit({
252
+ name: "TestToolkit",
253
+ tools: [tool],
254
+ });
255
+ app.addToolkit(toolkit);
256
+ expect(app.toolkits.size).toBe(1);
257
+ const addedToolkit = Array.from(app.toolkits)[0];
258
+ expect(addedToolkit.tools).toHaveLength(1);
259
+ expect(addedToolkit.tools[0].name).toBe("testTool");
260
+ });
261
+ });
262
+ describe("serve()", () => {
263
+ it("should call server.start()", () => {
264
+ const app = new app_1.App("TestApp", mockServer);
265
+ app.serve();
266
+ expect(mockServer.startCalls).toBe(1);
267
+ expect(mockServer.started).toBe(true);
268
+ });
269
+ it("should be callable multiple times", () => {
270
+ const app = new app_1.App("TestApp", mockServer);
271
+ app.serve();
272
+ app.serve();
273
+ app.serve();
274
+ expect(mockServer.startCalls).toBe(3);
275
+ });
276
+ });
277
+ describe("integration scenarios", () => {
278
+ it("should work with complete app setup", () => {
279
+ const app = new app_1.App("CompleteApp", mockServer);
280
+ // Create tools
281
+ const searchTool = new MockTool("search", "Search for items");
282
+ const createTool = new MockTool("create", "Create new item");
283
+ // Create toolkits
284
+ const searchToolkit = new toolkit_1.Toolkit({
285
+ name: "SearchToolkit",
286
+ description: "Tools for searching",
287
+ tools: [searchTool],
288
+ });
289
+ const crudToolkit = new toolkit_1.Toolkit({
290
+ name: "CRUDToolkit",
291
+ description: "CRUD operations",
292
+ tools: [createTool],
293
+ });
294
+ // Create agents
295
+ const searchAgent = new agent_1.Agent({
296
+ name: "SearchAgent",
297
+ toolkits: [searchToolkit],
298
+ systemPrompt: "You are a search agent",
299
+ model: defaultModelFactory,
300
+ });
301
+ const crudAgent = new agent_1.Agent({
302
+ name: "CRUDAgent",
303
+ toolkits: [crudToolkit],
304
+ systemPrompt: "You are a CRUD agent",
305
+ model: defaultModelFactory,
306
+ });
307
+ // Add agents to app
308
+ app.addAgent(searchAgent);
309
+ app.addAgent(crudAgent);
310
+ // Add additional toolkit directly
311
+ const utilToolkit = new toolkit_1.Toolkit({ name: "UtilToolkit" });
312
+ app.addToolkit(utilToolkit);
313
+ // Verify state
314
+ expect(app.name).toBe("CompleteApp");
315
+ expect(app.agents).toHaveLength(2);
316
+ expect(app.toolkits.size).toBe(3);
317
+ expect(mockServer.acceptedApp).toBe(app);
318
+ });
319
+ it("should maintain references correctly", () => {
320
+ const app = new app_1.App("RefApp", mockServer);
321
+ const toolkit = new toolkit_1.Toolkit({ name: "SharedToolkit" });
322
+ const agent = new agent_1.Agent({
323
+ name: "RefAgent",
324
+ toolkits: [toolkit],
325
+ systemPrompt: "Test",
326
+ model: defaultModelFactory,
327
+ });
328
+ app.addAgent(agent);
329
+ app.addToolkit(toolkit);
330
+ // Agent toolkit and app toolkit should be same reference
331
+ expect(app.agents[0].toolkits[0]).toBe(toolkit);
332
+ expect(Array.from(app.toolkits)[0]).toBe(toolkit);
333
+ });
334
+ it("should allow iteration over toolkits", () => {
335
+ const app = new app_1.App("IterApp", mockServer);
336
+ const toolkit1 = new toolkit_1.Toolkit({ name: "Toolkit1" });
337
+ const toolkit2 = new toolkit_1.Toolkit({ name: "Toolkit2" });
338
+ app.addToolkit(toolkit1);
339
+ app.addToolkit(toolkit2);
340
+ const toolkitNames = [];
341
+ app.toolkits.forEach((toolkit) => {
342
+ toolkitNames.push(toolkit.name);
343
+ });
344
+ expect(toolkitNames).toContain("Toolkit1");
345
+ expect(toolkitNames).toContain("Toolkit2");
346
+ });
347
+ });
348
+ describe("readonly properties", () => {
349
+ it("should have readonly name property", () => {
350
+ const app = new app_1.App("ReadonlyApp", mockServer);
351
+ expect(app.name).toBeDefined();
352
+ expect(typeof app.name).toBe("string");
353
+ });
354
+ it("should have agents array that can be read", () => {
355
+ const app = new app_1.App("TestApp", mockServer);
356
+ expect(app.agents).toBeDefined();
357
+ expect(Array.isArray(app.agents)).toBe(true);
358
+ });
359
+ it("should have toolkits Set that can be read", () => {
360
+ const app = new app_1.App("TestApp", mockServer);
361
+ expect(app.toolkits).toBeDefined();
362
+ expect(app.toolkits).toBeInstanceOf(Set);
363
+ });
364
+ it("should have server that can be read", () => {
365
+ const app = new app_1.App("TestApp", mockServer);
366
+ expect(app.server).toBeDefined();
367
+ expect(app.server).toBe(mockServer);
368
+ });
369
+ });
370
+ describe("IServer interface compliance", () => {
371
+ it("should work with any IServer implementation", () => {
372
+ class CustomServer {
373
+ constructor() {
374
+ this.accepted = false;
375
+ this.running = false;
376
+ }
377
+ accept(_app) {
378
+ this.accepted = true;
379
+ }
380
+ async start() {
381
+ this.running = true;
382
+ }
383
+ async stop() {
384
+ this.running = false;
385
+ }
386
+ }
387
+ const customServer = new CustomServer();
388
+ const app = new app_1.App("CustomApp", customServer);
389
+ expect(customServer.accepted).toBe(true);
390
+ app.serve();
391
+ expect(customServer.running).toBe(true);
392
+ });
393
+ });
394
+ });
395
+ describe("Model factory methods", () => {
396
+ describe("Model.openAI()", () => {
397
+ it("should create an OpenAI model factory with env secret", () => {
398
+ const secret = secrets_1.Secret.fromEnv("OPENAI_API_KEY");
399
+ const factory = model_1.Model.openAI("gpt-4", secret);
400
+ expect(factory).toBeDefined();
401
+ expect(typeof factory.create).toBe("function");
402
+ });
403
+ it("should create model factories with different identifiers", () => {
404
+ const secret = secrets_1.Secret.fromEnv("OPENAI_API_KEY");
405
+ const gpt4 = model_1.Model.openAI("gpt-4", secret);
406
+ const gpt35 = model_1.Model.openAI("gpt-3.5-turbo", secret);
407
+ expect(gpt4).toBeDefined();
408
+ expect(gpt35).toBeDefined();
409
+ });
410
+ it("should create model instances from mock factory and invoke with streamer", async () => {
411
+ const mockFactory = new MockModelFactory();
412
+ const model = await mockFactory.create({
413
+ systemPrompt: "You are a helpful assistant.",
414
+ });
415
+ const streamer = new MockStreamer();
416
+ await model.invoke([{ content: "Hello", role: "user" }], streamer);
417
+ expect(streamer.receivedResponses.length).toBeGreaterThan(0);
418
+ expect(streamer.receivedModels[0]).toBe(model);
419
+ expect(model.threadId).toBe("mock-thread-id");
420
+ });
421
+ });
422
+ });
423
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90ZXN0cy9hcHAudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLG9DQUFpQztBQUNqQyx3Q0FBcUM7QUFDckMsd0NBQXFDO0FBQ3JDLDRDQUF3QztBQUV4QyxrREFBK0M7QUFFL0MsNENBQWtFO0FBRWxFLHVDQUF1QztBQUN2QyxNQUFNLFFBQVE7SUFLVixZQUFZLElBQVksRUFBRSxXQUFtQixFQUFFLE9BQXVDLEVBQUU7UUFDcEYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxhQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxPQUFPLENBQUMsS0FBOEI7UUFDbEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUM5QixDQUFDO0NBQ0o7QUFFRCx5Q0FBeUM7QUFDekMsTUFBTSxVQUFVO0lBQWhCO1FBQ1csZ0JBQVcsR0FBbUIsSUFBSSxDQUFDO1FBQ25DLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFDekIsWUFBTyxHQUFZLEtBQUssQ0FBQztRQUN6QixnQkFBVyxHQUFXLENBQUMsQ0FBQztRQUN4QixlQUFVLEdBQVcsQ0FBQyxDQUFDO1FBQ3ZCLGNBQVMsR0FBVyxDQUFDLENBQUM7SUFnQmpDLENBQUM7SUFkRyxNQUFNLENBQUMsR0FBWTtRQUNmLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQUs7UUFDUCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJ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cFwiO1xuaW1wb3J0IHsgQWdlbnQgfSBmcm9tIFwiLi4vc3JjL2FnZW50XCI7XG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCIuLi9zcmMvbW9kZWxcIjtcbmltcG9ydCB7IFNlY3JldCB9IGZyb20gXCIuLi9zcmMvc2VjcmV0c1wiO1xuaW1wb3J0IHsgSU1vZGVsRmFjdG9yeSwgSU1vZGVsU3RyZWFtZXIsIE1vZGVsQ29udGVudCwgSU1vZGVsLCBNb2RlbFJlc3BvbnNlIH0gZnJvbSBcIi4uL3NyYy9tb2RlbHMvdHlwZXNcIjtcbmltcG9ydCB7IFRvb2xraXQgfSBmcm9tIFwiLi4vc3JjL3Rvb2xzL3Rvb2xraXRcIjtcbmltcG9ydCB7IElTZXJ2ZXIgfSBmcm9tIFwiLi4vc3JjL1NlcnZlclwiO1xuaW1wb3J0IHsgSVRvb2wsIFNjaGVtYSwgVG9vbEFyZ0J1aWxkZXIgfSBmcm9tIFwiLi4vc3JjL3Rvb2xzL3Rvb2xcIjtcblxuLy8gTW9jayB0b29sIGltcGxlbWVudGF0aW9uIGZvciB0ZXN0aW5nXG5jbGFzcyBNb2NrVG9vbCBpbXBsZW1lbnRzIElUb29sIHtcbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nO1xuICAgIHB1YmxpYyBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgIHB1YmxpYyBzY2hlbWE6IFNjaGVtYTtcblxuICAgIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZywgYXJnczogUmVjb3JkPHN0cmluZywgVG9vbEFyZ0J1aWxkZXI+ID0ge30pIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgICAgICB0aGlzLnNjaGVtYSA9IFNjaGVtYS5vYmplY3RWYWx1ZShhcmdzKTtcbiAgICB9XG5cbiAgICBleGVjdXRlKF9hcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHVua25vd24ge1xuICAgICAgICByZXR1cm4geyBleGVjdXRlZDogdHJ1ZSB9O1xuICAgIH1cbn1cblxuLy8gTW9jayBzZXJ2ZXIgaW1wbGVtZW50YXRpb24gZm9yIHRlc3RpbmdcbmNsYXNzIE1vY2tTZXJ2ZXIgaW1wbGVtZW50cyBJU2VydmVyIHtcbiAgICBwdWJsaWMgYWNjZXB0ZWRBcHA6IHVua25vd24gfCBudWxsID0gbnVsbDtcbiAgICBwdWJsaWMgc3RhcnRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBzdG9wcGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIGFjY2VwdENhbGxzOiBudW1iZXIgPSAwO1xuICAgIHB1YmxpYyBzdGFydENhbGxzOiBudW1iZXIgPSAwO1xuICAgIHB1YmxpYyBzdG9wQ2FsbHM6IG51bWJlciA9IDA7XG5cbiAgICBhY2NlcHQoYXBwOiB1bmtub3duKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWNjZXB0ZWRBcHAgPSBhcHA7XG4gICAgICAgIHRoaXMuYWNjZXB0Q2FsbHMrKztcbiAgICB9XG5cbiAgICBhc3luYyBzdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdGFydENhbGxzKys7XG4gICAgfVxuXG4gICAgYXN5bmMgc3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wQ2FsbHMrKztcbiAgICB9XG59XG5cbi8vIE1vY2sgc3RyZWFtZXIgZm9yIHRlc3RpbmdcbmNsYXNzIE1vY2tTdHJlYW1lciBpbXBsZW1lbnRzIElNb2RlbFN0cmVhbWVyIHtcbiAgICBwdWJsaWMgcmVjZWl2ZWRSZXNwb25zZXM6IE1vZGVsUmVzcG9uc2VbXSA9IFtdO1xuICAgIHB1YmxpYyByZWNlaXZlZE1vZGVsczogSU1vZGVsW10gPSBbXTtcblxuICAgIGFzeW5jIHJlY2lldmUobW9kZWw6IElNb2RlbCwgY29udGVudDogTW9kZWxSZXNwb25zZSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLnJlY2VpdmVkTW9kZWxzLnB1c2gobW9kZWwpO1xuICAgICAgICB0aGlzLnJlY2VpdmVkUmVzcG9uc2VzLnB1c2goY29udGVudCk7XG4gICAgfVxufVxuXG4vLyBNb2NrIG1vZGVsIGZvciB0ZXN0aW5nIHdpdGhvdXQgcmVhbCBBUEkgY2FsbHNcbmNsYXNzIE1vY2tNb2RlbCBpbXBsZW1lbnRzIElNb2RlbCB7XG4gICAgcHVibGljIHJlYWRvbmx5IHRocmVhZElkPzogc3RyaW5nID0gXCJtb2NrLXRocmVhZC1pZFwiO1xuXG4gICAgYXN5bmMgaW52b2tlKHByb21wdDogTW9kZWxDb250ZW50W10sIHN0cmVhbWVyOiBJTW9kZWxTdHJlYW1lcik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCBzdHJlYW1lci5yZWNpZXZlKHRoaXMsIHtcbiAgICAgICAgICAgIGV2ZW50TmFtZTogXCJyZXNwb25zZS5vdXRwdXRfdGV4dC5kb25lXCIsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgdHlwZU5hbWU6IFwib3V0cHV0X3RleHRcIixcbiAgICAgICAgICAgICAgICBvdXRwdXRUZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dFR5cGU6IFwib3V0cHV0X3RleHRcIixcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogYE1vY2sgcmVzcG9uc2UgdG86ICR7cHJvbXB0WzBdPy5jb250ZW50IHx8IFwiZW1wdHlcIn1gLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbi8vIE1vY2sgZmFjdG9yeSBmb3IgdGVzdGluZ1xuY2xhc3MgTW9ja01vZGVsRmFjdG9yeSBpbXBsZW1lbnRzIElNb2RlbEZhY3Rvcnkge1xuICAgIGFzeW5jIGNyZWF0ZShfcHJvcHM6IHsgc3lzdGVtUHJvbXB0OiBzdHJpbmcgfSk6IFByb21pc2U8SU1vZGVsPiB7XG4gICAgICAgIHJldHVybiBuZXcgTW9ja01vZGVsKCk7XG4gICAgfVxufVxuXG5kZXNjcmliZShcIkFwcFwiLCAoKSA9PiB7XG4gICAgbGV0IG1vY2tTZXJ2ZXI6IE1vY2tTZXJ2ZXI7XG4gICAgbGV0IGRlZmF1bHRNb2RlbEZhY3Rvcnk6IElNb2RlbEZhY3Rvcnk7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgbW9ja1NlcnZlciA9IG5ldyBNb2NrU2VydmVyKCk7XG4gICAgICAgIGRlZmF1bHRNb2RlbEZhY3RvcnkgPSBNb2RlbC5vcGVuQUkoXCJncHQtNFwiLCBTZWNyZXQuZnJvbUVudihcIk9QRU5BSV9BUElfS0VZXCIpKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKFwiY29uc3RydWN0b3JcIiwgKCkgPT4ge1xuICAgICAgICBpdChcInNob3VsZCBjcmVhdGUgYW4gQXBwIHdpdGggbmFtZSBhbmQgc2VydmVyXCIsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFwcCA9IG5ldyBBcHAoXCJUZXN0QXBwXCIsIG1vY2tTZXJ2ZXIpO1xuXG4gICAgICAgICAgICBleHBlY3QoYXBwLm5hbWUpLnRvQmUoXCJUZXN0QXBwXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGFwcC5zZXJ2ZXIpLnRvQmUobW9ja1NlcnZlcik7XG4gICAgICAgICAgICBleHBlY3QoYXBwLmFnZW50cykudG9FcXVhbChbXSk7XG4gICAgICAgICAgICBleHBlY3QoYXBwLnRvb2xraXRzLnNpemUpLnRvQmUoMCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KFwic2hvdWxkIGNhbGwgc2VydmVyLmFjY2VwdCgpIGR1cmluZyBjb25zdHJ1Y3Rpb25cIiwgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXBwID0gbmV3IEFwcChcIlRlc3RBcHBcIiwgbW9ja1NlcnZlcik7XG5cbiAgICAgICAgICAgIGV4cGVjdChtb2NrU2VydmVyLmFjY2VwdENhbGxzKS50b0JlKDEpO1xuICAgICAgICAgICAgZXhwZWN0KG1vY2tTZXJ2ZXIuYWNjZXB0ZWRBcHApLnRvQmUoYXBwKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoXCJzaG91bGQgY3JlYXRlIGFuIEFwcCB3aXRoIGVtcHR5IHN0cmluZyBuYW1lXCIsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFwcCA9IG5ldyBBcHAoXCJcIiwgbW9ja1NlcnZlcik7XG5cbiAgICAgICAgICAgIGV4cGVjdChhcHAubmFtZSkudG9CZShcIlwiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoXCJzaG91bGQgaW5pdGlhbGl6ZSBhZ2VudHMgYXMgZW1wdHkgYXJyYXlcIiwgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXBwID0gbmV3IEFwcChcIlRlc3RBcHBcIiwgbW9ja1NlcnZlcik7XG5cbiAgICAgICAgICAgIGV4cGVjdChhcHAuYWdlbnRzKS50b0JlRGVmaW5lZCgpO1xuICAgICAgICAgICAgZXhwZWN0KEFycmF5LmlzQXJyYXkoYXBwLmFnZW50cykpLnRvQmUodHJ1ZSk7XG4gICAgICAgICAgICBleHBlY3QoYXBwLmFnZW50cykudG9IYXZlTGVuZ3RoKDApO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdChcInNob3VsZCBpbml0aWFsaXplIHRvb2xraXRzIGFzIGVtcHR5IFNldFwiLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhcHAgPSBuZXcgQXBwKFwiVGVzdEFwcFwiLCBtb2NrU2VydmVyKTtcblxuICAgICAgICAgICAgZXhwZWN0KGFwcC50b29sa2l0cykudG9CZURlZmluZWQoKTtcbiAgICAgICAgICAgIGV4cGVjdChhcHAudG9vbGtpdHMpLnRvQmVJbnN0YW5jZU9mKFNldCk7XG4gICAgICAgICAgICBleHBlY3QoYXBwLnRvb2xraXRzLnNpemUpLnRvQmUoMCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoXCJhZGRBZ2VudCgpXCIsICgpID0+IHtcbiAgICAgICAgaXQoXCJzaG91bGQgYWRkIGFuIGFnZW50IHRvIHRoZSBhcHBcIiwgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXBwID0gbmV3IEFwcChcIlRlc3RBcHBcIiwgbW9ja1NlcnZlcik7XG4gICAgICAgICAgICBjb25zdCBhZ2VudCA9IG5ldyBBZ2VudCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0QWdlbnRcIixcbiAgICAgICAgICAgICAgICB0b29sa2l0czogW10sXG4gICAgICAgICAgICAgICAgc3lzdGVtUHJvbXB0OiBcIlRlc3QgcHJvbXB0XCIsXG4gICAgICAgICAgICAgICAgbW9kZWw6IGRlZmF1bHRNb2RlbEZhY3RvcnksXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYXBwLmFkZEFnZW50KGFnZW50KTtcblxuICAgICAgICAgICAgZXhwZWN0KGFwcC5hZ2VudHMpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICAgICAgICAgIGV4cGVjdChhcHAuYWdlbnRzWzBdKS50b0JlKGFnZW50KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoXCJzaG91bGQgYWRkIG11bHRpcGxlIGFnZW50c1wiLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhcHAgPSBuZXcgQXBwKFwiVGVzdEFwcFwiLCBtb2NrU2VydmVyKTtcbiAgICAgICAgICAgIGNvbnN0IGFnZW50MSA9IG5ldyBBZ2VudCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJBZ2VudDFcIixcbiAgICAgICAgICAgICAgICB0b29sa2l0czogW10sXG4gICAgICAgICAgICAgICAgc3lzdGVtUHJvbXB0OiBcIlByb21wdCAxXCIsXG4gICAgICAgICAgICAgICAgbW9kZWw6IGRlZmF1bHRNb2RlbEZhY3RvcnksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGFnZW50MiA9IG5ldyBBZ2VudCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJBZ2VudDJcIixcbiAgICAgICAgICAgICAgICB0b29sa2l0czogW10sXG4gICAgICAgICAgICAgICAgc3lzdGVtUHJvbXB0OiBcIlByb21wdCAyXCIsXG4gICAgICAgICAgICAgICAgbW9kZWw6IGRlZmF1bHRNb2RlbEZhY3RvcnksXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYXBwLmFkZEFnZW50KGFnZW50MSk7XG4gICAgICAgICAgICBhcHAuYWRkQWdlbnQoYWdlbnQyKTtcblxuICAgICAgICAgICAgZXhwZWN0KGFwcC5hZ2VudHMpLnRvSGF2ZUxlbmd0aCgyKTtcbiAgICAgICAgICAgIGV4cGVjdChhcHAuYWdlbnRzWzBdKS50b0JlKGFnZW50MSk7XG4gICAgICAgICAgICBleHBlY3QoYXBwLmFnZW50c1sxXSkudG9CZShhZ2VudDIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdChcInNob3VsZCBhZGQgYWdlbnQgdG9vbGtpdHMgdG8gYXBwIHRvb2xraXRzXCIsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFwcCA9IG5ldyBBcHAoXCJUZXN0QXBwXCIsIG1vY2tTZXJ2ZXIpO1xuICAgICAgICAgICAgY29uc3QgdG9vbGtpdCA9IG5ldyBUb29sa2l0KHsgbmFtZTogXCJUZXN0VG9vbGtpdFwiIH0pO1xuICAgICAgICAgICAgY29uc3QgYWdlbnQgPSBuZXcgQWdlbnQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdEFnZW50XCIsXG4gICAgICAgICAgICAgICAgdG9vbGtpdHM6IFt0b29sa2l0XSxcbiAgICAgICAgICAgICAgICBzeXN0ZW1Qcm9tcHQ6IFwiVGVzdCBwcm9tcHRcIixcbiAgICAgICAgICAgICAgICBtb2RlbDogZGVmYXVsdE1vZGVsRmFjdG9yeSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhcHAuYWRkQWdlbnQoYWdlbnQpO1xuXG4gICAgICAgICAgICBleHBlY3QoYXBwLnRvb2xraXRzLnNpemUpLnRvQmUoMSk7XG4gICAgICAgICAgICBleHBlY3QoYXBwLnRvb2xraXRzLmhhcyh0b29sa2l0KSkudG9CZSh0cnVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoXCJzaG91bGQgYWRkIG11bHRpcGxlIHRvb2xraXRzIGZyb20gYWdlbnRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXBwID0gbmV3IEFwcChcIlRlc3RBcHBcIiwgbW9ja1NlcnZlcik7XG4gICAgICAgICAgICBjb25zdCB0b29sa2l0MSA9IG5ldyBUb29sa2l0KHsgbmFtZTogXCJUb29sa2l0MVwiIH0pO1xuICAgICAgICAgICAgY29uc3QgdG9vbGtpdDIgPSBuZXcgVG9vbGtpdCh7IG5hbWU6IFwiVG9vbGtpdDJcIiB9KTtcbiAgICAgICAgICAgIGNvbnN0IGFnZW50ID0gbmV3IEFnZW50KHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3RBZ2VudFwiLFxuICAgICAgICAgICAgICAgIHRvb2xraXRzOiBbdG9vbGtpdDEsIHRvb2xraXQyXSxcbiAgICAgICAgICAgICAgICBzeXN0ZW1Qcm9tcHQ6IFwiVGVzdCBwcm9tcHRcIixcbiAgICAgICAgICAgICAgICBtb2RlbDogZGVmYXVsdE1vZGVsRmFjdG9yeSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhcHAuYWRkQWdlbnQoYWdlbnQpO1xuXG4gICAgICAgICAgICBleHBlY3QoYXBwLnRvb2xraXRzLnNpemUpLnRvQmUoMik7XG4gICAgICAgICAgICBleHBlY3QoYXBwLnRvb2xraXRzLmhhcyh0b29sa2l0MSkpLnRvQmUodHJ1ZSk7XG4gICAgICAgICAgICBleHBlY3QoYXBwLnRvb2xraXRzLmhhcyh0b29sa2l0MikpLnRvQmUodHJ1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KFwic2hvdWxkIG5vdCBkdXBsaWNhdGUgdG9vbGtpdHMgd2hlbiBhZGRpbmcgc2FtZSB0b29sa2l0IGZyb20gbXVsdGlwbGUgYWdlbnRzXCIsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFwcCA9IG5ldyBBcHAoXCJUZXN0QXBwXCIsIG1vY2tTZXJ2ZXIpO1xuICAgICAgICAgICAgY29uc3Qgc2hhcmVkVG9vbGtpdCA9IG5ldyBUb29sa2l0KHsgbmFtZTogXCJTaGFyZWRUb29sa2l0XCIgfSk7XG4gICAgICAgICAgICBjb25zdCBhZ2VudDEgPSBuZXcgQWdlbnQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiQWdlbnQxXCIsXG4gICAgICAgICAgICAgICAgdG9vbGtpdHM6IFtzaGFyZWRUb29sa2l0XSxcbiAgICAgICAgICAgICAgICBzeXN0ZW1Qcm9tcHQ6IFwiUHJvbXB0IDFcIixcbiAgICAgICAgICAgICAgICBtb2RlbDogZGVmYXVsdE1vZGVsRmFjdG9yeSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgYWdlbnQyID0gbmV3IEFnZW50KHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcIkFnZW50MlwiLFxuICAgICAgICAgICAgICAgIHRvb2xraXRzOiBbc2hhcmVkVG9vbGtpdF0sXG4gICAgICAgICAgICAgICAgc3lzdGVtUHJvbXB0OiBcIlByb21wdCAyXCIsXG4gICAgICAgICAgICAgICAgbW9kZWw6IGRlZmF1bHRNb2RlbEZhY3RvcnksXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYXBwLmFkZEFnZW50KGFnZW50MSk7XG4gICAgICAgICAgICBhcHAuYWRkQWdlbnQoYWdlbnQyKTtcblxuICAgICAgICAgICAgZXhwZWN0KGFwcC50b29sa2l0cy5zaXplKS50b0JlKDEpO1xuICAgICAgICAgICAgZXhwZWN0KGFwcC50b29sa2l0cy5oYXMoc2hhcmVkVG9vbGtpdCkpLnRvQmUodHJ1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KFwic2hvdWxkIGFsbG93IGFkZGluZyB0aGUgc2FtZSBhZ2VudCB0d2ljZVwiLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhcHAgPSBuZXcgQXBwKFwiVGVzdEFwcFwiLCBtb2NrU2VydmVyKTtcbiAgICAgICAgICAgIGNvbnN0IGFnZW50ID0gbmV3IEFnZW50KHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3RBZ2VudFwiLFxuICAgICAgICAgICAgICAgIHRvb2xraXRzOiBbXSxcbiAgICAgICAgICAgICAgICBzeXN0ZW1Qcm9tcHQ6IFwiVGVzdCBwcm9tcHRcIixcbiAgICAgICAgICAgICAgICBtb2RlbDogZGVmYXVsdE1vZGVsRmFjdG9yeSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhcHAuYWRkQWdlbnQoYWdlbnQpO1xuICAgICAgICAgICAgYXBwLmFkZEFnZW50KGFnZW50KTtcblxuICAgICAgICAgICAgZXhwZWN0KGFwcC5hZ2VudHMpLnRvSGF2ZUxlbmd0aCgyKTtcbiAgICAgICAgICAgIGV4cGVjdChhcHAuYWdlbnRzWzBdKS50b0JlKGFnZW50KTtcbiAgICAgICAgICAgIGV4cGVjdChhcHAuYWdlbnRzWzFdKS50b0JlKGFnZW50KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoXCJzaG91bGQgaGFuZGxlIGFnZW50IHdpdGggbm8gdG9vbGtpdHNcIiwgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXBwID0gbmV3IEFwcChcIlRlc3RBcHBcIiwgbW9ja1NlcnZlcik7XG4gICAgICAgICAgICBjb25zdCBhZ2VudCA9IG5ldyBBZ2VudCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJOb1Rvb2xraXRBZ2VudFwiLFxuICAgICAgICAgICAgICAgIHRvb2xraXRzOiBbXSxcbiAgICAgICAgICAgICAgICBzeXN0ZW1Qcm9tcHQ6IFwiTm8gdG9vbGtpdHNcIixcbiAgICAgICAgICAgICAgICBtb2RlbDogZGVmYXVsdE1vZGVsRmFjdG9yeSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhcHAuYWRkQWdlbnQoYWdlbnQpO1xuXG4gICAgICAgICAgICBleHBlY3QoYXBwLmFnZW50cykudG9IYXZlTGVuZ3RoKDEpO1xuICAgICAgICAgICAgZXhwZWN0KGFwcC50b29sa2l0cy5zaXplKS50b0JlKDApO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKFwiYWRkVG9vbGtpdCgpXCIsICgpID0+IHtcbiAgICAgICAgaXQoXCJzaG91bGQgYWRkIGEgdG9vbGtpdCB0byB0aGUgYXBwXCIsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFwcCA9IG5ldyBBcHAoXCJUZXN0QXBwXCIsIG1vY2tTZXJ2ZXIpO1xuICAgICAgICAgICAgY29uc3QgdG9vbGtpdCA9IG5ldyBUb29sa2l0KHsgbmFtZTogXCJUZXN0VG9vbGtpdFwiIH0pO1xuXG4gICAgICAgICAgICBhcHAuYWRkVG9vbGtpdCh0b29sa2l0KTtcblxuICAgICAgICAgICAgZXhwZWN0KGFwcC50b29sa2l0cy5zaXplKS50b0JlKDEpO1xuICAgICAgICAgICAgZXhwZWN0KGFwcC50b29sa2l0cy5oYXModG9vbGtpdCkpLnRvQmUodHJ1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KFwic2hvdWxkIGFkZCBtdWx0aXBsZSB0b29sa2l0c1wiLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhcHAgPSBuZXcgQXBwKFwiVGVzdEFwcFwiLCBtb2NrU2VydmVyKTtcbiAgICAgICAgICAgIGNvbnN0IHRvb2xraXQxID0gbmV3IFRvb2xraXQoeyBuYW1lOiBcIlRvb2xraXQxXCIgfSk7XG4gICAgICAgICAgICBjb25zdCB0b29sa2l0MiA9IG5ldyBUb29sa2l0KHsgbmFtZTogXCJUb29sa2l0MlwiIH0pO1xuXG4gICAgICAgICAgICBhcHAuYWRkVG9vbGtpdCh0b29sa2l0MSk7XG4gICAgICAgICAgICBhcHAuYWRkVG9vbGtpdCh0b29sa2l0Mik7XG5cbiAgICAgICAgICAgIGV4cGVjdChhcHAudG9vbGtpdHMuc2l6ZSkudG9CZSgyKTtcbiAgICAgICAgICAgIGV4cGVjdChhcHAudG9vbGtpdHMuaGFzKHRvb2xraXQxKSkudG9CZSh0cnVlKTtcbiAgICAgICAgICAgIGV4cGVjdChhcHAudG9vbGtpdHMuaGFzKHRvb2xraXQyKSkudG9CZSh0cnVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoXCJzaG91bGQgbm90IGR1cGxpY2F0ZSB0b29sa2l0IHdoZW4gYWRkaW5nIHNhbWUgdG9vbGtpdCB0d2ljZVwiLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhcHAgPSBuZXcgQXBwKFwiVGVzdEFwcFwiLCBtb2NrU2VydmVyKTtcbiAgICAgICAgICAgIGNvbnN0IHRvb2xraXQgPSBuZXcgVG9vbGtpdCh7IG5hbWU6IFwiVGVzdFRvb2xraXRcIiB9KTtcblxuICAgICAgICAgICAgYXBwLmFkZFRvb2xraXQodG9vbGtpdCk7XG4gICAgICAgICAgICBhcHAuYWRkVG9vbGtpdCh0b29sa2l0KTtcblxuICAgICAgICAgICAgZXhwZWN0KGFwcC50b29sa2l0cy5zaXplKS50b0JlKDEpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdChcInNob3VsZCBhZGQgdG9vbGtpdCB3aXRoIHRvb2xzXCIsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFwcCA9IG5ldyBBcHAoXCJUZXN0QXBwXCIsIG1vY2tTZXJ2ZXIpO1xuICAgICAgICAgICAgY29uc3QgdG9vbCA9IG5ldyBNb2NrVG9vbChcInRlc3RUb29sXCIsIFwiQSB0ZXN0IHRvb2xcIik7XG4gICAgICAgICAgICBjb25zdCB0b29sa2l0ID0gbmV3IFRvb2xraXQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdFRvb2xraXRcIixcbiAgICAgICAgICAgICAgICB0b29sczogW3Rvb2xdLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGFwcC5hZGRUb29sa2l0KHRvb2xraXQpO1xuXG4gICAgICAgICAgICBleHBlY3QoYXBwLnRvb2xraXRzLnNpemUpLnRvQmUoMSk7XG4gICAgICAgICAgICBjb25zdCBhZGRlZFRvb2xraXQgPSBBcnJheS5mcm9tKGFwcC50b29sa2l0cylbMF07XG4gICAgICAgICAgICBleHBlY3QoYWRkZWRUb29sa2l0LnRvb2xzKS50b0hhdmVMZW5ndGgoMSk7XG4gICAgICAgICAgICBleHBlY3QoYWRkZWRUb29sa2l0LnRvb2xzWzBdLm5hbWUpLnRvQmUoXCJ0ZXN0VG9vbFwiKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZShcInNlcnZlKClcIiwgKCkgPT4ge1xuICAgICAgICBpdChcInNob3VsZCBjYWxsIHNlcnZlci5zdGFydCgpXCIsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFwcCA9IG5ldyBBcHAoXCJUZXN0QXBwXCIsIG1vY2tTZXJ2ZXIpO1xuXG4gICAgICAgICAgICBhcHAuc2VydmUoKTtcblxuICAgICAgICAgICAgZXhwZWN0KG1vY2tTZXJ2ZXIuc3RhcnRDYWxscykudG9CZSgxKTtcbiAgICAgICAgICAgIGV4cGVjdChtb2NrU2VydmVyLnN0YXJ0ZWQpLnRvQmUodHJ1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KFwic2hvdWxkIGJlIGNhbGxhYmxlIG11bHRpcGxlIHRpbWVzXCIsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFwcCA9IG5ldyBBcHAoXCJUZXN0QXBwXCIsIG1vY2tTZXJ2ZXIpO1xuXG4gICAgICAgICAgICBhcHAuc2VydmUoKTtcbiAgICAgICAgICAgIGFwcC5zZXJ2ZSgpO1xuICAgICAgICAgICAgYXBwLnNlcnZlKCk7XG5cbiAgICAgICAgICAgIGV4cGVjdChtb2NrU2VydmVyLnN0YXJ0Q2FsbHMpLnRvQmUoMyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoXCJpbnRlZ3JhdGlvbiBzY2VuYXJpb3NcIiwgKCkgPT4ge1xuICAgICAgICBpdChcInNob3VsZCB3b3JrIHdpdGggY29tcGxldGUgYXBwIHNldHVwXCIsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFwcCA9IG5ldyBBcHAoXCJDb21wbGV0ZUFwcFwiLCBtb2NrU2VydmVyKTtcblxuICAgICAgICAgICAgLy8gQ3JlYXRlIHRvb2xzXG4gICAgICAgICAgICBjb25zdCBzZWFyY2hUb29sID0gbmV3IE1vY2tUb29sKFwic2VhcmNoXCIsIFwiU2VhcmNoIGZvciBpdGVtc1wiKTtcbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZVRvb2wgPSBuZXcgTW9ja1Rvb2woXCJjcmVhdGVcIiwgXCJDcmVhdGUgbmV3IGl0ZW1cIik7XG5cbiAgICAgICAgICAgIC8vIENyZWF0ZSB0b29sa2l0c1xuICAgICAgICAgICAgY29uc3Qgc2VhcmNoVG9vbGtpdCA9IG5ldyBUb29sa2l0KHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcIlNlYXJjaFRvb2xraXRcIixcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJUb29scyBmb3Igc2VhcmNoaW5nXCIsXG4gICAgICAgICAgICAgICAgdG9vbHM6IFtzZWFyY2hUb29sXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgY3J1ZFRvb2xraXQgPSBuZXcgVG9vbGtpdCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJDUlVEVG9vbGtpdFwiLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkNSVUQgb3BlcmF0aW9uc1wiLFxuICAgICAgICAgICAgICAgIHRvb2xzOiBbY3JlYXRlVG9vbF0sXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gQ3JlYXRlIGFnZW50c1xuICAgICAgICAgICAgY29uc3Qgc2VhcmNoQWdlbnQgPSBuZXcgQWdlbnQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiU2VhcmNoQWdlbnRcIixcbiAgICAgICAgICAgICAgICB0b29sa2l0czogW3NlYXJjaFRvb2xraXRdLFxuICAgICAgICAgICAgICAgIHN5c3RlbVByb21wdDogXCJZb3UgYXJlIGEgc2VhcmNoIGFnZW50XCIsXG4gICAgICAgICAgICAgICAgbW9kZWw6IGRlZmF1bHRNb2RlbEZhY3RvcnksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGNydWRBZ2VudCA9IG5ldyBBZ2VudCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJDUlVEQWdlbnRcIixcbiAgICAgICAgICAgICAgICB0b29sa2l0czogW2NydWRUb29sa2l0XSxcbiAgICAgICAgICAgICAgICBzeXN0ZW1Qcm9tcHQ6IFwiWW91IGFyZSBhIENSVUQgYWdlbnRcIixcbiAgICAgICAgICAgICAgICBtb2RlbDogZGVmYXVsdE1vZGVsRmFjdG9yeSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBBZGQgYWdlbnRzIHRvIGFwcFxuICAgICAgICAgICAgYXBwLmFkZEFnZW50KHNlYXJjaEFnZW50KTtcbiAgICAgICAgICAgIGFwcC5hZGRBZ2VudChjcnVkQWdlbnQpO1xuXG4gICAgICAgICAgICAvLyBBZGQgYWRkaXRpb25hbCB0b29sa2l0IGRpcmVjdGx5XG4gICAgICAgICAgICBjb25zdCB1dGlsVG9vbGtpdCA9IG5ldyBUb29sa2l0KHsgbmFtZTogXCJVdGlsVG9vbGtpdFwiIH0pO1xuICAgICAgICAgICAgYXBwLmFkZFRvb2xraXQodXRpbFRvb2xraXQpO1xuXG4gICAgICAgICAgICAvLyBWZXJpZnkgc3RhdGVcbiAgICAgICAgICAgIGV4cGVjdChhcHAubmFtZSkudG9CZShcIkNvbXBsZXRlQXBwXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGFwcC5hZ2VudHMpLnRvSGF2ZUxlbmd0aCgyKTtcbiAgICAgICAgICAgIGV4cGVjdChhcHAudG9vbGtpdHMuc2l6ZSkudG9CZSgzKTtcbiAgICAgICAgICAgIGV4cGVjdChtb2NrU2VydmVyLmFjY2VwdGVkQXBwKS50b0JlKGFwcCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KFwic2hvdWxkIG1haW50YWluIHJlZmVyZW5jZXMgY29ycmVjdGx5XCIsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFwcCA9IG5ldyBBcHAoXCJSZWZBcHBcIiwgbW9ja1NlcnZlcik7XG4gICAgICAgICAgICBjb25zdCB0b29sa2l0ID0gbmV3IFRvb2xraXQoeyBuYW1lOiBcIlNoYXJlZFRvb2xraXRcIiB9KTtcbiAgICAgICAgICAgIGNvbnN0IGFnZW50ID0gbmV3IEFnZW50KHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcIlJlZkFnZW50XCIsXG4gICAgICAgICAgICAgICAgdG9vbGtpdHM6IFt0b29sa2l0XSxcbiAgICAgICAgICAgICAgICBzeXN0ZW1Qcm9tcHQ6IFwiVGVzdFwiLFxuICAgICAgICAgICAgICAgIG1vZGVsOiBkZWZhdWx0TW9kZWxGYWN0b3J5LFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGFwcC5hZGRBZ2VudChhZ2VudCk7XG4gICAgICAgICAgICBhcHAuYWRkVG9vbGtpdCh0b29sa2l0KTtcblxuICAgICAgICAgICAgLy8gQWdlbnQgdG9vbGtpdCBhbmQgYXBwIHRvb2xraXQgc2hvdWxkIGJlIHNhbWUgcmVmZXJlbmNlXG4gICAgICAgICAgICBleHBlY3QoYXBwLmFnZW50c1swXS50b29sa2l0c1swXSkudG9CZSh0b29sa2l0KTtcbiAgICAgICAgICAgIGV4cGVjdChBcnJheS5mcm9tKGFwcC50b29sa2l0cylbMF0pLnRvQmUodG9vbGtpdCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KFwic2hvdWxkIGFsbG93IGl0ZXJhdGlvbiBvdmVyIHRvb2xraXRzXCIsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFwcCA9IG5ldyBBcHAoXCJJdGVyQXBwXCIsIG1vY2tTZXJ2ZXIpO1xuICAgICAgICAgICAgY29uc3QgdG9vbGtpdDEgPSBuZXcgVG9vbGtpdCh7IG5hbWU6IFwiVG9vbGtpdDFcIiB9KTtcbiAgICAgICAgICAgIGNvbnN0IHRvb2xraXQyID0gbmV3IFRvb2xraXQoeyBuYW1lOiBcIlRvb2xraXQyXCIgfSk7XG5cbiAgICAgICAgICAgIGFwcC5hZGRUb29sa2l0KHRvb2xraXQxKTtcbiAgICAgICAgICAgIGFwcC5hZGRUb29sa2l0KHRvb2xraXQyKTtcblxuICAgICAgICAgICAgY29uc3QgdG9vbGtpdE5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgICAgYXBwLnRvb2xraXRzLmZvckVhY2goKHRvb2xraXQpID0+IHtcbiAgICAgICAgICAgICAgICB0b29sa2l0TmFtZXMucHVzaCh0b29sa2l0Lm5hbWUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGV4cGVjdCh0b29sa2l0TmFtZXMpLnRvQ29udGFpbihcIlRvb2xraXQxXCIpO1xuICAgICAgICAgICAgZXhwZWN0KHRvb2xraXROYW1lcykudG9Db250YWluKFwiVG9vbGtpdDJcIik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoXCJyZWFkb25seSBwcm9wZXJ0aWVzXCIsICgpID0+IHtcbiAgICAgICAgaXQoXCJzaG91bGQgaGF2ZSByZWFkb25seSBuYW1lIHByb3BlcnR5XCIsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFwcCA9IG5ldyBBcHAoXCJSZWFkb25seUFwcFwiLCBtb2NrU2VydmVyKTtcblxuICAgICAgICAgICAgZXhwZWN0KGFwcC5uYW1lKS50b0JlRGVmaW5lZCgpO1xuICAgICAgICAgICAgZXhwZWN0KHR5cGVvZiBhcHAubmFtZSkudG9CZShcInN0cmluZ1wiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoXCJzaG91bGQgaGF2ZSBhZ2VudHMgYXJyYXkgdGhhdCBjYW4gYmUgcmVhZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhcHAgPSBuZXcgQXBwKFwiVGVzdEFwcFwiLCBtb2NrU2VydmVyKTtcblxuICAgICAgICAgICAgZXhwZWN0KGFwcC5hZ2VudHMpLnRvQmVEZWZpbmVkKCk7XG4gICAgICAgICAgICBleHBlY3QoQXJyYXkuaXNBcnJheShhcHAuYWdlbnRzKSkudG9CZSh0cnVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoXCJzaG91bGQgaGF2ZSB0b29sa2l0cyBTZXQgdGhhdCBjYW4gYmUgcmVhZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhcHAgPSBuZXcgQXBwKFwiVGVzdEFwcFwiLCBtb2NrU2VydmVyKTtcblxuICAgICAgICAgICAgZXhwZWN0KGFwcC50b29sa2l0cykudG9CZURlZmluZWQoKTtcbiAgICAgICAgICAgIGV4cGVjdChhcHAudG9vbGtpdHMpLnRvQmVJbnN0YW5jZU9mKFNldCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KFwic2hvdWxkIGhhdmUgc2VydmVyIHRoYXQgY2FuIGJlIHJlYWRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXBwID0gbmV3IEFwcChcIlRlc3RBcHBcIiwgbW9ja1NlcnZlcik7XG5cbiAgICAgICAgICAgIGV4cGVjdChhcHAuc2VydmVyKS50b0JlRGVmaW5lZCgpO1xuICAgICAgICAgICAgZXhwZWN0KGFwcC5zZXJ2ZXIpLnRvQmUobW9ja1NlcnZlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoXCJJU2VydmVyIGludGVyZmFjZSBjb21wbGlhbmNlXCIsICgpID0+IHtcbiAgICAgICAgaXQoXCJzaG91bGQgd29yayB3aXRoIGFueSBJU2VydmVyIGltcGxlbWVudGF0aW9uXCIsICgpID0+IHtcbiAgICAgICAgICAgIGNsYXNzIEN1c3RvbVNlcnZlciBpbXBsZW1lbnRzIElTZXJ2ZXIge1xuICAgICAgICAgICAgICAgIHB1YmxpYyBhY2NlcHRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHB1YmxpYyBydW5uaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBhY2NlcHQoX2FwcDogdW5rbm93bik6IHZvaWQge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjY2VwdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBhc3luYyBzdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ydW5uaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBhc3luYyBzdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGN1c3RvbVNlcnZlciA9IG5ldyBDdXN0b21TZXJ2ZXIoKTtcbiAgICAgICAgICAgIGNvbnN0IGFwcCA9IG5ldyBBcHAoXCJDdXN0b21BcHBcIiwgY3VzdG9tU2VydmVyKTtcblxuICAgICAgICAgICAgZXhwZWN0KGN1c3RvbVNlcnZlci5hY2NlcHRlZCkudG9CZSh0cnVlKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgYXBwLnNlcnZlKCk7XG4gICAgICAgICAgICBleHBlY3QoY3VzdG9tU2VydmVyLnJ1bm5pbmcpLnRvQmUodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiTW9kZWwgZmFjdG9yeSBtZXRob2RzXCIsICgpID0+IHtcbiAgICBkZXNjcmliZShcIk1vZGVsLm9wZW5BSSgpXCIsICgpID0+IHtcbiAgICAgICAgaXQoXCJzaG91bGQgY3JlYXRlIGFuIE9wZW5BSSBtb2RlbCBmYWN0b3J5IHdpdGggZW52IHNlY3JldFwiLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWNyZXQgPSBTZWNyZXQuZnJvbUVudihcIk9QRU5BSV9BUElfS0VZXCIpO1xuICAgICAgICAgICAgY29uc3QgZmFjdG9yeSA9IE1vZGVsLm9wZW5BSShcImdwdC00XCIsIHNlY3JldCk7XG5cbiAgICAgICAgICAgIGV4cGVjdChmYWN0b3J5KS50b0JlRGVmaW5lZCgpO1xuICAgICAgICAgICAgZXhwZWN0KHR5cGVvZiBmYWN0b3J5LmNyZWF0ZSkudG9CZShcImZ1bmN0aW9uXCIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdChcInNob3VsZCBjcmVhdGUgbW9kZWwgZmFjdG9yaWVzIHdpdGggZGlmZmVyZW50IGlkZW50aWZpZXJzXCIsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlY3JldCA9IFNlY3JldC5mcm9tRW52KFwiT1BFTkFJX0FQSV9LRVlcIik7XG4gICAgICAgICAgICBjb25zdCBncHQ0ID0gTW9kZWwub3BlbkFJKFwiZ3B0LTRcIiwgc2VjcmV0KTtcbiAgICAgICAgICAgIGNvbnN0IGdwdDM1ID0gTW9kZWwub3BlbkFJKFwiZ3B0LTMuNS10dXJib1wiLCBzZWNyZXQpO1xuXG4gICAgICAgICAgICBleHBlY3QoZ3B0NCkudG9CZURlZmluZWQoKTtcbiAgICAgICAgICAgIGV4cGVjdChncHQzNSkudG9CZURlZmluZWQoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoXCJzaG91bGQgY3JlYXRlIG1vZGVsIGluc3RhbmNlcyBmcm9tIG1vY2sgZmFjdG9yeSBhbmQgaW52b2tlIHdpdGggc3RyZWFtZXJcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbW9ja0ZhY3RvcnkgPSBuZXcgTW9ja01vZGVsRmFjdG9yeSgpO1xuXG4gICAgICAgICAgICBjb25zdCBtb2RlbCA9IGF3YWl0IG1vY2tGYWN0b3J5LmNyZWF0ZSh7XG4gICAgICAgICAgICAgICAgc3lzdGVtUHJvbXB0OiBcIllvdSBhcmUgYSBoZWxwZnVsIGFzc2lzdGFudC5cIixcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBzdHJlYW1lciA9IG5ldyBNb2NrU3RyZWFtZXIoKTtcbiAgICAgICAgICAgIGF3YWl0IG1vZGVsLmludm9rZShbeyBjb250ZW50OiBcIkhlbGxvXCIsIHJvbGU6IFwidXNlclwiIH1dLCBzdHJlYW1lcik7XG5cbiAgICAgICAgICAgIGV4cGVjdChzdHJlYW1lci5yZWNlaXZlZFJlc3BvbnNlcy5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbigwKTtcbiAgICAgICAgICAgIGV4cGVjdChzdHJlYW1lci5yZWNlaXZlZE1vZGVsc1swXSkudG9CZShtb2RlbCk7XG4gICAgICAgICAgICBleHBlY3QobW9kZWwudGhyZWFkSWQpLnRvQmUoXCJtb2NrLXRocmVhZC1pZFwiKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1 @@
1
+ export {};