@upstash/qstash 2.7.0-canary-1 → 2.7.0-workflow-alpha.2

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.js CHANGED
@@ -1,919 +1,41 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class; var _class2;
2
-
3
-
4
- var _chunkUUR7N6E6js = require('./chunk-UUR7N6E6.js');
5
-
6
- // src/client/dlq.ts
7
- var DLQ = class {
8
-
9
- constructor(http) {
10
- this.http = http;
11
- }
12
- /**
13
- * List messages in the dlq
14
- */
15
- async listMessages(options) {
16
- const filterPayload = {
17
- ..._optionalChain([options, 'optionalAccess', _ => _.filter]),
18
- topicName: _optionalChain([options, 'optionalAccess', _2 => _2.filter, 'optionalAccess', _3 => _3.urlGroup])
19
- };
20
- const messagesPayload = await this.http.request({
21
- method: "GET",
22
- path: ["v2", "dlq"],
23
- query: {
24
- cursor: _optionalChain([options, 'optionalAccess', _4 => _4.cursor]),
25
- count: _optionalChain([options, 'optionalAccess', _5 => _5.count]),
26
- ...filterPayload
27
- }
28
- });
29
- return {
30
- messages: messagesPayload.messages.map((message) => {
31
- return {
32
- ...message,
33
- urlGroup: message.topicName
34
- };
35
- }),
36
- cursor: messagesPayload.cursor
37
- };
38
- }
39
- /**
40
- * Remove a message from the dlq using it's `dlqId`
41
- */
42
- async delete(dlqMessageId) {
43
- return await this.http.request({
44
- method: "DELETE",
45
- path: ["v2", "dlq", dlqMessageId],
46
- parseResponseAsJson: false
47
- // there is no response
48
- });
49
- }
50
- /**
51
- * Remove multiple messages from the dlq using their `dlqId`s
52
- */
53
- async deleteMany(request) {
54
- return await this.http.request({
55
- method: "DELETE",
56
- path: ["v2", "dlq"],
57
- headers: { "Content-Type": "application/json" },
58
- body: JSON.stringify({ dlqIds: request.dlqIds })
59
- });
60
- }
61
- };
62
-
63
- // src/client/error.ts
64
- var QstashError = class extends Error {
65
- constructor(message) {
66
- super(message);
67
- this.name = "QstashError";
68
- }
69
- };
70
- var QstashRatelimitError = class extends QstashError {
71
- constructor(args) {
72
- super(`You have been ratelimited. ${JSON.stringify(args)} `);
73
- }
74
- };
75
- var QstashChatRatelimitError = class extends QstashError {
76
- constructor(args) {
77
- super(`You have been ratelimited. ${JSON.stringify(args)} `);
78
- }
79
- };
80
-
81
- // src/client/http.ts
82
- var HttpClient = (_class = class {
83
-
84
-
85
-
86
-
87
- constructor(config) {;_class.prototype.__init.call(this);_class.prototype.__init2.call(this);
88
- this.baseUrl = config.baseUrl.replace(/\/$/, "");
89
- this.authorization = config.authorization;
90
- this.retry = // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
91
- typeof config.retry === "boolean" && !config.retry ? {
92
- attempts: 1,
93
- backoff: () => 0
94
- } : {
95
- attempts: _optionalChain([config, 'access', _6 => _6.retry, 'optionalAccess', _7 => _7.retries]) ? config.retry.retries + 1 : 5,
96
- backoff: _nullishCoalesce(_optionalChain([config, 'access', _8 => _8.retry, 'optionalAccess', _9 => _9.backoff]), () => ( ((retryCount) => Math.exp(retryCount) * 50)))
97
- };
98
- }
99
- async request(request) {
100
- const { response } = await this.requestWithBackoff(request);
101
- if (request.parseResponseAsJson === false) {
102
- return void 0;
103
- }
104
- return await response.json();
105
- }
106
- async *requestStream(request) {
107
- const { response } = await this.requestWithBackoff(request);
108
- if (!response.body) {
109
- throw new Error("No response body");
110
- }
111
- const body = response.body;
112
- const reader = body.getReader();
113
- const decoder = new TextDecoder();
114
- try {
115
- while (true) {
116
- const { done, value } = await reader.read();
117
- if (done) {
118
- break;
119
- }
120
- const chunkText = decoder.decode(value, { stream: true });
121
- const chunks = chunkText.split("\n").filter(Boolean);
122
- for (const chunk of chunks) {
123
- if (chunk.startsWith("data: ")) {
124
- const data = chunk.slice(6);
125
- if (data === "[DONE]") {
126
- break;
127
- }
128
- yield JSON.parse(data);
129
- }
130
- }
131
- }
132
- } finally {
133
- await reader.cancel();
134
- }
135
- }
136
- __init() {this.requestWithBackoff = async (request) => {
137
- const [url, requestOptions] = this.processRequest(request);
138
- let response = void 0;
139
- let error = void 0;
140
- for (let index = 0; index < this.retry.attempts; index++) {
141
- try {
142
- response = await fetch(url.toString(), requestOptions);
143
- break;
144
- } catch (error_) {
145
- error = error_;
146
- await new Promise((r) => setTimeout(r, this.retry.backoff(index)));
147
- }
148
- }
149
- if (!response) {
150
- throw _nullishCoalesce(error, () => ( new Error("Exhausted all retries")));
151
- }
152
- await this.checkResponse(response);
153
- return {
154
- response,
155
- error
156
- };
157
- }}
158
- __init2() {this.processRequest = (request) => {
159
- const headers = new Headers(request.headers);
160
- if (!headers.has("Authorization")) {
161
- headers.set("Authorization", this.authorization);
162
- }
163
- const requestOptions = {
164
- method: request.method,
165
- headers,
166
- body: request.body,
167
- keepalive: request.keepalive
168
- };
169
- const url = new URL([_nullishCoalesce(request.baseUrl, () => ( this.baseUrl)), ...request.path].join("/"));
170
- if (request.query) {
171
- for (const [key, value] of Object.entries(request.query)) {
172
- if (value !== void 0) {
173
- url.searchParams.set(key, value.toString());
174
- }
175
- }
176
- }
177
- return [url.toString(), requestOptions];
178
- }}
179
- async checkResponse(response) {
180
- if (response.status === 429) {
181
- if (response.headers.get("x-ratelimit-limit-requests")) {
182
- throw new QstashChatRatelimitError({
183
- "limit-requests": response.headers.get("x-ratelimit-limit-requests"),
184
- "limit-tokens": response.headers.get("x-ratelimit-limit-tokens"),
185
- "remaining-requests": response.headers.get("x-ratelimit-remaining-requests"),
186
- "remaining-tokens": response.headers.get("x-ratelimit-remaining-tokens"),
187
- "reset-requests": response.headers.get("x-ratelimit-reset-requests"),
188
- "reset-tokens": response.headers.get("x-ratelimit-reset-tokens")
189
- });
190
- }
191
- throw new QstashRatelimitError({
192
- limit: response.headers.get("Burst-RateLimit-Limit"),
193
- remaining: response.headers.get("Burst-RateLimit-Remaining"),
194
- reset: response.headers.get("Burst-RateLimit-Reset")
195
- });
196
- }
197
- if (response.status < 200 || response.status >= 300) {
198
- const body = await response.text();
199
- throw new QstashError(body.length > 0 ? body : `Error: status=${response.status}`);
200
- }
201
- }
202
- }, _class);
203
-
204
- // src/client/llm/chat.ts
205
- var Chat = (_class2 = class _Chat {
206
-
207
-
208
- constructor(http, token) {;_class2.prototype.__init3.call(this);_class2.prototype.__init4.call(this);_class2.prototype.__init5.call(this);
209
- this.http = http;
210
- this.token = token;
211
- }
212
- static toChatRequest(request) {
213
- const messages = [];
214
- messages.push(
215
- { role: "system", content: request.system },
216
- { role: "user", content: request.user }
217
- );
218
- const chatRequest = { ...request, messages };
219
- return chatRequest;
220
- }
221
- /**
222
- * Calls the Upstash completions api given a ChatRequest.
223
- *
224
- * Returns a ChatCompletion or a stream of ChatCompletionChunks
225
- * if stream is enabled.
226
- *
227
- * @param request ChatRequest with messages
228
- * @returns Chat completion or stream
229
- */
230
- __init3() {this.create = async (request) => {
231
- if (request.provider.owner != "upstash")
232
- return this.createThirdParty(request);
233
- const body = JSON.stringify(request);
234
- if ("stream" in request && request.stream) {
235
- return this.http.requestStream({
236
- path: ["llm", "v1", "chat", "completions"],
237
- method: "POST",
238
- headers: {
239
- "Content-Type": "application/json",
240
- Connection: "keep-alive",
241
- Accept: "text/event-stream",
242
- "Cache-Control": "no-cache",
243
- Authorization: `Bearer ${this.token}`
244
- },
245
- body
246
- });
247
- }
248
- return this.http.request({
249
- path: ["llm", "v1", "chat", "completions"],
250
- method: "POST",
251
- headers: { "Content-Type": "application/json", Authorization: `Bearer ${this.token}` },
252
- body
253
- });
254
- }}
255
- /**
256
- * Calls the Upstash completions api given a ChatRequest.
257
- *
258
- * Returns a ChatCompletion or a stream of ChatCompletionChunks
259
- * if stream is enabled.
260
- *
261
- * @param request ChatRequest with messages
262
- * @returns Chat completion or stream
263
- */
264
- __init4() {this.createThirdParty = async (request) => {
265
- const { baseUrl, token, owner } = request.provider;
266
- if (owner === "upstash")
267
- throw new Error("Upstash is not 3rd party provider!");
268
- delete request.provider;
269
- delete request.system;
270
- const body = JSON.stringify(request);
271
- if ("stream" in request && request.stream) {
272
- return this.http.requestStream({
273
- path: ["v1", "chat", "completions"],
274
- method: "POST",
275
- headers: {
276
- "Content-Type": "application/json",
277
- Connection: "keep-alive",
278
- Accept: "text/event-stream",
279
- "Cache-Control": "no-cache",
280
- Authorization: `Bearer ${token}`
281
- },
282
- body,
283
- baseUrl
284
- });
285
- }
286
- return this.http.request({
287
- path: ["v1", "chat", "completions"],
288
- method: "POST",
289
- headers: {
290
- "Content-Type": "application/json",
291
- Authorization: `Bearer ${token}`
292
- },
293
- body,
294
- baseUrl
295
- });
296
- }}
297
- /**
298
- * Calls the Upstash completions api given a PromptRequest.
299
- *
300
- * Returns a ChatCompletion or a stream of ChatCompletionChunks
301
- * if stream is enabled.
302
- *
303
- * @param request PromptRequest with system and user messages.
304
- * Note that system parameter shouldn't be passed in the case of
305
- * mistralai/Mistral-7B-Instruct-v0.2 model.
306
- * @returns Chat completion or stream
307
- */
308
- __init5() {this.prompt = async (request) => {
309
- const chatRequest = _Chat.toChatRequest(request);
310
- return this.create(chatRequest);
311
- }}
312
- }, _class2);
313
-
314
- // src/client/llm/utils.ts
315
- function appendLLMOptionsIfNeeded(request, headers) {
316
- if (_optionalChain([request, 'access', _10 => _10.api, 'optionalAccess', _11 => _11.provider, 'optionalAccess', _12 => _12.owner]) === "upstash") {
317
- request.api = { name: "llm" };
318
- return;
319
- }
320
- if (request.api && "provider" in request.api) {
321
- const provider = request.api.provider;
322
- if (!_optionalChain([provider, 'optionalAccess', _13 => _13.baseUrl]))
323
- throw new Error("baseUrl cannot be empty or undefined!");
324
- if (!provider.token)
325
- throw new Error("token cannot be empty or undefined!");
326
- request.url = `${provider.baseUrl}/v1/chat/completions`;
327
- headers.set("Authorization", `Bearer ${provider.token}`);
328
- }
329
- }
330
-
331
- // src/client/messages.ts
332
- var Messages = class {
333
-
334
- constructor(http) {
335
- this.http = http;
336
- }
337
- /**
338
- * Get a message
339
- */
340
- async get(messageId) {
341
- const messagePayload = await this.http.request({
342
- method: "GET",
343
- path: ["v2", "messages", messageId]
344
- });
345
- const message = {
346
- ...messagePayload,
347
- urlGroup: messagePayload.topicName
348
- };
349
- return message;
350
- }
351
- /**
352
- * Cancel a message
353
- */
354
- async delete(messageId) {
355
- return await this.http.request({
356
- method: "DELETE",
357
- path: ["v2", "messages", messageId],
358
- parseResponseAsJson: false
359
- });
360
- }
361
- async deleteMany(messageIds) {
362
- const result = await this.http.request({
363
- method: "DELETE",
364
- path: ["v2", "messages"],
365
- headers: { "Content-Type": "application/json" },
366
- body: JSON.stringify({ messageIds })
367
- });
368
- return result.cancelled;
369
- }
370
- async deleteAll() {
371
- const result = await this.http.request({
372
- method: "DELETE",
373
- path: ["v2", "messages"]
374
- });
375
- return result.cancelled;
376
- }
377
- };
378
-
379
- // src/client/utils.ts
380
- var isIgnoredHeader = (header) => {
381
- const lowerCaseHeader = header.toLowerCase();
382
- return lowerCaseHeader.startsWith("content-type") || lowerCaseHeader.startsWith("upstash-");
383
- };
384
- function prefixHeaders(headers) {
385
- const keysToBePrefixed = [...headers.keys()].filter((key) => !isIgnoredHeader(key));
386
- for (const key of keysToBePrefixed) {
387
- const value = headers.get(key);
388
- if (value !== null) {
389
- headers.set(`Upstash-Forward-${key}`, value);
390
- }
391
- headers.delete(key);
392
- }
393
- return headers;
394
- }
395
- function processHeaders(request) {
396
- const headers = prefixHeaders(new Headers(request.headers));
397
- headers.set("Upstash-Method", _nullishCoalesce(request.method, () => ( "POST")));
398
- if (request.delay !== void 0) {
399
- headers.set("Upstash-Delay", `${request.delay.toFixed(0)}s`);
400
- }
401
- if (request.notBefore !== void 0) {
402
- headers.set("Upstash-Not-Before", request.notBefore.toFixed(0));
403
- }
404
- if (request.deduplicationId !== void 0) {
405
- headers.set("Upstash-Deduplication-Id", request.deduplicationId);
406
- }
407
- if (request.contentBasedDeduplication !== void 0) {
408
- headers.set("Upstash-Content-Based-Deduplication", "true");
409
- }
410
- if (request.retries !== void 0) {
411
- headers.set("Upstash-Retries", request.retries.toFixed(0));
412
- }
413
- if (request.callback !== void 0) {
414
- headers.set("Upstash-Callback", request.callback);
415
- }
416
- if (request.failureCallback !== void 0) {
417
- headers.set("Upstash-Failure-Callback", request.failureCallback);
418
- }
419
- if (request.timeout !== void 0) {
420
- headers.set("Upstash-Timeout", `${request.timeout}s`);
421
- }
422
- return headers;
423
- }
424
- function getRequestPath(request) {
425
- return _nullishCoalesce(_nullishCoalesce(request.url, () => ( request.urlGroup)), () => ( `api/${_optionalChain([request, 'access', _14 => _14.api, 'optionalAccess', _15 => _15.name])}`));
426
- }
427
-
428
- // src/client/queue.ts
429
- var Queue = class {
430
-
431
-
432
- constructor(http, queueName) {
433
- this.http = http;
434
- this.queueName = queueName;
435
- }
436
- /**
437
- * Create or update the queue
438
- */
439
- async upsert(request) {
440
- if (!this.queueName) {
441
- throw new Error("Please provide a queue name to the Queue constructor");
442
- }
443
- const body = {
444
- queueName: this.queueName,
445
- parallelism: _nullishCoalesce(request.parallelism, () => ( 1)),
446
- paused: _nullishCoalesce(request.paused, () => ( false))
447
- };
448
- await this.http.request({
449
- method: "POST",
450
- path: ["v2", "queues"],
451
- headers: {
452
- "Content-Type": "application/json"
453
- },
454
- body: JSON.stringify(body),
455
- parseResponseAsJson: false
456
- });
457
- }
458
- /**
459
- * Get the queue details
460
- */
461
- async get() {
462
- if (!this.queueName) {
463
- throw new Error("Please provide a queue name to the Queue constructor");
464
- }
465
- return await this.http.request({
466
- method: "GET",
467
- path: ["v2", "queues", this.queueName]
468
- });
469
- }
470
- /**
471
- * List queues
472
- */
473
- async list() {
474
- return await this.http.request({
475
- method: "GET",
476
- path: ["v2", "queues"]
477
- });
478
- }
479
- /**
480
- * Delete the queue
481
- */
482
- async delete() {
483
- if (!this.queueName) {
484
- throw new Error("Please provide a queue name to the Queue constructor");
485
- }
486
- await this.http.request({
487
- method: "DELETE",
488
- path: ["v2", "queues", this.queueName],
489
- parseResponseAsJson: false
490
- });
491
- }
492
- /**
493
- * Enqueue a message to a queue.
494
- */
495
- async enqueue(request) {
496
- if (!this.queueName) {
497
- throw new Error("Please provide a queue name to the Queue constructor");
498
- }
499
- const headers = processHeaders(request);
500
- const destination = getRequestPath(request);
501
- const response = await this.http.request({
502
- path: ["v2", "enqueue", this.queueName, destination],
503
- body: request.body,
504
- headers,
505
- method: "POST"
506
- });
507
- return response;
508
- }
509
- /**
510
- * Enqueue a message to a queue, serializing the body to JSON.
511
- */
512
- async enqueueJSON(request) {
513
- const headers = prefixHeaders(new Headers(request.headers));
514
- headers.set("Content-Type", "application/json");
515
- appendLLMOptionsIfNeeded(request, headers);
516
- const response = await this.enqueue({
517
- ...request,
518
- body: JSON.stringify(request.body),
519
- headers
520
- });
521
- return response;
522
- }
523
- /**
524
- * Pauses the queue.
525
- *
526
- * A paused queue will not deliver messages until
527
- * it is resumed.
528
- */
529
- async pause() {
530
- if (!this.queueName) {
531
- throw new Error("Please provide a queue name to the Queue constructor");
532
- }
533
- await this.http.request({
534
- method: "POST",
535
- path: ["v2", "queues", this.queueName, "pause"],
536
- parseResponseAsJson: false
537
- });
538
- }
539
- /**
540
- * Resumes the queue.
541
- */
542
- async resume() {
543
- if (!this.queueName) {
544
- throw new Error("Please provide a queue name to the Queue constructor");
545
- }
546
- await this.http.request({
547
- method: "POST",
548
- path: ["v2", "queues", this.queueName, "resume"],
549
- parseResponseAsJson: false
550
- });
551
- }
552
- };
553
-
554
- // src/client/schedules.ts
555
- var Schedules = class {
556
-
557
- constructor(http) {
558
- this.http = http;
559
- }
560
- /**
561
- * Create a schedule
562
- */
563
- async create(request) {
564
- const headers = prefixHeaders(new Headers(request.headers));
565
- if (!headers.has("Content-Type")) {
566
- headers.set("Content-Type", "application/json");
567
- }
568
- headers.set("Upstash-Cron", request.cron);
569
- if (request.method !== void 0) {
570
- headers.set("Upstash-Method", request.method);
571
- }
572
- if (request.delay !== void 0) {
573
- headers.set("Upstash-Delay", `${request.delay.toFixed(0)}s`);
574
- }
575
- if (request.retries !== void 0) {
576
- headers.set("Upstash-Retries", request.retries.toFixed(0));
577
- }
578
- if (request.callback !== void 0) {
579
- headers.set("Upstash-Callback", request.callback);
580
- }
581
- if (request.failureCallback !== void 0) {
582
- headers.set("Upstash-Failure-Callback", request.failureCallback);
583
- }
584
- if (request.timeout !== void 0) {
585
- headers.set("Upstash-Timeout", `${request.timeout}s`);
586
- }
587
- return await this.http.request({
588
- method: "POST",
589
- headers,
590
- path: ["v2", "schedules", request.destination],
591
- body: request.body
592
- });
593
- }
594
- /**
595
- * Get a schedule
596
- */
597
- async get(scheduleId) {
598
- return await this.http.request({
599
- method: "GET",
600
- path: ["v2", "schedules", scheduleId]
601
- });
602
- }
603
- /**
604
- * List your schedules
605
- */
606
- async list() {
607
- return await this.http.request({
608
- method: "GET",
609
- path: ["v2", "schedules"]
610
- });
611
- }
612
- /**
613
- * Delete a schedule
614
- */
615
- async delete(scheduleId) {
616
- return await this.http.request({
617
- method: "DELETE",
618
- path: ["v2", "schedules", scheduleId],
619
- parseResponseAsJson: false
620
- });
621
- }
622
- /**
623
- * Pauses the schedule.
624
- *
625
- * A paused schedule will not deliver messages until
626
- * it is resumed.
627
- */
628
- async pause({ schedule }) {
629
- await this.http.request({
630
- method: "PATCH",
631
- path: ["v2", "schedules", schedule, "pause"],
632
- parseResponseAsJson: false
633
- });
634
- }
635
- /**
636
- * Resumes the schedule.
637
- */
638
- async resume({ schedule }) {
639
- await this.http.request({
640
- method: "PATCH",
641
- path: ["v2", "schedules", schedule, "resume"],
642
- parseResponseAsJson: false
643
- });
644
- }
645
- };
646
-
647
- // src/client/url-groups.ts
648
- var UrlGroups = class {
649
-
650
- constructor(http) {
651
- this.http = http;
652
- }
653
- /**
654
- * Create a new url group with the given name and endpoints
655
- */
656
- async addEndpoints(request) {
657
- await this.http.request({
658
- method: "POST",
659
- path: ["v2", "topics", request.name, "endpoints"],
660
- headers: { "Content-Type": "application/json" },
661
- body: JSON.stringify({ endpoints: request.endpoints }),
662
- parseResponseAsJson: false
663
- });
664
- }
665
- /**
666
- * Remove endpoints from a url group.
667
- */
668
- async removeEndpoints(request) {
669
- await this.http.request({
670
- method: "DELETE",
671
- path: ["v2", "topics", request.name, "endpoints"],
672
- headers: { "Content-Type": "application/json" },
673
- body: JSON.stringify({ endpoints: request.endpoints }),
674
- parseResponseAsJson: false
675
- });
676
- }
677
- /**
678
- * Get a list of all url groups.
679
- */
680
- async list() {
681
- return await this.http.request({
682
- method: "GET",
683
- path: ["v2", "topics"]
684
- });
685
- }
686
- /**
687
- * Get a single url group
688
- */
689
- async get(name) {
690
- return await this.http.request({
691
- method: "GET",
692
- path: ["v2", "topics", name]
693
- });
694
- }
695
- /**
696
- * Delete a url group
697
- */
698
- async delete(name) {
699
- return await this.http.request({
700
- method: "DELETE",
701
- path: ["v2", "topics", name],
702
- parseResponseAsJson: false
703
- });
704
- }
705
- };
706
-
707
- // src/client/client.ts
708
- var Client = class {
709
-
710
-
711
- constructor(config) {
712
- this.http = new HttpClient({
713
- retry: config.retry,
714
- baseUrl: config.baseUrl ? config.baseUrl.replace(/\/$/, "") : "https://qstash.upstash.io",
715
- authorization: `Bearer ${config.token}`
716
- });
717
- this.token = config.token;
718
- }
719
- /**
720
- * Access the urlGroup API.
721
- *
722
- * Create, read, update or delete urlGroups.
723
- */
724
- get urlGroups() {
725
- return new UrlGroups(this.http);
726
- }
727
- /**
728
- * Access the dlq API.
729
- *
730
- * List or remove messages from the DLQ.
731
- */
732
- get dlq() {
733
- return new DLQ(this.http);
734
- }
735
- /**
736
- * Access the message API.
737
- *
738
- * Read or cancel messages.
739
- */
740
- get messages() {
741
- return new Messages(this.http);
742
- }
743
- /**
744
- * Access the schedule API.
745
- *
746
- * Create, read or delete schedules.
747
- */
748
- get schedules() {
749
- return new Schedules(this.http);
750
- }
751
- /**
752
- * Access the queue API.
753
- *
754
- * Create, read, update or delete queues.
755
- */
756
- queue(request) {
757
- return new Queue(this.http, _optionalChain([request, 'optionalAccess', _16 => _16.queueName]));
758
- }
759
- /**
760
- * Access the Chat API
761
- *
762
- * Call the create or prompt methods
763
- */
764
- chat() {
765
- return new Chat(this.http, this.token);
766
- }
767
- async publish(request) {
768
- const headers = processHeaders(request);
769
- const response = await this.http.request({
770
- path: ["v2", "publish", getRequestPath(request)],
771
- body: request.body,
772
- headers,
773
- method: "POST"
774
- });
775
- return response;
776
- }
777
- /**
778
- * publishJSON is a utility wrapper around `publish` that automatically serializes the body
779
- * and sets the `Content-Type` header to `application/json`.
780
- */
781
- async publishJSON(request) {
782
- const headers = prefixHeaders(new Headers(request.headers));
783
- headers.set("Content-Type", "application/json");
784
- appendLLMOptionsIfNeeded(request, headers);
785
- const response = await this.publish({
786
- ...request,
787
- headers,
788
- body: JSON.stringify(request.body)
789
- });
790
- return response;
791
- }
792
- /**
793
- * Batch publish messages to QStash.
794
- */
795
- async batch(request) {
796
- const messages = [];
797
- for (const message of request) {
798
- const headers = processHeaders(message);
799
- const headerEntries = Object.fromEntries(headers.entries());
800
- messages.push({
801
- destination: getRequestPath(message),
802
- headers: headerEntries,
803
- body: message.body,
804
- ...message.queueName && { queue: message.queueName }
805
- });
806
- }
807
- const response = await this.http.request({
808
- path: ["v2", "batch"],
809
- body: JSON.stringify(messages),
810
- headers: {
811
- "Content-Type": "application/json"
812
- },
813
- method: "POST"
814
- });
815
- return response;
816
- }
817
- /**
818
- * Batch publish messages to QStash, serializing each body to JSON.
819
- */
820
- async batchJSON(request) {
821
- for (const message of request) {
822
- if ("body" in message) {
823
- message.body = JSON.stringify(message.body);
824
- }
825
- message.headers = new Headers(message.headers);
826
- appendLLMOptionsIfNeeded(message, message.headers);
827
- message.headers.set("Content-Type", "application/json");
828
- }
829
- const response = await this.batch(request);
830
- return response;
831
- }
832
- /**
833
- * Retrieve your logs.
834
- *
835
- * The logs endpoint is paginated and returns only 100 logs at a time.
836
- * If you want to receive more logs, you can use the cursor to paginate.
837
- *
838
- * The cursor is a unix timestamp with millisecond precision
839
- *
840
- * @example
841
- * ```ts
842
- * let cursor = Date.now()
843
- * const logs: Log[] = []
844
- * while (cursor > 0) {
845
- * const res = await qstash.logs({ cursor })
846
- * logs.push(...res.logs)
847
- * cursor = res.cursor ?? 0
848
- * }
849
- * ```
850
- */
851
- async events(request) {
852
- const query = {};
853
- if (_optionalChain([request, 'optionalAccess', _17 => _17.cursor]) && request.cursor > 0) {
854
- query.cursor = request.cursor.toString();
855
- }
856
- for (const [key, value] of Object.entries(_nullishCoalesce(_optionalChain([request, 'optionalAccess', _18 => _18.filter]), () => ( {})))) {
857
- if (typeof value === "number" && value < 0) {
858
- continue;
859
- }
860
- if (typeof value !== "undefined") {
861
- query[key] = value.toString();
862
- }
863
- }
864
- const responsePayload = await this.http.request({
865
- path: ["v2", "events"],
866
- method: "GET",
867
- query
868
- });
869
- return {
870
- cursor: responsePayload.cursor,
871
- events: responsePayload.events.map((event) => {
872
- return {
873
- ...event,
874
- urlGroup: event.topicName
875
- };
876
- })
877
- };
878
- }
879
- };
880
-
881
- // src/client/llm/providers.ts
882
- var upstash = () => {
883
- return {
884
- owner: "upstash",
885
- baseUrl: "https://qstash.upstash.io/llm",
886
- token: ""
887
- };
888
- };
889
- var openai = ({
890
- token
891
- }) => {
892
- return { token, owner: "openai", baseUrl: "https://api.openai.com" };
893
- };
894
- var custom = ({
895
- baseUrl,
896
- token
897
- }) => {
898
- const trimmedBaseUrl = baseUrl.replace(/\/(v1\/)?chat\/completions$/, "");
899
- return {
900
- token,
901
- owner: "custom",
902
- baseUrl: trimmedBaseUrl
903
- };
904
- };
905
-
906
-
907
-
908
-
909
-
910
-
911
-
912
-
913
-
914
-
915
-
916
-
917
-
918
-
919
- 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; exports.custom = custom; exports.openai = openai; exports.upstash = upstash;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});require('./chunk-IJ5AEYLN.js');
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+ var _chunkITPUDOLSjs = require('./chunk-ITPUDOLS.js');
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+ exports.Chat = _chunkITPUDOLSjs.Chat; exports.Client = _chunkITPUDOLSjs.Client; exports.Messages = _chunkITPUDOLSjs.Messages; exports.QstashChatRatelimitError = _chunkITPUDOLSjs.QstashChatRatelimitError; exports.QstashDailyRatelimitError = _chunkITPUDOLSjs.QstashDailyRatelimitError; exports.QstashError = _chunkITPUDOLSjs.QstashError; exports.QstashRatelimitError = _chunkITPUDOLSjs.QstashRatelimitError; exports.QstashWorkflowAbort = _chunkITPUDOLSjs.QstashWorkflowAbort; exports.QstashWorkflowError = _chunkITPUDOLSjs.QstashWorkflowError; exports.Receiver = _chunkITPUDOLSjs.Receiver; exports.Schedules = _chunkITPUDOLSjs.Schedules; exports.SignatureError = _chunkITPUDOLSjs.SignatureError; exports.UrlGroups = _chunkITPUDOLSjs.UrlGroups; exports.custom = _chunkITPUDOLSjs.custom; exports.formatWorkflowError = _chunkITPUDOLSjs.formatWorkflowError; exports.openai = _chunkITPUDOLSjs.openai; exports.setupAnalytics = _chunkITPUDOLSjs.setupAnalytics; exports.upstash = _chunkITPUDOLSjs.upstash;