@tabstack/sdk 1.0.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 (155) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +485 -0
  3. package/dist/cjs/automate.d.ts +156 -0
  4. package/dist/cjs/automate.d.ts.map +1 -0
  5. package/dist/cjs/automate.js +211 -0
  6. package/dist/cjs/automate.js.map +1 -0
  7. package/dist/cjs/automate.test.d.ts +5 -0
  8. package/dist/cjs/automate.test.d.ts.map +1 -0
  9. package/dist/cjs/automate.test.js +441 -0
  10. package/dist/cjs/automate.test.js.map +1 -0
  11. package/dist/cjs/client.d.ts +58 -0
  12. package/dist/cjs/client.d.ts.map +1 -0
  13. package/dist/cjs/client.js +58 -0
  14. package/dist/cjs/client.js.map +1 -0
  15. package/dist/cjs/client.test.d.ts +5 -0
  16. package/dist/cjs/client.test.d.ts.map +1 -0
  17. package/dist/cjs/client.test.js +256 -0
  18. package/dist/cjs/client.test.js.map +1 -0
  19. package/dist/cjs/exceptions.d.ts +57 -0
  20. package/dist/cjs/exceptions.d.ts.map +1 -0
  21. package/dist/cjs/exceptions.js +95 -0
  22. package/dist/cjs/exceptions.js.map +1 -0
  23. package/dist/cjs/exceptions.test.d.ts +5 -0
  24. package/dist/cjs/exceptions.test.d.ts.map +1 -0
  25. package/dist/cjs/exceptions.test.js +239 -0
  26. package/dist/cjs/exceptions.test.js.map +1 -0
  27. package/dist/cjs/extract.d.ts +206 -0
  28. package/dist/cjs/extract.d.ts.map +1 -0
  29. package/dist/cjs/extract.js +223 -0
  30. package/dist/cjs/extract.js.map +1 -0
  31. package/dist/cjs/extract.test.d.ts +5 -0
  32. package/dist/cjs/extract.test.d.ts.map +1 -0
  33. package/dist/cjs/extract.test.js +364 -0
  34. package/dist/cjs/extract.test.js.map +1 -0
  35. package/dist/cjs/generate.d.ts +113 -0
  36. package/dist/cjs/generate.d.ts.map +1 -0
  37. package/dist/cjs/generate.js +124 -0
  38. package/dist/cjs/generate.js.map +1 -0
  39. package/dist/cjs/generate.test.d.ts +5 -0
  40. package/dist/cjs/generate.test.d.ts.map +1 -0
  41. package/dist/cjs/generate.test.js +314 -0
  42. package/dist/cjs/generate.test.js.map +1 -0
  43. package/dist/cjs/index.d.ts +52 -0
  44. package/dist/cjs/index.d.ts.map +1 -0
  45. package/dist/cjs/index.js +72 -0
  46. package/dist/cjs/index.js.map +1 -0
  47. package/dist/cjs/package.json +3 -0
  48. package/dist/cjs/types.d.ts +73 -0
  49. package/dist/cjs/types.d.ts.map +1 -0
  50. package/dist/cjs/types.js +118 -0
  51. package/dist/cjs/types.js.map +1 -0
  52. package/dist/cjs/types.test.d.ts +5 -0
  53. package/dist/cjs/types.test.d.ts.map +1 -0
  54. package/dist/cjs/types.test.js +370 -0
  55. package/dist/cjs/types.test.js.map +1 -0
  56. package/dist/cjs/util/http.d.ts +29 -0
  57. package/dist/cjs/util/http.d.ts.map +1 -0
  58. package/dist/cjs/util/http.js +201 -0
  59. package/dist/cjs/util/http.js.map +1 -0
  60. package/dist/cjs/util/http.test.d.ts +5 -0
  61. package/dist/cjs/util/http.test.d.ts.map +1 -0
  62. package/dist/cjs/util/http.test.js +237 -0
  63. package/dist/cjs/util/http.test.js.map +1 -0
  64. package/dist/esm/automate.d.ts +156 -0
  65. package/dist/esm/automate.d.ts.map +1 -0
  66. package/dist/esm/automate.js +207 -0
  67. package/dist/esm/automate.js.map +1 -0
  68. package/dist/esm/automate.test.d.ts +5 -0
  69. package/dist/esm/automate.test.d.ts.map +1 -0
  70. package/dist/esm/automate.test.js +439 -0
  71. package/dist/esm/automate.test.js.map +1 -0
  72. package/dist/esm/client.d.ts +58 -0
  73. package/dist/esm/client.d.ts.map +1 -0
  74. package/dist/esm/client.js +54 -0
  75. package/dist/esm/client.js.map +1 -0
  76. package/dist/esm/client.test.d.ts +5 -0
  77. package/dist/esm/client.test.d.ts.map +1 -0
  78. package/dist/esm/client.test.js +254 -0
  79. package/dist/esm/client.test.js.map +1 -0
  80. package/dist/esm/exceptions.d.ts +57 -0
  81. package/dist/esm/exceptions.d.ts.map +1 -0
  82. package/dist/esm/exceptions.js +85 -0
  83. package/dist/esm/exceptions.js.map +1 -0
  84. package/dist/esm/exceptions.test.d.ts +5 -0
  85. package/dist/esm/exceptions.test.d.ts.map +1 -0
  86. package/dist/esm/exceptions.test.js +237 -0
  87. package/dist/esm/exceptions.test.js.map +1 -0
  88. package/dist/esm/extract.d.ts +206 -0
  89. package/dist/esm/extract.d.ts.map +1 -0
  90. package/dist/esm/extract.js +219 -0
  91. package/dist/esm/extract.js.map +1 -0
  92. package/dist/esm/extract.test.d.ts +5 -0
  93. package/dist/esm/extract.test.d.ts.map +1 -0
  94. package/dist/esm/extract.test.js +362 -0
  95. package/dist/esm/extract.test.js.map +1 -0
  96. package/dist/esm/generate.d.ts +113 -0
  97. package/dist/esm/generate.d.ts.map +1 -0
  98. package/dist/esm/generate.js +120 -0
  99. package/dist/esm/generate.js.map +1 -0
  100. package/dist/esm/generate.test.d.ts +5 -0
  101. package/dist/esm/generate.test.d.ts.map +1 -0
  102. package/dist/esm/generate.test.js +312 -0
  103. package/dist/esm/generate.test.js.map +1 -0
  104. package/dist/esm/index.d.ts +52 -0
  105. package/dist/esm/index.d.ts.map +1 -0
  106. package/dist/esm/index.js +53 -0
  107. package/dist/esm/index.js.map +1 -0
  108. package/dist/esm/package.json +3 -0
  109. package/dist/esm/types.d.ts +73 -0
  110. package/dist/esm/types.d.ts.map +1 -0
  111. package/dist/esm/types.js +110 -0
  112. package/dist/esm/types.js.map +1 -0
  113. package/dist/esm/types.test.d.ts +5 -0
  114. package/dist/esm/types.test.d.ts.map +1 -0
  115. package/dist/esm/types.test.js +368 -0
  116. package/dist/esm/types.test.js.map +1 -0
  117. package/dist/esm/util/http.d.ts +29 -0
  118. package/dist/esm/util/http.d.ts.map +1 -0
  119. package/dist/esm/util/http.js +164 -0
  120. package/dist/esm/util/http.js.map +1 -0
  121. package/dist/esm/util/http.test.d.ts +5 -0
  122. package/dist/esm/util/http.test.d.ts.map +1 -0
  123. package/dist/esm/util/http.test.js +232 -0
  124. package/dist/esm/util/http.test.js.map +1 -0
  125. package/dist/types/automate.d.ts +156 -0
  126. package/dist/types/automate.d.ts.map +1 -0
  127. package/dist/types/automate.test.d.ts +5 -0
  128. package/dist/types/automate.test.d.ts.map +1 -0
  129. package/dist/types/client.d.ts +58 -0
  130. package/dist/types/client.d.ts.map +1 -0
  131. package/dist/types/client.test.d.ts +5 -0
  132. package/dist/types/client.test.d.ts.map +1 -0
  133. package/dist/types/exceptions.d.ts +57 -0
  134. package/dist/types/exceptions.d.ts.map +1 -0
  135. package/dist/types/exceptions.test.d.ts +5 -0
  136. package/dist/types/exceptions.test.d.ts.map +1 -0
  137. package/dist/types/extract.d.ts +206 -0
  138. package/dist/types/extract.d.ts.map +1 -0
  139. package/dist/types/extract.test.d.ts +5 -0
  140. package/dist/types/extract.test.d.ts.map +1 -0
  141. package/dist/types/generate.d.ts +113 -0
  142. package/dist/types/generate.d.ts.map +1 -0
  143. package/dist/types/generate.test.d.ts +5 -0
  144. package/dist/types/generate.test.d.ts.map +1 -0
  145. package/dist/types/index.d.ts +52 -0
  146. package/dist/types/index.d.ts.map +1 -0
  147. package/dist/types/types.d.ts +73 -0
  148. package/dist/types/types.d.ts.map +1 -0
  149. package/dist/types/types.test.d.ts +5 -0
  150. package/dist/types/types.test.d.ts.map +1 -0
  151. package/dist/types/util/http.d.ts +29 -0
  152. package/dist/types/util/http.d.ts.map +1 -0
  153. package/dist/types/util/http.test.d.ts +5 -0
  154. package/dist/types/util/http.test.d.ts.map +1 -0
  155. package/package.json +90 -0
@@ -0,0 +1,439 @@
1
+ /**
2
+ * Tests for Automate operator
3
+ */
4
+ // @ts-nocheck
5
+ import { Automate } from './automate.js';
6
+ import { HTTPClient } from './util/http.js';
7
+ // Mock HTTPClient
8
+ jest.mock('./util/http');
9
+ describe('Automate', () => {
10
+ let automate;
11
+ let mockHttpClient;
12
+ beforeEach(() => {
13
+ mockHttpClient = new HTTPClient({ apiKey: 'test-key' });
14
+ automate = new Automate(mockHttpClient);
15
+ });
16
+ afterEach(() => {
17
+ jest.clearAllMocks();
18
+ });
19
+ // Helper to create async generator from array
20
+ async function* streamLines(lines) {
21
+ for (const line of lines) {
22
+ yield line;
23
+ }
24
+ }
25
+ describe('execute', () => {
26
+ it('should execute task with minimal options', async () => {
27
+ const sseLines = [
28
+ 'event: start',
29
+ 'data: {"message":"Task started"}',
30
+ '',
31
+ 'event: task:completed',
32
+ 'data: {"finalAnswer":"Result"}',
33
+ '',
34
+ ];
35
+ mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
36
+ const events = [];
37
+ for await (const event of automate.execute('Test task')) {
38
+ events.push(event);
39
+ }
40
+ expect(mockHttpClient.postStream).toHaveBeenCalledWith('v1/automate', {
41
+ task: 'Test task',
42
+ maxIterations: 50,
43
+ maxValidationAttempts: 3,
44
+ });
45
+ expect(events).toHaveLength(2);
46
+ expect(events[0].type).toBe('start');
47
+ expect(events[1].type).toBe('task:completed');
48
+ });
49
+ it('should execute task with url option', async () => {
50
+ const sseLines = ['event: start', 'data: {}', ''];
51
+ mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
52
+ const events = [];
53
+ for await (const event of automate.execute('Test task', {
54
+ url: 'https://example.com',
55
+ })) {
56
+ events.push(event);
57
+ }
58
+ expect(mockHttpClient.postStream).toHaveBeenCalledWith('v1/automate', {
59
+ task: 'Test task',
60
+ url: 'https://example.com',
61
+ maxIterations: 50,
62
+ maxValidationAttempts: 3,
63
+ });
64
+ });
65
+ it('should execute task with data option', async () => {
66
+ const sseLines = ['event: start', 'data: {}', ''];
67
+ mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
68
+ const data = { name: 'John', email: 'john@example.com' };
69
+ const events = [];
70
+ for await (const event of automate.execute('Fill form', { data })) {
71
+ events.push(event);
72
+ }
73
+ expect(mockHttpClient.postStream).toHaveBeenCalledWith('v1/automate', {
74
+ task: 'Fill form',
75
+ data,
76
+ maxIterations: 50,
77
+ maxValidationAttempts: 3,
78
+ });
79
+ });
80
+ it('should execute task with guardrails option', async () => {
81
+ const sseLines = ['event: start', 'data: {}', ''];
82
+ mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
83
+ const events = [];
84
+ for await (const event of automate.execute('Browse site', {
85
+ guardrails: 'read only, no modifications',
86
+ })) {
87
+ events.push(event);
88
+ }
89
+ expect(mockHttpClient.postStream).toHaveBeenCalledWith('v1/automate', {
90
+ task: 'Browse site',
91
+ guardrails: 'read only, no modifications',
92
+ maxIterations: 50,
93
+ maxValidationAttempts: 3,
94
+ });
95
+ });
96
+ it('should execute task with custom maxIterations', async () => {
97
+ const sseLines = ['event: start', 'data: {}', ''];
98
+ mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
99
+ const events = [];
100
+ for await (const event of automate.execute('Test task', { maxIterations: 100 })) {
101
+ events.push(event);
102
+ }
103
+ expect(mockHttpClient.postStream).toHaveBeenCalledWith('v1/automate', {
104
+ task: 'Test task',
105
+ maxIterations: 100,
106
+ maxValidationAttempts: 3,
107
+ });
108
+ });
109
+ it('should execute task with custom maxValidationAttempts', async () => {
110
+ const sseLines = ['event: start', 'data: {}', ''];
111
+ mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
112
+ const events = [];
113
+ for await (const event of automate.execute('Test task', { maxValidationAttempts: 5 })) {
114
+ events.push(event);
115
+ }
116
+ expect(mockHttpClient.postStream).toHaveBeenCalledWith('v1/automate', {
117
+ task: 'Test task',
118
+ maxIterations: 50,
119
+ maxValidationAttempts: 5,
120
+ });
121
+ });
122
+ it('should execute task with all options', async () => {
123
+ const sseLines = ['event: start', 'data: {}', ''];
124
+ mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
125
+ const events = [];
126
+ for await (const event of automate.execute('Complete task', {
127
+ url: 'https://example.com',
128
+ data: { key: 'value' },
129
+ guardrails: 'safe mode',
130
+ maxIterations: 75,
131
+ maxValidationAttempts: 4,
132
+ })) {
133
+ events.push(event);
134
+ }
135
+ expect(mockHttpClient.postStream).toHaveBeenCalledWith('v1/automate', {
136
+ task: 'Complete task',
137
+ url: 'https://example.com',
138
+ data: { key: 'value' },
139
+ guardrails: 'safe mode',
140
+ maxIterations: 75,
141
+ maxValidationAttempts: 4,
142
+ });
143
+ });
144
+ });
145
+ describe('SSE parsing', () => {
146
+ it('should parse single event', async () => {
147
+ const sseLines = ['event: start', 'data: {"message":"Started"}', ''];
148
+ mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
149
+ const events = [];
150
+ for await (const event of automate.execute('Task')) {
151
+ events.push(event);
152
+ }
153
+ expect(events).toHaveLength(1);
154
+ expect(events[0].type).toBe('start');
155
+ expect(events[0].data.get('message')).toBe('Started');
156
+ });
157
+ it('should parse multiple events', async () => {
158
+ const sseLines = [
159
+ 'event: start',
160
+ 'data: {"step":1}',
161
+ '',
162
+ 'event: agent:processing',
163
+ 'data: {"operation":"analyze"}',
164
+ '',
165
+ 'event: task:completed',
166
+ 'data: {"finalAnswer":"Done"}',
167
+ '',
168
+ ];
169
+ mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
170
+ const events = [];
171
+ for await (const event of automate.execute('Task')) {
172
+ events.push(event);
173
+ }
174
+ expect(events).toHaveLength(3);
175
+ expect(events[0].type).toBe('start');
176
+ expect(events[1].type).toBe('agent:processing');
177
+ expect(events[2].type).toBe('task:completed');
178
+ });
179
+ it('should handle multiline data', async () => {
180
+ const sseLines = [
181
+ 'event: agent:extracted',
182
+ 'data: {"items":[',
183
+ 'data: {"name":"Item1"},',
184
+ 'data: {"name":"Item2"}',
185
+ 'data: ]}',
186
+ '',
187
+ ];
188
+ mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
189
+ const events = [];
190
+ for await (const event of automate.execute('Task')) {
191
+ events.push(event);
192
+ }
193
+ expect(events).toHaveLength(1);
194
+ expect(events[0].type).toBe('agent:extracted');
195
+ // Data should be concatenated with newlines
196
+ const data = events[0].data.getRaw();
197
+ expect(data).toBeDefined();
198
+ });
199
+ it('should handle events without empty line separator', async () => {
200
+ const sseLines = ['event: start', 'data: {"message":"Started"}'];
201
+ mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
202
+ const events = [];
203
+ for await (const event of automate.execute('Task')) {
204
+ events.push(event);
205
+ }
206
+ // Should still yield the last event even without trailing empty line
207
+ expect(events).toHaveLength(1);
208
+ expect(events[0].type).toBe('start');
209
+ });
210
+ it('should handle events with extra whitespace', async () => {
211
+ const sseLines = ['event: start ', 'data: {"message":"Test"} ', ''];
212
+ mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
213
+ const events = [];
214
+ for await (const event of automate.execute('Task')) {
215
+ events.push(event);
216
+ }
217
+ expect(events).toHaveLength(1);
218
+ expect(events[0].type).toBe('start');
219
+ expect(events[0].data.get('message')).toBe('Test');
220
+ });
221
+ it('should skip empty lines between data', async () => {
222
+ const sseLines = ['event: start', '', 'data: {"message":"Test"}', '', ''];
223
+ mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
224
+ const events = [];
225
+ for await (const event of automate.execute('Task')) {
226
+ events.push(event);
227
+ }
228
+ expect(events).toHaveLength(1);
229
+ expect(events[0].type).toBe('start');
230
+ });
231
+ it('should handle different event types', async () => {
232
+ const eventTypes = [
233
+ 'start',
234
+ 'task:setup',
235
+ 'task:started',
236
+ 'task:completed',
237
+ 'agent:processing',
238
+ 'agent:status',
239
+ 'agent:step',
240
+ 'agent:action',
241
+ 'browser:navigated',
242
+ 'complete',
243
+ 'done',
244
+ 'error',
245
+ ];
246
+ const sseLines = [];
247
+ eventTypes.forEach((type) => {
248
+ sseLines.push(`event: ${type}`);
249
+ sseLines.push('data: {}');
250
+ sseLines.push('');
251
+ });
252
+ mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
253
+ const events = [];
254
+ for await (const event of automate.execute('Task')) {
255
+ events.push(event);
256
+ }
257
+ expect(events).toHaveLength(eventTypes.length);
258
+ events.forEach((event, index) => {
259
+ expect(event.type).toBe(eventTypes[index]);
260
+ });
261
+ });
262
+ });
263
+ describe('parseEvent', () => {
264
+ it('should parse valid JSON data', async () => {
265
+ const sseLines = [
266
+ 'event: agent:extracted',
267
+ 'data: {"extractedData":{"title":"Test","count":42}}',
268
+ '',
269
+ ];
270
+ mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
271
+ const events = [];
272
+ for await (const event of automate.execute('Task')) {
273
+ events.push(event);
274
+ }
275
+ expect(events[0].data.get('extractedData')).toEqual({ title: 'Test', count: 42 });
276
+ });
277
+ it('should handle invalid JSON gracefully', async () => {
278
+ const sseLines = ['event: error', 'data: Invalid JSON {{{', ''];
279
+ mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
280
+ const events = [];
281
+ for await (const event of automate.execute('Task')) {
282
+ events.push(event);
283
+ }
284
+ expect(events[0].type).toBe('error');
285
+ expect(events[0].data.get('raw')).toBe('Invalid JSON {{{');
286
+ });
287
+ it('should handle empty data', async () => {
288
+ const sseLines = ['event: start', 'data: ', ''];
289
+ mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
290
+ const events = [];
291
+ for await (const event of automate.execute('Task')) {
292
+ events.push(event);
293
+ }
294
+ expect(events).toHaveLength(1);
295
+ expect(events[0].type).toBe('start');
296
+ });
297
+ it('should handle complex nested JSON', async () => {
298
+ const complexData = {
299
+ result: {
300
+ items: [
301
+ { id: 1, name: 'Item 1', tags: ['a', 'b'] },
302
+ { id: 2, name: 'Item 2', tags: ['c', 'd'] },
303
+ ],
304
+ metadata: { count: 2, timestamp: 1234567890 },
305
+ },
306
+ };
307
+ const sseLines = ['event: agent:extracted', `data: ${JSON.stringify(complexData)}`, ''];
308
+ mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
309
+ const events = [];
310
+ for await (const event of automate.execute('Task')) {
311
+ events.push(event);
312
+ }
313
+ expect(events[0].data.get('result')).toEqual(complexData.result);
314
+ });
315
+ });
316
+ describe('Event data access', () => {
317
+ it('should access event data properties', async () => {
318
+ const sseLines = [
319
+ 'event: browser:navigated',
320
+ 'data: {"url":"https://example.com","title":"Example"}',
321
+ '',
322
+ ];
323
+ mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
324
+ const events = [];
325
+ for await (const event of automate.execute('Task')) {
326
+ events.push(event);
327
+ }
328
+ expect(events[0].data.get('url')).toBe('https://example.com');
329
+ expect(events[0].data.get('title')).toBe('Example');
330
+ });
331
+ it('should handle missing properties', async () => {
332
+ const sseLines = ['event: start', 'data: {"message":"Test"}', ''];
333
+ mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
334
+ const events = [];
335
+ for await (const event of automate.execute('Task')) {
336
+ events.push(event);
337
+ }
338
+ expect(events[0].data.get('nonexistent')).toBeUndefined();
339
+ expect(events[0].data.get('nonexistent', 'default')).toBe('default');
340
+ });
341
+ it('should access raw event data', async () => {
342
+ const sseLines = [
343
+ 'event: agent:step',
344
+ 'data: {"currentIteration":5,"totalIterations":50}',
345
+ '',
346
+ ];
347
+ mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
348
+ const events = [];
349
+ for await (const event of automate.execute('Task')) {
350
+ events.push(event);
351
+ }
352
+ const raw = events[0].data.getRaw();
353
+ expect(raw.currentIteration).toBe(5);
354
+ expect(raw.totalIterations).toBe(50);
355
+ });
356
+ });
357
+ describe('Integration scenarios', () => {
358
+ it('should stream complete automation workflow', async () => {
359
+ const sseLines = [
360
+ 'event: start',
361
+ 'data: {"message":"Starting automation"}',
362
+ '',
363
+ 'event: task:setup',
364
+ 'data: {"task":"Extract data"}',
365
+ '',
366
+ 'event: browser:navigated',
367
+ 'data: {"url":"https://example.com"}',
368
+ '',
369
+ 'event: agent:processing',
370
+ 'data: {"operation":"analyze"}',
371
+ '',
372
+ 'event: agent:extracted',
373
+ 'data: {"extractedData":{"items":[]}}',
374
+ '',
375
+ 'event: task:completed',
376
+ 'data: {"finalAnswer":"Success"}',
377
+ '',
378
+ 'event: done',
379
+ 'data: {}',
380
+ '',
381
+ ];
382
+ mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
383
+ const events = [];
384
+ for await (const event of automate.execute('Extract data', {
385
+ url: 'https://example.com',
386
+ })) {
387
+ events.push(event);
388
+ }
389
+ expect(events).toHaveLength(7);
390
+ expect(events[0]?.type).toBe('start');
391
+ expect(events[events.length - 2]?.type).toBe('task:completed');
392
+ expect(events[events.length - 1]?.type).toBe('done');
393
+ });
394
+ it('should handle error events', async () => {
395
+ const sseLines = [
396
+ 'event: start',
397
+ 'data: {"message":"Started"}',
398
+ '',
399
+ 'event: error',
400
+ 'data: {"error":"Task failed","reason":"Network error"}',
401
+ '',
402
+ ];
403
+ mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
404
+ const events = [];
405
+ for await (const event of automate.execute('Task')) {
406
+ events.push(event);
407
+ }
408
+ expect(events).toHaveLength(2);
409
+ expect(events[1]?.type).toBe('error');
410
+ expect(events[1]?.data.get('error')).toBe('Task failed');
411
+ });
412
+ it('should handle task abortion', async () => {
413
+ const sseLines = [
414
+ 'event: start',
415
+ 'data: {}',
416
+ '',
417
+ 'event: task:aborted',
418
+ 'data: {"reason":"Max iterations exceeded"}',
419
+ '',
420
+ ];
421
+ mockHttpClient.postStream = jest.fn().mockReturnValue(streamLines(sseLines));
422
+ const events = [];
423
+ for await (const event of automate.execute('Task', { maxIterations: 10 })) {
424
+ events.push(event);
425
+ }
426
+ expect(events).toHaveLength(2);
427
+ expect(events[1]?.type).toBe('task:aborted');
428
+ });
429
+ it('should propagate HTTP client errors', async () => {
430
+ const error = new Error('Stream error');
431
+ mockHttpClient.postStream = jest.fn().mockImplementation(async function* () {
432
+ throw error;
433
+ });
434
+ const generator = automate.execute('Task');
435
+ await expect(generator.next()).rejects.toThrow('Stream error');
436
+ });
437
+ });
438
+ });
439
+ //# sourceMappingURL=automate.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automate.test.js","sourceRoot":"","sources":["../../src/automate.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Main client for TABStack AI SDK
3
+ */
4
+ import { Extract } from './extract';
5
+ import { Generate } from './generate';
6
+ import { Automate } from './automate';
7
+ export interface TABStackOptions {
8
+ apiKey: string;
9
+ baseURL?: string;
10
+ }
11
+ /**
12
+ * TABStack AI client for web content extraction, generation, and automation
13
+ *
14
+ * This is the main entry point for the TABStack AI SDK. Initialize it with your
15
+ * API key to access the extract, generate, and automate operators.
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * import { TABStack } from '@tabstack/sdk';
20
+ *
21
+ * const tabs = new TABStack({
22
+ * apiKey: process.env.TABSTACK_API_KEY!
23
+ * });
24
+ *
25
+ * const result = await tabs.extract.markdown('https://example.com');
26
+ * console.log(result.content);
27
+ * ```
28
+ */
29
+ export declare class TABStack {
30
+ private httpClient;
31
+ /**
32
+ * Extract operator for converting and extracting web content
33
+ */
34
+ readonly extract: Extract;
35
+ /**
36
+ * Generate operator for AI-powered content transformation
37
+ */
38
+ readonly generate: Generate;
39
+ /**
40
+ * Automate operator for browser automation tasks
41
+ */
42
+ readonly automate: Automate;
43
+ /**
44
+ * Initialize TABStack client
45
+ *
46
+ * @param options - Configuration options
47
+ * @throws Error if apiKey is empty or not provided
48
+ *
49
+ * @example
50
+ * ```typescript
51
+ * const tabs = new TABStack({
52
+ * apiKey: 'your-api-key-here'
53
+ * });
54
+ * ```
55
+ */
56
+ constructor(options: TABStackOptions);
57
+ }
58
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,UAAU,CAAa;IAE/B;;OAEG;IACH,SAAgB,OAAO,EAAE,OAAO,CAAC;IAEjC;;OAEG;IACH,SAAgB,QAAQ,EAAE,QAAQ,CAAC;IAEnC;;OAEG;IACH,SAAgB,QAAQ,EAAE,QAAQ,CAAC;IAEnC;;;;;;;;;;;;OAYG;gBACS,OAAO,EAAE,eAAe;CAerC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Main client for TABStack AI SDK
3
+ */
4
+ import { HTTPClient } from './util/http.js';
5
+ import { Extract } from './extract.js';
6
+ import { Generate } from './generate.js';
7
+ import { Automate } from './automate.js';
8
+ /**
9
+ * TABStack AI client for web content extraction, generation, and automation
10
+ *
11
+ * This is the main entry point for the TABStack AI SDK. Initialize it with your
12
+ * API key to access the extract, generate, and automate operators.
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * import { TABStack } from '@tabstack/sdk';
17
+ *
18
+ * const tabs = new TABStack({
19
+ * apiKey: process.env.TABSTACK_API_KEY!
20
+ * });
21
+ *
22
+ * const result = await tabs.extract.markdown('https://example.com');
23
+ * console.log(result.content);
24
+ * ```
25
+ */
26
+ export class TABStack {
27
+ /**
28
+ * Initialize TABStack client
29
+ *
30
+ * @param options - Configuration options
31
+ * @throws Error if apiKey is empty or not provided
32
+ *
33
+ * @example
34
+ * ```typescript
35
+ * const tabs = new TABStack({
36
+ * apiKey: 'your-api-key-here'
37
+ * });
38
+ * ```
39
+ */
40
+ constructor(options) {
41
+ if (!options.apiKey || typeof options.apiKey !== 'string') {
42
+ throw new Error('apiKey is required');
43
+ }
44
+ this.httpClient = new HTTPClient({
45
+ apiKey: options.apiKey,
46
+ baseURL: options.baseURL,
47
+ });
48
+ // Initialize operators
49
+ this.extract = new Extract(this.httpClient);
50
+ this.generate = new Generate(this.httpClient);
51
+ this.automate = new Automate(this.httpClient);
52
+ }
53
+ }
54
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAOtC;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAO,QAAQ;IAkBnB;;;;;;;;;;;;OAYG;IACH,YAAY,OAAwB;QAClC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC1D,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC;YAC/B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC,CAAC;QAEH,uBAAuB;QACvB,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for TABStack Client
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=client.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.test.d.ts","sourceRoot":"","sources":["../../src/client.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}