@upstash/workflow 0.2.2 → 0.2.4
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/astro.d.mts +1 -1
- package/astro.d.ts +1 -1
- package/astro.js +267 -73
- package/astro.mjs +7 -1
- package/{chunk-Z7WS5XIR.mjs → chunk-ETDFMXER.mjs} +265 -69
- package/cloudflare.d.mts +1 -1
- package/cloudflare.d.ts +1 -1
- package/cloudflare.js +273 -77
- package/cloudflare.mjs +13 -5
- package/express.d.mts +1 -1
- package/express.d.ts +1 -1
- package/express.js +1625 -1295
- package/express.mjs +1384 -1242
- package/h3.d.mts +1 -1
- package/h3.d.ts +1 -1
- package/h3.js +271 -74
- package/h3.mjs +11 -2
- package/hono.d.mts +1 -1
- package/hono.d.ts +1 -1
- package/hono.js +275 -79
- package/hono.mjs +15 -7
- package/index.d.mts +2 -2
- package/index.d.ts +2 -2
- package/index.js +281 -78
- package/index.mjs +10 -4
- package/nextjs.d.mts +1 -1
- package/nextjs.d.ts +1 -1
- package/nextjs.js +276 -74
- package/nextjs.mjs +16 -2
- package/package.json +1 -1
- package/solidjs.d.mts +1 -1
- package/solidjs.d.ts +1 -1
- package/solidjs.js +271 -74
- package/solidjs.mjs +11 -2
- package/svelte.d.mts +1 -1
- package/svelte.d.ts +1 -1
- package/svelte.js +273 -77
- package/svelte.mjs +13 -5
- package/{types-APRap-aV.d.mts → types-Bt4-paRy.d.mts} +325 -14
- package/{types-APRap-aV.d.ts → types-Bt4-paRy.d.ts} +325 -14
package/hono.js
CHANGED
|
@@ -77,6 +77,23 @@ var getSteps = async (requester, workflowRunId, messageId, debug) => {
|
|
|
77
77
|
}
|
|
78
78
|
};
|
|
79
79
|
|
|
80
|
+
// src/constants.ts
|
|
81
|
+
var WORKFLOW_ID_HEADER = "Upstash-Workflow-RunId";
|
|
82
|
+
var WORKFLOW_INIT_HEADER = "Upstash-Workflow-Init";
|
|
83
|
+
var WORKFLOW_URL_HEADER = "Upstash-Workflow-Url";
|
|
84
|
+
var WORKFLOW_FAILURE_HEADER = "Upstash-Workflow-Is-Failure";
|
|
85
|
+
var WORKFLOW_FEATURE_HEADER = "Upstash-Feature-Set";
|
|
86
|
+
var WORKFLOW_PROTOCOL_VERSION = "1";
|
|
87
|
+
var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
|
|
88
|
+
var DEFAULT_CONTENT_TYPE = "application/json";
|
|
89
|
+
var NO_CONCURRENCY = 1;
|
|
90
|
+
var DEFAULT_RETRIES = 3;
|
|
91
|
+
var VERSION = "v0.2.3";
|
|
92
|
+
var SDK_TELEMETRY = `@upstash/workflow@${VERSION}`;
|
|
93
|
+
var TELEMETRY_HEADER_SDK = "Upstash-Telemetry-Sdk";
|
|
94
|
+
var TELEMETRY_HEADER_FRAMEWORK = "Upstash-Telemetry-Framework";
|
|
95
|
+
var TELEMETRY_HEADER_RUNTIME = "Upstash-Telemetry-Runtime";
|
|
96
|
+
|
|
80
97
|
// src/error.ts
|
|
81
98
|
var import_qstash2 = require("@upstash/qstash");
|
|
82
99
|
var WorkflowError = class extends import_qstash2.QstashError {
|
|
@@ -714,18 +731,6 @@ var Err = class {
|
|
|
714
731
|
};
|
|
715
732
|
var fromThrowable = Result.fromThrowable;
|
|
716
733
|
|
|
717
|
-
// src/constants.ts
|
|
718
|
-
var WORKFLOW_ID_HEADER = "Upstash-Workflow-RunId";
|
|
719
|
-
var WORKFLOW_INIT_HEADER = "Upstash-Workflow-Init";
|
|
720
|
-
var WORKFLOW_URL_HEADER = "Upstash-Workflow-Url";
|
|
721
|
-
var WORKFLOW_FAILURE_HEADER = "Upstash-Workflow-Is-Failure";
|
|
722
|
-
var WORKFLOW_FEATURE_HEADER = "Upstash-Feature-Set";
|
|
723
|
-
var WORKFLOW_PROTOCOL_VERSION = "1";
|
|
724
|
-
var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
|
|
725
|
-
var DEFAULT_CONTENT_TYPE = "application/json";
|
|
726
|
-
var NO_CONCURRENCY = 1;
|
|
727
|
-
var DEFAULT_RETRIES = 3;
|
|
728
|
-
|
|
729
734
|
// src/types.ts
|
|
730
735
|
var StepTypes = [
|
|
731
736
|
"Initial",
|
|
@@ -739,16 +744,21 @@ var StepTypes = [
|
|
|
739
744
|
|
|
740
745
|
// src/workflow-requests.ts
|
|
741
746
|
var import_qstash3 = require("@upstash/qstash");
|
|
742
|
-
var triggerFirstInvocation = async (
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
747
|
+
var triggerFirstInvocation = async ({
|
|
748
|
+
workflowContext,
|
|
749
|
+
useJSONContent,
|
|
750
|
+
telemetry,
|
|
751
|
+
debug
|
|
752
|
+
}) => {
|
|
753
|
+
const { headers } = getHeaders({
|
|
754
|
+
initHeaderValue: "true",
|
|
755
|
+
workflowRunId: workflowContext.workflowRunId,
|
|
756
|
+
workflowUrl: workflowContext.url,
|
|
757
|
+
userHeaders: workflowContext.headers,
|
|
758
|
+
failureUrl: workflowContext.failureUrl,
|
|
759
|
+
retries: workflowContext.retries,
|
|
760
|
+
telemetry
|
|
761
|
+
});
|
|
752
762
|
if (useJSONContent) {
|
|
753
763
|
headers["content-type"] = "application/json";
|
|
754
764
|
}
|
|
@@ -854,7 +864,16 @@ var recreateUserHeaders = (headers) => {
|
|
|
854
864
|
}
|
|
855
865
|
return filteredHeaders;
|
|
856
866
|
};
|
|
857
|
-
var handleThirdPartyCallResult = async (
|
|
867
|
+
var handleThirdPartyCallResult = async ({
|
|
868
|
+
request,
|
|
869
|
+
requestPayload,
|
|
870
|
+
client,
|
|
871
|
+
workflowUrl,
|
|
872
|
+
failureUrl,
|
|
873
|
+
retries,
|
|
874
|
+
telemetry,
|
|
875
|
+
debug
|
|
876
|
+
}) => {
|
|
858
877
|
try {
|
|
859
878
|
if (request.headers.get("Upstash-Workflow-Callback")) {
|
|
860
879
|
let callbackPayload;
|
|
@@ -913,15 +932,15 @@ ${atob(callbackMessage.body ?? "")}`
|
|
|
913
932
|
);
|
|
914
933
|
}
|
|
915
934
|
const userHeaders = recreateUserHeaders(request.headers);
|
|
916
|
-
const { headers: requestHeaders } = getHeaders(
|
|
917
|
-
"false",
|
|
935
|
+
const { headers: requestHeaders } = getHeaders({
|
|
936
|
+
initHeaderValue: "false",
|
|
918
937
|
workflowRunId,
|
|
919
938
|
workflowUrl,
|
|
920
939
|
userHeaders,
|
|
921
|
-
void 0,
|
|
922
940
|
failureUrl,
|
|
923
|
-
retries
|
|
924
|
-
|
|
941
|
+
retries,
|
|
942
|
+
telemetry
|
|
943
|
+
});
|
|
925
944
|
const callResponse = {
|
|
926
945
|
status: callbackMessage.status,
|
|
927
946
|
body: atob(callbackMessage.body ?? ""),
|
|
@@ -959,12 +978,31 @@ ${atob(callbackMessage.body ?? "")}`
|
|
|
959
978
|
);
|
|
960
979
|
}
|
|
961
980
|
};
|
|
962
|
-
var
|
|
981
|
+
var getTelemetryHeaders = (telemetry) => {
|
|
982
|
+
return {
|
|
983
|
+
[TELEMETRY_HEADER_SDK]: telemetry.sdk,
|
|
984
|
+
[TELEMETRY_HEADER_FRAMEWORK]: telemetry.framework,
|
|
985
|
+
[TELEMETRY_HEADER_RUNTIME]: telemetry.runtime ?? "unknown"
|
|
986
|
+
};
|
|
987
|
+
};
|
|
988
|
+
var getHeaders = ({
|
|
989
|
+
initHeaderValue,
|
|
990
|
+
workflowRunId,
|
|
991
|
+
workflowUrl,
|
|
992
|
+
userHeaders,
|
|
993
|
+
failureUrl,
|
|
994
|
+
retries,
|
|
995
|
+
step,
|
|
996
|
+
callRetries,
|
|
997
|
+
callTimeout,
|
|
998
|
+
telemetry
|
|
999
|
+
}) => {
|
|
963
1000
|
const baseHeaders = {
|
|
964
1001
|
[WORKFLOW_INIT_HEADER]: initHeaderValue,
|
|
965
1002
|
[WORKFLOW_ID_HEADER]: workflowRunId,
|
|
966
1003
|
[WORKFLOW_URL_HEADER]: workflowUrl,
|
|
967
|
-
[WORKFLOW_FEATURE_HEADER]: "LazyFetch,InitialBody"
|
|
1004
|
+
[WORKFLOW_FEATURE_HEADER]: "LazyFetch,InitialBody",
|
|
1005
|
+
...telemetry ? getTelemetryHeaders(telemetry) : {}
|
|
968
1006
|
};
|
|
969
1007
|
if (!step?.callUrl) {
|
|
970
1008
|
baseHeaders[`Upstash-Forward-${WORKFLOW_PROTOCOL_VERSION_HEADER}`] = WORKFLOW_PROTOCOL_VERSION;
|
|
@@ -1038,6 +1076,13 @@ var getHeaders = (initHeaderValue, workflowRunId, workflowUrl, userHeaders, step
|
|
|
1038
1076
|
...Object.fromEntries(
|
|
1039
1077
|
Object.entries(baseHeaders).map(([header, value]) => [header, [value]])
|
|
1040
1078
|
),
|
|
1079
|
+
// to include telemetry headers:
|
|
1080
|
+
...telemetry ? Object.fromEntries(
|
|
1081
|
+
Object.entries(getTelemetryHeaders(telemetry)).map(([header, value]) => [
|
|
1082
|
+
header,
|
|
1083
|
+
[value]
|
|
1084
|
+
])
|
|
1085
|
+
) : {},
|
|
1041
1086
|
// note: using WORKFLOW_ID_HEADER doesn't work, because Runid -> RunId:
|
|
1042
1087
|
"Upstash-Workflow-Runid": [workflowRunId],
|
|
1043
1088
|
[WORKFLOW_INIT_HEADER]: ["false"],
|
|
@@ -1076,6 +1121,7 @@ If you want to disable QStash Verification, you should clear env variables QSTAS
|
|
|
1076
1121
|
};
|
|
1077
1122
|
|
|
1078
1123
|
// src/context/auto-executor.ts
|
|
1124
|
+
var import_qstash4 = require("@upstash/qstash");
|
|
1079
1125
|
var AutoExecutor = class _AutoExecutor {
|
|
1080
1126
|
context;
|
|
1081
1127
|
promises = /* @__PURE__ */ new WeakMap();
|
|
@@ -1084,13 +1130,15 @@ var AutoExecutor = class _AutoExecutor {
|
|
|
1084
1130
|
nonPlanStepCount;
|
|
1085
1131
|
steps;
|
|
1086
1132
|
indexInCurrentList = 0;
|
|
1133
|
+
telemetry;
|
|
1087
1134
|
stepCount = 0;
|
|
1088
1135
|
planStepCount = 0;
|
|
1089
1136
|
executingStep = false;
|
|
1090
|
-
constructor(context, steps, debug) {
|
|
1137
|
+
constructor(context, steps, telemetry, debug) {
|
|
1091
1138
|
this.context = context;
|
|
1092
|
-
this.debug = debug;
|
|
1093
1139
|
this.steps = steps;
|
|
1140
|
+
this.telemetry = telemetry;
|
|
1141
|
+
this.debug = debug;
|
|
1094
1142
|
this.nonPlanStepCount = this.steps.filter((step) => !step.targetStep).length;
|
|
1095
1143
|
}
|
|
1096
1144
|
/**
|
|
@@ -1233,7 +1281,7 @@ var AutoExecutor = class _AutoExecutor {
|
|
|
1233
1281
|
);
|
|
1234
1282
|
await this.submitStepsToQStash([resultStep], [parallelStep]);
|
|
1235
1283
|
} catch (error) {
|
|
1236
|
-
if (error instanceof WorkflowAbort) {
|
|
1284
|
+
if (error instanceof WorkflowAbort || error instanceof import_qstash4.QstashError && error.status === 400) {
|
|
1237
1285
|
throw error;
|
|
1238
1286
|
}
|
|
1239
1287
|
throw new WorkflowError(
|
|
@@ -1304,15 +1352,16 @@ var AutoExecutor = class _AutoExecutor {
|
|
|
1304
1352
|
});
|
|
1305
1353
|
if (steps[0].waitEventId && steps.length === 1) {
|
|
1306
1354
|
const waitStep = steps[0];
|
|
1307
|
-
const { headers, timeoutHeaders } = getHeaders(
|
|
1308
|
-
"false",
|
|
1309
|
-
this.context.workflowRunId,
|
|
1310
|
-
this.context.url,
|
|
1311
|
-
this.context.headers,
|
|
1312
|
-
waitStep,
|
|
1313
|
-
this.context.failureUrl,
|
|
1314
|
-
this.context.retries
|
|
1315
|
-
|
|
1355
|
+
const { headers, timeoutHeaders } = getHeaders({
|
|
1356
|
+
initHeaderValue: "false",
|
|
1357
|
+
workflowRunId: this.context.workflowRunId,
|
|
1358
|
+
workflowUrl: this.context.url,
|
|
1359
|
+
userHeaders: this.context.headers,
|
|
1360
|
+
step: waitStep,
|
|
1361
|
+
failureUrl: this.context.failureUrl,
|
|
1362
|
+
retries: this.context.retries,
|
|
1363
|
+
telemetry: this.telemetry
|
|
1364
|
+
});
|
|
1316
1365
|
const waitBody = {
|
|
1317
1366
|
url: this.context.url,
|
|
1318
1367
|
timeout: waitStep.timeout,
|
|
@@ -1339,17 +1388,18 @@ var AutoExecutor = class _AutoExecutor {
|
|
|
1339
1388
|
const result = await this.context.qstashClient.batchJSON(
|
|
1340
1389
|
steps.map((singleStep, index) => {
|
|
1341
1390
|
const lazyStep = lazySteps[index];
|
|
1342
|
-
const { headers } = getHeaders(
|
|
1343
|
-
"false",
|
|
1344
|
-
this.context.workflowRunId,
|
|
1345
|
-
this.context.url,
|
|
1346
|
-
this.context.headers,
|
|
1347
|
-
singleStep,
|
|
1348
|
-
this.context.failureUrl,
|
|
1349
|
-
this.context.retries,
|
|
1350
|
-
lazyStep instanceof LazyCallStep ? lazyStep.retries : void 0,
|
|
1351
|
-
lazyStep instanceof LazyCallStep ? lazyStep.timeout : void 0
|
|
1352
|
-
|
|
1391
|
+
const { headers } = getHeaders({
|
|
1392
|
+
initHeaderValue: "false",
|
|
1393
|
+
workflowRunId: this.context.workflowRunId,
|
|
1394
|
+
workflowUrl: this.context.url,
|
|
1395
|
+
userHeaders: this.context.headers,
|
|
1396
|
+
step: singleStep,
|
|
1397
|
+
failureUrl: this.context.failureUrl,
|
|
1398
|
+
retries: this.context.retries,
|
|
1399
|
+
callRetries: lazyStep instanceof LazyCallStep ? lazyStep.retries : void 0,
|
|
1400
|
+
callTimeout: lazyStep instanceof LazyCallStep ? lazyStep.timeout : void 0,
|
|
1401
|
+
telemetry: this.telemetry
|
|
1402
|
+
});
|
|
1353
1403
|
const willWait = singleStep.concurrent === NO_CONCURRENCY || singleStep.stepId === 0;
|
|
1354
1404
|
singleStep.out = JSON.stringify(singleStep.out);
|
|
1355
1405
|
return singleStep.callUrl ? (
|
|
@@ -1461,6 +1511,127 @@ var sortSteps = (steps) => {
|
|
|
1461
1511
|
return [...steps].sort((step, stepOther) => getStepId(step) - getStepId(stepOther));
|
|
1462
1512
|
};
|
|
1463
1513
|
|
|
1514
|
+
// src/context/api/anthropic.ts
|
|
1515
|
+
var import_qstash5 = require("@upstash/qstash");
|
|
1516
|
+
|
|
1517
|
+
// src/context/provider.ts
|
|
1518
|
+
var getProviderInfo = (api) => {
|
|
1519
|
+
if (!api.provider) {
|
|
1520
|
+
throw new WorkflowError("A Provider must be provided.");
|
|
1521
|
+
}
|
|
1522
|
+
if (api.provider.owner === "upstash") {
|
|
1523
|
+
throw new WorkflowError("Upstash provider isn't supported.");
|
|
1524
|
+
}
|
|
1525
|
+
const { name, provider, ...parameters } = api;
|
|
1526
|
+
if (!provider.baseUrl) throw new TypeError("baseUrl cannot be empty or undefined!");
|
|
1527
|
+
if (!provider.token) throw new TypeError("token cannot be empty or undefined!");
|
|
1528
|
+
if (provider.apiKind !== name) {
|
|
1529
|
+
throw new TypeError(`Unexpected api name. Expected '${provider.apiKind}', received ${name}`);
|
|
1530
|
+
}
|
|
1531
|
+
const providerInfo = {
|
|
1532
|
+
url: provider.getUrl(),
|
|
1533
|
+
baseUrl: provider.baseUrl,
|
|
1534
|
+
route: provider.getRoute(),
|
|
1535
|
+
appendHeaders: provider.getHeaders(parameters),
|
|
1536
|
+
owner: provider.owner,
|
|
1537
|
+
method: provider.method
|
|
1538
|
+
};
|
|
1539
|
+
return provider.onFinish(providerInfo, parameters);
|
|
1540
|
+
};
|
|
1541
|
+
|
|
1542
|
+
// src/context/api/base.ts
|
|
1543
|
+
var BaseWorkflowApi = class {
|
|
1544
|
+
context;
|
|
1545
|
+
constructor({ context }) {
|
|
1546
|
+
this.context = context;
|
|
1547
|
+
}
|
|
1548
|
+
/**
|
|
1549
|
+
* context.call which uses a QStash API
|
|
1550
|
+
*
|
|
1551
|
+
* @param stepName
|
|
1552
|
+
* @param settings
|
|
1553
|
+
* @returns
|
|
1554
|
+
*/
|
|
1555
|
+
async callApi(stepName, settings) {
|
|
1556
|
+
const { url, appendHeaders, method } = getProviderInfo(settings.api);
|
|
1557
|
+
const { method: userMethod, body, headers = {}, retries = 0, timeout } = settings;
|
|
1558
|
+
return await this.context.call(stepName, {
|
|
1559
|
+
url,
|
|
1560
|
+
method: userMethod ?? method,
|
|
1561
|
+
body,
|
|
1562
|
+
headers: {
|
|
1563
|
+
...appendHeaders,
|
|
1564
|
+
...headers
|
|
1565
|
+
},
|
|
1566
|
+
retries,
|
|
1567
|
+
timeout
|
|
1568
|
+
});
|
|
1569
|
+
}
|
|
1570
|
+
};
|
|
1571
|
+
|
|
1572
|
+
// src/context/api/anthropic.ts
|
|
1573
|
+
var AnthropicAPI = class extends BaseWorkflowApi {
|
|
1574
|
+
async call(stepName, settings) {
|
|
1575
|
+
const { token, operation, ...parameters } = settings;
|
|
1576
|
+
return await this.callApi(stepName, {
|
|
1577
|
+
api: {
|
|
1578
|
+
name: "llm",
|
|
1579
|
+
provider: (0, import_qstash5.anthropic)({ token })
|
|
1580
|
+
},
|
|
1581
|
+
...parameters
|
|
1582
|
+
});
|
|
1583
|
+
}
|
|
1584
|
+
};
|
|
1585
|
+
|
|
1586
|
+
// src/context/api/openai.ts
|
|
1587
|
+
var import_qstash6 = require("@upstash/qstash");
|
|
1588
|
+
var OpenAIAPI = class extends BaseWorkflowApi {
|
|
1589
|
+
async call(stepName, settings) {
|
|
1590
|
+
const { token, organization, operation, ...parameters } = settings;
|
|
1591
|
+
return await this.callApi(stepName, {
|
|
1592
|
+
api: {
|
|
1593
|
+
name: "llm",
|
|
1594
|
+
provider: (0, import_qstash6.openai)({ token, organization })
|
|
1595
|
+
},
|
|
1596
|
+
...parameters
|
|
1597
|
+
});
|
|
1598
|
+
}
|
|
1599
|
+
};
|
|
1600
|
+
|
|
1601
|
+
// src/context/api/resend.ts
|
|
1602
|
+
var import_qstash7 = require("@upstash/qstash");
|
|
1603
|
+
var ResendAPI = class extends BaseWorkflowApi {
|
|
1604
|
+
async call(stepName, settings) {
|
|
1605
|
+
const { token, batch = false, ...parameters } = settings;
|
|
1606
|
+
return await this.callApi(stepName, {
|
|
1607
|
+
api: {
|
|
1608
|
+
name: "email",
|
|
1609
|
+
provider: (0, import_qstash7.resend)({ token, batch })
|
|
1610
|
+
},
|
|
1611
|
+
...parameters
|
|
1612
|
+
});
|
|
1613
|
+
}
|
|
1614
|
+
};
|
|
1615
|
+
|
|
1616
|
+
// src/context/api/index.ts
|
|
1617
|
+
var WorkflowApi = class extends BaseWorkflowApi {
|
|
1618
|
+
get openai() {
|
|
1619
|
+
return new OpenAIAPI({
|
|
1620
|
+
context: this.context
|
|
1621
|
+
});
|
|
1622
|
+
}
|
|
1623
|
+
get resend() {
|
|
1624
|
+
return new ResendAPI({
|
|
1625
|
+
context: this.context
|
|
1626
|
+
});
|
|
1627
|
+
}
|
|
1628
|
+
get anthropic() {
|
|
1629
|
+
return new AnthropicAPI({
|
|
1630
|
+
context: this.context
|
|
1631
|
+
});
|
|
1632
|
+
}
|
|
1633
|
+
};
|
|
1634
|
+
|
|
1464
1635
|
// src/context/context.ts
|
|
1465
1636
|
var WorkflowContext = class {
|
|
1466
1637
|
executor;
|
|
@@ -1593,7 +1764,8 @@ var WorkflowContext = class {
|
|
|
1593
1764
|
debug,
|
|
1594
1765
|
initialPayload,
|
|
1595
1766
|
env,
|
|
1596
|
-
retries
|
|
1767
|
+
retries,
|
|
1768
|
+
telemetry
|
|
1597
1769
|
}) {
|
|
1598
1770
|
this.qstashClient = qstashClient;
|
|
1599
1771
|
this.workflowRunId = workflowRunId;
|
|
@@ -1604,7 +1776,7 @@ var WorkflowContext = class {
|
|
|
1604
1776
|
this.requestPayload = initialPayload;
|
|
1605
1777
|
this.env = env ?? {};
|
|
1606
1778
|
this.retries = retries ?? DEFAULT_RETRIES;
|
|
1607
|
-
this.executor = new AutoExecutor(this, this.steps, debug);
|
|
1779
|
+
this.executor = new AutoExecutor(this, this.steps, telemetry, debug);
|
|
1608
1780
|
}
|
|
1609
1781
|
/**
|
|
1610
1782
|
* Executes a workflow step
|
|
@@ -1840,6 +2012,11 @@ var WorkflowContext = class {
|
|
|
1840
2012
|
async addStep(step) {
|
|
1841
2013
|
return await this.executor.addStep(step);
|
|
1842
2014
|
}
|
|
2015
|
+
get api() {
|
|
2016
|
+
return new WorkflowApi({
|
|
2017
|
+
context: this
|
|
2018
|
+
});
|
|
2019
|
+
}
|
|
1843
2020
|
};
|
|
1844
2021
|
|
|
1845
2022
|
// src/logger.ts
|
|
@@ -1917,7 +2094,7 @@ function decodeBase64(base64) {
|
|
|
1917
2094
|
}
|
|
1918
2095
|
|
|
1919
2096
|
// src/serve/authorization.ts
|
|
1920
|
-
var
|
|
2097
|
+
var import_qstash8 = require("@upstash/qstash");
|
|
1921
2098
|
var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowContext {
|
|
1922
2099
|
static disabledMessage = "disabled-qstash-worklfow-run";
|
|
1923
2100
|
/**
|
|
@@ -1948,7 +2125,7 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
|
|
|
1948
2125
|
*/
|
|
1949
2126
|
static async tryAuthentication(routeFunction, context) {
|
|
1950
2127
|
const disabledContext = new _DisabledWorkflowContext({
|
|
1951
|
-
qstashClient: new
|
|
2128
|
+
qstashClient: new import_qstash8.Client({
|
|
1952
2129
|
baseUrl: "disabled-client",
|
|
1953
2130
|
token: "disabled-client"
|
|
1954
2131
|
}),
|
|
@@ -2112,7 +2289,7 @@ var parseRequest = async (requestPayload, isFirstInvocation, workflowRunId, requ
|
|
|
2112
2289
|
};
|
|
2113
2290
|
}
|
|
2114
2291
|
};
|
|
2115
|
-
var handleFailure = async (request, requestPayload, qstashClient, initialPayloadParser, routeFunction, failureFunction, debug) => {
|
|
2292
|
+
var handleFailure = async (request, requestPayload, qstashClient, initialPayloadParser, routeFunction, failureFunction, env, retries, debug) => {
|
|
2116
2293
|
if (request.headers.get(WORKFLOW_FAILURE_HEADER) !== "true") {
|
|
2117
2294
|
return ok("not-failure-callback");
|
|
2118
2295
|
}
|
|
@@ -2137,7 +2314,11 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
|
|
|
2137
2314
|
steps: [],
|
|
2138
2315
|
url,
|
|
2139
2316
|
failureUrl: url,
|
|
2140
|
-
debug
|
|
2317
|
+
debug,
|
|
2318
|
+
env,
|
|
2319
|
+
retries,
|
|
2320
|
+
telemetry: void 0
|
|
2321
|
+
// not going to make requests in authentication check
|
|
2141
2322
|
});
|
|
2142
2323
|
const authCheck = await DisabledWorkflowContext.tryAuthentication(
|
|
2143
2324
|
routeFunction,
|
|
@@ -2162,15 +2343,15 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
|
|
|
2162
2343
|
};
|
|
2163
2344
|
|
|
2164
2345
|
// src/serve/options.ts
|
|
2165
|
-
var
|
|
2166
|
-
var
|
|
2346
|
+
var import_qstash9 = require("@upstash/qstash");
|
|
2347
|
+
var import_qstash10 = require("@upstash/qstash");
|
|
2167
2348
|
var processOptions = (options) => {
|
|
2168
2349
|
const environment = options?.env ?? (typeof process === "undefined" ? {} : process.env);
|
|
2169
2350
|
const receiverEnvironmentVariablesSet = Boolean(
|
|
2170
2351
|
environment.QSTASH_CURRENT_SIGNING_KEY && environment.QSTASH_NEXT_SIGNING_KEY
|
|
2171
2352
|
);
|
|
2172
2353
|
return {
|
|
2173
|
-
qstashClient: new
|
|
2354
|
+
qstashClient: new import_qstash10.Client({
|
|
2174
2355
|
baseUrl: environment.QSTASH_URL,
|
|
2175
2356
|
token: environment.QSTASH_TOKEN
|
|
2176
2357
|
}),
|
|
@@ -2204,7 +2385,7 @@ var processOptions = (options) => {
|
|
|
2204
2385
|
throw error;
|
|
2205
2386
|
}
|
|
2206
2387
|
},
|
|
2207
|
-
receiver: receiverEnvironmentVariablesSet ? new
|
|
2388
|
+
receiver: receiverEnvironmentVariablesSet ? new import_qstash9.Receiver({
|
|
2208
2389
|
currentSigningKey: environment.QSTASH_CURRENT_SIGNING_KEY,
|
|
2209
2390
|
nextSigningKey: environment.QSTASH_NEXT_SIGNING_KEY
|
|
2210
2391
|
}) : void 0,
|
|
@@ -2212,6 +2393,7 @@ var processOptions = (options) => {
|
|
|
2212
2393
|
env: environment,
|
|
2213
2394
|
retries: DEFAULT_RETRIES,
|
|
2214
2395
|
useJSONContent: false,
|
|
2396
|
+
disableTelemetry: false,
|
|
2215
2397
|
...options
|
|
2216
2398
|
};
|
|
2217
2399
|
};
|
|
@@ -2246,7 +2428,7 @@ var determineUrls = async (request, url, baseUrl, failureFunction, failureUrl, d
|
|
|
2246
2428
|
var AUTH_FAIL_MESSAGE = `Failed to authenticate Workflow request. If this is unexpected, see the caveat https://upstash.com/docs/workflow/basics/caveats#avoid-non-deterministic-code-outside-context-run`;
|
|
2247
2429
|
|
|
2248
2430
|
// src/serve/index.ts
|
|
2249
|
-
var serveBase = (routeFunction, options) => {
|
|
2431
|
+
var serveBase = (routeFunction, telemetry, options) => {
|
|
2250
2432
|
const {
|
|
2251
2433
|
qstashClient,
|
|
2252
2434
|
onStepFinish,
|
|
@@ -2259,8 +2441,10 @@ var serveBase = (routeFunction, options) => {
|
|
|
2259
2441
|
baseUrl,
|
|
2260
2442
|
env,
|
|
2261
2443
|
retries,
|
|
2262
|
-
useJSONContent
|
|
2444
|
+
useJSONContent,
|
|
2445
|
+
disableTelemetry
|
|
2263
2446
|
} = processOptions(options);
|
|
2447
|
+
telemetry = disableTelemetry ? void 0 : telemetry;
|
|
2264
2448
|
const debug = WorkflowLogger.getLogger(verbose);
|
|
2265
2449
|
const handler = async (request) => {
|
|
2266
2450
|
await debug?.log("INFO", "ENDPOINT_START");
|
|
@@ -2296,7 +2480,10 @@ var serveBase = (routeFunction, options) => {
|
|
|
2296
2480
|
qstashClient,
|
|
2297
2481
|
initialPayloadParser,
|
|
2298
2482
|
routeFunction,
|
|
2299
|
-
failureFunction
|
|
2483
|
+
failureFunction,
|
|
2484
|
+
env,
|
|
2485
|
+
retries,
|
|
2486
|
+
debug
|
|
2300
2487
|
);
|
|
2301
2488
|
if (failureCheck.isErr()) {
|
|
2302
2489
|
throw failureCheck.error;
|
|
@@ -2314,7 +2501,8 @@ var serveBase = (routeFunction, options) => {
|
|
|
2314
2501
|
failureUrl: workflowFailureUrl,
|
|
2315
2502
|
debug,
|
|
2316
2503
|
env,
|
|
2317
|
-
retries
|
|
2504
|
+
retries,
|
|
2505
|
+
telemetry
|
|
2318
2506
|
});
|
|
2319
2507
|
const authCheck = await DisabledWorkflowContext.tryAuthentication(
|
|
2320
2508
|
routeFunction,
|
|
@@ -2330,22 +2518,23 @@ var serveBase = (routeFunction, options) => {
|
|
|
2330
2518
|
"auth-fail"
|
|
2331
2519
|
);
|
|
2332
2520
|
}
|
|
2333
|
-
const callReturnCheck = await handleThirdPartyCallResult(
|
|
2521
|
+
const callReturnCheck = await handleThirdPartyCallResult({
|
|
2334
2522
|
request,
|
|
2335
|
-
rawInitialPayload,
|
|
2336
|
-
qstashClient,
|
|
2523
|
+
requestPayload: rawInitialPayload,
|
|
2524
|
+
client: qstashClient,
|
|
2337
2525
|
workflowUrl,
|
|
2338
|
-
workflowFailureUrl,
|
|
2526
|
+
failureUrl: workflowFailureUrl,
|
|
2339
2527
|
retries,
|
|
2528
|
+
telemetry,
|
|
2340
2529
|
debug
|
|
2341
|
-
);
|
|
2530
|
+
});
|
|
2342
2531
|
if (callReturnCheck.isErr()) {
|
|
2343
2532
|
await debug?.log("ERROR", "SUBMIT_THIRD_PARTY_RESULT", {
|
|
2344
2533
|
error: callReturnCheck.error.message
|
|
2345
2534
|
});
|
|
2346
2535
|
throw callReturnCheck.error;
|
|
2347
2536
|
} else if (callReturnCheck.value === "continue-workflow") {
|
|
2348
|
-
const result = isFirstInvocation ? await triggerFirstInvocation(workflowContext,
|
|
2537
|
+
const result = isFirstInvocation ? await triggerFirstInvocation({ workflowContext, useJSONContent, telemetry, debug }) : await triggerRouteFunction({
|
|
2349
2538
|
onStep: async () => routeFunction(workflowContext),
|
|
2350
2539
|
onCleanup: async () => {
|
|
2351
2540
|
await triggerWorkflowDelete(workflowContext, debug);
|
|
@@ -2385,12 +2574,19 @@ var serve = (routeFunction, options) => {
|
|
|
2385
2574
|
const handler = async (context) => {
|
|
2386
2575
|
const environment = context.env;
|
|
2387
2576
|
const request = context.req.raw;
|
|
2388
|
-
const { handler: serveHandler } = serveBase(
|
|
2389
|
-
|
|
2390
|
-
|
|
2391
|
-
|
|
2392
|
-
|
|
2393
|
-
|
|
2577
|
+
const { handler: serveHandler } = serveBase(
|
|
2578
|
+
routeFunction,
|
|
2579
|
+
{
|
|
2580
|
+
sdk: SDK_TELEMETRY,
|
|
2581
|
+
framework: "hono"
|
|
2582
|
+
},
|
|
2583
|
+
{
|
|
2584
|
+
// when hono is used without cf workers, it sends a DebugHTTPServer
|
|
2585
|
+
// object in `context.env`. don't pass env if this is the case:
|
|
2586
|
+
env: "QSTASH_TOKEN" in environment ? environment : void 0,
|
|
2587
|
+
...options
|
|
2588
|
+
}
|
|
2589
|
+
);
|
|
2394
2590
|
return await serveHandler(request);
|
|
2395
2591
|
};
|
|
2396
2592
|
return handler;
|
package/hono.mjs
CHANGED
|
@@ -1,18 +1,26 @@
|
|
|
1
1
|
import {
|
|
2
|
+
SDK_TELEMETRY,
|
|
2
3
|
serveBase
|
|
3
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-ETDFMXER.mjs";
|
|
4
5
|
|
|
5
6
|
// platforms/hono.ts
|
|
6
7
|
var serve = (routeFunction, options) => {
|
|
7
8
|
const handler = async (context) => {
|
|
8
9
|
const environment = context.env;
|
|
9
10
|
const request = context.req.raw;
|
|
10
|
-
const { handler: serveHandler } = serveBase(
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
const { handler: serveHandler } = serveBase(
|
|
12
|
+
routeFunction,
|
|
13
|
+
{
|
|
14
|
+
sdk: SDK_TELEMETRY,
|
|
15
|
+
framework: "hono"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
// when hono is used without cf workers, it sends a DebugHTTPServer
|
|
19
|
+
// object in `context.env`. don't pass env if this is the case:
|
|
20
|
+
env: "QSTASH_TOKEN" in environment ? environment : void 0,
|
|
21
|
+
...options
|
|
22
|
+
}
|
|
23
|
+
);
|
|
16
24
|
return await serveHandler(request);
|
|
17
25
|
};
|
|
18
26
|
return handler;
|
package/index.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { R as RouteFunction, W as WorkflowServeOptions, N as NotifyResponse, a as Waiter, S as Step } from './types-
|
|
2
|
-
export { A as AsyncStepFunction, C as CallResponse, D as Duration, k as FailureFunctionPayload, F as FinishCondition, L as LogLevel, o as NotifyStepResponse, P as ParallelCallState, j as PublicServeOptions, g as RawStep, l as RequiredExceptFields, i as StepFunction, f as StepType, e as StepTypes, h as SyncStepFunction, p as WaitEventOptions, m as WaitRequest, n as WaitStepResponse, c as WorkflowClient, b as WorkflowContext,
|
|
1
|
+
import { R as RouteFunction, W as WorkflowServeOptions, N as NotifyResponse, a as Waiter, S as Step } from './types-Bt4-paRy.mjs';
|
|
2
|
+
export { A as AsyncStepFunction, C as CallResponse, q as CallSettings, D as Duration, k as FailureFunctionPayload, F as FinishCondition, H as HeaderParams, L as LogLevel, o as NotifyStepResponse, P as ParallelCallState, j as PublicServeOptions, g as RawStep, l as RequiredExceptFields, i as StepFunction, f as StepType, e as StepTypes, h as SyncStepFunction, T as Telemetry, p as WaitEventOptions, m as WaitRequest, n as WaitStepResponse, c as WorkflowClient, b as WorkflowContext, s as WorkflowLogger, r as WorkflowLoggerOptions, d as WorkflowReceiver } from './types-Bt4-paRy.mjs';
|
|
3
3
|
import { Client as Client$1, QstashError } from '@upstash/qstash';
|
|
4
4
|
|
|
5
5
|
/**
|
package/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { R as RouteFunction, W as WorkflowServeOptions, N as NotifyResponse, a as Waiter, S as Step } from './types-
|
|
2
|
-
export { A as AsyncStepFunction, C as CallResponse, D as Duration, k as FailureFunctionPayload, F as FinishCondition, L as LogLevel, o as NotifyStepResponse, P as ParallelCallState, j as PublicServeOptions, g as RawStep, l as RequiredExceptFields, i as StepFunction, f as StepType, e as StepTypes, h as SyncStepFunction, p as WaitEventOptions, m as WaitRequest, n as WaitStepResponse, c as WorkflowClient, b as WorkflowContext,
|
|
1
|
+
import { R as RouteFunction, W as WorkflowServeOptions, N as NotifyResponse, a as Waiter, S as Step } from './types-Bt4-paRy.js';
|
|
2
|
+
export { A as AsyncStepFunction, C as CallResponse, q as CallSettings, D as Duration, k as FailureFunctionPayload, F as FinishCondition, H as HeaderParams, L as LogLevel, o as NotifyStepResponse, P as ParallelCallState, j as PublicServeOptions, g as RawStep, l as RequiredExceptFields, i as StepFunction, f as StepType, e as StepTypes, h as SyncStepFunction, T as Telemetry, p as WaitEventOptions, m as WaitRequest, n as WaitStepResponse, c as WorkflowClient, b as WorkflowContext, s as WorkflowLogger, r as WorkflowLoggerOptions, d as WorkflowReceiver } from './types-Bt4-paRy.js';
|
|
3
3
|
import { Client as Client$1, QstashError } from '@upstash/qstash';
|
|
4
4
|
|
|
5
5
|
/**
|