@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,441 @@
1
+ "use strict";
2
+ /**
3
+ * Tests for Automate operator
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ // @ts-nocheck
7
+ const automate_1 = require("./automate");
8
+ const http_1 = require("./util/http");
9
+ // Mock HTTPClient
10
+ jest.mock('./util/http');
11
+ describe('Automate', () => {
12
+ let automate;
13
+ let mockHttpClient;
14
+ beforeEach(() => {
15
+ mockHttpClient = new http_1.HTTPClient({ apiKey: 'test-key' });
16
+ automate = new automate_1.Automate(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('execute', () => {
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 automate.execute('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 automate.execute('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 automate.execute('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 automate.execute('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 automate.execute('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 automate.execute('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 automate.execute('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 automate.execute('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 automate.execute('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 automate.execute('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 automate.execute('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 automate.execute('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 automate.execute('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 automate.execute('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 automate.execute('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 automate.execute('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 automate.execute('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 automate.execute('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 automate.execute('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 automate.execute('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 automate.execute('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 automate.execute('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 automate.execute('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 automate.execute('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 = automate.execute('Task');
437
+ await expect(generator.next()).rejects.toThrow('Stream error');
438
+ });
439
+ });
440
+ });
441
+ //# 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,58 @@
1
+ "use strict";
2
+ /**
3
+ * Main client for TABStack AI SDK
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.TABStack = void 0;
7
+ const http_1 = require("./util/http");
8
+ const extract_1 = require("./extract");
9
+ const generate_1 = require("./generate");
10
+ const automate_1 = require("./automate");
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
+ class TABStack {
30
+ /**
31
+ * Initialize TABStack client
32
+ *
33
+ * @param options - Configuration options
34
+ * @throws Error if apiKey is empty or not provided
35
+ *
36
+ * @example
37
+ * ```typescript
38
+ * const tabs = new TABStack({
39
+ * apiKey: 'your-api-key-here'
40
+ * });
41
+ * ```
42
+ */
43
+ constructor(options) {
44
+ if (!options.apiKey || typeof options.apiKey !== 'string') {
45
+ throw new Error('apiKey is required');
46
+ }
47
+ this.httpClient = new http_1.HTTPClient({
48
+ apiKey: options.apiKey,
49
+ baseURL: options.baseURL,
50
+ });
51
+ // Initialize operators
52
+ this.extract = new extract_1.Extract(this.httpClient);
53
+ this.generate = new generate_1.Generate(this.httpClient);
54
+ this.automate = new automate_1.Automate(this.httpClient);
55
+ }
56
+ }
57
+ exports.TABStack = TABStack;
58
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,sCAAyC;AACzC,uCAAoC;AACpC,yCAAsC;AACtC,yCAAsC;AAOtC;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAa,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,iBAAU,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,iBAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,CAAC,QAAQ,GAAG,IAAI,mBAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,GAAG,IAAI,mBAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC;CACF;AA9CD,4BA8CC"}
@@ -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"}