@upstash/workflow 0.2.6 → 0.2.8-rc-invoke

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- import { R as RouteFunction, W as WorkflowServeOptions, E as ExclusiveValidationOptions, N as NotifyResponse, a as Waiter, S as Step } from './types-Cuqlx2Cr.mjs';
2
- export { A as AsyncStepFunction, C as CallResponse, q as CallSettings, D as Duration, k as FailureFunctionPayload, F as FinishCondition, H as HeaderParams, L as LogLevel, o as NotifyStepResponse, P as ParallelCallState, j as PublicServeOptions, g as RawStep, l as RequiredExceptFields, i as StepFunction, f as StepType, e as StepTypes, h as SyncStepFunction, T as Telemetry, p as WaitEventOptions, m as WaitRequest, n as WaitStepResponse, c as WorkflowClient, b as WorkflowContext, s as WorkflowLogger, r as WorkflowLoggerOptions, d as WorkflowReceiver } from './types-Cuqlx2Cr.mjs';
1
+ import { R as RouteFunction, W as WorkflowServeOptions, E as ExclusiveValidationOptions, T as Telemetry, N as NotifyResponse, a as Waiter, S as Step } from './types-C7Y7WUQd.mjs';
2
+ export { A as AsyncStepFunction, C as CallResponse, q as CallSettings, D as Duration, k as FailureFunctionPayload, F as FinishCondition, H as HeaderParams, t as InvokableWorkflow, s as InvokeCallback, r as InvokeStepResponse, I as InvokeWorkflowRequest, L as LogLevel, o as NotifyStepResponse, P as ParallelCallState, j as PublicServeOptions, g as RawStep, l as RequiredExceptFields, i as StepFunction, f as StepType, e as StepTypes, h as SyncStepFunction, p as WaitEventOptions, m as WaitRequest, n as WaitStepResponse, c as WorkflowClient, b as WorkflowContext, v as WorkflowLogger, u as WorkflowLoggerOptions, d as WorkflowReceiver } from './types-C7Y7WUQd.mjs';
3
3
  import { Client as Client$1, QstashError } from '@upstash/qstash';
4
4
  import 'zod';
5
5
  import 'ai';
@@ -9,13 +9,26 @@ import '@ai-sdk/openai';
9
9
  * Creates an async method that handles incoming requests and runs the provided
10
10
  * route function as a workflow.
11
11
  *
12
+ * Not exported in the package. Instead, used in framework specific serve implementations.
13
+ *
14
+ * Only difference from regular serve is the `useJSONContent` parameter.
15
+ *
12
16
  * @param routeFunction - A function that uses WorkflowContext as a parameter and runs a workflow.
13
17
  * @param options - Options including the client, onFinish callback, and initialPayloadParser.
14
18
  * @returns An async method that consumes incoming requests and runs the workflow.
15
19
  */
16
- declare const serve: <TInitialPayload = unknown, TRequest extends Request = Request, TResponse extends Response = Response>(routeFunction: RouteFunction<TInitialPayload>, options?: Omit<WorkflowServeOptions<TResponse, TInitialPayload>, "useJSONContent" | "schema" | "initialPayloadParser"> & ExclusiveValidationOptions<TInitialPayload>) => {
20
+ declare const serveBase: <TInitialPayload = unknown, TRequest extends Request = Request, TResponse extends Response = Response, TResult = unknown>(routeFunction: RouteFunction<TInitialPayload, TResult>, telemetry?: Telemetry, options?: WorkflowServeOptions<TResponse, TInitialPayload>) => {
17
21
  handler: (request: TRequest) => Promise<TResponse>;
18
22
  };
23
+ /**
24
+ * Creates an async method that handles incoming requests and runs the provided
25
+ * route function as a workflow.
26
+ *
27
+ * @param routeFunction - A function that uses WorkflowContext as a parameter and runs a workflow.
28
+ * @param options - Options including the client, onFinish callback, and initialPayloadParser.
29
+ * @returns An async method that consumes incoming requests and runs the workflow.
30
+ */
31
+ declare const serve: <TInitialPayload = unknown, TRequest extends Request = Request, TResponse extends Response = Response, TResult = unknown>(routeFunction: RouteFunction<TInitialPayload, TResult>, options?: Omit<WorkflowServeOptions<TResponse, TInitialPayload>, "useJSONContent" | "schema" | "initialPayloadParser"> & ExclusiveValidationOptions<TInitialPayload>) => ReturnType<typeof serveBase<TInitialPayload, TRequest, TResponse, TResult>>;
19
32
 
20
33
  type ClientConfig = ConstructorParameters<typeof Client$1>[0];
21
34
  /**
@@ -192,4 +205,4 @@ declare class WorkflowAbort extends Error {
192
205
  constructor(stepName: string, stepInfo?: Step, cancelWorkflow?: boolean);
193
206
  }
194
207
 
195
- export { Client, ExclusiveValidationOptions, NotifyResponse, RouteFunction, Step, Waiter, WorkflowAbort, WorkflowError, WorkflowServeOptions, serve };
208
+ export { Client, ExclusiveValidationOptions, NotifyResponse, RouteFunction, Step, Telemetry, Waiter, WorkflowAbort, WorkflowError, WorkflowServeOptions, serve };
package/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { R as RouteFunction, W as WorkflowServeOptions, E as ExclusiveValidationOptions, N as NotifyResponse, a as Waiter, S as Step } from './types-Cuqlx2Cr.js';
2
- export { A as AsyncStepFunction, C as CallResponse, q as CallSettings, D as Duration, k as FailureFunctionPayload, F as FinishCondition, H as HeaderParams, L as LogLevel, o as NotifyStepResponse, P as ParallelCallState, j as PublicServeOptions, g as RawStep, l as RequiredExceptFields, i as StepFunction, f as StepType, e as StepTypes, h as SyncStepFunction, T as Telemetry, p as WaitEventOptions, m as WaitRequest, n as WaitStepResponse, c as WorkflowClient, b as WorkflowContext, s as WorkflowLogger, r as WorkflowLoggerOptions, d as WorkflowReceiver } from './types-Cuqlx2Cr.js';
1
+ import { R as RouteFunction, W as WorkflowServeOptions, E as ExclusiveValidationOptions, T as Telemetry, N as NotifyResponse, a as Waiter, S as Step } from './types-C7Y7WUQd.js';
2
+ export { A as AsyncStepFunction, C as CallResponse, q as CallSettings, D as Duration, k as FailureFunctionPayload, F as FinishCondition, H as HeaderParams, t as InvokableWorkflow, s as InvokeCallback, r as InvokeStepResponse, I as InvokeWorkflowRequest, L as LogLevel, o as NotifyStepResponse, P as ParallelCallState, j as PublicServeOptions, g as RawStep, l as RequiredExceptFields, i as StepFunction, f as StepType, e as StepTypes, h as SyncStepFunction, p as WaitEventOptions, m as WaitRequest, n as WaitStepResponse, c as WorkflowClient, b as WorkflowContext, v as WorkflowLogger, u as WorkflowLoggerOptions, d as WorkflowReceiver } from './types-C7Y7WUQd.js';
3
3
  import { Client as Client$1, QstashError } from '@upstash/qstash';
4
4
  import 'zod';
5
5
  import 'ai';
@@ -9,13 +9,26 @@ import '@ai-sdk/openai';
9
9
  * Creates an async method that handles incoming requests and runs the provided
10
10
  * route function as a workflow.
11
11
  *
12
+ * Not exported in the package. Instead, used in framework specific serve implementations.
13
+ *
14
+ * Only difference from regular serve is the `useJSONContent` parameter.
15
+ *
12
16
  * @param routeFunction - A function that uses WorkflowContext as a parameter and runs a workflow.
13
17
  * @param options - Options including the client, onFinish callback, and initialPayloadParser.
14
18
  * @returns An async method that consumes incoming requests and runs the workflow.
15
19
  */
16
- declare const serve: <TInitialPayload = unknown, TRequest extends Request = Request, TResponse extends Response = Response>(routeFunction: RouteFunction<TInitialPayload>, options?: Omit<WorkflowServeOptions<TResponse, TInitialPayload>, "useJSONContent" | "schema" | "initialPayloadParser"> & ExclusiveValidationOptions<TInitialPayload>) => {
20
+ declare const serveBase: <TInitialPayload = unknown, TRequest extends Request = Request, TResponse extends Response = Response, TResult = unknown>(routeFunction: RouteFunction<TInitialPayload, TResult>, telemetry?: Telemetry, options?: WorkflowServeOptions<TResponse, TInitialPayload>) => {
17
21
  handler: (request: TRequest) => Promise<TResponse>;
18
22
  };
23
+ /**
24
+ * Creates an async method that handles incoming requests and runs the provided
25
+ * route function as a workflow.
26
+ *
27
+ * @param routeFunction - A function that uses WorkflowContext as a parameter and runs a workflow.
28
+ * @param options - Options including the client, onFinish callback, and initialPayloadParser.
29
+ * @returns An async method that consumes incoming requests and runs the workflow.
30
+ */
31
+ declare const serve: <TInitialPayload = unknown, TRequest extends Request = Request, TResponse extends Response = Response, TResult = unknown>(routeFunction: RouteFunction<TInitialPayload, TResult>, options?: Omit<WorkflowServeOptions<TResponse, TInitialPayload>, "useJSONContent" | "schema" | "initialPayloadParser"> & ExclusiveValidationOptions<TInitialPayload>) => ReturnType<typeof serveBase<TInitialPayload, TRequest, TResponse, TResult>>;
19
32
 
20
33
  type ClientConfig = ConstructorParameters<typeof Client$1>[0];
21
34
  /**
@@ -192,4 +205,4 @@ declare class WorkflowAbort extends Error {
192
205
  constructor(stepName: string, stepInfo?: Step, cancelWorkflow?: boolean);
193
206
  }
194
207
 
195
- export { Client, ExclusiveValidationOptions, NotifyResponse, RouteFunction, Step, Waiter, WorkflowAbort, WorkflowError, WorkflowServeOptions, serve };
208
+ export { Client, ExclusiveValidationOptions, NotifyResponse, RouteFunction, Step, Telemetry, Waiter, WorkflowAbort, WorkflowError, WorkflowServeOptions, serve };
package/index.js CHANGED
@@ -101,7 +101,7 @@ var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
101
101
  var DEFAULT_CONTENT_TYPE = "application/json";
102
102
  var NO_CONCURRENCY = 1;
103
103
  var DEFAULT_RETRIES = 3;
104
- var VERSION = "v0.2.3";
104
+ var VERSION = "v0.2.7";
105
105
  var SDK_TELEMETRY = `@upstash/workflow@${VERSION}`;
106
106
  var TELEMETRY_HEADER_SDK = "Upstash-Telemetry-Sdk";
107
107
  var TELEMETRY_HEADER_FRAMEWORK = "Upstash-Telemetry-Framework";
@@ -148,6 +148,31 @@ var formatWorkflowError = (error) => {
148
148
  };
149
149
  };
150
150
 
151
+ // src/utils.ts
152
+ var NANOID_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_";
153
+ var NANOID_LENGTH = 21;
154
+ function getRandomInt() {
155
+ return Math.floor(Math.random() * NANOID_CHARS.length);
156
+ }
157
+ function nanoid() {
158
+ return Array.from({ length: NANOID_LENGTH }).map(() => NANOID_CHARS[getRandomInt()]).join("");
159
+ }
160
+ function getWorkflowRunId(id) {
161
+ return `wfr_${id ?? nanoid()}`;
162
+ }
163
+ function decodeBase64(base64) {
164
+ try {
165
+ const binString = atob(base64);
166
+ const intArray = Uint8Array.from(binString, (m) => m.codePointAt(0));
167
+ return new TextDecoder().decode(intArray);
168
+ } catch (error) {
169
+ console.warn(
170
+ `Upstash Qstash: Failed while decoding base64 "${base64}". Decoding with atob and returning it instead. ${error}`
171
+ );
172
+ return atob(base64);
173
+ }
174
+ }
175
+
151
176
  // src/context/steps.ts
152
177
  var BaseLazyStep = class {
153
178
  stepName;
@@ -328,6 +353,41 @@ var LazyNotifyStep = class extends LazyFunctionStep {
328
353
  });
329
354
  }
330
355
  };
356
+ var LazyInvokeStep = class extends BaseLazyStep {
357
+ stepType = "Invoke";
358
+ params;
359
+ constructor(stepName, { workflow, body, headers = {}, workflowRunId, retries }) {
360
+ super(stepName);
361
+ this.params = {
362
+ workflow,
363
+ body,
364
+ headers,
365
+ workflowRunId: getWorkflowRunId(workflowRunId),
366
+ retries
367
+ };
368
+ }
369
+ getPlanStep(concurrent, targetStep) {
370
+ return {
371
+ stepId: 0,
372
+ stepName: this.stepName,
373
+ stepType: this.stepType,
374
+ concurrent,
375
+ targetStep
376
+ };
377
+ }
378
+ /**
379
+ * won't be used as it's the server who will add the result step
380
+ * in Invoke step.
381
+ */
382
+ getResultStep(concurrent, stepId) {
383
+ return Promise.resolve({
384
+ stepId,
385
+ stepName: this.stepName,
386
+ stepType: this.stepType,
387
+ concurrent
388
+ });
389
+ }
390
+ };
331
391
 
332
392
  // node_modules/neverthrow/dist/index.es.js
333
393
  var defaultErrorConfig = {
@@ -752,7 +812,8 @@ var StepTypes = [
752
812
  "SleepUntil",
753
813
  "Call",
754
814
  "Wait",
755
- "Notify"
815
+ "Notify",
816
+ "Invoke"
756
817
  ];
757
818
 
758
819
  // src/workflow-requests.ts
@@ -772,6 +833,9 @@ var triggerFirstInvocation = async ({
772
833
  retries: workflowContext.retries,
773
834
  telemetry
774
835
  });
836
+ if (workflowContext.headers.get("content-type")) {
837
+ headers["content-type"] = workflowContext.headers.get("content-type");
838
+ }
775
839
  if (useJSONContent) {
776
840
  headers["content-type"] = "application/json";
777
841
  }
@@ -813,8 +877,8 @@ var triggerRouteFunction = async ({
813
877
  debug
814
878
  }) => {
815
879
  try {
816
- await onStep();
817
- await onCleanup();
880
+ const result = await onStep();
881
+ await onCleanup(result);
818
882
  return ok("workflow-finished");
819
883
  } catch (error) {
820
884
  const error_ = error;
@@ -835,14 +899,15 @@ var triggerRouteFunction = async ({
835
899
  }
836
900
  }
837
901
  };
838
- var triggerWorkflowDelete = async (workflowContext, debug, cancel = false) => {
902
+ var triggerWorkflowDelete = async (workflowContext, result, debug, cancel = false) => {
839
903
  await debug?.log("SUBMIT", "SUBMIT_CLEANUP", {
840
904
  deletedWorkflowRunId: workflowContext.workflowRunId
841
905
  });
842
906
  await workflowContext.qstashClient.http.request({
843
907
  path: ["v2", "workflows", "runs", `${workflowContext.workflowRunId}?cancel=${cancel}`],
844
908
  method: "DELETE",
845
- parseResponseAsJson: false
909
+ parseResponseAsJson: false,
910
+ body: JSON.stringify(result)
846
911
  });
847
912
  await debug?.log(
848
913
  "SUBMIT",
@@ -997,11 +1062,14 @@ var getHeaders = ({
997
1062
  callTimeout,
998
1063
  telemetry
999
1064
  }) => {
1065
+ const contentType = (userHeaders ? userHeaders.get("Content-Type") : void 0) ?? DEFAULT_CONTENT_TYPE;
1000
1066
  const baseHeaders = {
1001
1067
  [WORKFLOW_INIT_HEADER]: initHeaderValue,
1002
1068
  [WORKFLOW_ID_HEADER]: workflowRunId,
1003
1069
  [WORKFLOW_URL_HEADER]: workflowUrl,
1004
1070
  [WORKFLOW_FEATURE_HEADER]: "LazyFetch,InitialBody",
1071
+ [WORKFLOW_PROTOCOL_VERSION_HEADER]: WORKFLOW_PROTOCOL_VERSION,
1072
+ "content-type": contentType,
1005
1073
  ...telemetry ? getTelemetryHeaders(telemetry) : {}
1006
1074
  };
1007
1075
  if (!step?.callUrl) {
@@ -1016,6 +1084,9 @@ var getHeaders = ({
1016
1084
  baseHeaders["Upstash-Failure-Callback"] = failureUrl;
1017
1085
  }
1018
1086
  }
1087
+ if (step?.stepType === "Invoke") {
1088
+ baseHeaders["upstash-workflow-invoke"] = "true";
1089
+ }
1019
1090
  if (step?.callUrl) {
1020
1091
  baseHeaders["Upstash-Retries"] = callRetries?.toString() ?? "0";
1021
1092
  baseHeaders[WORKFLOW_FEATURE_HEADER] = "WF_NoDelete,InitialBody";
@@ -1037,7 +1108,6 @@ var getHeaders = ({
1037
1108
  baseHeaders[`Upstash-Failure-Callback-Forward-${header}`] = userHeaders.get(header);
1038
1109
  }
1039
1110
  }
1040
- const contentType = (userHeaders ? userHeaders.get("Content-Type") : void 0) ?? DEFAULT_CONTENT_TYPE;
1041
1111
  if (step?.callHeaders) {
1042
1112
  const forwardedHeaders = Object.fromEntries(
1043
1113
  Object.entries(step.callHeaders).map(([header, value]) => [
@@ -1087,8 +1157,7 @@ var getHeaders = ({
1087
1157
  "Upstash-Workflow-Runid": [workflowRunId],
1088
1158
  [WORKFLOW_INIT_HEADER]: ["false"],
1089
1159
  [WORKFLOW_URL_HEADER]: [workflowUrl],
1090
- "Upstash-Workflow-CallType": ["step"],
1091
- "Content-Type": [contentType]
1160
+ "Upstash-Workflow-CallType": ["step"]
1092
1161
  }
1093
1162
  };
1094
1163
  }
@@ -1383,7 +1452,23 @@ var AutoExecutor = class _AutoExecutor {
1383
1452
  method: "POST",
1384
1453
  parseResponseAsJson: false
1385
1454
  });
1386
- throw new WorkflowAbort(steps[0].stepName, steps[0]);
1455
+ throw new WorkflowAbort(waitStep.stepName, waitStep);
1456
+ }
1457
+ if (steps.length === 1 && lazySteps[0] instanceof LazyInvokeStep) {
1458
+ const invokeStep = steps[0];
1459
+ const lazyInvokeStep = lazySteps[0];
1460
+ await lazyInvokeStep.params.workflow.callback(
1461
+ {
1462
+ body: lazyInvokeStep.params.body,
1463
+ headers: lazyInvokeStep.params.headers,
1464
+ workflowRunId: lazyInvokeStep.params.workflowRunId,
1465
+ workflow: lazyInvokeStep.params.workflow,
1466
+ retries: lazyInvokeStep.params.retries
1467
+ },
1468
+ invokeStep,
1469
+ this.context
1470
+ );
1471
+ throw new WorkflowAbort(invokeStep.stepName, invokeStep);
1387
1472
  }
1388
1473
  const result = await this.context.qstashClient.batchJSON(
1389
1474
  steps.map((singleStep, index) => {
@@ -2300,6 +2385,13 @@ var WorkflowContext = class {
2300
2385
  return result;
2301
2386
  }
2302
2387
  }
2388
+ async invoke(stepName, settings) {
2389
+ const result = await this.addStep(new LazyInvokeStep(stepName, settings));
2390
+ return {
2391
+ ...result,
2392
+ body: result.body ? JSON.parse(result.body) : void 0
2393
+ };
2394
+ }
2303
2395
  /**
2304
2396
  * Cancel the current workflow run
2305
2397
  *
@@ -2377,31 +2469,6 @@ var WorkflowLogger = class _WorkflowLogger {
2377
2469
  }
2378
2470
  };
2379
2471
 
2380
- // src/utils.ts
2381
- var NANOID_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_";
2382
- var NANOID_LENGTH = 21;
2383
- function getRandomInt() {
2384
- return Math.floor(Math.random() * NANOID_CHARS.length);
2385
- }
2386
- function nanoid() {
2387
- return Array.from({ length: NANOID_LENGTH }).map(() => NANOID_CHARS[getRandomInt()]).join("");
2388
- }
2389
- function getWorkflowRunId(id) {
2390
- return `wfr_${id ?? nanoid()}`;
2391
- }
2392
- function decodeBase64(base64) {
2393
- try {
2394
- const binString = atob(base64);
2395
- const intArray = Uint8Array.from(binString, (m) => m.codePointAt(0));
2396
- return new TextDecoder().decode(intArray);
2397
- } catch (error) {
2398
- console.warn(
2399
- `Upstash Qstash: Failed while decoding base64 "${base64}". Decoding with atob and returning it instead. ${error}`
2400
- );
2401
- return atob(base64);
2402
- }
2403
- }
2404
-
2405
2472
  // src/serve/authorization.ts
2406
2473
  var import_qstash8 = require("@upstash/qstash");
2407
2474
  var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowContext {
@@ -2847,8 +2914,8 @@ var serveBase = (routeFunction, telemetry, options) => {
2847
2914
  } else if (callReturnCheck.value === "continue-workflow") {
2848
2915
  const result = isFirstInvocation ? await triggerFirstInvocation({ workflowContext, useJSONContent, telemetry, debug }) : await triggerRouteFunction({
2849
2916
  onStep: async () => routeFunction(workflowContext),
2850
- onCleanup: async () => {
2851
- await triggerWorkflowDelete(workflowContext, debug);
2917
+ onCleanup: async (result2) => {
2918
+ await triggerWorkflowDelete(workflowContext, result2, debug);
2852
2919
  },
2853
2920
  onCancel: async () => {
2854
2921
  await makeCancelRequest(workflowContext.qstashClient.http, workflowRunId);
@@ -2895,7 +2962,7 @@ var import_qstash11 = require("@upstash/qstash");
2895
2962
  var Client4 = class {
2896
2963
  client;
2897
2964
  constructor(clientConfig) {
2898
- if (!clientConfig.token) {
2965
+ if (!clientConfig?.token) {
2899
2966
  console.error(
2900
2967
  "QStash token is required for Upstash Workflow!\n\nTo fix this:\n1. Get your token from the Upstash Console (https://console.upstash.com/qstash)\n2. Initialize the workflow client with:\n\n const client = new Client({\n token: '<YOUR_QSTASH_TOKEN>'\n });"
2901
2968
  );
package/index.mjs CHANGED
@@ -9,14 +9,14 @@ import {
9
9
  makeNotifyRequest,
10
10
  serve,
11
11
  triggerFirstInvocation
12
- } from "./chunk-OLNSY3BB.mjs";
12
+ } from "./chunk-IWAW7GIG.mjs";
13
13
 
14
14
  // src/client/index.ts
15
15
  import { Client as QStashClient } from "@upstash/qstash";
16
16
  var Client = class {
17
17
  client;
18
18
  constructor(clientConfig) {
19
- if (!clientConfig.token) {
19
+ if (!clientConfig?.token) {
20
20
  console.error(
21
21
  "QStash token is required for Upstash Workflow!\n\nTo fix this:\n1. Get your token from the Upstash Console (https://console.upstash.com/qstash)\n2. Initialize the workflow client with:\n\n const client = new Client({\n token: '<YOUR_QSTASH_TOKEN>'\n });"
22
22
  );
package/nextjs.d.mts CHANGED
@@ -1,5 +1,6 @@
1
- import { NextApiHandler } from 'next';
2
- import { R as RouteFunction, j as PublicServeOptions } from './types-Cuqlx2Cr.mjs';
1
+ import { NextApiHandler, NextApiRequest, NextApiResponse } from 'next';
2
+ import { R as RouteFunction, j as PublicServeOptions, t as InvokableWorkflow } from './types-C7Y7WUQd.mjs';
3
+ import { s as serveManyBase } from './serve-many-BlBvXfBS.mjs';
3
4
  import '@upstash/qstash';
4
5
  import 'zod';
5
6
  import 'ai';
@@ -14,11 +15,19 @@ import '@ai-sdk/openai';
14
15
  * @param options workflow options
15
16
  * @returns
16
17
  */
17
- declare const serve: <TInitialPayload = unknown>(routeFunction: RouteFunction<TInitialPayload>, options?: PublicServeOptions<TInitialPayload>) => {
18
+ declare const serve: <TInitialPayload = unknown, TResult = unknown>(routeFunction: RouteFunction<TInitialPayload, TResult>, options?: PublicServeOptions<TInitialPayload>) => {
18
19
  POST: (request: Request) => Promise<Response>;
19
20
  };
20
- declare const servePagesRouter: <TInitialPayload = unknown>(routeFunction: RouteFunction<TInitialPayload>, options?: PublicServeOptions<TInitialPayload>) => {
21
+ declare const createWorkflow: <TInitialPayload, TResult>(routeFunction: RouteFunction<TInitialPayload, TResult>, options?: PublicServeOptions<TInitialPayload> | undefined) => InvokableWorkflow<TInitialPayload, TResult, Parameters<ReturnType<typeof serve<TInitialPayload, TResult>>["POST"]>>;
22
+ declare const serveMany: (workflows: Parameters<typeof serveManyBase>[0]["workflows"]) => {
23
+ POST: (request: Request) => Promise<any>;
24
+ };
25
+ declare const servePagesRouter: <TInitialPayload = unknown, TResult = unknown>(routeFunction: RouteFunction<TInitialPayload, TResult>, options?: PublicServeOptions<TInitialPayload>) => {
21
26
  handler: NextApiHandler;
22
27
  };
28
+ declare const createWorkflowPagesRouter: <TInitialPayload, TResult>(routeFunction: RouteFunction<TInitialPayload, TResult>, options?: PublicServeOptions<TInitialPayload> | undefined) => InvokableWorkflow<TInitialPayload, TResult, Parameters<ReturnType<typeof servePagesRouter<TInitialPayload, TResult>>["handler"]>>;
29
+ declare const serveManyPagesRouter: (workflows: Parameters<typeof serveManyBase>[0]["workflows"]) => {
30
+ handler: (req: NextApiRequest, res: NextApiResponse<any>) => Promise<any>;
31
+ };
23
32
 
24
- export { serve, servePagesRouter };
33
+ export { createWorkflow, createWorkflowPagesRouter, serve, serveMany, serveManyPagesRouter, servePagesRouter };
package/nextjs.d.ts CHANGED
@@ -1,5 +1,6 @@
1
- import { NextApiHandler } from 'next';
2
- import { R as RouteFunction, j as PublicServeOptions } from './types-Cuqlx2Cr.js';
1
+ import { NextApiHandler, NextApiRequest, NextApiResponse } from 'next';
2
+ import { R as RouteFunction, j as PublicServeOptions, t as InvokableWorkflow } from './types-C7Y7WUQd.js';
3
+ import { s as serveManyBase } from './serve-many-Dw-UUnH6.js';
3
4
  import '@upstash/qstash';
4
5
  import 'zod';
5
6
  import 'ai';
@@ -14,11 +15,19 @@ import '@ai-sdk/openai';
14
15
  * @param options workflow options
15
16
  * @returns
16
17
  */
17
- declare const serve: <TInitialPayload = unknown>(routeFunction: RouteFunction<TInitialPayload>, options?: PublicServeOptions<TInitialPayload>) => {
18
+ declare const serve: <TInitialPayload = unknown, TResult = unknown>(routeFunction: RouteFunction<TInitialPayload, TResult>, options?: PublicServeOptions<TInitialPayload>) => {
18
19
  POST: (request: Request) => Promise<Response>;
19
20
  };
20
- declare const servePagesRouter: <TInitialPayload = unknown>(routeFunction: RouteFunction<TInitialPayload>, options?: PublicServeOptions<TInitialPayload>) => {
21
+ declare const createWorkflow: <TInitialPayload, TResult>(routeFunction: RouteFunction<TInitialPayload, TResult>, options?: PublicServeOptions<TInitialPayload> | undefined) => InvokableWorkflow<TInitialPayload, TResult, Parameters<ReturnType<typeof serve<TInitialPayload, TResult>>["POST"]>>;
22
+ declare const serveMany: (workflows: Parameters<typeof serveManyBase>[0]["workflows"]) => {
23
+ POST: (request: Request) => Promise<any>;
24
+ };
25
+ declare const servePagesRouter: <TInitialPayload = unknown, TResult = unknown>(routeFunction: RouteFunction<TInitialPayload, TResult>, options?: PublicServeOptions<TInitialPayload>) => {
21
26
  handler: NextApiHandler;
22
27
  };
28
+ declare const createWorkflowPagesRouter: <TInitialPayload, TResult>(routeFunction: RouteFunction<TInitialPayload, TResult>, options?: PublicServeOptions<TInitialPayload> | undefined) => InvokableWorkflow<TInitialPayload, TResult, Parameters<ReturnType<typeof servePagesRouter<TInitialPayload, TResult>>["handler"]>>;
29
+ declare const serveManyPagesRouter: (workflows: Parameters<typeof serveManyBase>[0]["workflows"]) => {
30
+ handler: (req: NextApiRequest, res: NextApiResponse<any>) => Promise<any>;
31
+ };
23
32
 
24
- export { serve, servePagesRouter };
33
+ export { createWorkflow, createWorkflowPagesRouter, serve, serveMany, serveManyPagesRouter, servePagesRouter };