@upstash/qstash 2.5.1 → 2.5.3

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.
package/index.d.mts CHANGED
@@ -1,5 +1,3 @@
1
- import { BodyInit, HeadersInit } from 'undici';
2
-
3
1
  /**
4
2
  * Necessary to verify the signature of a request.
5
3
  */
@@ -61,6 +59,23 @@ declare class Receiver {
61
59
  private verifyWithKey;
62
60
  }
63
61
 
62
+ type State = "CREATED" | "ACTIVE" | "DELIVERED" | "ERROR" | "RETRY" | "FAILED";
63
+ type Event = {
64
+ time: number;
65
+ state: State;
66
+ messageId: string;
67
+ nextDeliveryTime?: number;
68
+ error?: string;
69
+ url: string;
70
+ topicName?: string;
71
+ endpointName?: string;
72
+ };
73
+ type WithCursor<T> = T & {
74
+ cursor?: number;
75
+ };
76
+ type BodyInit = Blob | FormData | URLSearchParams | ReadableStream<Uint8Array> | string;
77
+ type HeadersInit = Headers | Record<string, string> | [string, string][] | IterableIterator<[string, string]>;
78
+
64
79
  type UpstashRequest = {
65
80
  /**
66
81
  * The path to the resource.
@@ -160,6 +175,10 @@ type Message = {
160
175
  * The failure callback url if configured.
161
176
  */
162
177
  failureCallback?: string;
178
+ /**
179
+ * The queue name if this message was sent to a queue.
180
+ */
181
+ queueName?: string;
163
182
  };
164
183
  declare class Messages {
165
184
  private readonly http;
@@ -213,7 +232,6 @@ type QueueResponse = {
213
232
  type UpsertQueueRequest = {
214
233
  parallelism: number;
215
234
  };
216
- type EnqueueRequest = PublishRequest;
217
235
  declare class Queue {
218
236
  private readonly http;
219
237
  private readonly queueName;
@@ -237,7 +255,7 @@ declare class Queue {
237
255
  /**
238
256
  * Enqueue a message to a queue.
239
257
  */
240
- enqueue(request: EnqueueRequest): Promise<PublishResponse<PublishRequest>>;
258
+ enqueue<TRequest extends PublishRequest>(request: TRequest): Promise<PublishResponse<TRequest>>;
241
259
  /**
242
260
  * Enqueue a message to a queue, serializing the body to JSON.
243
261
  */
@@ -378,6 +396,14 @@ type RemoveEndpointsRequest = {
378
396
  })[];
379
397
  };
380
398
  type Topic = {
399
+ /**
400
+ * A unix timestamp (milliseconds)
401
+ */
402
+ createdAt: number;
403
+ /**
404
+ * A unix timestamp (milliseconds)
405
+ */
406
+ updatedAt: number;
381
407
  /**
382
408
  * The name of this topic.
383
409
  */
@@ -412,21 +438,6 @@ declare class Topics {
412
438
  delete(name: string): Promise<void>;
413
439
  }
414
440
 
415
- type State = "CREATED" | "ACTIVE" | "DELIVERED" | "ERROR" | "RETRY" | "FAILED";
416
- type Event = {
417
- time: number;
418
- state: State;
419
- messageId: string;
420
- nextDeliveryTime?: number;
421
- error?: string;
422
- url: string;
423
- topicName?: string;
424
- endpointName?: string;
425
- };
426
- type WithCursor<T> = T & {
427
- cursor?: number;
428
- };
429
-
430
441
  type ClientConfig = {
431
442
  /**
432
443
  * Url of the qstash api server.
@@ -445,6 +456,9 @@ type ClientConfig = {
445
456
  */
446
457
  retry?: RetryConfig;
447
458
  };
459
+ type PublishBatchRequest<TBody = BodyInit> = PublishRequest<TBody> & {
460
+ queueName?: string;
461
+ };
448
462
  type PublishRequest<TBody = BodyInit> = {
449
463
  /**
450
464
  * The message to send.
@@ -624,11 +638,11 @@ declare class Client {
624
638
  /**
625
639
  * Batch publish messages to QStash.
626
640
  */
627
- batch(request: PublishRequest[]): Promise<PublishResponse<PublishRequest>[]>;
641
+ batch(request: PublishBatchRequest[]): Promise<PublishResponse<PublishRequest>[]>;
628
642
  /**
629
643
  * Batch publish messages to QStash, serializing each body to JSON.
630
644
  */
631
- batchJSON<TBody = unknown, TRequest extends PublishRequest<TBody> = PublishRequest<TBody>>(request: TRequest[]): Promise<PublishResponse<TRequest>[]>;
645
+ batchJSON<TBody = unknown, TRequest extends PublishBatchRequest<TBody> = PublishBatchRequest<TBody>>(request: TRequest[]): Promise<PublishResponse<TRequest>[]>;
632
646
  /**
633
647
  * Retrieve your logs.
634
648
  *
@@ -670,4 +684,4 @@ declare class QstashRatelimitError extends QstashError {
670
684
  constructor(args: unknown);
671
685
  }
672
686
 
673
- export { type AddEndpointsRequest, Client, type CreateScheduleRequest, type Endpoint, type Event, type EventsRequest, type GetEventsResponse, type Message, Messages, type PublishJsonRequest, type PublishRequest, type PublishResponse, type PublishToTopicResponse, type PublishToUrlResponse, QstashError, QstashRatelimitError, type QueueRequest, Receiver, type ReceiverConfig, type RemoveEndpointsRequest, type Schedule, Schedules, SignatureError, type State, type Topic, Topics, type VerifyRequest, type WithCursor };
687
+ export { type AddEndpointsRequest, type BodyInit, Client, type CreateScheduleRequest, type Endpoint, type Event, type EventsRequest, type GetEventsResponse, type HeadersInit, type Message, Messages, type PublishBatchRequest, type PublishJsonRequest, type PublishRequest, type PublishResponse, type PublishToTopicResponse, type PublishToUrlResponse, QstashError, QstashRatelimitError, type QueueRequest, Receiver, type ReceiverConfig, type RemoveEndpointsRequest, type Schedule, Schedules, SignatureError, type State, type Topic, Topics, type VerifyRequest, type WithCursor };
package/index.d.ts CHANGED
@@ -1,5 +1,3 @@
1
- import { BodyInit, HeadersInit } from 'undici';
2
-
3
1
  /**
4
2
  * Necessary to verify the signature of a request.
5
3
  */
@@ -61,6 +59,23 @@ declare class Receiver {
61
59
  private verifyWithKey;
62
60
  }
63
61
 
62
+ type State = "CREATED" | "ACTIVE" | "DELIVERED" | "ERROR" | "RETRY" | "FAILED";
63
+ type Event = {
64
+ time: number;
65
+ state: State;
66
+ messageId: string;
67
+ nextDeliveryTime?: number;
68
+ error?: string;
69
+ url: string;
70
+ topicName?: string;
71
+ endpointName?: string;
72
+ };
73
+ type WithCursor<T> = T & {
74
+ cursor?: number;
75
+ };
76
+ type BodyInit = Blob | FormData | URLSearchParams | ReadableStream<Uint8Array> | string;
77
+ type HeadersInit = Headers | Record<string, string> | [string, string][] | IterableIterator<[string, string]>;
78
+
64
79
  type UpstashRequest = {
65
80
  /**
66
81
  * The path to the resource.
@@ -160,6 +175,10 @@ type Message = {
160
175
  * The failure callback url if configured.
161
176
  */
162
177
  failureCallback?: string;
178
+ /**
179
+ * The queue name if this message was sent to a queue.
180
+ */
181
+ queueName?: string;
163
182
  };
164
183
  declare class Messages {
165
184
  private readonly http;
@@ -213,7 +232,6 @@ type QueueResponse = {
213
232
  type UpsertQueueRequest = {
214
233
  parallelism: number;
215
234
  };
216
- type EnqueueRequest = PublishRequest;
217
235
  declare class Queue {
218
236
  private readonly http;
219
237
  private readonly queueName;
@@ -237,7 +255,7 @@ declare class Queue {
237
255
  /**
238
256
  * Enqueue a message to a queue.
239
257
  */
240
- enqueue(request: EnqueueRequest): Promise<PublishResponse<PublishRequest>>;
258
+ enqueue<TRequest extends PublishRequest>(request: TRequest): Promise<PublishResponse<TRequest>>;
241
259
  /**
242
260
  * Enqueue a message to a queue, serializing the body to JSON.
243
261
  */
@@ -378,6 +396,14 @@ type RemoveEndpointsRequest = {
378
396
  })[];
379
397
  };
380
398
  type Topic = {
399
+ /**
400
+ * A unix timestamp (milliseconds)
401
+ */
402
+ createdAt: number;
403
+ /**
404
+ * A unix timestamp (milliseconds)
405
+ */
406
+ updatedAt: number;
381
407
  /**
382
408
  * The name of this topic.
383
409
  */
@@ -412,21 +438,6 @@ declare class Topics {
412
438
  delete(name: string): Promise<void>;
413
439
  }
414
440
 
415
- type State = "CREATED" | "ACTIVE" | "DELIVERED" | "ERROR" | "RETRY" | "FAILED";
416
- type Event = {
417
- time: number;
418
- state: State;
419
- messageId: string;
420
- nextDeliveryTime?: number;
421
- error?: string;
422
- url: string;
423
- topicName?: string;
424
- endpointName?: string;
425
- };
426
- type WithCursor<T> = T & {
427
- cursor?: number;
428
- };
429
-
430
441
  type ClientConfig = {
431
442
  /**
432
443
  * Url of the qstash api server.
@@ -445,6 +456,9 @@ type ClientConfig = {
445
456
  */
446
457
  retry?: RetryConfig;
447
458
  };
459
+ type PublishBatchRequest<TBody = BodyInit> = PublishRequest<TBody> & {
460
+ queueName?: string;
461
+ };
448
462
  type PublishRequest<TBody = BodyInit> = {
449
463
  /**
450
464
  * The message to send.
@@ -624,11 +638,11 @@ declare class Client {
624
638
  /**
625
639
  * Batch publish messages to QStash.
626
640
  */
627
- batch(request: PublishRequest[]): Promise<PublishResponse<PublishRequest>[]>;
641
+ batch(request: PublishBatchRequest[]): Promise<PublishResponse<PublishRequest>[]>;
628
642
  /**
629
643
  * Batch publish messages to QStash, serializing each body to JSON.
630
644
  */
631
- batchJSON<TBody = unknown, TRequest extends PublishRequest<TBody> = PublishRequest<TBody>>(request: TRequest[]): Promise<PublishResponse<TRequest>[]>;
645
+ batchJSON<TBody = unknown, TRequest extends PublishBatchRequest<TBody> = PublishBatchRequest<TBody>>(request: TRequest[]): Promise<PublishResponse<TRequest>[]>;
632
646
  /**
633
647
  * Retrieve your logs.
634
648
  *
@@ -670,4 +684,4 @@ declare class QstashRatelimitError extends QstashError {
670
684
  constructor(args: unknown);
671
685
  }
672
686
 
673
- export { type AddEndpointsRequest, Client, type CreateScheduleRequest, type Endpoint, type Event, type EventsRequest, type GetEventsResponse, type Message, Messages, type PublishJsonRequest, type PublishRequest, type PublishResponse, type PublishToTopicResponse, type PublishToUrlResponse, QstashError, QstashRatelimitError, type QueueRequest, Receiver, type ReceiverConfig, type RemoveEndpointsRequest, type Schedule, Schedules, SignatureError, type State, type Topic, Topics, type VerifyRequest, type WithCursor };
687
+ export { type AddEndpointsRequest, type BodyInit, Client, type CreateScheduleRequest, type Endpoint, type Event, type EventsRequest, type GetEventsResponse, type HeadersInit, type Message, Messages, type PublishBatchRequest, type PublishJsonRequest, type PublishRequest, type PublishResponse, type PublishToTopicResponse, type PublishToUrlResponse, QstashError, QstashRatelimitError, type QueueRequest, Receiver, type ReceiverConfig, type RemoveEndpointsRequest, type Schedule, Schedules, SignatureError, type State, type Topic, Topics, type VerifyRequest, type WithCursor };
package/index.js CHANGED
@@ -151,7 +151,6 @@ var Messages = class {
151
151
  };
152
152
 
153
153
  // src/client/utils.ts
154
- var _undici = require('undici');
155
154
  var isIgnoredHeader = (header) => {
156
155
  const lowerCaseHeader = header.toLowerCase();
157
156
  return lowerCaseHeader.startsWith("content-type") || lowerCaseHeader.startsWith("upstash-");
@@ -168,7 +167,7 @@ function prefixHeaders(headers) {
168
167
  return headers;
169
168
  }
170
169
  function processHeaders(request) {
171
- const headers = prefixHeaders(new (0, _undici.Headers)(request.headers));
170
+ const headers = prefixHeaders(new Headers(request.headers));
172
171
  headers.set("Upstash-Method", _nullishCoalesce(request.method, () => ( "POST")));
173
172
  if (request.delay !== void 0) {
174
173
  headers.set("Upstash-Delay", `${request.delay.toFixed(0)}s`);
@@ -195,7 +194,6 @@ function processHeaders(request) {
195
194
  }
196
195
 
197
196
  // src/client/queue.ts
198
-
199
197
  var Queue = class {
200
198
 
201
199
 
@@ -279,7 +277,7 @@ var Queue = class {
279
277
  * Enqueue a message to a queue, serializing the body to JSON.
280
278
  */
281
279
  async enqueueJSON(request) {
282
- const headers = prefixHeaders(new (0, _undici.Headers)(request.headers));
280
+ const headers = prefixHeaders(new Headers(request.headers));
283
281
  headers.set("Content-Type", "application/json");
284
282
  const response = await this.enqueue({
285
283
  ...request,
@@ -291,7 +289,6 @@ var Queue = class {
291
289
  };
292
290
 
293
291
  // src/client/schedules.ts
294
-
295
292
  var Schedules = class {
296
293
 
297
294
  constructor(http) {
@@ -301,7 +298,7 @@ var Schedules = class {
301
298
  * Create a schedule
302
299
  */
303
300
  async create(request) {
304
- const headers = prefixHeaders(new (0, _undici.Headers)(request.headers));
301
+ const headers = prefixHeaders(new Headers(request.headers));
305
302
  if (!headers.has("Content-Type")) {
306
303
  headers.set("Content-Type", "application/json");
307
304
  }
@@ -419,7 +416,6 @@ var Topics = class {
419
416
  };
420
417
 
421
418
  // src/client/client.ts
422
-
423
419
  var Client = class {
424
420
 
425
421
  constructor(config) {
@@ -484,7 +480,7 @@ var Client = class {
484
480
  * and sets the `Content-Type` header to `application/json`.
485
481
  */
486
482
  async publishJSON(request) {
487
- const headers = prefixHeaders(new (0, _undici.Headers)(request.headers));
483
+ const headers = prefixHeaders(new Headers(request.headers));
488
484
  headers.set("Content-Type", "application/json");
489
485
  const response = await this.publish({
490
486
  ...request,
@@ -504,7 +500,8 @@ var Client = class {
504
500
  messages.push({
505
501
  destination: _nullishCoalesce(message.url, () => ( message.topic)),
506
502
  headers: headerEntries,
507
- body: message.body
503
+ body: message.body,
504
+ ...message.queueName && { queue: message.queueName }
508
505
  });
509
506
  }
510
507
  const response = await this.http.request({
@@ -525,7 +522,7 @@ var Client = class {
525
522
  if ("body" in message) {
526
523
  message.body = JSON.stringify(message.body);
527
524
  }
528
- message.headers = new (0, _undici.Headers)(message.headers);
525
+ message.headers = new Headers(message.headers);
529
526
  message.headers.set("Content-Type", "application/json");
530
527
  }
531
528
  const response = await this.batch(request);
package/index.mjs CHANGED
@@ -151,7 +151,6 @@ var Messages = class {
151
151
  };
152
152
 
153
153
  // src/client/utils.ts
154
- import { Headers as Headers2 } from "undici";
155
154
  var isIgnoredHeader = (header) => {
156
155
  const lowerCaseHeader = header.toLowerCase();
157
156
  return lowerCaseHeader.startsWith("content-type") || lowerCaseHeader.startsWith("upstash-");
@@ -168,7 +167,7 @@ function prefixHeaders(headers) {
168
167
  return headers;
169
168
  }
170
169
  function processHeaders(request) {
171
- const headers = prefixHeaders(new Headers2(request.headers));
170
+ const headers = prefixHeaders(new Headers(request.headers));
172
171
  headers.set("Upstash-Method", request.method ?? "POST");
173
172
  if (request.delay !== void 0) {
174
173
  headers.set("Upstash-Delay", `${request.delay.toFixed(0)}s`);
@@ -195,7 +194,6 @@ function processHeaders(request) {
195
194
  }
196
195
 
197
196
  // src/client/queue.ts
198
- import { Headers as Headers3 } from "undici";
199
197
  var Queue = class {
200
198
  http;
201
199
  queueName;
@@ -279,7 +277,7 @@ var Queue = class {
279
277
  * Enqueue a message to a queue, serializing the body to JSON.
280
278
  */
281
279
  async enqueueJSON(request) {
282
- const headers = prefixHeaders(new Headers3(request.headers));
280
+ const headers = prefixHeaders(new Headers(request.headers));
283
281
  headers.set("Content-Type", "application/json");
284
282
  const response = await this.enqueue({
285
283
  ...request,
@@ -291,7 +289,6 @@ var Queue = class {
291
289
  };
292
290
 
293
291
  // src/client/schedules.ts
294
- import { Headers as Headers4 } from "undici";
295
292
  var Schedules = class {
296
293
  http;
297
294
  constructor(http) {
@@ -301,7 +298,7 @@ var Schedules = class {
301
298
  * Create a schedule
302
299
  */
303
300
  async create(request) {
304
- const headers = prefixHeaders(new Headers4(request.headers));
301
+ const headers = prefixHeaders(new Headers(request.headers));
305
302
  if (!headers.has("Content-Type")) {
306
303
  headers.set("Content-Type", "application/json");
307
304
  }
@@ -419,7 +416,6 @@ var Topics = class {
419
416
  };
420
417
 
421
418
  // src/client/client.ts
422
- import { Headers as Headers5 } from "undici";
423
419
  var Client = class {
424
420
  http;
425
421
  constructor(config) {
@@ -484,7 +480,7 @@ var Client = class {
484
480
  * and sets the `Content-Type` header to `application/json`.
485
481
  */
486
482
  async publishJSON(request) {
487
- const headers = prefixHeaders(new Headers5(request.headers));
483
+ const headers = prefixHeaders(new Headers(request.headers));
488
484
  headers.set("Content-Type", "application/json");
489
485
  const response = await this.publish({
490
486
  ...request,
@@ -504,7 +500,8 @@ var Client = class {
504
500
  messages.push({
505
501
  destination: message.url ?? message.topic,
506
502
  headers: headerEntries,
507
- body: message.body
503
+ body: message.body,
504
+ ...message.queueName && { queue: message.queueName }
508
505
  });
509
506
  }
510
507
  const response = await this.http.request({
@@ -525,7 +522,7 @@ var Client = class {
525
522
  if ("body" in message) {
526
523
  message.body = JSON.stringify(message.body);
527
524
  }
528
- message.headers = new Headers5(message.headers);
525
+ message.headers = new Headers(message.headers);
529
526
  message.headers.set("Content-Type", "application/json");
530
527
  }
531
528
  const response = await this.batch(request);
package/package.json CHANGED
@@ -1 +1 @@
1
- {"version":"v2.5.1","name":"@upstash/qstash","description":"Official Typescript client for QStash","author":"Andreas Thomas <dev@chronark.com>","license":"MIT","homepage":"https://github.com/upstash/sdk-qstash-ts#readme","repository":{"type":"git","url":"git+https://github.com/upstash/sdk-qstash-ts.git"},"bugs":{"url":"https://github.com/upstash/sdk-qstash-ts/issues"},"main":"./index.js","module":"./index.mjs","types":"./index.d.ts","files":["./**"],"exports":{".":{"import":"./index.mjs","require":"./index.js"},"./nextjs":{"import":"./nextjs.mjs","require":"./nextjs.js"},"./dist/nextjs":{"import":"./nextjs.mjs","require":"./nextjs.js"}},"typesVersions":{"*":{"nextjs":["./nextjs.d.ts"]}},"keywords":["qstash","queue","events","serverless","upstash"],"scripts":{"build":"tsup && cp README.md ./dist/ && cp package.json ./dist/ && cp LICENSE ./dist/","test":"bun test","fmt":"prettier --write .","lint":"tsc && eslint \"src/**/*.{js,ts,tsx}\" --quiet --fix"},"devDependencies":{"@biomejs/biome":"^1.3.3","@commitlint/cli":"^19.2.2","@commitlint/config-conventional":"^19.2.2","@types/crypto-js":"^4.2.0","@types/node":"^20.5.7","@typescript-eslint/eslint-plugin":"^7.0.1","@typescript-eslint/parser":"^7.0.1","bun-types":"latest","eslint":"^8","eslint-plugin-unicorn":"^51.0.1","husky":"^9.0.10","next":"^14.0.2","prettier":"^3.2.5","tsup":"latest","typescript":"^5.4.5","vitest":"latest"},"dependencies":{"crypto-js":">=4.2.0","jose":"^ 5.2.3","undici":"^6.16.0"}}
1
+ {"version":"v2.5.3","name":"@upstash/qstash","description":"Official Typescript client for QStash","author":"Andreas Thomas <dev@chronark.com>","license":"MIT","homepage":"https://github.com/upstash/sdk-qstash-ts#readme","repository":{"type":"git","url":"git+https://github.com/upstash/sdk-qstash-ts.git"},"bugs":{"url":"https://github.com/upstash/sdk-qstash-ts/issues"},"main":"./index.js","module":"./index.mjs","types":"./index.d.ts","files":["./**"],"exports":{".":{"import":"./index.mjs","require":"./index.js"},"./nextjs":{"import":"./nextjs.mjs","require":"./nextjs.js"},"./dist/nextjs":{"import":"./nextjs.mjs","require":"./nextjs.js"}},"typesVersions":{"*":{"nextjs":["./nextjs.d.ts"]}},"keywords":["qstash","queue","events","serverless","upstash"],"scripts":{"build":"tsup && cp README.md ./dist/ && cp package.json ./dist/ && cp LICENSE ./dist/","test":"bun test","fmt":"prettier --write .","lint":"tsc && eslint \"src/**/*.{js,ts,tsx}\" --quiet --fix"},"devDependencies":{"@commitlint/cli":"^19.2.2","@commitlint/config-conventional":"^19.2.2","@types/bun":"^1.1.1","@types/crypto-js":"^4.2.0","@typescript-eslint/eslint-plugin":"^7.0.1","@typescript-eslint/parser":"^7.0.1","bun-types":"^1.1.7","eslint":"^8","eslint-plugin-unicorn":"^51.0.1","husky":"^9.0.10","next":"^14.0.2","prettier":"^3.2.5","tsup":"latest","typescript":"^5.4.5","undici-types":"^6.16.0","vitest":"latest"},"dependencies":{"crypto-js":">=4.2.0","jose":"^ 5.2.3"}}