@upstash/workflow 0.2.14 → 0.2.15

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  import { APIContext, APIRoute } from 'astro';
2
- import { e as WorkflowContext, k as PublicServeOptions, t as InvokableWorkflow } from './types-C1WIgVLA.mjs';
3
- import { s as serveManyBase } from './serve-many-BF71QZHQ.mjs';
2
+ import { g as WorkflowContext, n as PublicServeOptions, w as InvokableWorkflow } from './types-Dd-3bPoU.mjs';
3
+ import { s as serveManyBase } from './serve-many-AFwJPR3S.mjs';
4
4
  import '@upstash/qstash';
5
5
  import 'zod';
6
6
  import 'ai';
package/astro.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { APIContext, APIRoute } from 'astro';
2
- import { e as WorkflowContext, k as PublicServeOptions, t as InvokableWorkflow } from './types-C1WIgVLA.js';
3
- import { s as serveManyBase } from './serve-many-BMlN2PAB.js';
2
+ import { g as WorkflowContext, n as PublicServeOptions, w as InvokableWorkflow } from './types-Dd-3bPoU.js';
3
+ import { s as serveManyBase } from './serve-many-AaKSQyi7.js';
4
4
  import '@upstash/qstash';
5
5
  import 'zod';
6
6
  import 'ai';
package/astro.js CHANGED
@@ -91,7 +91,7 @@ var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
91
91
  var DEFAULT_CONTENT_TYPE = "application/json";
92
92
  var NO_CONCURRENCY = 1;
93
93
  var DEFAULT_RETRIES = 3;
94
- var VERSION = "v0.2.14";
94
+ var VERSION = "v0.2.15";
95
95
  var SDK_TELEMETRY = `@upstash/workflow@${VERSION}`;
96
96
  var TELEMETRY_HEADER_SDK = "Upstash-Telemetry-Sdk";
97
97
  var TELEMETRY_HEADER_FRAMEWORK = "Upstash-Telemetry-Framework";
@@ -129,6 +129,16 @@ var WorkflowAbort = class extends Error {
129
129
  this.cancelWorkflow = cancelWorkflow;
130
130
  }
131
131
  };
132
+ var WorkflowNonRetryableError = class extends WorkflowAbort {
133
+ /**
134
+ * @param message error message to be displayed
135
+ */
136
+ constructor(message) {
137
+ super("fail", void 0, false);
138
+ this.name = "WorkflowNonRetryableError";
139
+ if (message) this.message = message;
140
+ }
141
+ };
132
142
  var formatWorkflowError = (error) => {
133
143
  return error instanceof Error ? {
134
144
  error: error.name,
@@ -693,6 +703,8 @@ var triggerRouteFunction = async ({
693
703
  return ok("workflow-was-finished");
694
704
  } else if (!(error_ instanceof WorkflowAbort)) {
695
705
  return err(error_);
706
+ } else if (error_ instanceof WorkflowNonRetryableError) {
707
+ return ok(error_);
696
708
  } else if (error_.cancelWorkflow) {
697
709
  await onCancel();
698
710
  return ok("workflow-finished");
@@ -854,7 +866,7 @@ ${atob(callbackMessage.body ?? "")}`
854
866
  var getTelemetryHeaders = (telemetry2) => {
855
867
  return {
856
868
  [TELEMETRY_HEADER_SDK]: telemetry2.sdk,
857
- [TELEMETRY_HEADER_FRAMEWORK]: telemetry2.framework,
869
+ [TELEMETRY_HEADER_FRAMEWORK]: telemetry2.framework ?? "unknown",
858
870
  [TELEMETRY_HEADER_RUNTIME]: telemetry2.runtime ?? "unknown"
859
871
  };
860
872
  };
@@ -2966,10 +2978,10 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
2966
2978
  throw new WorkflowAbort(_DisabledWorkflowContext.disabledMessage);
2967
2979
  }
2968
2980
  /**
2969
- * overwrite cancel method to do nothing
2981
+ * overwrite cancel method to throw WorkflowAbort with the disabledMessage
2970
2982
  */
2971
2983
  async cancel() {
2972
- return;
2984
+ throw new WorkflowAbort(_DisabledWorkflowContext.disabledMessage);
2973
2985
  }
2974
2986
  /**
2975
2987
  * copies the passed context to create a DisabledWorkflowContext. Then, runs the
@@ -3001,7 +3013,7 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
3001
3013
  try {
3002
3014
  await routeFunction(disabledContext);
3003
3015
  } catch (error) {
3004
- if (error instanceof WorkflowAbort && error.stepName === this.disabledMessage) {
3016
+ if (error instanceof WorkflowAbort && error.stepName === this.disabledMessage || error instanceof WorkflowNonRetryableError) {
3005
3017
  return ok("step-found");
3006
3018
  }
3007
3019
  return err(error);
@@ -3222,6 +3234,13 @@ var processOptions = (options) => {
3222
3234
  status: 400
3223
3235
  }
3224
3236
  );
3237
+ } else if (finishCondition instanceof WorkflowNonRetryableError) {
3238
+ return new Response(JSON.stringify(formatWorkflowError(finishCondition)), {
3239
+ headers: {
3240
+ "Upstash-NonRetryable-Error": "true"
3241
+ },
3242
+ status: 489
3243
+ });
3225
3244
  }
3226
3245
  return new Response(JSON.stringify({ workflowRunId }), {
3227
3246
  status: 200
@@ -3414,6 +3433,9 @@ var serveBase = (routeFunction, telemetry2, options) => {
3414
3433
  },
3415
3434
  debug
3416
3435
  });
3436
+ if (result.isOk() && result.value instanceof WorkflowNonRetryableError) {
3437
+ return onStepFinish(workflowRunId, result.value);
3438
+ }
3417
3439
  if (result.isErr()) {
3418
3440
  await debug?.log("ERROR", "ERROR", { error: result.error.message });
3419
3441
  throw result.error;
package/astro.mjs CHANGED
@@ -2,7 +2,7 @@ import {
2
2
  SDK_TELEMETRY,
3
3
  serveBase,
4
4
  serveManyBase
5
- } from "./chunk-RMS2NQ3K.mjs";
5
+ } from "./chunk-AC5CQCN3.mjs";
6
6
 
7
7
  // platforms/astro.ts
8
8
  var telemetry = {
@@ -42,7 +42,7 @@ var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
42
42
  var DEFAULT_CONTENT_TYPE = "application/json";
43
43
  var NO_CONCURRENCY = 1;
44
44
  var DEFAULT_RETRIES = 3;
45
- var VERSION = "v0.2.14";
45
+ var VERSION = "v0.2.15";
46
46
  var SDK_TELEMETRY = `@upstash/workflow@${VERSION}`;
47
47
  var TELEMETRY_HEADER_SDK = "Upstash-Telemetry-Sdk";
48
48
  var TELEMETRY_HEADER_FRAMEWORK = "Upstash-Telemetry-Framework";
@@ -80,6 +80,16 @@ var WorkflowAbort = class extends Error {
80
80
  this.cancelWorkflow = cancelWorkflow;
81
81
  }
82
82
  };
83
+ var WorkflowNonRetryableError = class extends WorkflowAbort {
84
+ /**
85
+ * @param message error message to be displayed
86
+ */
87
+ constructor(message) {
88
+ super("fail", void 0, false);
89
+ this.name = "WorkflowNonRetryableError";
90
+ if (message) this.message = message;
91
+ }
92
+ };
83
93
  var formatWorkflowError = (error) => {
84
94
  return error instanceof Error ? {
85
95
  error: error.name,
@@ -903,6 +913,8 @@ var triggerRouteFunction = async ({
903
913
  return ok("workflow-was-finished");
904
914
  } else if (!(error_ instanceof WorkflowAbort)) {
905
915
  return err(error_);
916
+ } else if (error_ instanceof WorkflowNonRetryableError) {
917
+ return ok(error_);
906
918
  } else if (error_.cancelWorkflow) {
907
919
  await onCancel();
908
920
  return ok("workflow-finished");
@@ -1064,7 +1076,7 @@ ${atob(callbackMessage.body ?? "")}`
1064
1076
  var getTelemetryHeaders = (telemetry) => {
1065
1077
  return {
1066
1078
  [TELEMETRY_HEADER_SDK]: telemetry.sdk,
1067
- [TELEMETRY_HEADER_FRAMEWORK]: telemetry.framework,
1079
+ [TELEMETRY_HEADER_FRAMEWORK]: telemetry.framework ?? "unknown",
1068
1080
  [TELEMETRY_HEADER_RUNTIME]: telemetry.runtime ?? "unknown"
1069
1081
  };
1070
1082
  };
@@ -3010,10 +3022,10 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
3010
3022
  throw new WorkflowAbort(_DisabledWorkflowContext.disabledMessage);
3011
3023
  }
3012
3024
  /**
3013
- * overwrite cancel method to do nothing
3025
+ * overwrite cancel method to throw WorkflowAbort with the disabledMessage
3014
3026
  */
3015
3027
  async cancel() {
3016
- return;
3028
+ throw new WorkflowAbort(_DisabledWorkflowContext.disabledMessage);
3017
3029
  }
3018
3030
  /**
3019
3031
  * copies the passed context to create a DisabledWorkflowContext. Then, runs the
@@ -3045,7 +3057,7 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
3045
3057
  try {
3046
3058
  await routeFunction(disabledContext);
3047
3059
  } catch (error) {
3048
- if (error instanceof WorkflowAbort && error.stepName === this.disabledMessage) {
3060
+ if (error instanceof WorkflowAbort && error.stepName === this.disabledMessage || error instanceof WorkflowNonRetryableError) {
3049
3061
  return ok("step-found");
3050
3062
  }
3051
3063
  return err(error);
@@ -3266,6 +3278,13 @@ var processOptions = (options) => {
3266
3278
  status: 400
3267
3279
  }
3268
3280
  );
3281
+ } else if (finishCondition instanceof WorkflowNonRetryableError) {
3282
+ return new Response(JSON.stringify(formatWorkflowError(finishCondition)), {
3283
+ headers: {
3284
+ "Upstash-NonRetryable-Error": "true"
3285
+ },
3286
+ status: 489
3287
+ });
3269
3288
  }
3270
3289
  return new Response(JSON.stringify({ workflowRunId }), {
3271
3290
  status: 200
@@ -3458,6 +3477,9 @@ var serveBase = (routeFunction, telemetry, options) => {
3458
3477
  },
3459
3478
  debug
3460
3479
  });
3480
+ if (result.isOk() && result.value instanceof WorkflowNonRetryableError) {
3481
+ return onStepFinish(workflowRunId, result.value);
3482
+ }
3461
3483
  if (result.isErr()) {
3462
3484
  await debug?.log("ERROR", "ERROR", { error: result.error.message });
3463
3485
  throw result.error;
@@ -3513,9 +3535,11 @@ export {
3513
3535
  SDK_TELEMETRY,
3514
3536
  WorkflowError,
3515
3537
  WorkflowAbort,
3538
+ WorkflowNonRetryableError,
3516
3539
  getWorkflowRunId,
3517
3540
  StepTypes,
3518
3541
  triggerFirstInvocation,
3542
+ prepareFlowControl,
3519
3543
  WorkflowTool,
3520
3544
  serveManyBase,
3521
3545
  WorkflowContext,
package/cloudflare.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- import { R as RouteFunction, k as PublicServeOptions, t as InvokableWorkflow } from './types-C1WIgVLA.mjs';
2
- import { s as serveManyBase } from './serve-many-BF71QZHQ.mjs';
1
+ import { R as RouteFunction, n as PublicServeOptions, w as InvokableWorkflow } from './types-Dd-3bPoU.mjs';
2
+ import { s as serveManyBase } from './serve-many-AFwJPR3S.mjs';
3
3
  import '@upstash/qstash';
4
4
  import 'zod';
5
5
  import 'ai';
package/cloudflare.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { R as RouteFunction, k as PublicServeOptions, t as InvokableWorkflow } from './types-C1WIgVLA.js';
2
- import { s as serveManyBase } from './serve-many-BMlN2PAB.js';
1
+ import { R as RouteFunction, n as PublicServeOptions, w as InvokableWorkflow } from './types-Dd-3bPoU.js';
2
+ import { s as serveManyBase } from './serve-many-AaKSQyi7.js';
3
3
  import '@upstash/qstash';
4
4
  import 'zod';
5
5
  import 'ai';
package/cloudflare.js CHANGED
@@ -38,7 +38,7 @@ var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
38
38
  var DEFAULT_CONTENT_TYPE = "application/json";
39
39
  var NO_CONCURRENCY = 1;
40
40
  var DEFAULT_RETRIES = 3;
41
- var VERSION = "v0.2.14";
41
+ var VERSION = "v0.2.15";
42
42
  var SDK_TELEMETRY = `@upstash/workflow@${VERSION}`;
43
43
  var TELEMETRY_HEADER_SDK = "Upstash-Telemetry-Sdk";
44
44
  var TELEMETRY_HEADER_FRAMEWORK = "Upstash-Telemetry-Framework";
@@ -129,6 +129,16 @@ var WorkflowAbort = class extends Error {
129
129
  this.cancelWorkflow = cancelWorkflow;
130
130
  }
131
131
  };
132
+ var WorkflowNonRetryableError = class extends WorkflowAbort {
133
+ /**
134
+ * @param message error message to be displayed
135
+ */
136
+ constructor(message) {
137
+ super("fail", void 0, false);
138
+ this.name = "WorkflowNonRetryableError";
139
+ if (message) this.message = message;
140
+ }
141
+ };
132
142
  var formatWorkflowError = (error) => {
133
143
  return error instanceof Error ? {
134
144
  error: error.name,
@@ -693,6 +703,8 @@ var triggerRouteFunction = async ({
693
703
  return ok("workflow-was-finished");
694
704
  } else if (!(error_ instanceof WorkflowAbort)) {
695
705
  return err(error_);
706
+ } else if (error_ instanceof WorkflowNonRetryableError) {
707
+ return ok(error_);
696
708
  } else if (error_.cancelWorkflow) {
697
709
  await onCancel();
698
710
  return ok("workflow-finished");
@@ -854,7 +866,7 @@ ${atob(callbackMessage.body ?? "")}`
854
866
  var getTelemetryHeaders = (telemetry2) => {
855
867
  return {
856
868
  [TELEMETRY_HEADER_SDK]: telemetry2.sdk,
857
- [TELEMETRY_HEADER_FRAMEWORK]: telemetry2.framework,
869
+ [TELEMETRY_HEADER_FRAMEWORK]: telemetry2.framework ?? "unknown",
858
870
  [TELEMETRY_HEADER_RUNTIME]: telemetry2.runtime ?? "unknown"
859
871
  };
860
872
  };
@@ -2966,10 +2978,10 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
2966
2978
  throw new WorkflowAbort(_DisabledWorkflowContext.disabledMessage);
2967
2979
  }
2968
2980
  /**
2969
- * overwrite cancel method to do nothing
2981
+ * overwrite cancel method to throw WorkflowAbort with the disabledMessage
2970
2982
  */
2971
2983
  async cancel() {
2972
- return;
2984
+ throw new WorkflowAbort(_DisabledWorkflowContext.disabledMessage);
2973
2985
  }
2974
2986
  /**
2975
2987
  * copies the passed context to create a DisabledWorkflowContext. Then, runs the
@@ -3001,7 +3013,7 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
3001
3013
  try {
3002
3014
  await routeFunction(disabledContext);
3003
3015
  } catch (error) {
3004
- if (error instanceof WorkflowAbort && error.stepName === this.disabledMessage) {
3016
+ if (error instanceof WorkflowAbort && error.stepName === this.disabledMessage || error instanceof WorkflowNonRetryableError) {
3005
3017
  return ok("step-found");
3006
3018
  }
3007
3019
  return err(error);
@@ -3222,6 +3234,13 @@ var processOptions = (options) => {
3222
3234
  status: 400
3223
3235
  }
3224
3236
  );
3237
+ } else if (finishCondition instanceof WorkflowNonRetryableError) {
3238
+ return new Response(JSON.stringify(formatWorkflowError(finishCondition)), {
3239
+ headers: {
3240
+ "Upstash-NonRetryable-Error": "true"
3241
+ },
3242
+ status: 489
3243
+ });
3225
3244
  }
3226
3245
  return new Response(JSON.stringify({ workflowRunId }), {
3227
3246
  status: 200
@@ -3414,6 +3433,9 @@ var serveBase = (routeFunction, telemetry2, options) => {
3414
3433
  },
3415
3434
  debug
3416
3435
  });
3436
+ if (result.isOk() && result.value instanceof WorkflowNonRetryableError) {
3437
+ return onStepFinish(workflowRunId, result.value);
3438
+ }
3417
3439
  if (result.isErr()) {
3418
3440
  await debug?.log("ERROR", "ERROR", { error: result.error.message });
3419
3441
  throw result.error;
package/cloudflare.mjs CHANGED
@@ -2,7 +2,7 @@ import {
2
2
  SDK_TELEMETRY,
3
3
  serveBase,
4
4
  serveManyBase
5
- } from "./chunk-RMS2NQ3K.mjs";
5
+ } from "./chunk-AC5CQCN3.mjs";
6
6
 
7
7
  // platforms/cloudflare.ts
8
8
  var getArgs = (args) => {
package/express.d.mts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as express_serve_static_core from 'express-serve-static-core';
2
- import { R as RouteFunction, W as WorkflowServeOptions, t as InvokableWorkflow } from './types-C1WIgVLA.mjs';
2
+ import { R as RouteFunction, W as WorkflowServeOptions, w as InvokableWorkflow } from './types-Dd-3bPoU.mjs';
3
3
  import { Router } from 'express';
4
- import { s as serveManyBase } from './serve-many-BF71QZHQ.mjs';
4
+ import { s as serveManyBase } from './serve-many-AFwJPR3S.mjs';
5
5
  import '@upstash/qstash';
6
6
  import 'zod';
7
7
  import 'ai';
package/express.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as express_serve_static_core from 'express-serve-static-core';
2
- import { R as RouteFunction, W as WorkflowServeOptions, t as InvokableWorkflow } from './types-C1WIgVLA.js';
2
+ import { R as RouteFunction, W as WorkflowServeOptions, w as InvokableWorkflow } from './types-Dd-3bPoU.js';
3
3
  import { Router } from 'express';
4
- import { s as serveManyBase } from './serve-many-BMlN2PAB.js';
4
+ import { s as serveManyBase } from './serve-many-AaKSQyi7.js';
5
5
  import '@upstash/qstash';
6
6
  import 'zod';
7
7
  import 'ai';
package/express.js CHANGED
@@ -23710,7 +23710,7 @@ var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
23710
23710
  var DEFAULT_CONTENT_TYPE = "application/json";
23711
23711
  var NO_CONCURRENCY = 1;
23712
23712
  var DEFAULT_RETRIES = 3;
23713
- var VERSION = "v0.2.14";
23713
+ var VERSION = "v0.2.15";
23714
23714
  var SDK_TELEMETRY = `@upstash/workflow@${VERSION}`;
23715
23715
  var TELEMETRY_HEADER_SDK = "Upstash-Telemetry-Sdk";
23716
23716
  var TELEMETRY_HEADER_FRAMEWORK = "Upstash-Telemetry-Framework";
@@ -23801,6 +23801,16 @@ var WorkflowAbort = class extends Error {
23801
23801
  this.cancelWorkflow = cancelWorkflow;
23802
23802
  }
23803
23803
  };
23804
+ var WorkflowNonRetryableError = class extends WorkflowAbort {
23805
+ /**
23806
+ * @param message error message to be displayed
23807
+ */
23808
+ constructor(message) {
23809
+ super("fail", void 0, false);
23810
+ this.name = "WorkflowNonRetryableError";
23811
+ if (message) this.message = message;
23812
+ }
23813
+ };
23804
23814
  var formatWorkflowError = (error) => {
23805
23815
  return error instanceof Error ? {
23806
23816
  error: error.name,
@@ -24365,6 +24375,8 @@ var triggerRouteFunction = async ({
24365
24375
  return ok("workflow-was-finished");
24366
24376
  } else if (!(error_ instanceof WorkflowAbort)) {
24367
24377
  return err(error_);
24378
+ } else if (error_ instanceof WorkflowNonRetryableError) {
24379
+ return ok(error_);
24368
24380
  } else if (error_.cancelWorkflow) {
24369
24381
  await onCancel();
24370
24382
  return ok("workflow-finished");
@@ -24526,7 +24538,7 @@ ${atob(callbackMessage.body ?? "")}`
24526
24538
  var getTelemetryHeaders = (telemetry2) => {
24527
24539
  return {
24528
24540
  [TELEMETRY_HEADER_SDK]: telemetry2.sdk,
24529
- [TELEMETRY_HEADER_FRAMEWORK]: telemetry2.framework,
24541
+ [TELEMETRY_HEADER_FRAMEWORK]: telemetry2.framework ?? "unknown",
24530
24542
  [TELEMETRY_HEADER_RUNTIME]: telemetry2.runtime ?? "unknown"
24531
24543
  };
24532
24544
  };
@@ -26638,10 +26650,10 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
26638
26650
  throw new WorkflowAbort(_DisabledWorkflowContext.disabledMessage);
26639
26651
  }
26640
26652
  /**
26641
- * overwrite cancel method to do nothing
26653
+ * overwrite cancel method to throw WorkflowAbort with the disabledMessage
26642
26654
  */
26643
26655
  async cancel() {
26644
- return;
26656
+ throw new WorkflowAbort(_DisabledWorkflowContext.disabledMessage);
26645
26657
  }
26646
26658
  /**
26647
26659
  * copies the passed context to create a DisabledWorkflowContext. Then, runs the
@@ -26673,7 +26685,7 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
26673
26685
  try {
26674
26686
  await routeFunction(disabledContext);
26675
26687
  } catch (error) {
26676
- if (error instanceof WorkflowAbort && error.stepName === this.disabledMessage) {
26688
+ if (error instanceof WorkflowAbort && error.stepName === this.disabledMessage || error instanceof WorkflowNonRetryableError) {
26677
26689
  return ok("step-found");
26678
26690
  }
26679
26691
  return err(error);
@@ -26894,6 +26906,13 @@ var processOptions = (options) => {
26894
26906
  status: 400
26895
26907
  }
26896
26908
  );
26909
+ } else if (finishCondition instanceof WorkflowNonRetryableError) {
26910
+ return new Response(JSON.stringify(formatWorkflowError(finishCondition)), {
26911
+ headers: {
26912
+ "Upstash-NonRetryable-Error": "true"
26913
+ },
26914
+ status: 489
26915
+ });
26897
26916
  }
26898
26917
  return new Response(JSON.stringify({ workflowRunId }), {
26899
26918
  status: 200
@@ -27086,6 +27105,9 @@ var serveBase = (routeFunction, telemetry2, options) => {
27086
27105
  },
27087
27106
  debug
27088
27107
  });
27108
+ if (result.isOk() && result.value instanceof WorkflowNonRetryableError) {
27109
+ return onStepFinish(workflowRunId, result.value);
27110
+ }
27089
27111
  if (result.isErr()) {
27090
27112
  await debug?.log("ERROR", "ERROR", { error: result.error.message });
27091
27113
  throw result.error;
package/express.mjs CHANGED
@@ -5,7 +5,7 @@ import {
5
5
  __toESM,
6
6
  serveBase,
7
7
  serveManyBase
8
- } from "./chunk-RMS2NQ3K.mjs";
8
+ } from "./chunk-AC5CQCN3.mjs";
9
9
 
10
10
  // node_modules/depd/index.js
11
11
  var require_depd = __commonJS({
package/h3.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as h3 from 'h3';
2
- import { R as RouteFunction, k as PublicServeOptions, t as InvokableWorkflow } from './types-C1WIgVLA.mjs';
3
- import { s as serveManyBase } from './serve-many-BF71QZHQ.mjs';
2
+ import { R as RouteFunction, n as PublicServeOptions, w as InvokableWorkflow } from './types-Dd-3bPoU.mjs';
3
+ import { s as serveManyBase } from './serve-many-AFwJPR3S.mjs';
4
4
  import '@upstash/qstash';
5
5
  import 'zod';
6
6
  import 'ai';
package/h3.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as h3 from 'h3';
2
- import { R as RouteFunction, k as PublicServeOptions, t as InvokableWorkflow } from './types-C1WIgVLA.js';
3
- import { s as serveManyBase } from './serve-many-BMlN2PAB.js';
2
+ import { R as RouteFunction, n as PublicServeOptions, w as InvokableWorkflow } from './types-Dd-3bPoU.js';
3
+ import { s as serveManyBase } from './serve-many-AaKSQyi7.js';
4
4
  import '@upstash/qstash';
5
5
  import 'zod';
6
6
  import 'ai';
package/h3.js CHANGED
@@ -403,7 +403,7 @@ var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
403
403
  var DEFAULT_CONTENT_TYPE = "application/json";
404
404
  var NO_CONCURRENCY = 1;
405
405
  var DEFAULT_RETRIES = 3;
406
- var VERSION = "v0.2.14";
406
+ var VERSION = "v0.2.15";
407
407
  var SDK_TELEMETRY = `@upstash/workflow@${VERSION}`;
408
408
  var TELEMETRY_HEADER_SDK = "Upstash-Telemetry-Sdk";
409
409
  var TELEMETRY_HEADER_FRAMEWORK = "Upstash-Telemetry-Framework";
@@ -441,6 +441,16 @@ var WorkflowAbort = class extends Error {
441
441
  this.cancelWorkflow = cancelWorkflow;
442
442
  }
443
443
  };
444
+ var WorkflowNonRetryableError = class extends WorkflowAbort {
445
+ /**
446
+ * @param message error message to be displayed
447
+ */
448
+ constructor(message) {
449
+ super("fail", void 0, false);
450
+ this.name = "WorkflowNonRetryableError";
451
+ if (message) this.message = message;
452
+ }
453
+ };
444
454
  var formatWorkflowError = (error) => {
445
455
  return error instanceof Error ? {
446
456
  error: error.name,
@@ -1005,6 +1015,8 @@ var triggerRouteFunction = async ({
1005
1015
  return ok("workflow-was-finished");
1006
1016
  } else if (!(error_ instanceof WorkflowAbort)) {
1007
1017
  return err(error_);
1018
+ } else if (error_ instanceof WorkflowNonRetryableError) {
1019
+ return ok(error_);
1008
1020
  } else if (error_.cancelWorkflow) {
1009
1021
  await onCancel();
1010
1022
  return ok("workflow-finished");
@@ -1166,7 +1178,7 @@ ${atob(callbackMessage.body ?? "")}`
1166
1178
  var getTelemetryHeaders = (telemetry2) => {
1167
1179
  return {
1168
1180
  [TELEMETRY_HEADER_SDK]: telemetry2.sdk,
1169
- [TELEMETRY_HEADER_FRAMEWORK]: telemetry2.framework,
1181
+ [TELEMETRY_HEADER_FRAMEWORK]: telemetry2.framework ?? "unknown",
1170
1182
  [TELEMETRY_HEADER_RUNTIME]: telemetry2.runtime ?? "unknown"
1171
1183
  };
1172
1184
  };
@@ -3278,10 +3290,10 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
3278
3290
  throw new WorkflowAbort(_DisabledWorkflowContext.disabledMessage);
3279
3291
  }
3280
3292
  /**
3281
- * overwrite cancel method to do nothing
3293
+ * overwrite cancel method to throw WorkflowAbort with the disabledMessage
3282
3294
  */
3283
3295
  async cancel() {
3284
- return;
3296
+ throw new WorkflowAbort(_DisabledWorkflowContext.disabledMessage);
3285
3297
  }
3286
3298
  /**
3287
3299
  * copies the passed context to create a DisabledWorkflowContext. Then, runs the
@@ -3313,7 +3325,7 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
3313
3325
  try {
3314
3326
  await routeFunction(disabledContext);
3315
3327
  } catch (error) {
3316
- if (error instanceof WorkflowAbort && error.stepName === this.disabledMessage) {
3328
+ if (error instanceof WorkflowAbort && error.stepName === this.disabledMessage || error instanceof WorkflowNonRetryableError) {
3317
3329
  return ok("step-found");
3318
3330
  }
3319
3331
  return err(error);
@@ -3534,6 +3546,13 @@ var processOptions = (options) => {
3534
3546
  status: 400
3535
3547
  }
3536
3548
  );
3549
+ } else if (finishCondition instanceof WorkflowNonRetryableError) {
3550
+ return new Response(JSON.stringify(formatWorkflowError(finishCondition)), {
3551
+ headers: {
3552
+ "Upstash-NonRetryable-Error": "true"
3553
+ },
3554
+ status: 489
3555
+ });
3537
3556
  }
3538
3557
  return new Response(JSON.stringify({ workflowRunId }), {
3539
3558
  status: 200
@@ -3726,6 +3745,9 @@ var serveBase = (routeFunction, telemetry2, options) => {
3726
3745
  },
3727
3746
  debug
3728
3747
  });
3748
+ if (result.isOk() && result.value instanceof WorkflowNonRetryableError) {
3749
+ return onStepFinish(workflowRunId, result.value);
3750
+ }
3729
3751
  if (result.isErr()) {
3730
3752
  await debug?.log("ERROR", "ERROR", { error: result.error.message });
3731
3753
  throw result.error;
package/h3.mjs CHANGED
@@ -2,7 +2,7 @@ import {
2
2
  SDK_TELEMETRY,
3
3
  serveBase,
4
4
  serveManyBase
5
- } from "./chunk-RMS2NQ3K.mjs";
5
+ } from "./chunk-AC5CQCN3.mjs";
6
6
 
7
7
  // node_modules/defu/dist/defu.mjs
8
8
  function isPlainObject(value) {
package/hono.d.mts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { Context } from 'hono';
2
- import { R as RouteFunction, k as PublicServeOptions, t as InvokableWorkflow } from './types-C1WIgVLA.mjs';
2
+ import { R as RouteFunction, n as PublicServeOptions, w as InvokableWorkflow } from './types-Dd-3bPoU.mjs';
3
3
  import { Variables } from 'hono/types';
4
- import { s as serveManyBase } from './serve-many-BF71QZHQ.mjs';
4
+ import { s as serveManyBase } from './serve-many-AFwJPR3S.mjs';
5
5
  import '@upstash/qstash';
6
6
  import 'zod';
7
7
  import 'ai';
package/hono.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { Context } from 'hono';
2
- import { R as RouteFunction, k as PublicServeOptions, t as InvokableWorkflow } from './types-C1WIgVLA.js';
2
+ import { R as RouteFunction, n as PublicServeOptions, w as InvokableWorkflow } from './types-Dd-3bPoU.js';
3
3
  import { Variables } from 'hono/types';
4
- import { s as serveManyBase } from './serve-many-BMlN2PAB.js';
4
+ import { s as serveManyBase } from './serve-many-AaKSQyi7.js';
5
5
  import '@upstash/qstash';
6
6
  import 'zod';
7
7
  import 'ai';