@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/h3.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as h3 from 'h3';
|
|
2
|
-
import { R as RouteFunction, j as PublicServeOptions } from './types-
|
|
2
|
+
import { R as RouteFunction, j as PublicServeOptions } from './types-Bt4-paRy.mjs';
|
|
3
3
|
import '@upstash/qstash';
|
|
4
4
|
|
|
5
5
|
declare const serve: <TInitialPayload = unknown>(routeFunction: RouteFunction<TInitialPayload>, options?: PublicServeOptions<TInitialPayload>) => {
|
package/h3.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as h3 from 'h3';
|
|
2
|
-
import { R as RouteFunction, j as PublicServeOptions } from './types-
|
|
2
|
+
import { R as RouteFunction, j as PublicServeOptions } from './types-Bt4-paRy.js';
|
|
3
3
|
import '@upstash/qstash';
|
|
4
4
|
|
|
5
5
|
declare const serve: <TInitialPayload = unknown>(routeFunction: RouteFunction<TInitialPayload>, options?: PublicServeOptions<TInitialPayload>) => {
|
package/h3.js
CHANGED
|
@@ -389,6 +389,23 @@ var getSteps = async (requester, workflowRunId, messageId, debug) => {
|
|
|
389
389
|
}
|
|
390
390
|
};
|
|
391
391
|
|
|
392
|
+
// src/constants.ts
|
|
393
|
+
var WORKFLOW_ID_HEADER = "Upstash-Workflow-RunId";
|
|
394
|
+
var WORKFLOW_INIT_HEADER = "Upstash-Workflow-Init";
|
|
395
|
+
var WORKFLOW_URL_HEADER = "Upstash-Workflow-Url";
|
|
396
|
+
var WORKFLOW_FAILURE_HEADER = "Upstash-Workflow-Is-Failure";
|
|
397
|
+
var WORKFLOW_FEATURE_HEADER = "Upstash-Feature-Set";
|
|
398
|
+
var WORKFLOW_PROTOCOL_VERSION = "1";
|
|
399
|
+
var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
|
|
400
|
+
var DEFAULT_CONTENT_TYPE = "application/json";
|
|
401
|
+
var NO_CONCURRENCY = 1;
|
|
402
|
+
var DEFAULT_RETRIES = 3;
|
|
403
|
+
var VERSION = "v0.2.3";
|
|
404
|
+
var SDK_TELEMETRY = `@upstash/workflow@${VERSION}`;
|
|
405
|
+
var TELEMETRY_HEADER_SDK = "Upstash-Telemetry-Sdk";
|
|
406
|
+
var TELEMETRY_HEADER_FRAMEWORK = "Upstash-Telemetry-Framework";
|
|
407
|
+
var TELEMETRY_HEADER_RUNTIME = "Upstash-Telemetry-Runtime";
|
|
408
|
+
|
|
392
409
|
// src/error.ts
|
|
393
410
|
var import_qstash2 = require("@upstash/qstash");
|
|
394
411
|
var WorkflowError = class extends import_qstash2.QstashError {
|
|
@@ -1026,18 +1043,6 @@ var Err = class {
|
|
|
1026
1043
|
};
|
|
1027
1044
|
var fromThrowable = Result.fromThrowable;
|
|
1028
1045
|
|
|
1029
|
-
// src/constants.ts
|
|
1030
|
-
var WORKFLOW_ID_HEADER = "Upstash-Workflow-RunId";
|
|
1031
|
-
var WORKFLOW_INIT_HEADER = "Upstash-Workflow-Init";
|
|
1032
|
-
var WORKFLOW_URL_HEADER = "Upstash-Workflow-Url";
|
|
1033
|
-
var WORKFLOW_FAILURE_HEADER = "Upstash-Workflow-Is-Failure";
|
|
1034
|
-
var WORKFLOW_FEATURE_HEADER = "Upstash-Feature-Set";
|
|
1035
|
-
var WORKFLOW_PROTOCOL_VERSION = "1";
|
|
1036
|
-
var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
|
|
1037
|
-
var DEFAULT_CONTENT_TYPE = "application/json";
|
|
1038
|
-
var NO_CONCURRENCY = 1;
|
|
1039
|
-
var DEFAULT_RETRIES = 3;
|
|
1040
|
-
|
|
1041
1046
|
// src/types.ts
|
|
1042
1047
|
var StepTypes = [
|
|
1043
1048
|
"Initial",
|
|
@@ -1051,16 +1056,21 @@ var StepTypes = [
|
|
|
1051
1056
|
|
|
1052
1057
|
// src/workflow-requests.ts
|
|
1053
1058
|
var import_qstash3 = require("@upstash/qstash");
|
|
1054
|
-
var triggerFirstInvocation = async (
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1059
|
+
var triggerFirstInvocation = async ({
|
|
1060
|
+
workflowContext,
|
|
1061
|
+
useJSONContent,
|
|
1062
|
+
telemetry,
|
|
1063
|
+
debug
|
|
1064
|
+
}) => {
|
|
1065
|
+
const { headers } = getHeaders({
|
|
1066
|
+
initHeaderValue: "true",
|
|
1067
|
+
workflowRunId: workflowContext.workflowRunId,
|
|
1068
|
+
workflowUrl: workflowContext.url,
|
|
1069
|
+
userHeaders: workflowContext.headers,
|
|
1070
|
+
failureUrl: workflowContext.failureUrl,
|
|
1071
|
+
retries: workflowContext.retries,
|
|
1072
|
+
telemetry
|
|
1073
|
+
});
|
|
1064
1074
|
if (useJSONContent) {
|
|
1065
1075
|
headers["content-type"] = "application/json";
|
|
1066
1076
|
}
|
|
@@ -1166,7 +1176,16 @@ var recreateUserHeaders = (headers) => {
|
|
|
1166
1176
|
}
|
|
1167
1177
|
return filteredHeaders;
|
|
1168
1178
|
};
|
|
1169
|
-
var handleThirdPartyCallResult = async (
|
|
1179
|
+
var handleThirdPartyCallResult = async ({
|
|
1180
|
+
request,
|
|
1181
|
+
requestPayload,
|
|
1182
|
+
client,
|
|
1183
|
+
workflowUrl,
|
|
1184
|
+
failureUrl,
|
|
1185
|
+
retries,
|
|
1186
|
+
telemetry,
|
|
1187
|
+
debug
|
|
1188
|
+
}) => {
|
|
1170
1189
|
try {
|
|
1171
1190
|
if (request.headers.get("Upstash-Workflow-Callback")) {
|
|
1172
1191
|
let callbackPayload;
|
|
@@ -1225,15 +1244,15 @@ ${atob(callbackMessage.body ?? "")}`
|
|
|
1225
1244
|
);
|
|
1226
1245
|
}
|
|
1227
1246
|
const userHeaders = recreateUserHeaders(request.headers);
|
|
1228
|
-
const { headers: requestHeaders } = getHeaders(
|
|
1229
|
-
"false",
|
|
1247
|
+
const { headers: requestHeaders } = getHeaders({
|
|
1248
|
+
initHeaderValue: "false",
|
|
1230
1249
|
workflowRunId,
|
|
1231
1250
|
workflowUrl,
|
|
1232
1251
|
userHeaders,
|
|
1233
|
-
void 0,
|
|
1234
1252
|
failureUrl,
|
|
1235
|
-
retries
|
|
1236
|
-
|
|
1253
|
+
retries,
|
|
1254
|
+
telemetry
|
|
1255
|
+
});
|
|
1237
1256
|
const callResponse = {
|
|
1238
1257
|
status: callbackMessage.status,
|
|
1239
1258
|
body: atob(callbackMessage.body ?? ""),
|
|
@@ -1271,12 +1290,31 @@ ${atob(callbackMessage.body ?? "")}`
|
|
|
1271
1290
|
);
|
|
1272
1291
|
}
|
|
1273
1292
|
};
|
|
1274
|
-
var
|
|
1293
|
+
var getTelemetryHeaders = (telemetry) => {
|
|
1294
|
+
return {
|
|
1295
|
+
[TELEMETRY_HEADER_SDK]: telemetry.sdk,
|
|
1296
|
+
[TELEMETRY_HEADER_FRAMEWORK]: telemetry.framework,
|
|
1297
|
+
[TELEMETRY_HEADER_RUNTIME]: telemetry.runtime ?? "unknown"
|
|
1298
|
+
};
|
|
1299
|
+
};
|
|
1300
|
+
var getHeaders = ({
|
|
1301
|
+
initHeaderValue,
|
|
1302
|
+
workflowRunId,
|
|
1303
|
+
workflowUrl,
|
|
1304
|
+
userHeaders,
|
|
1305
|
+
failureUrl,
|
|
1306
|
+
retries,
|
|
1307
|
+
step,
|
|
1308
|
+
callRetries,
|
|
1309
|
+
callTimeout,
|
|
1310
|
+
telemetry
|
|
1311
|
+
}) => {
|
|
1275
1312
|
const baseHeaders = {
|
|
1276
1313
|
[WORKFLOW_INIT_HEADER]: initHeaderValue,
|
|
1277
1314
|
[WORKFLOW_ID_HEADER]: workflowRunId,
|
|
1278
1315
|
[WORKFLOW_URL_HEADER]: workflowUrl,
|
|
1279
|
-
[WORKFLOW_FEATURE_HEADER]: "LazyFetch,InitialBody"
|
|
1316
|
+
[WORKFLOW_FEATURE_HEADER]: "LazyFetch,InitialBody",
|
|
1317
|
+
...telemetry ? getTelemetryHeaders(telemetry) : {}
|
|
1280
1318
|
};
|
|
1281
1319
|
if (!step?.callUrl) {
|
|
1282
1320
|
baseHeaders[`Upstash-Forward-${WORKFLOW_PROTOCOL_VERSION_HEADER}`] = WORKFLOW_PROTOCOL_VERSION;
|
|
@@ -1350,6 +1388,13 @@ var getHeaders = (initHeaderValue, workflowRunId, workflowUrl, userHeaders, step
|
|
|
1350
1388
|
...Object.fromEntries(
|
|
1351
1389
|
Object.entries(baseHeaders).map(([header, value]) => [header, [value]])
|
|
1352
1390
|
),
|
|
1391
|
+
// to include telemetry headers:
|
|
1392
|
+
...telemetry ? Object.fromEntries(
|
|
1393
|
+
Object.entries(getTelemetryHeaders(telemetry)).map(([header, value]) => [
|
|
1394
|
+
header,
|
|
1395
|
+
[value]
|
|
1396
|
+
])
|
|
1397
|
+
) : {},
|
|
1353
1398
|
// note: using WORKFLOW_ID_HEADER doesn't work, because Runid -> RunId:
|
|
1354
1399
|
"Upstash-Workflow-Runid": [workflowRunId],
|
|
1355
1400
|
[WORKFLOW_INIT_HEADER]: ["false"],
|
|
@@ -1388,6 +1433,7 @@ If you want to disable QStash Verification, you should clear env variables QSTAS
|
|
|
1388
1433
|
};
|
|
1389
1434
|
|
|
1390
1435
|
// src/context/auto-executor.ts
|
|
1436
|
+
var import_qstash4 = require("@upstash/qstash");
|
|
1391
1437
|
var AutoExecutor = class _AutoExecutor {
|
|
1392
1438
|
context;
|
|
1393
1439
|
promises = /* @__PURE__ */ new WeakMap();
|
|
@@ -1396,13 +1442,15 @@ var AutoExecutor = class _AutoExecutor {
|
|
|
1396
1442
|
nonPlanStepCount;
|
|
1397
1443
|
steps;
|
|
1398
1444
|
indexInCurrentList = 0;
|
|
1445
|
+
telemetry;
|
|
1399
1446
|
stepCount = 0;
|
|
1400
1447
|
planStepCount = 0;
|
|
1401
1448
|
executingStep = false;
|
|
1402
|
-
constructor(context, steps, debug) {
|
|
1449
|
+
constructor(context, steps, telemetry, debug) {
|
|
1403
1450
|
this.context = context;
|
|
1404
|
-
this.debug = debug;
|
|
1405
1451
|
this.steps = steps;
|
|
1452
|
+
this.telemetry = telemetry;
|
|
1453
|
+
this.debug = debug;
|
|
1406
1454
|
this.nonPlanStepCount = this.steps.filter((step) => !step.targetStep).length;
|
|
1407
1455
|
}
|
|
1408
1456
|
/**
|
|
@@ -1545,7 +1593,7 @@ var AutoExecutor = class _AutoExecutor {
|
|
|
1545
1593
|
);
|
|
1546
1594
|
await this.submitStepsToQStash([resultStep], [parallelStep]);
|
|
1547
1595
|
} catch (error) {
|
|
1548
|
-
if (error instanceof WorkflowAbort) {
|
|
1596
|
+
if (error instanceof WorkflowAbort || error instanceof import_qstash4.QstashError && error.status === 400) {
|
|
1549
1597
|
throw error;
|
|
1550
1598
|
}
|
|
1551
1599
|
throw new WorkflowError(
|
|
@@ -1616,15 +1664,16 @@ var AutoExecutor = class _AutoExecutor {
|
|
|
1616
1664
|
});
|
|
1617
1665
|
if (steps[0].waitEventId && steps.length === 1) {
|
|
1618
1666
|
const waitStep = steps[0];
|
|
1619
|
-
const { headers, timeoutHeaders } = getHeaders(
|
|
1620
|
-
"false",
|
|
1621
|
-
this.context.workflowRunId,
|
|
1622
|
-
this.context.url,
|
|
1623
|
-
this.context.headers,
|
|
1624
|
-
waitStep,
|
|
1625
|
-
this.context.failureUrl,
|
|
1626
|
-
this.context.retries
|
|
1627
|
-
|
|
1667
|
+
const { headers, timeoutHeaders } = getHeaders({
|
|
1668
|
+
initHeaderValue: "false",
|
|
1669
|
+
workflowRunId: this.context.workflowRunId,
|
|
1670
|
+
workflowUrl: this.context.url,
|
|
1671
|
+
userHeaders: this.context.headers,
|
|
1672
|
+
step: waitStep,
|
|
1673
|
+
failureUrl: this.context.failureUrl,
|
|
1674
|
+
retries: this.context.retries,
|
|
1675
|
+
telemetry: this.telemetry
|
|
1676
|
+
});
|
|
1628
1677
|
const waitBody = {
|
|
1629
1678
|
url: this.context.url,
|
|
1630
1679
|
timeout: waitStep.timeout,
|
|
@@ -1651,17 +1700,18 @@ var AutoExecutor = class _AutoExecutor {
|
|
|
1651
1700
|
const result = await this.context.qstashClient.batchJSON(
|
|
1652
1701
|
steps.map((singleStep, index) => {
|
|
1653
1702
|
const lazyStep = lazySteps[index];
|
|
1654
|
-
const { headers } = getHeaders(
|
|
1655
|
-
"false",
|
|
1656
|
-
this.context.workflowRunId,
|
|
1657
|
-
this.context.url,
|
|
1658
|
-
this.context.headers,
|
|
1659
|
-
singleStep,
|
|
1660
|
-
this.context.failureUrl,
|
|
1661
|
-
this.context.retries,
|
|
1662
|
-
lazyStep instanceof LazyCallStep ? lazyStep.retries : void 0,
|
|
1663
|
-
lazyStep instanceof LazyCallStep ? lazyStep.timeout : void 0
|
|
1664
|
-
|
|
1703
|
+
const { headers } = getHeaders({
|
|
1704
|
+
initHeaderValue: "false",
|
|
1705
|
+
workflowRunId: this.context.workflowRunId,
|
|
1706
|
+
workflowUrl: this.context.url,
|
|
1707
|
+
userHeaders: this.context.headers,
|
|
1708
|
+
step: singleStep,
|
|
1709
|
+
failureUrl: this.context.failureUrl,
|
|
1710
|
+
retries: this.context.retries,
|
|
1711
|
+
callRetries: lazyStep instanceof LazyCallStep ? lazyStep.retries : void 0,
|
|
1712
|
+
callTimeout: lazyStep instanceof LazyCallStep ? lazyStep.timeout : void 0,
|
|
1713
|
+
telemetry: this.telemetry
|
|
1714
|
+
});
|
|
1665
1715
|
const willWait = singleStep.concurrent === NO_CONCURRENCY || singleStep.stepId === 0;
|
|
1666
1716
|
singleStep.out = JSON.stringify(singleStep.out);
|
|
1667
1717
|
return singleStep.callUrl ? (
|
|
@@ -1773,6 +1823,127 @@ var sortSteps = (steps) => {
|
|
|
1773
1823
|
return [...steps].sort((step, stepOther) => getStepId(step) - getStepId(stepOther));
|
|
1774
1824
|
};
|
|
1775
1825
|
|
|
1826
|
+
// src/context/api/anthropic.ts
|
|
1827
|
+
var import_qstash5 = require("@upstash/qstash");
|
|
1828
|
+
|
|
1829
|
+
// src/context/provider.ts
|
|
1830
|
+
var getProviderInfo = (api) => {
|
|
1831
|
+
if (!api.provider) {
|
|
1832
|
+
throw new WorkflowError("A Provider must be provided.");
|
|
1833
|
+
}
|
|
1834
|
+
if (api.provider.owner === "upstash") {
|
|
1835
|
+
throw new WorkflowError("Upstash provider isn't supported.");
|
|
1836
|
+
}
|
|
1837
|
+
const { name, provider, ...parameters } = api;
|
|
1838
|
+
if (!provider.baseUrl) throw new TypeError("baseUrl cannot be empty or undefined!");
|
|
1839
|
+
if (!provider.token) throw new TypeError("token cannot be empty or undefined!");
|
|
1840
|
+
if (provider.apiKind !== name) {
|
|
1841
|
+
throw new TypeError(`Unexpected api name. Expected '${provider.apiKind}', received ${name}`);
|
|
1842
|
+
}
|
|
1843
|
+
const providerInfo = {
|
|
1844
|
+
url: provider.getUrl(),
|
|
1845
|
+
baseUrl: provider.baseUrl,
|
|
1846
|
+
route: provider.getRoute(),
|
|
1847
|
+
appendHeaders: provider.getHeaders(parameters),
|
|
1848
|
+
owner: provider.owner,
|
|
1849
|
+
method: provider.method
|
|
1850
|
+
};
|
|
1851
|
+
return provider.onFinish(providerInfo, parameters);
|
|
1852
|
+
};
|
|
1853
|
+
|
|
1854
|
+
// src/context/api/base.ts
|
|
1855
|
+
var BaseWorkflowApi = class {
|
|
1856
|
+
context;
|
|
1857
|
+
constructor({ context }) {
|
|
1858
|
+
this.context = context;
|
|
1859
|
+
}
|
|
1860
|
+
/**
|
|
1861
|
+
* context.call which uses a QStash API
|
|
1862
|
+
*
|
|
1863
|
+
* @param stepName
|
|
1864
|
+
* @param settings
|
|
1865
|
+
* @returns
|
|
1866
|
+
*/
|
|
1867
|
+
async callApi(stepName, settings) {
|
|
1868
|
+
const { url, appendHeaders, method } = getProviderInfo(settings.api);
|
|
1869
|
+
const { method: userMethod, body, headers = {}, retries = 0, timeout } = settings;
|
|
1870
|
+
return await this.context.call(stepName, {
|
|
1871
|
+
url,
|
|
1872
|
+
method: userMethod ?? method,
|
|
1873
|
+
body,
|
|
1874
|
+
headers: {
|
|
1875
|
+
...appendHeaders,
|
|
1876
|
+
...headers
|
|
1877
|
+
},
|
|
1878
|
+
retries,
|
|
1879
|
+
timeout
|
|
1880
|
+
});
|
|
1881
|
+
}
|
|
1882
|
+
};
|
|
1883
|
+
|
|
1884
|
+
// src/context/api/anthropic.ts
|
|
1885
|
+
var AnthropicAPI = class extends BaseWorkflowApi {
|
|
1886
|
+
async call(stepName, settings) {
|
|
1887
|
+
const { token, operation, ...parameters } = settings;
|
|
1888
|
+
return await this.callApi(stepName, {
|
|
1889
|
+
api: {
|
|
1890
|
+
name: "llm",
|
|
1891
|
+
provider: (0, import_qstash5.anthropic)({ token })
|
|
1892
|
+
},
|
|
1893
|
+
...parameters
|
|
1894
|
+
});
|
|
1895
|
+
}
|
|
1896
|
+
};
|
|
1897
|
+
|
|
1898
|
+
// src/context/api/openai.ts
|
|
1899
|
+
var import_qstash6 = require("@upstash/qstash");
|
|
1900
|
+
var OpenAIAPI = class extends BaseWorkflowApi {
|
|
1901
|
+
async call(stepName, settings) {
|
|
1902
|
+
const { token, organization, operation, ...parameters } = settings;
|
|
1903
|
+
return await this.callApi(stepName, {
|
|
1904
|
+
api: {
|
|
1905
|
+
name: "llm",
|
|
1906
|
+
provider: (0, import_qstash6.openai)({ token, organization })
|
|
1907
|
+
},
|
|
1908
|
+
...parameters
|
|
1909
|
+
});
|
|
1910
|
+
}
|
|
1911
|
+
};
|
|
1912
|
+
|
|
1913
|
+
// src/context/api/resend.ts
|
|
1914
|
+
var import_qstash7 = require("@upstash/qstash");
|
|
1915
|
+
var ResendAPI = class extends BaseWorkflowApi {
|
|
1916
|
+
async call(stepName, settings) {
|
|
1917
|
+
const { token, batch = false, ...parameters } = settings;
|
|
1918
|
+
return await this.callApi(stepName, {
|
|
1919
|
+
api: {
|
|
1920
|
+
name: "email",
|
|
1921
|
+
provider: (0, import_qstash7.resend)({ token, batch })
|
|
1922
|
+
},
|
|
1923
|
+
...parameters
|
|
1924
|
+
});
|
|
1925
|
+
}
|
|
1926
|
+
};
|
|
1927
|
+
|
|
1928
|
+
// src/context/api/index.ts
|
|
1929
|
+
var WorkflowApi = class extends BaseWorkflowApi {
|
|
1930
|
+
get openai() {
|
|
1931
|
+
return new OpenAIAPI({
|
|
1932
|
+
context: this.context
|
|
1933
|
+
});
|
|
1934
|
+
}
|
|
1935
|
+
get resend() {
|
|
1936
|
+
return new ResendAPI({
|
|
1937
|
+
context: this.context
|
|
1938
|
+
});
|
|
1939
|
+
}
|
|
1940
|
+
get anthropic() {
|
|
1941
|
+
return new AnthropicAPI({
|
|
1942
|
+
context: this.context
|
|
1943
|
+
});
|
|
1944
|
+
}
|
|
1945
|
+
};
|
|
1946
|
+
|
|
1776
1947
|
// src/context/context.ts
|
|
1777
1948
|
var WorkflowContext = class {
|
|
1778
1949
|
executor;
|
|
@@ -1905,7 +2076,8 @@ var WorkflowContext = class {
|
|
|
1905
2076
|
debug,
|
|
1906
2077
|
initialPayload,
|
|
1907
2078
|
env,
|
|
1908
|
-
retries
|
|
2079
|
+
retries,
|
|
2080
|
+
telemetry
|
|
1909
2081
|
}) {
|
|
1910
2082
|
this.qstashClient = qstashClient;
|
|
1911
2083
|
this.workflowRunId = workflowRunId;
|
|
@@ -1916,7 +2088,7 @@ var WorkflowContext = class {
|
|
|
1916
2088
|
this.requestPayload = initialPayload;
|
|
1917
2089
|
this.env = env ?? {};
|
|
1918
2090
|
this.retries = retries ?? DEFAULT_RETRIES;
|
|
1919
|
-
this.executor = new AutoExecutor(this, this.steps, debug);
|
|
2091
|
+
this.executor = new AutoExecutor(this, this.steps, telemetry, debug);
|
|
1920
2092
|
}
|
|
1921
2093
|
/**
|
|
1922
2094
|
* Executes a workflow step
|
|
@@ -2152,6 +2324,11 @@ var WorkflowContext = class {
|
|
|
2152
2324
|
async addStep(step) {
|
|
2153
2325
|
return await this.executor.addStep(step);
|
|
2154
2326
|
}
|
|
2327
|
+
get api() {
|
|
2328
|
+
return new WorkflowApi({
|
|
2329
|
+
context: this
|
|
2330
|
+
});
|
|
2331
|
+
}
|
|
2155
2332
|
};
|
|
2156
2333
|
|
|
2157
2334
|
// src/logger.ts
|
|
@@ -2229,7 +2406,7 @@ function decodeBase64(base64) {
|
|
|
2229
2406
|
}
|
|
2230
2407
|
|
|
2231
2408
|
// src/serve/authorization.ts
|
|
2232
|
-
var
|
|
2409
|
+
var import_qstash8 = require("@upstash/qstash");
|
|
2233
2410
|
var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowContext {
|
|
2234
2411
|
static disabledMessage = "disabled-qstash-worklfow-run";
|
|
2235
2412
|
/**
|
|
@@ -2260,7 +2437,7 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
|
|
|
2260
2437
|
*/
|
|
2261
2438
|
static async tryAuthentication(routeFunction, context) {
|
|
2262
2439
|
const disabledContext = new _DisabledWorkflowContext({
|
|
2263
|
-
qstashClient: new
|
|
2440
|
+
qstashClient: new import_qstash8.Client({
|
|
2264
2441
|
baseUrl: "disabled-client",
|
|
2265
2442
|
token: "disabled-client"
|
|
2266
2443
|
}),
|
|
@@ -2424,7 +2601,7 @@ var parseRequest = async (requestPayload, isFirstInvocation, workflowRunId, requ
|
|
|
2424
2601
|
};
|
|
2425
2602
|
}
|
|
2426
2603
|
};
|
|
2427
|
-
var handleFailure = async (request, requestPayload, qstashClient, initialPayloadParser, routeFunction, failureFunction, debug) => {
|
|
2604
|
+
var handleFailure = async (request, requestPayload, qstashClient, initialPayloadParser, routeFunction, failureFunction, env, retries, debug) => {
|
|
2428
2605
|
if (request.headers.get(WORKFLOW_FAILURE_HEADER) !== "true") {
|
|
2429
2606
|
return ok("not-failure-callback");
|
|
2430
2607
|
}
|
|
@@ -2449,7 +2626,11 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
|
|
|
2449
2626
|
steps: [],
|
|
2450
2627
|
url,
|
|
2451
2628
|
failureUrl: url,
|
|
2452
|
-
debug
|
|
2629
|
+
debug,
|
|
2630
|
+
env,
|
|
2631
|
+
retries,
|
|
2632
|
+
telemetry: void 0
|
|
2633
|
+
// not going to make requests in authentication check
|
|
2453
2634
|
});
|
|
2454
2635
|
const authCheck = await DisabledWorkflowContext.tryAuthentication(
|
|
2455
2636
|
routeFunction,
|
|
@@ -2474,15 +2655,15 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
|
|
|
2474
2655
|
};
|
|
2475
2656
|
|
|
2476
2657
|
// src/serve/options.ts
|
|
2477
|
-
var
|
|
2478
|
-
var
|
|
2658
|
+
var import_qstash9 = require("@upstash/qstash");
|
|
2659
|
+
var import_qstash10 = require("@upstash/qstash");
|
|
2479
2660
|
var processOptions = (options) => {
|
|
2480
2661
|
const environment = options?.env ?? (typeof process === "undefined" ? {} : process.env);
|
|
2481
2662
|
const receiverEnvironmentVariablesSet = Boolean(
|
|
2482
2663
|
environment.QSTASH_CURRENT_SIGNING_KEY && environment.QSTASH_NEXT_SIGNING_KEY
|
|
2483
2664
|
);
|
|
2484
2665
|
return {
|
|
2485
|
-
qstashClient: new
|
|
2666
|
+
qstashClient: new import_qstash10.Client({
|
|
2486
2667
|
baseUrl: environment.QSTASH_URL,
|
|
2487
2668
|
token: environment.QSTASH_TOKEN
|
|
2488
2669
|
}),
|
|
@@ -2516,7 +2697,7 @@ var processOptions = (options) => {
|
|
|
2516
2697
|
throw error;
|
|
2517
2698
|
}
|
|
2518
2699
|
},
|
|
2519
|
-
receiver: receiverEnvironmentVariablesSet ? new
|
|
2700
|
+
receiver: receiverEnvironmentVariablesSet ? new import_qstash9.Receiver({
|
|
2520
2701
|
currentSigningKey: environment.QSTASH_CURRENT_SIGNING_KEY,
|
|
2521
2702
|
nextSigningKey: environment.QSTASH_NEXT_SIGNING_KEY
|
|
2522
2703
|
}) : void 0,
|
|
@@ -2524,6 +2705,7 @@ var processOptions = (options) => {
|
|
|
2524
2705
|
env: environment,
|
|
2525
2706
|
retries: DEFAULT_RETRIES,
|
|
2526
2707
|
useJSONContent: false,
|
|
2708
|
+
disableTelemetry: false,
|
|
2527
2709
|
...options
|
|
2528
2710
|
};
|
|
2529
2711
|
};
|
|
@@ -2558,7 +2740,7 @@ var determineUrls = async (request, url, baseUrl, failureFunction, failureUrl, d
|
|
|
2558
2740
|
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`;
|
|
2559
2741
|
|
|
2560
2742
|
// src/serve/index.ts
|
|
2561
|
-
var serveBase = (routeFunction, options) => {
|
|
2743
|
+
var serveBase = (routeFunction, telemetry, options) => {
|
|
2562
2744
|
const {
|
|
2563
2745
|
qstashClient,
|
|
2564
2746
|
onStepFinish,
|
|
@@ -2571,8 +2753,10 @@ var serveBase = (routeFunction, options) => {
|
|
|
2571
2753
|
baseUrl,
|
|
2572
2754
|
env,
|
|
2573
2755
|
retries,
|
|
2574
|
-
useJSONContent
|
|
2756
|
+
useJSONContent,
|
|
2757
|
+
disableTelemetry
|
|
2575
2758
|
} = processOptions(options);
|
|
2759
|
+
telemetry = disableTelemetry ? void 0 : telemetry;
|
|
2576
2760
|
const debug = WorkflowLogger.getLogger(verbose);
|
|
2577
2761
|
const handler = async (request) => {
|
|
2578
2762
|
await debug?.log("INFO", "ENDPOINT_START");
|
|
@@ -2608,7 +2792,10 @@ var serveBase = (routeFunction, options) => {
|
|
|
2608
2792
|
qstashClient,
|
|
2609
2793
|
initialPayloadParser,
|
|
2610
2794
|
routeFunction,
|
|
2611
|
-
failureFunction
|
|
2795
|
+
failureFunction,
|
|
2796
|
+
env,
|
|
2797
|
+
retries,
|
|
2798
|
+
debug
|
|
2612
2799
|
);
|
|
2613
2800
|
if (failureCheck.isErr()) {
|
|
2614
2801
|
throw failureCheck.error;
|
|
@@ -2626,7 +2813,8 @@ var serveBase = (routeFunction, options) => {
|
|
|
2626
2813
|
failureUrl: workflowFailureUrl,
|
|
2627
2814
|
debug,
|
|
2628
2815
|
env,
|
|
2629
|
-
retries
|
|
2816
|
+
retries,
|
|
2817
|
+
telemetry
|
|
2630
2818
|
});
|
|
2631
2819
|
const authCheck = await DisabledWorkflowContext.tryAuthentication(
|
|
2632
2820
|
routeFunction,
|
|
@@ -2642,22 +2830,23 @@ var serveBase = (routeFunction, options) => {
|
|
|
2642
2830
|
"auth-fail"
|
|
2643
2831
|
);
|
|
2644
2832
|
}
|
|
2645
|
-
const callReturnCheck = await handleThirdPartyCallResult(
|
|
2833
|
+
const callReturnCheck = await handleThirdPartyCallResult({
|
|
2646
2834
|
request,
|
|
2647
|
-
rawInitialPayload,
|
|
2648
|
-
qstashClient,
|
|
2835
|
+
requestPayload: rawInitialPayload,
|
|
2836
|
+
client: qstashClient,
|
|
2649
2837
|
workflowUrl,
|
|
2650
|
-
workflowFailureUrl,
|
|
2838
|
+
failureUrl: workflowFailureUrl,
|
|
2651
2839
|
retries,
|
|
2840
|
+
telemetry,
|
|
2652
2841
|
debug
|
|
2653
|
-
);
|
|
2842
|
+
});
|
|
2654
2843
|
if (callReturnCheck.isErr()) {
|
|
2655
2844
|
await debug?.log("ERROR", "SUBMIT_THIRD_PARTY_RESULT", {
|
|
2656
2845
|
error: callReturnCheck.error.message
|
|
2657
2846
|
});
|
|
2658
2847
|
throw callReturnCheck.error;
|
|
2659
2848
|
} else if (callReturnCheck.value === "continue-workflow") {
|
|
2660
|
-
const result = isFirstInvocation ? await triggerFirstInvocation(workflowContext,
|
|
2849
|
+
const result = isFirstInvocation ? await triggerFirstInvocation({ workflowContext, useJSONContent, telemetry, debug }) : await triggerRouteFunction({
|
|
2661
2850
|
onStep: async () => routeFunction(workflowContext),
|
|
2662
2851
|
onCleanup: async () => {
|
|
2663
2852
|
await triggerWorkflowDelete(workflowContext, debug);
|
|
@@ -2719,7 +2908,15 @@ var serve = (routeFunction, options) => {
|
|
|
2719
2908
|
body: await readRawBody(event),
|
|
2720
2909
|
method: "POST"
|
|
2721
2910
|
});
|
|
2722
|
-
const { handler: serveHandler } = serveBase(
|
|
2911
|
+
const { handler: serveHandler } = serveBase(
|
|
2912
|
+
routeFunction,
|
|
2913
|
+
{
|
|
2914
|
+
sdk: SDK_TELEMETRY,
|
|
2915
|
+
framework: "h3",
|
|
2916
|
+
runtime: process.versions.bun ? `bun@${process.versions.bun}/node@${process.version}` : `node@${process.version}`
|
|
2917
|
+
},
|
|
2918
|
+
options
|
|
2919
|
+
);
|
|
2723
2920
|
return await serveHandler(request);
|
|
2724
2921
|
});
|
|
2725
2922
|
return { handler };
|
package/h3.mjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
|
+
SDK_TELEMETRY,
|
|
2
3
|
serveBase
|
|
3
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-ETDFMXER.mjs";
|
|
4
5
|
|
|
5
6
|
// node_modules/defu/dist/defu.mjs
|
|
6
7
|
function isPlainObject(value) {
|
|
@@ -341,7 +342,15 @@ var serve = (routeFunction, options) => {
|
|
|
341
342
|
body: await readRawBody(event),
|
|
342
343
|
method: "POST"
|
|
343
344
|
});
|
|
344
|
-
const { handler: serveHandler } = serveBase(
|
|
345
|
+
const { handler: serveHandler } = serveBase(
|
|
346
|
+
routeFunction,
|
|
347
|
+
{
|
|
348
|
+
sdk: SDK_TELEMETRY,
|
|
349
|
+
framework: "h3",
|
|
350
|
+
runtime: process.versions.bun ? `bun@${process.versions.bun}/node@${process.version}` : `node@${process.version}`
|
|
351
|
+
},
|
|
352
|
+
options
|
|
353
|
+
);
|
|
345
354
|
return await serveHandler(request);
|
|
346
355
|
});
|
|
347
356
|
return { handler };
|
package/hono.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Context } from 'hono';
|
|
2
|
-
import { R as RouteFunction, j as PublicServeOptions } from './types-
|
|
2
|
+
import { R as RouteFunction, j as PublicServeOptions } from './types-Bt4-paRy.mjs';
|
|
3
3
|
import { Variables } from 'hono/types';
|
|
4
4
|
import '@upstash/qstash';
|
|
5
5
|
|
package/hono.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Context } from 'hono';
|
|
2
|
-
import { R as RouteFunction, j as PublicServeOptions } from './types-
|
|
2
|
+
import { R as RouteFunction, j as PublicServeOptions } from './types-Bt4-paRy.js';
|
|
3
3
|
import { Variables } from 'hono/types';
|
|
4
4
|
import '@upstash/qstash';
|
|
5
5
|
|