@upstash/qstash 2.5.5 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +58 -1
- package/index.d.mts +157 -37
- package/index.d.ts +157 -37
- package/index.js +178 -22
- package/index.mjs +176 -20
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -13,11 +13,20 @@ var DLQ = class {
|
|
|
13
13
|
* List messages in the dlq
|
|
14
14
|
*/
|
|
15
15
|
async listMessages(options) {
|
|
16
|
-
|
|
16
|
+
const messagesPayload = await this.http.request({
|
|
17
17
|
method: "GET",
|
|
18
18
|
path: ["v2", "dlq"],
|
|
19
19
|
query: { cursor: _optionalChain([options, 'optionalAccess', _ => _.cursor]) }
|
|
20
20
|
});
|
|
21
|
+
return {
|
|
22
|
+
messages: messagesPayload.messages.map((message) => {
|
|
23
|
+
return {
|
|
24
|
+
...message,
|
|
25
|
+
urlGroup: message.topicName
|
|
26
|
+
};
|
|
27
|
+
}),
|
|
28
|
+
cursor: messagesPayload.cursor
|
|
29
|
+
};
|
|
21
30
|
}
|
|
22
31
|
/**
|
|
23
32
|
* Remove a message from the dlq using it's `dlqId`
|
|
@@ -140,14 +149,16 @@ var HttpClient = (_class = class {
|
|
|
140
149
|
}}
|
|
141
150
|
__init2() {this.processRequest = (request) => {
|
|
142
151
|
const headers = new Headers(request.headers);
|
|
143
|
-
headers.
|
|
152
|
+
if (!headers.has("Authorization")) {
|
|
153
|
+
headers.set("Authorization", this.authorization);
|
|
154
|
+
}
|
|
144
155
|
const requestOptions = {
|
|
145
156
|
method: request.method,
|
|
146
157
|
headers,
|
|
147
158
|
body: request.body,
|
|
148
159
|
keepalive: request.keepalive
|
|
149
160
|
};
|
|
150
|
-
const url = new URL([this.baseUrl, ...request.path].join("/"));
|
|
161
|
+
const url = new URL([_nullishCoalesce(request.baseUrl, () => ( this.baseUrl)), ...request.path].join("/"));
|
|
151
162
|
if (request.query) {
|
|
152
163
|
for (const [key, value] of Object.entries(request.query)) {
|
|
153
164
|
if (value !== void 0) {
|
|
@@ -192,10 +203,15 @@ var Messages = class {
|
|
|
192
203
|
* Get a message
|
|
193
204
|
*/
|
|
194
205
|
async get(messageId) {
|
|
195
|
-
|
|
206
|
+
const messagePayload = await this.http.request({
|
|
196
207
|
method: "GET",
|
|
197
208
|
path: ["v2", "messages", messageId]
|
|
198
209
|
});
|
|
210
|
+
const message = {
|
|
211
|
+
...messagePayload,
|
|
212
|
+
urlGroup: messagePayload.topicName
|
|
213
|
+
};
|
|
214
|
+
return message;
|
|
199
215
|
}
|
|
200
216
|
/**
|
|
201
217
|
* Cancel a message
|
|
@@ -209,6 +225,29 @@ var Messages = class {
|
|
|
209
225
|
}
|
|
210
226
|
};
|
|
211
227
|
|
|
228
|
+
// src/client/llm/constants.ts
|
|
229
|
+
var PROVIDER_MAP = {
|
|
230
|
+
openai: "https://api.openai.com",
|
|
231
|
+
togetherai: "https://api.together.xyz"
|
|
232
|
+
};
|
|
233
|
+
|
|
234
|
+
// src/client/llm/utils.ts
|
|
235
|
+
function appendLLMOptions(request, headers) {
|
|
236
|
+
if ("llmProvider" in request) {
|
|
237
|
+
const llmProvider = request.llmProvider;
|
|
238
|
+
if (llmProvider === "openai") {
|
|
239
|
+
const token = _nullishCoalesce(process.env.OPENAI_API_KEY, () => ( request.llmToken));
|
|
240
|
+
request.url = _nullishCoalesce(request.url, () => ( `${PROVIDER_MAP[llmProvider]}/v1/chat/completion`));
|
|
241
|
+
headers.set("Authorization", `Bearer ${token}`);
|
|
242
|
+
}
|
|
243
|
+
if (llmProvider === "togetherai") {
|
|
244
|
+
const token = _nullishCoalesce(process.env.TOGETHER_API_KEY, () => ( request.llmToken));
|
|
245
|
+
request.url = _nullishCoalesce(request.url, () => ( `${PROVIDER_MAP[llmProvider]}/v1/chat/completion`));
|
|
246
|
+
headers.set("Authorization", `Bearer ${token}`);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
212
251
|
// src/client/utils.ts
|
|
213
252
|
var isIgnoredHeader = (header) => {
|
|
214
253
|
const lowerCaseHeader = header.toLowerCase();
|
|
@@ -249,10 +288,13 @@ function processHeaders(request) {
|
|
|
249
288
|
if (request.failureCallback !== void 0) {
|
|
250
289
|
headers.set("Upstash-Failure-Callback", request.failureCallback);
|
|
251
290
|
}
|
|
291
|
+
if (request.timeout !== void 0) {
|
|
292
|
+
headers.set("Upstash-Timeout", `${request.timeout}s`);
|
|
293
|
+
}
|
|
252
294
|
return headers;
|
|
253
295
|
}
|
|
254
296
|
function getRequestPath(request) {
|
|
255
|
-
return _nullishCoalesce(_nullishCoalesce(request.url, () => ( request.
|
|
297
|
+
return _nullishCoalesce(_nullishCoalesce(request.url, () => ( request.urlGroup)), () => ( `api/${request.api}`));
|
|
256
298
|
}
|
|
257
299
|
|
|
258
300
|
// src/client/queue.ts
|
|
@@ -272,7 +314,8 @@ var Queue = class {
|
|
|
272
314
|
}
|
|
273
315
|
const body = {
|
|
274
316
|
queueName: this.queueName,
|
|
275
|
-
parallelism: request.parallelism
|
|
317
|
+
parallelism: _nullishCoalesce(request.parallelism, () => ( 1)),
|
|
318
|
+
paused: _nullishCoalesce(request.paused, () => ( false))
|
|
276
319
|
};
|
|
277
320
|
await this.http.request({
|
|
278
321
|
method: "POST",
|
|
@@ -341,6 +384,7 @@ var Queue = class {
|
|
|
341
384
|
async enqueueJSON(request) {
|
|
342
385
|
const headers = prefixHeaders(new Headers(request.headers));
|
|
343
386
|
headers.set("Content-Type", "application/json");
|
|
387
|
+
appendLLMOptions(request, headers);
|
|
344
388
|
const response = await this.enqueue({
|
|
345
389
|
...request,
|
|
346
390
|
body: JSON.stringify(request.body),
|
|
@@ -348,6 +392,35 @@ var Queue = class {
|
|
|
348
392
|
});
|
|
349
393
|
return response;
|
|
350
394
|
}
|
|
395
|
+
/**
|
|
396
|
+
* Pauses the queue.
|
|
397
|
+
*
|
|
398
|
+
* A paused queue will not deliver messages until
|
|
399
|
+
* it is resumed.
|
|
400
|
+
*/
|
|
401
|
+
async pause() {
|
|
402
|
+
if (!this.queueName) {
|
|
403
|
+
throw new Error("Please provide a queue name to the Queue constructor");
|
|
404
|
+
}
|
|
405
|
+
await this.http.request({
|
|
406
|
+
method: "POST",
|
|
407
|
+
path: ["v2", "queues", this.queueName, "pause"],
|
|
408
|
+
parseResponseAsJson: false
|
|
409
|
+
});
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Resumes the queue.
|
|
413
|
+
*/
|
|
414
|
+
async resume() {
|
|
415
|
+
if (!this.queueName) {
|
|
416
|
+
throw new Error("Please provide a queue name to the Queue constructor");
|
|
417
|
+
}
|
|
418
|
+
await this.http.request({
|
|
419
|
+
method: "POST",
|
|
420
|
+
path: ["v2", "queues", this.queueName, "resume"],
|
|
421
|
+
parseResponseAsJson: false
|
|
422
|
+
});
|
|
423
|
+
}
|
|
351
424
|
};
|
|
352
425
|
|
|
353
426
|
// src/client/schedules.ts
|
|
@@ -380,6 +453,9 @@ var Schedules = class {
|
|
|
380
453
|
if (request.failureCallback !== void 0) {
|
|
381
454
|
headers.set("Upstash-Failure-Callback", request.failureCallback);
|
|
382
455
|
}
|
|
456
|
+
if (request.timeout !== void 0) {
|
|
457
|
+
headers.set("Upstash-Timeout", `${request.timeout}s`);
|
|
458
|
+
}
|
|
383
459
|
return await this.http.request({
|
|
384
460
|
method: "POST",
|
|
385
461
|
headers,
|
|
@@ -415,16 +491,39 @@ var Schedules = class {
|
|
|
415
491
|
parseResponseAsJson: false
|
|
416
492
|
});
|
|
417
493
|
}
|
|
494
|
+
/**
|
|
495
|
+
* Pauses the schedule.
|
|
496
|
+
*
|
|
497
|
+
* A paused schedule will not deliver messages until
|
|
498
|
+
* it is resumed.
|
|
499
|
+
*/
|
|
500
|
+
async pause({ schedule }) {
|
|
501
|
+
await this.http.request({
|
|
502
|
+
method: "PATCH",
|
|
503
|
+
path: ["v2", "schedules", schedule, "pause"],
|
|
504
|
+
parseResponseAsJson: false
|
|
505
|
+
});
|
|
506
|
+
}
|
|
507
|
+
/**
|
|
508
|
+
* Resumes the schedule.
|
|
509
|
+
*/
|
|
510
|
+
async resume({ schedule }) {
|
|
511
|
+
await this.http.request({
|
|
512
|
+
method: "PATCH",
|
|
513
|
+
path: ["v2", "schedules", schedule, "resume"],
|
|
514
|
+
parseResponseAsJson: false
|
|
515
|
+
});
|
|
516
|
+
}
|
|
418
517
|
};
|
|
419
518
|
|
|
420
|
-
// src/client/
|
|
421
|
-
var
|
|
519
|
+
// src/client/url-groups.ts
|
|
520
|
+
var UrlGroups = class {
|
|
422
521
|
|
|
423
522
|
constructor(http) {
|
|
424
523
|
this.http = http;
|
|
425
524
|
}
|
|
426
525
|
/**
|
|
427
|
-
* Create a new
|
|
526
|
+
* Create a new url group with the given name and endpoints
|
|
428
527
|
*/
|
|
429
528
|
async addEndpoints(request) {
|
|
430
529
|
await this.http.request({
|
|
@@ -436,7 +535,7 @@ var Topics = class {
|
|
|
436
535
|
});
|
|
437
536
|
}
|
|
438
537
|
/**
|
|
439
|
-
* Remove endpoints from a
|
|
538
|
+
* Remove endpoints from a url group.
|
|
440
539
|
*/
|
|
441
540
|
async removeEndpoints(request) {
|
|
442
541
|
await this.http.request({
|
|
@@ -448,7 +547,7 @@ var Topics = class {
|
|
|
448
547
|
});
|
|
449
548
|
}
|
|
450
549
|
/**
|
|
451
|
-
* Get a list of all
|
|
550
|
+
* Get a list of all url groups.
|
|
452
551
|
*/
|
|
453
552
|
async list() {
|
|
454
553
|
return await this.http.request({
|
|
@@ -457,7 +556,7 @@ var Topics = class {
|
|
|
457
556
|
});
|
|
458
557
|
}
|
|
459
558
|
/**
|
|
460
|
-
* Get a single
|
|
559
|
+
* Get a single url group
|
|
461
560
|
*/
|
|
462
561
|
async get(name) {
|
|
463
562
|
return await this.http.request({
|
|
@@ -466,7 +565,7 @@ var Topics = class {
|
|
|
466
565
|
});
|
|
467
566
|
}
|
|
468
567
|
/**
|
|
469
|
-
* Delete a
|
|
568
|
+
* Delete a url group
|
|
470
569
|
*/
|
|
471
570
|
async delete(name) {
|
|
472
571
|
return await this.http.request({
|
|
@@ -480,7 +579,7 @@ var Topics = class {
|
|
|
480
579
|
// src/client/llm/chat.ts
|
|
481
580
|
var Chat = (_class2 = class _Chat {
|
|
482
581
|
|
|
483
|
-
constructor(http) {;_class2.prototype.__init3.call(this);_class2.prototype.__init4.call(this);
|
|
582
|
+
constructor(http) {;_class2.prototype.__init3.call(this);_class2.prototype.__init4.call(this);_class2.prototype.__init5.call(this);
|
|
484
583
|
this.http = http;
|
|
485
584
|
}
|
|
486
585
|
static toChatRequest(request) {
|
|
@@ -502,6 +601,8 @@ var Chat = (_class2 = class _Chat {
|
|
|
502
601
|
* @returns Chat completion or stream
|
|
503
602
|
*/
|
|
504
603
|
__init3() {this.create = async (request) => {
|
|
604
|
+
if (request.provider === "openai" || request.provider === "togetherai")
|
|
605
|
+
return this.createThirdParty(request);
|
|
505
606
|
const body = JSON.stringify(request);
|
|
506
607
|
if ("stream" in request && request.stream) {
|
|
507
608
|
return this.http.requestStream({
|
|
@@ -523,6 +624,51 @@ var Chat = (_class2 = class _Chat {
|
|
|
523
624
|
body
|
|
524
625
|
});
|
|
525
626
|
}}
|
|
627
|
+
/**
|
|
628
|
+
* Calls the Upstash completions api given a ChatRequest.
|
|
629
|
+
*
|
|
630
|
+
* Returns a ChatCompletion or a stream of ChatCompletionChunks
|
|
631
|
+
* if stream is enabled.
|
|
632
|
+
*
|
|
633
|
+
* @param request ChatRequest with messages
|
|
634
|
+
* @returns Chat completion or stream
|
|
635
|
+
*/
|
|
636
|
+
__init4() {this.createThirdParty = async (request) => {
|
|
637
|
+
if (request.provider === "openai" || request.provider === "togetherai") {
|
|
638
|
+
const baseUrl = PROVIDER_MAP[request.provider];
|
|
639
|
+
const llmToken = request.llmToken;
|
|
640
|
+
delete request.llmToken;
|
|
641
|
+
delete request.system;
|
|
642
|
+
delete request.provider;
|
|
643
|
+
const body = JSON.stringify(request);
|
|
644
|
+
if ("stream" in request && request.stream) {
|
|
645
|
+
return this.http.requestStream({
|
|
646
|
+
path: ["v1", "chat", "completions"],
|
|
647
|
+
method: "POST",
|
|
648
|
+
headers: {
|
|
649
|
+
"Content-Type": "application/json",
|
|
650
|
+
Connection: "keep-alive",
|
|
651
|
+
Accept: "text/event-stream",
|
|
652
|
+
"Cache-Control": "no-cache",
|
|
653
|
+
Authorization: `Bearer ${llmToken}`
|
|
654
|
+
},
|
|
655
|
+
body,
|
|
656
|
+
baseUrl
|
|
657
|
+
});
|
|
658
|
+
}
|
|
659
|
+
return this.http.request({
|
|
660
|
+
path: ["v1", "chat", "completions"],
|
|
661
|
+
method: "POST",
|
|
662
|
+
headers: {
|
|
663
|
+
"Content-Type": "application/json",
|
|
664
|
+
Authorization: `Bearer ${llmToken}`
|
|
665
|
+
},
|
|
666
|
+
body,
|
|
667
|
+
baseUrl
|
|
668
|
+
});
|
|
669
|
+
}
|
|
670
|
+
throw new Error("Could not find any third party provider");
|
|
671
|
+
}}
|
|
526
672
|
/**
|
|
527
673
|
* Calls the Upstash completions api given a PromptRequest.
|
|
528
674
|
*
|
|
@@ -534,7 +680,7 @@ var Chat = (_class2 = class _Chat {
|
|
|
534
680
|
* mistralai/Mistral-7B-Instruct-v0.2 model.
|
|
535
681
|
* @returns Chat completion or stream
|
|
536
682
|
*/
|
|
537
|
-
|
|
683
|
+
__init5() {this.prompt = async (request) => {
|
|
538
684
|
const chatRequest = _Chat.toChatRequest(request);
|
|
539
685
|
return this.create(chatRequest);
|
|
540
686
|
}}
|
|
@@ -551,12 +697,12 @@ var Client = class {
|
|
|
551
697
|
});
|
|
552
698
|
}
|
|
553
699
|
/**
|
|
554
|
-
* Access the
|
|
700
|
+
* Access the urlGroup API.
|
|
555
701
|
*
|
|
556
|
-
* Create, read, update or delete
|
|
702
|
+
* Create, read, update or delete urlGroups.
|
|
557
703
|
*/
|
|
558
|
-
get
|
|
559
|
-
return new
|
|
704
|
+
get urlGroups() {
|
|
705
|
+
return new UrlGroups(this.http);
|
|
560
706
|
}
|
|
561
707
|
/**
|
|
562
708
|
* Access the dlq API.
|
|
@@ -615,6 +761,7 @@ var Client = class {
|
|
|
615
761
|
async publishJSON(request) {
|
|
616
762
|
const headers = prefixHeaders(new Headers(request.headers));
|
|
617
763
|
headers.set("Content-Type", "application/json");
|
|
764
|
+
appendLLMOptions(request, headers);
|
|
618
765
|
const response = await this.publish({
|
|
619
766
|
...request,
|
|
620
767
|
headers,
|
|
@@ -656,6 +803,7 @@ var Client = class {
|
|
|
656
803
|
message.body = JSON.stringify(message.body);
|
|
657
804
|
}
|
|
658
805
|
message.headers = new Headers(message.headers);
|
|
806
|
+
appendLLMOptions(message, message.headers);
|
|
659
807
|
message.headers.set("Content-Type", "application/json");
|
|
660
808
|
}
|
|
661
809
|
const response = await this.batch(request);
|
|
@@ -693,12 +841,20 @@ var Client = class {
|
|
|
693
841
|
query[key] = value.toString();
|
|
694
842
|
}
|
|
695
843
|
}
|
|
696
|
-
const
|
|
844
|
+
const responsePayload = await this.http.request({
|
|
697
845
|
path: ["v2", "events"],
|
|
698
846
|
method: "GET",
|
|
699
847
|
query
|
|
700
848
|
});
|
|
701
|
-
return
|
|
849
|
+
return {
|
|
850
|
+
cursor: responsePayload.cursor,
|
|
851
|
+
events: responsePayload.events.map((event) => {
|
|
852
|
+
return {
|
|
853
|
+
...event,
|
|
854
|
+
urlGroup: event.topicName
|
|
855
|
+
};
|
|
856
|
+
})
|
|
857
|
+
};
|
|
702
858
|
}
|
|
703
859
|
};
|
|
704
860
|
|
|
@@ -712,4 +868,4 @@ var Client = class {
|
|
|
712
868
|
|
|
713
869
|
|
|
714
870
|
|
|
715
|
-
exports.Chat = Chat; exports.Client = Client; exports.Messages = Messages; exports.QstashChatRatelimitError = QstashChatRatelimitError; exports.QstashError = QstashError; exports.QstashRatelimitError = QstashRatelimitError; exports.Receiver = _chunkUUR7N6E6js.Receiver; exports.Schedules = Schedules; exports.SignatureError = _chunkUUR7N6E6js.SignatureError; exports.
|
|
871
|
+
exports.Chat = Chat; exports.Client = Client; exports.Messages = Messages; exports.QstashChatRatelimitError = QstashChatRatelimitError; exports.QstashError = QstashError; exports.QstashRatelimitError = QstashRatelimitError; exports.Receiver = _chunkUUR7N6E6js.Receiver; exports.Schedules = Schedules; exports.SignatureError = _chunkUUR7N6E6js.SignatureError; exports.UrlGroups = UrlGroups;
|