@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/index.js CHANGED
@@ -90,6 +90,23 @@ var getSteps = async (requester, workflowRunId, messageId, debug) => {
90
90
  }
91
91
  };
92
92
 
93
+ // src/constants.ts
94
+ var WORKFLOW_ID_HEADER = "Upstash-Workflow-RunId";
95
+ var WORKFLOW_INIT_HEADER = "Upstash-Workflow-Init";
96
+ var WORKFLOW_URL_HEADER = "Upstash-Workflow-Url";
97
+ var WORKFLOW_FAILURE_HEADER = "Upstash-Workflow-Is-Failure";
98
+ var WORKFLOW_FEATURE_HEADER = "Upstash-Feature-Set";
99
+ var WORKFLOW_PROTOCOL_VERSION = "1";
100
+ var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
101
+ var DEFAULT_CONTENT_TYPE = "application/json";
102
+ var NO_CONCURRENCY = 1;
103
+ var DEFAULT_RETRIES = 3;
104
+ var VERSION = "v0.2.3";
105
+ var SDK_TELEMETRY = `@upstash/workflow@${VERSION}`;
106
+ var TELEMETRY_HEADER_SDK = "Upstash-Telemetry-Sdk";
107
+ var TELEMETRY_HEADER_FRAMEWORK = "Upstash-Telemetry-Framework";
108
+ var TELEMETRY_HEADER_RUNTIME = "Upstash-Telemetry-Runtime";
109
+
93
110
  // src/error.ts
94
111
  var import_qstash2 = require("@upstash/qstash");
95
112
  var WorkflowError = class extends import_qstash2.QstashError {
@@ -727,18 +744,6 @@ var Err = class {
727
744
  };
728
745
  var fromThrowable = Result.fromThrowable;
729
746
 
730
- // src/constants.ts
731
- var WORKFLOW_ID_HEADER = "Upstash-Workflow-RunId";
732
- var WORKFLOW_INIT_HEADER = "Upstash-Workflow-Init";
733
- var WORKFLOW_URL_HEADER = "Upstash-Workflow-Url";
734
- var WORKFLOW_FAILURE_HEADER = "Upstash-Workflow-Is-Failure";
735
- var WORKFLOW_FEATURE_HEADER = "Upstash-Feature-Set";
736
- var WORKFLOW_PROTOCOL_VERSION = "1";
737
- var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
738
- var DEFAULT_CONTENT_TYPE = "application/json";
739
- var NO_CONCURRENCY = 1;
740
- var DEFAULT_RETRIES = 3;
741
-
742
747
  // src/types.ts
743
748
  var StepTypes = [
744
749
  "Initial",
@@ -752,16 +757,21 @@ var StepTypes = [
752
757
 
753
758
  // src/workflow-requests.ts
754
759
  var import_qstash3 = require("@upstash/qstash");
755
- var triggerFirstInvocation = async (workflowContext, retries, useJSONContent, debug) => {
756
- const { headers } = getHeaders(
757
- "true",
758
- workflowContext.workflowRunId,
759
- workflowContext.url,
760
- workflowContext.headers,
761
- void 0,
762
- workflowContext.failureUrl,
763
- retries
764
- );
760
+ var triggerFirstInvocation = async ({
761
+ workflowContext,
762
+ useJSONContent,
763
+ telemetry,
764
+ debug
765
+ }) => {
766
+ const { headers } = getHeaders({
767
+ initHeaderValue: "true",
768
+ workflowRunId: workflowContext.workflowRunId,
769
+ workflowUrl: workflowContext.url,
770
+ userHeaders: workflowContext.headers,
771
+ failureUrl: workflowContext.failureUrl,
772
+ retries: workflowContext.retries,
773
+ telemetry
774
+ });
765
775
  if (useJSONContent) {
766
776
  headers["content-type"] = "application/json";
767
777
  }
@@ -867,7 +877,16 @@ var recreateUserHeaders = (headers) => {
867
877
  }
868
878
  return filteredHeaders;
869
879
  };
870
- var handleThirdPartyCallResult = async (request, requestPayload, client, workflowUrl, failureUrl, retries, debug) => {
880
+ var handleThirdPartyCallResult = async ({
881
+ request,
882
+ requestPayload,
883
+ client,
884
+ workflowUrl,
885
+ failureUrl,
886
+ retries,
887
+ telemetry,
888
+ debug
889
+ }) => {
871
890
  try {
872
891
  if (request.headers.get("Upstash-Workflow-Callback")) {
873
892
  let callbackPayload;
@@ -926,15 +945,15 @@ ${atob(callbackMessage.body ?? "")}`
926
945
  );
927
946
  }
928
947
  const userHeaders = recreateUserHeaders(request.headers);
929
- const { headers: requestHeaders } = getHeaders(
930
- "false",
948
+ const { headers: requestHeaders } = getHeaders({
949
+ initHeaderValue: "false",
931
950
  workflowRunId,
932
951
  workflowUrl,
933
952
  userHeaders,
934
- void 0,
935
953
  failureUrl,
936
- retries
937
- );
954
+ retries,
955
+ telemetry
956
+ });
938
957
  const callResponse = {
939
958
  status: callbackMessage.status,
940
959
  body: atob(callbackMessage.body ?? ""),
@@ -972,12 +991,31 @@ ${atob(callbackMessage.body ?? "")}`
972
991
  );
973
992
  }
974
993
  };
975
- var getHeaders = (initHeaderValue, workflowRunId, workflowUrl, userHeaders, step, failureUrl, retries, callRetries, callTimeout) => {
994
+ var getTelemetryHeaders = (telemetry) => {
995
+ return {
996
+ [TELEMETRY_HEADER_SDK]: telemetry.sdk,
997
+ [TELEMETRY_HEADER_FRAMEWORK]: telemetry.framework,
998
+ [TELEMETRY_HEADER_RUNTIME]: telemetry.runtime ?? "unknown"
999
+ };
1000
+ };
1001
+ var getHeaders = ({
1002
+ initHeaderValue,
1003
+ workflowRunId,
1004
+ workflowUrl,
1005
+ userHeaders,
1006
+ failureUrl,
1007
+ retries,
1008
+ step,
1009
+ callRetries,
1010
+ callTimeout,
1011
+ telemetry
1012
+ }) => {
976
1013
  const baseHeaders = {
977
1014
  [WORKFLOW_INIT_HEADER]: initHeaderValue,
978
1015
  [WORKFLOW_ID_HEADER]: workflowRunId,
979
1016
  [WORKFLOW_URL_HEADER]: workflowUrl,
980
- [WORKFLOW_FEATURE_HEADER]: "LazyFetch,InitialBody"
1017
+ [WORKFLOW_FEATURE_HEADER]: "LazyFetch,InitialBody",
1018
+ ...telemetry ? getTelemetryHeaders(telemetry) : {}
981
1019
  };
982
1020
  if (!step?.callUrl) {
983
1021
  baseHeaders[`Upstash-Forward-${WORKFLOW_PROTOCOL_VERSION_HEADER}`] = WORKFLOW_PROTOCOL_VERSION;
@@ -1051,6 +1089,13 @@ var getHeaders = (initHeaderValue, workflowRunId, workflowUrl, userHeaders, step
1051
1089
  ...Object.fromEntries(
1052
1090
  Object.entries(baseHeaders).map(([header, value]) => [header, [value]])
1053
1091
  ),
1092
+ // to include telemetry headers:
1093
+ ...telemetry ? Object.fromEntries(
1094
+ Object.entries(getTelemetryHeaders(telemetry)).map(([header, value]) => [
1095
+ header,
1096
+ [value]
1097
+ ])
1098
+ ) : {},
1054
1099
  // note: using WORKFLOW_ID_HEADER doesn't work, because Runid -> RunId:
1055
1100
  "Upstash-Workflow-Runid": [workflowRunId],
1056
1101
  [WORKFLOW_INIT_HEADER]: ["false"],
@@ -1089,6 +1134,7 @@ If you want to disable QStash Verification, you should clear env variables QSTAS
1089
1134
  };
1090
1135
 
1091
1136
  // src/context/auto-executor.ts
1137
+ var import_qstash4 = require("@upstash/qstash");
1092
1138
  var AutoExecutor = class _AutoExecutor {
1093
1139
  context;
1094
1140
  promises = /* @__PURE__ */ new WeakMap();
@@ -1097,13 +1143,15 @@ var AutoExecutor = class _AutoExecutor {
1097
1143
  nonPlanStepCount;
1098
1144
  steps;
1099
1145
  indexInCurrentList = 0;
1146
+ telemetry;
1100
1147
  stepCount = 0;
1101
1148
  planStepCount = 0;
1102
1149
  executingStep = false;
1103
- constructor(context, steps, debug) {
1150
+ constructor(context, steps, telemetry, debug) {
1104
1151
  this.context = context;
1105
- this.debug = debug;
1106
1152
  this.steps = steps;
1153
+ this.telemetry = telemetry;
1154
+ this.debug = debug;
1107
1155
  this.nonPlanStepCount = this.steps.filter((step) => !step.targetStep).length;
1108
1156
  }
1109
1157
  /**
@@ -1246,7 +1294,7 @@ var AutoExecutor = class _AutoExecutor {
1246
1294
  );
1247
1295
  await this.submitStepsToQStash([resultStep], [parallelStep]);
1248
1296
  } catch (error) {
1249
- if (error instanceof WorkflowAbort) {
1297
+ if (error instanceof WorkflowAbort || error instanceof import_qstash4.QstashError && error.status === 400) {
1250
1298
  throw error;
1251
1299
  }
1252
1300
  throw new WorkflowError(
@@ -1317,15 +1365,16 @@ var AutoExecutor = class _AutoExecutor {
1317
1365
  });
1318
1366
  if (steps[0].waitEventId && steps.length === 1) {
1319
1367
  const waitStep = steps[0];
1320
- const { headers, timeoutHeaders } = getHeaders(
1321
- "false",
1322
- this.context.workflowRunId,
1323
- this.context.url,
1324
- this.context.headers,
1325
- waitStep,
1326
- this.context.failureUrl,
1327
- this.context.retries
1328
- );
1368
+ const { headers, timeoutHeaders } = getHeaders({
1369
+ initHeaderValue: "false",
1370
+ workflowRunId: this.context.workflowRunId,
1371
+ workflowUrl: this.context.url,
1372
+ userHeaders: this.context.headers,
1373
+ step: waitStep,
1374
+ failureUrl: this.context.failureUrl,
1375
+ retries: this.context.retries,
1376
+ telemetry: this.telemetry
1377
+ });
1329
1378
  const waitBody = {
1330
1379
  url: this.context.url,
1331
1380
  timeout: waitStep.timeout,
@@ -1352,17 +1401,18 @@ var AutoExecutor = class _AutoExecutor {
1352
1401
  const result = await this.context.qstashClient.batchJSON(
1353
1402
  steps.map((singleStep, index) => {
1354
1403
  const lazyStep = lazySteps[index];
1355
- const { headers } = getHeaders(
1356
- "false",
1357
- this.context.workflowRunId,
1358
- this.context.url,
1359
- this.context.headers,
1360
- singleStep,
1361
- this.context.failureUrl,
1362
- this.context.retries,
1363
- lazyStep instanceof LazyCallStep ? lazyStep.retries : void 0,
1364
- lazyStep instanceof LazyCallStep ? lazyStep.timeout : void 0
1365
- );
1404
+ const { headers } = getHeaders({
1405
+ initHeaderValue: "false",
1406
+ workflowRunId: this.context.workflowRunId,
1407
+ workflowUrl: this.context.url,
1408
+ userHeaders: this.context.headers,
1409
+ step: singleStep,
1410
+ failureUrl: this.context.failureUrl,
1411
+ retries: this.context.retries,
1412
+ callRetries: lazyStep instanceof LazyCallStep ? lazyStep.retries : void 0,
1413
+ callTimeout: lazyStep instanceof LazyCallStep ? lazyStep.timeout : void 0,
1414
+ telemetry: this.telemetry
1415
+ });
1366
1416
  const willWait = singleStep.concurrent === NO_CONCURRENCY || singleStep.stepId === 0;
1367
1417
  singleStep.out = JSON.stringify(singleStep.out);
1368
1418
  return singleStep.callUrl ? (
@@ -1474,6 +1524,127 @@ var sortSteps = (steps) => {
1474
1524
  return [...steps].sort((step, stepOther) => getStepId(step) - getStepId(stepOther));
1475
1525
  };
1476
1526
 
1527
+ // src/context/api/anthropic.ts
1528
+ var import_qstash5 = require("@upstash/qstash");
1529
+
1530
+ // src/context/provider.ts
1531
+ var getProviderInfo = (api) => {
1532
+ if (!api.provider) {
1533
+ throw new WorkflowError("A Provider must be provided.");
1534
+ }
1535
+ if (api.provider.owner === "upstash") {
1536
+ throw new WorkflowError("Upstash provider isn't supported.");
1537
+ }
1538
+ const { name, provider, ...parameters } = api;
1539
+ if (!provider.baseUrl) throw new TypeError("baseUrl cannot be empty or undefined!");
1540
+ if (!provider.token) throw new TypeError("token cannot be empty or undefined!");
1541
+ if (provider.apiKind !== name) {
1542
+ throw new TypeError(`Unexpected api name. Expected '${provider.apiKind}', received ${name}`);
1543
+ }
1544
+ const providerInfo = {
1545
+ url: provider.getUrl(),
1546
+ baseUrl: provider.baseUrl,
1547
+ route: provider.getRoute(),
1548
+ appendHeaders: provider.getHeaders(parameters),
1549
+ owner: provider.owner,
1550
+ method: provider.method
1551
+ };
1552
+ return provider.onFinish(providerInfo, parameters);
1553
+ };
1554
+
1555
+ // src/context/api/base.ts
1556
+ var BaseWorkflowApi = class {
1557
+ context;
1558
+ constructor({ context }) {
1559
+ this.context = context;
1560
+ }
1561
+ /**
1562
+ * context.call which uses a QStash API
1563
+ *
1564
+ * @param stepName
1565
+ * @param settings
1566
+ * @returns
1567
+ */
1568
+ async callApi(stepName, settings) {
1569
+ const { url, appendHeaders, method } = getProviderInfo(settings.api);
1570
+ const { method: userMethod, body, headers = {}, retries = 0, timeout } = settings;
1571
+ return await this.context.call(stepName, {
1572
+ url,
1573
+ method: userMethod ?? method,
1574
+ body,
1575
+ headers: {
1576
+ ...appendHeaders,
1577
+ ...headers
1578
+ },
1579
+ retries,
1580
+ timeout
1581
+ });
1582
+ }
1583
+ };
1584
+
1585
+ // src/context/api/anthropic.ts
1586
+ var AnthropicAPI = class extends BaseWorkflowApi {
1587
+ async call(stepName, settings) {
1588
+ const { token, operation, ...parameters } = settings;
1589
+ return await this.callApi(stepName, {
1590
+ api: {
1591
+ name: "llm",
1592
+ provider: (0, import_qstash5.anthropic)({ token })
1593
+ },
1594
+ ...parameters
1595
+ });
1596
+ }
1597
+ };
1598
+
1599
+ // src/context/api/openai.ts
1600
+ var import_qstash6 = require("@upstash/qstash");
1601
+ var OpenAIAPI = class extends BaseWorkflowApi {
1602
+ async call(stepName, settings) {
1603
+ const { token, organization, operation, ...parameters } = settings;
1604
+ return await this.callApi(stepName, {
1605
+ api: {
1606
+ name: "llm",
1607
+ provider: (0, import_qstash6.openai)({ token, organization })
1608
+ },
1609
+ ...parameters
1610
+ });
1611
+ }
1612
+ };
1613
+
1614
+ // src/context/api/resend.ts
1615
+ var import_qstash7 = require("@upstash/qstash");
1616
+ var ResendAPI = class extends BaseWorkflowApi {
1617
+ async call(stepName, settings) {
1618
+ const { token, batch = false, ...parameters } = settings;
1619
+ return await this.callApi(stepName, {
1620
+ api: {
1621
+ name: "email",
1622
+ provider: (0, import_qstash7.resend)({ token, batch })
1623
+ },
1624
+ ...parameters
1625
+ });
1626
+ }
1627
+ };
1628
+
1629
+ // src/context/api/index.ts
1630
+ var WorkflowApi = class extends BaseWorkflowApi {
1631
+ get openai() {
1632
+ return new OpenAIAPI({
1633
+ context: this.context
1634
+ });
1635
+ }
1636
+ get resend() {
1637
+ return new ResendAPI({
1638
+ context: this.context
1639
+ });
1640
+ }
1641
+ get anthropic() {
1642
+ return new AnthropicAPI({
1643
+ context: this.context
1644
+ });
1645
+ }
1646
+ };
1647
+
1477
1648
  // src/context/context.ts
1478
1649
  var WorkflowContext = class {
1479
1650
  executor;
@@ -1606,7 +1777,8 @@ var WorkflowContext = class {
1606
1777
  debug,
1607
1778
  initialPayload,
1608
1779
  env,
1609
- retries
1780
+ retries,
1781
+ telemetry
1610
1782
  }) {
1611
1783
  this.qstashClient = qstashClient;
1612
1784
  this.workflowRunId = workflowRunId;
@@ -1617,7 +1789,7 @@ var WorkflowContext = class {
1617
1789
  this.requestPayload = initialPayload;
1618
1790
  this.env = env ?? {};
1619
1791
  this.retries = retries ?? DEFAULT_RETRIES;
1620
- this.executor = new AutoExecutor(this, this.steps, debug);
1792
+ this.executor = new AutoExecutor(this, this.steps, telemetry, debug);
1621
1793
  }
1622
1794
  /**
1623
1795
  * Executes a workflow step
@@ -1853,6 +2025,11 @@ var WorkflowContext = class {
1853
2025
  async addStep(step) {
1854
2026
  return await this.executor.addStep(step);
1855
2027
  }
2028
+ get api() {
2029
+ return new WorkflowApi({
2030
+ context: this
2031
+ });
2032
+ }
1856
2033
  };
1857
2034
 
1858
2035
  // src/logger.ts
@@ -1930,7 +2107,7 @@ function decodeBase64(base64) {
1930
2107
  }
1931
2108
 
1932
2109
  // src/serve/authorization.ts
1933
- var import_qstash4 = require("@upstash/qstash");
2110
+ var import_qstash8 = require("@upstash/qstash");
1934
2111
  var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowContext {
1935
2112
  static disabledMessage = "disabled-qstash-worklfow-run";
1936
2113
  /**
@@ -1961,7 +2138,7 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
1961
2138
  */
1962
2139
  static async tryAuthentication(routeFunction, context) {
1963
2140
  const disabledContext = new _DisabledWorkflowContext({
1964
- qstashClient: new import_qstash4.Client({
2141
+ qstashClient: new import_qstash8.Client({
1965
2142
  baseUrl: "disabled-client",
1966
2143
  token: "disabled-client"
1967
2144
  }),
@@ -2125,7 +2302,7 @@ var parseRequest = async (requestPayload, isFirstInvocation, workflowRunId, requ
2125
2302
  };
2126
2303
  }
2127
2304
  };
2128
- var handleFailure = async (request, requestPayload, qstashClient, initialPayloadParser, routeFunction, failureFunction, debug) => {
2305
+ var handleFailure = async (request, requestPayload, qstashClient, initialPayloadParser, routeFunction, failureFunction, env, retries, debug) => {
2129
2306
  if (request.headers.get(WORKFLOW_FAILURE_HEADER) !== "true") {
2130
2307
  return ok("not-failure-callback");
2131
2308
  }
@@ -2150,7 +2327,11 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
2150
2327
  steps: [],
2151
2328
  url,
2152
2329
  failureUrl: url,
2153
- debug
2330
+ debug,
2331
+ env,
2332
+ retries,
2333
+ telemetry: void 0
2334
+ // not going to make requests in authentication check
2154
2335
  });
2155
2336
  const authCheck = await DisabledWorkflowContext.tryAuthentication(
2156
2337
  routeFunction,
@@ -2175,15 +2356,15 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
2175
2356
  };
2176
2357
 
2177
2358
  // src/serve/options.ts
2178
- var import_qstash5 = require("@upstash/qstash");
2179
- var import_qstash6 = require("@upstash/qstash");
2359
+ var import_qstash9 = require("@upstash/qstash");
2360
+ var import_qstash10 = require("@upstash/qstash");
2180
2361
  var processOptions = (options) => {
2181
2362
  const environment = options?.env ?? (typeof process === "undefined" ? {} : process.env);
2182
2363
  const receiverEnvironmentVariablesSet = Boolean(
2183
2364
  environment.QSTASH_CURRENT_SIGNING_KEY && environment.QSTASH_NEXT_SIGNING_KEY
2184
2365
  );
2185
2366
  return {
2186
- qstashClient: new import_qstash6.Client({
2367
+ qstashClient: new import_qstash10.Client({
2187
2368
  baseUrl: environment.QSTASH_URL,
2188
2369
  token: environment.QSTASH_TOKEN
2189
2370
  }),
@@ -2217,7 +2398,7 @@ var processOptions = (options) => {
2217
2398
  throw error;
2218
2399
  }
2219
2400
  },
2220
- receiver: receiverEnvironmentVariablesSet ? new import_qstash5.Receiver({
2401
+ receiver: receiverEnvironmentVariablesSet ? new import_qstash9.Receiver({
2221
2402
  currentSigningKey: environment.QSTASH_CURRENT_SIGNING_KEY,
2222
2403
  nextSigningKey: environment.QSTASH_NEXT_SIGNING_KEY
2223
2404
  }) : void 0,
@@ -2225,6 +2406,7 @@ var processOptions = (options) => {
2225
2406
  env: environment,
2226
2407
  retries: DEFAULT_RETRIES,
2227
2408
  useJSONContent: false,
2409
+ disableTelemetry: false,
2228
2410
  ...options
2229
2411
  };
2230
2412
  };
@@ -2259,7 +2441,7 @@ var determineUrls = async (request, url, baseUrl, failureFunction, failureUrl, d
2259
2441
  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`;
2260
2442
 
2261
2443
  // src/serve/index.ts
2262
- var serveBase = (routeFunction, options) => {
2444
+ var serveBase = (routeFunction, telemetry, options) => {
2263
2445
  const {
2264
2446
  qstashClient,
2265
2447
  onStepFinish,
@@ -2272,8 +2454,10 @@ var serveBase = (routeFunction, options) => {
2272
2454
  baseUrl,
2273
2455
  env,
2274
2456
  retries,
2275
- useJSONContent
2457
+ useJSONContent,
2458
+ disableTelemetry
2276
2459
  } = processOptions(options);
2460
+ telemetry = disableTelemetry ? void 0 : telemetry;
2277
2461
  const debug = WorkflowLogger.getLogger(verbose);
2278
2462
  const handler = async (request) => {
2279
2463
  await debug?.log("INFO", "ENDPOINT_START");
@@ -2309,7 +2493,10 @@ var serveBase = (routeFunction, options) => {
2309
2493
  qstashClient,
2310
2494
  initialPayloadParser,
2311
2495
  routeFunction,
2312
- failureFunction
2496
+ failureFunction,
2497
+ env,
2498
+ retries,
2499
+ debug
2313
2500
  );
2314
2501
  if (failureCheck.isErr()) {
2315
2502
  throw failureCheck.error;
@@ -2327,7 +2514,8 @@ var serveBase = (routeFunction, options) => {
2327
2514
  failureUrl: workflowFailureUrl,
2328
2515
  debug,
2329
2516
  env,
2330
- retries
2517
+ retries,
2518
+ telemetry
2331
2519
  });
2332
2520
  const authCheck = await DisabledWorkflowContext.tryAuthentication(
2333
2521
  routeFunction,
@@ -2343,22 +2531,23 @@ var serveBase = (routeFunction, options) => {
2343
2531
  "auth-fail"
2344
2532
  );
2345
2533
  }
2346
- const callReturnCheck = await handleThirdPartyCallResult(
2534
+ const callReturnCheck = await handleThirdPartyCallResult({
2347
2535
  request,
2348
- rawInitialPayload,
2349
- qstashClient,
2536
+ requestPayload: rawInitialPayload,
2537
+ client: qstashClient,
2350
2538
  workflowUrl,
2351
- workflowFailureUrl,
2539
+ failureUrl: workflowFailureUrl,
2352
2540
  retries,
2541
+ telemetry,
2353
2542
  debug
2354
- );
2543
+ });
2355
2544
  if (callReturnCheck.isErr()) {
2356
2545
  await debug?.log("ERROR", "SUBMIT_THIRD_PARTY_RESULT", {
2357
2546
  error: callReturnCheck.error.message
2358
2547
  });
2359
2548
  throw callReturnCheck.error;
2360
2549
  } else if (callReturnCheck.value === "continue-workflow") {
2361
- const result = isFirstInvocation ? await triggerFirstInvocation(workflowContext, retries, useJSONContent, debug) : await triggerRouteFunction({
2550
+ const result = isFirstInvocation ? await triggerFirstInvocation({ workflowContext, useJSONContent, telemetry, debug }) : await triggerRouteFunction({
2362
2551
  onStep: async () => routeFunction(workflowContext),
2363
2552
  onCleanup: async () => {
2364
2553
  await triggerWorkflowDelete(workflowContext, debug);
@@ -2393,11 +2582,18 @@ var serveBase = (routeFunction, options) => {
2393
2582
  return { handler: safeHandler };
2394
2583
  };
2395
2584
  var serve = (routeFunction, options) => {
2396
- return serveBase(routeFunction, options);
2585
+ return serveBase(
2586
+ routeFunction,
2587
+ {
2588
+ sdk: SDK_TELEMETRY,
2589
+ framework: "unknown"
2590
+ },
2591
+ options
2592
+ );
2397
2593
  };
2398
2594
 
2399
2595
  // src/client/index.ts
2400
- var import_qstash7 = require("@upstash/qstash");
2596
+ var import_qstash11 = require("@upstash/qstash");
2401
2597
  var Client4 = class {
2402
2598
  client;
2403
2599
  constructor(clientConfig) {
@@ -2406,7 +2602,7 @@ var Client4 = class {
2406
2602
  "QStash token is required for Upstash Workflow!\n\nTo fix this:\n1. Get your token from the Upstash Console (https://console.upstash.com/qstash)\n2. Initialize the workflow client with:\n\n const client = new Client({\n token: '<YOUR_QSTASH_TOKEN>'\n });"
2407
2603
  );
2408
2604
  }
2409
- this.client = new import_qstash7.Client(clientConfig);
2605
+ this.client = new import_qstash11.Client(clientConfig);
2410
2606
  }
2411
2607
  /**
2412
2608
  * Cancel an ongoing workflow
@@ -2567,9 +2763,16 @@ var Client4 = class {
2567
2763
  initialPayload: body,
2568
2764
  steps: [],
2569
2765
  url,
2570
- workflowRunId: finalWorkflowRunId
2766
+ workflowRunId: finalWorkflowRunId,
2767
+ retries,
2768
+ telemetry: void 0
2769
+ // can't know workflow telemetry here
2770
+ });
2771
+ const result = await triggerFirstInvocation({
2772
+ workflowContext: context,
2773
+ telemetry: void 0
2774
+ // can't know workflow telemetry here
2571
2775
  });
2572
- const result = await triggerFirstInvocation(context, retries ?? DEFAULT_RETRIES);
2573
2776
  if (result.isOk()) {
2574
2777
  return { workflowRunId: finalWorkflowRunId };
2575
2778
  } else {
package/index.mjs CHANGED
@@ -1,5 +1,4 @@
1
1
  import {
2
- DEFAULT_RETRIES,
3
2
  StepTypes,
4
3
  WorkflowAbort,
5
4
  WorkflowContext,
@@ -10,7 +9,7 @@ import {
10
9
  makeNotifyRequest,
11
10
  serve,
12
11
  triggerFirstInvocation
13
- } from "./chunk-Z7WS5XIR.mjs";
12
+ } from "./chunk-ETDFMXER.mjs";
14
13
 
15
14
  // src/client/index.ts
16
15
  import { Client as QStashClient } from "@upstash/qstash";
@@ -183,9 +182,16 @@ var Client = class {
183
182
  initialPayload: body,
184
183
  steps: [],
185
184
  url,
186
- workflowRunId: finalWorkflowRunId
185
+ workflowRunId: finalWorkflowRunId,
186
+ retries,
187
+ telemetry: void 0
188
+ // can't know workflow telemetry here
189
+ });
190
+ const result = await triggerFirstInvocation({
191
+ workflowContext: context,
192
+ telemetry: void 0
193
+ // can't know workflow telemetry here
187
194
  });
188
- const result = await triggerFirstInvocation(context, retries ?? DEFAULT_RETRIES);
189
195
  if (result.isOk()) {
190
196
  return { workflowRunId: finalWorkflowRunId };
191
197
  } else {
package/nextjs.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { NextApiHandler } from 'next';
2
- import { R as RouteFunction, j as PublicServeOptions } from './types-APRap-aV.mjs';
2
+ import { R as RouteFunction, j as PublicServeOptions } from './types-Bt4-paRy.mjs';
3
3
  import '@upstash/qstash';
4
4
 
5
5
  /**
package/nextjs.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { NextApiHandler } from 'next';
2
- import { R as RouteFunction, j as PublicServeOptions } from './types-APRap-aV.js';
2
+ import { R as RouteFunction, j as PublicServeOptions } from './types-Bt4-paRy.js';
3
3
  import '@upstash/qstash';
4
4
 
5
5
  /**