@tabstack/sdk 1.0.5 → 2.1.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 (513) hide show
  1. package/CHANGELOG.md +117 -0
  2. package/LICENSE +1 -1
  3. package/README.md +282 -356
  4. package/api-promise.d.mts +2 -0
  5. package/api-promise.d.mts.map +1 -0
  6. package/api-promise.d.ts +2 -0
  7. package/api-promise.d.ts.map +1 -0
  8. package/api-promise.js +6 -0
  9. package/api-promise.js.map +1 -0
  10. package/api-promise.mjs +2 -0
  11. package/api-promise.mjs.map +1 -0
  12. package/client.d.mts +186 -0
  13. package/client.d.mts.map +1 -0
  14. package/client.d.ts +186 -0
  15. package/client.d.ts.map +1 -0
  16. package/client.js +467 -0
  17. package/client.js.map +1 -0
  18. package/client.mjs +463 -0
  19. package/client.mjs.map +1 -0
  20. package/core/api-promise.d.mts +46 -0
  21. package/core/api-promise.d.mts.map +1 -0
  22. package/core/api-promise.d.ts +46 -0
  23. package/core/api-promise.d.ts.map +1 -0
  24. package/core/api-promise.js +74 -0
  25. package/core/api-promise.js.map +1 -0
  26. package/core/api-promise.mjs +70 -0
  27. package/core/api-promise.mjs.map +1 -0
  28. package/core/error.d.mts +46 -0
  29. package/core/error.d.mts.map +1 -0
  30. package/core/error.d.ts +46 -0
  31. package/core/error.d.ts.map +1 -0
  32. package/core/error.js +113 -0
  33. package/core/error.js.map +1 -0
  34. package/core/error.mjs +97 -0
  35. package/core/error.mjs.map +1 -0
  36. package/core/resource.d.mts +6 -0
  37. package/core/resource.d.mts.map +1 -0
  38. package/core/resource.d.ts +6 -0
  39. package/core/resource.d.ts.map +1 -0
  40. package/core/resource.js +11 -0
  41. package/core/resource.js.map +1 -0
  42. package/core/resource.mjs +7 -0
  43. package/core/resource.mjs.map +1 -0
  44. package/core/streaming.d.mts +33 -0
  45. package/core/streaming.d.mts.map +1 -0
  46. package/core/streaming.d.ts +33 -0
  47. package/core/streaming.d.ts.map +1 -0
  48. package/core/streaming.js +263 -0
  49. package/core/streaming.js.map +1 -0
  50. package/core/streaming.mjs +258 -0
  51. package/core/streaming.mjs.map +1 -0
  52. package/core/uploads.d.mts +3 -0
  53. package/core/uploads.d.mts.map +1 -0
  54. package/core/uploads.d.ts +3 -0
  55. package/core/uploads.d.ts.map +1 -0
  56. package/core/uploads.js +6 -0
  57. package/core/uploads.js.map +1 -0
  58. package/core/uploads.mjs +2 -0
  59. package/core/uploads.mjs.map +1 -0
  60. package/error.d.mts +2 -0
  61. package/error.d.mts.map +1 -0
  62. package/error.d.ts +2 -0
  63. package/error.d.ts.map +1 -0
  64. package/error.js +6 -0
  65. package/error.js.map +1 -0
  66. package/error.mjs +2 -0
  67. package/error.mjs.map +1 -0
  68. package/index.d.mts +6 -0
  69. package/index.d.mts.map +1 -0
  70. package/index.d.ts +6 -0
  71. package/index.d.ts.map +1 -0
  72. package/index.js +30 -0
  73. package/index.js.map +1 -0
  74. package/index.mjs +7 -0
  75. package/index.mjs.map +1 -0
  76. package/internal/builtin-types.d.mts +73 -0
  77. package/internal/builtin-types.d.mts.map +1 -0
  78. package/internal/builtin-types.d.ts +73 -0
  79. package/internal/builtin-types.d.ts.map +1 -0
  80. package/internal/builtin-types.js +4 -0
  81. package/internal/builtin-types.js.map +1 -0
  82. package/internal/builtin-types.mjs +3 -0
  83. package/internal/builtin-types.mjs.map +1 -0
  84. package/internal/decoders/line.d.mts +17 -0
  85. package/internal/decoders/line.d.mts.map +1 -0
  86. package/internal/decoders/line.d.ts +17 -0
  87. package/internal/decoders/line.d.ts.map +1 -0
  88. package/internal/decoders/line.js +113 -0
  89. package/internal/decoders/line.js.map +1 -0
  90. package/internal/decoders/line.mjs +108 -0
  91. package/internal/decoders/line.mjs.map +1 -0
  92. package/internal/detect-platform.d.mts +15 -0
  93. package/internal/detect-platform.d.mts.map +1 -0
  94. package/internal/detect-platform.d.ts +15 -0
  95. package/internal/detect-platform.d.ts.map +1 -0
  96. package/internal/detect-platform.js +162 -0
  97. package/internal/detect-platform.js.map +1 -0
  98. package/internal/detect-platform.mjs +157 -0
  99. package/internal/detect-platform.mjs.map +1 -0
  100. package/internal/errors.d.mts +3 -0
  101. package/internal/errors.d.mts.map +1 -0
  102. package/internal/errors.d.ts +3 -0
  103. package/internal/errors.d.ts.map +1 -0
  104. package/internal/errors.js +41 -0
  105. package/internal/errors.js.map +1 -0
  106. package/internal/errors.mjs +36 -0
  107. package/internal/errors.mjs.map +1 -0
  108. package/internal/headers.d.mts +20 -0
  109. package/internal/headers.d.mts.map +1 -0
  110. package/internal/headers.d.ts +20 -0
  111. package/internal/headers.d.ts.map +1 -0
  112. package/internal/headers.js +79 -0
  113. package/internal/headers.js.map +1 -0
  114. package/internal/headers.mjs +74 -0
  115. package/internal/headers.mjs.map +1 -0
  116. package/internal/parse.d.mts +12 -0
  117. package/internal/parse.d.mts.map +1 -0
  118. package/internal/parse.d.ts +12 -0
  119. package/internal/parse.d.ts.map +1 -0
  120. package/internal/parse.js +45 -0
  121. package/internal/parse.js.map +1 -0
  122. package/internal/parse.mjs +42 -0
  123. package/internal/parse.mjs.map +1 -0
  124. package/internal/request-options.d.mts +77 -0
  125. package/internal/request-options.d.mts.map +1 -0
  126. package/internal/request-options.d.ts +77 -0
  127. package/internal/request-options.d.ts.map +1 -0
  128. package/internal/request-options.js +14 -0
  129. package/internal/request-options.js.map +1 -0
  130. package/internal/request-options.mjs +10 -0
  131. package/internal/request-options.mjs.map +1 -0
  132. package/internal/shim-types.d.mts +17 -0
  133. package/internal/shim-types.d.mts.map +1 -0
  134. package/internal/shim-types.d.ts +17 -0
  135. package/internal/shim-types.d.ts.map +1 -0
  136. package/internal/shim-types.js +4 -0
  137. package/internal/shim-types.js.map +1 -0
  138. package/internal/shim-types.mjs +3 -0
  139. package/internal/shim-types.mjs.map +1 -0
  140. package/internal/shims.d.mts +20 -0
  141. package/internal/shims.d.mts.map +1 -0
  142. package/internal/shims.d.ts +20 -0
  143. package/internal/shims.d.ts.map +1 -0
  144. package/internal/shims.js +92 -0
  145. package/internal/shims.js.map +1 -0
  146. package/internal/shims.mjs +85 -0
  147. package/internal/shims.mjs.map +1 -0
  148. package/internal/to-file.d.mts +45 -0
  149. package/internal/to-file.d.mts.map +1 -0
  150. package/internal/to-file.d.ts +45 -0
  151. package/internal/to-file.d.ts.map +1 -0
  152. package/internal/to-file.js +91 -0
  153. package/internal/to-file.js.map +1 -0
  154. package/internal/to-file.mjs +88 -0
  155. package/internal/to-file.mjs.map +1 -0
  156. package/internal/tslib.js +81 -0
  157. package/internal/tslib.mjs +17 -0
  158. package/internal/types.d.mts +69 -0
  159. package/internal/types.d.mts.map +1 -0
  160. package/internal/types.d.ts +69 -0
  161. package/internal/types.d.ts.map +1 -0
  162. package/internal/types.js +4 -0
  163. package/internal/types.js.map +1 -0
  164. package/internal/types.mjs +3 -0
  165. package/internal/types.mjs.map +1 -0
  166. package/internal/uploads.d.mts +42 -0
  167. package/internal/uploads.d.mts.map +1 -0
  168. package/internal/uploads.d.ts +42 -0
  169. package/internal/uploads.d.ts.map +1 -0
  170. package/internal/uploads.js +141 -0
  171. package/internal/uploads.js.map +1 -0
  172. package/internal/uploads.mjs +131 -0
  173. package/internal/uploads.mjs.map +1 -0
  174. package/internal/utils/base64.d.mts +3 -0
  175. package/internal/utils/base64.d.mts.map +1 -0
  176. package/internal/utils/base64.d.ts +3 -0
  177. package/internal/utils/base64.d.ts.map +1 -0
  178. package/internal/utils/base64.js +38 -0
  179. package/internal/utils/base64.js.map +1 -0
  180. package/internal/utils/base64.mjs +33 -0
  181. package/internal/utils/base64.mjs.map +1 -0
  182. package/internal/utils/bytes.d.mts +4 -0
  183. package/internal/utils/bytes.d.mts.map +1 -0
  184. package/internal/utils/bytes.d.ts +4 -0
  185. package/internal/utils/bytes.d.ts.map +1 -0
  186. package/internal/utils/bytes.js +31 -0
  187. package/internal/utils/bytes.js.map +1 -0
  188. package/internal/utils/bytes.mjs +26 -0
  189. package/internal/utils/bytes.mjs.map +1 -0
  190. package/internal/utils/env.d.mts +9 -0
  191. package/internal/utils/env.d.mts.map +1 -0
  192. package/internal/utils/env.d.ts +9 -0
  193. package/internal/utils/env.d.ts.map +1 -0
  194. package/internal/utils/env.js +22 -0
  195. package/internal/utils/env.js.map +1 -0
  196. package/internal/utils/env.mjs +18 -0
  197. package/internal/utils/env.mjs.map +1 -0
  198. package/internal/utils/log.d.mts +37 -0
  199. package/internal/utils/log.d.mts.map +1 -0
  200. package/internal/utils/log.d.ts +37 -0
  201. package/internal/utils/log.d.ts.map +1 -0
  202. package/internal/utils/log.js +85 -0
  203. package/internal/utils/log.js.map +1 -0
  204. package/internal/utils/log.mjs +79 -0
  205. package/internal/utils/log.mjs.map +1 -0
  206. package/internal/utils/path.d.mts +15 -0
  207. package/internal/utils/path.d.mts.map +1 -0
  208. package/internal/utils/path.d.ts +15 -0
  209. package/internal/utils/path.d.ts.map +1 -0
  210. package/internal/utils/path.js +79 -0
  211. package/internal/utils/path.js.map +1 -0
  212. package/internal/utils/path.mjs +74 -0
  213. package/internal/utils/path.mjs.map +1 -0
  214. package/internal/utils/sleep.d.mts +2 -0
  215. package/internal/utils/sleep.d.mts.map +1 -0
  216. package/internal/utils/sleep.d.ts +2 -0
  217. package/internal/utils/sleep.d.ts.map +1 -0
  218. package/internal/utils/sleep.js +7 -0
  219. package/internal/utils/sleep.js.map +1 -0
  220. package/internal/utils/sleep.mjs +3 -0
  221. package/internal/utils/sleep.mjs.map +1 -0
  222. package/internal/utils/uuid.d.mts +5 -0
  223. package/internal/utils/uuid.d.mts.map +1 -0
  224. package/internal/utils/uuid.d.ts +5 -0
  225. package/internal/utils/uuid.d.ts.map +1 -0
  226. package/internal/utils/uuid.js +19 -0
  227. package/internal/utils/uuid.js.map +1 -0
  228. package/internal/utils/uuid.mjs +15 -0
  229. package/internal/utils/uuid.mjs.map +1 -0
  230. package/internal/utils/values.d.mts +18 -0
  231. package/internal/utils/values.d.mts.map +1 -0
  232. package/internal/utils/values.d.ts +18 -0
  233. package/internal/utils/values.d.ts.map +1 -0
  234. package/internal/utils/values.js +112 -0
  235. package/internal/utils/values.js.map +1 -0
  236. package/internal/utils/values.mjs +94 -0
  237. package/internal/utils/values.mjs.map +1 -0
  238. package/internal/utils.d.mts +7 -0
  239. package/internal/utils.d.mts.map +1 -0
  240. package/internal/utils.d.ts +7 -0
  241. package/internal/utils.d.ts.map +1 -0
  242. package/internal/utils.js +11 -0
  243. package/internal/utils.js.map +1 -0
  244. package/internal/utils.mjs +8 -0
  245. package/internal/utils.mjs.map +1 -0
  246. package/package.json +139 -82
  247. package/resource.d.mts +2 -0
  248. package/resource.d.mts.map +1 -0
  249. package/resource.d.ts +2 -0
  250. package/resource.d.ts.map +1 -0
  251. package/resource.js +6 -0
  252. package/resource.js.map +1 -0
  253. package/resource.mjs +2 -0
  254. package/resource.mjs.map +1 -0
  255. package/resources/agent.d.mts +154 -0
  256. package/resources/agent.d.mts.map +1 -0
  257. package/resources/agent.d.ts +154 -0
  258. package/resources/agent.d.ts.map +1 -0
  259. package/resources/agent.js +88 -0
  260. package/resources/agent.js.map +1 -0
  261. package/resources/agent.mjs +84 -0
  262. package/resources/agent.mjs.map +1 -0
  263. package/resources/extract.d.mts +207 -0
  264. package/resources/extract.d.mts.map +1 -0
  265. package/resources/extract.d.ts +207 -0
  266. package/resources/extract.d.ts.map +1 -0
  267. package/resources/extract.js +61 -0
  268. package/resources/extract.js.map +1 -0
  269. package/resources/extract.mjs +57 -0
  270. package/resources/extract.mjs.map +1 -0
  271. package/resources/generate.d.mts +79 -0
  272. package/resources/generate.d.mts.map +1 -0
  273. package/resources/generate.d.ts +79 -0
  274. package/resources/generate.d.ts.map +1 -0
  275. package/resources/generate.js +44 -0
  276. package/resources/generate.js.map +1 -0
  277. package/resources/generate.mjs +40 -0
  278. package/resources/generate.mjs.map +1 -0
  279. package/resources/index.d.mts +4 -0
  280. package/resources/index.d.mts.map +1 -0
  281. package/resources/index.d.ts +4 -0
  282. package/resources/index.d.ts.map +1 -0
  283. package/resources/index.js +11 -0
  284. package/resources/index.js.map +1 -0
  285. package/resources/index.mjs +5 -0
  286. package/resources/index.mjs.map +1 -0
  287. package/resources.d.mts +2 -0
  288. package/resources.d.mts.map +1 -0
  289. package/resources.d.ts +2 -0
  290. package/resources.d.ts.map +1 -0
  291. package/resources.js +5 -0
  292. package/resources.js.map +1 -0
  293. package/resources.mjs +2 -0
  294. package/resources.mjs.map +1 -0
  295. package/src/api-promise.ts +2 -0
  296. package/src/client.ts +764 -0
  297. package/src/core/README.md +3 -0
  298. package/src/core/api-promise.ts +92 -0
  299. package/src/core/error.ts +130 -0
  300. package/src/core/resource.ts +11 -0
  301. package/src/core/streaming.ts +315 -0
  302. package/src/core/uploads.ts +2 -0
  303. package/src/error.ts +2 -0
  304. package/src/index.ts +22 -0
  305. package/src/internal/README.md +3 -0
  306. package/src/internal/builtin-types.ts +93 -0
  307. package/src/internal/decoders/line.ts +135 -0
  308. package/src/internal/detect-platform.ts +196 -0
  309. package/src/internal/errors.ts +33 -0
  310. package/src/internal/headers.ts +97 -0
  311. package/src/internal/parse.ts +64 -0
  312. package/src/internal/request-options.ts +93 -0
  313. package/src/internal/shim-types.ts +26 -0
  314. package/src/internal/shims.ts +107 -0
  315. package/src/internal/to-file.ts +154 -0
  316. package/src/internal/types.ts +95 -0
  317. package/src/internal/uploads.ts +187 -0
  318. package/src/internal/utils/base64.ts +40 -0
  319. package/src/internal/utils/bytes.ts +32 -0
  320. package/src/internal/utils/env.ts +18 -0
  321. package/src/internal/utils/log.ts +126 -0
  322. package/src/internal/utils/path.ts +88 -0
  323. package/src/internal/utils/sleep.ts +3 -0
  324. package/src/internal/utils/uuid.ts +17 -0
  325. package/src/internal/utils/values.ts +105 -0
  326. package/src/internal/utils.ts +8 -0
  327. package/src/lib/.keep +4 -0
  328. package/src/resource.ts +2 -0
  329. package/src/resources/agent.ts +194 -0
  330. package/src/resources/extract.ts +248 -0
  331. package/src/resources/generate.ts +89 -0
  332. package/src/resources/index.ts +17 -0
  333. package/src/resources.ts +1 -0
  334. package/src/streaming.ts +2 -0
  335. package/src/tsconfig.json +11 -0
  336. package/src/uploads.ts +2 -0
  337. package/src/version.ts +1 -0
  338. package/streaming.d.mts +2 -0
  339. package/streaming.d.mts.map +1 -0
  340. package/streaming.d.ts +2 -0
  341. package/streaming.d.ts.map +1 -0
  342. package/streaming.js +6 -0
  343. package/streaming.js.map +1 -0
  344. package/streaming.mjs +2 -0
  345. package/streaming.mjs.map +1 -0
  346. package/uploads.d.mts +2 -0
  347. package/uploads.d.mts.map +1 -0
  348. package/uploads.d.ts +2 -0
  349. package/uploads.d.ts.map +1 -0
  350. package/uploads.js +6 -0
  351. package/uploads.js.map +1 -0
  352. package/uploads.mjs +2 -0
  353. package/uploads.mjs.map +1 -0
  354. package/version.d.mts +2 -0
  355. package/version.d.mts.map +1 -0
  356. package/version.d.ts +2 -0
  357. package/version.d.ts.map +1 -0
  358. package/version.js +5 -0
  359. package/version.js.map +1 -0
  360. package/version.mjs +2 -0
  361. package/version.mjs.map +1 -0
  362. package/dist/cjs/agent.d.ts +0 -156
  363. package/dist/cjs/agent.d.ts.map +0 -1
  364. package/dist/cjs/agent.js +0 -211
  365. package/dist/cjs/agent.js.map +0 -1
  366. package/dist/cjs/agent.test.d.ts +0 -5
  367. package/dist/cjs/agent.test.d.ts.map +0 -1
  368. package/dist/cjs/agent.test.js +0 -441
  369. package/dist/cjs/agent.test.js.map +0 -1
  370. package/dist/cjs/client.d.ts +0 -58
  371. package/dist/cjs/client.d.ts.map +0 -1
  372. package/dist/cjs/client.js +0 -58
  373. package/dist/cjs/client.js.map +0 -1
  374. package/dist/cjs/client.test.d.ts +0 -5
  375. package/dist/cjs/client.test.d.ts.map +0 -1
  376. package/dist/cjs/client.test.js +0 -255
  377. package/dist/cjs/client.test.js.map +0 -1
  378. package/dist/cjs/exceptions.d.ts +0 -57
  379. package/dist/cjs/exceptions.d.ts.map +0 -1
  380. package/dist/cjs/exceptions.js +0 -95
  381. package/dist/cjs/exceptions.js.map +0 -1
  382. package/dist/cjs/exceptions.test.d.ts +0 -5
  383. package/dist/cjs/exceptions.test.d.ts.map +0 -1
  384. package/dist/cjs/exceptions.test.js +0 -239
  385. package/dist/cjs/exceptions.test.js.map +0 -1
  386. package/dist/cjs/extract.d.ts +0 -151
  387. package/dist/cjs/extract.d.ts.map +0 -1
  388. package/dist/cjs/extract.js +0 -165
  389. package/dist/cjs/extract.js.map +0 -1
  390. package/dist/cjs/extract.test.d.ts +0 -5
  391. package/dist/cjs/extract.test.d.ts.map +0 -1
  392. package/dist/cjs/extract.test.js +0 -250
  393. package/dist/cjs/extract.test.js.map +0 -1
  394. package/dist/cjs/generate.d.ts +0 -113
  395. package/dist/cjs/generate.d.ts.map +0 -1
  396. package/dist/cjs/generate.js +0 -124
  397. package/dist/cjs/generate.js.map +0 -1
  398. package/dist/cjs/generate.test.d.ts +0 -5
  399. package/dist/cjs/generate.test.d.ts.map +0 -1
  400. package/dist/cjs/generate.test.js +0 -314
  401. package/dist/cjs/generate.test.js.map +0 -1
  402. package/dist/cjs/index.d.ts +0 -52
  403. package/dist/cjs/index.d.ts.map +0 -1
  404. package/dist/cjs/index.js +0 -72
  405. package/dist/cjs/index.js.map +0 -1
  406. package/dist/cjs/package.json +0 -3
  407. package/dist/cjs/types.d.ts +0 -73
  408. package/dist/cjs/types.d.ts.map +0 -1
  409. package/dist/cjs/types.js +0 -118
  410. package/dist/cjs/types.js.map +0 -1
  411. package/dist/cjs/types.test.d.ts +0 -5
  412. package/dist/cjs/types.test.d.ts.map +0 -1
  413. package/dist/cjs/types.test.js +0 -370
  414. package/dist/cjs/types.test.js.map +0 -1
  415. package/dist/cjs/util/http.d.ts +0 -29
  416. package/dist/cjs/util/http.d.ts.map +0 -1
  417. package/dist/cjs/util/http.js +0 -201
  418. package/dist/cjs/util/http.js.map +0 -1
  419. package/dist/cjs/util/http.test.d.ts +0 -5
  420. package/dist/cjs/util/http.test.d.ts.map +0 -1
  421. package/dist/cjs/util/http.test.js +0 -237
  422. package/dist/cjs/util/http.test.js.map +0 -1
  423. package/dist/esm/agent.d.ts +0 -156
  424. package/dist/esm/agent.d.ts.map +0 -1
  425. package/dist/esm/agent.js +0 -207
  426. package/dist/esm/agent.js.map +0 -1
  427. package/dist/esm/agent.test.d.ts +0 -5
  428. package/dist/esm/agent.test.d.ts.map +0 -1
  429. package/dist/esm/agent.test.js +0 -439
  430. package/dist/esm/agent.test.js.map +0 -1
  431. package/dist/esm/client.d.ts +0 -58
  432. package/dist/esm/client.d.ts.map +0 -1
  433. package/dist/esm/client.js +0 -54
  434. package/dist/esm/client.js.map +0 -1
  435. package/dist/esm/client.test.d.ts +0 -5
  436. package/dist/esm/client.test.d.ts.map +0 -1
  437. package/dist/esm/client.test.js +0 -253
  438. package/dist/esm/client.test.js.map +0 -1
  439. package/dist/esm/exceptions.d.ts +0 -57
  440. package/dist/esm/exceptions.d.ts.map +0 -1
  441. package/dist/esm/exceptions.js +0 -85
  442. package/dist/esm/exceptions.js.map +0 -1
  443. package/dist/esm/exceptions.test.d.ts +0 -5
  444. package/dist/esm/exceptions.test.d.ts.map +0 -1
  445. package/dist/esm/exceptions.test.js +0 -237
  446. package/dist/esm/exceptions.test.js.map +0 -1
  447. package/dist/esm/extract.d.ts +0 -151
  448. package/dist/esm/extract.d.ts.map +0 -1
  449. package/dist/esm/extract.js +0 -161
  450. package/dist/esm/extract.js.map +0 -1
  451. package/dist/esm/extract.test.d.ts +0 -5
  452. package/dist/esm/extract.test.d.ts.map +0 -1
  453. package/dist/esm/extract.test.js +0 -248
  454. package/dist/esm/extract.test.js.map +0 -1
  455. package/dist/esm/generate.d.ts +0 -113
  456. package/dist/esm/generate.d.ts.map +0 -1
  457. package/dist/esm/generate.js +0 -120
  458. package/dist/esm/generate.js.map +0 -1
  459. package/dist/esm/generate.test.d.ts +0 -5
  460. package/dist/esm/generate.test.d.ts.map +0 -1
  461. package/dist/esm/generate.test.js +0 -312
  462. package/dist/esm/generate.test.js.map +0 -1
  463. package/dist/esm/index.d.ts +0 -52
  464. package/dist/esm/index.d.ts.map +0 -1
  465. package/dist/esm/index.js +0 -53
  466. package/dist/esm/index.js.map +0 -1
  467. package/dist/esm/package.json +0 -3
  468. package/dist/esm/types.d.ts +0 -73
  469. package/dist/esm/types.d.ts.map +0 -1
  470. package/dist/esm/types.js +0 -110
  471. package/dist/esm/types.js.map +0 -1
  472. package/dist/esm/types.test.d.ts +0 -5
  473. package/dist/esm/types.test.d.ts.map +0 -1
  474. package/dist/esm/types.test.js +0 -368
  475. package/dist/esm/types.test.js.map +0 -1
  476. package/dist/esm/util/http.d.ts +0 -29
  477. package/dist/esm/util/http.d.ts.map +0 -1
  478. package/dist/esm/util/http.js +0 -164
  479. package/dist/esm/util/http.js.map +0 -1
  480. package/dist/esm/util/http.test.d.ts +0 -5
  481. package/dist/esm/util/http.test.d.ts.map +0 -1
  482. package/dist/esm/util/http.test.js +0 -232
  483. package/dist/esm/util/http.test.js.map +0 -1
  484. package/dist/types/agent.d.ts +0 -156
  485. package/dist/types/agent.d.ts.map +0 -1
  486. package/dist/types/agent.test.d.ts +0 -5
  487. package/dist/types/agent.test.d.ts.map +0 -1
  488. package/dist/types/client.d.ts +0 -58
  489. package/dist/types/client.d.ts.map +0 -1
  490. package/dist/types/client.test.d.ts +0 -5
  491. package/dist/types/client.test.d.ts.map +0 -1
  492. package/dist/types/exceptions.d.ts +0 -57
  493. package/dist/types/exceptions.d.ts.map +0 -1
  494. package/dist/types/exceptions.test.d.ts +0 -5
  495. package/dist/types/exceptions.test.d.ts.map +0 -1
  496. package/dist/types/extract.d.ts +0 -151
  497. package/dist/types/extract.d.ts.map +0 -1
  498. package/dist/types/extract.test.d.ts +0 -5
  499. package/dist/types/extract.test.d.ts.map +0 -1
  500. package/dist/types/generate.d.ts +0 -113
  501. package/dist/types/generate.d.ts.map +0 -1
  502. package/dist/types/generate.test.d.ts +0 -5
  503. package/dist/types/generate.test.d.ts.map +0 -1
  504. package/dist/types/index.d.ts +0 -52
  505. package/dist/types/index.d.ts.map +0 -1
  506. package/dist/types/types.d.ts +0 -73
  507. package/dist/types/types.d.ts.map +0 -1
  508. package/dist/types/types.test.d.ts +0 -5
  509. package/dist/types/types.test.d.ts.map +0 -1
  510. package/dist/types/util/http.d.ts +0 -29
  511. package/dist/types/util/http.d.ts.map +0 -1
  512. package/dist/types/util/http.test.d.ts +0 -5
  513. package/dist/types/util/http.test.d.ts.map +0 -1
package/dist/cjs/agent.js DELETED
@@ -1,211 +0,0 @@
1
- "use strict";
2
- /**
3
- * Agent client for Tabstack SDK
4
- */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.Agent = void 0;
7
- const types_1 = require("./types");
8
- /**
9
- * Agent client for AI-powered web automation
10
- *
11
- * This class provides methods for executing complex web automation tasks using
12
- * natural language instructions. The automation runs in a browser and streams
13
- * real-time progress updates.
14
- */
15
- class Agent {
16
- constructor(httpClient) {
17
- this.httpClient = httpClient;
18
- }
19
- /**
20
- * Execute AI-powered browser automation task with streaming updates
21
- *
22
- * Execute complex web automation tasks using natural language instructions. This method
23
- * always streams responses using Server-Sent Events (SSE), providing real-time progress
24
- * updates as the task executes. Perfect for web scraping, form filling, navigation,
25
- * information gathering, and multi-step workflows.
26
- *
27
- * @param task - The task description in natural language. Example: "Find the top 3 trending repositories on GitHub and extract their names, descriptions, and star counts"
28
- * @param options - Optional automation options
29
- * @param options.url - Starting URL for the task. Optional but recommended for better context.
30
- * @param options.data - JSON data to provide context for form filling or complex tasks. Example: { "language": "Python", "timeRange": "today" }
31
- * @param options.guardrails - Safety constraints for execution. Example: "browse and extract data only, don't star or fork repositories"
32
- * @param options.maxIterations - Maximum task iterations. Default: 50, Min: 1, Max: 100
33
- * @param options.maxValidationAttempts - Maximum validation attempts. Default: 3, Min: 1, Max: 10
34
- *
35
- * @yields AutomateEvent objects representing different stages of task execution
36
- *
37
- * @throws {BadRequestError} When task is missing, URL format is invalid, or maxIterations is out of range
38
- * @throws {UnauthorizedError} When API key is invalid or missing
39
- * @throws {ServerError} When automation server call fails
40
- * @throws {ServiceUnavailableError} When automate service is not available
41
- *
42
- * Event Types:
43
- * - **Task Events**: `start`, `task:setup`, `task:started`, `task:completed`, `task:aborted`, `task:validated`, `task:validation_error`
44
- * - **Agent Events**: `agent:processing`, `agent:status`, `agent:step`, `agent:action`, `agent:reasoned`, `agent:extracted`, `agent:waiting`
45
- * - **Browser Events**: `browser:navigated`, `browser:action_started`, `browser:action_completed`, `browser:screenshot_captured`
46
- * - **System Events**: `system:debug_compression`, `system:debug_message`
47
- * - **Stream Control**: `complete`, `done`, `error`
48
- *
49
- * @example
50
- * Extract GitHub trending repositories:
51
- * ```typescript
52
- * for await (const event of tabs.agent.automate(
53
- * 'Find the top 3 trending repositories and extract their names, descriptions, and star counts',
54
- * {
55
- * url: 'https://github.com/trending',
56
- * guardrails: 'browse and extract only, don\'t interact with repositories'
57
- * }
58
- * )) {
59
- * console.log(`Event: ${event.type}`);
60
- *
61
- * if (event.type === 'task:completed') {
62
- * console.log('Result:', event.data.get('finalAnswer'));
63
- * } else if (event.type === 'agent:extracted') {
64
- * console.log('Extracted data:', event.data.get('extractedData'));
65
- * } else if (event.type === 'browser:navigated') {
66
- * console.log('Navigated to:', event.data.get('url'));
67
- * }
68
- * }
69
- * ```
70
- *
71
- * @example
72
- * Scrape product information:
73
- * ```typescript
74
- * for await (const event of tabs.agent.automate(
75
- * 'Find the product name, price, and availability status',
76
- * {
77
- * url: 'https://example-store.com/product/wireless-headphones',
78
- * guardrails: 'extract product details only, don\'t add to cart or checkout',
79
- * maxIterations: 20
80
- * }
81
- * )) {
82
- * if (event.type === 'agent:processing') {
83
- * console.log('Agent thinking:', event.data.get('operation'));
84
- * } else if (event.type === 'task:completed') {
85
- * const result = event.data.get('finalAnswer');
86
- * console.log('Product info:', result);
87
- * }
88
- * }
89
- * ```
90
- *
91
- * @example
92
- * Fill out contact form:
93
- * ```typescript
94
- * for await (const event of tabs.agent.automate(
95
- * 'Submit the contact form with my information',
96
- * {
97
- * url: 'https://company.com/contact',
98
- * data: {
99
- * name: 'Alex Johnson',
100
- * email: 'alex@example.com',
101
- * message: 'Interested in learning more about your enterprise plan'
102
- * },
103
- * maxIterations: 30,
104
- * maxValidationAttempts: 5
105
- * }
106
- * )) {
107
- * if (event.type === 'agent:action') {
108
- * console.log('Action:', event.data.get('action'), event.data.get('value'));
109
- * } else if (event.type === 'task:completed') {
110
- * console.log('Form submitted successfully!');
111
- * }
112
- * }
113
- * ```
114
- *
115
- * @example
116
- * Handle all event types:
117
- * ```typescript
118
- * for await (const event of tabs.agent.automate(
119
- * 'Research TypeScript frameworks and compare them',
120
- * { url: 'https://www.npmjs.com' }
121
- * )) {
122
- * switch (event.type) {
123
- * case 'start':
124
- * console.log('Task started');
125
- * break;
126
- * case 'agent:status':
127
- * console.log('Status:', event.data.get('message'));
128
- * break;
129
- * case 'agent:step':
130
- * const iteration = event.data.get('currentIteration');
131
- * console.log(`Processing step ${iteration}...`);
132
- * break;
133
- * case 'browser:navigated':
134
- * console.log('Page:', event.data.get('title'));
135
- * break;
136
- * case 'task:completed':
137
- * console.log('Final result:', event.data.get('finalAnswer'));
138
- * break;
139
- * case 'error':
140
- * console.error('Error occurred:', event.data.getRaw());
141
- * break;
142
- * }
143
- * }
144
- * ```
145
- */
146
- async *automate(task, options) {
147
- const requestData = {
148
- task,
149
- maxIterations: options?.maxIterations ?? 50,
150
- maxValidationAttempts: options?.maxValidationAttempts ?? 3,
151
- };
152
- if (options?.url)
153
- requestData.url = options.url;
154
- if (options?.data)
155
- requestData.data = options.data;
156
- if (options?.guardrails)
157
- requestData.guardrails = options.guardrails;
158
- // Stream the response and parse SSE events
159
- let currentEventType = null;
160
- let currentEventData = '';
161
- for await (const line of this.httpClient.postStream('v1/automate', requestData)) {
162
- // SSE format: "event: <type>" or "data: <json>"
163
- if (line.startsWith('event:')) {
164
- // If we have a pending event, yield it before starting a new one
165
- if (currentEventType) {
166
- yield this.parseEvent(currentEventType, currentEventData);
167
- currentEventData = '';
168
- }
169
- // Extract event type
170
- currentEventType = line.slice(6).trim();
171
- }
172
- else if (line.startsWith('data:')) {
173
- // Accumulate event data (can be multiline)
174
- const dataLine = line.slice(5).trim();
175
- if (currentEventData) {
176
- currentEventData += '\n' + dataLine;
177
- }
178
- else {
179
- currentEventData = dataLine;
180
- }
181
- }
182
- else if (line === '') {
183
- // Empty line marks the end of an event
184
- if (currentEventType) {
185
- yield this.parseEvent(currentEventType, currentEventData);
186
- currentEventType = null;
187
- currentEventData = '';
188
- }
189
- }
190
- }
191
- // Yield any remaining event
192
- if (currentEventType) {
193
- yield this.parseEvent(currentEventType, currentEventData);
194
- }
195
- }
196
- /**
197
- * Parse SSE event data
198
- */
199
- parseEvent(eventType, eventData) {
200
- try {
201
- const data = JSON.parse(eventData);
202
- return types_1.AutomateEvent.fromJSON(eventType, data);
203
- }
204
- catch {
205
- // If data is not valid JSON, return it as-is
206
- return types_1.AutomateEvent.fromJSON(eventType, { raw: eventData });
207
- }
208
- }
209
- }
210
- exports.Agent = Agent;
211
- //# sourceMappingURL=agent.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/agent.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAGH,mCAAwC;AAUxC;;;;;;GAMG;AACH,MAAa,KAAK;IAChB,YAAoB,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;IAAG,CAAC;IAE9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8HG;IACH,KAAK,CAAC,CAAC,QAAQ,CACb,IAAY,EACZ,OAAyB;QAEzB,MAAM,WAAW,GAA4B;YAC3C,IAAI;YACJ,aAAa,EAAE,OAAO,EAAE,aAAa,IAAI,EAAE;YAC3C,qBAAqB,EAAE,OAAO,EAAE,qBAAqB,IAAI,CAAC;SAC3D,CAAC;QAEF,IAAI,OAAO,EAAE,GAAG;YAAE,WAAW,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QAChD,IAAI,OAAO,EAAE,IAAI;YAAE,WAAW,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACnD,IAAI,OAAO,EAAE,UAAU;YAAE,WAAW,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QAErE,2CAA2C;QAC3C,IAAI,gBAAgB,GAAkB,IAAI,CAAC;QAC3C,IAAI,gBAAgB,GAAG,EAAE,CAAC;QAE1B,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,aAAa,EAAE,WAAW,CAAC,EAAE,CAAC;YAChF,gDAAgD;YAChD,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC9B,iEAAiE;gBACjE,IAAI,gBAAgB,EAAE,CAAC;oBACrB,MAAM,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;oBAC1D,gBAAgB,GAAG,EAAE,CAAC;gBACxB,CAAC;gBAED,qBAAqB;gBACrB,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC1C,CAAC;iBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpC,2CAA2C;gBAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACtC,IAAI,gBAAgB,EAAE,CAAC;oBACrB,gBAAgB,IAAI,IAAI,GAAG,QAAQ,CAAC;gBACtC,CAAC;qBAAM,CAAC;oBACN,gBAAgB,GAAG,QAAQ,CAAC;gBAC9B,CAAC;YACH,CAAC;iBAAM,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;gBACvB,uCAAuC;gBACvC,IAAI,gBAAgB,EAAE,CAAC;oBACrB,MAAM,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;oBAC1D,gBAAgB,GAAG,IAAI,CAAC;oBACxB,gBAAgB,GAAG,EAAE,CAAC;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;QAED,4BAA4B;QAC5B,IAAI,gBAAgB,EAAE,CAAC;YACrB,MAAM,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED;;OAEG;IACK,UAAU,CAAC,SAAiB,EAAE,SAAiB;QACrD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAA4B,CAAC;YAC9D,OAAO,qBAAa,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC;YACP,6CAA6C;YAC7C,OAAO,qBAAa,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;CACF;AAnMD,sBAmMC"}
@@ -1,5 +0,0 @@
1
- /**
2
- * Tests for Agent
3
- */
4
- export {};
5
- //# sourceMappingURL=agent.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent.test.d.ts","sourceRoot":"","sources":["../../src/agent.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -1,441 +0,0 @@
1
- "use strict";
2
- /**
3
- * Tests for Agent
4
- */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- // @ts-nocheck
7
- const agent_1 = require("./agent");
8
- const http_1 = require("./util/http");
9
- // Mock HTTPClient
10
- jest.mock('./util/http');
11
- describe('Agent', () => {
12
- let agent;
13
- let mockHttpClient;
14
- beforeEach(() => {
15
- mockHttpClient = new http_1.HTTPClient({ apiKey: 'test-key' });
16
- agent = new agent_1.Agent(mockHttpClient);
17
- });
18
- afterEach(() => {
19
- jest.clearAllMocks();
20
- });
21
- // Helper to create async generator from array
22
- async function* streamLines(lines) {
23
- for (const line of lines) {
24
- yield line;
25
- }
26
- }
27
- describe('automate', () => {
28
- it('should execute task with minimal options', async () => {
29
- const sseLines = [
30
- 'event: start',
31
- 'data: {"message":"Task started"}',
32
- '',
33
- 'event: task:completed',
34
- 'data: {"finalAnswer":"Result"}',
35
- '',
36
- ];
37
- mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
38
- const events = [];
39
- for await (const event of agent.automate('Test task')) {
40
- events.push(event);
41
- }
42
- expect(mockHttpClient.postStream).toHaveBeenCalledWith('v1/automate', {
43
- task: 'Test task',
44
- maxIterations: 50,
45
- maxValidationAttempts: 3,
46
- });
47
- expect(events).toHaveLength(2);
48
- expect(events[0].type).toBe('start');
49
- expect(events[1].type).toBe('task:completed');
50
- });
51
- it('should execute task with url option', async () => {
52
- const sseLines = ['event: start', 'data: {}', ''];
53
- mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
54
- const events = [];
55
- for await (const event of agent.automate('Test task', {
56
- url: 'https://example.com',
57
- })) {
58
- events.push(event);
59
- }
60
- expect(mockHttpClient.postStream).toHaveBeenCalledWith('v1/automate', {
61
- task: 'Test task',
62
- url: 'https://example.com',
63
- maxIterations: 50,
64
- maxValidationAttempts: 3,
65
- });
66
- });
67
- it('should execute task with data option', async () => {
68
- const sseLines = ['event: start', 'data: {}', ''];
69
- mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
70
- const data = { name: 'John', email: 'john@example.com' };
71
- const events = [];
72
- for await (const event of agent.automate('Fill form', { data })) {
73
- events.push(event);
74
- }
75
- expect(mockHttpClient.postStream).toHaveBeenCalledWith('v1/automate', {
76
- task: 'Fill form',
77
- data,
78
- maxIterations: 50,
79
- maxValidationAttempts: 3,
80
- });
81
- });
82
- it('should execute task with guardrails option', async () => {
83
- const sseLines = ['event: start', 'data: {}', ''];
84
- mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
85
- const events = [];
86
- for await (const event of agent.automate('Browse site', {
87
- guardrails: 'read only, no modifications',
88
- })) {
89
- events.push(event);
90
- }
91
- expect(mockHttpClient.postStream).toHaveBeenCalledWith('v1/automate', {
92
- task: 'Browse site',
93
- guardrails: 'read only, no modifications',
94
- maxIterations: 50,
95
- maxValidationAttempts: 3,
96
- });
97
- });
98
- it('should execute task with custom maxIterations', async () => {
99
- const sseLines = ['event: start', 'data: {}', ''];
100
- mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
101
- const events = [];
102
- for await (const event of agent.automate('Test task', { maxIterations: 100 })) {
103
- events.push(event);
104
- }
105
- expect(mockHttpClient.postStream).toHaveBeenCalledWith('v1/automate', {
106
- task: 'Test task',
107
- maxIterations: 100,
108
- maxValidationAttempts: 3,
109
- });
110
- });
111
- it('should execute task with custom maxValidationAttempts', async () => {
112
- const sseLines = ['event: start', 'data: {}', ''];
113
- mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
114
- const events = [];
115
- for await (const event of agent.automate('Test task', { maxValidationAttempts: 5 })) {
116
- events.push(event);
117
- }
118
- expect(mockHttpClient.postStream).toHaveBeenCalledWith('v1/automate', {
119
- task: 'Test task',
120
- maxIterations: 50,
121
- maxValidationAttempts: 5,
122
- });
123
- });
124
- it('should execute task with all options', async () => {
125
- const sseLines = ['event: start', 'data: {}', ''];
126
- mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
127
- const events = [];
128
- for await (const event of agent.automate('Complete task', {
129
- url: 'https://example.com',
130
- data: { key: 'value' },
131
- guardrails: 'safe mode',
132
- maxIterations: 75,
133
- maxValidationAttempts: 4,
134
- })) {
135
- events.push(event);
136
- }
137
- expect(mockHttpClient.postStream).toHaveBeenCalledWith('v1/automate', {
138
- task: 'Complete task',
139
- url: 'https://example.com',
140
- data: { key: 'value' },
141
- guardrails: 'safe mode',
142
- maxIterations: 75,
143
- maxValidationAttempts: 4,
144
- });
145
- });
146
- });
147
- describe('SSE parsing', () => {
148
- it('should parse single event', async () => {
149
- const sseLines = ['event: start', 'data: {"message":"Started"}', ''];
150
- mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
151
- const events = [];
152
- for await (const event of agent.automate('Task')) {
153
- events.push(event);
154
- }
155
- expect(events).toHaveLength(1);
156
- expect(events[0].type).toBe('start');
157
- expect(events[0].data.get('message')).toBe('Started');
158
- });
159
- it('should parse multiple events', async () => {
160
- const sseLines = [
161
- 'event: start',
162
- 'data: {"step":1}',
163
- '',
164
- 'event: agent:processing',
165
- 'data: {"operation":"analyze"}',
166
- '',
167
- 'event: task:completed',
168
- 'data: {"finalAnswer":"Done"}',
169
- '',
170
- ];
171
- mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
172
- const events = [];
173
- for await (const event of agent.automate('Task')) {
174
- events.push(event);
175
- }
176
- expect(events).toHaveLength(3);
177
- expect(events[0].type).toBe('start');
178
- expect(events[1].type).toBe('agent:processing');
179
- expect(events[2].type).toBe('task:completed');
180
- });
181
- it('should handle multiline data', async () => {
182
- const sseLines = [
183
- 'event: agent:extracted',
184
- 'data: {"items":[',
185
- 'data: {"name":"Item1"},',
186
- 'data: {"name":"Item2"}',
187
- 'data: ]}',
188
- '',
189
- ];
190
- mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
191
- const events = [];
192
- for await (const event of agent.automate('Task')) {
193
- events.push(event);
194
- }
195
- expect(events).toHaveLength(1);
196
- expect(events[0].type).toBe('agent:extracted');
197
- // Data should be concatenated with newlines
198
- const data = events[0].data.getRaw();
199
- expect(data).toBeDefined();
200
- });
201
- it('should handle events without empty line separator', async () => {
202
- const sseLines = ['event: start', 'data: {"message":"Started"}'];
203
- mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
204
- const events = [];
205
- for await (const event of agent.automate('Task')) {
206
- events.push(event);
207
- }
208
- // Should still yield the last event even without trailing empty line
209
- expect(events).toHaveLength(1);
210
- expect(events[0].type).toBe('start');
211
- });
212
- it('should handle events with extra whitespace', async () => {
213
- const sseLines = ['event: start ', 'data: {"message":"Test"} ', ''];
214
- mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
215
- const events = [];
216
- for await (const event of agent.automate('Task')) {
217
- events.push(event);
218
- }
219
- expect(events).toHaveLength(1);
220
- expect(events[0].type).toBe('start');
221
- expect(events[0].data.get('message')).toBe('Test');
222
- });
223
- it('should skip empty lines between data', async () => {
224
- const sseLines = ['event: start', '', 'data: {"message":"Test"}', '', ''];
225
- mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
226
- const events = [];
227
- for await (const event of agent.automate('Task')) {
228
- events.push(event);
229
- }
230
- expect(events).toHaveLength(1);
231
- expect(events[0].type).toBe('start');
232
- });
233
- it('should handle different event types', async () => {
234
- const eventTypes = [
235
- 'start',
236
- 'task:setup',
237
- 'task:started',
238
- 'task:completed',
239
- 'agent:processing',
240
- 'agent:status',
241
- 'agent:step',
242
- 'agent:action',
243
- 'browser:navigated',
244
- 'complete',
245
- 'done',
246
- 'error',
247
- ];
248
- const sseLines = [];
249
- eventTypes.forEach((type) => {
250
- sseLines.push(`event: ${type}`);
251
- sseLines.push('data: {}');
252
- sseLines.push('');
253
- });
254
- mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
255
- const events = [];
256
- for await (const event of agent.automate('Task')) {
257
- events.push(event);
258
- }
259
- expect(events).toHaveLength(eventTypes.length);
260
- events.forEach((event, index) => {
261
- expect(event.type).toBe(eventTypes[index]);
262
- });
263
- });
264
- });
265
- describe('parseEvent', () => {
266
- it('should parse valid JSON data', async () => {
267
- const sseLines = [
268
- 'event: agent:extracted',
269
- 'data: {"extractedData":{"title":"Test","count":42}}',
270
- '',
271
- ];
272
- mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
273
- const events = [];
274
- for await (const event of agent.automate('Task')) {
275
- events.push(event);
276
- }
277
- expect(events[0].data.get('extractedData')).toEqual({ title: 'Test', count: 42 });
278
- });
279
- it('should handle invalid JSON gracefully', async () => {
280
- const sseLines = ['event: error', 'data: Invalid JSON {{{', ''];
281
- mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
282
- const events = [];
283
- for await (const event of agent.automate('Task')) {
284
- events.push(event);
285
- }
286
- expect(events[0].type).toBe('error');
287
- expect(events[0].data.get('raw')).toBe('Invalid JSON {{{');
288
- });
289
- it('should handle empty data', async () => {
290
- const sseLines = ['event: start', 'data: ', ''];
291
- mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
292
- const events = [];
293
- for await (const event of agent.automate('Task')) {
294
- events.push(event);
295
- }
296
- expect(events).toHaveLength(1);
297
- expect(events[0].type).toBe('start');
298
- });
299
- it('should handle complex nested JSON', async () => {
300
- const complexData = {
301
- result: {
302
- items: [
303
- { id: 1, name: 'Item 1', tags: ['a', 'b'] },
304
- { id: 2, name: 'Item 2', tags: ['c', 'd'] },
305
- ],
306
- metadata: { count: 2, timestamp: 1234567890 },
307
- },
308
- };
309
- const sseLines = ['event: agent:extracted', `data: ${JSON.stringify(complexData)}`, ''];
310
- mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
311
- const events = [];
312
- for await (const event of agent.automate('Task')) {
313
- events.push(event);
314
- }
315
- expect(events[0].data.get('result')).toEqual(complexData.result);
316
- });
317
- });
318
- describe('Event data access', () => {
319
- it('should access event data properties', async () => {
320
- const sseLines = [
321
- 'event: browser:navigated',
322
- 'data: {"url":"https://example.com","title":"Example"}',
323
- '',
324
- ];
325
- mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
326
- const events = [];
327
- for await (const event of agent.automate('Task')) {
328
- events.push(event);
329
- }
330
- expect(events[0].data.get('url')).toBe('https://example.com');
331
- expect(events[0].data.get('title')).toBe('Example');
332
- });
333
- it('should handle missing properties', async () => {
334
- const sseLines = ['event: start', 'data: {"message":"Test"}', ''];
335
- mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
336
- const events = [];
337
- for await (const event of agent.automate('Task')) {
338
- events.push(event);
339
- }
340
- expect(events[0].data.get('nonexistent')).toBeUndefined();
341
- expect(events[0].data.get('nonexistent', 'default')).toBe('default');
342
- });
343
- it('should access raw event data', async () => {
344
- const sseLines = [
345
- 'event: agent:step',
346
- 'data: {"currentIteration":5,"totalIterations":50}',
347
- '',
348
- ];
349
- mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
350
- const events = [];
351
- for await (const event of agent.automate('Task')) {
352
- events.push(event);
353
- }
354
- const raw = events[0].data.getRaw();
355
- expect(raw.currentIteration).toBe(5);
356
- expect(raw.totalIterations).toBe(50);
357
- });
358
- });
359
- describe('Integration scenarios', () => {
360
- it('should stream complete automation workflow', async () => {
361
- const sseLines = [
362
- 'event: start',
363
- 'data: {"message":"Starting automation"}',
364
- '',
365
- 'event: task:setup',
366
- 'data: {"task":"Extract data"}',
367
- '',
368
- 'event: browser:navigated',
369
- 'data: {"url":"https://example.com"}',
370
- '',
371
- 'event: agent:processing',
372
- 'data: {"operation":"analyze"}',
373
- '',
374
- 'event: agent:extracted',
375
- 'data: {"extractedData":{"items":[]}}',
376
- '',
377
- 'event: task:completed',
378
- 'data: {"finalAnswer":"Success"}',
379
- '',
380
- 'event: done',
381
- 'data: {}',
382
- '',
383
- ];
384
- mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
385
- const events = [];
386
- for await (const event of agent.automate('Extract data', {
387
- url: 'https://example.com',
388
- })) {
389
- events.push(event);
390
- }
391
- expect(events).toHaveLength(7);
392
- expect(events[0]?.type).toBe('start');
393
- expect(events[events.length - 2]?.type).toBe('task:completed');
394
- expect(events[events.length - 1]?.type).toBe('done');
395
- });
396
- it('should handle error events', async () => {
397
- const sseLines = [
398
- 'event: start',
399
- 'data: {"message":"Started"}',
400
- '',
401
- 'event: error',
402
- 'data: {"error":"Task failed","reason":"Network error"}',
403
- '',
404
- ];
405
- mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
406
- const events = [];
407
- for await (const event of agent.automate('Task')) {
408
- events.push(event);
409
- }
410
- expect(events).toHaveLength(2);
411
- expect(events[1]?.type).toBe('error');
412
- expect(events[1]?.data.get('error')).toBe('Task failed');
413
- });
414
- it('should handle task abortion', async () => {
415
- const sseLines = [
416
- 'event: start',
417
- 'data: {}',
418
- '',
419
- 'event: task:aborted',
420
- 'data: {"reason":"Max iterations exceeded"}',
421
- '',
422
- ];
423
- mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
424
- const events = [];
425
- for await (const event of agent.automate('Task', { maxIterations: 10 })) {
426
- events.push(event);
427
- }
428
- expect(events).toHaveLength(2);
429
- expect(events[1]?.type).toBe('task:aborted');
430
- });
431
- it('should propagate HTTP client errors', async () => {
432
- const error = new Error('Stream error');
433
- mockHttpClient.postStream = jest.fn().mockImplementation(async function* () {
434
- throw error;
435
- });
436
- const generator = agent.automate('Task');
437
- await expect(generator.next()).rejects.toThrow('Stream error');
438
- });
439
- });
440
- });
441
- //# sourceMappingURL=agent.test.js.map