@upstash/workflow 1.1.0 → 1.1.1

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.
Files changed (50) hide show
  1. package/astro.d.mts +2 -2
  2. package/astro.d.ts +2 -2
  3. package/astro.js +28 -2
  4. package/astro.mjs +1 -1
  5. package/{chunk-C5HFGF7Q.mjs → chunk-QRCGBBFJ.mjs} +28 -2
  6. package/cloudflare.d.mts +2 -2
  7. package/cloudflare.d.ts +2 -2
  8. package/cloudflare.js +28 -2
  9. package/cloudflare.mjs +1 -1
  10. package/express.d.mts +2 -2
  11. package/express.d.ts +2 -2
  12. package/express.js +28 -2
  13. package/express.mjs +1 -1
  14. package/h3.d.mts +2 -2
  15. package/h3.d.ts +2 -2
  16. package/h3.js +32 -6
  17. package/h3.mjs +5 -5
  18. package/hono.d.mts +2 -2
  19. package/hono.d.ts +2 -2
  20. package/hono.js +28 -2
  21. package/hono.mjs +1 -1
  22. package/index.d.mts +3 -3
  23. package/index.d.ts +3 -3
  24. package/index.js +31 -3
  25. package/index.mjs +4 -2
  26. package/nextjs.d.mts +2 -2
  27. package/nextjs.d.ts +2 -2
  28. package/nextjs.js +28 -2
  29. package/nextjs.mjs +1 -1
  30. package/package.json +1 -1
  31. package/react-router.d.mts +38 -0
  32. package/react-router.d.ts +38 -0
  33. package/react-router.js +3861 -0
  34. package/react-router.mjs +45 -0
  35. package/{serve-many-qnfynN1x.d.ts → serve-many-BP-8Ytbc.d.ts} +1 -1
  36. package/{serve-many-DhB8-zPD.d.mts → serve-many-BsycEL_d.d.mts} +1 -1
  37. package/solidjs.d.mts +1 -1
  38. package/solidjs.d.ts +1 -1
  39. package/solidjs.js +28 -2
  40. package/solidjs.mjs +1 -1
  41. package/svelte.d.mts +2 -2
  42. package/svelte.d.ts +2 -2
  43. package/svelte.js +28 -2
  44. package/svelte.mjs +1 -1
  45. package/tanstack.d.mts +2 -2
  46. package/tanstack.d.ts +2 -2
  47. package/tanstack.js +28 -2
  48. package/tanstack.mjs +1 -1
  49. package/{types-pEje3VEB.d.ts → types-B90SJYZV.d.mts} +9 -2
  50. package/{types-pEje3VEB.d.mts → types-B90SJYZV.d.ts} +9 -2
package/h3.js CHANGED
@@ -208,8 +208,7 @@ function assertMethod(event, expected, allowHead) {
208
208
  });
209
209
  }
210
210
  }
211
- var RawBodySymbol = Symbol.for("h3RawBody");
212
- var ParsedBodySymbol = Symbol.for("h3ParsedBody");
211
+ var RawBodySymbol = /* @__PURE__ */ Symbol.for("h3RawBody");
213
212
  var PayloadMethods$1 = ["PATCH", "POST", "PUT", "DELETE"];
214
213
  function readRawBody(event, encoding = "utf8") {
215
214
  assertMethod(event, PayloadMethods$1);
@@ -259,7 +258,9 @@ function readRawBody(event, encoding = "utf8") {
259
258
  });
260
259
  return encoding ? promise2.then((buff) => buff.toString(encoding)) : promise2;
261
260
  }
262
- if (!Number.parseInt(event.node.req.headers["content-length"] || "") && !String(event.node.req.headers["transfer-encoding"] ?? "").split(",").map((e) => e.trim()).filter(Boolean).includes("chunked")) {
261
+ if (!Number.parseInt(event.node.req.headers["content-length"] || "") && !/\bchunked\b/i.test(
262
+ String(event.node.req.headers["transfer-encoding"] ?? "")
263
+ )) {
263
264
  return Promise.resolve(void 0);
264
265
  }
265
266
  const promise = event.node.req[RawBodySymbol] = new Promise(
@@ -293,7 +294,6 @@ function sanitizeStatusCode(statusCode, defaultStatusCode = 200) {
293
294
  }
294
295
  return statusCode;
295
296
  }
296
- var getSessionPromise = Symbol("getSession");
297
297
  function defineEventHandler(handler) {
298
298
  if (typeof handler === "function") {
299
299
  handler.__is_handler__ = true;
@@ -495,6 +495,7 @@ var getSteps = async (requester, workflowRunId, messageId, dispatchDebug) => {
495
495
  var WORKFLOW_ID_HEADER = "Upstash-Workflow-RunId";
496
496
  var WORKFLOW_INIT_HEADER = "Upstash-Workflow-Init";
497
497
  var WORKFLOW_URL_HEADER = "Upstash-Workflow-Url";
498
+ var WORKFLOW_CREATED_AT_HEADER = "Upstash-Workflow-CreatedAt";
498
499
  var WORKFLOW_FAILURE_HEADER = "Upstash-Workflow-Is-Failure";
499
500
  var WORKFLOW_FAILURE_CALLBACK_HEADER = "Upstash-Workflow-Failure-Callback";
500
501
  var WORKFLOW_FEATURE_HEADER = "Upstash-Feature-Set";
@@ -1825,13 +1826,22 @@ var LazyInvokeStep = class extends BaseLazyStep {
1825
1826
  Object.entries(invokerHeaders).map((pairs) => [pairs[0], [pairs[1]]])
1826
1827
  ),
1827
1828
  workflowRunId: context.workflowRunId,
1829
+ workflowRunCreatedAt: context.workflowRunCreatedAt,
1828
1830
  workflowUrl: context.url,
1829
1831
  step
1830
1832
  };
1831
1833
  return JSON.stringify(request);
1832
1834
  }
1833
1835
  getHeaders({ context, telemetry: telemetry2, invokeCount }) {
1834
- const { workflow, headers = {}, workflowRunId, retries, retryDelay, flowControl } = this.params;
1836
+ const {
1837
+ workflow,
1838
+ headers = {},
1839
+ workflowRunId,
1840
+ retries,
1841
+ retryDelay,
1842
+ flowControl,
1843
+ label
1844
+ } = this.params;
1835
1845
  const newUrl = context.url.replace(/[^/]+$/, this.workflowId);
1836
1846
  const { headers: triggerHeaders, contentType } = getHeaders({
1837
1847
  initHeaderValue: "true",
@@ -1849,6 +1859,10 @@ var LazyInvokeStep = class extends BaseLazyStep {
1849
1859
  userHeaders: new Headers(headers)
1850
1860
  });
1851
1861
  triggerHeaders["Upstash-Workflow-Invoke"] = "true";
1862
+ if (label) {
1863
+ triggerHeaders[WORKFLOW_LABEL_HEADER] = label;
1864
+ triggerHeaders[`upstash-forward-${WORKFLOW_LABEL_HEADER}`] = label;
1865
+ }
1852
1866
  return { headers: triggerHeaders, contentType };
1853
1867
  }
1854
1868
  async submitStep({ context, body, headers }) {
@@ -2906,6 +2920,10 @@ var WorkflowContext = class {
2906
2920
  * Run id of the workflow
2907
2921
  */
2908
2922
  workflowRunId;
2923
+ /**
2924
+ * Creation time of the workflow run
2925
+ */
2926
+ workflowRunCreatedAt;
2909
2927
  /**
2910
2928
  * URL of the workflow
2911
2929
  *
@@ -2997,6 +3015,7 @@ var WorkflowContext = class {
2997
3015
  constructor({
2998
3016
  qstashClient,
2999
3017
  workflowRunId,
3018
+ workflowRunCreatedAt,
3000
3019
  headers,
3001
3020
  steps,
3002
3021
  url,
@@ -3009,6 +3028,7 @@ var WorkflowContext = class {
3009
3028
  }) {
3010
3029
  this.qstashClient = qstashClient;
3011
3030
  this.workflowRunId = workflowRunId;
3031
+ this.workflowRunCreatedAt = workflowRunCreatedAt;
3012
3032
  this.steps = steps;
3013
3033
  this.url = url;
3014
3034
  this.headers = headers;
@@ -3265,6 +3285,7 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
3265
3285
  token: "disabled-client"
3266
3286
  }),
3267
3287
  workflowRunId: context.workflowRunId,
3288
+ workflowRunCreatedAt: context.workflowRunCreatedAt,
3268
3289
  headers: context.headers,
3269
3290
  steps: [],
3270
3291
  url: context.url,
@@ -3466,7 +3487,9 @@ var handleFailure = async ({
3466
3487
  return ok({ result: "failure-function-undefined" });
3467
3488
  }
3468
3489
  try {
3469
- const { status, header, body, url, sourceBody, workflowRunId } = JSON.parse(requestPayload);
3490
+ const { status, header, body, url, sourceBody, workflowRunId, workflowCreatedAt } = JSON.parse(
3491
+ requestPayload
3492
+ );
3470
3493
  const decodedBody = body ? decodeBase64(body) : "{}";
3471
3494
  let errorMessage = "";
3472
3495
  let failStack = "";
@@ -3495,6 +3518,7 @@ var handleFailure = async ({
3495
3518
  telemetry: void 0,
3496
3519
  // not going to make requests in authentication check
3497
3520
  label: userHeaders.get(WORKFLOW_LABEL_HEADER) ?? void 0,
3521
+ workflowRunCreatedAt: workflowCreatedAt,
3498
3522
  middlewareManager: void 0
3499
3523
  });
3500
3524
  const authCheck = await DisabledWorkflowContext.tryAuthentication(
@@ -3972,6 +3996,7 @@ var serveBase = (routeFunction, telemetry2, options, internalOptions) => {
3972
3996
  }
3973
3997
  const invokeCount = Number(request.headers.get(WORKFLOW_INVOKE_COUNT_HEADER) ?? "0");
3974
3998
  const label = request.headers.get(WORKFLOW_LABEL_HEADER) ?? void 0;
3999
+ const workflowRunCreatedAt = request.headers.get(WORKFLOW_CREATED_AT_HEADER);
3975
4000
  const workflowContext = new WorkflowContext({
3976
4001
  qstashClient: regionalClient,
3977
4002
  workflowRunId,
@@ -3983,6 +4008,7 @@ var serveBase = (routeFunction, telemetry2, options, internalOptions) => {
3983
4008
  telemetry: telemetry2,
3984
4009
  invokeCount,
3985
4010
  label,
4011
+ workflowRunCreatedAt: Number(workflowRunCreatedAt),
3986
4012
  middlewareManager
3987
4013
  });
3988
4014
  const authCheck = await DisabledWorkflowContext.tryAuthentication(
package/h3.mjs CHANGED
@@ -2,7 +2,7 @@ import {
2
2
  SDK_TELEMETRY,
3
3
  serveBase,
4
4
  serveManyBase
5
- } from "./chunk-C5HFGF7Q.mjs";
5
+ } from "./chunk-QRCGBBFJ.mjs";
6
6
 
7
7
  // node_modules/defu/dist/defu.mjs
8
8
  function isPlainObject(value) {
@@ -186,8 +186,7 @@ function assertMethod(event, expected, allowHead) {
186
186
  });
187
187
  }
188
188
  }
189
- var RawBodySymbol = Symbol.for("h3RawBody");
190
- var ParsedBodySymbol = Symbol.for("h3ParsedBody");
189
+ var RawBodySymbol = /* @__PURE__ */ Symbol.for("h3RawBody");
191
190
  var PayloadMethods$1 = ["PATCH", "POST", "PUT", "DELETE"];
192
191
  function readRawBody(event, encoding = "utf8") {
193
192
  assertMethod(event, PayloadMethods$1);
@@ -237,7 +236,9 @@ function readRawBody(event, encoding = "utf8") {
237
236
  });
238
237
  return encoding ? promise2.then((buff) => buff.toString(encoding)) : promise2;
239
238
  }
240
- if (!Number.parseInt(event.node.req.headers["content-length"] || "") && !String(event.node.req.headers["transfer-encoding"] ?? "").split(",").map((e) => e.trim()).filter(Boolean).includes("chunked")) {
239
+ if (!Number.parseInt(event.node.req.headers["content-length"] || "") && !/\bchunked\b/i.test(
240
+ String(event.node.req.headers["transfer-encoding"] ?? "")
241
+ )) {
241
242
  return Promise.resolve(void 0);
242
243
  }
243
244
  const promise = event.node.req[RawBodySymbol] = new Promise(
@@ -271,7 +272,6 @@ function sanitizeStatusCode(statusCode, defaultStatusCode = 200) {
271
272
  }
272
273
  return statusCode;
273
274
  }
274
- var getSessionPromise = Symbol("getSession");
275
275
  function defineEventHandler(handler) {
276
276
  if (typeof handler === "function") {
277
277
  handler.__is_handler__ = true;
package/hono.d.mts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { Context } from 'hono';
2
- import { c as RouteFunction, d as WorkflowServeOptions, x as InvokableWorkflow } from './types-pEje3VEB.mjs';
2
+ import { c as RouteFunction, d as WorkflowServeOptions, I as InvokableWorkflow } from './types-B90SJYZV.mjs';
3
3
  import { Variables } from 'hono/types';
4
- import { s as serveManyBase } from './serve-many-DhB8-zPD.mjs';
4
+ import { s as serveManyBase } from './serve-many-BsycEL_d.mjs';
5
5
  import '@upstash/qstash';
6
6
  import 'zod';
7
7
 
package/hono.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { Context } from 'hono';
2
- import { c as RouteFunction, d as WorkflowServeOptions, x as InvokableWorkflow } from './types-pEje3VEB.js';
2
+ import { c as RouteFunction, d as WorkflowServeOptions, I as InvokableWorkflow } from './types-B90SJYZV.js';
3
3
  import { Variables } from 'hono/types';
4
- import { s as serveManyBase } from './serve-many-qnfynN1x.js';
4
+ import { s as serveManyBase } from './serve-many-BP-8Ytbc.js';
5
5
  import '@upstash/qstash';
6
6
  import 'zod';
7
7
 
package/hono.js CHANGED
@@ -186,6 +186,7 @@ var getSteps = async (requester, workflowRunId, messageId, dispatchDebug) => {
186
186
  var WORKFLOW_ID_HEADER = "Upstash-Workflow-RunId";
187
187
  var WORKFLOW_INIT_HEADER = "Upstash-Workflow-Init";
188
188
  var WORKFLOW_URL_HEADER = "Upstash-Workflow-Url";
189
+ var WORKFLOW_CREATED_AT_HEADER = "Upstash-Workflow-CreatedAt";
189
190
  var WORKFLOW_FAILURE_HEADER = "Upstash-Workflow-Is-Failure";
190
191
  var WORKFLOW_FAILURE_CALLBACK_HEADER = "Upstash-Workflow-Failure-Callback";
191
192
  var WORKFLOW_FEATURE_HEADER = "Upstash-Feature-Set";
@@ -1516,13 +1517,22 @@ var LazyInvokeStep = class extends BaseLazyStep {
1516
1517
  Object.entries(invokerHeaders).map((pairs) => [pairs[0], [pairs[1]]])
1517
1518
  ),
1518
1519
  workflowRunId: context.workflowRunId,
1520
+ workflowRunCreatedAt: context.workflowRunCreatedAt,
1519
1521
  workflowUrl: context.url,
1520
1522
  step
1521
1523
  };
1522
1524
  return JSON.stringify(request);
1523
1525
  }
1524
1526
  getHeaders({ context, telemetry: telemetry2, invokeCount }) {
1525
- const { workflow, headers = {}, workflowRunId, retries, retryDelay, flowControl } = this.params;
1527
+ const {
1528
+ workflow,
1529
+ headers = {},
1530
+ workflowRunId,
1531
+ retries,
1532
+ retryDelay,
1533
+ flowControl,
1534
+ label
1535
+ } = this.params;
1526
1536
  const newUrl = context.url.replace(/[^/]+$/, this.workflowId);
1527
1537
  const { headers: triggerHeaders, contentType } = getHeaders({
1528
1538
  initHeaderValue: "true",
@@ -1540,6 +1550,10 @@ var LazyInvokeStep = class extends BaseLazyStep {
1540
1550
  userHeaders: new Headers(headers)
1541
1551
  });
1542
1552
  triggerHeaders["Upstash-Workflow-Invoke"] = "true";
1553
+ if (label) {
1554
+ triggerHeaders[WORKFLOW_LABEL_HEADER] = label;
1555
+ triggerHeaders[`upstash-forward-${WORKFLOW_LABEL_HEADER}`] = label;
1556
+ }
1543
1557
  return { headers: triggerHeaders, contentType };
1544
1558
  }
1545
1559
  async submitStep({ context, body, headers }) {
@@ -2597,6 +2611,10 @@ var WorkflowContext = class {
2597
2611
  * Run id of the workflow
2598
2612
  */
2599
2613
  workflowRunId;
2614
+ /**
2615
+ * Creation time of the workflow run
2616
+ */
2617
+ workflowRunCreatedAt;
2600
2618
  /**
2601
2619
  * URL of the workflow
2602
2620
  *
@@ -2688,6 +2706,7 @@ var WorkflowContext = class {
2688
2706
  constructor({
2689
2707
  qstashClient,
2690
2708
  workflowRunId,
2709
+ workflowRunCreatedAt,
2691
2710
  headers,
2692
2711
  steps,
2693
2712
  url,
@@ -2700,6 +2719,7 @@ var WorkflowContext = class {
2700
2719
  }) {
2701
2720
  this.qstashClient = qstashClient;
2702
2721
  this.workflowRunId = workflowRunId;
2722
+ this.workflowRunCreatedAt = workflowRunCreatedAt;
2703
2723
  this.steps = steps;
2704
2724
  this.url = url;
2705
2725
  this.headers = headers;
@@ -2956,6 +2976,7 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
2956
2976
  token: "disabled-client"
2957
2977
  }),
2958
2978
  workflowRunId: context.workflowRunId,
2979
+ workflowRunCreatedAt: context.workflowRunCreatedAt,
2959
2980
  headers: context.headers,
2960
2981
  steps: [],
2961
2982
  url: context.url,
@@ -3157,7 +3178,9 @@ var handleFailure = async ({
3157
3178
  return ok({ result: "failure-function-undefined" });
3158
3179
  }
3159
3180
  try {
3160
- const { status, header, body, url, sourceBody, workflowRunId } = JSON.parse(requestPayload);
3181
+ const { status, header, body, url, sourceBody, workflowRunId, workflowCreatedAt } = JSON.parse(
3182
+ requestPayload
3183
+ );
3161
3184
  const decodedBody = body ? decodeBase64(body) : "{}";
3162
3185
  let errorMessage = "";
3163
3186
  let failStack = "";
@@ -3186,6 +3209,7 @@ var handleFailure = async ({
3186
3209
  telemetry: void 0,
3187
3210
  // not going to make requests in authentication check
3188
3211
  label: userHeaders.get(WORKFLOW_LABEL_HEADER) ?? void 0,
3212
+ workflowRunCreatedAt: workflowCreatedAt,
3189
3213
  middlewareManager: void 0
3190
3214
  });
3191
3215
  const authCheck = await DisabledWorkflowContext.tryAuthentication(
@@ -3663,6 +3687,7 @@ var serveBase = (routeFunction, telemetry2, options, internalOptions) => {
3663
3687
  }
3664
3688
  const invokeCount = Number(request.headers.get(WORKFLOW_INVOKE_COUNT_HEADER) ?? "0");
3665
3689
  const label = request.headers.get(WORKFLOW_LABEL_HEADER) ?? void 0;
3690
+ const workflowRunCreatedAt = request.headers.get(WORKFLOW_CREATED_AT_HEADER);
3666
3691
  const workflowContext = new WorkflowContext({
3667
3692
  qstashClient: regionalClient,
3668
3693
  workflowRunId,
@@ -3674,6 +3699,7 @@ var serveBase = (routeFunction, telemetry2, options, internalOptions) => {
3674
3699
  telemetry: telemetry2,
3675
3700
  invokeCount,
3676
3701
  label,
3702
+ workflowRunCreatedAt: Number(workflowRunCreatedAt),
3677
3703
  middlewareManager
3678
3704
  });
3679
3705
  const authCheck = await DisabledWorkflowContext.tryAuthentication(
package/hono.mjs CHANGED
@@ -2,7 +2,7 @@ import {
2
2
  SDK_TELEMETRY,
3
3
  serveBase,
4
4
  serveManyBase
5
- } from "./chunk-C5HFGF7Q.mjs";
5
+ } from "./chunk-QRCGBBFJ.mjs";
6
6
 
7
7
  // platforms/hono.ts
8
8
  var telemetry = {
package/index.d.mts CHANGED
@@ -1,6 +1,6 @@
1
- import { S as StepType, R as RawStep, W as WorkflowMiddleware, a as WorkflowClient, b as WorkflowReceiver, c as RouteFunction, d as WorkflowServeOptions, T as Telemetry, N as NotifyResponse, e as Waiter } from './types-pEje3VEB.mjs';
2
- export { A as AsyncStepFunction, C as CallResponse, v as CallSettings, D as DetailedFinishCondition, t as Duration, E as ExclusiveValidationOptions, o as FailureFunctionPayload, F as FinishCondition, H as HeaderParams, x as InvokableWorkflow, w as InvokeStepResponse, I as InvokeWorkflowRequest, L as LazyInvokeStepParams, s as NotifyStepResponse, P as ParallelCallState, Q as QStashClientExtraConfig, p as RequiredExceptFields, l as Step, n as StepFunction, k as StepTypes, m as SyncStepFunction, u as WaitEventOptions, q as WaitRequest, r as WaitStepResponse, g as WorkflowAbort, j as WorkflowContext, f as WorkflowError, h as WorkflowNonRetryableError, i as WorkflowRetryAfterError } from './types-pEje3VEB.mjs';
3
- import { HTTPMethods, FlowControl, PublishRequest, Client as Client$1 } from '@upstash/qstash';
1
+ import { S as StepType, R as RawStep, W as WorkflowMiddleware, a as WorkflowClient, b as WorkflowReceiver, c as RouteFunction, d as WorkflowServeOptions, T as Telemetry, N as NotifyResponse, e as Waiter } from './types-B90SJYZV.mjs';
2
+ export { A as AsyncStepFunction, C as CallResponse, f as CallSettings, D as DetailedFinishCondition, g as Duration, E as ExclusiveValidationOptions, F as FailureFunctionPayload, h as FinishCondition, H as HeaderParams, I as InvokableWorkflow, i as InvokeStepResponse, j as InvokeWorkflowRequest, L as LazyInvokeStepParams, k as NotifyStepResponse, P as ParallelCallState, Q as QStashClientExtraConfig, l as RequiredExceptFields, m as Step, n as StepFunction, o as StepTypes, p as SyncStepFunction, q as WaitEventOptions, r as WaitRequest, s as WaitStepResponse, t as WorkflowAbort, u as WorkflowContext, v as WorkflowError, w as WorkflowNonRetryableError, x as WorkflowRetryAfterError } from './types-B90SJYZV.mjs';
3
+ import { FlowControl, PublishRequest, HTTPMethods, Client as Client$1 } from '@upstash/qstash';
4
4
  import 'zod';
5
5
 
6
6
  type BaseStepLog = {
package/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import { S as StepType, R as RawStep, W as WorkflowMiddleware, a as WorkflowClient, b as WorkflowReceiver, c as RouteFunction, d as WorkflowServeOptions, T as Telemetry, N as NotifyResponse, e as Waiter } from './types-pEje3VEB.js';
2
- export { A as AsyncStepFunction, C as CallResponse, v as CallSettings, D as DetailedFinishCondition, t as Duration, E as ExclusiveValidationOptions, o as FailureFunctionPayload, F as FinishCondition, H as HeaderParams, x as InvokableWorkflow, w as InvokeStepResponse, I as InvokeWorkflowRequest, L as LazyInvokeStepParams, s as NotifyStepResponse, P as ParallelCallState, Q as QStashClientExtraConfig, p as RequiredExceptFields, l as Step, n as StepFunction, k as StepTypes, m as SyncStepFunction, u as WaitEventOptions, q as WaitRequest, r as WaitStepResponse, g as WorkflowAbort, j as WorkflowContext, f as WorkflowError, h as WorkflowNonRetryableError, i as WorkflowRetryAfterError } from './types-pEje3VEB.js';
3
- import { HTTPMethods, FlowControl, PublishRequest, Client as Client$1 } from '@upstash/qstash';
1
+ import { S as StepType, R as RawStep, W as WorkflowMiddleware, a as WorkflowClient, b as WorkflowReceiver, c as RouteFunction, d as WorkflowServeOptions, T as Telemetry, N as NotifyResponse, e as Waiter } from './types-B90SJYZV.js';
2
+ export { A as AsyncStepFunction, C as CallResponse, f as CallSettings, D as DetailedFinishCondition, g as Duration, E as ExclusiveValidationOptions, F as FailureFunctionPayload, h as FinishCondition, H as HeaderParams, I as InvokableWorkflow, i as InvokeStepResponse, j as InvokeWorkflowRequest, L as LazyInvokeStepParams, k as NotifyStepResponse, P as ParallelCallState, Q as QStashClientExtraConfig, l as RequiredExceptFields, m as Step, n as StepFunction, o as StepTypes, p as SyncStepFunction, q as WaitEventOptions, r as WaitRequest, s as WaitStepResponse, t as WorkflowAbort, u as WorkflowContext, v as WorkflowError, w as WorkflowNonRetryableError, x as WorkflowRetryAfterError } from './types-B90SJYZV.js';
3
+ import { FlowControl, PublishRequest, HTTPMethods, Client as Client$1 } from '@upstash/qstash';
4
4
  import 'zod';
5
5
 
6
6
  type BaseStepLog = {
package/index.js CHANGED
@@ -200,6 +200,7 @@ var getSteps = async (requester, workflowRunId, messageId, dispatchDebug) => {
200
200
  var WORKFLOW_ID_HEADER = "Upstash-Workflow-RunId";
201
201
  var WORKFLOW_INIT_HEADER = "Upstash-Workflow-Init";
202
202
  var WORKFLOW_URL_HEADER = "Upstash-Workflow-Url";
203
+ var WORKFLOW_CREATED_AT_HEADER = "Upstash-Workflow-CreatedAt";
203
204
  var WORKFLOW_FAILURE_HEADER = "Upstash-Workflow-Is-Failure";
204
205
  var WORKFLOW_FAILURE_CALLBACK_HEADER = "Upstash-Workflow-Failure-Callback";
205
206
  var WORKFLOW_FEATURE_HEADER = "Upstash-Feature-Set";
@@ -1530,13 +1531,22 @@ var LazyInvokeStep = class extends BaseLazyStep {
1530
1531
  Object.entries(invokerHeaders).map((pairs) => [pairs[0], [pairs[1]]])
1531
1532
  ),
1532
1533
  workflowRunId: context.workflowRunId,
1534
+ workflowRunCreatedAt: context.workflowRunCreatedAt,
1533
1535
  workflowUrl: context.url,
1534
1536
  step
1535
1537
  };
1536
1538
  return JSON.stringify(request);
1537
1539
  }
1538
1540
  getHeaders({ context, telemetry, invokeCount }) {
1539
- const { workflow, headers = {}, workflowRunId, retries, retryDelay, flowControl } = this.params;
1541
+ const {
1542
+ workflow,
1543
+ headers = {},
1544
+ workflowRunId,
1545
+ retries,
1546
+ retryDelay,
1547
+ flowControl,
1548
+ label
1549
+ } = this.params;
1540
1550
  const newUrl = context.url.replace(/[^/]+$/, this.workflowId);
1541
1551
  const { headers: triggerHeaders, contentType } = getHeaders({
1542
1552
  initHeaderValue: "true",
@@ -1554,6 +1564,10 @@ var LazyInvokeStep = class extends BaseLazyStep {
1554
1564
  userHeaders: new Headers(headers)
1555
1565
  });
1556
1566
  triggerHeaders["Upstash-Workflow-Invoke"] = "true";
1567
+ if (label) {
1568
+ triggerHeaders[WORKFLOW_LABEL_HEADER] = label;
1569
+ triggerHeaders[`upstash-forward-${WORKFLOW_LABEL_HEADER}`] = label;
1570
+ }
1557
1571
  return { headers: triggerHeaders, contentType };
1558
1572
  }
1559
1573
  async submitStep({ context, body, headers }) {
@@ -2544,6 +2558,10 @@ var WorkflowContext = class {
2544
2558
  * Run id of the workflow
2545
2559
  */
2546
2560
  workflowRunId;
2561
+ /**
2562
+ * Creation time of the workflow run
2563
+ */
2564
+ workflowRunCreatedAt;
2547
2565
  /**
2548
2566
  * URL of the workflow
2549
2567
  *
@@ -2635,6 +2653,7 @@ var WorkflowContext = class {
2635
2653
  constructor({
2636
2654
  qstashClient,
2637
2655
  workflowRunId,
2656
+ workflowRunCreatedAt,
2638
2657
  headers,
2639
2658
  steps,
2640
2659
  url,
@@ -2647,6 +2666,7 @@ var WorkflowContext = class {
2647
2666
  }) {
2648
2667
  this.qstashClient = qstashClient;
2649
2668
  this.workflowRunId = workflowRunId;
2669
+ this.workflowRunCreatedAt = workflowRunCreatedAt;
2650
2670
  this.steps = steps;
2651
2671
  this.url = url;
2652
2672
  this.headers = headers;
@@ -2903,6 +2923,7 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
2903
2923
  token: "disabled-client"
2904
2924
  }),
2905
2925
  workflowRunId: context.workflowRunId,
2926
+ workflowRunCreatedAt: context.workflowRunCreatedAt,
2906
2927
  headers: context.headers,
2907
2928
  steps: [],
2908
2929
  url: context.url,
@@ -3104,7 +3125,9 @@ var handleFailure = async ({
3104
3125
  return ok({ result: "failure-function-undefined" });
3105
3126
  }
3106
3127
  try {
3107
- const { status, header, body, url, sourceBody, workflowRunId } = JSON.parse(requestPayload);
3128
+ const { status, header, body, url, sourceBody, workflowRunId, workflowCreatedAt } = JSON.parse(
3129
+ requestPayload
3130
+ );
3108
3131
  const decodedBody = body ? decodeBase64(body) : "{}";
3109
3132
  let errorMessage = "";
3110
3133
  let failStack = "";
@@ -3133,6 +3156,7 @@ var handleFailure = async ({
3133
3156
  telemetry: void 0,
3134
3157
  // not going to make requests in authentication check
3135
3158
  label: userHeaders.get(WORKFLOW_LABEL_HEADER) ?? void 0,
3159
+ workflowRunCreatedAt: workflowCreatedAt,
3136
3160
  middlewareManager: void 0
3137
3161
  });
3138
3162
  const authCheck = await DisabledWorkflowContext.tryAuthentication(
@@ -3610,6 +3634,7 @@ var serveBase = (routeFunction, telemetry, options, internalOptions) => {
3610
3634
  }
3611
3635
  const invokeCount = Number(request.headers.get(WORKFLOW_INVOKE_COUNT_HEADER) ?? "0");
3612
3636
  const label = request.headers.get(WORKFLOW_LABEL_HEADER) ?? void 0;
3637
+ const workflowRunCreatedAt = request.headers.get(WORKFLOW_CREATED_AT_HEADER);
3613
3638
  const workflowContext = new WorkflowContext({
3614
3639
  qstashClient: regionalClient,
3615
3640
  workflowRunId,
@@ -3621,6 +3646,7 @@ var serveBase = (routeFunction, telemetry, options, internalOptions) => {
3621
3646
  telemetry,
3622
3647
  invokeCount,
3623
3648
  label,
3649
+ workflowRunCreatedAt: Number(workflowRunCreatedAt),
3624
3650
  middlewareManager
3625
3651
  });
3626
3652
  const authCheck = await DisabledWorkflowContext.tryAuthentication(
@@ -3998,7 +4024,9 @@ var Client4 = class {
3998
4024
  url: option.url,
3999
4025
  workflowRunId: finalWorkflowRunId,
4000
4026
  telemetry: option.disableTelemetry ? void 0 : { sdk: SDK_TELEMETRY },
4001
- label: option.label
4027
+ label: option.label,
4028
+ workflowRunCreatedAt: Date.now()
4029
+ // pass a timestamp (server will override it)
4002
4030
  });
4003
4031
  return {
4004
4032
  workflowContext: context,
package/index.mjs CHANGED
@@ -15,7 +15,7 @@ import {
15
15
  prepareFlowControl,
16
16
  serve,
17
17
  triggerFirstInvocation
18
- } from "./chunk-C5HFGF7Q.mjs";
18
+ } from "./chunk-QRCGBBFJ.mjs";
19
19
 
20
20
  // src/client/index.ts
21
21
  import { Client as QStashClient } from "@upstash/qstash";
@@ -265,7 +265,9 @@ var Client = class {
265
265
  url: option.url,
266
266
  workflowRunId: finalWorkflowRunId,
267
267
  telemetry: option.disableTelemetry ? void 0 : { sdk: SDK_TELEMETRY },
268
- label: option.label
268
+ label: option.label,
269
+ workflowRunCreatedAt: Date.now()
270
+ // pass a timestamp (server will override it)
269
271
  });
270
272
  return {
271
273
  workflowContext: context,
package/nextjs.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { NextApiHandler, NextApiRequest, NextApiResponse } from 'next';
2
- import { c as RouteFunction, d as WorkflowServeOptions, x as InvokableWorkflow } from './types-pEje3VEB.mjs';
3
- import { s as serveManyBase } from './serve-many-DhB8-zPD.mjs';
2
+ import { c as RouteFunction, d as WorkflowServeOptions, I as InvokableWorkflow } from './types-B90SJYZV.mjs';
3
+ import { s as serveManyBase } from './serve-many-BsycEL_d.mjs';
4
4
  import '@upstash/qstash';
5
5
  import 'zod';
6
6
 
package/nextjs.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { NextApiHandler, NextApiRequest, NextApiResponse } from 'next';
2
- import { c as RouteFunction, d as WorkflowServeOptions, x as InvokableWorkflow } from './types-pEje3VEB.js';
3
- import { s as serveManyBase } from './serve-many-qnfynN1x.js';
2
+ import { c as RouteFunction, d as WorkflowServeOptions, I as InvokableWorkflow } from './types-B90SJYZV.js';
3
+ import { s as serveManyBase } from './serve-many-BP-8Ytbc.js';
4
4
  import '@upstash/qstash';
5
5
  import 'zod';
6
6
 
package/nextjs.js CHANGED
@@ -189,6 +189,7 @@ var getSteps = async (requester, workflowRunId, messageId, dispatchDebug) => {
189
189
  var WORKFLOW_ID_HEADER = "Upstash-Workflow-RunId";
190
190
  var WORKFLOW_INIT_HEADER = "Upstash-Workflow-Init";
191
191
  var WORKFLOW_URL_HEADER = "Upstash-Workflow-Url";
192
+ var WORKFLOW_CREATED_AT_HEADER = "Upstash-Workflow-CreatedAt";
192
193
  var WORKFLOW_FAILURE_HEADER = "Upstash-Workflow-Is-Failure";
193
194
  var WORKFLOW_FAILURE_CALLBACK_HEADER = "Upstash-Workflow-Failure-Callback";
194
195
  var WORKFLOW_FEATURE_HEADER = "Upstash-Feature-Set";
@@ -1519,13 +1520,22 @@ var LazyInvokeStep = class extends BaseLazyStep {
1519
1520
  Object.entries(invokerHeaders).map((pairs) => [pairs[0], [pairs[1]]])
1520
1521
  ),
1521
1522
  workflowRunId: context.workflowRunId,
1523
+ workflowRunCreatedAt: context.workflowRunCreatedAt,
1522
1524
  workflowUrl: context.url,
1523
1525
  step
1524
1526
  };
1525
1527
  return JSON.stringify(request);
1526
1528
  }
1527
1529
  getHeaders({ context, telemetry, invokeCount }) {
1528
- const { workflow, headers = {}, workflowRunId, retries, retryDelay, flowControl } = this.params;
1530
+ const {
1531
+ workflow,
1532
+ headers = {},
1533
+ workflowRunId,
1534
+ retries,
1535
+ retryDelay,
1536
+ flowControl,
1537
+ label
1538
+ } = this.params;
1529
1539
  const newUrl = context.url.replace(/[^/]+$/, this.workflowId);
1530
1540
  const { headers: triggerHeaders, contentType } = getHeaders({
1531
1541
  initHeaderValue: "true",
@@ -1543,6 +1553,10 @@ var LazyInvokeStep = class extends BaseLazyStep {
1543
1553
  userHeaders: new Headers(headers)
1544
1554
  });
1545
1555
  triggerHeaders["Upstash-Workflow-Invoke"] = "true";
1556
+ if (label) {
1557
+ triggerHeaders[WORKFLOW_LABEL_HEADER] = label;
1558
+ triggerHeaders[`upstash-forward-${WORKFLOW_LABEL_HEADER}`] = label;
1559
+ }
1546
1560
  return { headers: triggerHeaders, contentType };
1547
1561
  }
1548
1562
  async submitStep({ context, body, headers }) {
@@ -2600,6 +2614,10 @@ var WorkflowContext = class {
2600
2614
  * Run id of the workflow
2601
2615
  */
2602
2616
  workflowRunId;
2617
+ /**
2618
+ * Creation time of the workflow run
2619
+ */
2620
+ workflowRunCreatedAt;
2603
2621
  /**
2604
2622
  * URL of the workflow
2605
2623
  *
@@ -2691,6 +2709,7 @@ var WorkflowContext = class {
2691
2709
  constructor({
2692
2710
  qstashClient,
2693
2711
  workflowRunId,
2712
+ workflowRunCreatedAt,
2694
2713
  headers,
2695
2714
  steps,
2696
2715
  url,
@@ -2703,6 +2722,7 @@ var WorkflowContext = class {
2703
2722
  }) {
2704
2723
  this.qstashClient = qstashClient;
2705
2724
  this.workflowRunId = workflowRunId;
2725
+ this.workflowRunCreatedAt = workflowRunCreatedAt;
2706
2726
  this.steps = steps;
2707
2727
  this.url = url;
2708
2728
  this.headers = headers;
@@ -2959,6 +2979,7 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
2959
2979
  token: "disabled-client"
2960
2980
  }),
2961
2981
  workflowRunId: context.workflowRunId,
2982
+ workflowRunCreatedAt: context.workflowRunCreatedAt,
2962
2983
  headers: context.headers,
2963
2984
  steps: [],
2964
2985
  url: context.url,
@@ -3160,7 +3181,9 @@ var handleFailure = async ({
3160
3181
  return ok({ result: "failure-function-undefined" });
3161
3182
  }
3162
3183
  try {
3163
- const { status, header, body, url, sourceBody, workflowRunId } = JSON.parse(requestPayload);
3184
+ const { status, header, body, url, sourceBody, workflowRunId, workflowCreatedAt } = JSON.parse(
3185
+ requestPayload
3186
+ );
3164
3187
  const decodedBody = body ? decodeBase64(body) : "{}";
3165
3188
  let errorMessage = "";
3166
3189
  let failStack = "";
@@ -3189,6 +3212,7 @@ var handleFailure = async ({
3189
3212
  telemetry: void 0,
3190
3213
  // not going to make requests in authentication check
3191
3214
  label: userHeaders.get(WORKFLOW_LABEL_HEADER) ?? void 0,
3215
+ workflowRunCreatedAt: workflowCreatedAt,
3192
3216
  middlewareManager: void 0
3193
3217
  });
3194
3218
  const authCheck = await DisabledWorkflowContext.tryAuthentication(
@@ -3666,6 +3690,7 @@ var serveBase = (routeFunction, telemetry, options, internalOptions) => {
3666
3690
  }
3667
3691
  const invokeCount = Number(request.headers.get(WORKFLOW_INVOKE_COUNT_HEADER) ?? "0");
3668
3692
  const label = request.headers.get(WORKFLOW_LABEL_HEADER) ?? void 0;
3693
+ const workflowRunCreatedAt = request.headers.get(WORKFLOW_CREATED_AT_HEADER);
3669
3694
  const workflowContext = new WorkflowContext({
3670
3695
  qstashClient: regionalClient,
3671
3696
  workflowRunId,
@@ -3677,6 +3702,7 @@ var serveBase = (routeFunction, telemetry, options, internalOptions) => {
3677
3702
  telemetry,
3678
3703
  invokeCount,
3679
3704
  label,
3705
+ workflowRunCreatedAt: Number(workflowRunCreatedAt),
3680
3706
  middlewareManager
3681
3707
  });
3682
3708
  const authCheck = await DisabledWorkflowContext.tryAuthentication(
package/nextjs.mjs CHANGED
@@ -2,7 +2,7 @@ import {
2
2
  SDK_TELEMETRY,
3
3
  serveBase,
4
4
  serveManyBase
5
- } from "./chunk-C5HFGF7Q.mjs";
5
+ } from "./chunk-QRCGBBFJ.mjs";
6
6
 
7
7
  // platforms/nextjs.ts
8
8
  var appTelemetry = {
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@upstash/workflow","version":"v1.1.0","description":"Durable, Reliable and Performant Serverless Functions","main":"./index.js","module":"./index.mjs","types":"./index.d.ts","files":["./*"],"exports":{".":{"import":"./index.mjs","require":"./index.js"},"./dist/nextjs":{"import":"./nextjs.mjs","require":"./nextjs.js"},"./nextjs":{"import":"./nextjs.mjs","require":"./nextjs.js"},"./h3":{"import":"./h3.mjs","require":"./h3.js"},"./svelte":{"import":"./svelte.mjs","require":"./svelte.js"},"./solidjs":{"import":"./solidjs.mjs","require":"./solidjs.js"},"./workflow":{"import":"./workflow.mjs","require":"./workflow.js"},"./hono":{"import":"./hono.mjs","require":"./hono.js"},"./cloudflare":{"import":"./cloudflare.mjs","require":"./cloudflare.js"},"./astro":{"import":"./astro.mjs","require":"./astro.js"},"./express":{"import":"./express.mjs","require":"./express.js"},"./tanstack":{"import":"./tanstack.mjs","require":"./tanstack.js"}},"scripts":{"build":"tsup && cp README.md ./dist/ && cp package.json ./dist/ && cp LICENSE ./dist/","test":"bun test src","fmt":"prettier --write .","lint":"tsc && eslint \"{src,platforms}/**/*.{js,ts,tsx}\" --quiet --fix","check-exports":"bun run build && cd dist && attw -P"},"repository":{"type":"git","url":"git+https://github.com/upstash/workflow-ts.git"},"keywords":["upstash","qstash","workflow","serverless"],"author":"Cahid Arda Oz","license":"MIT","bugs":{"url":"https://github.com/upstash/workflow-ts/issues"},"homepage":"https://github.com/upstash/workflow-ts#readme","devDependencies":{"@commitlint/cli":"^19.5.0","@commitlint/config-conventional":"^19.5.0","@eslint/js":"^9.11.1","@solidjs/start":"^1.0.8","@sveltejs/kit":"^2.6.1","@types/bun":"^1.1.10","@types/express":"^5.0.3","astro":"^4.16.7","eslint":"^9.11.1","eslint-plugin-unicorn":"^55.0.0","express":"^5.1.0","globals":"^15.10.0","h3":"^1.12.0","hono":"^4.6.20","husky":"^9.1.6","next":"^14.2.14","prettier":"3.3.3","tsup":"^8.3.0","typescript":"^5.7.2","typescript-eslint":"^8.18.0"},"dependencies":{"@upstash/qstash":"2.9.0-rc"},"directories":{"example":"examples"},"peerDependencies":{"zod":"^3.25.0 || ^4.0.0"}}
1
+ {"name":"@upstash/workflow","version":"v1.1.1","description":"Durable, Reliable and Performant Serverless Functions","main":"./index.js","module":"./index.mjs","types":"./index.d.ts","files":["./*"],"exports":{".":{"import":"./index.mjs","require":"./index.js"},"./dist/nextjs":{"import":"./nextjs.mjs","require":"./nextjs.js"},"./nextjs":{"import":"./nextjs.mjs","require":"./nextjs.js"},"./h3":{"import":"./h3.mjs","require":"./h3.js"},"./svelte":{"import":"./svelte.mjs","require":"./svelte.js"},"./solidjs":{"import":"./solidjs.mjs","require":"./solidjs.js"},"./workflow":{"import":"./workflow.mjs","require":"./workflow.js"},"./hono":{"import":"./hono.mjs","require":"./hono.js"},"./cloudflare":{"import":"./cloudflare.mjs","require":"./cloudflare.js"},"./astro":{"import":"./astro.mjs","require":"./astro.js"},"./express":{"import":"./express.mjs","require":"./express.js"},"./tanstack":{"import":"./tanstack.mjs","require":"./tanstack.js"},"./react-router":{"import":"./react-router.mjs","require":"./react-router.js"}},"scripts":{"build":"tsup && cp README.md ./dist/ && cp package.json ./dist/ && cp LICENSE ./dist/","test":"bun test src","fmt":"prettier --write .","lint":"tsc && eslint \"{src,platforms}/**/*.{js,ts,tsx}\" --quiet --fix","check-exports":"bun run build && cd dist && attw -P"},"repository":{"type":"git","url":"git@github.com:upstash/workflow-js.git"},"keywords":["upstash","qstash","workflow","serverless"],"author":"Cahid Arda Oz","license":"MIT","bugs":{"url":"https://github.com/upstash/workflow-ts/issues"},"homepage":"https://github.com/upstash/workflow-ts#readme","devDependencies":{"@commitlint/cli":"^19.5.0","@commitlint/config-conventional":"^19.5.0","@eslint/js":"^9.11.1","@solidjs/start":"^1.0.8","@sveltejs/kit":"^2.6.1","@types/bun":"^1.1.10","@types/express":"^5.0.6","astro":"^4.16.7","eslint":"^9.11.1","eslint-plugin-unicorn":"^55.0.0","express":"^5.1.0","globals":"^15.10.0","h3":"^1.12.0","hono":"^4.6.20","husky":"^9.1.6","next":"^14.2.14","prettier":"3.3.3","tsup":"^8.3.0","typescript":"^5.7.2","typescript-eslint":"^8.18.0"},"dependencies":{"@upstash/qstash":"2.9.0-rc"},"directories":{"example":"examples"},"peerDependencies":{"zod":"^3.25.0 || ^4.0.0"}}