@upstash/workflow 0.2.8-rc-invoke → 0.2.8

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/solidjs.js CHANGED
@@ -88,7 +88,7 @@ var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
88
88
  var DEFAULT_CONTENT_TYPE = "application/json";
89
89
  var NO_CONCURRENCY = 1;
90
90
  var DEFAULT_RETRIES = 3;
91
- var VERSION = "v0.2.7";
91
+ var VERSION = "v0.2.3";
92
92
  var SDK_TELEMETRY = `@upstash/workflow@${VERSION}`;
93
93
  var TELEMETRY_HEADER_SDK = "Upstash-Telemetry-Sdk";
94
94
  var TELEMETRY_HEADER_FRAMEWORK = "Upstash-Telemetry-Framework";
@@ -135,31 +135,6 @@ var formatWorkflowError = (error) => {
135
135
  };
136
136
  };
137
137
 
138
- // src/utils.ts
139
- var NANOID_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_";
140
- var NANOID_LENGTH = 21;
141
- function getRandomInt() {
142
- return Math.floor(Math.random() * NANOID_CHARS.length);
143
- }
144
- function nanoid() {
145
- return Array.from({ length: NANOID_LENGTH }).map(() => NANOID_CHARS[getRandomInt()]).join("");
146
- }
147
- function getWorkflowRunId(id) {
148
- return `wfr_${id ?? nanoid()}`;
149
- }
150
- function decodeBase64(base64) {
151
- try {
152
- const binString = atob(base64);
153
- const intArray = Uint8Array.from(binString, (m) => m.codePointAt(0));
154
- return new TextDecoder().decode(intArray);
155
- } catch (error) {
156
- console.warn(
157
- `Upstash Qstash: Failed while decoding base64 "${base64}". Decoding with atob and returning it instead. ${error}`
158
- );
159
- return atob(base64);
160
- }
161
- }
162
-
163
138
  // src/context/steps.ts
164
139
  var BaseLazyStep = class {
165
140
  stepName;
@@ -340,41 +315,6 @@ var LazyNotifyStep = class extends LazyFunctionStep {
340
315
  });
341
316
  }
342
317
  };
343
- var LazyInvokeStep = class extends BaseLazyStep {
344
- stepType = "Invoke";
345
- params;
346
- constructor(stepName, { workflow, body, headers = {}, workflowRunId, retries }) {
347
- super(stepName);
348
- this.params = {
349
- workflow,
350
- body,
351
- headers,
352
- workflowRunId: getWorkflowRunId(workflowRunId),
353
- retries
354
- };
355
- }
356
- getPlanStep(concurrent, targetStep) {
357
- return {
358
- stepId: 0,
359
- stepName: this.stepName,
360
- stepType: this.stepType,
361
- concurrent,
362
- targetStep
363
- };
364
- }
365
- /**
366
- * won't be used as it's the server who will add the result step
367
- * in Invoke step.
368
- */
369
- getResultStep(concurrent, stepId) {
370
- return Promise.resolve({
371
- stepId,
372
- stepName: this.stepName,
373
- stepType: this.stepType,
374
- concurrent
375
- });
376
- }
377
- };
378
318
 
379
319
  // node_modules/neverthrow/dist/index.es.js
380
320
  var defaultErrorConfig = {
@@ -799,8 +739,7 @@ var StepTypes = [
799
739
  "SleepUntil",
800
740
  "Call",
801
741
  "Wait",
802
- "Notify",
803
- "Invoke"
742
+ "Notify"
804
743
  ];
805
744
 
806
745
  // src/workflow-requests.ts
@@ -864,8 +803,8 @@ var triggerRouteFunction = async ({
864
803
  debug
865
804
  }) => {
866
805
  try {
867
- const result = await onStep();
868
- await onCleanup(result);
806
+ await onStep();
807
+ await onCleanup();
869
808
  return ok("workflow-finished");
870
809
  } catch (error) {
871
810
  const error_ = error;
@@ -886,15 +825,14 @@ var triggerRouteFunction = async ({
886
825
  }
887
826
  }
888
827
  };
889
- var triggerWorkflowDelete = async (workflowContext, result, debug, cancel = false) => {
828
+ var triggerWorkflowDelete = async (workflowContext, debug, cancel = false) => {
890
829
  await debug?.log("SUBMIT", "SUBMIT_CLEANUP", {
891
830
  deletedWorkflowRunId: workflowContext.workflowRunId
892
831
  });
893
832
  await workflowContext.qstashClient.http.request({
894
833
  path: ["v2", "workflows", "runs", `${workflowContext.workflowRunId}?cancel=${cancel}`],
895
834
  method: "DELETE",
896
- parseResponseAsJson: false,
897
- body: JSON.stringify(result)
835
+ parseResponseAsJson: false
898
836
  });
899
837
  await debug?.log(
900
838
  "SUBMIT",
@@ -1049,14 +987,11 @@ var getHeaders = ({
1049
987
  callTimeout,
1050
988
  telemetry
1051
989
  }) => {
1052
- const contentType = (userHeaders ? userHeaders.get("Content-Type") : void 0) ?? DEFAULT_CONTENT_TYPE;
1053
990
  const baseHeaders = {
1054
991
  [WORKFLOW_INIT_HEADER]: initHeaderValue,
1055
992
  [WORKFLOW_ID_HEADER]: workflowRunId,
1056
993
  [WORKFLOW_URL_HEADER]: workflowUrl,
1057
994
  [WORKFLOW_FEATURE_HEADER]: "LazyFetch,InitialBody",
1058
- [WORKFLOW_PROTOCOL_VERSION_HEADER]: WORKFLOW_PROTOCOL_VERSION,
1059
- "content-type": contentType,
1060
995
  ...telemetry ? getTelemetryHeaders(telemetry) : {}
1061
996
  };
1062
997
  if (!step?.callUrl) {
@@ -1067,13 +1002,18 @@ var getHeaders = ({
1067
1002
  }
1068
1003
  if (failureUrl) {
1069
1004
  baseHeaders[`Upstash-Failure-Callback-Forward-${WORKFLOW_FAILURE_HEADER}`] = "true";
1005
+ baseHeaders[`Upstash-Failure-Callback-Forward-Upstash-Workflow-Failure-Callback`] = "true";
1006
+ baseHeaders["Upstash-Failure-Callback-Workflow-Runid"] = workflowRunId;
1007
+ baseHeaders["Upstash-Failure-Callback-Workflow-Init"] = "false";
1008
+ baseHeaders["Upstash-Failure-Callback-Workflow-Url"] = workflowUrl;
1009
+ baseHeaders["Upstash-Failure-Callback-Workflow-Calltype"] = "failureCall";
1010
+ if (retries !== void 0) {
1011
+ baseHeaders["Upstash-Failure-Callback-Retries"] = retries.toString();
1012
+ }
1070
1013
  if (!step?.callUrl) {
1071
1014
  baseHeaders["Upstash-Failure-Callback"] = failureUrl;
1072
1015
  }
1073
1016
  }
1074
- if (step?.stepType === "Invoke") {
1075
- baseHeaders["upstash-workflow-invoke"] = "true";
1076
- }
1077
1017
  if (step?.callUrl) {
1078
1018
  baseHeaders["Upstash-Retries"] = callRetries?.toString() ?? "0";
1079
1019
  baseHeaders[WORKFLOW_FEATURE_HEADER] = "WF_NoDelete,InitialBody";
@@ -1095,6 +1035,7 @@ var getHeaders = ({
1095
1035
  baseHeaders[`Upstash-Failure-Callback-Forward-${header}`] = userHeaders.get(header);
1096
1036
  }
1097
1037
  }
1038
+ const contentType = (userHeaders ? userHeaders.get("Content-Type") : void 0) ?? DEFAULT_CONTENT_TYPE;
1098
1039
  if (step?.callHeaders) {
1099
1040
  const forwardedHeaders = Object.fromEntries(
1100
1041
  Object.entries(step.callHeaders).map(([header, value]) => [
@@ -1144,7 +1085,8 @@ var getHeaders = ({
1144
1085
  "Upstash-Workflow-Runid": [workflowRunId],
1145
1086
  [WORKFLOW_INIT_HEADER]: ["false"],
1146
1087
  [WORKFLOW_URL_HEADER]: [workflowUrl],
1147
- "Upstash-Workflow-CallType": ["step"]
1088
+ "Upstash-Workflow-CallType": ["step"],
1089
+ "Content-Type": [contentType]
1148
1090
  }
1149
1091
  };
1150
1092
  }
@@ -1439,23 +1381,7 @@ var AutoExecutor = class _AutoExecutor {
1439
1381
  method: "POST",
1440
1382
  parseResponseAsJson: false
1441
1383
  });
1442
- throw new WorkflowAbort(waitStep.stepName, waitStep);
1443
- }
1444
- if (steps.length === 1 && lazySteps[0] instanceof LazyInvokeStep) {
1445
- const invokeStep = steps[0];
1446
- const lazyInvokeStep = lazySteps[0];
1447
- await lazyInvokeStep.params.workflow.callback(
1448
- {
1449
- body: lazyInvokeStep.params.body,
1450
- headers: lazyInvokeStep.params.headers,
1451
- workflowRunId: lazyInvokeStep.params.workflowRunId,
1452
- workflow: lazyInvokeStep.params.workflow,
1453
- retries: lazyInvokeStep.params.retries
1454
- },
1455
- invokeStep,
1456
- this.context
1457
- );
1458
- throw new WorkflowAbort(invokeStep.stepName, invokeStep);
1384
+ throw new WorkflowAbort(steps[0].stepName, steps[0]);
1459
1385
  }
1460
1386
  const result = await this.context.qstashClient.batchJSON(
1461
1387
  steps.map((singleStep, index) => {
@@ -1774,9 +1700,10 @@ var wrapTools = ({
1774
1700
  return Object.fromEntries(
1775
1701
  Object.entries(tools).map((toolInfo) => {
1776
1702
  const [toolName, tool3] = toolInfo;
1703
+ const executeAsStep = "executeAsStep" in tool3 ? tool3.executeAsStep : true;
1777
1704
  const aiSDKTool = convertToAISDKTool(tool3);
1778
1705
  const execute = aiSDKTool.execute;
1779
- if (execute) {
1706
+ if (execute && executeAsStep) {
1780
1707
  const wrappedExecute = (...params) => {
1781
1708
  return context.run(`Run tool ${toolName}`, () => execute(...params));
1782
1709
  };
@@ -2372,13 +2299,6 @@ var WorkflowContext = class {
2372
2299
  return result;
2373
2300
  }
2374
2301
  }
2375
- async invoke(stepName, settings) {
2376
- const result = await this.addStep(new LazyInvokeStep(stepName, settings));
2377
- return {
2378
- ...result,
2379
- body: result.body ? JSON.parse(result.body) : void 0
2380
- };
2381
- }
2382
2302
  /**
2383
2303
  * Cancel the current workflow run
2384
2304
  *
@@ -2456,6 +2376,31 @@ var WorkflowLogger = class _WorkflowLogger {
2456
2376
  }
2457
2377
  };
2458
2378
 
2379
+ // src/utils.ts
2380
+ var NANOID_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_";
2381
+ var NANOID_LENGTH = 21;
2382
+ function getRandomInt() {
2383
+ return Math.floor(Math.random() * NANOID_CHARS.length);
2384
+ }
2385
+ function nanoid() {
2386
+ return Array.from({ length: NANOID_LENGTH }).map(() => NANOID_CHARS[getRandomInt()]).join("");
2387
+ }
2388
+ function getWorkflowRunId(id) {
2389
+ return `wfr_${id ?? nanoid()}`;
2390
+ }
2391
+ function decodeBase64(base64) {
2392
+ try {
2393
+ const binString = atob(base64);
2394
+ const intArray = Uint8Array.from(binString, (m) => m.codePointAt(0));
2395
+ return new TextDecoder().decode(intArray);
2396
+ } catch (error) {
2397
+ console.warn(
2398
+ `Upstash Qstash: Failed while decoding base64 "${base64}". Decoding with atob and returning it instead. ${error}`
2399
+ );
2400
+ return atob(base64);
2401
+ }
2402
+ }
2403
+
2459
2404
  // src/serve/authorization.ts
2460
2405
  var import_qstash8 = require("@upstash/qstash");
2461
2406
  var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowContext {
@@ -2901,8 +2846,8 @@ var serveBase = (routeFunction, telemetry, options) => {
2901
2846
  } else if (callReturnCheck.value === "continue-workflow") {
2902
2847
  const result = isFirstInvocation ? await triggerFirstInvocation({ workflowContext, useJSONContent, telemetry, debug }) : await triggerRouteFunction({
2903
2848
  onStep: async () => routeFunction(workflowContext),
2904
- onCleanup: async (result2) => {
2905
- await triggerWorkflowDelete(workflowContext, result2, debug);
2849
+ onCleanup: async () => {
2850
+ await triggerWorkflowDelete(workflowContext, debug);
2906
2851
  },
2907
2852
  onCancel: async () => {
2908
2853
  await makeCancelRequest(workflowContext.qstashClient.http, workflowRunId);
@@ -2936,11 +2881,6 @@ var serveBase = (routeFunction, telemetry, options) => {
2936
2881
 
2937
2882
  // platforms/solidjs.ts
2938
2883
  var serve = (routeFunction, options) => {
2939
- const telemetry = {
2940
- sdk: SDK_TELEMETRY,
2941
- framework: "solidjs",
2942
- runtime: process.versions.bun ? `bun@${process.versions.bun}/node@${process.version}` : `node@${process.version}`
2943
- };
2944
2884
  const handler = async (event) => {
2945
2885
  const method = event.request.method;
2946
2886
  if (method.toUpperCase() !== "POST") {
@@ -2948,7 +2888,15 @@ var serve = (routeFunction, options) => {
2948
2888
  status: 405
2949
2889
  });
2950
2890
  }
2951
- const { handler: serveHandler } = serveBase(routeFunction, telemetry, options);
2891
+ const { handler: serveHandler } = serveBase(
2892
+ routeFunction,
2893
+ {
2894
+ sdk: SDK_TELEMETRY,
2895
+ framework: "solidjs",
2896
+ runtime: process.versions.bun ? `bun@${process.versions.bun}/node@${process.version}` : `node@${process.version}`
2897
+ },
2898
+ options
2899
+ );
2952
2900
  return await serveHandler(event.request);
2953
2901
  };
2954
2902
  return { POST: handler };
package/solidjs.mjs CHANGED
@@ -1,15 +1,10 @@
1
1
  import {
2
2
  SDK_TELEMETRY,
3
3
  serveBase
4
- } from "./chunk-IWAW7GIG.mjs";
4
+ } from "./chunk-BPUSHNSD.mjs";
5
5
 
6
6
  // platforms/solidjs.ts
7
7
  var serve = (routeFunction, options) => {
8
- const telemetry = {
9
- sdk: SDK_TELEMETRY,
10
- framework: "solidjs",
11
- runtime: process.versions.bun ? `bun@${process.versions.bun}/node@${process.version}` : `node@${process.version}`
12
- };
13
8
  const handler = async (event) => {
14
9
  const method = event.request.method;
15
10
  if (method.toUpperCase() !== "POST") {
@@ -17,7 +12,15 @@ var serve = (routeFunction, options) => {
17
12
  status: 405
18
13
  });
19
14
  }
20
- const { handler: serveHandler } = serveBase(routeFunction, telemetry, options);
15
+ const { handler: serveHandler } = serveBase(
16
+ routeFunction,
17
+ {
18
+ sdk: SDK_TELEMETRY,
19
+ framework: "solidjs",
20
+ runtime: process.versions.bun ? `bun@${process.versions.bun}/node@${process.version}` : `node@${process.version}`
21
+ },
22
+ options
23
+ );
21
24
  return await serveHandler(event.request);
22
25
  };
23
26
  return { POST: handler };
package/svelte.d.mts CHANGED
@@ -1,14 +1,12 @@
1
- import * as _sveltejs_kit from '@sveltejs/kit';
2
1
  import { RequestHandler } from '@sveltejs/kit';
3
- import { R as RouteFunction, j as PublicServeOptions, t as InvokableWorkflow } from './types-C7Y7WUQd.mjs';
4
- import { s as serveManyBase } from './serve-many-BlBvXfBS.mjs';
2
+ import { R as RouteFunction, k as PublicServeOptions } from './types-B62AnIU3.mjs';
5
3
  import '@upstash/qstash';
6
4
  import 'zod';
7
5
  import 'ai';
8
6
  import '@ai-sdk/openai';
9
7
 
10
8
  /**
11
- * Serve method to serve a Upstash Workflow in a Svelte project
9
+ * Serve method to serve a Upstash Workflow in a Nextjs project
12
10
  *
13
11
  * See for options https://upstash.com/docs/qstash/workflows/basics/serve
14
12
  *
@@ -16,16 +14,10 @@ import '@ai-sdk/openai';
16
14
  * @param options workflow options
17
15
  * @returns
18
16
  */
19
- declare const serve: <TInitialPayload = unknown, TResult = unknown>(routeFunction: RouteFunction<TInitialPayload, TResult>, options: PublicServeOptions<TInitialPayload> & {
17
+ declare const serve: <TInitialPayload = unknown>(routeFunction: RouteFunction<TInitialPayload>, options: PublicServeOptions<TInitialPayload> & {
20
18
  env: PublicServeOptions["env"];
21
19
  }) => {
22
20
  POST: RequestHandler;
23
21
  };
24
- declare const createWorkflow: <TInitialPayload, TResult>(routeFunction: RouteFunction<TInitialPayload, TResult>, options: PublicServeOptions<TInitialPayload> & {
25
- env: PublicServeOptions["env"];
26
- }) => InvokableWorkflow<TInitialPayload, TResult, Parameters<ReturnType<typeof serve<TInitialPayload, TResult>>["POST"]>>;
27
- declare const serveMany: (workflows: Parameters<typeof serveManyBase>[0]["workflows"]) => {
28
- POST: (event: _sveltejs_kit.RequestEvent<Partial<Record<string, string>>, string | null>) => Promise<any>;
29
- };
30
22
 
31
- export { createWorkflow, serve, serveMany };
23
+ export { serve };
package/svelte.d.ts CHANGED
@@ -1,14 +1,12 @@
1
- import * as _sveltejs_kit from '@sveltejs/kit';
2
1
  import { RequestHandler } from '@sveltejs/kit';
3
- import { R as RouteFunction, j as PublicServeOptions, t as InvokableWorkflow } from './types-C7Y7WUQd.js';
4
- import { s as serveManyBase } from './serve-many-Dw-UUnH6.js';
2
+ import { R as RouteFunction, k as PublicServeOptions } from './types-B62AnIU3.js';
5
3
  import '@upstash/qstash';
6
4
  import 'zod';
7
5
  import 'ai';
8
6
  import '@ai-sdk/openai';
9
7
 
10
8
  /**
11
- * Serve method to serve a Upstash Workflow in a Svelte project
9
+ * Serve method to serve a Upstash Workflow in a Nextjs project
12
10
  *
13
11
  * See for options https://upstash.com/docs/qstash/workflows/basics/serve
14
12
  *
@@ -16,16 +14,10 @@ import '@ai-sdk/openai';
16
14
  * @param options workflow options
17
15
  * @returns
18
16
  */
19
- declare const serve: <TInitialPayload = unknown, TResult = unknown>(routeFunction: RouteFunction<TInitialPayload, TResult>, options: PublicServeOptions<TInitialPayload> & {
17
+ declare const serve: <TInitialPayload = unknown>(routeFunction: RouteFunction<TInitialPayload>, options: PublicServeOptions<TInitialPayload> & {
20
18
  env: PublicServeOptions["env"];
21
19
  }) => {
22
20
  POST: RequestHandler;
23
21
  };
24
- declare const createWorkflow: <TInitialPayload, TResult>(routeFunction: RouteFunction<TInitialPayload, TResult>, options: PublicServeOptions<TInitialPayload> & {
25
- env: PublicServeOptions["env"];
26
- }) => InvokableWorkflow<TInitialPayload, TResult, Parameters<ReturnType<typeof serve<TInitialPayload, TResult>>["POST"]>>;
27
- declare const serveMany: (workflows: Parameters<typeof serveManyBase>[0]["workflows"]) => {
28
- POST: (event: _sveltejs_kit.RequestEvent<Partial<Record<string, string>>, string | null>) => Promise<any>;
29
- };
30
22
 
31
- export { createWorkflow, serve, serveMany };
23
+ export { serve };