@upstash/workflow 0.1.1 → 0.1.2-canary-astro
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 +4 -4
- package/astro.d.mts +9 -0
- package/astro.d.ts +9 -0
- package/astro.js +2128 -0
- package/astro.mjs +18 -0
- package/{chunk-XPMFG3Q4.mjs → chunk-EKVRVBHL.mjs} +35 -21
- package/cloudflare.js +35 -21
- package/cloudflare.mjs +1 -1
- package/h3.js +38 -21
- package/h3.mjs +4 -1
- package/hono.js +35 -21
- package/hono.mjs +1 -1
- package/index.js +35 -21
- package/index.mjs +1 -1
- package/nextjs.js +35 -21
- package/nextjs.mjs +1 -1
- package/package.json +1 -1
- package/solidjs.js +35 -21
- package/solidjs.mjs +1 -1
- package/svelte.js +35 -21
- package/svelte.mjs +1 -1
package/astro.mjs
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import {
|
|
2
|
+
serve
|
|
3
|
+
} from "./chunk-EKVRVBHL.mjs";
|
|
4
|
+
|
|
5
|
+
// platforms/astro.ts
|
|
6
|
+
function serve2(routeFunction, options) {
|
|
7
|
+
const POST = (apiContext) => {
|
|
8
|
+
const { handler } = serve(
|
|
9
|
+
(workflowContext) => routeFunction(workflowContext, apiContext),
|
|
10
|
+
options
|
|
11
|
+
);
|
|
12
|
+
return handler(apiContext.request);
|
|
13
|
+
};
|
|
14
|
+
return { POST };
|
|
15
|
+
}
|
|
16
|
+
export {
|
|
17
|
+
serve2 as serve
|
|
18
|
+
};
|
|
@@ -573,15 +573,16 @@ ${atob(callbackMessage.body)}`
|
|
|
573
573
|
failureUrl,
|
|
574
574
|
retries
|
|
575
575
|
);
|
|
576
|
+
const callResponse = {
|
|
577
|
+
status: callbackMessage.status,
|
|
578
|
+
body: atob(callbackMessage.body),
|
|
579
|
+
header: callbackMessage.header
|
|
580
|
+
};
|
|
576
581
|
const callResultStep = {
|
|
577
582
|
stepId: Number(stepIdString),
|
|
578
583
|
stepName,
|
|
579
584
|
stepType,
|
|
580
|
-
out:
|
|
581
|
-
status: callbackMessage.status,
|
|
582
|
-
body: atob(callbackMessage.body),
|
|
583
|
-
header: callbackMessage.header
|
|
584
|
-
},
|
|
585
|
+
out: JSON.stringify(callResponse),
|
|
585
586
|
concurrent: Number(concurrentString)
|
|
586
587
|
};
|
|
587
588
|
await debug?.log("SUBMIT", "SUBMIT_THIRD_PARTY_RESULT", {
|
|
@@ -615,10 +616,11 @@ var getHeaders = (initHeaderValue, workflowRunId, workflowUrl, userHeaders, step
|
|
|
615
616
|
const baseHeaders = {
|
|
616
617
|
[WORKFLOW_INIT_HEADER]: initHeaderValue,
|
|
617
618
|
[WORKFLOW_ID_HEADER]: workflowRunId,
|
|
618
|
-
[WORKFLOW_URL_HEADER]: workflowUrl
|
|
619
|
-
[WORKFLOW_FEATURE_HEADER]: "WF_NoDelete",
|
|
620
|
-
[`Upstash-Forward-${WORKFLOW_PROTOCOL_VERSION_HEADER}`]: WORKFLOW_PROTOCOL_VERSION
|
|
619
|
+
[WORKFLOW_URL_HEADER]: workflowUrl
|
|
621
620
|
};
|
|
621
|
+
if (!step?.callUrl) {
|
|
622
|
+
baseHeaders[`Upstash-Forward-${WORKFLOW_PROTOCOL_VERSION_HEADER}`] = WORKFLOW_PROTOCOL_VERSION;
|
|
623
|
+
}
|
|
622
624
|
if (failureUrl) {
|
|
623
625
|
if (!step?.callUrl) {
|
|
624
626
|
baseHeaders[`Upstash-Failure-Callback-Forward-${WORKFLOW_FAILURE_HEADER}`] = "true";
|
|
@@ -627,6 +629,7 @@ var getHeaders = (initHeaderValue, workflowRunId, workflowUrl, userHeaders, step
|
|
|
627
629
|
}
|
|
628
630
|
if (step?.callUrl) {
|
|
629
631
|
baseHeaders["Upstash-Retries"] = "0";
|
|
632
|
+
baseHeaders[WORKFLOW_FEATURE_HEADER] = "WF_NoDelete";
|
|
630
633
|
if (retries) {
|
|
631
634
|
baseHeaders["Upstash-Callback-Retries"] = retries.toString();
|
|
632
635
|
baseHeaders["Upstash-Failure-Callback-Retries"] = retries.toString();
|
|
@@ -990,6 +993,7 @@ var AutoExecutor = class _AutoExecutor {
|
|
|
990
993
|
this.context.retries
|
|
991
994
|
);
|
|
992
995
|
const willWait = singleStep.concurrent === NO_CONCURRENCY || singleStep.stepId === 0;
|
|
996
|
+
singleStep.out = JSON.stringify(singleStep.out);
|
|
993
997
|
return singleStep.callUrl ? (
|
|
994
998
|
// if the step is a third party call, we call the third party
|
|
995
999
|
// url (singleStep.callUrl) and pass information about the workflow
|
|
@@ -1702,7 +1706,7 @@ var getPayload = async (request) => {
|
|
|
1702
1706
|
return;
|
|
1703
1707
|
}
|
|
1704
1708
|
};
|
|
1705
|
-
var parsePayload = (rawPayload) => {
|
|
1709
|
+
var parsePayload = async (rawPayload, debug) => {
|
|
1706
1710
|
const [encodedInitialPayload, ...encodedSteps] = JSON.parse(rawPayload);
|
|
1707
1711
|
const rawInitialPayload = decodeBase64(encodedInitialPayload.body);
|
|
1708
1712
|
const initialStep = {
|
|
@@ -1713,17 +1717,27 @@ var parsePayload = (rawPayload) => {
|
|
|
1713
1717
|
concurrent: NO_CONCURRENCY
|
|
1714
1718
|
};
|
|
1715
1719
|
const stepsToDecode = encodedSteps.filter((step) => step.callType === "step");
|
|
1716
|
-
const otherSteps =
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
|
|
1720
|
-
|
|
1721
|
-
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1720
|
+
const otherSteps = await Promise.all(
|
|
1721
|
+
stepsToDecode.map(async (rawStep) => {
|
|
1722
|
+
const step = JSON.parse(decodeBase64(rawStep.body));
|
|
1723
|
+
try {
|
|
1724
|
+
step.out = JSON.parse(step.out);
|
|
1725
|
+
} catch {
|
|
1726
|
+
await debug?.log("WARN", "ENDPOINT_START", {
|
|
1727
|
+
message: "failed while parsing out field of step",
|
|
1728
|
+
step
|
|
1729
|
+
});
|
|
1730
|
+
}
|
|
1731
|
+
if (step.waitEventId) {
|
|
1732
|
+
const newOut = {
|
|
1733
|
+
eventData: step.out ? decodeBase64(step.out) : void 0,
|
|
1734
|
+
timeout: step.waitTimeout ?? false
|
|
1735
|
+
};
|
|
1736
|
+
step.out = newOut;
|
|
1737
|
+
}
|
|
1738
|
+
return step;
|
|
1739
|
+
})
|
|
1740
|
+
);
|
|
1727
1741
|
const steps = [initialStep, ...otherSteps];
|
|
1728
1742
|
return {
|
|
1729
1743
|
rawInitialPayload,
|
|
@@ -1795,7 +1809,7 @@ var parseRequest = async (requestPayload, isFirstInvocation, debug) => {
|
|
|
1795
1809
|
if (!requestPayload) {
|
|
1796
1810
|
throw new QStashWorkflowError("Only first call can have an empty body");
|
|
1797
1811
|
}
|
|
1798
|
-
const { rawInitialPayload, steps } = parsePayload(requestPayload);
|
|
1812
|
+
const { rawInitialPayload, steps } = await parsePayload(requestPayload, debug);
|
|
1799
1813
|
const isLastDuplicate = await checkIfLastOneIsDuplicate(steps, debug);
|
|
1800
1814
|
const deduplicatedSteps = deduplicateSteps(steps);
|
|
1801
1815
|
return {
|
package/cloudflare.js
CHANGED
|
@@ -599,15 +599,16 @@ ${atob(callbackMessage.body)}`
|
|
|
599
599
|
failureUrl,
|
|
600
600
|
retries
|
|
601
601
|
);
|
|
602
|
+
const callResponse = {
|
|
603
|
+
status: callbackMessage.status,
|
|
604
|
+
body: atob(callbackMessage.body),
|
|
605
|
+
header: callbackMessage.header
|
|
606
|
+
};
|
|
602
607
|
const callResultStep = {
|
|
603
608
|
stepId: Number(stepIdString),
|
|
604
609
|
stepName,
|
|
605
610
|
stepType,
|
|
606
|
-
out:
|
|
607
|
-
status: callbackMessage.status,
|
|
608
|
-
body: atob(callbackMessage.body),
|
|
609
|
-
header: callbackMessage.header
|
|
610
|
-
},
|
|
611
|
+
out: JSON.stringify(callResponse),
|
|
611
612
|
concurrent: Number(concurrentString)
|
|
612
613
|
};
|
|
613
614
|
await debug?.log("SUBMIT", "SUBMIT_THIRD_PARTY_RESULT", {
|
|
@@ -641,10 +642,11 @@ var getHeaders = (initHeaderValue, workflowRunId, workflowUrl, userHeaders, step
|
|
|
641
642
|
const baseHeaders = {
|
|
642
643
|
[WORKFLOW_INIT_HEADER]: initHeaderValue,
|
|
643
644
|
[WORKFLOW_ID_HEADER]: workflowRunId,
|
|
644
|
-
[WORKFLOW_URL_HEADER]: workflowUrl
|
|
645
|
-
[WORKFLOW_FEATURE_HEADER]: "WF_NoDelete",
|
|
646
|
-
[`Upstash-Forward-${WORKFLOW_PROTOCOL_VERSION_HEADER}`]: WORKFLOW_PROTOCOL_VERSION
|
|
645
|
+
[WORKFLOW_URL_HEADER]: workflowUrl
|
|
647
646
|
};
|
|
647
|
+
if (!step?.callUrl) {
|
|
648
|
+
baseHeaders[`Upstash-Forward-${WORKFLOW_PROTOCOL_VERSION_HEADER}`] = WORKFLOW_PROTOCOL_VERSION;
|
|
649
|
+
}
|
|
648
650
|
if (failureUrl) {
|
|
649
651
|
if (!step?.callUrl) {
|
|
650
652
|
baseHeaders[`Upstash-Failure-Callback-Forward-${WORKFLOW_FAILURE_HEADER}`] = "true";
|
|
@@ -653,6 +655,7 @@ var getHeaders = (initHeaderValue, workflowRunId, workflowUrl, userHeaders, step
|
|
|
653
655
|
}
|
|
654
656
|
if (step?.callUrl) {
|
|
655
657
|
baseHeaders["Upstash-Retries"] = "0";
|
|
658
|
+
baseHeaders[WORKFLOW_FEATURE_HEADER] = "WF_NoDelete";
|
|
656
659
|
if (retries) {
|
|
657
660
|
baseHeaders["Upstash-Callback-Retries"] = retries.toString();
|
|
658
661
|
baseHeaders["Upstash-Failure-Callback-Retries"] = retries.toString();
|
|
@@ -1016,6 +1019,7 @@ var AutoExecutor = class _AutoExecutor {
|
|
|
1016
1019
|
this.context.retries
|
|
1017
1020
|
);
|
|
1018
1021
|
const willWait = singleStep.concurrent === NO_CONCURRENCY || singleStep.stepId === 0;
|
|
1022
|
+
singleStep.out = JSON.stringify(singleStep.out);
|
|
1019
1023
|
return singleStep.callUrl ? (
|
|
1020
1024
|
// if the step is a third party call, we call the third party
|
|
1021
1025
|
// url (singleStep.callUrl) and pass information about the workflow
|
|
@@ -1721,7 +1725,7 @@ var getPayload = async (request) => {
|
|
|
1721
1725
|
return;
|
|
1722
1726
|
}
|
|
1723
1727
|
};
|
|
1724
|
-
var parsePayload = (rawPayload) => {
|
|
1728
|
+
var parsePayload = async (rawPayload, debug) => {
|
|
1725
1729
|
const [encodedInitialPayload, ...encodedSteps] = JSON.parse(rawPayload);
|
|
1726
1730
|
const rawInitialPayload = decodeBase64(encodedInitialPayload.body);
|
|
1727
1731
|
const initialStep = {
|
|
@@ -1732,17 +1736,27 @@ var parsePayload = (rawPayload) => {
|
|
|
1732
1736
|
concurrent: NO_CONCURRENCY
|
|
1733
1737
|
};
|
|
1734
1738
|
const stepsToDecode = encodedSteps.filter((step) => step.callType === "step");
|
|
1735
|
-
const otherSteps =
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
|
|
1739
|
+
const otherSteps = await Promise.all(
|
|
1740
|
+
stepsToDecode.map(async (rawStep) => {
|
|
1741
|
+
const step = JSON.parse(decodeBase64(rawStep.body));
|
|
1742
|
+
try {
|
|
1743
|
+
step.out = JSON.parse(step.out);
|
|
1744
|
+
} catch {
|
|
1745
|
+
await debug?.log("WARN", "ENDPOINT_START", {
|
|
1746
|
+
message: "failed while parsing out field of step",
|
|
1747
|
+
step
|
|
1748
|
+
});
|
|
1749
|
+
}
|
|
1750
|
+
if (step.waitEventId) {
|
|
1751
|
+
const newOut = {
|
|
1752
|
+
eventData: step.out ? decodeBase64(step.out) : void 0,
|
|
1753
|
+
timeout: step.waitTimeout ?? false
|
|
1754
|
+
};
|
|
1755
|
+
step.out = newOut;
|
|
1756
|
+
}
|
|
1757
|
+
return step;
|
|
1758
|
+
})
|
|
1759
|
+
);
|
|
1746
1760
|
const steps = [initialStep, ...otherSteps];
|
|
1747
1761
|
return {
|
|
1748
1762
|
rawInitialPayload,
|
|
@@ -1814,7 +1828,7 @@ var parseRequest = async (requestPayload, isFirstInvocation, debug) => {
|
|
|
1814
1828
|
if (!requestPayload) {
|
|
1815
1829
|
throw new QStashWorkflowError("Only first call can have an empty body");
|
|
1816
1830
|
}
|
|
1817
|
-
const { rawInitialPayload, steps } = parsePayload(requestPayload);
|
|
1831
|
+
const { rawInitialPayload, steps } = await parsePayload(requestPayload, debug);
|
|
1818
1832
|
const isLastDuplicate = await checkIfLastOneIsDuplicate(steps, debug);
|
|
1819
1833
|
const deduplicatedSteps = deduplicateSteps(steps);
|
|
1820
1834
|
return {
|
package/cloudflare.mjs
CHANGED
package/h3.js
CHANGED
|
@@ -253,6 +253,9 @@ function readRawBody(event, encoding = "utf8") {
|
|
|
253
253
|
if (_resolved.constructor === Object) {
|
|
254
254
|
return Buffer.from(JSON.stringify(_resolved));
|
|
255
255
|
}
|
|
256
|
+
if (_resolved instanceof URLSearchParams) {
|
|
257
|
+
return Buffer.from(_resolved.toString());
|
|
258
|
+
}
|
|
256
259
|
return Buffer.from(_resolved);
|
|
257
260
|
});
|
|
258
261
|
return encoding ? promise2.then((buff) => buff.toString(encoding)) : promise2;
|
|
@@ -908,15 +911,16 @@ ${atob(callbackMessage.body)}`
|
|
|
908
911
|
failureUrl,
|
|
909
912
|
retries
|
|
910
913
|
);
|
|
914
|
+
const callResponse = {
|
|
915
|
+
status: callbackMessage.status,
|
|
916
|
+
body: atob(callbackMessage.body),
|
|
917
|
+
header: callbackMessage.header
|
|
918
|
+
};
|
|
911
919
|
const callResultStep = {
|
|
912
920
|
stepId: Number(stepIdString),
|
|
913
921
|
stepName,
|
|
914
922
|
stepType,
|
|
915
|
-
out:
|
|
916
|
-
status: callbackMessage.status,
|
|
917
|
-
body: atob(callbackMessage.body),
|
|
918
|
-
header: callbackMessage.header
|
|
919
|
-
},
|
|
923
|
+
out: JSON.stringify(callResponse),
|
|
920
924
|
concurrent: Number(concurrentString)
|
|
921
925
|
};
|
|
922
926
|
await debug?.log("SUBMIT", "SUBMIT_THIRD_PARTY_RESULT", {
|
|
@@ -950,10 +954,11 @@ var getHeaders = (initHeaderValue, workflowRunId, workflowUrl, userHeaders, step
|
|
|
950
954
|
const baseHeaders = {
|
|
951
955
|
[WORKFLOW_INIT_HEADER]: initHeaderValue,
|
|
952
956
|
[WORKFLOW_ID_HEADER]: workflowRunId,
|
|
953
|
-
[WORKFLOW_URL_HEADER]: workflowUrl
|
|
954
|
-
[WORKFLOW_FEATURE_HEADER]: "WF_NoDelete",
|
|
955
|
-
[`Upstash-Forward-${WORKFLOW_PROTOCOL_VERSION_HEADER}`]: WORKFLOW_PROTOCOL_VERSION
|
|
957
|
+
[WORKFLOW_URL_HEADER]: workflowUrl
|
|
956
958
|
};
|
|
959
|
+
if (!step?.callUrl) {
|
|
960
|
+
baseHeaders[`Upstash-Forward-${WORKFLOW_PROTOCOL_VERSION_HEADER}`] = WORKFLOW_PROTOCOL_VERSION;
|
|
961
|
+
}
|
|
957
962
|
if (failureUrl) {
|
|
958
963
|
if (!step?.callUrl) {
|
|
959
964
|
baseHeaders[`Upstash-Failure-Callback-Forward-${WORKFLOW_FAILURE_HEADER}`] = "true";
|
|
@@ -962,6 +967,7 @@ var getHeaders = (initHeaderValue, workflowRunId, workflowUrl, userHeaders, step
|
|
|
962
967
|
}
|
|
963
968
|
if (step?.callUrl) {
|
|
964
969
|
baseHeaders["Upstash-Retries"] = "0";
|
|
970
|
+
baseHeaders[WORKFLOW_FEATURE_HEADER] = "WF_NoDelete";
|
|
965
971
|
if (retries) {
|
|
966
972
|
baseHeaders["Upstash-Callback-Retries"] = retries.toString();
|
|
967
973
|
baseHeaders["Upstash-Failure-Callback-Retries"] = retries.toString();
|
|
@@ -1325,6 +1331,7 @@ var AutoExecutor = class _AutoExecutor {
|
|
|
1325
1331
|
this.context.retries
|
|
1326
1332
|
);
|
|
1327
1333
|
const willWait = singleStep.concurrent === NO_CONCURRENCY || singleStep.stepId === 0;
|
|
1334
|
+
singleStep.out = JSON.stringify(singleStep.out);
|
|
1328
1335
|
return singleStep.callUrl ? (
|
|
1329
1336
|
// if the step is a third party call, we call the third party
|
|
1330
1337
|
// url (singleStep.callUrl) and pass information about the workflow
|
|
@@ -2030,7 +2037,7 @@ var getPayload = async (request) => {
|
|
|
2030
2037
|
return;
|
|
2031
2038
|
}
|
|
2032
2039
|
};
|
|
2033
|
-
var parsePayload = (rawPayload) => {
|
|
2040
|
+
var parsePayload = async (rawPayload, debug) => {
|
|
2034
2041
|
const [encodedInitialPayload, ...encodedSteps] = JSON.parse(rawPayload);
|
|
2035
2042
|
const rawInitialPayload = decodeBase64(encodedInitialPayload.body);
|
|
2036
2043
|
const initialStep = {
|
|
@@ -2041,17 +2048,27 @@ var parsePayload = (rawPayload) => {
|
|
|
2041
2048
|
concurrent: NO_CONCURRENCY
|
|
2042
2049
|
};
|
|
2043
2050
|
const stepsToDecode = encodedSteps.filter((step) => step.callType === "step");
|
|
2044
|
-
const otherSteps =
|
|
2045
|
-
|
|
2046
|
-
|
|
2047
|
-
|
|
2048
|
-
|
|
2049
|
-
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
2053
|
-
|
|
2054
|
-
|
|
2051
|
+
const otherSteps = await Promise.all(
|
|
2052
|
+
stepsToDecode.map(async (rawStep) => {
|
|
2053
|
+
const step = JSON.parse(decodeBase64(rawStep.body));
|
|
2054
|
+
try {
|
|
2055
|
+
step.out = JSON.parse(step.out);
|
|
2056
|
+
} catch {
|
|
2057
|
+
await debug?.log("WARN", "ENDPOINT_START", {
|
|
2058
|
+
message: "failed while parsing out field of step",
|
|
2059
|
+
step
|
|
2060
|
+
});
|
|
2061
|
+
}
|
|
2062
|
+
if (step.waitEventId) {
|
|
2063
|
+
const newOut = {
|
|
2064
|
+
eventData: step.out ? decodeBase64(step.out) : void 0,
|
|
2065
|
+
timeout: step.waitTimeout ?? false
|
|
2066
|
+
};
|
|
2067
|
+
step.out = newOut;
|
|
2068
|
+
}
|
|
2069
|
+
return step;
|
|
2070
|
+
})
|
|
2071
|
+
);
|
|
2055
2072
|
const steps = [initialStep, ...otherSteps];
|
|
2056
2073
|
return {
|
|
2057
2074
|
rawInitialPayload,
|
|
@@ -2123,7 +2140,7 @@ var parseRequest = async (requestPayload, isFirstInvocation, debug) => {
|
|
|
2123
2140
|
if (!requestPayload) {
|
|
2124
2141
|
throw new QStashWorkflowError("Only first call can have an empty body");
|
|
2125
2142
|
}
|
|
2126
|
-
const { rawInitialPayload, steps } = parsePayload(requestPayload);
|
|
2143
|
+
const { rawInitialPayload, steps } = await parsePayload(requestPayload, debug);
|
|
2127
2144
|
const isLastDuplicate = await checkIfLastOneIsDuplicate(steps, debug);
|
|
2128
2145
|
const deduplicatedSteps = deduplicateSteps(steps);
|
|
2129
2146
|
return {
|
package/h3.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
serve
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-EKVRVBHL.mjs";
|
|
4
4
|
|
|
5
5
|
// node_modules/defu/dist/defu.mjs
|
|
6
6
|
function isPlainObject(value) {
|
|
@@ -231,6 +231,9 @@ function readRawBody(event, encoding = "utf8") {
|
|
|
231
231
|
if (_resolved.constructor === Object) {
|
|
232
232
|
return Buffer.from(JSON.stringify(_resolved));
|
|
233
233
|
}
|
|
234
|
+
if (_resolved instanceof URLSearchParams) {
|
|
235
|
+
return Buffer.from(_resolved.toString());
|
|
236
|
+
}
|
|
234
237
|
return Buffer.from(_resolved);
|
|
235
238
|
});
|
|
236
239
|
return encoding ? promise2.then((buff) => buff.toString(encoding)) : promise2;
|
package/hono.js
CHANGED
|
@@ -599,15 +599,16 @@ ${atob(callbackMessage.body)}`
|
|
|
599
599
|
failureUrl,
|
|
600
600
|
retries
|
|
601
601
|
);
|
|
602
|
+
const callResponse = {
|
|
603
|
+
status: callbackMessage.status,
|
|
604
|
+
body: atob(callbackMessage.body),
|
|
605
|
+
header: callbackMessage.header
|
|
606
|
+
};
|
|
602
607
|
const callResultStep = {
|
|
603
608
|
stepId: Number(stepIdString),
|
|
604
609
|
stepName,
|
|
605
610
|
stepType,
|
|
606
|
-
out:
|
|
607
|
-
status: callbackMessage.status,
|
|
608
|
-
body: atob(callbackMessage.body),
|
|
609
|
-
header: callbackMessage.header
|
|
610
|
-
},
|
|
611
|
+
out: JSON.stringify(callResponse),
|
|
611
612
|
concurrent: Number(concurrentString)
|
|
612
613
|
};
|
|
613
614
|
await debug?.log("SUBMIT", "SUBMIT_THIRD_PARTY_RESULT", {
|
|
@@ -641,10 +642,11 @@ var getHeaders = (initHeaderValue, workflowRunId, workflowUrl, userHeaders, step
|
|
|
641
642
|
const baseHeaders = {
|
|
642
643
|
[WORKFLOW_INIT_HEADER]: initHeaderValue,
|
|
643
644
|
[WORKFLOW_ID_HEADER]: workflowRunId,
|
|
644
|
-
[WORKFLOW_URL_HEADER]: workflowUrl
|
|
645
|
-
[WORKFLOW_FEATURE_HEADER]: "WF_NoDelete",
|
|
646
|
-
[`Upstash-Forward-${WORKFLOW_PROTOCOL_VERSION_HEADER}`]: WORKFLOW_PROTOCOL_VERSION
|
|
645
|
+
[WORKFLOW_URL_HEADER]: workflowUrl
|
|
647
646
|
};
|
|
647
|
+
if (!step?.callUrl) {
|
|
648
|
+
baseHeaders[`Upstash-Forward-${WORKFLOW_PROTOCOL_VERSION_HEADER}`] = WORKFLOW_PROTOCOL_VERSION;
|
|
649
|
+
}
|
|
648
650
|
if (failureUrl) {
|
|
649
651
|
if (!step?.callUrl) {
|
|
650
652
|
baseHeaders[`Upstash-Failure-Callback-Forward-${WORKFLOW_FAILURE_HEADER}`] = "true";
|
|
@@ -653,6 +655,7 @@ var getHeaders = (initHeaderValue, workflowRunId, workflowUrl, userHeaders, step
|
|
|
653
655
|
}
|
|
654
656
|
if (step?.callUrl) {
|
|
655
657
|
baseHeaders["Upstash-Retries"] = "0";
|
|
658
|
+
baseHeaders[WORKFLOW_FEATURE_HEADER] = "WF_NoDelete";
|
|
656
659
|
if (retries) {
|
|
657
660
|
baseHeaders["Upstash-Callback-Retries"] = retries.toString();
|
|
658
661
|
baseHeaders["Upstash-Failure-Callback-Retries"] = retries.toString();
|
|
@@ -1016,6 +1019,7 @@ var AutoExecutor = class _AutoExecutor {
|
|
|
1016
1019
|
this.context.retries
|
|
1017
1020
|
);
|
|
1018
1021
|
const willWait = singleStep.concurrent === NO_CONCURRENCY || singleStep.stepId === 0;
|
|
1022
|
+
singleStep.out = JSON.stringify(singleStep.out);
|
|
1019
1023
|
return singleStep.callUrl ? (
|
|
1020
1024
|
// if the step is a third party call, we call the third party
|
|
1021
1025
|
// url (singleStep.callUrl) and pass information about the workflow
|
|
@@ -1721,7 +1725,7 @@ var getPayload = async (request) => {
|
|
|
1721
1725
|
return;
|
|
1722
1726
|
}
|
|
1723
1727
|
};
|
|
1724
|
-
var parsePayload = (rawPayload) => {
|
|
1728
|
+
var parsePayload = async (rawPayload, debug) => {
|
|
1725
1729
|
const [encodedInitialPayload, ...encodedSteps] = JSON.parse(rawPayload);
|
|
1726
1730
|
const rawInitialPayload = decodeBase64(encodedInitialPayload.body);
|
|
1727
1731
|
const initialStep = {
|
|
@@ -1732,17 +1736,27 @@ var parsePayload = (rawPayload) => {
|
|
|
1732
1736
|
concurrent: NO_CONCURRENCY
|
|
1733
1737
|
};
|
|
1734
1738
|
const stepsToDecode = encodedSteps.filter((step) => step.callType === "step");
|
|
1735
|
-
const otherSteps =
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
|
|
1739
|
+
const otherSteps = await Promise.all(
|
|
1740
|
+
stepsToDecode.map(async (rawStep) => {
|
|
1741
|
+
const step = JSON.parse(decodeBase64(rawStep.body));
|
|
1742
|
+
try {
|
|
1743
|
+
step.out = JSON.parse(step.out);
|
|
1744
|
+
} catch {
|
|
1745
|
+
await debug?.log("WARN", "ENDPOINT_START", {
|
|
1746
|
+
message: "failed while parsing out field of step",
|
|
1747
|
+
step
|
|
1748
|
+
});
|
|
1749
|
+
}
|
|
1750
|
+
if (step.waitEventId) {
|
|
1751
|
+
const newOut = {
|
|
1752
|
+
eventData: step.out ? decodeBase64(step.out) : void 0,
|
|
1753
|
+
timeout: step.waitTimeout ?? false
|
|
1754
|
+
};
|
|
1755
|
+
step.out = newOut;
|
|
1756
|
+
}
|
|
1757
|
+
return step;
|
|
1758
|
+
})
|
|
1759
|
+
);
|
|
1746
1760
|
const steps = [initialStep, ...otherSteps];
|
|
1747
1761
|
return {
|
|
1748
1762
|
rawInitialPayload,
|
|
@@ -1814,7 +1828,7 @@ var parseRequest = async (requestPayload, isFirstInvocation, debug) => {
|
|
|
1814
1828
|
if (!requestPayload) {
|
|
1815
1829
|
throw new QStashWorkflowError("Only first call can have an empty body");
|
|
1816
1830
|
}
|
|
1817
|
-
const { rawInitialPayload, steps } = parsePayload(requestPayload);
|
|
1831
|
+
const { rawInitialPayload, steps } = await parsePayload(requestPayload, debug);
|
|
1818
1832
|
const isLastDuplicate = await checkIfLastOneIsDuplicate(steps, debug);
|
|
1819
1833
|
const deduplicatedSteps = deduplicateSteps(steps);
|
|
1820
1834
|
return {
|
package/hono.mjs
CHANGED
package/index.js
CHANGED
|
@@ -605,15 +605,16 @@ ${atob(callbackMessage.body)}`
|
|
|
605
605
|
failureUrl,
|
|
606
606
|
retries
|
|
607
607
|
);
|
|
608
|
+
const callResponse = {
|
|
609
|
+
status: callbackMessage.status,
|
|
610
|
+
body: atob(callbackMessage.body),
|
|
611
|
+
header: callbackMessage.header
|
|
612
|
+
};
|
|
608
613
|
const callResultStep = {
|
|
609
614
|
stepId: Number(stepIdString),
|
|
610
615
|
stepName,
|
|
611
616
|
stepType,
|
|
612
|
-
out:
|
|
613
|
-
status: callbackMessage.status,
|
|
614
|
-
body: atob(callbackMessage.body),
|
|
615
|
-
header: callbackMessage.header
|
|
616
|
-
},
|
|
617
|
+
out: JSON.stringify(callResponse),
|
|
617
618
|
concurrent: Number(concurrentString)
|
|
618
619
|
};
|
|
619
620
|
await debug?.log("SUBMIT", "SUBMIT_THIRD_PARTY_RESULT", {
|
|
@@ -647,10 +648,11 @@ var getHeaders = (initHeaderValue, workflowRunId, workflowUrl, userHeaders, step
|
|
|
647
648
|
const baseHeaders = {
|
|
648
649
|
[WORKFLOW_INIT_HEADER]: initHeaderValue,
|
|
649
650
|
[WORKFLOW_ID_HEADER]: workflowRunId,
|
|
650
|
-
[WORKFLOW_URL_HEADER]: workflowUrl
|
|
651
|
-
[WORKFLOW_FEATURE_HEADER]: "WF_NoDelete",
|
|
652
|
-
[`Upstash-Forward-${WORKFLOW_PROTOCOL_VERSION_HEADER}`]: WORKFLOW_PROTOCOL_VERSION
|
|
651
|
+
[WORKFLOW_URL_HEADER]: workflowUrl
|
|
653
652
|
};
|
|
653
|
+
if (!step?.callUrl) {
|
|
654
|
+
baseHeaders[`Upstash-Forward-${WORKFLOW_PROTOCOL_VERSION_HEADER}`] = WORKFLOW_PROTOCOL_VERSION;
|
|
655
|
+
}
|
|
654
656
|
if (failureUrl) {
|
|
655
657
|
if (!step?.callUrl) {
|
|
656
658
|
baseHeaders[`Upstash-Failure-Callback-Forward-${WORKFLOW_FAILURE_HEADER}`] = "true";
|
|
@@ -659,6 +661,7 @@ var getHeaders = (initHeaderValue, workflowRunId, workflowUrl, userHeaders, step
|
|
|
659
661
|
}
|
|
660
662
|
if (step?.callUrl) {
|
|
661
663
|
baseHeaders["Upstash-Retries"] = "0";
|
|
664
|
+
baseHeaders[WORKFLOW_FEATURE_HEADER] = "WF_NoDelete";
|
|
662
665
|
if (retries) {
|
|
663
666
|
baseHeaders["Upstash-Callback-Retries"] = retries.toString();
|
|
664
667
|
baseHeaders["Upstash-Failure-Callback-Retries"] = retries.toString();
|
|
@@ -1022,6 +1025,7 @@ var AutoExecutor = class _AutoExecutor {
|
|
|
1022
1025
|
this.context.retries
|
|
1023
1026
|
);
|
|
1024
1027
|
const willWait = singleStep.concurrent === NO_CONCURRENCY || singleStep.stepId === 0;
|
|
1028
|
+
singleStep.out = JSON.stringify(singleStep.out);
|
|
1025
1029
|
return singleStep.callUrl ? (
|
|
1026
1030
|
// if the step is a third party call, we call the third party
|
|
1027
1031
|
// url (singleStep.callUrl) and pass information about the workflow
|
|
@@ -1734,7 +1738,7 @@ var getPayload = async (request) => {
|
|
|
1734
1738
|
return;
|
|
1735
1739
|
}
|
|
1736
1740
|
};
|
|
1737
|
-
var parsePayload = (rawPayload) => {
|
|
1741
|
+
var parsePayload = async (rawPayload, debug) => {
|
|
1738
1742
|
const [encodedInitialPayload, ...encodedSteps] = JSON.parse(rawPayload);
|
|
1739
1743
|
const rawInitialPayload = decodeBase64(encodedInitialPayload.body);
|
|
1740
1744
|
const initialStep = {
|
|
@@ -1745,17 +1749,27 @@ var parsePayload = (rawPayload) => {
|
|
|
1745
1749
|
concurrent: NO_CONCURRENCY
|
|
1746
1750
|
};
|
|
1747
1751
|
const stepsToDecode = encodedSteps.filter((step) => step.callType === "step");
|
|
1748
|
-
const otherSteps =
|
|
1749
|
-
|
|
1750
|
-
|
|
1751
|
-
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
|
-
|
|
1752
|
+
const otherSteps = await Promise.all(
|
|
1753
|
+
stepsToDecode.map(async (rawStep) => {
|
|
1754
|
+
const step = JSON.parse(decodeBase64(rawStep.body));
|
|
1755
|
+
try {
|
|
1756
|
+
step.out = JSON.parse(step.out);
|
|
1757
|
+
} catch {
|
|
1758
|
+
await debug?.log("WARN", "ENDPOINT_START", {
|
|
1759
|
+
message: "failed while parsing out field of step",
|
|
1760
|
+
step
|
|
1761
|
+
});
|
|
1762
|
+
}
|
|
1763
|
+
if (step.waitEventId) {
|
|
1764
|
+
const newOut = {
|
|
1765
|
+
eventData: step.out ? decodeBase64(step.out) : void 0,
|
|
1766
|
+
timeout: step.waitTimeout ?? false
|
|
1767
|
+
};
|
|
1768
|
+
step.out = newOut;
|
|
1769
|
+
}
|
|
1770
|
+
return step;
|
|
1771
|
+
})
|
|
1772
|
+
);
|
|
1759
1773
|
const steps = [initialStep, ...otherSteps];
|
|
1760
1774
|
return {
|
|
1761
1775
|
rawInitialPayload,
|
|
@@ -1827,7 +1841,7 @@ var parseRequest = async (requestPayload, isFirstInvocation, debug) => {
|
|
|
1827
1841
|
if (!requestPayload) {
|
|
1828
1842
|
throw new QStashWorkflowError("Only first call can have an empty body");
|
|
1829
1843
|
}
|
|
1830
|
-
const { rawInitialPayload, steps } = parsePayload(requestPayload);
|
|
1844
|
+
const { rawInitialPayload, steps } = await parsePayload(requestPayload, debug);
|
|
1831
1845
|
const isLastDuplicate = await checkIfLastOneIsDuplicate(steps, debug);
|
|
1832
1846
|
const deduplicatedSteps = deduplicateSteps(steps);
|
|
1833
1847
|
return {
|