@upstash/workflow 0.2.1 → 0.2.3

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/nextjs.js CHANGED
@@ -20,53 +20,13 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // platforms/nextjs.ts
21
21
  var nextjs_exports = {};
22
22
  __export(nextjs_exports, {
23
- serve: () => serve2,
23
+ serve: () => serve,
24
24
  servePagesRouter: () => servePagesRouter
25
25
  });
26
26
  module.exports = __toCommonJS(nextjs_exports);
27
27
 
28
- // src/error.ts
29
- var import_qstash = require("@upstash/qstash");
30
- var WorkflowError = class extends import_qstash.QstashError {
31
- constructor(message) {
32
- super(message);
33
- this.name = "WorkflowError";
34
- }
35
- };
36
- var WorkflowAbort = class extends Error {
37
- stepInfo;
38
- stepName;
39
- /**
40
- * whether workflow is to be canceled on abort
41
- */
42
- cancelWorkflow;
43
- /**
44
- *
45
- * @param stepName name of the aborting step
46
- * @param stepInfo step information
47
- * @param cancelWorkflow
48
- */
49
- constructor(stepName, stepInfo, cancelWorkflow = false) {
50
- super(
51
- `This is an Upstash Workflow error thrown after a step executes. It is expected to be raised. Make sure that you await for each step. Also, if you are using try/catch blocks, you should not wrap context.run/sleep/sleepUntil/call methods with try/catch. Aborting workflow after executing step '${stepName}'.`
52
- );
53
- this.name = "WorkflowAbort";
54
- this.stepName = stepName;
55
- this.stepInfo = stepInfo;
56
- this.cancelWorkflow = cancelWorkflow;
57
- }
58
- };
59
- var formatWorkflowError = (error) => {
60
- return error instanceof Error ? {
61
- error: error.name,
62
- message: error.message
63
- } : {
64
- error: "Error",
65
- message: "An error occured while executing workflow."
66
- };
67
- };
68
-
69
28
  // src/client/utils.ts
29
+ var import_qstash = require("@upstash/qstash");
70
30
  var makeNotifyRequest = async (requester, eventId, eventData) => {
71
31
  const result = await requester.request({
72
32
  path: ["v2", "notify", eventId],
@@ -93,26 +53,71 @@ var getSteps = async (requester, workflowRunId, messageId, debug) => {
93
53
  await debug?.log("INFO", "ENDPOINT_START", {
94
54
  message: `Pulled ${steps.length} steps from QStashand returned them without filtering with messageId.`
95
55
  });
96
- return steps;
56
+ return { steps, workflowRunEnded: false };
97
57
  } else {
98
58
  const index = steps.findIndex((item) => item.messageId === messageId);
99
59
  if (index === -1) {
100
- return [];
60
+ return { steps: [], workflowRunEnded: false };
101
61
  }
102
62
  const filteredSteps = steps.slice(0, index + 1);
103
63
  await debug?.log("INFO", "ENDPOINT_START", {
104
64
  message: `Pulled ${steps.length} steps from QStash and filtered them to ${filteredSteps.length} using messageId.`
105
65
  });
106
- return filteredSteps;
66
+ return { steps: filteredSteps, workflowRunEnded: false };
107
67
  }
108
68
  } catch (error) {
109
- await debug?.log("ERROR", "ERROR", {
110
- message: "failed while fetching steps.",
111
- error
112
- });
113
- throw new WorkflowError(`Failed while pulling steps. ${error}`);
69
+ if (error instanceof import_qstash.QstashError && error.status === 404) {
70
+ await debug?.log("WARN", "ENDPOINT_START", {
71
+ message: "Couldn't fetch workflow run steps. This can happen if the workflow run succesfully ends before some callback is executed.",
72
+ error
73
+ });
74
+ return { steps: void 0, workflowRunEnded: true };
75
+ } else {
76
+ throw error;
77
+ }
78
+ }
79
+ };
80
+
81
+ // src/error.ts
82
+ var import_qstash2 = require("@upstash/qstash");
83
+ var WorkflowError = class extends import_qstash2.QstashError {
84
+ constructor(message) {
85
+ super(message);
86
+ this.name = "WorkflowError";
87
+ }
88
+ };
89
+ var WorkflowAbort = class extends Error {
90
+ stepInfo;
91
+ stepName;
92
+ /**
93
+ * whether workflow is to be canceled on abort
94
+ */
95
+ cancelWorkflow;
96
+ /**
97
+ *
98
+ * @param stepName name of the aborting step
99
+ * @param stepInfo step information
100
+ * @param cancelWorkflow
101
+ */
102
+ constructor(stepName, stepInfo, cancelWorkflow = false) {
103
+ super(
104
+ `This is an Upstash Workflow error thrown after a step executes. It is expected to be raised. Make sure that you await for each step. Also, if you are using try/catch blocks, you should not wrap context.run/sleep/sleepUntil/call methods with try/catch. Aborting workflow after executing step '${stepName}'.`
105
+ );
106
+ this.name = "WorkflowAbort";
107
+ this.stepName = stepName;
108
+ this.stepInfo = stepInfo;
109
+ this.cancelWorkflow = cancelWorkflow;
114
110
  }
115
111
  };
112
+ var formatWorkflowError = (error) => {
113
+ return error instanceof Error ? {
114
+ error: error.name,
115
+ message: error.message
116
+ } : {
117
+ error: "Error",
118
+ message: "An error occured while executing workflow."
119
+ };
120
+ };
116
121
 
117
122
  // src/context/steps.ts
118
123
  var BaseLazyStep = class {
@@ -734,8 +739,8 @@ var StepTypes = [
734
739
  ];
735
740
 
736
741
  // src/workflow-requests.ts
737
- var import_qstash2 = require("@upstash/qstash");
738
- var triggerFirstInvocation = async (workflowContext, retries, debug) => {
742
+ var import_qstash3 = require("@upstash/qstash");
743
+ var triggerFirstInvocation = async (workflowContext, retries, useJSONContent, debug) => {
739
744
  const { headers } = getHeaders(
740
745
  "true",
741
746
  workflowContext.workflowRunId,
@@ -745,6 +750,9 @@ var triggerFirstInvocation = async (workflowContext, retries, debug) => {
745
750
  workflowContext.failureUrl,
746
751
  retries
747
752
  );
753
+ if (useJSONContent) {
754
+ headers["content-type"] = "application/json";
755
+ }
748
756
  try {
749
757
  const body = typeof workflowContext.requestPayload === "string" ? workflowContext.requestPayload : JSON.stringify(workflowContext.requestPayload);
750
758
  const result = await workflowContext.qstashClient.publish({
@@ -788,7 +796,7 @@ var triggerRouteFunction = async ({
788
796
  return ok("workflow-finished");
789
797
  } catch (error) {
790
798
  const error_ = error;
791
- if (error instanceof import_qstash2.QstashError && error.status === 400) {
799
+ if (error instanceof import_qstash3.QstashError && error.status === 400) {
792
800
  await debug?.log("WARN", "RESPONSE_WORKFLOW", {
793
801
  message: `tried to append to a cancelled workflow. exiting without publishing.`,
794
802
  name: error.name,
@@ -822,7 +830,7 @@ var triggerWorkflowDelete = async (workflowContext, debug, cancel = false) => {
822
830
  );
823
831
  return { deleted: true };
824
832
  } catch (error) {
825
- if (error instanceof import_qstash2.QstashError && error.status === 404) {
833
+ if (error instanceof import_qstash3.QstashError && error.status === 404) {
826
834
  await debug?.log("WARN", "SUBMIT_CLEANUP", {
827
835
  message: `Failed to remove workflow run ${workflowContext.workflowRunId} as it doesn't exist.`,
828
836
  name: error.name,
@@ -859,11 +867,19 @@ var handleThirdPartyCallResult = async (request, requestPayload, client, workflo
859
867
  if (!workflowRunId2)
860
868
  throw new WorkflowError("workflow run id missing in context.call lazy fetch.");
861
869
  if (!messageId) throw new WorkflowError("message id missing in context.call lazy fetch.");
862
- const steps = await getSteps(client.http, workflowRunId2, messageId, debug);
870
+ const { steps, workflowRunEnded } = await getSteps(
871
+ client.http,
872
+ workflowRunId2,
873
+ messageId,
874
+ debug
875
+ );
876
+ if (workflowRunEnded) {
877
+ return ok("workflow-ended");
878
+ }
863
879
  const failingStep = steps.find((step) => step.messageId === messageId);
864
880
  if (!failingStep)
865
881
  throw new WorkflowError(
866
- "Failed to submit the context.call." + (steps.length === 0 ? "No steps found." : `No step was found with matching messageId ${messageId} out of ${steps.length} steps.`)
882
+ "Failed to submit the context.call. " + (steps.length === 0 ? "No steps found." : `No step was found with matching messageId ${messageId} out of ${steps.length} steps.`)
867
883
  );
868
884
  callbackPayload = atob(failingStep.body);
869
885
  }
@@ -1446,6 +1462,127 @@ var sortSteps = (steps) => {
1446
1462
  return [...steps].sort((step, stepOther) => getStepId(step) - getStepId(stepOther));
1447
1463
  };
1448
1464
 
1465
+ // src/context/api/anthropic.ts
1466
+ var import_qstash4 = require("@upstash/qstash");
1467
+
1468
+ // src/context/provider.ts
1469
+ var getProviderInfo = (api) => {
1470
+ if (!api.provider) {
1471
+ throw new WorkflowError("A Provider must be provided.");
1472
+ }
1473
+ if (api.provider.owner === "upstash") {
1474
+ throw new WorkflowError("Upstash provider isn't supported.");
1475
+ }
1476
+ const { name, provider, ...parameters } = api;
1477
+ if (!provider.baseUrl) throw new TypeError("baseUrl cannot be empty or undefined!");
1478
+ if (!provider.token) throw new TypeError("token cannot be empty or undefined!");
1479
+ if (provider.apiKind !== name) {
1480
+ throw new TypeError(`Unexpected api name. Expected '${provider.apiKind}', received ${name}`);
1481
+ }
1482
+ const providerInfo = {
1483
+ url: provider.getUrl(),
1484
+ baseUrl: provider.baseUrl,
1485
+ route: provider.getRoute(),
1486
+ appendHeaders: provider.getHeaders(parameters),
1487
+ owner: provider.owner,
1488
+ method: provider.method
1489
+ };
1490
+ return provider.onFinish(providerInfo, parameters);
1491
+ };
1492
+
1493
+ // src/context/api/base.ts
1494
+ var BaseWorkflowApi = class {
1495
+ context;
1496
+ constructor({ context }) {
1497
+ this.context = context;
1498
+ }
1499
+ /**
1500
+ * context.call which uses a QStash API
1501
+ *
1502
+ * @param stepName
1503
+ * @param settings
1504
+ * @returns
1505
+ */
1506
+ async callApi(stepName, settings) {
1507
+ const { url, appendHeaders, method } = getProviderInfo(settings.api);
1508
+ const { method: userMethod, body, headers = {}, retries = 0, timeout } = settings;
1509
+ return await this.context.call(stepName, {
1510
+ url,
1511
+ method: userMethod ?? method,
1512
+ body,
1513
+ headers: {
1514
+ ...appendHeaders,
1515
+ ...headers
1516
+ },
1517
+ retries,
1518
+ timeout
1519
+ });
1520
+ }
1521
+ };
1522
+
1523
+ // src/context/api/anthropic.ts
1524
+ var AnthropicAPI = class extends BaseWorkflowApi {
1525
+ async call(stepName, settings) {
1526
+ const { token, operation, ...parameters } = settings;
1527
+ return await this.callApi(stepName, {
1528
+ api: {
1529
+ name: "llm",
1530
+ provider: (0, import_qstash4.anthropic)({ token })
1531
+ },
1532
+ ...parameters
1533
+ });
1534
+ }
1535
+ };
1536
+
1537
+ // src/context/api/openai.ts
1538
+ var import_qstash5 = require("@upstash/qstash");
1539
+ var OpenAIAPI = class extends BaseWorkflowApi {
1540
+ async call(stepName, settings) {
1541
+ const { token, organization, operation, ...parameters } = settings;
1542
+ return await this.callApi(stepName, {
1543
+ api: {
1544
+ name: "llm",
1545
+ provider: (0, import_qstash5.openai)({ token, organization })
1546
+ },
1547
+ ...parameters
1548
+ });
1549
+ }
1550
+ };
1551
+
1552
+ // src/context/api/resend.ts
1553
+ var import_qstash6 = require("@upstash/qstash");
1554
+ var ResendAPI = class extends BaseWorkflowApi {
1555
+ async call(stepName, settings) {
1556
+ const { token, batch = false, ...parameters } = settings;
1557
+ return await this.callApi(stepName, {
1558
+ api: {
1559
+ name: "email",
1560
+ provider: (0, import_qstash6.resend)({ token, batch })
1561
+ },
1562
+ ...parameters
1563
+ });
1564
+ }
1565
+ };
1566
+
1567
+ // src/context/api/index.ts
1568
+ var WorkflowApi = class extends BaseWorkflowApi {
1569
+ get openai() {
1570
+ return new OpenAIAPI({
1571
+ context: this.context
1572
+ });
1573
+ }
1574
+ get resend() {
1575
+ return new ResendAPI({
1576
+ context: this.context
1577
+ });
1578
+ }
1579
+ get anthropic() {
1580
+ return new AnthropicAPI({
1581
+ context: this.context
1582
+ });
1583
+ }
1584
+ };
1585
+
1449
1586
  // src/context/context.ts
1450
1587
  var WorkflowContext = class {
1451
1588
  executor;
@@ -1825,6 +1962,11 @@ var WorkflowContext = class {
1825
1962
  async addStep(step) {
1826
1963
  return await this.executor.addStep(step);
1827
1964
  }
1965
+ get api() {
1966
+ return new WorkflowApi({
1967
+ context: this
1968
+ });
1969
+ }
1828
1970
  };
1829
1971
 
1830
1972
  // src/logger.ts
@@ -1902,7 +2044,7 @@ function decodeBase64(base64) {
1902
2044
  }
1903
2045
 
1904
2046
  // src/serve/authorization.ts
1905
- var import_qstash3 = require("@upstash/qstash");
2047
+ var import_qstash7 = require("@upstash/qstash");
1906
2048
  var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowContext {
1907
2049
  static disabledMessage = "disabled-qstash-worklfow-run";
1908
2050
  /**
@@ -1933,7 +2075,7 @@ var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowCon
1933
2075
  */
1934
2076
  static async tryAuthentication(routeFunction, context) {
1935
2077
  const disabledContext = new _DisabledWorkflowContext({
1936
- qstashClient: new import_qstash3.Client({
2078
+ qstashClient: new import_qstash7.Client({
1937
2079
  baseUrl: "disabled-client",
1938
2080
  token: "disabled-client"
1939
2081
  }),
@@ -2057,7 +2199,8 @@ var parseRequest = async (requestPayload, isFirstInvocation, workflowRunId, requ
2057
2199
  return {
2058
2200
  rawInitialPayload: requestPayload ?? "",
2059
2201
  steps: [],
2060
- isLastDuplicate: false
2202
+ isLastDuplicate: false,
2203
+ workflowRunEnded: false
2061
2204
  };
2062
2205
  } else {
2063
2206
  let rawSteps;
@@ -2067,7 +2210,21 @@ var parseRequest = async (requestPayload, isFirstInvocation, workflowRunId, requ
2067
2210
  "ENDPOINT_START",
2068
2211
  "request payload is empty, steps will be fetched from QStash."
2069
2212
  );
2070
- rawSteps = await getSteps(requester, workflowRunId, messageId, debug);
2213
+ const { steps: fetchedSteps, workflowRunEnded } = await getSteps(
2214
+ requester,
2215
+ workflowRunId,
2216
+ messageId,
2217
+ debug
2218
+ );
2219
+ if (workflowRunEnded) {
2220
+ return {
2221
+ rawInitialPayload: void 0,
2222
+ steps: void 0,
2223
+ isLastDuplicate: void 0,
2224
+ workflowRunEnded: true
2225
+ };
2226
+ }
2227
+ rawSteps = fetchedSteps;
2071
2228
  } else {
2072
2229
  rawSteps = JSON.parse(requestPayload);
2073
2230
  }
@@ -2077,7 +2234,8 @@ var parseRequest = async (requestPayload, isFirstInvocation, workflowRunId, requ
2077
2234
  return {
2078
2235
  rawInitialPayload,
2079
2236
  steps: deduplicatedSteps,
2080
- isLastDuplicate
2237
+ isLastDuplicate,
2238
+ workflowRunEnded: false
2081
2239
  };
2082
2240
  }
2083
2241
  };
@@ -2131,15 +2289,15 @@ var handleFailure = async (request, requestPayload, qstashClient, initialPayload
2131
2289
  };
2132
2290
 
2133
2291
  // src/serve/options.ts
2134
- var import_qstash4 = require("@upstash/qstash");
2135
- var import_qstash5 = require("@upstash/qstash");
2292
+ var import_qstash8 = require("@upstash/qstash");
2293
+ var import_qstash9 = require("@upstash/qstash");
2136
2294
  var processOptions = (options) => {
2137
2295
  const environment = options?.env ?? (typeof process === "undefined" ? {} : process.env);
2138
2296
  const receiverEnvironmentVariablesSet = Boolean(
2139
2297
  environment.QSTASH_CURRENT_SIGNING_KEY && environment.QSTASH_NEXT_SIGNING_KEY
2140
2298
  );
2141
2299
  return {
2142
- qstashClient: new import_qstash5.Client({
2300
+ qstashClient: new import_qstash9.Client({
2143
2301
  baseUrl: environment.QSTASH_URL,
2144
2302
  token: environment.QSTASH_TOKEN
2145
2303
  }),
@@ -2173,13 +2331,14 @@ var processOptions = (options) => {
2173
2331
  throw error;
2174
2332
  }
2175
2333
  },
2176
- receiver: receiverEnvironmentVariablesSet ? new import_qstash4.Receiver({
2334
+ receiver: receiverEnvironmentVariablesSet ? new import_qstash8.Receiver({
2177
2335
  currentSigningKey: environment.QSTASH_CURRENT_SIGNING_KEY,
2178
2336
  nextSigningKey: environment.QSTASH_NEXT_SIGNING_KEY
2179
2337
  }) : void 0,
2180
2338
  baseUrl: environment.UPSTASH_WORKFLOW_URL,
2181
2339
  env: environment,
2182
2340
  retries: DEFAULT_RETRIES,
2341
+ useJSONContent: false,
2183
2342
  ...options
2184
2343
  };
2185
2344
  };
@@ -2196,6 +2355,16 @@ var determineUrls = async (request, url, baseUrl, failureFunction, failureUrl, d
2196
2355
  });
2197
2356
  }
2198
2357
  const workflowFailureUrl = failureFunction ? workflowUrl : failureUrl;
2358
+ if (workflowUrl.includes("localhost")) {
2359
+ await debug?.log("WARN", "ENDPOINT_START", {
2360
+ message: `Workflow URL contains localhost. This can happen in local development, but shouldn't happen in production unless you have a route which contains localhost. Received: ${workflowUrl}`
2361
+ });
2362
+ }
2363
+ if (!(workflowUrl.startsWith("http://") || workflowUrl.startsWith("https://"))) {
2364
+ throw new WorkflowError(
2365
+ `Workflow URL should start with 'http://' or 'https://'. Recevied is '${workflowUrl}'`
2366
+ );
2367
+ }
2199
2368
  return {
2200
2369
  workflowUrl,
2201
2370
  workflowFailureUrl
@@ -2204,7 +2373,7 @@ var determineUrls = async (request, url, baseUrl, failureFunction, failureUrl, d
2204
2373
  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`;
2205
2374
 
2206
2375
  // src/serve/index.ts
2207
- var serve = (routeFunction, options) => {
2376
+ var serveBase = (routeFunction, options) => {
2208
2377
  const {
2209
2378
  qstashClient,
2210
2379
  onStepFinish,
@@ -2216,7 +2385,8 @@ var serve = (routeFunction, options) => {
2216
2385
  failureFunction,
2217
2386
  baseUrl,
2218
2387
  env,
2219
- retries
2388
+ retries,
2389
+ useJSONContent
2220
2390
  } = processOptions(options);
2221
2391
  const debug = WorkflowLogger.getLogger(verbose);
2222
2392
  const handler = async (request) => {
@@ -2233,7 +2403,7 @@ var serve = (routeFunction, options) => {
2233
2403
  await verifyRequest(requestPayload, request.headers.get("upstash-signature"), receiver);
2234
2404
  const { isFirstInvocation, workflowRunId } = validateRequest(request);
2235
2405
  debug?.setWorkflowRunId(workflowRunId);
2236
- const { rawInitialPayload, steps, isLastDuplicate } = await parseRequest(
2406
+ const { rawInitialPayload, steps, isLastDuplicate, workflowRunEnded } = await parseRequest(
2237
2407
  requestPayload,
2238
2408
  isFirstInvocation,
2239
2409
  workflowRunId,
@@ -2241,8 +2411,11 @@ var serve = (routeFunction, options) => {
2241
2411
  request.headers.get("upstash-message-id"),
2242
2412
  debug
2243
2413
  );
2414
+ if (workflowRunEnded) {
2415
+ return onStepFinish(workflowRunId, "workflow-already-ended");
2416
+ }
2244
2417
  if (isLastDuplicate) {
2245
- return onStepFinish("no-workflow-id", "duplicate-step");
2418
+ return onStepFinish(workflowRunId, "duplicate-step");
2246
2419
  }
2247
2420
  const failureCheck = await handleFailure(
2248
2421
  request,
@@ -2256,7 +2429,7 @@ var serve = (routeFunction, options) => {
2256
2429
  throw failureCheck.error;
2257
2430
  } else if (failureCheck.value === "is-failure-callback") {
2258
2431
  await debug?.log("WARN", "RESPONSE_DEFAULT", "failureFunction executed");
2259
- return onStepFinish("no-workflow-id", "failure-callback");
2432
+ return onStepFinish(workflowRunId, "failure-callback");
2260
2433
  }
2261
2434
  const workflowContext = new WorkflowContext({
2262
2435
  qstashClient,
@@ -2299,7 +2472,7 @@ var serve = (routeFunction, options) => {
2299
2472
  });
2300
2473
  throw callReturnCheck.error;
2301
2474
  } else if (callReturnCheck.value === "continue-workflow") {
2302
- const result = isFirstInvocation ? await triggerFirstInvocation(workflowContext, retries, debug) : await triggerRouteFunction({
2475
+ const result = isFirstInvocation ? await triggerFirstInvocation(workflowContext, retries, useJSONContent, debug) : await triggerRouteFunction({
2303
2476
  onStep: async () => routeFunction(workflowContext),
2304
2477
  onCleanup: async () => {
2305
2478
  await triggerWorkflowDelete(workflowContext, debug);
@@ -2315,6 +2488,8 @@ var serve = (routeFunction, options) => {
2315
2488
  }
2316
2489
  await debug?.log("INFO", "RESPONSE_WORKFLOW");
2317
2490
  return onStepFinish(workflowContext.workflowRunId, "success");
2491
+ } else if (callReturnCheck.value === "workflow-ended") {
2492
+ return onStepFinish(workflowContext.workflowRunId, "workflow-already-ended");
2318
2493
  }
2319
2494
  await debug?.log("INFO", "RESPONSE_DEFAULT");
2320
2495
  return onStepFinish("no-workflow-id", "fromCallback");
@@ -2332,12 +2507,9 @@ var serve = (routeFunction, options) => {
2332
2507
  return { handler: safeHandler };
2333
2508
  };
2334
2509
 
2335
- // src/client/index.ts
2336
- var import_qstash6 = require("@upstash/qstash");
2337
-
2338
2510
  // platforms/nextjs.ts
2339
- var serve2 = (routeFunction, options) => {
2340
- const { handler: serveHandler } = serve(
2511
+ var serve = (routeFunction, options) => {
2512
+ const { handler: serveHandler } = serveBase(
2341
2513
  routeFunction,
2342
2514
  options
2343
2515
  );
@@ -2348,7 +2520,7 @@ var serve2 = (routeFunction, options) => {
2348
2520
  };
2349
2521
  };
2350
2522
  var servePagesRouter = (routeFunction, options) => {
2351
- const { handler: serveHandler } = serve(routeFunction, options);
2523
+ const { handler: serveHandler } = serveBase(routeFunction, options);
2352
2524
  const handler = async (request_, res) => {
2353
2525
  if (request_.method?.toUpperCase() !== "POST") {
2354
2526
  res.status(405).json("Only POST requests are allowed in worklfows");
package/nextjs.mjs CHANGED
@@ -1,10 +1,10 @@
1
1
  import {
2
- serve
3
- } from "./chunk-ADOBNR4O.mjs";
2
+ serveBase
3
+ } from "./chunk-QBJ3LQIO.mjs";
4
4
 
5
5
  // platforms/nextjs.ts
6
- var serve2 = (routeFunction, options) => {
7
- const { handler: serveHandler } = serve(
6
+ var serve = (routeFunction, options) => {
7
+ const { handler: serveHandler } = serveBase(
8
8
  routeFunction,
9
9
  options
10
10
  );
@@ -15,7 +15,7 @@ var serve2 = (routeFunction, options) => {
15
15
  };
16
16
  };
17
17
  var servePagesRouter = (routeFunction, options) => {
18
- const { handler: serveHandler } = serve(routeFunction, options);
18
+ const { handler: serveHandler } = serveBase(routeFunction, options);
19
19
  const handler = async (request_, res) => {
20
20
  if (request_.method?.toUpperCase() !== "POST") {
21
21
  res.status(405).json("Only POST requests are allowed in worklfows");
@@ -37,6 +37,6 @@ var servePagesRouter = (routeFunction, options) => {
37
37
  return { handler };
38
38
  };
39
39
  export {
40
- serve2 as serve,
40
+ serve,
41
41
  servePagesRouter
42
42
  };
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@upstash/workflow","version":"v0.2.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"}},"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.0","astro":"^4.16.7","eslint":"^9.11.1","eslint-plugin-unicorn":"^55.0.0","express":"^4.21.1","globals":"^15.10.0","h3":"^1.12.0","hono":"^4.6.3","husky":"^9.1.6","next":"^14.2.14","prettier":"3.3.3","tsc":"^2.0.4","tsup":"^8.3.0","typescript":"^5.6.3","typescript-eslint":"^8.8.0"},"dependencies":{"@upstash/qstash":"^2.7.17"},"directories":{"example":"examples"}}
1
+ {"name":"@upstash/workflow","version":"v0.2.3","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"}},"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.0","astro":"^4.16.7","eslint":"^9.11.1","eslint-plugin-unicorn":"^55.0.0","express":"^4.21.1","globals":"^15.10.0","h3":"^1.12.0","hono":"^4.6.3","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.7.20"},"directories":{"example":"examples"}}
package/solidjs.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { APIEvent } from '@solidjs/start/server';
2
- import { R as RouteFunction, W as WorkflowServeOptions } from './types-Be4hC1mu.mjs';
2
+ import { R as RouteFunction, j as PublicServeOptions } from './types-R9q4MUwl.mjs';
3
3
  import '@upstash/qstash';
4
4
 
5
5
  /**
@@ -11,7 +11,7 @@ import '@upstash/qstash';
11
11
  * @param options workflow options
12
12
  * @returns
13
13
  */
14
- declare const serve: <TInitialPayload = unknown>(routeFunction: RouteFunction<TInitialPayload>, options?: Omit<WorkflowServeOptions<Response, TInitialPayload>, "onStepFinish">) => {
14
+ declare const serve: <TInitialPayload = unknown>(routeFunction: RouteFunction<TInitialPayload>, options?: PublicServeOptions<TInitialPayload>) => {
15
15
  POST: (event: APIEvent) => Promise<Response>;
16
16
  };
17
17
 
package/solidjs.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { APIEvent } from '@solidjs/start/server';
2
- import { R as RouteFunction, W as WorkflowServeOptions } from './types-Be4hC1mu.js';
2
+ import { R as RouteFunction, j as PublicServeOptions } from './types-R9q4MUwl.js';
3
3
  import '@upstash/qstash';
4
4
 
5
5
  /**
@@ -11,7 +11,7 @@ import '@upstash/qstash';
11
11
  * @param options workflow options
12
12
  * @returns
13
13
  */
14
- declare const serve: <TInitialPayload = unknown>(routeFunction: RouteFunction<TInitialPayload>, options?: Omit<WorkflowServeOptions<Response, TInitialPayload>, "onStepFinish">) => {
14
+ declare const serve: <TInitialPayload = unknown>(routeFunction: RouteFunction<TInitialPayload>, options?: PublicServeOptions<TInitialPayload>) => {
15
15
  POST: (event: APIEvent) => Promise<Response>;
16
16
  };
17
17