@upstash/workflow 0.2.7 → 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/nextjs.js CHANGED
@@ -20,7 +20,11 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // platforms/nextjs.ts
21
21
  var nextjs_exports = {};
22
22
  __export(nextjs_exports, {
23
+ createWorkflow: () => createWorkflow,
24
+ createWorkflowPagesRouter: () => createWorkflowPagesRouter,
23
25
  serve: () => serve,
26
+ serveMany: () => serveMany,
27
+ serveManyPagesRouter: () => serveManyPagesRouter,
24
28
  servePagesRouter: () => servePagesRouter
25
29
  });
26
30
  module.exports = __toCommonJS(nextjs_exports);
@@ -89,7 +93,7 @@ var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
89
93
  var DEFAULT_CONTENT_TYPE = "application/json";
90
94
  var NO_CONCURRENCY = 1;
91
95
  var DEFAULT_RETRIES = 3;
92
- var VERSION = "v0.2.3";
96
+ var VERSION = "v0.2.7";
93
97
  var SDK_TELEMETRY = `@upstash/workflow@${VERSION}`;
94
98
  var TELEMETRY_HEADER_SDK = "Upstash-Telemetry-Sdk";
95
99
  var TELEMETRY_HEADER_FRAMEWORK = "Upstash-Telemetry-Framework";
@@ -136,6 +140,31 @@ var formatWorkflowError = (error) => {
136
140
  };
137
141
  };
138
142
 
143
+ // src/utils.ts
144
+ var NANOID_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_";
145
+ var NANOID_LENGTH = 21;
146
+ function getRandomInt() {
147
+ return Math.floor(Math.random() * NANOID_CHARS.length);
148
+ }
149
+ function nanoid() {
150
+ return Array.from({ length: NANOID_LENGTH }).map(() => NANOID_CHARS[getRandomInt()]).join("");
151
+ }
152
+ function getWorkflowRunId(id) {
153
+ return `wfr_${id ?? nanoid()}`;
154
+ }
155
+ function decodeBase64(base64) {
156
+ try {
157
+ const binString = atob(base64);
158
+ const intArray = Uint8Array.from(binString, (m) => m.codePointAt(0));
159
+ return new TextDecoder().decode(intArray);
160
+ } catch (error) {
161
+ console.warn(
162
+ `Upstash Qstash: Failed while decoding base64 "${base64}". Decoding with atob and returning it instead. ${error}`
163
+ );
164
+ return atob(base64);
165
+ }
166
+ }
167
+
139
168
  // src/context/steps.ts
140
169
  var BaseLazyStep = class {
141
170
  stepName;
@@ -316,6 +345,41 @@ var LazyNotifyStep = class extends LazyFunctionStep {
316
345
  });
317
346
  }
318
347
  };
348
+ var LazyInvokeStep = class extends BaseLazyStep {
349
+ stepType = "Invoke";
350
+ params;
351
+ constructor(stepName, { workflow, body, headers = {}, workflowRunId, retries }) {
352
+ super(stepName);
353
+ this.params = {
354
+ workflow,
355
+ body,
356
+ headers,
357
+ workflowRunId: getWorkflowRunId(workflowRunId),
358
+ retries
359
+ };
360
+ }
361
+ getPlanStep(concurrent, targetStep) {
362
+ return {
363
+ stepId: 0,
364
+ stepName: this.stepName,
365
+ stepType: this.stepType,
366
+ concurrent,
367
+ targetStep
368
+ };
369
+ }
370
+ /**
371
+ * won't be used as it's the server who will add the result step
372
+ * in Invoke step.
373
+ */
374
+ getResultStep(concurrent, stepId) {
375
+ return Promise.resolve({
376
+ stepId,
377
+ stepName: this.stepName,
378
+ stepType: this.stepType,
379
+ concurrent
380
+ });
381
+ }
382
+ };
319
383
 
320
384
  // node_modules/neverthrow/dist/index.es.js
321
385
  var defaultErrorConfig = {
@@ -740,7 +804,8 @@ var StepTypes = [
740
804
  "SleepUntil",
741
805
  "Call",
742
806
  "Wait",
743
- "Notify"
807
+ "Notify",
808
+ "Invoke"
744
809
  ];
745
810
 
746
811
  // src/workflow-requests.ts
@@ -804,8 +869,8 @@ var triggerRouteFunction = async ({
804
869
  debug
805
870
  }) => {
806
871
  try {
807
- await onStep();
808
- await onCleanup();
872
+ const result = await onStep();
873
+ await onCleanup(result);
809
874
  return ok("workflow-finished");
810
875
  } catch (error) {
811
876
  const error_ = error;
@@ -826,14 +891,15 @@ var triggerRouteFunction = async ({
826
891
  }
827
892
  }
828
893
  };
829
- var triggerWorkflowDelete = async (workflowContext, debug, cancel = false) => {
894
+ var triggerWorkflowDelete = async (workflowContext, result, debug, cancel = false) => {
830
895
  await debug?.log("SUBMIT", "SUBMIT_CLEANUP", {
831
896
  deletedWorkflowRunId: workflowContext.workflowRunId
832
897
  });
833
898
  await workflowContext.qstashClient.http.request({
834
899
  path: ["v2", "workflows", "runs", `${workflowContext.workflowRunId}?cancel=${cancel}`],
835
900
  method: "DELETE",
836
- parseResponseAsJson: false
901
+ parseResponseAsJson: false,
902
+ body: JSON.stringify(result)
837
903
  });
838
904
  await debug?.log(
839
905
  "SUBMIT",
@@ -988,11 +1054,14 @@ var getHeaders = ({
988
1054
  callTimeout,
989
1055
  telemetry
990
1056
  }) => {
1057
+ const contentType = (userHeaders ? userHeaders.get("Content-Type") : void 0) ?? DEFAULT_CONTENT_TYPE;
991
1058
  const baseHeaders = {
992
1059
  [WORKFLOW_INIT_HEADER]: initHeaderValue,
993
1060
  [WORKFLOW_ID_HEADER]: workflowRunId,
994
1061
  [WORKFLOW_URL_HEADER]: workflowUrl,
995
1062
  [WORKFLOW_FEATURE_HEADER]: "LazyFetch,InitialBody",
1063
+ [WORKFLOW_PROTOCOL_VERSION_HEADER]: WORKFLOW_PROTOCOL_VERSION,
1064
+ "content-type": contentType,
996
1065
  ...telemetry ? getTelemetryHeaders(telemetry) : {}
997
1066
  };
998
1067
  if (!step?.callUrl) {
@@ -1007,6 +1076,9 @@ var getHeaders = ({
1007
1076
  baseHeaders["Upstash-Failure-Callback"] = failureUrl;
1008
1077
  }
1009
1078
  }
1079
+ if (step?.stepType === "Invoke") {
1080
+ baseHeaders["upstash-workflow-invoke"] = "true";
1081
+ }
1010
1082
  if (step?.callUrl) {
1011
1083
  baseHeaders["Upstash-Retries"] = callRetries?.toString() ?? "0";
1012
1084
  baseHeaders[WORKFLOW_FEATURE_HEADER] = "WF_NoDelete,InitialBody";
@@ -1028,7 +1100,6 @@ var getHeaders = ({
1028
1100
  baseHeaders[`Upstash-Failure-Callback-Forward-${header}`] = userHeaders.get(header);
1029
1101
  }
1030
1102
  }
1031
- const contentType = (userHeaders ? userHeaders.get("Content-Type") : void 0) ?? DEFAULT_CONTENT_TYPE;
1032
1103
  if (step?.callHeaders) {
1033
1104
  const forwardedHeaders = Object.fromEntries(
1034
1105
  Object.entries(step.callHeaders).map(([header, value]) => [
@@ -1078,8 +1149,7 @@ var getHeaders = ({
1078
1149
  "Upstash-Workflow-Runid": [workflowRunId],
1079
1150
  [WORKFLOW_INIT_HEADER]: ["false"],
1080
1151
  [WORKFLOW_URL_HEADER]: [workflowUrl],
1081
- "Upstash-Workflow-CallType": ["step"],
1082
- "Content-Type": [contentType]
1152
+ "Upstash-Workflow-CallType": ["step"]
1083
1153
  }
1084
1154
  };
1085
1155
  }
@@ -1374,7 +1444,23 @@ var AutoExecutor = class _AutoExecutor {
1374
1444
  method: "POST",
1375
1445
  parseResponseAsJson: false
1376
1446
  });
1377
- throw new WorkflowAbort(steps[0].stepName, steps[0]);
1447
+ throw new WorkflowAbort(waitStep.stepName, waitStep);
1448
+ }
1449
+ if (steps.length === 1 && lazySteps[0] instanceof LazyInvokeStep) {
1450
+ const invokeStep = steps[0];
1451
+ const lazyInvokeStep = lazySteps[0];
1452
+ await lazyInvokeStep.params.workflow.callback(
1453
+ {
1454
+ body: lazyInvokeStep.params.body,
1455
+ headers: lazyInvokeStep.params.headers,
1456
+ workflowRunId: lazyInvokeStep.params.workflowRunId,
1457
+ workflow: lazyInvokeStep.params.workflow,
1458
+ retries: lazyInvokeStep.params.retries
1459
+ },
1460
+ invokeStep,
1461
+ this.context
1462
+ );
1463
+ throw new WorkflowAbort(invokeStep.stepName, invokeStep);
1378
1464
  }
1379
1465
  const result = await this.context.qstashClient.batchJSON(
1380
1466
  steps.map((singleStep, index) => {
@@ -2291,6 +2377,13 @@ var WorkflowContext = class {
2291
2377
  return result;
2292
2378
  }
2293
2379
  }
2380
+ async invoke(stepName, settings) {
2381
+ const result = await this.addStep(new LazyInvokeStep(stepName, settings));
2382
+ return {
2383
+ ...result,
2384
+ body: result.body ? JSON.parse(result.body) : void 0
2385
+ };
2386
+ }
2294
2387
  /**
2295
2388
  * Cancel the current workflow run
2296
2389
  *
@@ -2368,31 +2461,6 @@ var WorkflowLogger = class _WorkflowLogger {
2368
2461
  }
2369
2462
  };
2370
2463
 
2371
- // src/utils.ts
2372
- var NANOID_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_";
2373
- var NANOID_LENGTH = 21;
2374
- function getRandomInt() {
2375
- return Math.floor(Math.random() * NANOID_CHARS.length);
2376
- }
2377
- function nanoid() {
2378
- return Array.from({ length: NANOID_LENGTH }).map(() => NANOID_CHARS[getRandomInt()]).join("");
2379
- }
2380
- function getWorkflowRunId(id) {
2381
- return `wfr_${id ?? nanoid()}`;
2382
- }
2383
- function decodeBase64(base64) {
2384
- try {
2385
- const binString = atob(base64);
2386
- const intArray = Uint8Array.from(binString, (m) => m.codePointAt(0));
2387
- return new TextDecoder().decode(intArray);
2388
- } catch (error) {
2389
- console.warn(
2390
- `Upstash Qstash: Failed while decoding base64 "${base64}". Decoding with atob and returning it instead. ${error}`
2391
- );
2392
- return atob(base64);
2393
- }
2394
- }
2395
-
2396
2464
  // src/serve/authorization.ts
2397
2465
  var import_qstash8 = require("@upstash/qstash");
2398
2466
  var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowContext {
@@ -2838,8 +2906,8 @@ var serveBase = (routeFunction, telemetry, options) => {
2838
2906
  } else if (callReturnCheck.value === "continue-workflow") {
2839
2907
  const result = isFirstInvocation ? await triggerFirstInvocation({ workflowContext, useJSONContent, telemetry, debug }) : await triggerRouteFunction({
2840
2908
  onStep: async () => routeFunction(workflowContext),
2841
- onCleanup: async () => {
2842
- await triggerWorkflowDelete(workflowContext, debug);
2909
+ onCleanup: async (result2) => {
2910
+ await triggerWorkflowDelete(workflowContext, result2, debug);
2843
2911
  },
2844
2912
  onCancel: async () => {
2845
2913
  await makeCancelRequest(workflowContext.qstashClient.http, workflowRunId);
@@ -2871,15 +2939,106 @@ var serveBase = (routeFunction, telemetry, options) => {
2871
2939
  return { handler: safeHandler };
2872
2940
  };
2873
2941
 
2942
+ // src/serve/serve-many.ts
2943
+ var serveManyBase = ({
2944
+ workflows,
2945
+ getWorkflowId
2946
+ }) => {
2947
+ const workflowIds = [];
2948
+ const workflowMap = Object.fromEntries(
2949
+ Object.entries(workflows).map((workflow) => {
2950
+ const workflowId = workflow[0];
2951
+ if (workflowIds.includes(workflowId)) {
2952
+ throw new WorkflowError(
2953
+ `Duplicate workflow name found: '${workflowId}'. Please set different workflow names in serveMany.`
2954
+ );
2955
+ }
2956
+ if (workflowId.includes("/")) {
2957
+ throw new WorkflowError(
2958
+ `Invalid workflow name found: '${workflowId}'. Workflow name cannot contain '/'.`
2959
+ );
2960
+ }
2961
+ workflowIds.push(workflowId);
2962
+ workflow[1].workflowId = workflowId;
2963
+ return [workflowId, workflow[1].handler];
2964
+ })
2965
+ );
2966
+ return {
2967
+ handler: async (...params) => {
2968
+ const pickedWorkflowId = getWorkflowId(...params);
2969
+ if (!pickedWorkflowId) {
2970
+ throw new WorkflowError(`Unexpected request in serveMany. workflowId not set. Please update the URL of your request.`);
2971
+ }
2972
+ const workflow = workflowMap[pickedWorkflowId];
2973
+ if (!workflow) {
2974
+ throw new WorkflowError(`No workflows in serveMany found for '${pickedWorkflowId}'. Please update the URL of your request.`);
2975
+ }
2976
+ return await workflow(...params);
2977
+ }
2978
+ };
2979
+ };
2980
+ var createInvokeCallback = (telemetry) => {
2981
+ const invokeCallback = async (settings, invokeStep, context) => {
2982
+ const { body, workflow, headers = {}, workflowRunId = getWorkflowRunId(), retries } = settings;
2983
+ const { workflowId } = workflow;
2984
+ if (!workflowId) {
2985
+ throw new WorkflowError("You can only invoke workflow which has a workflowId");
2986
+ }
2987
+ const { headers: invokerHeaders } = getHeaders({
2988
+ initHeaderValue: "false",
2989
+ workflowRunId: context.workflowRunId,
2990
+ workflowUrl: context.url,
2991
+ userHeaders: context.headers,
2992
+ failureUrl: context.failureUrl,
2993
+ retries: context.retries,
2994
+ telemetry
2995
+ });
2996
+ invokerHeaders["Upstash-Workflow-Runid"] = context.workflowRunId;
2997
+ const newUrl = context.url.replace(/[^/]+$/, workflowId);
2998
+ const { headers: triggerHeaders } = getHeaders({
2999
+ initHeaderValue: "true",
3000
+ workflowRunId,
3001
+ workflowUrl: newUrl,
3002
+ userHeaders: new Headers(headers),
3003
+ retries,
3004
+ telemetry
3005
+ });
3006
+ triggerHeaders["Upstash-Workflow-Invoke"] = "true";
3007
+ const request = {
3008
+ body: JSON.stringify(body),
3009
+ headers: Object.fromEntries(
3010
+ Object.entries(invokerHeaders).map((pairs) => [pairs[0], [pairs[1]]])
3011
+ ),
3012
+ workflowRunId,
3013
+ workflowUrl: context.url,
3014
+ step: invokeStep
3015
+ };
3016
+ await context.qstashClient.publish({
3017
+ headers: triggerHeaders,
3018
+ method: "POST",
3019
+ body: JSON.stringify(request),
3020
+ url: newUrl
3021
+ });
3022
+ return void 0;
3023
+ };
3024
+ return invokeCallback;
3025
+ };
3026
+
2874
3027
  // platforms/nextjs.ts
3028
+ var appTelemetry = {
3029
+ sdk: SDK_TELEMETRY,
3030
+ framework: "nextjs",
3031
+ runtime: `node@${process.version}`
3032
+ };
3033
+ var pagesTelemetry = {
3034
+ sdk: SDK_TELEMETRY,
3035
+ framework: "nextjs-pages",
3036
+ runtime: process.versions.bun ? `bun@${process.versions.bun}/node@${process.version}` : `node@${process.version}`
3037
+ };
2875
3038
  var serve = (routeFunction, options) => {
2876
3039
  const { handler: serveHandler } = serveBase(
2877
3040
  routeFunction,
2878
- {
2879
- sdk: SDK_TELEMETRY,
2880
- framework: "nextjs",
2881
- runtime: `node@${process.version}`
2882
- },
3041
+ appTelemetry,
2883
3042
  options
2884
3043
  );
2885
3044
  return {
@@ -2888,16 +3047,27 @@ var serve = (routeFunction, options) => {
2888
3047
  }
2889
3048
  };
2890
3049
  };
3050
+ var createWorkflow = (...params) => {
3051
+ const { POST } = serve(...params);
3052
+ return {
3053
+ callback: createInvokeCallback(appTelemetry),
3054
+ handler: POST,
3055
+ workflowId: void 0
3056
+ };
3057
+ };
3058
+ var serveMany = (workflows) => {
3059
+ return {
3060
+ POST: serveManyBase({
3061
+ workflows,
3062
+ getWorkflowId(params) {
3063
+ const components = params.url.split("/");
3064
+ return components[components.length - 1];
3065
+ }
3066
+ }).handler
3067
+ };
3068
+ };
2891
3069
  var servePagesRouter = (routeFunction, options) => {
2892
- const { handler: serveHandler } = serveBase(
2893
- routeFunction,
2894
- {
2895
- sdk: SDK_TELEMETRY,
2896
- framework: "nextjs-pages",
2897
- runtime: process.versions.bun ? `bun@${process.versions.bun}/node@${process.version}` : `node@${process.version}`
2898
- },
2899
- options
2900
- );
3070
+ const { handler: serveHandler } = serveBase(routeFunction, pagesTelemetry, options);
2901
3071
  const handler = async (request_, res) => {
2902
3072
  if (request_.method?.toUpperCase() !== "POST") {
2903
3073
  res.status(405).json("Only POST requests are allowed in worklfows");
@@ -2916,10 +3086,37 @@ var servePagesRouter = (routeFunction, options) => {
2916
3086
  const response = await serveHandler(request);
2917
3087
  res.status(response.status).json(await response.json());
2918
3088
  };
2919
- return { handler };
3089
+ return {
3090
+ handler
3091
+ };
3092
+ };
3093
+ var createWorkflowPagesRouter = (...params) => {
3094
+ const { handler } = servePagesRouter(...params);
3095
+ return {
3096
+ callback: createInvokeCallback(pagesTelemetry),
3097
+ handler,
3098
+ workflowId: void 0
3099
+ };
3100
+ };
3101
+ var serveManyPagesRouter = (workflows) => {
3102
+ return serveManyBase({
3103
+ workflows,
3104
+ getWorkflowId(request_) {
3105
+ const protocol = request_.headers["x-forwarded-proto"];
3106
+ const host = request_.headers.host;
3107
+ const baseUrl = `${protocol}://${host}`;
3108
+ const url = `${baseUrl}${request_.url}`;
3109
+ const components = url.split("/");
3110
+ return components[components.length - 1];
3111
+ }
3112
+ });
2920
3113
  };
2921
3114
  // Annotate the CommonJS export names for ESM import in node:
2922
3115
  0 && (module.exports = {
3116
+ createWorkflow,
3117
+ createWorkflowPagesRouter,
2923
3118
  serve,
3119
+ serveMany,
3120
+ serveManyPagesRouter,
2924
3121
  servePagesRouter
2925
3122
  });
package/nextjs.mjs CHANGED
@@ -1,17 +1,27 @@
1
+ import {
2
+ createInvokeCallback,
3
+ serveManyBase
4
+ } from "./chunk-LCZMBGEM.mjs";
1
5
  import {
2
6
  SDK_TELEMETRY,
3
7
  serveBase
4
- } from "./chunk-U6XFLG7W.mjs";
8
+ } from "./chunk-IWAW7GIG.mjs";
5
9
 
6
10
  // platforms/nextjs.ts
11
+ var appTelemetry = {
12
+ sdk: SDK_TELEMETRY,
13
+ framework: "nextjs",
14
+ runtime: `node@${process.version}`
15
+ };
16
+ var pagesTelemetry = {
17
+ sdk: SDK_TELEMETRY,
18
+ framework: "nextjs-pages",
19
+ runtime: process.versions.bun ? `bun@${process.versions.bun}/node@${process.version}` : `node@${process.version}`
20
+ };
7
21
  var serve = (routeFunction, options) => {
8
22
  const { handler: serveHandler } = serveBase(
9
23
  routeFunction,
10
- {
11
- sdk: SDK_TELEMETRY,
12
- framework: "nextjs",
13
- runtime: `node@${process.version}`
14
- },
24
+ appTelemetry,
15
25
  options
16
26
  );
17
27
  return {
@@ -20,16 +30,27 @@ var serve = (routeFunction, options) => {
20
30
  }
21
31
  };
22
32
  };
33
+ var createWorkflow = (...params) => {
34
+ const { POST } = serve(...params);
35
+ return {
36
+ callback: createInvokeCallback(appTelemetry),
37
+ handler: POST,
38
+ workflowId: void 0
39
+ };
40
+ };
41
+ var serveMany = (workflows) => {
42
+ return {
43
+ POST: serveManyBase({
44
+ workflows,
45
+ getWorkflowId(params) {
46
+ const components = params.url.split("/");
47
+ return components[components.length - 1];
48
+ }
49
+ }).handler
50
+ };
51
+ };
23
52
  var servePagesRouter = (routeFunction, options) => {
24
- const { handler: serveHandler } = serveBase(
25
- routeFunction,
26
- {
27
- sdk: SDK_TELEMETRY,
28
- framework: "nextjs-pages",
29
- runtime: process.versions.bun ? `bun@${process.versions.bun}/node@${process.version}` : `node@${process.version}`
30
- },
31
- options
32
- );
53
+ const { handler: serveHandler } = serveBase(routeFunction, pagesTelemetry, options);
33
54
  const handler = async (request_, res) => {
34
55
  if (request_.method?.toUpperCase() !== "POST") {
35
56
  res.status(405).json("Only POST requests are allowed in worklfows");
@@ -48,9 +69,36 @@ var servePagesRouter = (routeFunction, options) => {
48
69
  const response = await serveHandler(request);
49
70
  res.status(response.status).json(await response.json());
50
71
  };
51
- return { handler };
72
+ return {
73
+ handler
74
+ };
75
+ };
76
+ var createWorkflowPagesRouter = (...params) => {
77
+ const { handler } = servePagesRouter(...params);
78
+ return {
79
+ callback: createInvokeCallback(pagesTelemetry),
80
+ handler,
81
+ workflowId: void 0
82
+ };
83
+ };
84
+ var serveManyPagesRouter = (workflows) => {
85
+ return serveManyBase({
86
+ workflows,
87
+ getWorkflowId(request_) {
88
+ const protocol = request_.headers["x-forwarded-proto"];
89
+ const host = request_.headers.host;
90
+ const baseUrl = `${protocol}://${host}`;
91
+ const url = `${baseUrl}${request_.url}`;
92
+ const components = url.split("/");
93
+ return components[components.length - 1];
94
+ }
95
+ });
52
96
  };
53
97
  export {
98
+ createWorkflow,
99
+ createWorkflowPagesRouter,
54
100
  serve,
101
+ serveMany,
102
+ serveManyPagesRouter,
55
103
  servePagesRouter
56
104
  };
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@upstash/workflow","version":"v0.2.7","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":{"@ai-sdk/openai":"^1.0.15","@upstash/qstash":"^2.7.20","ai":"^4.0.30","zod":"^3.24.1"},"directories":{"example":"examples"}}
1
+ {"name":"@upstash/workflow","version":"v0.2.8-rc-invoke","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.20","husky":"^9.1.6","next":"^14.2.14","prettier":"3.3.3","tsup":"^8.3.0","typescript":"^5.7.2","typescript-eslint":"^8.18.0"},"dependencies":{"@ai-sdk/openai":"^1.0.15","@upstash/qstash":"^2.7.20","ai":"^4.0.30","zod":"^3.24.1"},"directories":{"example":"examples"}}
@@ -0,0 +1,10 @@
1
+ import { t as InvokableWorkflow } from './types-C7Y7WUQd.mjs';
2
+
3
+ declare const serveManyBase: <TServe extends (...params: any[]) => any, THandlerParams extends Parameters<TServe> = Parameters<TServe>, TInvokableWorkflow extends InvokableWorkflow<any, any, THandlerParams> = InvokableWorkflow<any, any, THandlerParams>>({ workflows, getWorkflowId, }: {
4
+ workflows: Record<string, TInvokableWorkflow>;
5
+ getWorkflowId: (...params: THandlerParams) => string;
6
+ }) => {
7
+ handler: (...params: THandlerParams) => Promise<any>;
8
+ };
9
+
10
+ export { serveManyBase as s };
@@ -0,0 +1,10 @@
1
+ import { t as InvokableWorkflow } from './types-C7Y7WUQd.js';
2
+
3
+ declare const serveManyBase: <TServe extends (...params: any[]) => any, THandlerParams extends Parameters<TServe> = Parameters<TServe>, TInvokableWorkflow extends InvokableWorkflow<any, any, THandlerParams> = InvokableWorkflow<any, any, THandlerParams>>({ workflows, getWorkflowId, }: {
4
+ workflows: Record<string, TInvokableWorkflow>;
5
+ getWorkflowId: (...params: THandlerParams) => string;
6
+ }) => {
7
+ handler: (...params: THandlerParams) => Promise<any>;
8
+ };
9
+
10
+ export { serveManyBase as s };
package/solidjs.d.mts CHANGED
@@ -1,12 +1,12 @@
1
1
  import { APIEvent } from '@solidjs/start/server';
2
- import { R as RouteFunction, j as PublicServeOptions } from './types-Cuqlx2Cr.mjs';
2
+ import { R as RouteFunction, j as PublicServeOptions } from './types-C7Y7WUQd.mjs';
3
3
  import '@upstash/qstash';
4
4
  import 'zod';
5
5
  import 'ai';
6
6
  import '@ai-sdk/openai';
7
7
 
8
8
  /**
9
- * Serve method to serve a Upstash Workflow in a Nextjs project
9
+ * Serve method to serve a Upstash Workflow in a SolidJS project
10
10
  *
11
11
  * See for options https://upstash.com/docs/qstash/workflows/basics/serve
12
12
  *
@@ -14,7 +14,7 @@ import '@ai-sdk/openai';
14
14
  * @param options workflow options
15
15
  * @returns
16
16
  */
17
- declare const serve: <TInitialPayload = unknown>(routeFunction: RouteFunction<TInitialPayload>, options?: PublicServeOptions<TInitialPayload>) => {
17
+ declare const serve: <TInitialPayload = unknown, TResult = unknown>(routeFunction: RouteFunction<TInitialPayload, TResult>, options?: PublicServeOptions<TInitialPayload>) => {
18
18
  POST: (event: APIEvent) => Promise<Response>;
19
19
  };
20
20
 
package/solidjs.d.ts CHANGED
@@ -1,12 +1,12 @@
1
1
  import { APIEvent } from '@solidjs/start/server';
2
- import { R as RouteFunction, j as PublicServeOptions } from './types-Cuqlx2Cr.js';
2
+ import { R as RouteFunction, j as PublicServeOptions } from './types-C7Y7WUQd.js';
3
3
  import '@upstash/qstash';
4
4
  import 'zod';
5
5
  import 'ai';
6
6
  import '@ai-sdk/openai';
7
7
 
8
8
  /**
9
- * Serve method to serve a Upstash Workflow in a Nextjs project
9
+ * Serve method to serve a Upstash Workflow in a SolidJS project
10
10
  *
11
11
  * See for options https://upstash.com/docs/qstash/workflows/basics/serve
12
12
  *
@@ -14,7 +14,7 @@ import '@ai-sdk/openai';
14
14
  * @param options workflow options
15
15
  * @returns
16
16
  */
17
- declare const serve: <TInitialPayload = unknown>(routeFunction: RouteFunction<TInitialPayload>, options?: PublicServeOptions<TInitialPayload>) => {
17
+ declare const serve: <TInitialPayload = unknown, TResult = unknown>(routeFunction: RouteFunction<TInitialPayload, TResult>, options?: PublicServeOptions<TInitialPayload>) => {
18
18
  POST: (event: APIEvent) => Promise<Response>;
19
19
  };
20
20