@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,949 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Queue type schema for validation.
4
+ *
5
+ * - `worker`: Messages are consumed by workers with acknowledgment. Each message is processed by exactly one consumer.
6
+ * - `pubsub`: Messages are broadcast to all subscribers. Multiple consumers can receive the same message.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * const queueType = QueueTypeSchema.parse('worker'); // 'worker' | 'pubsub'
11
+ * ```
12
+ */
13
+ export const QueueTypeSchema = z.enum(['worker', 'pubsub']);
14
+ /**
15
+ * Base queue settings schema without defaults - used for partial updates.
16
+ *
17
+ * This schema is used for PATCH operations where we don't want Zod to apply
18
+ * default values for missing fields (which would overwrite existing values).
19
+ */
20
+ const QueueSettingsSchemaBase = z.object({
21
+ /** Default time-to-live for messages in seconds. Null means no expiration. */
22
+ default_ttl_seconds: z.number().nullable().optional(),
23
+ /** Time in seconds a message is invisible after being received. */
24
+ default_visibility_timeout_seconds: z.number().optional(),
25
+ /** Maximum number of delivery attempts before moving to DLQ. */
26
+ default_max_retries: z.number().optional(),
27
+ /** Initial backoff delay in milliseconds for retries. */
28
+ default_retry_backoff_ms: z.number().optional(),
29
+ /** Maximum backoff delay in milliseconds for retries. */
30
+ default_retry_max_backoff_ms: z.number().optional(),
31
+ /** Multiplier for exponential backoff. */
32
+ default_retry_multiplier: z.number().optional(),
33
+ /** Maximum number of messages a single client can process concurrently. */
34
+ max_in_flight_per_client: z.number().optional(),
35
+ /** Retention period for acknowledged messages in seconds. */
36
+ retention_seconds: z.number().optional(),
37
+ });
38
+ /**
39
+ * Queue settings schema for configuring queue behavior.
40
+ *
41
+ * These settings control message lifecycle, retry behavior, and concurrency limits.
42
+ * This schema includes defaults and is used for output types and documentation.
43
+ *
44
+ * @example
45
+ * ```typescript
46
+ * const settings = QueueSettingsSchema.parse({
47
+ * default_ttl_seconds: 3600, // Messages expire after 1 hour
48
+ * default_visibility_timeout_seconds: 60, // Processing timeout
49
+ * default_max_retries: 3, // Retry failed messages 3 times
50
+ * });
51
+ * ```
52
+ */
53
+ export const QueueSettingsSchema = z.object({
54
+ /** Default time-to-live for messages in seconds. Null means no expiration. */
55
+ default_ttl_seconds: z.number().nullable().optional(),
56
+ /** Time in seconds a message is invisible after being received (default: 30). */
57
+ default_visibility_timeout_seconds: z.number().default(30),
58
+ /** Maximum number of delivery attempts before moving to DLQ (default: 5). */
59
+ default_max_retries: z.number().default(5),
60
+ /** Initial backoff delay in milliseconds for retries (default: 1000). */
61
+ default_retry_backoff_ms: z.number().default(1000),
62
+ /** Maximum backoff delay in milliseconds for retries (default: 60000). */
63
+ default_retry_max_backoff_ms: z.number().default(60000),
64
+ /** Multiplier for exponential backoff (default: 2.0). */
65
+ default_retry_multiplier: z.number().default(2.0),
66
+ /** Maximum number of messages a single client can process concurrently (default: 10). */
67
+ max_in_flight_per_client: z.number().default(10),
68
+ /** Retention period for acknowledged messages in seconds (default: 30 days). */
69
+ retention_seconds: z.number().default(2592000),
70
+ });
71
+ /**
72
+ * Queue statistics schema showing current queue state.
73
+ */
74
+ export const QueueStatsSchema = z.object({
75
+ /** Total number of messages currently in the queue. */
76
+ message_count: z.number(),
77
+ /** Number of messages in the dead letter queue. */
78
+ dlq_count: z.number(),
79
+ /** The next offset that will be assigned to a new message. */
80
+ next_offset: z.number(),
81
+ });
82
+ /**
83
+ * Queue schema representing a message queue.
84
+ *
85
+ * @example
86
+ * ```typescript
87
+ * const queue = await getQueue(client, 'my-queue');
88
+ * console.log(`Queue ${queue.name} has ${queue.message_count} messages`);
89
+ * ```
90
+ */
91
+ export const QueueSchema = z.object({
92
+ /** Unique identifier for the queue. */
93
+ id: z.string(),
94
+ /** Human-readable queue name (used for API operations). */
95
+ name: z.string(),
96
+ /** Optional description of the queue's purpose. */
97
+ description: z.string().nullable().optional(),
98
+ /** The type of queue (worker or pubsub). */
99
+ queue_type: QueueTypeSchema,
100
+ /** Default time-to-live for messages in seconds. Null means no expiration. */
101
+ default_ttl_seconds: z.number().nullable().optional(),
102
+ /** Time in seconds a message is invisible after being received. */
103
+ default_visibility_timeout_seconds: z.number().optional(),
104
+ /** Maximum number of delivery attempts before moving to DLQ. */
105
+ default_max_retries: z.number().optional(),
106
+ /** Initial backoff delay in milliseconds for retries. */
107
+ default_retry_backoff_ms: z.number().optional(),
108
+ /** Maximum backoff delay in milliseconds for retries. */
109
+ default_retry_max_backoff_ms: z.number().optional(),
110
+ /** Multiplier for exponential backoff. */
111
+ default_retry_multiplier: z.number().optional(),
112
+ /** Maximum number of messages a single client can process concurrently. */
113
+ max_in_flight_per_client: z.number().optional(),
114
+ /** The next offset that will be assigned to a new message. */
115
+ next_offset: z.number().optional(),
116
+ /** Total number of messages currently in the queue. */
117
+ message_count: z.number().optional(),
118
+ /** Number of messages in the dead letter queue. */
119
+ dlq_count: z.number().optional(),
120
+ /** ISO 8601 timestamp when the queue was created. */
121
+ created_at: z.string(),
122
+ /** ISO 8601 timestamp when the queue was last updated. */
123
+ updated_at: z.string(),
124
+ /** ISO 8601 timestamp when the queue was paused (null if not paused). */
125
+ paused_at: z.string().nullable().optional(),
126
+ /** Retention period for acknowledged messages in seconds. */
127
+ retention_seconds: z.number().optional(),
128
+ });
129
+ /**
130
+ * Message state schema for tracking message lifecycle.
131
+ *
132
+ * - `pending`: Message is waiting to be processed.
133
+ * - `leased`: Message has been received and is currently being processed by a consumer.
134
+ * - `processing`: Message has been received and is being processed (legacy, equivalent to leased).
135
+ * - `delivered`: Message was successfully acknowledged.
136
+ * - `failed`: Message processing failed but may be retried.
137
+ * - `dead`: Message exceeded retry limit and was moved to DLQ.
138
+ */
139
+ export const MessageStateSchema = z.enum([
140
+ 'pending',
141
+ 'leased',
142
+ 'processing',
143
+ 'delivered',
144
+ 'failed',
145
+ 'dead',
146
+ ]);
147
+ /**
148
+ * Message schema representing a queue message.
149
+ *
150
+ * @example
151
+ * ```typescript
152
+ * const message = await publishMessage(client, 'my-queue', { payload: 'Hello' });
153
+ * console.log(`Published message ${message.id} at offset ${message.offset}`);
154
+ * ```
155
+ */
156
+ export const MessageSchema = z.object({
157
+ /** Unique identifier for the message (prefixed with msg_). */
158
+ id: z.string(),
159
+ /** ID of the queue this message belongs to. */
160
+ queue_id: z.string(),
161
+ /** Sequential offset within the queue. */
162
+ offset: z.number(),
163
+ /** The message payload (JSON object). */
164
+ payload: z.unknown(),
165
+ /** Size of the message payload in bytes. */
166
+ size: z.number().optional(),
167
+ /** Optional metadata attached to the message. */
168
+ metadata: z.record(z.string(), z.unknown()).nullable().optional(),
169
+ /** Current state of the message. */
170
+ state: MessageStateSchema.optional(),
171
+ /** Optional key for message deduplication. */
172
+ idempotency_key: z.string().nullable().optional(),
173
+ /** Optional key for message ordering. */
174
+ partition_key: z.string().nullable().optional(),
175
+ /** Time-to-live in seconds (null means no expiration). */
176
+ ttl_seconds: z.number().nullable().optional(),
177
+ /** Number of times delivery has been attempted. */
178
+ delivery_attempts: z.number().optional(),
179
+ /** Maximum number of delivery attempts allowed. */
180
+ max_retries: z.number().optional(),
181
+ /** ISO 8601 timestamp when the message was published. */
182
+ published_at: z.string().optional(),
183
+ /** ISO 8601 timestamp when the message will expire (if TTL set). */
184
+ expires_at: z.string().nullable().optional(),
185
+ /** ISO 8601 timestamp when the message was delivered. */
186
+ delivered_at: z.string().nullable().optional(),
187
+ /** ISO 8601 timestamp when the message was acknowledged. */
188
+ acknowledged_at: z.string().nullable().optional(),
189
+ /** ISO 8601 timestamp when the message was created. */
190
+ created_at: z.string().optional(),
191
+ /** ISO 8601 timestamp when the message was last updated. */
192
+ updated_at: z.string().optional(),
193
+ });
194
+ /**
195
+ * Destination type schema. Currently only HTTP webhooks are supported.
196
+ */
197
+ export const DestinationTypeSchema = z.enum(['http']);
198
+ /**
199
+ * HTTP destination configuration schema for webhook delivery.
200
+ *
201
+ * @example
202
+ * ```typescript
203
+ * const config: HttpDestinationConfig = {
204
+ * url: 'https://api.example.com/webhook',
205
+ * method: 'POST',
206
+ * headers: { 'X-Custom-Header': 'value' },
207
+ * timeout_ms: 10000,
208
+ * retry_policy: { max_attempts: 3 },
209
+ * };
210
+ * ```
211
+ */
212
+ export const HttpDestinationConfigSchema = z.object({
213
+ /** The URL to send messages to. */
214
+ url: z.string(),
215
+ /** Optional custom headers to include in requests. */
216
+ headers: z.record(z.string(), z.string()).optional(),
217
+ /** HTTP method to use (default: POST). */
218
+ method: z.string().default('POST'),
219
+ /** Request timeout in milliseconds (default: 30000). */
220
+ timeout_ms: z.number().default(30000),
221
+ /** Optional retry policy for failed deliveries. */
222
+ retry_policy: z
223
+ .object({
224
+ /** Maximum number of delivery attempts (default: 5). */
225
+ max_attempts: z.number().default(5),
226
+ /** Initial backoff delay in milliseconds (default: 1000). */
227
+ initial_backoff_ms: z.number().default(1000),
228
+ /** Maximum backoff delay in milliseconds (default: 60000). */
229
+ max_backoff_ms: z.number().default(60000),
230
+ /** Backoff multiplier for exponential backoff (default: 2.0). */
231
+ backoff_multiplier: z.number().default(2.0),
232
+ })
233
+ .optional(),
234
+ /** Optional request signing configuration. */
235
+ signing: z
236
+ .object({
237
+ /** Whether signing is enabled (default: false). */
238
+ enabled: z.boolean().default(false),
239
+ /** Secret key for HMAC signing. */
240
+ secret_key: z.string().optional(),
241
+ })
242
+ .optional(),
243
+ });
244
+ /**
245
+ * Destination statistics schema showing delivery metrics.
246
+ */
247
+ export const DestinationStatsSchema = z.object({
248
+ /** Total number of delivery attempts. */
249
+ total_deliveries: z.number(),
250
+ /** Number of successful deliveries. */
251
+ successful_deliveries: z.number(),
252
+ /** Number of failed deliveries. */
253
+ failed_deliveries: z.number(),
254
+ /** ISO 8601 timestamp of the last delivery attempt. */
255
+ last_delivery_at: z.string().nullable().optional(),
256
+ /** ISO 8601 timestamp of the last successful delivery. */
257
+ last_success_at: z.string().nullable().optional(),
258
+ /** ISO 8601 timestamp of the last failed delivery. */
259
+ last_failure_at: z.string().nullable().optional(),
260
+ });
261
+ /**
262
+ * Destination schema representing a webhook endpoint for message delivery.
263
+ *
264
+ * Destinations are attached to queues and automatically receive messages when published.
265
+ *
266
+ * @example
267
+ * ```typescript
268
+ * const destination = await createDestination(client, 'my-queue', {
269
+ * destination_type: 'http',
270
+ * config: { url: 'https://api.example.com/webhook' },
271
+ * enabled: true,
272
+ * });
273
+ * ```
274
+ */
275
+ export const DestinationSchema = z.object({
276
+ /** Unique identifier for the destination (prefixed with dest_). */
277
+ id: z.string(),
278
+ /** ID of the queue this destination is attached to. */
279
+ queue_id: z.string(),
280
+ /** Type of destination (currently only 'http'). */
281
+ destination_type: DestinationTypeSchema,
282
+ /** HTTP configuration for the destination. */
283
+ config: HttpDestinationConfigSchema,
284
+ /** Whether the destination is enabled for delivery. */
285
+ enabled: z.boolean(),
286
+ /** Delivery statistics for this destination. */
287
+ stats: DestinationStatsSchema.optional(),
288
+ /** ISO 8601 timestamp when the destination was created. */
289
+ created_at: z.string(),
290
+ /** ISO 8601 timestamp when the destination was last updated. */
291
+ updated_at: z.string(),
292
+ });
293
+ /**
294
+ * Dead letter message schema for messages that failed processing.
295
+ *
296
+ * Messages are moved to the dead letter queue (DLQ) after exceeding the maximum
297
+ * retry limit. They can be inspected, replayed, or deleted.
298
+ *
299
+ * @example
300
+ * ```typescript
301
+ * const { messages } = await listDeadLetterMessages(client, 'my-queue');
302
+ * for (const msg of messages) {
303
+ * console.log(`Failed message: ${msg.failure_reason}`);
304
+ * await replayDeadLetterMessage(client, 'my-queue', msg.id);
305
+ * }
306
+ * ```
307
+ */
308
+ export const DeadLetterMessageSchema = z.object({
309
+ /** Unique identifier for the DLQ entry. */
310
+ id: z.string(),
311
+ /** ID of the queue this message belongs to. */
312
+ queue_id: z.string(),
313
+ /** ID of the original message that failed. */
314
+ original_message_id: z.string(),
315
+ /** Offset of the original message in the queue. */
316
+ offset: z.number(),
317
+ /** The message payload (JSON object). */
318
+ payload: z.unknown(),
319
+ /** Optional metadata from the original message. */
320
+ metadata: z.record(z.string(), z.unknown()).nullable().optional(),
321
+ /** Reason why the message was moved to DLQ. */
322
+ failure_reason: z.string().nullable().optional(),
323
+ /** Number of delivery attempts before failure. */
324
+ delivery_attempts: z.number(),
325
+ /** ISO 8601 timestamp when the message was moved to DLQ. */
326
+ moved_at: z.string(),
327
+ /** ISO 8601 timestamp when the original message was published. */
328
+ original_published_at: z.string(),
329
+ /** ISO 8601 timestamp when the DLQ entry was created. */
330
+ created_at: z.string(),
331
+ });
332
+ // ============================================================================
333
+ // Request Schemas
334
+ // ============================================================================
335
+ /**
336
+ * Request schema for creating a new queue.
337
+ *
338
+ * @example
339
+ * ```typescript
340
+ * const request: CreateQueueRequest = {
341
+ * name: 'my-worker-queue',
342
+ * queue_type: 'worker',
343
+ * description: 'Processes background jobs',
344
+ * settings: { default_max_retries: 3 },
345
+ * };
346
+ * ```
347
+ */
348
+ export const CreateQueueRequestSchema = z.object({
349
+ /** Optional queue name (auto-generated if not provided). */
350
+ name: z.string().optional(),
351
+ /** Optional description of the queue's purpose. */
352
+ description: z.string().optional(),
353
+ /** Type of queue to create. */
354
+ queue_type: QueueTypeSchema,
355
+ /** Optional settings to customize queue behavior (server applies defaults for missing fields). */
356
+ settings: QueueSettingsSchemaBase.partial().optional(),
357
+ });
358
+ /**
359
+ * Request schema for updating an existing queue.
360
+ */
361
+ export const UpdateQueueRequestSchema = z.object({
362
+ /** New description for the queue. */
363
+ description: z.string().optional(),
364
+ /** Settings to update (partial update supported, only provided fields are updated). */
365
+ settings: QueueSettingsSchemaBase.partial().optional(),
366
+ });
367
+ /**
368
+ * Request schema for listing queues with pagination.
369
+ */
370
+ export const ListQueuesRequestSchema = z.object({
371
+ /** Maximum number of queues to return. */
372
+ limit: z.number().optional(),
373
+ /** Number of queues to skip for pagination. */
374
+ offset: z.number().optional(),
375
+ });
376
+ /**
377
+ * Request schema for publishing a message to a queue.
378
+ *
379
+ * @example
380
+ * ```typescript
381
+ * const request: PublishMessageRequest = {
382
+ * payload: { task: 'process-order', orderId: 123 },
383
+ * metadata: { priority: 'high' },
384
+ * idempotency_key: 'order-123-v1',
385
+ * ttl_seconds: 3600,
386
+ * };
387
+ * ```
388
+ */
389
+ export const PublishMessageRequestSchema = z.object({
390
+ /** The message payload (JSON object). */
391
+ payload: z.unknown(),
392
+ /** Optional metadata to attach to the message. */
393
+ metadata: z.record(z.string(), z.unknown()).optional(),
394
+ /** Optional key for deduplication (prevents duplicate messages). */
395
+ idempotency_key: z.string().optional(),
396
+ /** Optional key for message ordering within a partition. */
397
+ partition_key: z.string().optional(),
398
+ /** Optional time-to-live in seconds. */
399
+ ttl_seconds: z.number().optional(),
400
+ });
401
+ /**
402
+ * Request schema for batch publishing multiple messages.
403
+ *
404
+ * @example
405
+ * ```typescript
406
+ * const request: BatchPublishMessagesRequest = {
407
+ * messages: [
408
+ * { payload: { task: 'a' } },
409
+ * { payload: { task: 'b' } },
410
+ * ],
411
+ * };
412
+ * ```
413
+ */
414
+ export const BatchPublishMessagesRequestSchema = z.object({
415
+ /** Array of messages to publish (max 1000 per batch). */
416
+ messages: z.array(PublishMessageRequestSchema).max(1000),
417
+ });
418
+ /**
419
+ * Request schema for listing messages with pagination and filtering.
420
+ */
421
+ export const ListMessagesRequestSchema = z.object({
422
+ /** Maximum number of messages to return. */
423
+ limit: z.number().optional(),
424
+ /** Number of messages to skip for pagination. */
425
+ offset: z.number().optional(),
426
+ /** Filter messages by state. */
427
+ state: MessageStateSchema.optional(),
428
+ });
429
+ /**
430
+ * Request schema for consuming messages from a specific offset.
431
+ */
432
+ export const ConsumeMessagesRequestSchema = z.object({
433
+ /** Starting offset to consume from. */
434
+ offset: z.number(),
435
+ /** Maximum number of messages to consume. */
436
+ limit: z.number().optional(),
437
+ });
438
+ /**
439
+ * Request schema for creating a destination webhook.
440
+ *
441
+ * @example
442
+ * ```typescript
443
+ * const request: CreateDestinationRequest = {
444
+ * destination_type: 'http',
445
+ * config: {
446
+ * url: 'https://api.example.com/webhook',
447
+ * method: 'POST',
448
+ * },
449
+ * enabled: true,
450
+ * };
451
+ * ```
452
+ */
453
+ export const CreateDestinationRequestSchema = z.object({
454
+ /** Type of destination to create. */
455
+ destination_type: DestinationTypeSchema,
456
+ /** HTTP configuration for the destination. */
457
+ config: HttpDestinationConfigSchema,
458
+ /** Whether the destination should be enabled (default: true). */
459
+ enabled: z.boolean().default(true),
460
+ });
461
+ /**
462
+ * Request schema for updating a destination.
463
+ */
464
+ export const UpdateDestinationRequestSchema = z.object({
465
+ /** HTTP configuration updates (partial update supported). */
466
+ config: HttpDestinationConfigSchema.partial().optional(),
467
+ /** Enable or disable the destination. */
468
+ enabled: z.boolean().optional(),
469
+ });
470
+ /**
471
+ * Request schema for listing dead letter queue messages with pagination.
472
+ */
473
+ export const ListDlqRequestSchema = z.object({
474
+ /** Maximum number of messages to return. */
475
+ limit: z.number().optional(),
476
+ /** Number of messages to skip for pagination. */
477
+ offset: z.number().optional(),
478
+ });
479
+ // ============================================================================
480
+ // Analytics Types
481
+ // ============================================================================
482
+ /**
483
+ * Time bucket granularity for analytics queries.
484
+ *
485
+ * - `minute`: 1-minute buckets, max range 24 hours. Best for real-time monitoring.
486
+ * - `hour`: 1-hour buckets, max range 7 days. Best for short-term trend analysis.
487
+ * - `day`: 1-day buckets, max range 90 days. Best for long-term analysis.
488
+ *
489
+ * @example
490
+ * ```typescript
491
+ * const analytics = await getQueueAnalytics(client, 'my-queue', {
492
+ * granularity: 'hour',
493
+ * start: '2026-01-14T00:00:00Z',
494
+ * });
495
+ * ```
496
+ */
497
+ export const AnalyticsGranularitySchema = z.enum(['minute', 'hour', 'day']);
498
+ /**
499
+ * Time period for analytics responses.
500
+ *
501
+ * Represents the time range and granularity of the analytics data.
502
+ */
503
+ export const TimePeriodSchema = z.object({
504
+ /** Start of the time period in ISO8601 format. */
505
+ start: z.string(),
506
+ /** End of the time period in ISO8601 format. */
507
+ end: z.string(),
508
+ /** Time bucket granularity used for aggregation. */
509
+ granularity: AnalyticsGranularitySchema.optional(),
510
+ });
511
+ /**
512
+ * Latency statistics with percentile distributions.
513
+ *
514
+ * Provides average, percentile (p50, p95, p99), and maximum latency values
515
+ * for message delivery operations.
516
+ *
517
+ * @example
518
+ * ```typescript
519
+ * const { latency } = await getQueueAnalytics(client, 'my-queue');
520
+ * console.log(`Average: ${latency.avg_ms}ms, P95: ${latency.p95_ms}ms`);
521
+ * ```
522
+ */
523
+ export const LatencyStatsSchema = z.object({
524
+ /** Average latency in milliseconds. */
525
+ avg_ms: z.number(),
526
+ /** 50th percentile (median) latency in milliseconds. */
527
+ p50_ms: z.number().optional(),
528
+ /** 95th percentile latency in milliseconds. */
529
+ p95_ms: z.number().optional(),
530
+ /** 99th percentile latency in milliseconds. */
531
+ p99_ms: z.number().optional(),
532
+ /** Maximum observed latency in milliseconds. */
533
+ max_ms: z.number().optional(),
534
+ });
535
+ /**
536
+ * Current real-time queue state.
537
+ *
538
+ * Represents the instantaneous state of a queue, useful for monitoring
539
+ * dashboards and alerting on queue health.
540
+ *
541
+ * @example
542
+ * ```typescript
543
+ * const { current } = await getQueueAnalytics(client, 'my-queue');
544
+ * if (current.backlog > 1000) {
545
+ * console.warn('Queue backlog is high!');
546
+ * }
547
+ * ```
548
+ */
549
+ export const QueueCurrentStatsSchema = z.object({
550
+ /** Number of messages waiting to be processed. */
551
+ backlog: z.number(),
552
+ /** Number of messages in the dead letter queue. */
553
+ dlq_count: z.number(),
554
+ /** Number of messages currently leased by consumers. */
555
+ messages_in_flight: z.number(),
556
+ /** Number of active WebSocket/long-poll consumers. */
557
+ active_consumers: z.number(),
558
+ /** Age in seconds of the oldest pending message (null if queue is empty). */
559
+ oldest_message_age_seconds: z.number().nullable().optional(),
560
+ });
561
+ /**
562
+ * Aggregated statistics for a time period.
563
+ *
564
+ * Contains counts and metrics aggregated over the requested time range.
565
+ *
566
+ * @example
567
+ * ```typescript
568
+ * const { period_stats } = await getQueueAnalytics(client, 'my-queue');
569
+ * const successRate = period_stats.messages_acknowledged / period_stats.messages_published;
570
+ * console.log(`Success rate: ${(successRate * 100).toFixed(1)}%`);
571
+ * ```
572
+ */
573
+ export const QueuePeriodStatsSchema = z.object({
574
+ /** Total messages published during the period. */
575
+ messages_published: z.number(),
576
+ /** Total messages delivered to consumers during the period. */
577
+ messages_delivered: z.number(),
578
+ /** Total messages successfully acknowledged during the period. */
579
+ messages_acknowledged: z.number(),
580
+ /** Total messages that failed and moved to DLQ during the period. */
581
+ messages_failed: z.number(),
582
+ /** Total messages replayed from DLQ during the period. */
583
+ messages_replayed: z.number(),
584
+ /** Total bytes of message payloads published during the period. */
585
+ bytes_published: z.number(),
586
+ /** Total delivery attempts (includes retries) during the period. */
587
+ delivery_attempts: z.number(),
588
+ /** Number of retry attempts (delivery_attempts - messages_delivered). */
589
+ retry_count: z.number(),
590
+ });
591
+ /**
592
+ * Analytics for a webhook destination.
593
+ *
594
+ * Provides delivery statistics for a configured webhook endpoint.
595
+ *
596
+ * @example
597
+ * ```typescript
598
+ * const { destinations } = await getQueueAnalytics(client, 'my-queue');
599
+ * for (const dest of destinations ?? []) {
600
+ * const successRate = dest.success_count / (dest.success_count + dest.failure_count);
601
+ * console.log(`${dest.url}: ${(successRate * 100).toFixed(1)}% success`);
602
+ * }
603
+ * ```
604
+ */
605
+ export const DestinationAnalyticsSchema = z.object({
606
+ /** Unique destination identifier (prefixed with dest_). */
607
+ id: z.string(),
608
+ /** Destination type (currently only 'http'). */
609
+ type: z.string(),
610
+ /** Webhook URL. */
611
+ url: z.string(),
612
+ /** Total successful deliveries. */
613
+ success_count: z.number(),
614
+ /** Total failed deliveries. */
615
+ failure_count: z.number(),
616
+ /** Average response time in milliseconds. */
617
+ avg_response_time_ms: z.number().optional(),
618
+ /** ISO8601 timestamp of last successful delivery. */
619
+ last_success_at: z.string().nullable().optional(),
620
+ /** ISO8601 timestamp of last failed delivery. */
621
+ last_failure_at: z.string().nullable().optional(),
622
+ });
623
+ /**
624
+ * Complete analytics for a single queue.
625
+ *
626
+ * Provides comprehensive analytics including current state, period statistics,
627
+ * latency metrics, and destination performance.
628
+ *
629
+ * @example
630
+ * ```typescript
631
+ * const analytics = await getQueueAnalytics(client, 'order-processing');
632
+ * console.log(`Queue: ${analytics.queue_name} (${analytics.queue_type})`);
633
+ * console.log(`Backlog: ${analytics.current.backlog}`);
634
+ * console.log(`Published (24h): ${analytics.period_stats.messages_published}`);
635
+ * console.log(`P95 Latency: ${analytics.latency.p95_ms}ms`);
636
+ * ```
637
+ */
638
+ export const QueueAnalyticsSchema = z.object({
639
+ /** Unique queue identifier (prefixed with queue_). */
640
+ queue_id: z.string(),
641
+ /** Human-readable queue name. */
642
+ queue_name: z.string(),
643
+ /** Queue type: 'worker' or 'pubsub'. */
644
+ queue_type: z.string(),
645
+ /** Time period for the analytics data. */
646
+ period: TimePeriodSchema,
647
+ /** Current real-time queue state. */
648
+ current: QueueCurrentStatsSchema,
649
+ /** Aggregated statistics for the time period. */
650
+ period_stats: QueuePeriodStatsSchema,
651
+ /** Message delivery latency statistics. */
652
+ latency: LatencyStatsSchema,
653
+ /** Consumer processing latency (delivery-to-ack time). */
654
+ consumer_latency: LatencyStatsSchema,
655
+ /** Analytics for each configured webhook destination. */
656
+ destinations: z.array(DestinationAnalyticsSchema).optional(),
657
+ });
658
+ /**
659
+ * Summary statistics for a queue in org-level analytics.
660
+ *
661
+ * Provides a condensed view of queue metrics for listing in dashboards.
662
+ */
663
+ export const QueueSummarySchema = z.object({
664
+ /** Unique queue identifier. */
665
+ id: z.string(),
666
+ /** Human-readable queue name. */
667
+ name: z.string(),
668
+ /** Queue type: 'worker' or 'pubsub'. */
669
+ queue_type: z.string(),
670
+ /** Messages published during the period. */
671
+ messages_published: z.number(),
672
+ /** Messages delivered during the period. */
673
+ messages_delivered: z.number(),
674
+ /** Messages acknowledged during the period. */
675
+ messages_acknowledged: z.number(),
676
+ /** Current pending message count. */
677
+ backlog: z.number(),
678
+ /** Current dead letter queue count. */
679
+ dlq_count: z.number(),
680
+ /** Average delivery latency in milliseconds. */
681
+ avg_latency_ms: z.number(),
682
+ /** Percentage of messages that failed (0-100). */
683
+ error_rate_percent: z.number(),
684
+ });
685
+ /**
686
+ * Aggregated summary across all queues in an organization.
687
+ *
688
+ * @example
689
+ * ```typescript
690
+ * const { summary } = await getOrgAnalytics(client);
691
+ * console.log(`Total queues: ${summary.total_queues}`);
692
+ * console.log(`Total messages: ${summary.total_messages_published}`);
693
+ * console.log(`Error rate: ${summary.error_rate_percent.toFixed(2)}%`);
694
+ * ```
695
+ */
696
+ export const OrgAnalyticsSummarySchema = z.object({
697
+ /** Total number of queues in the organization. */
698
+ total_queues: z.number(),
699
+ /** Total messages published across all queues. */
700
+ total_messages_published: z.number(),
701
+ /** Total messages delivered across all queues. */
702
+ total_messages_delivered: z.number(),
703
+ /** Total messages acknowledged across all queues. */
704
+ total_messages_acknowledged: z.number(),
705
+ /** Total messages in all dead letter queues. */
706
+ total_dlq_messages: z.number(),
707
+ /** Total bytes published across all queues. */
708
+ total_bytes_published: z.number(),
709
+ /** Average delivery latency across all queues in milliseconds. */
710
+ avg_latency_ms: z.number(),
711
+ /** 95th percentile latency across all queues in milliseconds. */
712
+ p95_latency_ms: z.number(),
713
+ /** Overall error rate as percentage (0-100). */
714
+ error_rate_percent: z.number(),
715
+ });
716
+ /**
717
+ * Complete organization-level analytics.
718
+ *
719
+ * Provides an overview of all queues with aggregated metrics and per-queue summaries.
720
+ *
721
+ * @example
722
+ * ```typescript
723
+ * const analytics = await getOrgAnalytics(client);
724
+ * console.log(`Org: ${analytics.org_id}`);
725
+ * console.log(`Queues: ${analytics.summary.total_queues}`);
726
+ * for (const queue of analytics.queues) {
727
+ * console.log(` ${queue.name}: ${queue.backlog} pending`);
728
+ * }
729
+ * ```
730
+ */
731
+ export const OrgAnalyticsSchema = z.object({
732
+ /** Organization identifier. */
733
+ org_id: z.string(),
734
+ /** Time period for the analytics data. */
735
+ period: TimePeriodSchema,
736
+ /** Aggregated summary across all queues. */
737
+ summary: OrgAnalyticsSummarySchema,
738
+ /** Per-queue summary statistics. */
739
+ queues: z.array(QueueSummarySchema),
740
+ });
741
+ /**
742
+ * Single data point in a time series.
743
+ *
744
+ * Represents metrics for one time bucket (minute, hour, or day).
745
+ * Used for building charts and visualizing trends over time.
746
+ *
747
+ * @example
748
+ * ```typescript
749
+ * const { series } = await getQueueTimeSeries(client, 'my-queue', { granularity: 'hour' });
750
+ * for (const point of series) {
751
+ * console.log(`${point.timestamp}: ${point.throughput} msg/h, ${point.avg_latency_ms}ms avg`);
752
+ * }
753
+ * ```
754
+ */
755
+ export const TimeSeriesPointSchema = z.object({
756
+ /** ISO8601 timestamp for the start of this time bucket. */
757
+ timestamp: z.string(),
758
+ /** Messages published during this bucket. */
759
+ throughput: z.number(),
760
+ /** Messages delivered during this bucket. */
761
+ delivery_rate: z.number(),
762
+ /** Messages acknowledged during this bucket. */
763
+ ack_rate: z.number(),
764
+ /** Messages that failed during this bucket. */
765
+ error_rate: z.number(),
766
+ /** Average delivery latency in milliseconds for this bucket. */
767
+ avg_latency_ms: z.number(),
768
+ /** 95th percentile latency in milliseconds for this bucket. */
769
+ p95_latency_ms: z.number().optional(),
770
+ /** Queue backlog at the end of this bucket (snapshot). */
771
+ backlog: z.number().optional(),
772
+ /** Messages in flight at the end of this bucket (snapshot). */
773
+ messages_in_flight: z.number().optional(),
774
+ });
775
+ /**
776
+ * Time series analytics data for charting and visualization.
777
+ *
778
+ * Contains an array of data points at the requested granularity for building
779
+ * time-based charts and dashboards.
780
+ *
781
+ * @example
782
+ * ```typescript
783
+ * const timeseries = await getQueueTimeSeries(client, 'order-processing', {
784
+ * granularity: 'hour',
785
+ * start: '2026-01-14T00:00:00Z',
786
+ * end: '2026-01-15T00:00:00Z',
787
+ * });
788
+ *
789
+ * // Plot throughput over time
790
+ * const chartData = timeseries.series.map(p => ({
791
+ * x: new Date(p.timestamp),
792
+ * y: p.throughput,
793
+ * }));
794
+ * ```
795
+ */
796
+ export const TimeSeriesDataSchema = z.object({
797
+ /** Unique queue identifier. */
798
+ queue_id: z.string(),
799
+ /** Human-readable queue name. */
800
+ queue_name: z.string(),
801
+ /** Time period and granularity for the data. */
802
+ period: TimePeriodSchema,
803
+ /** Array of time-bucketed data points. */
804
+ series: z.array(TimeSeriesPointSchema),
805
+ });
806
+ /**
807
+ * Real-time stats event from SSE stream.
808
+ *
809
+ * Represents a single snapshot of queue statistics delivered via Server-Sent Events.
810
+ * Events are pushed at the interval specified when opening the stream.
811
+ *
812
+ * @example
813
+ * ```typescript
814
+ * const stream = streamQueueAnalytics(client, 'my-queue', { interval: 5 });
815
+ * for await (const event of stream) {
816
+ * updateDashboard({
817
+ * backlog: event.backlog,
818
+ * throughput: event.throughput_1m,
819
+ * latency: event.avg_latency_ms,
820
+ * consumers: event.active_consumers,
821
+ * });
822
+ * }
823
+ * ```
824
+ */
825
+ export const SSEStatsEventSchema = z.object({
826
+ /** ISO8601 timestamp when this snapshot was taken. */
827
+ timestamp: z.string(),
828
+ /** Current number of pending messages. */
829
+ backlog: z.number(),
830
+ /** Current number of messages being processed. */
831
+ messages_in_flight: z.number(),
832
+ /** Messages published in the last minute. */
833
+ throughput_1m: z.number(),
834
+ /** Messages delivered in the last minute. */
835
+ delivery_rate_1m: z.number(),
836
+ /** Messages that failed in the last minute. */
837
+ error_rate_1m: z.number(),
838
+ /** Current average delivery latency in milliseconds. */
839
+ avg_latency_ms: z.number(),
840
+ /** Current number of connected consumers. */
841
+ active_consumers: z.number(),
842
+ });
843
+ // ============================================================================
844
+ // Source Types
845
+ // ============================================================================
846
+ /**
847
+ * Source authentication type schema.
848
+ */
849
+ export const SourceAuthTypeSchema = z.enum(['none', 'basic', 'header']);
850
+ /**
851
+ * Queue source schema representing an HTTP ingestion endpoint.
852
+ *
853
+ * Sources provide public URLs for ingesting data into queues from external sources.
854
+ * They support various authentication methods to secure access.
855
+ *
856
+ * @example
857
+ * ```typescript
858
+ * const source = await getSource(client, 'my-queue', 'qsrc_abc123');
859
+ * console.log(`Source URL: ${source.url}`);
860
+ * console.log(`Success rate: ${source.success_count}/${source.request_count}`);
861
+ * ```
862
+ */
863
+ export const SourceSchema = z.object({
864
+ /** Unique identifier for the source (prefixed with qsrc_). */
865
+ id: z.string(),
866
+ /** ID of the queue this source publishes to. */
867
+ queue_id: z.string(),
868
+ /** Human-readable source name. */
869
+ name: z.string(),
870
+ /** Optional description of the source's purpose. */
871
+ description: z.string().nullable().optional(),
872
+ /** Authentication type for the public endpoint. */
873
+ auth_type: SourceAuthTypeSchema,
874
+ /** Whether the source is enabled. */
875
+ enabled: z.boolean(),
876
+ /** Public URL to send data to this source. */
877
+ url: z.string(),
878
+ /** Total number of requests received. */
879
+ request_count: z.number(),
880
+ /** Number of successful ingestions. */
881
+ success_count: z.number(),
882
+ /** Number of failed ingestions. */
883
+ failure_count: z.number(),
884
+ /** ISO 8601 timestamp of last request. */
885
+ last_request_at: z.string().nullable().optional(),
886
+ /** ISO 8601 timestamp of last success. */
887
+ last_success_at: z.string().nullable().optional(),
888
+ /** ISO 8601 timestamp of last failure. */
889
+ last_failure_at: z.string().nullable().optional(),
890
+ /** Error message from last failure. */
891
+ last_failure_error: z.string().nullable().optional(),
892
+ /** ISO 8601 timestamp when the source was created. */
893
+ created_at: z.string(),
894
+ /** ISO 8601 timestamp when the source was last updated. */
895
+ updated_at: z.string(),
896
+ });
897
+ /**
898
+ * Create source request schema.
899
+ *
900
+ * @example
901
+ * ```typescript
902
+ * const request: CreateSourceRequest = {
903
+ * name: 'webhook-ingestion',
904
+ * description: 'Receives webhooks from external service',
905
+ * auth_type: 'header',
906
+ * auth_value: 'Bearer my-secret-token',
907
+ * };
908
+ * ```
909
+ */
910
+ export const CreateSourceRequestSchema = z.object({
911
+ /** Human-readable name for the source. */
912
+ name: z.string().min(1).max(256),
913
+ /** Optional description. */
914
+ description: z.string().max(1024).optional(),
915
+ /** Authentication type (default: none). */
916
+ auth_type: SourceAuthTypeSchema.optional().default('none'),
917
+ /** Authentication value (format depends on auth_type). */
918
+ auth_value: z.string().optional(),
919
+ });
920
+ /**
921
+ * Update source request schema.
922
+ *
923
+ * All fields are optional - only provided fields will be updated.
924
+ *
925
+ * @example
926
+ * ```typescript
927
+ * // Disable a source
928
+ * const request: UpdateSourceRequest = { enabled: false };
929
+ *
930
+ * // Update authentication
931
+ * const request: UpdateSourceRequest = {
932
+ * auth_type: 'basic',
933
+ * auth_value: 'user:password',
934
+ * };
935
+ * ```
936
+ */
937
+ export const UpdateSourceRequestSchema = z.object({
938
+ /** New name for the source. */
939
+ name: z.string().min(1).max(256).optional(),
940
+ /** New description. */
941
+ description: z.string().max(1024).nullable().optional(),
942
+ /** New authentication type. */
943
+ auth_type: SourceAuthTypeSchema.optional(),
944
+ /** New authentication value. */
945
+ auth_value: z.string().optional(),
946
+ /** Whether the source is enabled. */
947
+ enabled: z.boolean().optional(),
948
+ });
949
+ //# sourceMappingURL=types.js.map