@upstash/workflow 0.1.1-canary → 0.1.1-canary-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/{chunk-YW5KUHA2.mjs → chunk-BPN5JBNG.mjs} +116 -45
- package/cloudflare.d.mts +2 -4
- package/cloudflare.d.ts +2 -4
- package/cloudflare.js +100 -39
- package/cloudflare.mjs +4 -4
- package/h3.d.mts +5 -7
- package/h3.d.ts +5 -7
- package/h3.js +99 -38
- package/h3.mjs +3 -3
- package/hono.d.mts +1 -1
- package/hono.d.ts +1 -1
- package/hono.js +98 -37
- package/hono.mjs +2 -2
- package/index.d.mts +15 -9
- package/index.d.ts +15 -9
- package/index.js +116 -45
- package/index.mjs +1 -1
- package/nextjs.d.mts +4 -7
- package/nextjs.d.ts +4 -7
- package/nextjs.js +105 -46
- package/nextjs.mjs +9 -11
- package/package.json +1 -1
- package/solidjs.d.mts +2 -4
- package/solidjs.d.ts +2 -4
- package/solidjs.js +99 -38
- package/solidjs.mjs +3 -3
- package/svelte.d.mts +2 -4
- package/svelte.d.ts +2 -4
- package/svelte.js +100 -39
- package/svelte.mjs +4 -4
- package/{types-D8FBKkto.d.mts → types-CoXaNrxX.d.mts} +57 -18
- package/{types-D8FBKkto.d.ts → types-CoXaNrxX.d.ts} +57 -18
|
@@ -448,7 +448,6 @@ var WORKFLOW_ID_HEADER = "Upstash-Workflow-RunId";
|
|
|
448
448
|
var WORKFLOW_INIT_HEADER = "Upstash-Workflow-Init";
|
|
449
449
|
var WORKFLOW_URL_HEADER = "Upstash-Workflow-Url";
|
|
450
450
|
var WORKFLOW_FAILURE_HEADER = "Upstash-Workflow-Is-Failure";
|
|
451
|
-
var WORKFLOW_FEATURE_HEADER = "Upstash-Feature-Set";
|
|
452
451
|
var WORKFLOW_PROTOCOL_VERSION = "1";
|
|
453
452
|
var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
|
|
454
453
|
var DEFAULT_CONTENT_TYPE = "application/json";
|
|
@@ -534,13 +533,13 @@ var handleThirdPartyCallResult = async (request, requestPayload, client, workflo
|
|
|
534
533
|
try {
|
|
535
534
|
if (request.headers.get("Upstash-Workflow-Callback")) {
|
|
536
535
|
const callbackMessage = JSON.parse(requestPayload);
|
|
537
|
-
if (!(callbackMessage.status >= 200 && callbackMessage.status < 300)
|
|
536
|
+
if (!(callbackMessage.status >= 200 && callbackMessage.status < 300)) {
|
|
538
537
|
await debug?.log("WARN", "SUBMIT_THIRD_PARTY_RESULT", {
|
|
539
538
|
status: callbackMessage.status,
|
|
540
539
|
body: atob(callbackMessage.body)
|
|
541
540
|
});
|
|
542
541
|
console.warn(
|
|
543
|
-
`Workflow Warning: "context.call" failed with status ${callbackMessage.status} and will retry (
|
|
542
|
+
`Workflow Warning: "context.call" failed with status ${callbackMessage.status} and will retry (if there are retries remaining). Error Message:
|
|
544
543
|
${atob(callbackMessage.body)}`
|
|
545
544
|
);
|
|
546
545
|
return ok("call-will-retry");
|
|
@@ -577,11 +576,7 @@ ${atob(callbackMessage.body)}`
|
|
|
577
576
|
stepId: Number(stepIdString),
|
|
578
577
|
stepName,
|
|
579
578
|
stepType,
|
|
580
|
-
out:
|
|
581
|
-
status: callbackMessage.status,
|
|
582
|
-
body: atob(callbackMessage.body),
|
|
583
|
-
header: callbackMessage.header
|
|
584
|
-
},
|
|
579
|
+
out: atob(callbackMessage.body),
|
|
585
580
|
concurrent: Number(concurrentString)
|
|
586
581
|
};
|
|
587
582
|
await debug?.log("SUBMIT", "SUBMIT_THIRD_PARTY_RESULT", {
|
|
@@ -616,24 +611,15 @@ var getHeaders = (initHeaderValue, workflowRunId, workflowUrl, userHeaders, step
|
|
|
616
611
|
[WORKFLOW_INIT_HEADER]: initHeaderValue,
|
|
617
612
|
[WORKFLOW_ID_HEADER]: workflowRunId,
|
|
618
613
|
[WORKFLOW_URL_HEADER]: workflowUrl,
|
|
619
|
-
[
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
baseHeaders["Upstash-Failure-Callback"] = failureUrl;
|
|
627
|
-
}
|
|
628
|
-
if (step?.callUrl) {
|
|
629
|
-
baseHeaders["Upstash-Retries"] = "0";
|
|
630
|
-
if (retries) {
|
|
631
|
-
baseHeaders["Upstash-Callback-Retries"] = retries.toString();
|
|
632
|
-
baseHeaders["Upstash-Failure-Callback-Retries"] = retries.toString();
|
|
614
|
+
[`Upstash-Forward-${WORKFLOW_PROTOCOL_VERSION_HEADER}`]: WORKFLOW_PROTOCOL_VERSION,
|
|
615
|
+
...failureUrl ? {
|
|
616
|
+
[`Upstash-Failure-Callback-Forward-${WORKFLOW_FAILURE_HEADER}`]: "true",
|
|
617
|
+
"Upstash-Failure-Callback": failureUrl
|
|
618
|
+
} : {},
|
|
619
|
+
...retries === void 0 ? {} : {
|
|
620
|
+
"Upstash-Retries": retries.toString()
|
|
633
621
|
}
|
|
634
|
-
}
|
|
635
|
-
baseHeaders["Upstash-Retries"] = retries.toString();
|
|
636
|
-
}
|
|
622
|
+
};
|
|
637
623
|
if (userHeaders) {
|
|
638
624
|
for (const header of userHeaders.keys()) {
|
|
639
625
|
if (step?.callHeaders) {
|
|
@@ -1098,6 +1084,23 @@ var sortSteps = (steps) => {
|
|
|
1098
1084
|
return steps.toSorted((step, stepOther) => getStepId(step) - getStepId(stepOther));
|
|
1099
1085
|
};
|
|
1100
1086
|
|
|
1087
|
+
// src/client/utils.ts
|
|
1088
|
+
var makeNotifyRequest = async (requester, eventId, eventData) => {
|
|
1089
|
+
const result = await requester.request({
|
|
1090
|
+
path: ["v2", "notify", eventId],
|
|
1091
|
+
method: "POST",
|
|
1092
|
+
body: typeof eventData === "string" ? eventData : JSON.stringify(eventData)
|
|
1093
|
+
});
|
|
1094
|
+
return result;
|
|
1095
|
+
};
|
|
1096
|
+
var makeGetWaitersRequest = async (requester, eventId) => {
|
|
1097
|
+
const result = await requester.request({
|
|
1098
|
+
path: ["v2", "waiters", eventId],
|
|
1099
|
+
method: "GET"
|
|
1100
|
+
});
|
|
1101
|
+
return result;
|
|
1102
|
+
};
|
|
1103
|
+
|
|
1101
1104
|
// src/context/steps.ts
|
|
1102
1105
|
var BaseLazyStep = class {
|
|
1103
1106
|
stepName;
|
|
@@ -1256,6 +1259,19 @@ var LazyWaitForEventStep = class extends BaseLazyStep {
|
|
|
1256
1259
|
});
|
|
1257
1260
|
}
|
|
1258
1261
|
};
|
|
1262
|
+
var LazyNotifyStep = class extends LazyFunctionStep {
|
|
1263
|
+
stepType = "Notify";
|
|
1264
|
+
constructor(stepName, eventId, eventData, requester) {
|
|
1265
|
+
super(stepName, async () => {
|
|
1266
|
+
const notifyResponse = await makeNotifyRequest(requester, eventId, eventData);
|
|
1267
|
+
return {
|
|
1268
|
+
eventId,
|
|
1269
|
+
eventData,
|
|
1270
|
+
notifyResponse
|
|
1271
|
+
};
|
|
1272
|
+
});
|
|
1273
|
+
}
|
|
1274
|
+
};
|
|
1259
1275
|
|
|
1260
1276
|
// src/context/context.ts
|
|
1261
1277
|
var WorkflowContext = class {
|
|
@@ -1492,13 +1508,48 @@ var WorkflowContext = class {
|
|
|
1492
1508
|
* @returns call result (parsed as JSON if possible)
|
|
1493
1509
|
*/
|
|
1494
1510
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters
|
|
1495
|
-
async call(stepName,
|
|
1496
|
-
const { url, method = "GET", body, headers = {} } = callSettings;
|
|
1511
|
+
async call(stepName, url, method, body, headers) {
|
|
1497
1512
|
const result = await this.addStep(
|
|
1498
|
-
new LazyCallStep(stepName, url, method, body, headers)
|
|
1513
|
+
new LazyCallStep(stepName, url, method, body, headers ?? {})
|
|
1499
1514
|
);
|
|
1500
|
-
|
|
1515
|
+
try {
|
|
1516
|
+
return JSON.parse(result);
|
|
1517
|
+
} catch {
|
|
1518
|
+
return result;
|
|
1519
|
+
}
|
|
1501
1520
|
}
|
|
1521
|
+
/**
|
|
1522
|
+
* Makes the workflow run wait until a notify request is sent or until the
|
|
1523
|
+
* timeout ends
|
|
1524
|
+
*
|
|
1525
|
+
* ```ts
|
|
1526
|
+
* const { eventData, timeout } = await context.waitForEvent(
|
|
1527
|
+
* "wait for event step",
|
|
1528
|
+
* "my-event-id",
|
|
1529
|
+
* 100 // timeout after 100 seconds
|
|
1530
|
+
* );
|
|
1531
|
+
* ```
|
|
1532
|
+
*
|
|
1533
|
+
* To notify a waiting workflow run, you can use the notify method:
|
|
1534
|
+
*
|
|
1535
|
+
* ```ts
|
|
1536
|
+
* import { Client } from "@upstash/workflow";
|
|
1537
|
+
*
|
|
1538
|
+
* const client = new Client({ token: });
|
|
1539
|
+
*
|
|
1540
|
+
* await client.notify({
|
|
1541
|
+
* eventId: "my-event-id",
|
|
1542
|
+
* eventData: "eventData"
|
|
1543
|
+
* })
|
|
1544
|
+
* ```
|
|
1545
|
+
*
|
|
1546
|
+
* @param stepName
|
|
1547
|
+
* @param eventId event id to wake up the waiting workflow run
|
|
1548
|
+
* @param timeout timeout duration in seconds
|
|
1549
|
+
* @returns wait response as `{ timeout: boolean, eventData: unknown }`.
|
|
1550
|
+
* timeout is true if the wait times out, if notified it is false. eventData
|
|
1551
|
+
* is the value passed to `client.notify`.
|
|
1552
|
+
*/
|
|
1502
1553
|
async waitForEvent(stepName, eventId, timeout) {
|
|
1503
1554
|
const result = await this.addStep(
|
|
1504
1555
|
new LazyWaitForEventStep(
|
|
@@ -1507,7 +1558,27 @@ var WorkflowContext = class {
|
|
|
1507
1558
|
typeof timeout === "string" ? timeout : `${timeout}s`
|
|
1508
1559
|
)
|
|
1509
1560
|
);
|
|
1510
|
-
|
|
1561
|
+
try {
|
|
1562
|
+
return {
|
|
1563
|
+
...result,
|
|
1564
|
+
eventData: JSON.parse(result.eventData)
|
|
1565
|
+
};
|
|
1566
|
+
} catch {
|
|
1567
|
+
return result;
|
|
1568
|
+
}
|
|
1569
|
+
}
|
|
1570
|
+
async notify(stepName, eventId, eventData) {
|
|
1571
|
+
const result = await this.addStep(
|
|
1572
|
+
new LazyNotifyStep(stepName, eventId, eventData, this.qstashClient.http)
|
|
1573
|
+
);
|
|
1574
|
+
try {
|
|
1575
|
+
return {
|
|
1576
|
+
...result,
|
|
1577
|
+
eventData: JSON.parse(result.eventData)
|
|
1578
|
+
};
|
|
1579
|
+
} catch {
|
|
1580
|
+
return result;
|
|
1581
|
+
}
|
|
1511
1582
|
}
|
|
1512
1583
|
/**
|
|
1513
1584
|
* Adds steps to the executor. Needed so that it can be overwritten in
|
|
@@ -1608,7 +1679,7 @@ var parsePayload = (rawPayload) => {
|
|
|
1608
1679
|
const step = JSON.parse(decodeBase64(rawStep.body));
|
|
1609
1680
|
if (step.waitEventId) {
|
|
1610
1681
|
const newOut = {
|
|
1611
|
-
|
|
1682
|
+
eventData: step.out,
|
|
1612
1683
|
timeout: step.waitTimeout ?? false
|
|
1613
1684
|
};
|
|
1614
1685
|
step.out = newOut;
|
|
@@ -1865,7 +1936,6 @@ var serve = (routeFunction, options) => {
|
|
|
1865
1936
|
} = processOptions(options);
|
|
1866
1937
|
const debug = WorkflowLogger.getLogger(verbose);
|
|
1867
1938
|
const handler = async (request) => {
|
|
1868
|
-
await debug?.log("INFO", "ENDPOINT_START");
|
|
1869
1939
|
const { workflowUrl, workflowFailureUrl } = await determineUrls(
|
|
1870
1940
|
request,
|
|
1871
1941
|
url,
|
|
@@ -1909,8 +1979,7 @@ var serve = (routeFunction, options) => {
|
|
|
1909
1979
|
url: workflowUrl,
|
|
1910
1980
|
failureUrl: workflowFailureUrl,
|
|
1911
1981
|
debug,
|
|
1912
|
-
env
|
|
1913
|
-
retries
|
|
1982
|
+
env
|
|
1914
1983
|
});
|
|
1915
1984
|
const authCheck = await DisabledWorkflowContext.tryAuthentication(
|
|
1916
1985
|
routeFunction,
|
|
@@ -1953,7 +2022,7 @@ var serve = (routeFunction, options) => {
|
|
|
1953
2022
|
await debug?.log("INFO", "RESPONSE_DEFAULT");
|
|
1954
2023
|
return onStepFinish("no-workflow-id", "fromCallback");
|
|
1955
2024
|
};
|
|
1956
|
-
|
|
2025
|
+
return async (request) => {
|
|
1957
2026
|
try {
|
|
1958
2027
|
return await handler(request);
|
|
1959
2028
|
} catch (error) {
|
|
@@ -1963,7 +2032,6 @@ var serve = (routeFunction, options) => {
|
|
|
1963
2032
|
});
|
|
1964
2033
|
}
|
|
1965
2034
|
};
|
|
1966
|
-
return { handler: safeHandler };
|
|
1967
2035
|
};
|
|
1968
2036
|
|
|
1969
2037
|
// src/client/index.ts
|
|
@@ -1971,7 +2039,7 @@ import { Client as QStashClient } from "@upstash/qstash";
|
|
|
1971
2039
|
var Client3 = class {
|
|
1972
2040
|
client;
|
|
1973
2041
|
constructor(clientConfig) {
|
|
1974
|
-
if (!clientConfig.
|
|
2042
|
+
if (!clientConfig.token) {
|
|
1975
2043
|
console.warn("[Upstash Workflow] url or the token is not set. client will not work.");
|
|
1976
2044
|
}
|
|
1977
2045
|
this.client = new QStashClient(clientConfig);
|
|
@@ -1994,18 +2062,21 @@ var Client3 = class {
|
|
|
1994
2062
|
* Notify a workflow run waiting for an event
|
|
1995
2063
|
*
|
|
1996
2064
|
* @param eventId event id to notify
|
|
1997
|
-
* @param
|
|
2065
|
+
* @param eventData data to provide to the workflow
|
|
1998
2066
|
*/
|
|
1999
2067
|
async notify({
|
|
2000
2068
|
eventId,
|
|
2001
|
-
|
|
2069
|
+
eventData
|
|
2002
2070
|
}) {
|
|
2003
|
-
|
|
2004
|
-
|
|
2005
|
-
|
|
2006
|
-
|
|
2007
|
-
|
|
2008
|
-
|
|
2071
|
+
return await makeNotifyRequest(this.client.http, eventId, eventData);
|
|
2072
|
+
}
|
|
2073
|
+
/**
|
|
2074
|
+
* Check waiters of an event
|
|
2075
|
+
*
|
|
2076
|
+
* @param eventId event id to check
|
|
2077
|
+
*/
|
|
2078
|
+
async getWaiters({ eventId }) {
|
|
2079
|
+
return await makeGetWaitersRequest(this.client.http, eventId);
|
|
2009
2080
|
}
|
|
2010
2081
|
};
|
|
2011
2082
|
|
package/cloudflare.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { R as RouteFunction, W as WorkflowServeOptions } from './types-
|
|
1
|
+
import { R as RouteFunction, W as WorkflowServeOptions } from './types-CoXaNrxX.mjs';
|
|
2
2
|
import '@upstash/qstash';
|
|
3
3
|
|
|
4
4
|
type WorkflowBindings = {
|
|
@@ -28,8 +28,6 @@ type WorkersHandlerArgs = [Request, Record<string, string | undefined>];
|
|
|
28
28
|
* @param options workflow options
|
|
29
29
|
* @returns
|
|
30
30
|
*/
|
|
31
|
-
declare const serve: <TInitialPayload = unknown>(routeFunction: RouteFunction<TInitialPayload>, options?: Omit<WorkflowServeOptions<Response, TInitialPayload>, "onStepFinish">) =>
|
|
32
|
-
fetch: (...args: PagesHandlerArgs | WorkersHandlerArgs) => Promise<Response>;
|
|
33
|
-
};
|
|
31
|
+
declare const serve: <TInitialPayload = unknown>(routeFunction: RouteFunction<TInitialPayload>, options?: Omit<WorkflowServeOptions<Response, TInitialPayload>, "onStepFinish">) => ((...args: PagesHandlerArgs | WorkersHandlerArgs) => Promise<Response>);
|
|
34
32
|
|
|
35
33
|
export { type PagesHandlerArgs, type WorkersHandlerArgs, type WorkflowBindings, serve };
|
package/cloudflare.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { R as RouteFunction, W as WorkflowServeOptions } from './types-
|
|
1
|
+
import { R as RouteFunction, W as WorkflowServeOptions } from './types-CoXaNrxX.js';
|
|
2
2
|
import '@upstash/qstash';
|
|
3
3
|
|
|
4
4
|
type WorkflowBindings = {
|
|
@@ -28,8 +28,6 @@ type WorkersHandlerArgs = [Request, Record<string, string | undefined>];
|
|
|
28
28
|
* @param options workflow options
|
|
29
29
|
* @returns
|
|
30
30
|
*/
|
|
31
|
-
declare const serve: <TInitialPayload = unknown>(routeFunction: RouteFunction<TInitialPayload>, options?: Omit<WorkflowServeOptions<Response, TInitialPayload>, "onStepFinish">) =>
|
|
32
|
-
fetch: (...args: PagesHandlerArgs | WorkersHandlerArgs) => Promise<Response>;
|
|
33
|
-
};
|
|
31
|
+
declare const serve: <TInitialPayload = unknown>(routeFunction: RouteFunction<TInitialPayload>, options?: Omit<WorkflowServeOptions<Response, TInitialPayload>, "onStepFinish">) => ((...args: PagesHandlerArgs | WorkersHandlerArgs) => Promise<Response>);
|
|
34
32
|
|
|
35
33
|
export { type PagesHandlerArgs, type WorkersHandlerArgs, type WorkflowBindings, serve };
|
package/cloudflare.js
CHANGED
|
@@ -474,7 +474,6 @@ var WORKFLOW_ID_HEADER = "Upstash-Workflow-RunId";
|
|
|
474
474
|
var WORKFLOW_INIT_HEADER = "Upstash-Workflow-Init";
|
|
475
475
|
var WORKFLOW_URL_HEADER = "Upstash-Workflow-Url";
|
|
476
476
|
var WORKFLOW_FAILURE_HEADER = "Upstash-Workflow-Is-Failure";
|
|
477
|
-
var WORKFLOW_FEATURE_HEADER = "Upstash-Feature-Set";
|
|
478
477
|
var WORKFLOW_PROTOCOL_VERSION = "1";
|
|
479
478
|
var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
|
|
480
479
|
var DEFAULT_CONTENT_TYPE = "application/json";
|
|
@@ -560,13 +559,13 @@ var handleThirdPartyCallResult = async (request, requestPayload, client, workflo
|
|
|
560
559
|
try {
|
|
561
560
|
if (request.headers.get("Upstash-Workflow-Callback")) {
|
|
562
561
|
const callbackMessage = JSON.parse(requestPayload);
|
|
563
|
-
if (!(callbackMessage.status >= 200 && callbackMessage.status < 300)
|
|
562
|
+
if (!(callbackMessage.status >= 200 && callbackMessage.status < 300)) {
|
|
564
563
|
await debug?.log("WARN", "SUBMIT_THIRD_PARTY_RESULT", {
|
|
565
564
|
status: callbackMessage.status,
|
|
566
565
|
body: atob(callbackMessage.body)
|
|
567
566
|
});
|
|
568
567
|
console.warn(
|
|
569
|
-
`Workflow Warning: "context.call" failed with status ${callbackMessage.status} and will retry (
|
|
568
|
+
`Workflow Warning: "context.call" failed with status ${callbackMessage.status} and will retry (if there are retries remaining). Error Message:
|
|
570
569
|
${atob(callbackMessage.body)}`
|
|
571
570
|
);
|
|
572
571
|
return ok("call-will-retry");
|
|
@@ -603,11 +602,7 @@ ${atob(callbackMessage.body)}`
|
|
|
603
602
|
stepId: Number(stepIdString),
|
|
604
603
|
stepName,
|
|
605
604
|
stepType,
|
|
606
|
-
out:
|
|
607
|
-
status: callbackMessage.status,
|
|
608
|
-
body: atob(callbackMessage.body),
|
|
609
|
-
header: callbackMessage.header
|
|
610
|
-
},
|
|
605
|
+
out: atob(callbackMessage.body),
|
|
611
606
|
concurrent: Number(concurrentString)
|
|
612
607
|
};
|
|
613
608
|
await debug?.log("SUBMIT", "SUBMIT_THIRD_PARTY_RESULT", {
|
|
@@ -642,24 +637,15 @@ var getHeaders = (initHeaderValue, workflowRunId, workflowUrl, userHeaders, step
|
|
|
642
637
|
[WORKFLOW_INIT_HEADER]: initHeaderValue,
|
|
643
638
|
[WORKFLOW_ID_HEADER]: workflowRunId,
|
|
644
639
|
[WORKFLOW_URL_HEADER]: workflowUrl,
|
|
645
|
-
[
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
baseHeaders["Upstash-Failure-Callback"] = failureUrl;
|
|
653
|
-
}
|
|
654
|
-
if (step?.callUrl) {
|
|
655
|
-
baseHeaders["Upstash-Retries"] = "0";
|
|
656
|
-
if (retries) {
|
|
657
|
-
baseHeaders["Upstash-Callback-Retries"] = retries.toString();
|
|
658
|
-
baseHeaders["Upstash-Failure-Callback-Retries"] = retries.toString();
|
|
640
|
+
[`Upstash-Forward-${WORKFLOW_PROTOCOL_VERSION_HEADER}`]: WORKFLOW_PROTOCOL_VERSION,
|
|
641
|
+
...failureUrl ? {
|
|
642
|
+
[`Upstash-Failure-Callback-Forward-${WORKFLOW_FAILURE_HEADER}`]: "true",
|
|
643
|
+
"Upstash-Failure-Callback": failureUrl
|
|
644
|
+
} : {},
|
|
645
|
+
...retries === void 0 ? {} : {
|
|
646
|
+
"Upstash-Retries": retries.toString()
|
|
659
647
|
}
|
|
660
|
-
}
|
|
661
|
-
baseHeaders["Upstash-Retries"] = retries.toString();
|
|
662
|
-
}
|
|
648
|
+
};
|
|
663
649
|
if (userHeaders) {
|
|
664
650
|
for (const header of userHeaders.keys()) {
|
|
665
651
|
if (step?.callHeaders) {
|
|
@@ -1124,6 +1110,16 @@ var sortSteps = (steps) => {
|
|
|
1124
1110
|
return steps.toSorted((step, stepOther) => getStepId(step) - getStepId(stepOther));
|
|
1125
1111
|
};
|
|
1126
1112
|
|
|
1113
|
+
// src/client/utils.ts
|
|
1114
|
+
var makeNotifyRequest = async (requester, eventId, eventData) => {
|
|
1115
|
+
const result = await requester.request({
|
|
1116
|
+
path: ["v2", "notify", eventId],
|
|
1117
|
+
method: "POST",
|
|
1118
|
+
body: typeof eventData === "string" ? eventData : JSON.stringify(eventData)
|
|
1119
|
+
});
|
|
1120
|
+
return result;
|
|
1121
|
+
};
|
|
1122
|
+
|
|
1127
1123
|
// src/context/steps.ts
|
|
1128
1124
|
var BaseLazyStep = class {
|
|
1129
1125
|
stepName;
|
|
@@ -1282,6 +1278,19 @@ var LazyWaitForEventStep = class extends BaseLazyStep {
|
|
|
1282
1278
|
});
|
|
1283
1279
|
}
|
|
1284
1280
|
};
|
|
1281
|
+
var LazyNotifyStep = class extends LazyFunctionStep {
|
|
1282
|
+
stepType = "Notify";
|
|
1283
|
+
constructor(stepName, eventId, eventData, requester) {
|
|
1284
|
+
super(stepName, async () => {
|
|
1285
|
+
const notifyResponse = await makeNotifyRequest(requester, eventId, eventData);
|
|
1286
|
+
return {
|
|
1287
|
+
eventId,
|
|
1288
|
+
eventData,
|
|
1289
|
+
notifyResponse
|
|
1290
|
+
};
|
|
1291
|
+
});
|
|
1292
|
+
}
|
|
1293
|
+
};
|
|
1285
1294
|
|
|
1286
1295
|
// src/context/context.ts
|
|
1287
1296
|
var WorkflowContext = class {
|
|
@@ -1518,13 +1527,48 @@ var WorkflowContext = class {
|
|
|
1518
1527
|
* @returns call result (parsed as JSON if possible)
|
|
1519
1528
|
*/
|
|
1520
1529
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters
|
|
1521
|
-
async call(stepName,
|
|
1522
|
-
const { url, method = "GET", body, headers = {} } = callSettings;
|
|
1530
|
+
async call(stepName, url, method, body, headers) {
|
|
1523
1531
|
const result = await this.addStep(
|
|
1524
|
-
new LazyCallStep(stepName, url, method, body, headers)
|
|
1532
|
+
new LazyCallStep(stepName, url, method, body, headers ?? {})
|
|
1525
1533
|
);
|
|
1526
|
-
|
|
1534
|
+
try {
|
|
1535
|
+
return JSON.parse(result);
|
|
1536
|
+
} catch {
|
|
1537
|
+
return result;
|
|
1538
|
+
}
|
|
1527
1539
|
}
|
|
1540
|
+
/**
|
|
1541
|
+
* Makes the workflow run wait until a notify request is sent or until the
|
|
1542
|
+
* timeout ends
|
|
1543
|
+
*
|
|
1544
|
+
* ```ts
|
|
1545
|
+
* const { eventData, timeout } = await context.waitForEvent(
|
|
1546
|
+
* "wait for event step",
|
|
1547
|
+
* "my-event-id",
|
|
1548
|
+
* 100 // timeout after 100 seconds
|
|
1549
|
+
* );
|
|
1550
|
+
* ```
|
|
1551
|
+
*
|
|
1552
|
+
* To notify a waiting workflow run, you can use the notify method:
|
|
1553
|
+
*
|
|
1554
|
+
* ```ts
|
|
1555
|
+
* import { Client } from "@upstash/workflow";
|
|
1556
|
+
*
|
|
1557
|
+
* const client = new Client({ token: });
|
|
1558
|
+
*
|
|
1559
|
+
* await client.notify({
|
|
1560
|
+
* eventId: "my-event-id",
|
|
1561
|
+
* eventData: "eventData"
|
|
1562
|
+
* })
|
|
1563
|
+
* ```
|
|
1564
|
+
*
|
|
1565
|
+
* @param stepName
|
|
1566
|
+
* @param eventId event id to wake up the waiting workflow run
|
|
1567
|
+
* @param timeout timeout duration in seconds
|
|
1568
|
+
* @returns wait response as `{ timeout: boolean, eventData: unknown }`.
|
|
1569
|
+
* timeout is true if the wait times out, if notified it is false. eventData
|
|
1570
|
+
* is the value passed to `client.notify`.
|
|
1571
|
+
*/
|
|
1528
1572
|
async waitForEvent(stepName, eventId, timeout) {
|
|
1529
1573
|
const result = await this.addStep(
|
|
1530
1574
|
new LazyWaitForEventStep(
|
|
@@ -1533,7 +1577,27 @@ var WorkflowContext = class {
|
|
|
1533
1577
|
typeof timeout === "string" ? timeout : `${timeout}s`
|
|
1534
1578
|
)
|
|
1535
1579
|
);
|
|
1536
|
-
|
|
1580
|
+
try {
|
|
1581
|
+
return {
|
|
1582
|
+
...result,
|
|
1583
|
+
eventData: JSON.parse(result.eventData)
|
|
1584
|
+
};
|
|
1585
|
+
} catch {
|
|
1586
|
+
return result;
|
|
1587
|
+
}
|
|
1588
|
+
}
|
|
1589
|
+
async notify(stepName, eventId, eventData) {
|
|
1590
|
+
const result = await this.addStep(
|
|
1591
|
+
new LazyNotifyStep(stepName, eventId, eventData, this.qstashClient.http)
|
|
1592
|
+
);
|
|
1593
|
+
try {
|
|
1594
|
+
return {
|
|
1595
|
+
...result,
|
|
1596
|
+
eventData: JSON.parse(result.eventData)
|
|
1597
|
+
};
|
|
1598
|
+
} catch {
|
|
1599
|
+
return result;
|
|
1600
|
+
}
|
|
1537
1601
|
}
|
|
1538
1602
|
/**
|
|
1539
1603
|
* Adds steps to the executor. Needed so that it can be overwritten in
|
|
@@ -1634,7 +1698,7 @@ var parsePayload = (rawPayload) => {
|
|
|
1634
1698
|
const step = JSON.parse(decodeBase64(rawStep.body));
|
|
1635
1699
|
if (step.waitEventId) {
|
|
1636
1700
|
const newOut = {
|
|
1637
|
-
|
|
1701
|
+
eventData: step.out,
|
|
1638
1702
|
timeout: step.waitTimeout ?? false
|
|
1639
1703
|
};
|
|
1640
1704
|
step.out = newOut;
|
|
@@ -1891,7 +1955,6 @@ var serve = (routeFunction, options) => {
|
|
|
1891
1955
|
} = processOptions(options);
|
|
1892
1956
|
const debug = WorkflowLogger.getLogger(verbose);
|
|
1893
1957
|
const handler = async (request) => {
|
|
1894
|
-
await debug?.log("INFO", "ENDPOINT_START");
|
|
1895
1958
|
const { workflowUrl, workflowFailureUrl } = await determineUrls(
|
|
1896
1959
|
request,
|
|
1897
1960
|
url,
|
|
@@ -1935,8 +1998,7 @@ var serve = (routeFunction, options) => {
|
|
|
1935
1998
|
url: workflowUrl,
|
|
1936
1999
|
failureUrl: workflowFailureUrl,
|
|
1937
2000
|
debug,
|
|
1938
|
-
env
|
|
1939
|
-
retries
|
|
2001
|
+
env
|
|
1940
2002
|
});
|
|
1941
2003
|
const authCheck = await DisabledWorkflowContext.tryAuthentication(
|
|
1942
2004
|
routeFunction,
|
|
@@ -1979,7 +2041,7 @@ var serve = (routeFunction, options) => {
|
|
|
1979
2041
|
await debug?.log("INFO", "RESPONSE_DEFAULT");
|
|
1980
2042
|
return onStepFinish("no-workflow-id", "fromCallback");
|
|
1981
2043
|
};
|
|
1982
|
-
|
|
2044
|
+
return async (request) => {
|
|
1983
2045
|
try {
|
|
1984
2046
|
return await handler(request);
|
|
1985
2047
|
} catch (error) {
|
|
@@ -1989,7 +2051,6 @@ var serve = (routeFunction, options) => {
|
|
|
1989
2051
|
});
|
|
1990
2052
|
}
|
|
1991
2053
|
};
|
|
1992
|
-
return { handler: safeHandler };
|
|
1993
2054
|
};
|
|
1994
2055
|
|
|
1995
2056
|
// src/client/index.ts
|
|
@@ -2015,15 +2076,15 @@ var getArgs = (args) => {
|
|
|
2015
2076
|
throw new Error("Could not derive handler arguments from input. Please check how serve is used.");
|
|
2016
2077
|
};
|
|
2017
2078
|
var serve2 = (routeFunction, options) => {
|
|
2018
|
-
const
|
|
2079
|
+
const handler = async (...args) => {
|
|
2019
2080
|
const { request, env } = getArgs(args);
|
|
2020
|
-
const
|
|
2081
|
+
const serveHandler = serve(routeFunction, {
|
|
2021
2082
|
env,
|
|
2022
2083
|
...options
|
|
2023
2084
|
});
|
|
2024
2085
|
return await serveHandler(request);
|
|
2025
2086
|
};
|
|
2026
|
-
return
|
|
2087
|
+
return handler;
|
|
2027
2088
|
};
|
|
2028
2089
|
// Annotate the CommonJS export names for ESM import in node:
|
|
2029
2090
|
0 && (module.exports = {
|
package/cloudflare.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
serve
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-BPN5JBNG.mjs";
|
|
4
4
|
|
|
5
5
|
// platforms/cloudflare.ts
|
|
6
6
|
var getArgs = (args) => {
|
|
@@ -22,15 +22,15 @@ var getArgs = (args) => {
|
|
|
22
22
|
throw new Error("Could not derive handler arguments from input. Please check how serve is used.");
|
|
23
23
|
};
|
|
24
24
|
var serve2 = (routeFunction, options) => {
|
|
25
|
-
const
|
|
25
|
+
const handler = async (...args) => {
|
|
26
26
|
const { request, env } = getArgs(args);
|
|
27
|
-
const
|
|
27
|
+
const serveHandler = serve(routeFunction, {
|
|
28
28
|
env,
|
|
29
29
|
...options
|
|
30
30
|
});
|
|
31
31
|
return await serveHandler(request);
|
|
32
32
|
};
|
|
33
|
-
return
|
|
33
|
+
return handler;
|
|
34
34
|
};
|
|
35
35
|
export {
|
|
36
36
|
serve2 as serve
|
package/h3.d.mts
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import * as h3 from 'h3';
|
|
2
|
-
import { R as RouteFunction, W as WorkflowServeOptions } from './types-
|
|
2
|
+
import { R as RouteFunction, W as WorkflowServeOptions } from './types-CoXaNrxX.mjs';
|
|
3
3
|
import '@upstash/qstash';
|
|
4
4
|
|
|
5
|
-
declare const serve: <TInitialPayload = unknown>(routeFunction: RouteFunction<TInitialPayload>, options?: Omit<WorkflowServeOptions<Response, TInitialPayload>, "onStepFinish">) => {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}>>;
|
|
10
|
-
};
|
|
5
|
+
declare const serve: <TInitialPayload = unknown>(routeFunction: RouteFunction<TInitialPayload>, options?: Omit<WorkflowServeOptions<Response, TInitialPayload>, "onStepFinish">) => h3.EventHandler<h3.EventHandlerRequest, Promise<Response | {
|
|
6
|
+
status: number;
|
|
7
|
+
body: string;
|
|
8
|
+
}>>;
|
|
11
9
|
|
|
12
10
|
export { serve };
|
package/h3.d.ts
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import * as h3 from 'h3';
|
|
2
|
-
import { R as RouteFunction, W as WorkflowServeOptions } from './types-
|
|
2
|
+
import { R as RouteFunction, W as WorkflowServeOptions } from './types-CoXaNrxX.js';
|
|
3
3
|
import '@upstash/qstash';
|
|
4
4
|
|
|
5
|
-
declare const serve: <TInitialPayload = unknown>(routeFunction: RouteFunction<TInitialPayload>, options?: Omit<WorkflowServeOptions<Response, TInitialPayload>, "onStepFinish">) => {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}>>;
|
|
10
|
-
};
|
|
5
|
+
declare const serve: <TInitialPayload = unknown>(routeFunction: RouteFunction<TInitialPayload>, options?: Omit<WorkflowServeOptions<Response, TInitialPayload>, "onStepFinish">) => h3.EventHandler<h3.EventHandlerRequest, Promise<Response | {
|
|
6
|
+
status: number;
|
|
7
|
+
body: string;
|
|
8
|
+
}>>;
|
|
11
9
|
|
|
12
10
|
export { serve };
|