@upstash/qstash 2.7.13 → 2.7.15
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/{chunk-IYU467WN.mjs → chunk-LSYJT55T.mjs} +1 -1
- package/chunk-X4MWA7DF.mjs +34 -0
- package/{chunk-Q6E5NF42.mjs → chunk-Y52A3KZT.mjs} +217 -121
- package/{client-DEZq0-qk.d.ts → client-RORrka04.d.mts} +113 -35
- package/{client-DEZq0-qk.d.mts → client-RORrka04.d.ts} +113 -35
- package/cloudflare.d.mts +1 -1
- package/cloudflare.d.ts +1 -1
- package/cloudflare.js +197 -88
- package/cloudflare.mjs +1 -1
- package/h3.d.mts +1 -1
- package/h3.d.ts +1 -1
- package/h3.js +197 -88
- package/h3.mjs +3 -3
- package/hono.d.mts +1 -1
- package/hono.d.ts +1 -1
- package/hono.js +197 -88
- package/hono.mjs +1 -1
- package/index.d.mts +26 -3
- package/index.d.ts +26 -3
- package/index.js +244 -119
- package/index.mjs +7 -2
- package/nextjs.d.mts +1 -1
- package/nextjs.d.ts +1 -1
- package/nextjs.js +197 -88
- package/nextjs.mjs +1 -1
- package/nuxt.js +11 -6
- package/nuxt.mjs +3 -3
- package/package.json +1 -1
- package/solidjs.d.mts +1 -1
- package/solidjs.d.ts +1 -1
- package/solidjs.js +197 -88
- package/solidjs.mjs +2 -2
- package/svelte.d.mts +1 -1
- package/svelte.d.ts +1 -1
- package/svelte.js +197 -88
- package/svelte.mjs +2 -2
- package/workflow.d.mts +1 -1
- package/workflow.d.ts +1 -1
- package/workflow.js +197 -88
- package/workflow.mjs +1 -1
- package/chunk-CIVGPRQN.mjs +0 -0
package/nextjs.js
CHANGED
|
@@ -64,11 +64,14 @@ var Receiver = class {
|
|
|
64
64
|
* If that fails, the signature is invalid and a `SignatureError` is thrown.
|
|
65
65
|
*/
|
|
66
66
|
async verify(request) {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
67
|
+
let payload;
|
|
68
|
+
try {
|
|
69
|
+
payload = await this.verifyWithKey(this.currentSigningKey, request);
|
|
70
|
+
} catch {
|
|
71
|
+
payload = await this.verifyWithKey(this.nextSigningKey, request);
|
|
70
72
|
}
|
|
71
|
-
|
|
73
|
+
this.verifyBodyAndUrl(payload, request);
|
|
74
|
+
return true;
|
|
72
75
|
}
|
|
73
76
|
/**
|
|
74
77
|
* Verify signature with a specific signing key
|
|
@@ -80,7 +83,10 @@ var Receiver = class {
|
|
|
80
83
|
}).catch((error) => {
|
|
81
84
|
throw new SignatureError(error.message);
|
|
82
85
|
});
|
|
83
|
-
|
|
86
|
+
return jwt.payload;
|
|
87
|
+
}
|
|
88
|
+
verifyBodyAndUrl(payload, request) {
|
|
89
|
+
const p = payload;
|
|
84
90
|
if (request.url !== void 0 && p.sub !== request.url) {
|
|
85
91
|
throw new SignatureError(`invalid subject: ${p.sub}, want: ${request.url}`);
|
|
86
92
|
}
|
|
@@ -89,7 +95,6 @@ var Receiver = class {
|
|
|
89
95
|
if (p.body.replace(padding, "") !== bodyHash.replace(padding, "")) {
|
|
90
96
|
throw new SignatureError(`body hash does not match, want: ${p.body}, got: ${bodyHash}`);
|
|
91
97
|
}
|
|
92
|
-
return true;
|
|
93
98
|
}
|
|
94
99
|
};
|
|
95
100
|
|
|
@@ -240,7 +245,7 @@ var HttpClient = class {
|
|
|
240
245
|
attempts: 1,
|
|
241
246
|
backoff: () => 0
|
|
242
247
|
} : {
|
|
243
|
-
attempts: config.retry?.retries
|
|
248
|
+
attempts: config.retry?.retries ?? 5,
|
|
244
249
|
backoff: config.retry?.backoff ?? ((retryCount) => Math.exp(retryCount) * 50)
|
|
245
250
|
};
|
|
246
251
|
}
|
|
@@ -285,13 +290,15 @@ var HttpClient = class {
|
|
|
285
290
|
const [url, requestOptions] = this.processRequest(request);
|
|
286
291
|
let response = void 0;
|
|
287
292
|
let error = void 0;
|
|
288
|
-
for (let index = 0; index
|
|
293
|
+
for (let index = 0; index <= this.retry.attempts; index++) {
|
|
289
294
|
try {
|
|
290
295
|
response = await fetch(url.toString(), requestOptions);
|
|
291
296
|
break;
|
|
292
297
|
} catch (error_) {
|
|
293
298
|
error = error_;
|
|
294
|
-
|
|
299
|
+
if (index < this.retry.attempts) {
|
|
300
|
+
await new Promise((r) => setTimeout(r, this.retry.backoff(index)));
|
|
301
|
+
}
|
|
295
302
|
}
|
|
296
303
|
}
|
|
297
304
|
if (!response) {
|
|
@@ -463,7 +470,6 @@ var Chat = class _Chat {
|
|
|
463
470
|
* @param request ChatRequest with messages
|
|
464
471
|
* @returns Chat completion or stream
|
|
465
472
|
*/
|
|
466
|
-
// eslint-disable-next-line @typescript-eslint/require-await
|
|
467
473
|
createThirdParty = async (request) => {
|
|
468
474
|
const { baseUrl, token, owner, organization } = request.provider;
|
|
469
475
|
if (owner === "upstash")
|
|
@@ -524,63 +530,6 @@ var Chat = class _Chat {
|
|
|
524
530
|
};
|
|
525
531
|
};
|
|
526
532
|
|
|
527
|
-
// src/client/llm/utils.ts
|
|
528
|
-
function appendLLMOptionsIfNeeded(request, headers, http) {
|
|
529
|
-
if (!request.api)
|
|
530
|
-
return;
|
|
531
|
-
const provider = request.api.provider;
|
|
532
|
-
const analytics = request.api.analytics;
|
|
533
|
-
if (provider?.owner === "upstash") {
|
|
534
|
-
handleUpstashProvider(request, headers, http, analytics);
|
|
535
|
-
return;
|
|
536
|
-
}
|
|
537
|
-
if (!("provider" in request.api))
|
|
538
|
-
return;
|
|
539
|
-
const { baseUrl, token } = validateProviderConfig(provider);
|
|
540
|
-
const analyticsConfig = analytics ? setupAnalytics({ name: analytics.name, token: analytics.token }, token, baseUrl, "custom") : void 0;
|
|
541
|
-
if (analyticsConfig) {
|
|
542
|
-
setAnalyticsHeaders(headers, analyticsConfig);
|
|
543
|
-
request.url = analyticsConfig.baseURL;
|
|
544
|
-
} else {
|
|
545
|
-
request.url = `${baseUrl}/v1/chat/completions`;
|
|
546
|
-
headers.set("Authorization", `Bearer ${token}`);
|
|
547
|
-
}
|
|
548
|
-
}
|
|
549
|
-
function handleUpstashProvider(request, headers, http, analytics) {
|
|
550
|
-
if (analytics) {
|
|
551
|
-
const analyticsConfig = setupAnalytics(
|
|
552
|
-
{ name: analytics.name, token: analytics.token },
|
|
553
|
-
//@ts-expect-error hacky way to get bearer token
|
|
554
|
-
String(http.authorization).split("Bearer ")[1],
|
|
555
|
-
request.api?.provider?.baseUrl,
|
|
556
|
-
"upstash"
|
|
557
|
-
);
|
|
558
|
-
setAnalyticsHeaders(headers, analyticsConfig);
|
|
559
|
-
request.url = analyticsConfig.baseURL;
|
|
560
|
-
} else {
|
|
561
|
-
request.api = { name: "llm" };
|
|
562
|
-
}
|
|
563
|
-
}
|
|
564
|
-
function validateProviderConfig(provider) {
|
|
565
|
-
if (!provider?.baseUrl)
|
|
566
|
-
throw new Error("baseUrl cannot be empty or undefined!");
|
|
567
|
-
if (!provider.token)
|
|
568
|
-
throw new Error("token cannot be empty or undefined!");
|
|
569
|
-
return { baseUrl: provider.baseUrl, token: provider.token };
|
|
570
|
-
}
|
|
571
|
-
function setAnalyticsHeaders(headers, analyticsConfig) {
|
|
572
|
-
headers.set("Helicone-Auth", analyticsConfig.defaultHeaders?.["Helicone-Auth"] ?? "");
|
|
573
|
-
headers.set("Authorization", analyticsConfig.defaultHeaders?.Authorization ?? "");
|
|
574
|
-
if (analyticsConfig.defaultHeaders?.["Helicone-Target-Url"]) {
|
|
575
|
-
headers.set("Helicone-Target-Url", analyticsConfig.defaultHeaders["Helicone-Target-Url"]);
|
|
576
|
-
}
|
|
577
|
-
}
|
|
578
|
-
function ensureCallbackPresent(request) {
|
|
579
|
-
if (request.api?.name === "llm" && !request.callback) {
|
|
580
|
-
throw new TypeError("Callback cannot be undefined when using LLM");
|
|
581
|
-
}
|
|
582
|
-
}
|
|
583
|
-
|
|
584
533
|
// src/client/messages.ts
|
|
585
534
|
var Messages = class {
|
|
586
535
|
http;
|
|
@@ -629,6 +578,144 @@ var Messages = class {
|
|
|
629
578
|
}
|
|
630
579
|
};
|
|
631
580
|
|
|
581
|
+
// src/client/api/base.ts
|
|
582
|
+
var BaseProvider = class {
|
|
583
|
+
baseUrl;
|
|
584
|
+
token;
|
|
585
|
+
owner;
|
|
586
|
+
constructor(baseUrl, token, owner) {
|
|
587
|
+
this.baseUrl = baseUrl;
|
|
588
|
+
this.token = token;
|
|
589
|
+
this.owner = owner;
|
|
590
|
+
}
|
|
591
|
+
getUrl() {
|
|
592
|
+
return `${this.baseUrl}/${this.getRoute().join("/")}`;
|
|
593
|
+
}
|
|
594
|
+
};
|
|
595
|
+
|
|
596
|
+
// src/client/api/llm.ts
|
|
597
|
+
var LLMProvider = class extends BaseProvider {
|
|
598
|
+
apiKind = "llm";
|
|
599
|
+
organization;
|
|
600
|
+
constructor(baseUrl, token, owner, organization) {
|
|
601
|
+
super(baseUrl, token, owner);
|
|
602
|
+
this.organization = organization;
|
|
603
|
+
}
|
|
604
|
+
getRoute() {
|
|
605
|
+
return this.owner === "anthropic" ? ["v1", "messages"] : ["v1", "chat", "completions"];
|
|
606
|
+
}
|
|
607
|
+
getHeaders(options) {
|
|
608
|
+
if (this.owner === "upstash" && !options.analytics) {
|
|
609
|
+
return {};
|
|
610
|
+
}
|
|
611
|
+
const header = this.owner === "anthropic" ? "x-api-key" : "authorization";
|
|
612
|
+
const headerValue = this.owner === "anthropic" ? this.token : `Bearer ${this.token}`;
|
|
613
|
+
const headers = { [header]: headerValue };
|
|
614
|
+
if (this.owner === "openai" && this.organization) {
|
|
615
|
+
headers["OpenAI-Organization"] = this.organization;
|
|
616
|
+
}
|
|
617
|
+
return headers;
|
|
618
|
+
}
|
|
619
|
+
/**
|
|
620
|
+
* Checks if callback exists and adds analytics in place if it's set.
|
|
621
|
+
*
|
|
622
|
+
* @param request
|
|
623
|
+
* @param options
|
|
624
|
+
*/
|
|
625
|
+
onFinish(providerInfo, options) {
|
|
626
|
+
if (options.analytics) {
|
|
627
|
+
return updateWithAnalytics(providerInfo, options.analytics);
|
|
628
|
+
}
|
|
629
|
+
return providerInfo;
|
|
630
|
+
}
|
|
631
|
+
};
|
|
632
|
+
var upstash = () => {
|
|
633
|
+
return new LLMProvider("https://qstash.upstash.io/llm", "", "upstash");
|
|
634
|
+
};
|
|
635
|
+
|
|
636
|
+
// src/client/api/utils.ts
|
|
637
|
+
var getProviderInfo = (api, upstashToken) => {
|
|
638
|
+
const { name, provider, ...parameters } = api;
|
|
639
|
+
const finalProvider = provider ?? upstash();
|
|
640
|
+
if (finalProvider.owner === "upstash" && !finalProvider.token) {
|
|
641
|
+
finalProvider.token = upstashToken;
|
|
642
|
+
}
|
|
643
|
+
if (!finalProvider.baseUrl)
|
|
644
|
+
throw new TypeError("baseUrl cannot be empty or undefined!");
|
|
645
|
+
if (!finalProvider.token)
|
|
646
|
+
throw new TypeError("token cannot be empty or undefined!");
|
|
647
|
+
if (finalProvider.apiKind !== name) {
|
|
648
|
+
throw new TypeError(
|
|
649
|
+
`Unexpected api name. Expected '${finalProvider.apiKind}', received ${name}`
|
|
650
|
+
);
|
|
651
|
+
}
|
|
652
|
+
const providerInfo = {
|
|
653
|
+
url: finalProvider.getUrl(),
|
|
654
|
+
baseUrl: finalProvider.baseUrl,
|
|
655
|
+
route: finalProvider.getRoute(),
|
|
656
|
+
appendHeaders: finalProvider.getHeaders(parameters),
|
|
657
|
+
owner: finalProvider.owner
|
|
658
|
+
};
|
|
659
|
+
return finalProvider.onFinish(providerInfo, parameters);
|
|
660
|
+
};
|
|
661
|
+
var processApi = (request, upstashToken) => {
|
|
662
|
+
if (!request.api) {
|
|
663
|
+
return request;
|
|
664
|
+
}
|
|
665
|
+
const { url, appendHeaders, owner } = getProviderInfo(request.api, upstashToken);
|
|
666
|
+
if (request.api.name === "llm") {
|
|
667
|
+
const callback = request.callback;
|
|
668
|
+
if (!callback) {
|
|
669
|
+
throw new TypeError("Callback cannot be undefined when using LLM api.");
|
|
670
|
+
}
|
|
671
|
+
return {
|
|
672
|
+
...request,
|
|
673
|
+
// @ts-expect-error undici header conflict
|
|
674
|
+
headers: new Headers({
|
|
675
|
+
...request.headers,
|
|
676
|
+
...appendHeaders
|
|
677
|
+
}),
|
|
678
|
+
...owner === "upstash" && !request.api.analytics ? { api: { name: "llm" }, url: void 0, callback } : { url, api: void 0 }
|
|
679
|
+
};
|
|
680
|
+
} else {
|
|
681
|
+
return {
|
|
682
|
+
...request,
|
|
683
|
+
// @ts-expect-error undici header conflict
|
|
684
|
+
headers: new Headers({
|
|
685
|
+
...request.headers,
|
|
686
|
+
...appendHeaders
|
|
687
|
+
}),
|
|
688
|
+
url,
|
|
689
|
+
api: void 0
|
|
690
|
+
};
|
|
691
|
+
}
|
|
692
|
+
};
|
|
693
|
+
function updateWithAnalytics(providerInfo, analytics) {
|
|
694
|
+
switch (analytics.name) {
|
|
695
|
+
case "helicone": {
|
|
696
|
+
providerInfo.appendHeaders["Helicone-Auth"] = `Bearer ${analytics.token}`;
|
|
697
|
+
if (providerInfo.owner === "upstash") {
|
|
698
|
+
updateProviderInfo(providerInfo, "https://qstash.helicone.ai", [
|
|
699
|
+
"llm",
|
|
700
|
+
...providerInfo.route
|
|
701
|
+
]);
|
|
702
|
+
} else {
|
|
703
|
+
providerInfo.appendHeaders["Helicone-Target-Url"] = providerInfo.baseUrl;
|
|
704
|
+
updateProviderInfo(providerInfo, "https://gateway.helicone.ai", providerInfo.route);
|
|
705
|
+
}
|
|
706
|
+
return providerInfo;
|
|
707
|
+
}
|
|
708
|
+
default: {
|
|
709
|
+
throw new Error("Unknown analytics provider");
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
}
|
|
713
|
+
function updateProviderInfo(providerInfo, baseUrl, route) {
|
|
714
|
+
providerInfo.baseUrl = baseUrl;
|
|
715
|
+
providerInfo.route = route;
|
|
716
|
+
providerInfo.url = `${baseUrl}/${route.join("/")}`;
|
|
717
|
+
}
|
|
718
|
+
|
|
632
719
|
// src/client/utils.ts
|
|
633
720
|
var isIgnoredHeader = (header) => {
|
|
634
721
|
const lowerCaseHeader = header.toLowerCase();
|
|
@@ -661,7 +748,7 @@ function processHeaders(request) {
|
|
|
661
748
|
if (request.deduplicationId !== void 0) {
|
|
662
749
|
headers.set("Upstash-Deduplication-Id", request.deduplicationId);
|
|
663
750
|
}
|
|
664
|
-
if (request.contentBasedDeduplication
|
|
751
|
+
if (request.contentBasedDeduplication) {
|
|
665
752
|
headers.set("Upstash-Content-Based-Deduplication", "true");
|
|
666
753
|
}
|
|
667
754
|
if (request.retries !== void 0) {
|
|
@@ -683,7 +770,16 @@ function processHeaders(request) {
|
|
|
683
770
|
return headers;
|
|
684
771
|
}
|
|
685
772
|
function getRequestPath(request) {
|
|
686
|
-
|
|
773
|
+
const nonApiPath = request.url ?? request.urlGroup ?? request.topic;
|
|
774
|
+
if (nonApiPath)
|
|
775
|
+
return nonApiPath;
|
|
776
|
+
if (request.api?.name === "llm")
|
|
777
|
+
return `api/llm`;
|
|
778
|
+
if (request.api?.name === "email") {
|
|
779
|
+
const providerInfo = getProviderInfo(request.api, "not-needed");
|
|
780
|
+
return providerInfo.baseUrl;
|
|
781
|
+
}
|
|
782
|
+
throw new QstashError(`Failed to infer request path for ${JSON.stringify(request)}`);
|
|
687
783
|
}
|
|
688
784
|
var NANOID_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_";
|
|
689
785
|
var NANOID_LENGTH = 21;
|
|
@@ -696,10 +792,18 @@ function decodeBase64(base64) {
|
|
|
696
792
|
const intArray = Uint8Array.from(binString, (m) => m.codePointAt(0));
|
|
697
793
|
return new TextDecoder().decode(intArray);
|
|
698
794
|
} catch (error) {
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
795
|
+
try {
|
|
796
|
+
const result = atob(base64);
|
|
797
|
+
console.warn(
|
|
798
|
+
`Upstash QStash: Failed while decoding base64 "${base64}". Decoding with atob and returning it instead. ${error}`
|
|
799
|
+
);
|
|
800
|
+
return result;
|
|
801
|
+
} catch (error2) {
|
|
802
|
+
console.warn(
|
|
803
|
+
`Upstash QStash: Failed to decode base64 "${base64}" with atob. Returning it as it is. ${error2}`
|
|
804
|
+
);
|
|
805
|
+
return base64;
|
|
806
|
+
}
|
|
703
807
|
}
|
|
704
808
|
}
|
|
705
809
|
|
|
@@ -790,11 +894,12 @@ var Queue = class {
|
|
|
790
894
|
async enqueueJSON(request) {
|
|
791
895
|
const headers = prefixHeaders(new Headers(request.headers));
|
|
792
896
|
headers.set("Content-Type", "application/json");
|
|
793
|
-
|
|
794
|
-
|
|
897
|
+
request.headers = headers;
|
|
898
|
+
const upstashToken = String(this.http.authorization).split("Bearer ")[1];
|
|
899
|
+
const nonApiRequest = processApi(request, upstashToken);
|
|
795
900
|
const response = await this.enqueue({
|
|
796
|
-
...
|
|
797
|
-
body: JSON.stringify(
|
|
901
|
+
...nonApiRequest,
|
|
902
|
+
body: JSON.stringify(nonApiRequest.body),
|
|
798
903
|
headers
|
|
799
904
|
});
|
|
800
905
|
return response;
|
|
@@ -874,6 +979,9 @@ var Schedules = class {
|
|
|
874
979
|
if (request.scheduleId !== void 0) {
|
|
875
980
|
headers.set("Upstash-Schedule-Id", request.scheduleId);
|
|
876
981
|
}
|
|
982
|
+
if (request.queueName !== void 0) {
|
|
983
|
+
headers.set("Upstash-Queue-Name", request.queueName);
|
|
984
|
+
}
|
|
877
985
|
return await this.http.request({
|
|
878
986
|
method: "POST",
|
|
879
987
|
headers,
|
|
@@ -1089,12 +1197,12 @@ var Client = class {
|
|
|
1089
1197
|
async publishJSON(request) {
|
|
1090
1198
|
const headers = prefixHeaders(new Headers(request.headers));
|
|
1091
1199
|
headers.set("Content-Type", "application/json");
|
|
1092
|
-
|
|
1093
|
-
|
|
1200
|
+
request.headers = headers;
|
|
1201
|
+
const upstashToken = String(this.http.authorization).split("Bearer ")[1];
|
|
1202
|
+
const nonApiRequest = processApi(request, upstashToken);
|
|
1094
1203
|
const response = await this.publish({
|
|
1095
|
-
...
|
|
1096
|
-
|
|
1097
|
-
body: JSON.stringify(request.body)
|
|
1204
|
+
...nonApiRequest,
|
|
1205
|
+
body: JSON.stringify(nonApiRequest.body)
|
|
1098
1206
|
});
|
|
1099
1207
|
return response;
|
|
1100
1208
|
}
|
|
@@ -1128,16 +1236,17 @@ var Client = class {
|
|
|
1128
1236
|
* Batch publish messages to QStash, serializing each body to JSON.
|
|
1129
1237
|
*/
|
|
1130
1238
|
async batchJSON(request) {
|
|
1131
|
-
|
|
1239
|
+
const batchPayload = request.map((message) => {
|
|
1132
1240
|
if ("body" in message) {
|
|
1133
1241
|
message.body = JSON.stringify(message.body);
|
|
1134
1242
|
}
|
|
1135
1243
|
message.headers = new Headers(message.headers);
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1244
|
+
const upstashToken = String(this.http.authorization).split("Bearer ")[1];
|
|
1245
|
+
const nonApiMessage = processApi(message, upstashToken);
|
|
1246
|
+
nonApiMessage.headers.set("Content-Type", "application/json");
|
|
1247
|
+
return nonApiMessage;
|
|
1248
|
+
});
|
|
1249
|
+
const response = await this.batch(batchPayload);
|
|
1141
1250
|
return response;
|
|
1142
1251
|
}
|
|
1143
1252
|
/**
|
package/nextjs.mjs
CHANGED
package/nuxt.js
CHANGED
|
@@ -383,11 +383,14 @@ var Receiver = class {
|
|
|
383
383
|
* If that fails, the signature is invalid and a `SignatureError` is thrown.
|
|
384
384
|
*/
|
|
385
385
|
async verify(request) {
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
386
|
+
let payload;
|
|
387
|
+
try {
|
|
388
|
+
payload = await this.verifyWithKey(this.currentSigningKey, request);
|
|
389
|
+
} catch {
|
|
390
|
+
payload = await this.verifyWithKey(this.nextSigningKey, request);
|
|
389
391
|
}
|
|
390
|
-
|
|
392
|
+
this.verifyBodyAndUrl(payload, request);
|
|
393
|
+
return true;
|
|
391
394
|
}
|
|
392
395
|
/**
|
|
393
396
|
* Verify signature with a specific signing key
|
|
@@ -399,7 +402,10 @@ var Receiver = class {
|
|
|
399
402
|
}).catch((error) => {
|
|
400
403
|
throw new SignatureError(error.message);
|
|
401
404
|
});
|
|
402
|
-
|
|
405
|
+
return jwt.payload;
|
|
406
|
+
}
|
|
407
|
+
verifyBodyAndUrl(payload, request) {
|
|
408
|
+
const p = payload;
|
|
403
409
|
if (request.url !== void 0 && p.sub !== request.url) {
|
|
404
410
|
throw new SignatureError(`invalid subject: ${p.sub}, want: ${request.url}`);
|
|
405
411
|
}
|
|
@@ -408,7 +414,6 @@ var Receiver = class {
|
|
|
408
414
|
if (p.body.replace(padding, "") !== bodyHash.replace(padding, "")) {
|
|
409
415
|
throw new SignatureError(`body hash does not match, want: ${p.body}, got: ${bodyHash}`);
|
|
410
416
|
}
|
|
411
|
-
return true;
|
|
412
417
|
}
|
|
413
418
|
};
|
|
414
419
|
|
package/nuxt.mjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
verifySignatureH3
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
5
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-LSYJT55T.mjs";
|
|
4
|
+
import "./chunk-X4MWA7DF.mjs";
|
|
5
|
+
import "./chunk-Y52A3KZT.mjs";
|
|
6
6
|
|
|
7
7
|
// platforms/nuxt.ts
|
|
8
8
|
var verifySignatureNuxt = verifySignatureH3;
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":"v2.7.
|
|
1
|
+
{"version":"v2.7.15","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"},"./dist/nextjs":{"import":"./nextjs.mjs","require":"./nextjs.js"},"./nextjs":{"import":"./nextjs.mjs","require":"./nextjs.js"},"./h3":{"import":"./h3.mjs","require":"./h3.js"},"./nuxt":{"import":"./nuxt.mjs","require":"./nuxt.js"},"./svelte":{"import":"./svelte.mjs","require":"./svelte.js"},"./solidjs":{"import":"./solidjs.mjs","require":"./solidjs.js"},"./workflow":{"import":"./workflow.mjs","require":"./workflow.js"},"./hono":{"import":"./hono.mjs","require":"./hono.js"},"./cloudflare":{"import":"./cloudflare.mjs","require":"./cloudflare.js"}},"keywords":["qstash","queue","events","serverless","upstash"],"scripts":{"build":"tsup && cp README.md ./dist/ && cp package.json ./dist/ && cp LICENSE ./dist/","test":"bun test src","fmt":"prettier --write .","lint":"tsc && eslint \"{src,platforms}/**/*.{js,ts,tsx}\" --quiet --fix","check-exports":"bun run build && cd dist && attw -P"},"devDependencies":{"@commitlint/cli":"^19.2.2","@commitlint/config-conventional":"^19.2.2","@eslint/eslintrc":"^3.1.0","@eslint/js":"^9.10.0","@solidjs/start":"^1.0.6","@sveltejs/kit":"^2.5.18","@types/bun":"^1.1.1","@types/crypto-js":"^4.2.0","@typescript-eslint/eslint-plugin":"^8.4.0","@typescript-eslint/parser":"^8.4.0","ai":"^3.1.28","bun-types":"^1.1.7","eslint":"^9.10.0","eslint-plugin-unicorn":"^51.0.1","h3":"^1.12.0","hono":"^4.5.8","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","neverthrow":"^7.0.1"}}
|
package/solidjs.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { APIHandler, APIEvent } from '@solidjs/start/server';
|
|
2
|
-
import {
|
|
2
|
+
import { a3 as RouteFunction, a4 as WorkflowServeOptions } from './client-RORrka04.mjs';
|
|
3
3
|
import 'neverthrow';
|
|
4
4
|
|
|
5
5
|
type VerifySignatureConfig = {
|
package/solidjs.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { APIHandler, APIEvent } from '@solidjs/start/server';
|
|
2
|
-
import {
|
|
2
|
+
import { a3 as RouteFunction, a4 as WorkflowServeOptions } from './client-RORrka04.js';
|
|
3
3
|
import 'neverthrow';
|
|
4
4
|
|
|
5
5
|
type VerifySignatureConfig = {
|