@vercel/queue 0.0.0-alpha.34 → 0.0.0-alpha.36

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.
@@ -1,411 +0,0 @@
1
- /**
2
- * Serializer/Deserializer interface for message payloads
3
- */
4
- interface Transport<T = unknown> {
5
- /**
6
- * Serialize a value to a buffer or stream for transmission
7
- */
8
- serialize(value: T): Buffer | ReadableStream<Uint8Array>;
9
- /**
10
- * Deserialize a readable stream back to the original value
11
- */
12
- deserialize(stream: ReadableStream<Uint8Array>): Promise<T>;
13
- /**
14
- * Optional cleanup method for deserialized payloads that may contain resources
15
- * Should be called when the payload is no longer needed, especially in error cases
16
- * @param payload The deserialized payload to clean up
17
- */
18
- finalize?(payload: T): Promise<void>;
19
- /**
20
- * MIME type for this serialization format
21
- */
22
- contentType: string;
23
- }
24
- /**
25
- * Built-in JSON serializer/deserializer
26
- * This implementation reads the entire stream into memory for JSON parsing
27
- */
28
- declare class JsonTransport<T = unknown> implements Transport<T> {
29
- readonly contentType = "application/json";
30
- readonly replacer?: Parameters<typeof JSON.parse>[1];
31
- readonly reviver?: Parameters<typeof JSON.parse>[1];
32
- constructor(options?: {
33
- replacer?: Parameters<typeof JSON.parse>[1];
34
- reviver?: Parameters<typeof JSON.parse>[1];
35
- });
36
- serialize(value: T): Buffer;
37
- deserialize(stream: ReadableStream<Uint8Array>): Promise<T>;
38
- }
39
- /**
40
- * Built-in Buffer serializer/deserializer (reads entire stream into a Buffer)
41
- */
42
- declare class BufferTransport implements Transport<Buffer> {
43
- readonly contentType = "application/octet-stream";
44
- serialize(value: Buffer): Buffer;
45
- deserialize(stream: ReadableStream<Uint8Array>): Promise<Buffer>;
46
- }
47
- /**
48
- * Stream serializer/deserializer (pass-through for streaming binary data)
49
- * This is ideal for large payloads that don't need to be buffered in memory
50
- *
51
- * IMPORTANT: When using StreamTransport, you must call finalize(payload) when done
52
- * processing the message to prevent resource leaks, especially in error cases.
53
- * ConsumerGroup handles this automatically, but direct Client usage requires manual cleanup.
54
- *
55
- * Example usage:
56
- * ```typescript
57
- * const transport = new StreamTransport();
58
- * try {
59
- * for await (const message of client.receiveMessages(options, transport)) {
60
- * // Process the stream...
61
- * const reader = message.payload.getReader();
62
- * // ... handle stream data
63
- * }
64
- * } catch (error) {
65
- * // Cleanup is handled automatically by ConsumerGroup
66
- * // or manually: await transport.finalize(message.payload);
67
- * }
68
- */
69
- declare class StreamTransport implements Transport<ReadableStream<Uint8Array>> {
70
- readonly contentType = "application/octet-stream";
71
- serialize(value: ReadableStream<Uint8Array>): ReadableStream<Uint8Array>;
72
- deserialize(stream: ReadableStream<Uint8Array>): Promise<ReadableStream<Uint8Array>>;
73
- finalize(payload: ReadableStream<Uint8Array>): Promise<void>;
74
- }
75
-
76
- /**
77
- * Vercel Queue Service client types
78
- */
79
-
80
- interface QueueClientOptions {
81
- /**
82
- * Base URL for the Vercel Queue Service API
83
- * Can also be set via VERCEL_QUEUE_BASE_URL environment variable
84
- * @default "https://vercel-queue.com"
85
- */
86
- baseUrl?: string;
87
- /**
88
- * Base path for API endpoints
89
- * Can also be set via VERCEL_QUEUE_BASE_PATH environment variable
90
- * @default "/api/v3/topic"
91
- */
92
- basePath?: string;
93
- /**
94
- * Authentication token for the Vercel Queue Service API
95
- * If not provided, the client will attempt to get a token via OIDC
96
- */
97
- token?: string;
98
- /**
99
- * Custom headers to include in all requests
100
- */
101
- headers?: Record<string, string>;
102
- /**
103
- * Default deployment ID to include in requests
104
- * If not provided, defaults to VERCEL_DEPLOYMENT_ID environment variable
105
- */
106
- deploymentId?: string;
107
- /**
108
- * Whether to pin messages to the current deployment when publishing.
109
- * When true, sends VERCEL_DEPLOYMENT_ID from environment, ensuring
110
- * messages are routed to consumers on the same deployment.
111
- * Only affects send/publish operations - consume operations always
112
- * send deployment ID in production to identify the processing deployment.
113
- * Ignored in development mode (deployment ID is never sent locally).
114
- * @default true
115
- */
116
- pinToDeployment?: boolean;
117
- }
118
- /**
119
- * Shared options for publishing messages
120
- */
121
- interface PublishOptions {
122
- /**
123
- * Unique key to prevent duplicate message submissions
124
- * @default random UUID
125
- */
126
- idempotencyKey?: string;
127
- /**
128
- * Message retention time in seconds
129
- * @default 86400 (24 hours)
130
- * @min 60
131
- * @max 86400
132
- */
133
- retentionSeconds?: number;
134
- /**
135
- * Delay delivery of the message by this many seconds
136
- * @min 0
137
- * @max retentionSeconds
138
- */
139
- delaySeconds?: number;
140
- }
141
- interface SendMessageOptions<T = unknown> extends PublishOptions {
142
- /**
143
- * The queue name to send the message to
144
- */
145
- queueName: string;
146
- /**
147
- * The message payload
148
- */
149
- payload: T;
150
- }
151
- interface SendMessageResponse {
152
- /**
153
- * The generated message ID
154
- */
155
- messageId: string;
156
- }
157
- interface Message<T = unknown> {
158
- /**
159
- * The message ID
160
- */
161
- messageId: string;
162
- /**
163
- * The deserialized message payload
164
- * Note: If using streaming transports, ensure proper cleanup by calling transport.finalize(payload)
165
- * when done processing, especially in error cases
166
- */
167
- payload: T;
168
- /**
169
- * Number of times this message has been delivered
170
- */
171
- deliveryCount: number;
172
- /**
173
- * When the message was created
174
- */
175
- createdAt: Date;
176
- /**
177
- * MIME type of the message content
178
- */
179
- contentType: string;
180
- /**
181
- * Receipt handle for this message delivery (required for delete/patch operations)
182
- */
183
- receiptHandle: string;
184
- }
185
- interface ReceiveMessagesOptions<T = unknown> {
186
- /**
187
- * The queue name to receive messages from
188
- */
189
- queueName: string;
190
- /**
191
- * Consumer group name
192
- */
193
- consumerGroup: string;
194
- /**
195
- * Time in seconds that messages will be invisible to other consumers
196
- * @default 30
197
- */
198
- visibilityTimeoutSeconds?: number;
199
- /**
200
- * Maximum number of messages to retrieve
201
- * @default 1
202
- * @max 10
203
- */
204
- limit?: number;
205
- /**
206
- * Maximum concurrent in-flight messages
207
- */
208
- maxConcurrency?: number;
209
- }
210
- interface DeleteMessageOptions {
211
- /**
212
- * The queue name the message belongs to
213
- */
214
- queueName: string;
215
- /**
216
- * Consumer group name
217
- */
218
- consumerGroup: string;
219
- /**
220
- * Receipt handle received from the message
221
- */
222
- receiptHandle: string;
223
- }
224
- interface DeleteMessageResponse {
225
- /**
226
- * Whether the message was successfully deleted
227
- */
228
- deleted: boolean;
229
- }
230
- interface ChangeVisibilityOptions {
231
- /**
232
- * The queue name the message belongs to
233
- */
234
- queueName: string;
235
- /**
236
- * Consumer group name
237
- */
238
- consumerGroup: string;
239
- /**
240
- * Receipt handle received from the message
241
- */
242
- receiptHandle: string;
243
- /**
244
- * New visibility timeout in seconds
245
- */
246
- visibilityTimeoutSeconds: number;
247
- }
248
- interface ChangeVisibilityResponse {
249
- /**
250
- * Whether the visibility was successfully updated
251
- */
252
- success: boolean;
253
- }
254
- /**
255
- * Message metadata provided to handlers
256
- */
257
- interface MessageMetadata {
258
- messageId: string;
259
- deliveryCount: number;
260
- createdAt: Date;
261
- topicName: string;
262
- consumerGroup: string;
263
- }
264
- /**
265
- * Message handler function type
266
- */
267
- type MessageHandler<T = unknown> = (message: T, metadata: MessageMetadata) => Promise<void> | void;
268
- /**
269
- * Options for creating a ConsumerGroup instance
270
- */
271
- interface ConsumerGroupOptions<T = unknown> {
272
- /**
273
- * Serializer/deserializer for the payload
274
- * @default JsonTransport instance
275
- */
276
- transport?: Transport<T>;
277
- /**
278
- * Time in seconds that messages will be invisible to other consumers
279
- * @default 30
280
- */
281
- visibilityTimeoutSeconds?: number;
282
- /**
283
- * How often to refresh the visibility timeout during processing (in seconds)
284
- * @default 10
285
- */
286
- refreshInterval?: number;
287
- }
288
- interface ReceiveMessageByIdOptions<T = unknown> {
289
- /**
290
- * The queue name to receive the message from
291
- */
292
- queueName: string;
293
- /**
294
- * Consumer group name
295
- */
296
- consumerGroup: string;
297
- /**
298
- * The message ID to retrieve
299
- */
300
- messageId: string;
301
- /**
302
- * Time in seconds that the message will be invisible to other consumers
303
- * @default 30
304
- */
305
- visibilityTimeoutSeconds?: number;
306
- /**
307
- * Maximum concurrent in-flight messages
308
- */
309
- maxConcurrency?: number;
310
- }
311
- interface ReceiveMessageByIdResponse<T = unknown> {
312
- message: Message<T>;
313
- }
314
- /**
315
- * Error thrown when a message is not found (404)
316
- */
317
- declare class MessageNotFoundError extends Error {
318
- constructor(messageId: string);
319
- }
320
- /**
321
- * Error thrown when a message is not available for processing (409)
322
- * This can happen when the message is in the wrong state, already claimed, etc.
323
- */
324
- declare class MessageNotAvailableError extends Error {
325
- constructor(messageId: string, reason?: string);
326
- }
327
- /**
328
- * Error thrown when message data is corrupted or can't be parsed
329
- */
330
- declare class MessageCorruptedError extends Error {
331
- constructor(messageId: string, reason: string);
332
- }
333
- /**
334
- * Error thrown when there are no messages available in the queue (204)
335
- */
336
- declare class QueueEmptyError extends Error {
337
- constructor(queueName: string, consumerGroup: string);
338
- }
339
- /**
340
- * Error thrown when a message is temporarily locked (423)
341
- */
342
- declare class MessageLockedError extends Error {
343
- readonly retryAfter?: number;
344
- constructor(messageId: string, retryAfter?: number);
345
- }
346
- /**
347
- * Error thrown when authentication fails (401)
348
- */
349
- declare class UnauthorizedError extends Error {
350
- constructor(message?: string);
351
- }
352
- /**
353
- * Error thrown when access is forbidden (403)
354
- */
355
- declare class ForbiddenError extends Error {
356
- constructor(message?: string);
357
- }
358
- /**
359
- * Error thrown for bad requests (400)
360
- */
361
- declare class BadRequestError extends Error {
362
- constructor(message: string);
363
- }
364
- /**
365
- * Error thrown for internal server errors (500)
366
- */
367
- declare class InternalServerError extends Error {
368
- constructor(message?: string);
369
- }
370
- /**
371
- * Error thrown when batch limit parameter is invalid
372
- */
373
- declare class InvalidLimitError extends Error {
374
- constructor(limit: number, min?: number, max?: number);
375
- }
376
- /**
377
- * Error thrown when a message has already been processed (410)
378
- */
379
- declare class MessageAlreadyProcessedError extends Error {
380
- constructor(messageId: string);
381
- }
382
- /**
383
- * Error thrown when concurrency limit is exceeded (429)
384
- */
385
- declare class ConcurrencyLimitError extends Error {
386
- readonly currentInflight?: number;
387
- readonly maxConcurrency?: number;
388
- constructor(message?: string, currentInflight?: number, maxConcurrency?: number);
389
- }
390
- /**
391
- * Error thrown when a duplicate idempotency key is detected (409)
392
- */
393
- declare class DuplicateMessageError extends Error {
394
- readonly idempotencyKey?: string;
395
- constructor(message: string, idempotencyKey?: string);
396
- }
397
- /**
398
- * Error thrown when consumer discovery fails (502)
399
- */
400
- declare class ConsumerDiscoveryError extends Error {
401
- readonly deploymentId?: string;
402
- constructor(message: string, deploymentId?: string);
403
- }
404
- /**
405
- * Error thrown when consumer registry is not configured (503)
406
- */
407
- declare class ConsumerRegistryNotConfiguredError extends Error {
408
- constructor(message?: string);
409
- }
410
-
411
- export { BufferTransport as B, type ChangeVisibilityOptions as C, type DeleteMessageOptions as D, ForbiddenError as F, InternalServerError as I, JsonTransport as J, type Message as M, type PublishOptions as P, type QueueClientOptions as Q, type ReceiveMessagesOptions as R, type SendMessageOptions as S, type Transport as T, UnauthorizedError as U, type SendMessageResponse as a, type ReceiveMessageByIdOptions as b, type ReceiveMessageByIdResponse as c, type DeleteMessageResponse as d, type ChangeVisibilityResponse as e, type MessageHandler as f, type ConsumerGroupOptions as g, StreamTransport as h, BadRequestError as i, ConcurrencyLimitError as j, ConsumerDiscoveryError as k, ConsumerRegistryNotConfiguredError as l, DuplicateMessageError as m, InvalidLimitError as n, MessageAlreadyProcessedError as o, MessageCorruptedError as p, MessageLockedError as q, MessageNotAvailableError as r, MessageNotFoundError as s, QueueEmptyError as t, type MessageMetadata as u };