@agent-os-sdk/client 0.3.15 → 0.4.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 (59) hide show
  1. package/dist/client/config.d.ts +49 -0
  2. package/dist/client/config.d.ts.map +1 -0
  3. package/dist/client/config.js +62 -0
  4. package/dist/client/pagination.d.ts +105 -0
  5. package/dist/client/pagination.d.ts.map +1 -0
  6. package/dist/client/pagination.js +117 -0
  7. package/dist/client/raw.d.ts +65 -0
  8. package/dist/client/raw.d.ts.map +1 -1
  9. package/dist/client/raw.js +78 -17
  10. package/dist/client/retry.d.ts +37 -0
  11. package/dist/client/retry.d.ts.map +1 -0
  12. package/dist/client/retry.js +108 -0
  13. package/dist/client/timeout.d.ts +26 -0
  14. package/dist/client/timeout.d.ts.map +1 -0
  15. package/dist/client/timeout.js +51 -0
  16. package/dist/errors/factory.d.ts +20 -0
  17. package/dist/errors/factory.d.ts.map +1 -0
  18. package/dist/errors/factory.js +97 -0
  19. package/dist/errors/index.d.ts +210 -0
  20. package/dist/errors/index.d.ts.map +1 -0
  21. package/dist/errors/index.js +283 -0
  22. package/dist/index.d.ts +11 -3
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +26 -0
  25. package/dist/modules/audit.d.ts +27 -4
  26. package/dist/modules/audit.d.ts.map +1 -1
  27. package/dist/modules/audit.js +58 -2
  28. package/dist/modules/checkpoints.d.ts +1 -1
  29. package/dist/modules/checkpoints.d.ts.map +1 -1
  30. package/dist/modules/info.d.ts +49 -0
  31. package/dist/modules/info.d.ts.map +1 -1
  32. package/dist/modules/info.js +66 -0
  33. package/dist/modules/runs.d.ts +103 -0
  34. package/dist/modules/runs.d.ts.map +1 -1
  35. package/dist/modules/runs.js +258 -0
  36. package/dist/modules/tenants.d.ts +4 -1
  37. package/dist/modules/tenants.d.ts.map +1 -1
  38. package/dist/modules/tenants.js +3 -0
  39. package/dist/modules/threads.d.ts +24 -0
  40. package/dist/modules/threads.d.ts.map +1 -1
  41. package/dist/modules/threads.js +48 -1
  42. package/dist/sse/client.d.ts.map +1 -1
  43. package/dist/sse/client.js +17 -5
  44. package/package.json +49 -50
  45. package/src/client/config.ts +100 -0
  46. package/src/client/pagination.ts +218 -0
  47. package/src/client/raw.ts +138 -17
  48. package/src/client/retry.ts +150 -0
  49. package/src/client/timeout.ts +59 -0
  50. package/src/errors/factory.ts +135 -0
  51. package/src/errors/index.ts +365 -0
  52. package/src/index.ts +72 -2
  53. package/src/modules/audit.ts +77 -6
  54. package/src/modules/checkpoints.ts +1 -1
  55. package/src/modules/info.ts +108 -0
  56. package/src/modules/runs.ts +333 -0
  57. package/src/modules/tenants.ts +5 -2
  58. package/src/modules/threads.ts +57 -1
  59. package/src/sse/client.ts +21 -5
@@ -1,6 +1,8 @@
1
1
  /**
2
2
  * Info Module - Fully Typed
3
3
  */
4
+ // SDK version from package (will be replaced at build time or use constant)
5
+ const SDK_VERSION = "0.4.0";
4
6
  export class InfoModule {
5
7
  client;
6
8
  headers;
@@ -24,4 +26,68 @@ export class InfoModule {
24
26
  headers: this.headers(),
25
27
  });
26
28
  }
29
+ /**
30
+ * Get normalized server capabilities for feature detection.
31
+ *
32
+ * This method never assumes feature availability - all features
33
+ * default to false unless explicitly enabled by the server.
34
+ *
35
+ * @example
36
+ * ```ts
37
+ * const caps = await client.info.capabilities();
38
+ * if (caps.data?.features.sseResume) {
39
+ * // Use follow() with resume
40
+ * } else {
41
+ * // Fall back to polling
42
+ * }
43
+ * ```
44
+ */
45
+ async capabilities() {
46
+ const response = await this.get();
47
+ if (response.error || !response.data) {
48
+ // Pass through error - construct proper response without data
49
+ return {
50
+ error: response.error,
51
+ response: response.response,
52
+ meta: response.meta,
53
+ };
54
+ }
55
+ const info = response.data;
56
+ // Transform snake_case features array to camelCase object
57
+ // CRITICAL: Never assume true - default everything to false
58
+ const featureArray = info.features ?? [];
59
+ const features = {
60
+ sseResume: featureArray.includes("sse_resume"),
61
+ cronTriggers: featureArray.includes("cron_triggers"),
62
+ batchRuns: featureArray.includes("batch_runs"),
63
+ hitl: featureArray.includes("hitl"),
64
+ traces: featureArray.includes("traces"),
65
+ vectorStores: featureArray.includes("vector_stores"),
66
+ evaluations: featureArray.includes("evaluations"),
67
+ };
68
+ // Add any other features from array as snake_case → camelCase
69
+ for (const feature of featureArray) {
70
+ const camelCase = snakeToCamel(feature);
71
+ if (!(camelCase in features)) {
72
+ features[camelCase] = true;
73
+ }
74
+ }
75
+ const capabilities = {
76
+ version: info.version,
77
+ commitHash: info.commit_hash,
78
+ apiVersion: info.api_version,
79
+ environment: info.environment,
80
+ features,
81
+ sdkVersion: SDK_VERSION,
82
+ };
83
+ return {
84
+ data: capabilities,
85
+ response: response.response,
86
+ meta: response.meta,
87
+ };
88
+ }
89
+ }
90
+ /** Convert snake_case to camelCase */
91
+ function snakeToCamel(str) {
92
+ return str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
27
93
  }
@@ -78,6 +78,13 @@ export declare class RunsModule {
78
78
  * agent_id: "agent-uuid",
79
79
  * input: { message: "Hello" }
80
80
  * });
81
+ *
82
+ * // With idempotency (safe to retry)
83
+ * const { data } = await client.runs.create({
84
+ * agent_id: "agent-uuid",
85
+ * input: { message: "Hello" },
86
+ * idempotency_key: "my-unique-key"
87
+ * });
81
88
  * ```
82
89
  */
83
90
  create(body: {
@@ -88,6 +95,7 @@ export declare class RunsModule {
88
95
  new_thread: true;
89
96
  };
90
97
  input?: unknown;
98
+ /** Idempotency key for safe retries. When set, duplicate requests with the same key return the original response. */
91
99
  idempotency_key?: string;
92
100
  }): Promise<APIResponse<CreateRunResponse>>;
93
101
  /**
@@ -102,6 +110,31 @@ export declare class RunsModule {
102
110
  agent_id?: string;
103
111
  status?: string;
104
112
  }): Promise<APIResponse<RunListResponse>>;
113
+ /**
114
+ * Iterate through all runs with automatic pagination.
115
+ *
116
+ * @example
117
+ * ```ts
118
+ * // Stream all completed runs
119
+ * for await (const run of client.runs.iterate({ status: "completed" })) {
120
+ * console.log(run.run_id, run.status);
121
+ * }
122
+ *
123
+ * // With limit
124
+ * for await (const run of client.runs.iterate({ agent_id: "..." }, { maxItems: 100 })) {
125
+ * processRun(run);
126
+ * }
127
+ * ```
128
+ */
129
+ iterate(filters?: {
130
+ thread_id?: string;
131
+ agent_id?: string;
132
+ status?: string;
133
+ }, options?: {
134
+ pageSize?: number;
135
+ maxItems?: number;
136
+ signal?: AbortSignal;
137
+ }): AsyncGenerator<Run, void, unknown>;
105
138
  /**
106
139
  * Wait for run completion synchronously.
107
140
  */
@@ -260,6 +293,76 @@ export declare class RunsModule {
260
293
  * Join an existing run's stream (resume watching).
261
294
  */
262
295
  join(runId: string, options?: SSEOptions): AsyncGenerator<SSEEvent<RunStreamEvent>>;
296
+ /**
297
+ * Follow a run's event stream with automatic reconnection and resume.
298
+ *
299
+ * This is the enterprise-grade streaming method that:
300
+ * - Reconnects automatically on connection drops
301
+ * - Resumes from last received event using Last-Event-ID
302
+ * - Never duplicates or loses events
303
+ * - Terminates cleanly on 'close' event
304
+ *
305
+ * @example
306
+ * ```ts
307
+ * for await (const event of client.runs.follow(runId)) {
308
+ * if (event.type === "run_event") {
309
+ * console.log(event.payload);
310
+ * } else if (event.type === "close") {
311
+ * console.log("Run completed");
312
+ * }
313
+ * }
314
+ * ```
315
+ */
316
+ follow(runId: string, options?: FollowOptions): AsyncGenerator<FollowEvent, void, unknown>;
317
+ /**
318
+ * Wait for a specific event that matches a predicate.
319
+ *
320
+ * @example
321
+ * ```ts
322
+ * // Wait for run completion
323
+ * const event = await client.runs.waitFor(runId, (e) => e.type === "close", {
324
+ * timeoutMs: 60000
325
+ * });
326
+ *
327
+ * // Wait for specific node execution
328
+ * const nodeEvent = await client.runs.waitFor(runId, (e) =>
329
+ * e.type === "run_event" && e.payload?.node === "my_node"
330
+ * );
331
+ * ```
332
+ */
333
+ waitFor(runId: string, predicate: (event: FollowEvent) => boolean, options?: {
334
+ timeoutMs?: number;
335
+ signal?: AbortSignal;
336
+ startSeq?: number;
337
+ }): Promise<FollowEvent>;
338
+ }
339
+ /** Options for runs.follow() */
340
+ export interface FollowOptions {
341
+ /** Starting sequence number (default: 0 = from beginning) */
342
+ startSeq?: number;
343
+ /** AbortSignal for cancellation */
344
+ signal?: AbortSignal;
345
+ /** Max reconnection attempts (default: 10) */
346
+ maxReconnects?: number;
347
+ /** Base delay for backoff in ms (default: 1000) */
348
+ baseDelayMs?: number;
349
+ /** Max delay for backoff in ms (default: 30000) */
350
+ maxDelayMs?: number;
351
+ /** Called when initially connected */
352
+ onConnect?: () => void;
353
+ /** Called when reconnecting (with attempt number) */
354
+ onReconnect?: (attempt: number) => void;
355
+ /** Called when disconnected (with reason) */
356
+ onDisconnect?: (reason: "eof" | "error") => void;
357
+ }
358
+ /** Event emitted by runs.follow() */
359
+ export interface FollowEvent {
360
+ type: "run_event" | "heartbeat" | "close" | "error";
361
+ seq: number;
362
+ timestamp: string;
363
+ payload?: Record<string, unknown> | null;
364
+ /** For run_event: the node that emitted this event */
365
+ node?: string;
263
366
  }
264
367
  export {};
265
368
  //# sourceMappingURL=runs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runs.d.ts","sourceRoot":"","sources":["../../src/modules/runs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runs.d.ts","sourceRoot":"","sources":["../../src/modules/runs.ts"],"names":[],"mappings":"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"}
@@ -21,11 +21,24 @@ export class RunsModule {
21
21
  * agent_id: "agent-uuid",
22
22
  * input: { message: "Hello" }
23
23
  * });
24
+ *
25
+ * // With idempotency (safe to retry)
26
+ * const { data } = await client.runs.create({
27
+ * agent_id: "agent-uuid",
28
+ * input: { message: "Hello" },
29
+ * idempotency_key: "my-unique-key"
30
+ * });
24
31
  * ```
25
32
  */
26
33
  async create(body) {
34
+ // Send Idempotency-Key in HEADER (enterprise standard) + body (backend compat)
35
+ const headers = {};
36
+ if (body.idempotency_key) {
37
+ headers["Idempotency-Key"] = body.idempotency_key;
38
+ }
27
39
  return this.client.POST("/v1/api/runs", {
28
40
  body,
41
+ headers,
29
42
  });
30
43
  }
31
44
  /**
@@ -44,6 +57,49 @@ export class RunsModule {
44
57
  params: { query: params },
45
58
  });
46
59
  }
60
+ /**
61
+ * Iterate through all runs with automatic pagination.
62
+ *
63
+ * @example
64
+ * ```ts
65
+ * // Stream all completed runs
66
+ * for await (const run of client.runs.iterate({ status: "completed" })) {
67
+ * console.log(run.run_id, run.status);
68
+ * }
69
+ *
70
+ * // With limit
71
+ * for await (const run of client.runs.iterate({ agent_id: "..." }, { maxItems: 100 })) {
72
+ * processRun(run);
73
+ * }
74
+ * ```
75
+ */
76
+ async *iterate(filters, options) {
77
+ const pageSize = options?.pageSize ?? 100;
78
+ const maxItems = options?.maxItems ?? Infinity;
79
+ let offset = 0;
80
+ let yielded = 0;
81
+ let hasMore = true;
82
+ while (hasMore && yielded < maxItems) {
83
+ if (options?.signal?.aborted)
84
+ return;
85
+ const response = await this.list({
86
+ ...filters,
87
+ limit: Math.min(pageSize, maxItems - yielded),
88
+ offset,
89
+ });
90
+ if (response.error)
91
+ throw response.error;
92
+ const data = response.data;
93
+ for (const run of data.items) {
94
+ if (yielded >= maxItems)
95
+ return;
96
+ yield run;
97
+ yielded++;
98
+ }
99
+ offset += data.items.length;
100
+ hasMore = offset < data.total && data.items.length > 0;
101
+ }
102
+ }
47
103
  // ======================== Execution ========================
48
104
  /**
49
105
  * Wait for run completion synchronously.
@@ -239,4 +295,206 @@ export class RunsModule {
239
295
  });
240
296
  yield* parseSSE(response, { onOpen: options?.onOpen });
241
297
  }
298
+ // ======================== FOLLOW (Enterprise SSE) ========================
299
+ /**
300
+ * Follow a run's event stream with automatic reconnection and resume.
301
+ *
302
+ * This is the enterprise-grade streaming method that:
303
+ * - Reconnects automatically on connection drops
304
+ * - Resumes from last received event using Last-Event-ID
305
+ * - Never duplicates or loses events
306
+ * - Terminates cleanly on 'close' event
307
+ *
308
+ * @example
309
+ * ```ts
310
+ * for await (const event of client.runs.follow(runId)) {
311
+ * if (event.type === "run_event") {
312
+ * console.log(event.payload);
313
+ * } else if (event.type === "close") {
314
+ * console.log("Run completed");
315
+ * }
316
+ * }
317
+ * ```
318
+ */
319
+ async *follow(runId, options) {
320
+ const signal = options?.signal;
321
+ const maxReconnects = options?.maxReconnects ?? 10;
322
+ const baseDelayMs = options?.baseDelayMs ?? 1000;
323
+ const maxDelayMs = options?.maxDelayMs ?? 30000;
324
+ // nextSeq = next seq we expect to receive (or 0 at start)
325
+ let nextSeq = options?.startSeq ?? 0;
326
+ let reconnectCount = 0;
327
+ let receivedTerminal = false;
328
+ options?.onConnect?.();
329
+ while (!receivedTerminal && reconnectCount <= maxReconnects) {
330
+ if (signal?.aborted)
331
+ return;
332
+ try {
333
+ // Build headers - Last-Event-ID is the LAST seq we received (nextSeq - 1)
334
+ const headers = {};
335
+ if (nextSeq > 0) {
336
+ headers["Last-Event-ID"] = String(nextSeq - 1);
337
+ }
338
+ const response = await this.client.streamGet("/v1/api/runs/{runId}/stream", {
339
+ params: {
340
+ path: { runId },
341
+ query: nextSeq > 0 ? { seq: nextSeq } : undefined // Also send as query for backends that support it
342
+ },
343
+ headers,
344
+ });
345
+ // Check for auth errors - don't reconnect on these
346
+ if (response.status === 401 || response.status === 403) {
347
+ const errorEvent = {
348
+ type: "error",
349
+ payload: { code: `HTTP_${response.status}`, message: response.statusText },
350
+ seq: -1,
351
+ timestamp: new Date().toISOString(),
352
+ };
353
+ yield errorEvent;
354
+ return; // Don't reconnect on auth errors
355
+ }
356
+ if (!response.ok) {
357
+ throw new Error(`SSE connection failed: ${response.status}`);
358
+ }
359
+ // Reset reconnect count on successful connection
360
+ if (reconnectCount > 0) {
361
+ options?.onReconnect?.(reconnectCount);
362
+ }
363
+ reconnectCount = 0;
364
+ // Parse SSE stream
365
+ for await (const rawEvent of parseSSE(response)) {
366
+ if (signal?.aborted)
367
+ return;
368
+ // Narrow to known event types
369
+ const event = narrowFollowEvent(rawEvent);
370
+ if (!event)
371
+ continue; // Skip unknown event types
372
+ // Update seq tracking if event has seq
373
+ if (typeof event.seq === "number" && event.seq >= 0) {
374
+ nextSeq = event.seq + 1;
375
+ }
376
+ // Check for terminal events
377
+ if (event.type === "close") {
378
+ receivedTerminal = true;
379
+ yield event;
380
+ return;
381
+ }
382
+ if (event.type === "error") {
383
+ // Error event from server - yield but continue (might reconnect)
384
+ yield event;
385
+ // If it's a fatal error, break and try reconnect
386
+ break;
387
+ }
388
+ yield event;
389
+ }
390
+ // Stream ended without close event - this is unexpected EOF
391
+ // Reconnect unless we already received terminal
392
+ if (!receivedTerminal && !signal?.aborted) {
393
+ options?.onDisconnect?.("eof");
394
+ reconnectCount++;
395
+ if (reconnectCount <= maxReconnects) {
396
+ await sleep(calculateBackoff(reconnectCount, baseDelayMs, maxDelayMs));
397
+ }
398
+ }
399
+ }
400
+ catch (err) {
401
+ if (signal?.aborted)
402
+ return;
403
+ options?.onDisconnect?.("error");
404
+ reconnectCount++;
405
+ if (reconnectCount <= maxReconnects) {
406
+ await sleep(calculateBackoff(reconnectCount, baseDelayMs, maxDelayMs));
407
+ }
408
+ else {
409
+ // Max reconnects exceeded - yield error and stop
410
+ yield {
411
+ type: "error",
412
+ payload: { code: "MAX_RECONNECTS", message: `Max reconnects (${maxReconnects}) exceeded` },
413
+ seq: -1,
414
+ timestamp: new Date().toISOString(),
415
+ };
416
+ return;
417
+ }
418
+ }
419
+ }
420
+ }
421
+ /**
422
+ * Wait for a specific event that matches a predicate.
423
+ *
424
+ * @example
425
+ * ```ts
426
+ * // Wait for run completion
427
+ * const event = await client.runs.waitFor(runId, (e) => e.type === "close", {
428
+ * timeoutMs: 60000
429
+ * });
430
+ *
431
+ * // Wait for specific node execution
432
+ * const nodeEvent = await client.runs.waitFor(runId, (e) =>
433
+ * e.type === "run_event" && e.payload?.node === "my_node"
434
+ * );
435
+ * ```
436
+ */
437
+ async waitFor(runId, predicate, options) {
438
+ const timeoutMs = options?.timeoutMs ?? 300_000; // 5 min default
439
+ const controller = new AbortController();
440
+ // Combine parent signal with our timeout
441
+ const onAbort = () => controller.abort();
442
+ options?.signal?.addEventListener("abort", onAbort, { once: true });
443
+ const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
444
+ try {
445
+ for await (const event of this.follow(runId, {
446
+ signal: controller.signal,
447
+ startSeq: options?.startSeq,
448
+ })) {
449
+ if (predicate(event)) {
450
+ return event;
451
+ }
452
+ // If we got close without matching predicate, error
453
+ if (event.type === "close") {
454
+ throw new Error("Run completed without matching event");
455
+ }
456
+ }
457
+ // Stream ended without match or terminal
458
+ throw new Error("Stream ended without matching event");
459
+ }
460
+ catch (err) {
461
+ if (controller.signal.aborted && !options?.signal?.aborted) {
462
+ // Our timeout triggered the abort
463
+ const { TimeoutError } = await import("../errors/index.js");
464
+ throw new TimeoutError(timeoutMs);
465
+ }
466
+ throw err;
467
+ }
468
+ finally {
469
+ clearTimeout(timeoutId);
470
+ options?.signal?.removeEventListener("abort", onAbort);
471
+ }
472
+ }
473
+ }
474
+ /** Narrow raw SSE event to FollowEvent */
475
+ function narrowFollowEvent(raw) {
476
+ const eventType = raw.event ?? "message";
477
+ const validTypes = ["run_event", "heartbeat", "close", "error"];
478
+ if (!validTypes.includes(eventType)) {
479
+ return null;
480
+ }
481
+ const data = raw.data;
482
+ return {
483
+ type: eventType,
484
+ seq: typeof data?.seq === "number" ? data.seq : (raw.id ? parseInt(raw.id, 10) : -1),
485
+ timestamp: typeof data?.timestamp === "string" ? data.timestamp : new Date().toISOString(),
486
+ payload: data,
487
+ node: typeof data?.node === "string" ? data.node : undefined,
488
+ };
489
+ }
490
+ /** Calculate exponential backoff with jitter */
491
+ function calculateBackoff(attempt, baseMs, maxMs) {
492
+ const exponential = baseMs * Math.pow(2, attempt - 1);
493
+ const capped = Math.min(exponential, maxMs);
494
+ const jitter = capped * 0.2 * Math.random();
495
+ return Math.floor(capped + jitter);
496
+ }
497
+ /** Sleep utility */
498
+ function sleep(ms) {
499
+ return new Promise(resolve => setTimeout(resolve, ms));
242
500
  }
@@ -22,7 +22,10 @@ export declare class TenantsModule {
22
22
  /**
23
23
  * List all tenants the user has access to.
24
24
  */
25
- list(): Promise<APIResponse<Tenant[]>>;
25
+ /**
26
+ * List all tenants the user has access to.
27
+ */
28
+ list(): Promise<APIResponse<TenantListResponse>>;
26
29
  /**
27
30
  * Get the current tenant.
28
31
  */
@@ -1 +1 @@
1
- {"version":3,"file":"tenants.d.ts","sourceRoot":"","sources":["../../src/modules/tenants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAc,MAAM,kBAAkB,CAAC;AAI3E,MAAM,WAAW,MAAM;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IAC/B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,aAAa;IACV,OAAO,CAAC,MAAM;IAAa,OAAO,CAAC,OAAO;gBAAlC,MAAM,EAAE,SAAS,EAAU,OAAO,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAEpF;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IAM5C;;OAEG;IACG,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAMzC;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAOhC;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAMlE;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;CAMtF"}
1
+ {"version":3,"file":"tenants.d.ts","sourceRoot":"","sources":["../../src/modules/tenants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAc,MAAM,kBAAkB,CAAC;AAI3E,MAAM,WAAW,MAAM;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IAC/B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,aAAa;IACV,OAAO,CAAC,MAAM;IAAa,OAAO,CAAC,OAAO;gBAAlC,MAAM,EAAE,SAAS,EAAU,OAAO,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAEpF;;OAEG;IACH;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;IAMtD;;OAEG;IACG,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAMzC;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAOhC;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAMlE;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;CAMtF"}
@@ -8,6 +8,9 @@ export class TenantsModule {
8
8
  this.client = client;
9
9
  this.headers = headers;
10
10
  }
11
+ /**
12
+ * List all tenants the user has access to.
13
+ */
11
14
  /**
12
15
  * List all tenants the user has access to.
13
16
  */
@@ -67,12 +67,19 @@ export declare class ThreadsModule {
67
67
  * @example
68
68
  * ```ts
69
69
  * const { data: thread } = await client.threads.create();
70
+ *
71
+ * // With idempotency (safe to retry)
72
+ * const { data: thread } = await client.threads.create({
73
+ * idempotency_key: "my-unique-key"
74
+ * });
70
75
  * ```
71
76
  */
72
77
  create(body?: {
73
78
  channel?: string;
74
79
  external_conversation_id?: string;
75
80
  metadata?: Record<string, unknown>;
81
+ /** Idempotency key for safe retries. When set, duplicate requests with the same key return the original response. */
82
+ idempotency_key?: string;
76
83
  }): Promise<APIResponse<Thread>>;
77
84
  /**
78
85
  * Get a thread by ID.
@@ -92,6 +99,23 @@ export declare class ThreadsModule {
92
99
  list(params?: PaginationParams & {
93
100
  workspace_id?: string;
94
101
  }): Promise<APIResponse<ThreadListResponse>>;
102
+ /**
103
+ * Iterate through all threads with automatic pagination.
104
+ *
105
+ * @example
106
+ * ```ts
107
+ * for await (const thread of client.threads.iterate()) {
108
+ * console.log(thread.id);
109
+ * }
110
+ * ```
111
+ */
112
+ iterate(filters?: {
113
+ workspace_id?: string;
114
+ }, options?: {
115
+ pageSize?: number;
116
+ maxItems?: number;
117
+ signal?: AbortSignal;
118
+ }): AsyncGenerator<Thread, void, unknown>;
95
119
  /**
96
120
  * Delete a thread.
97
121
  */
@@ -1 +1 @@
1
- {"version":3,"file":"threads.d.ts","sourceRoot":"","sources":["../../src/modules/threads.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"threads.d.ts","sourceRoot":"","sources":["../../src/modules/threads.ts"],"names":[],"mappings":"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"}
@@ -21,12 +21,22 @@ export class ThreadsModule {
21
21
  * @example
22
22
  * ```ts
23
23
  * const { data: thread } = await client.threads.create();
24
+ *
25
+ * // With idempotency (safe to retry)
26
+ * const { data: thread } = await client.threads.create({
27
+ * idempotency_key: "my-unique-key"
28
+ * });
24
29
  * ```
25
30
  */
26
31
  async create(body) {
32
+ // Send Idempotency-Key in HEADER (enterprise standard) + body (backend compat)
33
+ const headers = { ...this.headers() };
34
+ if (body?.idempotency_key) {
35
+ headers["Idempotency-Key"] = body.idempotency_key;
36
+ }
27
37
  return this.client.POST("/v1/api/threads", {
28
38
  body: body ?? {},
29
- headers: this.headers(),
39
+ headers,
30
40
  });
31
41
  }
32
42
  /**
@@ -55,6 +65,43 @@ export class ThreadsModule {
55
65
  headers: this.headers(),
56
66
  });
57
67
  }
68
+ /**
69
+ * Iterate through all threads with automatic pagination.
70
+ *
71
+ * @example
72
+ * ```ts
73
+ * for await (const thread of client.threads.iterate()) {
74
+ * console.log(thread.id);
75
+ * }
76
+ * ```
77
+ */
78
+ async *iterate(filters, options) {
79
+ const pageSize = options?.pageSize ?? 100;
80
+ const maxItems = options?.maxItems ?? Infinity;
81
+ let offset = 0;
82
+ let yielded = 0;
83
+ let hasMore = true;
84
+ while (hasMore && yielded < maxItems) {
85
+ if (options?.signal?.aborted)
86
+ return;
87
+ const response = await this.list({
88
+ ...filters,
89
+ limit: Math.min(pageSize, maxItems - yielded),
90
+ offset,
91
+ });
92
+ if (response.error)
93
+ throw response.error;
94
+ const data = response.data;
95
+ for (const thread of data.items) {
96
+ if (yielded >= maxItems)
97
+ return;
98
+ yield thread;
99
+ yielded++;
100
+ }
101
+ offset += data.items.length;
102
+ hasMore = offset < data.total && data.items.length > 0;
103
+ }
104
+ }
58
105
  /**
59
106
  * Delete a thread.
60
107
  */