@agentuity/server 0.1.16 → 0.1.18

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 (93) hide show
  1. package/dist/api/api.d.ts +11 -6
  2. package/dist/api/api.d.ts.map +1 -1
  3. package/dist/api/api.js +19 -12
  4. package/dist/api/api.js.map +1 -1
  5. package/dist/api/index.d.ts +1 -0
  6. package/dist/api/index.d.ts.map +1 -1
  7. package/dist/api/index.js +1 -0
  8. package/dist/api/index.js.map +1 -1
  9. package/dist/api/org/env-delete.d.ts.map +1 -1
  10. package/dist/api/org/env-delete.js.map +1 -1
  11. package/dist/api/org/env-get.d.ts.map +1 -1
  12. package/dist/api/org/env-get.js.map +1 -1
  13. package/dist/api/org/env-update.d.ts.map +1 -1
  14. package/dist/api/org/env-update.js.map +1 -1
  15. package/dist/api/queue/analytics.d.ts +108 -0
  16. package/dist/api/queue/analytics.d.ts.map +1 -0
  17. package/dist/api/queue/analytics.js +245 -0
  18. package/dist/api/queue/analytics.js.map +1 -0
  19. package/dist/api/queue/destinations.d.ts +108 -0
  20. package/dist/api/queue/destinations.d.ts.map +1 -0
  21. package/dist/api/queue/destinations.js +238 -0
  22. package/dist/api/queue/destinations.js.map +1 -0
  23. package/dist/api/queue/dlq.d.ts +100 -0
  24. package/dist/api/queue/dlq.d.ts.map +1 -0
  25. package/dist/api/queue/dlq.js +204 -0
  26. package/dist/api/queue/dlq.js.map +1 -0
  27. package/dist/api/queue/index.d.ts +55 -0
  28. package/dist/api/queue/index.d.ts.map +1 -0
  29. package/dist/api/queue/index.js +86 -0
  30. package/dist/api/queue/index.js.map +1 -0
  31. package/dist/api/queue/messages.d.ts +332 -0
  32. package/dist/api/queue/messages.d.ts.map +1 -0
  33. package/dist/api/queue/messages.js +637 -0
  34. package/dist/api/queue/messages.js.map +1 -0
  35. package/dist/api/queue/queues.d.ts +153 -0
  36. package/dist/api/queue/queues.d.ts.map +1 -0
  37. package/dist/api/queue/queues.js +319 -0
  38. package/dist/api/queue/queues.js.map +1 -0
  39. package/dist/api/queue/sources.d.ts +132 -0
  40. package/dist/api/queue/sources.d.ts.map +1 -0
  41. package/dist/api/queue/sources.js +285 -0
  42. package/dist/api/queue/sources.js.map +1 -0
  43. package/dist/api/queue/types.d.ts +1129 -0
  44. package/dist/api/queue/types.d.ts.map +1 -0
  45. package/dist/api/queue/types.js +949 -0
  46. package/dist/api/queue/types.js.map +1 -0
  47. package/dist/api/queue/util.d.ts +262 -0
  48. package/dist/api/queue/util.d.ts.map +1 -0
  49. package/dist/api/queue/util.js +171 -0
  50. package/dist/api/queue/util.js.map +1 -0
  51. package/dist/api/queue/validation.d.ts +247 -0
  52. package/dist/api/queue/validation.d.ts.map +1 -0
  53. package/dist/api/queue/validation.js +513 -0
  54. package/dist/api/queue/validation.js.map +1 -0
  55. package/dist/api/sandbox/get.d.ts.map +1 -1
  56. package/dist/api/sandbox/get.js +5 -0
  57. package/dist/api/sandbox/get.js.map +1 -1
  58. package/dist/api/sandbox/index.d.ts +3 -3
  59. package/dist/api/sandbox/index.d.ts.map +1 -1
  60. package/dist/api/sandbox/index.js +1 -1
  61. package/dist/api/sandbox/index.js.map +1 -1
  62. package/dist/api/sandbox/run.d.ts.map +1 -1
  63. package/dist/api/sandbox/run.js +5 -2
  64. package/dist/api/sandbox/run.js.map +1 -1
  65. package/dist/api/sandbox/snapshot-build.d.ts +2 -0
  66. package/dist/api/sandbox/snapshot-build.d.ts.map +1 -1
  67. package/dist/api/sandbox/snapshot-build.js +4 -0
  68. package/dist/api/sandbox/snapshot-build.js.map +1 -1
  69. package/dist/api/sandbox/snapshot.d.ts +143 -1
  70. package/dist/api/sandbox/snapshot.d.ts.map +1 -1
  71. package/dist/api/sandbox/snapshot.js +183 -4
  72. package/dist/api/sandbox/snapshot.js.map +1 -1
  73. package/package.json +4 -4
  74. package/src/api/api.ts +62 -13
  75. package/src/api/index.ts +1 -0
  76. package/src/api/org/env-delete.ts +1 -4
  77. package/src/api/org/env-get.ts +1 -4
  78. package/src/api/org/env-update.ts +1 -4
  79. package/src/api/queue/analytics.ts +313 -0
  80. package/src/api/queue/destinations.ts +321 -0
  81. package/src/api/queue/dlq.ts +283 -0
  82. package/src/api/queue/index.ts +261 -0
  83. package/src/api/queue/messages.ts +875 -0
  84. package/src/api/queue/queues.ts +448 -0
  85. package/src/api/queue/sources.ts +384 -0
  86. package/src/api/queue/types.ts +1253 -0
  87. package/src/api/queue/util.ts +204 -0
  88. package/src/api/queue/validation.ts +560 -0
  89. package/src/api/sandbox/get.ts +5 -0
  90. package/src/api/sandbox/index.ts +13 -1
  91. package/src/api/sandbox/run.ts +5 -2
  92. package/src/api/sandbox/snapshot-build.ts +4 -0
  93. package/src/api/sandbox/snapshot.ts +223 -5
@@ -0,0 +1,448 @@
1
+ import { z } from 'zod';
2
+ import { APIClient, APIResponseSchema, APIResponseSchemaNoData } from '../api';
3
+ import {
4
+ QueueSchema,
5
+ type Queue,
6
+ type CreateQueueRequest,
7
+ type UpdateQueueRequest,
8
+ type ListQueuesRequest,
9
+ type QueueApiOptions,
10
+ CreateQueueRequestSchema,
11
+ UpdateQueueRequestSchema,
12
+ } from './types';
13
+ import {
14
+ QueueError,
15
+ QueueNotFoundError,
16
+ queueApiPath,
17
+ queueApiPathWithQuery,
18
+ buildQueueHeaders,
19
+ } from './util';
20
+ import {
21
+ validateQueueName,
22
+ validateQueueType,
23
+ validateDescription,
24
+ validateTTL,
25
+ validateVisibilityTimeout,
26
+ validateMaxRetries,
27
+ validateMaxInFlight,
28
+ validateLimit,
29
+ validateOffset,
30
+ } from './validation';
31
+
32
+ const QueueResponseSchema = APIResponseSchema(z.object({ queue: QueueSchema }));
33
+ const QueuesListResponseSchema = APIResponseSchema(
34
+ z.object({
35
+ queues: z.array(QueueSchema),
36
+ total: z.number().optional(),
37
+ })
38
+ );
39
+ const DeleteQueueResponseSchema = APIResponseSchemaNoData();
40
+
41
+ /**
42
+ * Create a new message queue.
43
+ *
44
+ * Creates a queue with the specified type and settings. The queue name is optional
45
+ * and will be auto-generated if not provided.
46
+ *
47
+ * @param client - The API client instance
48
+ * @param params - Queue creation parameters
49
+ * @returns The created queue
50
+ * @throws {QueueValidationError} If validation fails
51
+ * @throws {QueueError} If the API request fails
52
+ *
53
+ * @example
54
+ * ```typescript
55
+ * // Create a worker queue with custom settings
56
+ * const queue = await createQueue(client, {
57
+ * name: 'order-processing',
58
+ * queue_type: 'worker',
59
+ * description: 'Processes customer orders',
60
+ * settings: {
61
+ * default_max_retries: 3,
62
+ * default_visibility_timeout_seconds: 60,
63
+ * },
64
+ * });
65
+ * console.log(`Created queue: ${queue.id}`);
66
+ * ```
67
+ */
68
+ export async function createQueue(
69
+ client: APIClient,
70
+ params: CreateQueueRequest,
71
+ options?: QueueApiOptions
72
+ ): Promise<Queue> {
73
+ // Validate before sending to API
74
+ validateQueueType(params.queue_type);
75
+ if (params.name) {
76
+ validateQueueName(params.name);
77
+ }
78
+ if (params.description) {
79
+ validateDescription(params.description);
80
+ }
81
+ // Validate settings if provided
82
+ if (params.settings) {
83
+ if (params.settings.default_ttl_seconds !== undefined) {
84
+ validateTTL(params.settings.default_ttl_seconds ?? undefined);
85
+ }
86
+ if (params.settings.default_visibility_timeout_seconds !== undefined) {
87
+ validateVisibilityTimeout(params.settings.default_visibility_timeout_seconds);
88
+ }
89
+ if (params.settings.default_max_retries !== undefined) {
90
+ validateMaxRetries(params.settings.default_max_retries);
91
+ }
92
+ if (params.settings.max_in_flight_per_client !== undefined) {
93
+ validateMaxInFlight(params.settings.max_in_flight_per_client);
94
+ }
95
+ }
96
+
97
+ const url = queueApiPath('create');
98
+ const resp = await client.post(
99
+ url,
100
+ params,
101
+ QueueResponseSchema,
102
+ CreateQueueRequestSchema,
103
+ undefined,
104
+ buildQueueHeaders(options?.orgId)
105
+ );
106
+
107
+ if (resp.success) {
108
+ return resp.data.queue;
109
+ }
110
+
111
+ throw new QueueError({
112
+ message: resp.message || 'Failed to create queue',
113
+ });
114
+ }
115
+
116
+ /**
117
+ * Get a queue by name.
118
+ *
119
+ * Retrieves the queue details including settings and statistics.
120
+ *
121
+ * @param client - The API client instance
122
+ * @param name - The queue name
123
+ * @returns The queue details
124
+ * @throws {QueueValidationError} If the queue name is invalid
125
+ * @throws {QueueNotFoundError} If the queue does not exist
126
+ * @throws {QueueError} If the API request fails
127
+ *
128
+ * @example
129
+ * ```typescript
130
+ * const queue = await getQueue(client, 'order-processing');
131
+ * console.log(`Queue has ${queue.stats?.message_count} messages`);
132
+ * ```
133
+ */
134
+ export async function getQueue(
135
+ client: APIClient,
136
+ name: string,
137
+ options?: QueueApiOptions
138
+ ): Promise<Queue> {
139
+ validateQueueName(name);
140
+ const url = queueApiPath('get', name);
141
+ const resp = await client.get(
142
+ url,
143
+ QueueResponseSchema,
144
+ undefined,
145
+ buildQueueHeaders(options?.orgId)
146
+ );
147
+
148
+ if (resp.success) {
149
+ return resp.data.queue;
150
+ }
151
+
152
+ if (resp.message?.includes('not found')) {
153
+ throw new QueueNotFoundError({
154
+ queueName: name,
155
+ message: resp.message,
156
+ });
157
+ }
158
+
159
+ throw new QueueError({
160
+ queueName: name,
161
+ message: resp.message || 'Failed to get queue',
162
+ });
163
+ }
164
+
165
+ /**
166
+ * List all queues with optional pagination.
167
+ *
168
+ * @param client - The API client instance
169
+ * @param params - Optional pagination parameters
170
+ * @returns Object containing the list of queues and optional total count
171
+ * @throws {QueueValidationError} If pagination parameters are invalid
172
+ * @throws {QueueError} If the API request fails
173
+ *
174
+ * @example
175
+ * ```typescript
176
+ * // List first 10 queues
177
+ * const { queues, total } = await listQueues(client, { limit: 10 });
178
+ * console.log(`Found ${total} queues`);
179
+ *
180
+ * // Paginate through all queues
181
+ * const { queues: page2 } = await listQueues(client, { limit: 10, offset: 10 });
182
+ * ```
183
+ */
184
+ export async function listQueues(
185
+ client: APIClient,
186
+ params?: ListQueuesRequest,
187
+ options?: QueueApiOptions
188
+ ): Promise<{ queues: Queue[]; total?: number }> {
189
+ // Validate pagination params
190
+ if (params?.limit !== undefined) {
191
+ validateLimit(params.limit);
192
+ }
193
+ if (params?.offset !== undefined) {
194
+ validateOffset(params.offset);
195
+ }
196
+
197
+ const searchParams = new URLSearchParams();
198
+ if (params?.limit !== undefined) {
199
+ searchParams.set('limit', String(params.limit));
200
+ }
201
+ if (params?.offset !== undefined) {
202
+ searchParams.set('offset', String(params.offset));
203
+ }
204
+
205
+ const queryString = searchParams.toString();
206
+ const url = queueApiPathWithQuery('list', queryString || undefined);
207
+ const resp = await client.get(
208
+ url,
209
+ QueuesListResponseSchema,
210
+ undefined,
211
+ buildQueueHeaders(options?.orgId)
212
+ );
213
+
214
+ if (resp.success) {
215
+ return { queues: resp.data.queues, total: resp.data.total };
216
+ }
217
+
218
+ throw new QueueError({
219
+ message: resp.message || 'Failed to list queues',
220
+ });
221
+ }
222
+
223
+ /**
224
+ * Update an existing queue.
225
+ *
226
+ * Updates the queue description and/or settings. Only provided fields are updated.
227
+ *
228
+ * @param client - The API client instance
229
+ * @param name - The queue name
230
+ * @param params - Update parameters
231
+ * @returns The updated queue
232
+ * @throws {QueueValidationError} If validation fails
233
+ * @throws {QueueNotFoundError} If the queue does not exist
234
+ * @throws {QueueError} If the API request fails
235
+ *
236
+ * @example
237
+ * ```typescript
238
+ * const queue = await updateQueue(client, 'order-processing', {
239
+ * description: 'Updated description',
240
+ * settings: { default_max_retries: 5 },
241
+ * });
242
+ * ```
243
+ */
244
+ export async function updateQueue(
245
+ client: APIClient,
246
+ name: string,
247
+ params: UpdateQueueRequest,
248
+ options?: QueueApiOptions
249
+ ): Promise<Queue> {
250
+ // Validate before sending to API
251
+ validateQueueName(name);
252
+ if (params.description) {
253
+ validateDescription(params.description);
254
+ }
255
+ // Validate settings if provided
256
+ if (params.settings) {
257
+ if (params.settings.default_ttl_seconds !== undefined) {
258
+ validateTTL(params.settings.default_ttl_seconds ?? undefined);
259
+ }
260
+ if (params.settings.default_visibility_timeout_seconds !== undefined) {
261
+ validateVisibilityTimeout(params.settings.default_visibility_timeout_seconds);
262
+ }
263
+ if (params.settings.default_max_retries !== undefined) {
264
+ validateMaxRetries(params.settings.default_max_retries);
265
+ }
266
+ if (params.settings.max_in_flight_per_client !== undefined) {
267
+ validateMaxInFlight(params.settings.max_in_flight_per_client);
268
+ }
269
+ }
270
+
271
+ const url = queueApiPath('update', name);
272
+ const resp = await client.patch(
273
+ url,
274
+ params,
275
+ QueueResponseSchema,
276
+ UpdateQueueRequestSchema,
277
+ undefined,
278
+ buildQueueHeaders(options?.orgId)
279
+ );
280
+
281
+ if (resp.success) {
282
+ return resp.data.queue;
283
+ }
284
+
285
+ if (resp.message?.includes('not found')) {
286
+ throw new QueueNotFoundError({
287
+ queueName: name,
288
+ message: resp.message,
289
+ });
290
+ }
291
+
292
+ throw new QueueError({
293
+ queueName: name,
294
+ message: resp.message || 'Failed to update queue',
295
+ });
296
+ }
297
+
298
+ /**
299
+ * Delete a queue.
300
+ *
301
+ * Permanently deletes a queue and all its messages. This action cannot be undone.
302
+ *
303
+ * @param client - The API client instance
304
+ * @param name - The queue name
305
+ * @throws {QueueValidationError} If the queue name is invalid
306
+ * @throws {QueueNotFoundError} If the queue does not exist
307
+ * @throws {QueueError} If the API request fails
308
+ *
309
+ * @example
310
+ * ```typescript
311
+ * await deleteQueue(client, 'order-processing');
312
+ * console.log('Queue deleted');
313
+ * ```
314
+ */
315
+ export async function deleteQueue(
316
+ client: APIClient,
317
+ name: string,
318
+ options?: QueueApiOptions
319
+ ): Promise<void> {
320
+ validateQueueName(name);
321
+ const url = queueApiPath('delete', name);
322
+ const resp = await client.delete(
323
+ url,
324
+ DeleteQueueResponseSchema,
325
+ undefined,
326
+ buildQueueHeaders(options?.orgId)
327
+ );
328
+
329
+ if (resp.success) {
330
+ return;
331
+ }
332
+
333
+ if (resp.message?.includes('not found')) {
334
+ throw new QueueNotFoundError({
335
+ queueName: name,
336
+ message: resp.message,
337
+ });
338
+ }
339
+
340
+ throw new QueueError({
341
+ queueName: name,
342
+ message: resp.message || 'Failed to delete queue',
343
+ });
344
+ }
345
+
346
+ /**
347
+ * Pause a queue.
348
+ *
349
+ * Pauses message processing for the queue. Messages can still be published
350
+ * but will not be delivered to consumers until the queue is resumed.
351
+ *
352
+ * @param client - The API client instance
353
+ * @param name - The queue name
354
+ * @returns The updated queue with paused_at timestamp
355
+ * @throws {QueueValidationError} If the queue name is invalid
356
+ * @throws {QueueNotFoundError} If the queue does not exist
357
+ * @throws {QueueError} If the API request fails
358
+ *
359
+ * @example
360
+ * ```typescript
361
+ * const queue = await pauseQueue(client, 'order-processing');
362
+ * console.log(`Queue paused at: ${queue.paused_at}`);
363
+ * ```
364
+ */
365
+ export async function pauseQueue(
366
+ client: APIClient,
367
+ name: string,
368
+ options?: QueueApiOptions
369
+ ): Promise<Queue> {
370
+ validateQueueName(name);
371
+ const url = queueApiPath('pause', name);
372
+ const resp = await client.post(
373
+ url,
374
+ {},
375
+ QueueResponseSchema,
376
+ z.object({}),
377
+ undefined,
378
+ buildQueueHeaders(options?.orgId)
379
+ );
380
+
381
+ if (resp.success) {
382
+ return resp.data.queue;
383
+ }
384
+
385
+ if (resp.message?.includes('not found')) {
386
+ throw new QueueNotFoundError({
387
+ queueName: name,
388
+ message: resp.message,
389
+ });
390
+ }
391
+
392
+ throw new QueueError({
393
+ queueName: name,
394
+ message: resp.message || 'Failed to pause queue',
395
+ });
396
+ }
397
+
398
+ /**
399
+ * Resume a paused queue.
400
+ *
401
+ * Resumes message processing for a paused queue. Consumers will start
402
+ * receiving messages again.
403
+ *
404
+ * @param client - The API client instance
405
+ * @param name - The queue name
406
+ * @returns The updated queue with paused_at cleared
407
+ * @throws {QueueValidationError} If the queue name is invalid
408
+ * @throws {QueueNotFoundError} If the queue does not exist
409
+ * @throws {QueueError} If the API request fails
410
+ *
411
+ * @example
412
+ * ```typescript
413
+ * const queue = await resumeQueue(client, 'order-processing');
414
+ * console.log(`Queue resumed, paused_at: ${queue.paused_at}`); // null
415
+ * ```
416
+ */
417
+ export async function resumeQueue(
418
+ client: APIClient,
419
+ name: string,
420
+ options?: QueueApiOptions
421
+ ): Promise<Queue> {
422
+ validateQueueName(name);
423
+ const url = queueApiPath('resume', name);
424
+ const resp = await client.post(
425
+ url,
426
+ {},
427
+ QueueResponseSchema,
428
+ z.object({}),
429
+ undefined,
430
+ buildQueueHeaders(options?.orgId)
431
+ );
432
+
433
+ if (resp.success) {
434
+ return resp.data.queue;
435
+ }
436
+
437
+ if (resp.message?.includes('not found')) {
438
+ throw new QueueNotFoundError({
439
+ queueName: name,
440
+ message: resp.message,
441
+ });
442
+ }
443
+
444
+ throw new QueueError({
445
+ queueName: name,
446
+ message: resp.message || 'Failed to resume queue',
447
+ });
448
+ }