@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/astro.d.mts CHANGED
@@ -1,17 +1,12 @@
1
1
  import { APIContext, APIRoute } from 'astro';
2
- import { b as WorkflowContext, j as PublicServeOptions, t as InvokableWorkflow } from './types-C7Y7WUQd.mjs';
3
- import { s as serveManyBase } from './serve-many-BlBvXfBS.mjs';
2
+ import { e as WorkflowContext, k as PublicServeOptions } from './types-B62AnIU3.mjs';
4
3
  import '@upstash/qstash';
5
4
  import 'zod';
6
5
  import 'ai';
7
6
  import '@ai-sdk/openai';
8
7
 
9
- declare function serve<TInitialPayload = unknown, TResult = unknown>(routeFunction: (workflowContext: WorkflowContext<TInitialPayload>, apiContext: APIContext) => Promise<TResult>, options?: PublicServeOptions<TInitialPayload>): {
8
+ declare function serve<TInitialPayload = unknown>(routeFunction: (workflowContext: WorkflowContext<TInitialPayload>, apiContext: APIContext) => Promise<void>, options?: PublicServeOptions<TInitialPayload>): {
10
9
  POST: APIRoute;
11
10
  };
12
- declare const createWorkflow: <TInitialPayload, TResult>(routeFunction: (workflowContext: WorkflowContext<TInitialPayload>, apiContext: APIContext) => Promise<TResult>, options?: PublicServeOptions<TInitialPayload> | undefined) => InvokableWorkflow<TInitialPayload, TResult, Parameters<ReturnType<typeof serve<TInitialPayload, TResult>>["POST"]>>;
13
- declare const serveMany: (workflows: Parameters<typeof serveManyBase>[0]["workflows"]) => {
14
- POST: (context: APIContext<Record<string, any>, Record<string, string | undefined>>) => Promise<any>;
15
- };
16
11
 
17
- export { createWorkflow, serve, serveMany };
12
+ export { serve };
package/astro.d.ts CHANGED
@@ -1,17 +1,12 @@
1
1
  import { APIContext, APIRoute } from 'astro';
2
- import { b as WorkflowContext, j as PublicServeOptions, t as InvokableWorkflow } from './types-C7Y7WUQd.js';
3
- import { s as serveManyBase } from './serve-many-Dw-UUnH6.js';
2
+ import { e as WorkflowContext, k as PublicServeOptions } from './types-B62AnIU3.js';
4
3
  import '@upstash/qstash';
5
4
  import 'zod';
6
5
  import 'ai';
7
6
  import '@ai-sdk/openai';
8
7
 
9
- declare function serve<TInitialPayload = unknown, TResult = unknown>(routeFunction: (workflowContext: WorkflowContext<TInitialPayload>, apiContext: APIContext) => Promise<TResult>, options?: PublicServeOptions<TInitialPayload>): {
8
+ declare function serve<TInitialPayload = unknown>(routeFunction: (workflowContext: WorkflowContext<TInitialPayload>, apiContext: APIContext) => Promise<void>, options?: PublicServeOptions<TInitialPayload>): {
10
9
  POST: APIRoute;
11
10
  };
12
- declare const createWorkflow: <TInitialPayload, TResult>(routeFunction: (workflowContext: WorkflowContext<TInitialPayload>, apiContext: APIContext) => Promise<TResult>, options?: PublicServeOptions<TInitialPayload> | undefined) => InvokableWorkflow<TInitialPayload, TResult, Parameters<ReturnType<typeof serve<TInitialPayload, TResult>>["POST"]>>;
13
- declare const serveMany: (workflows: Parameters<typeof serveManyBase>[0]["workflows"]) => {
14
- POST: (context: APIContext<Record<string, any>, Record<string, string | undefined>>) => Promise<any>;
15
- };
16
11
 
17
- export { createWorkflow, serve, serveMany };
12
+ export { serve };
package/astro.js CHANGED
@@ -20,9 +20,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // platforms/astro.ts
21
21
  var astro_exports = {};
22
22
  __export(astro_exports, {
23
- createWorkflow: () => createWorkflow,
24
- serve: () => serve,
25
- serveMany: () => serveMany
23
+ serve: () => serve
26
24
  });
27
25
  module.exports = __toCommonJS(astro_exports);
28
26
 
@@ -90,7 +88,7 @@ var WORKFLOW_PROTOCOL_VERSION_HEADER = "Upstash-Workflow-Sdk-Version";
90
88
  var DEFAULT_CONTENT_TYPE = "application/json";
91
89
  var NO_CONCURRENCY = 1;
92
90
  var DEFAULT_RETRIES = 3;
93
- var VERSION = "v0.2.7";
91
+ var VERSION = "v0.2.3";
94
92
  var SDK_TELEMETRY = `@upstash/workflow@${VERSION}`;
95
93
  var TELEMETRY_HEADER_SDK = "Upstash-Telemetry-Sdk";
96
94
  var TELEMETRY_HEADER_FRAMEWORK = "Upstash-Telemetry-Framework";
@@ -137,31 +135,6 @@ var formatWorkflowError = (error) => {
137
135
  };
138
136
  };
139
137
 
140
- // src/utils.ts
141
- var NANOID_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_";
142
- var NANOID_LENGTH = 21;
143
- function getRandomInt() {
144
- return Math.floor(Math.random() * NANOID_CHARS.length);
145
- }
146
- function nanoid() {
147
- return Array.from({ length: NANOID_LENGTH }).map(() => NANOID_CHARS[getRandomInt()]).join("");
148
- }
149
- function getWorkflowRunId(id) {
150
- return `wfr_${id ?? nanoid()}`;
151
- }
152
- function decodeBase64(base64) {
153
- try {
154
- const binString = atob(base64);
155
- const intArray = Uint8Array.from(binString, (m) => m.codePointAt(0));
156
- return new TextDecoder().decode(intArray);
157
- } catch (error) {
158
- console.warn(
159
- `Upstash Qstash: Failed while decoding base64 "${base64}". Decoding with atob and returning it instead. ${error}`
160
- );
161
- return atob(base64);
162
- }
163
- }
164
-
165
138
  // src/context/steps.ts
166
139
  var BaseLazyStep = class {
167
140
  stepName;
@@ -342,41 +315,6 @@ var LazyNotifyStep = class extends LazyFunctionStep {
342
315
  });
343
316
  }
344
317
  };
345
- var LazyInvokeStep = class extends BaseLazyStep {
346
- stepType = "Invoke";
347
- params;
348
- constructor(stepName, { workflow, body, headers = {}, workflowRunId, retries }) {
349
- super(stepName);
350
- this.params = {
351
- workflow,
352
- body,
353
- headers,
354
- workflowRunId: getWorkflowRunId(workflowRunId),
355
- retries
356
- };
357
- }
358
- getPlanStep(concurrent, targetStep) {
359
- return {
360
- stepId: 0,
361
- stepName: this.stepName,
362
- stepType: this.stepType,
363
- concurrent,
364
- targetStep
365
- };
366
- }
367
- /**
368
- * won't be used as it's the server who will add the result step
369
- * in Invoke step.
370
- */
371
- getResultStep(concurrent, stepId) {
372
- return Promise.resolve({
373
- stepId,
374
- stepName: this.stepName,
375
- stepType: this.stepType,
376
- concurrent
377
- });
378
- }
379
- };
380
318
 
381
319
  // node_modules/neverthrow/dist/index.es.js
382
320
  var defaultErrorConfig = {
@@ -801,8 +739,7 @@ var StepTypes = [
801
739
  "SleepUntil",
802
740
  "Call",
803
741
  "Wait",
804
- "Notify",
805
- "Invoke"
742
+ "Notify"
806
743
  ];
807
744
 
808
745
  // src/workflow-requests.ts
@@ -810,7 +747,7 @@ var import_qstash3 = require("@upstash/qstash");
810
747
  var triggerFirstInvocation = async ({
811
748
  workflowContext,
812
749
  useJSONContent,
813
- telemetry: telemetry2,
750
+ telemetry,
814
751
  debug
815
752
  }) => {
816
753
  const { headers } = getHeaders({
@@ -820,7 +757,7 @@ var triggerFirstInvocation = async ({
820
757
  userHeaders: workflowContext.headers,
821
758
  failureUrl: workflowContext.failureUrl,
822
759
  retries: workflowContext.retries,
823
- telemetry: telemetry2
760
+ telemetry
824
761
  });
825
762
  if (workflowContext.headers.get("content-type")) {
826
763
  headers["content-type"] = workflowContext.headers.get("content-type");
@@ -866,8 +803,8 @@ var triggerRouteFunction = async ({
866
803
  debug
867
804
  }) => {
868
805
  try {
869
- const result = await onStep();
870
- await onCleanup(result);
806
+ await onStep();
807
+ await onCleanup();
871
808
  return ok("workflow-finished");
872
809
  } catch (error) {
873
810
  const error_ = error;
@@ -888,15 +825,14 @@ var triggerRouteFunction = async ({
888
825
  }
889
826
  }
890
827
  };
891
- var triggerWorkflowDelete = async (workflowContext, result, debug, cancel = false) => {
828
+ var triggerWorkflowDelete = async (workflowContext, debug, cancel = false) => {
892
829
  await debug?.log("SUBMIT", "SUBMIT_CLEANUP", {
893
830
  deletedWorkflowRunId: workflowContext.workflowRunId
894
831
  });
895
832
  await workflowContext.qstashClient.http.request({
896
833
  path: ["v2", "workflows", "runs", `${workflowContext.workflowRunId}?cancel=${cancel}`],
897
834
  method: "DELETE",
898
- parseResponseAsJson: false,
899
- body: JSON.stringify(result)
835
+ parseResponseAsJson: false
900
836
  });
901
837
  await debug?.log(
902
838
  "SUBMIT",
@@ -925,7 +861,7 @@ var handleThirdPartyCallResult = async ({
925
861
  workflowUrl,
926
862
  failureUrl,
927
863
  retries,
928
- telemetry: telemetry2,
864
+ telemetry,
929
865
  debug
930
866
  }) => {
931
867
  try {
@@ -993,7 +929,7 @@ ${atob(callbackMessage.body ?? "")}`
993
929
  userHeaders,
994
930
  failureUrl,
995
931
  retries,
996
- telemetry: telemetry2
932
+ telemetry
997
933
  });
998
934
  const callResponse = {
999
935
  status: callbackMessage.status,
@@ -1032,11 +968,11 @@ ${atob(callbackMessage.body ?? "")}`
1032
968
  );
1033
969
  }
1034
970
  };
1035
- var getTelemetryHeaders = (telemetry2) => {
971
+ var getTelemetryHeaders = (telemetry) => {
1036
972
  return {
1037
- [TELEMETRY_HEADER_SDK]: telemetry2.sdk,
1038
- [TELEMETRY_HEADER_FRAMEWORK]: telemetry2.framework,
1039
- [TELEMETRY_HEADER_RUNTIME]: telemetry2.runtime ?? "unknown"
973
+ [TELEMETRY_HEADER_SDK]: telemetry.sdk,
974
+ [TELEMETRY_HEADER_FRAMEWORK]: telemetry.framework,
975
+ [TELEMETRY_HEADER_RUNTIME]: telemetry.runtime ?? "unknown"
1040
976
  };
1041
977
  };
1042
978
  var getHeaders = ({
@@ -1049,17 +985,14 @@ var getHeaders = ({
1049
985
  step,
1050
986
  callRetries,
1051
987
  callTimeout,
1052
- telemetry: telemetry2
988
+ telemetry
1053
989
  }) => {
1054
- const contentType = (userHeaders ? userHeaders.get("Content-Type") : void 0) ?? DEFAULT_CONTENT_TYPE;
1055
990
  const baseHeaders = {
1056
991
  [WORKFLOW_INIT_HEADER]: initHeaderValue,
1057
992
  [WORKFLOW_ID_HEADER]: workflowRunId,
1058
993
  [WORKFLOW_URL_HEADER]: workflowUrl,
1059
994
  [WORKFLOW_FEATURE_HEADER]: "LazyFetch,InitialBody",
1060
- [WORKFLOW_PROTOCOL_VERSION_HEADER]: WORKFLOW_PROTOCOL_VERSION,
1061
- "content-type": contentType,
1062
- ...telemetry2 ? getTelemetryHeaders(telemetry2) : {}
995
+ ...telemetry ? getTelemetryHeaders(telemetry) : {}
1063
996
  };
1064
997
  if (!step?.callUrl) {
1065
998
  baseHeaders[`Upstash-Forward-${WORKFLOW_PROTOCOL_VERSION_HEADER}`] = WORKFLOW_PROTOCOL_VERSION;
@@ -1069,13 +1002,18 @@ var getHeaders = ({
1069
1002
  }
1070
1003
  if (failureUrl) {
1071
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
+ }
1072
1013
  if (!step?.callUrl) {
1073
1014
  baseHeaders["Upstash-Failure-Callback"] = failureUrl;
1074
1015
  }
1075
1016
  }
1076
- if (step?.stepType === "Invoke") {
1077
- baseHeaders["upstash-workflow-invoke"] = "true";
1078
- }
1079
1017
  if (step?.callUrl) {
1080
1018
  baseHeaders["Upstash-Retries"] = callRetries?.toString() ?? "0";
1081
1019
  baseHeaders[WORKFLOW_FEATURE_HEADER] = "WF_NoDelete,InitialBody";
@@ -1097,6 +1035,7 @@ var getHeaders = ({
1097
1035
  baseHeaders[`Upstash-Failure-Callback-Forward-${header}`] = userHeaders.get(header);
1098
1036
  }
1099
1037
  }
1038
+ const contentType = (userHeaders ? userHeaders.get("Content-Type") : void 0) ?? DEFAULT_CONTENT_TYPE;
1100
1039
  if (step?.callHeaders) {
1101
1040
  const forwardedHeaders = Object.fromEntries(
1102
1041
  Object.entries(step.callHeaders).map(([header, value]) => [
@@ -1136,8 +1075,8 @@ var getHeaders = ({
1136
1075
  Object.entries(baseHeaders).map(([header, value]) => [header, [value]])
1137
1076
  ),
1138
1077
  // to include telemetry headers:
1139
- ...telemetry2 ? Object.fromEntries(
1140
- Object.entries(getTelemetryHeaders(telemetry2)).map(([header, value]) => [
1078
+ ...telemetry ? Object.fromEntries(
1079
+ Object.entries(getTelemetryHeaders(telemetry)).map(([header, value]) => [
1141
1080
  header,
1142
1081
  [value]
1143
1082
  ])
@@ -1146,7 +1085,8 @@ var getHeaders = ({
1146
1085
  "Upstash-Workflow-Runid": [workflowRunId],
1147
1086
  [WORKFLOW_INIT_HEADER]: ["false"],
1148
1087
  [WORKFLOW_URL_HEADER]: [workflowUrl],
1149
- "Upstash-Workflow-CallType": ["step"]
1088
+ "Upstash-Workflow-CallType": ["step"],
1089
+ "Content-Type": [contentType]
1150
1090
  }
1151
1091
  };
1152
1092
  }
@@ -1192,10 +1132,10 @@ var AutoExecutor = class _AutoExecutor {
1192
1132
  stepCount = 0;
1193
1133
  planStepCount = 0;
1194
1134
  executingStep = false;
1195
- constructor(context, steps, telemetry2, debug) {
1135
+ constructor(context, steps, telemetry, debug) {
1196
1136
  this.context = context;
1197
1137
  this.steps = steps;
1198
- this.telemetry = telemetry2;
1138
+ this.telemetry = telemetry;
1199
1139
  this.debug = debug;
1200
1140
  this.nonPlanStepCount = this.steps.filter((step) => !step.targetStep).length;
1201
1141
  }
@@ -1441,23 +1381,7 @@ var AutoExecutor = class _AutoExecutor {
1441
1381
  method: "POST",
1442
1382
  parseResponseAsJson: false
1443
1383
  });
1444
- throw new WorkflowAbort(waitStep.stepName, waitStep);
1445
- }
1446
- if (steps.length === 1 && lazySteps[0] instanceof LazyInvokeStep) {
1447
- const invokeStep = steps[0];
1448
- const lazyInvokeStep = lazySteps[0];
1449
- await lazyInvokeStep.params.workflow.callback(
1450
- {
1451
- body: lazyInvokeStep.params.body,
1452
- headers: lazyInvokeStep.params.headers,
1453
- workflowRunId: lazyInvokeStep.params.workflowRunId,
1454
- workflow: lazyInvokeStep.params.workflow,
1455
- retries: lazyInvokeStep.params.retries
1456
- },
1457
- invokeStep,
1458
- this.context
1459
- );
1460
- throw new WorkflowAbort(invokeStep.stepName, invokeStep);
1384
+ throw new WorkflowAbort(steps[0].stepName, steps[0]);
1461
1385
  }
1462
1386
  const result = await this.context.qstashClient.batchJSON(
1463
1387
  steps.map((singleStep, index) => {
@@ -1776,9 +1700,10 @@ var wrapTools = ({
1776
1700
  return Object.fromEntries(
1777
1701
  Object.entries(tools).map((toolInfo) => {
1778
1702
  const [toolName, tool3] = toolInfo;
1703
+ const executeAsStep = "executeAsStep" in tool3 ? tool3.executeAsStep : true;
1779
1704
  const aiSDKTool = convertToAISDKTool(tool3);
1780
1705
  const execute = aiSDKTool.execute;
1781
- if (execute) {
1706
+ if (execute && executeAsStep) {
1782
1707
  const wrappedExecute = (...params) => {
1783
1708
  return context.run(`Run tool ${toolName}`, () => execute(...params));
1784
1709
  };
@@ -2143,7 +2068,7 @@ var WorkflowContext = class {
2143
2068
  initialPayload,
2144
2069
  env,
2145
2070
  retries,
2146
- telemetry: telemetry2
2071
+ telemetry
2147
2072
  }) {
2148
2073
  this.qstashClient = qstashClient;
2149
2074
  this.workflowRunId = workflowRunId;
@@ -2154,7 +2079,7 @@ var WorkflowContext = class {
2154
2079
  this.requestPayload = initialPayload;
2155
2080
  this.env = env ?? {};
2156
2081
  this.retries = retries ?? DEFAULT_RETRIES;
2157
- this.executor = new AutoExecutor(this, this.steps, telemetry2, debug);
2082
+ this.executor = new AutoExecutor(this, this.steps, telemetry, debug);
2158
2083
  }
2159
2084
  /**
2160
2085
  * Executes a workflow step
@@ -2374,13 +2299,6 @@ var WorkflowContext = class {
2374
2299
  return result;
2375
2300
  }
2376
2301
  }
2377
- async invoke(stepName, settings) {
2378
- const result = await this.addStep(new LazyInvokeStep(stepName, settings));
2379
- return {
2380
- ...result,
2381
- body: result.body ? JSON.parse(result.body) : void 0
2382
- };
2383
- }
2384
2302
  /**
2385
2303
  * Cancel the current workflow run
2386
2304
  *
@@ -2458,6 +2376,31 @@ var WorkflowLogger = class _WorkflowLogger {
2458
2376
  }
2459
2377
  };
2460
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
+
2461
2404
  // src/serve/authorization.ts
2462
2405
  var import_qstash8 = require("@upstash/qstash");
2463
2406
  var DisabledWorkflowContext = class _DisabledWorkflowContext extends WorkflowContext {
@@ -2795,7 +2738,7 @@ var determineUrls = async (request, url, baseUrl, failureFunction, failureUrl, d
2795
2738
  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`;
2796
2739
 
2797
2740
  // src/serve/index.ts
2798
- var serveBase = (routeFunction, telemetry2, options) => {
2741
+ var serveBase = (routeFunction, telemetry, options) => {
2799
2742
  const {
2800
2743
  qstashClient,
2801
2744
  onStepFinish,
@@ -2811,7 +2754,7 @@ var serveBase = (routeFunction, telemetry2, options) => {
2811
2754
  useJSONContent,
2812
2755
  disableTelemetry
2813
2756
  } = processOptions(options);
2814
- telemetry2 = disableTelemetry ? void 0 : telemetry2;
2757
+ telemetry = disableTelemetry ? void 0 : telemetry;
2815
2758
  const debug = WorkflowLogger.getLogger(verbose);
2816
2759
  const handler = async (request) => {
2817
2760
  await debug?.log("INFO", "ENDPOINT_START");
@@ -2869,7 +2812,7 @@ var serveBase = (routeFunction, telemetry2, options) => {
2869
2812
  debug,
2870
2813
  env,
2871
2814
  retries,
2872
- telemetry: telemetry2
2815
+ telemetry
2873
2816
  });
2874
2817
  const authCheck = await DisabledWorkflowContext.tryAuthentication(
2875
2818
  routeFunction,
@@ -2892,7 +2835,7 @@ var serveBase = (routeFunction, telemetry2, options) => {
2892
2835
  workflowUrl,
2893
2836
  failureUrl: workflowFailureUrl,
2894
2837
  retries,
2895
- telemetry: telemetry2,
2838
+ telemetry,
2896
2839
  debug
2897
2840
  });
2898
2841
  if (callReturnCheck.isErr()) {
@@ -2901,10 +2844,10 @@ var serveBase = (routeFunction, telemetry2, options) => {
2901
2844
  });
2902
2845
  throw callReturnCheck.error;
2903
2846
  } else if (callReturnCheck.value === "continue-workflow") {
2904
- const result = isFirstInvocation ? await triggerFirstInvocation({ workflowContext, useJSONContent, telemetry: telemetry2, debug }) : await triggerRouteFunction({
2847
+ const result = isFirstInvocation ? await triggerFirstInvocation({ workflowContext, useJSONContent, telemetry, debug }) : await triggerRouteFunction({
2905
2848
  onStep: async () => routeFunction(workflowContext),
2906
- onCleanup: async (result2) => {
2907
- await triggerWorkflowDelete(workflowContext, result2, debug);
2849
+ onCleanup: async () => {
2850
+ await triggerWorkflowDelete(workflowContext, debug);
2908
2851
  },
2909
2852
  onCancel: async () => {
2910
2853
  await makeCancelRequest(workflowContext.qstashClient.http, workflowRunId);
@@ -2936,130 +2879,23 @@ var serveBase = (routeFunction, telemetry2, options) => {
2936
2879
  return { handler: safeHandler };
2937
2880
  };
2938
2881
 
2939
- // src/serve/serve-many.ts
2940
- var serveManyBase = ({
2941
- workflows,
2942
- getWorkflowId
2943
- }) => {
2944
- const workflowIds = [];
2945
- const workflowMap = Object.fromEntries(
2946
- Object.entries(workflows).map((workflow) => {
2947
- const workflowId = workflow[0];
2948
- if (workflowIds.includes(workflowId)) {
2949
- throw new WorkflowError(
2950
- `Duplicate workflow name found: '${workflowId}'. Please set different workflow names in serveMany.`
2951
- );
2952
- }
2953
- if (workflowId.includes("/")) {
2954
- throw new WorkflowError(
2955
- `Invalid workflow name found: '${workflowId}'. Workflow name cannot contain '/'.`
2956
- );
2957
- }
2958
- workflowIds.push(workflowId);
2959
- workflow[1].workflowId = workflowId;
2960
- return [workflowId, workflow[1].handler];
2961
- })
2962
- );
2963
- return {
2964
- handler: async (...params) => {
2965
- const pickedWorkflowId = getWorkflowId(...params);
2966
- if (!pickedWorkflowId) {
2967
- throw new WorkflowError(`Unexpected request in serveMany. workflowId not set. Please update the URL of your request.`);
2968
- }
2969
- const workflow = workflowMap[pickedWorkflowId];
2970
- if (!workflow) {
2971
- throw new WorkflowError(`No workflows in serveMany found for '${pickedWorkflowId}'. Please update the URL of your request.`);
2972
- }
2973
- return await workflow(...params);
2974
- }
2975
- };
2976
- };
2977
- var createInvokeCallback = (telemetry2) => {
2978
- const invokeCallback = async (settings, invokeStep, context) => {
2979
- const { body, workflow, headers = {}, workflowRunId = getWorkflowRunId(), retries } = settings;
2980
- const { workflowId } = workflow;
2981
- if (!workflowId) {
2982
- throw new WorkflowError("You can only invoke workflow which has a workflowId");
2983
- }
2984
- const { headers: invokerHeaders } = getHeaders({
2985
- initHeaderValue: "false",
2986
- workflowRunId: context.workflowRunId,
2987
- workflowUrl: context.url,
2988
- userHeaders: context.headers,
2989
- failureUrl: context.failureUrl,
2990
- retries: context.retries,
2991
- telemetry: telemetry2
2992
- });
2993
- invokerHeaders["Upstash-Workflow-Runid"] = context.workflowRunId;
2994
- const newUrl = context.url.replace(/[^/]+$/, workflowId);
2995
- const { headers: triggerHeaders } = getHeaders({
2996
- initHeaderValue: "true",
2997
- workflowRunId,
2998
- workflowUrl: newUrl,
2999
- userHeaders: new Headers(headers),
3000
- retries,
3001
- telemetry: telemetry2
3002
- });
3003
- triggerHeaders["Upstash-Workflow-Invoke"] = "true";
3004
- const request = {
3005
- body: JSON.stringify(body),
3006
- headers: Object.fromEntries(
3007
- Object.entries(invokerHeaders).map((pairs) => [pairs[0], [pairs[1]]])
3008
- ),
3009
- workflowRunId,
3010
- workflowUrl: context.url,
3011
- step: invokeStep
3012
- };
3013
- await context.qstashClient.publish({
3014
- headers: triggerHeaders,
3015
- method: "POST",
3016
- body: JSON.stringify(request),
3017
- url: newUrl
3018
- });
3019
- return void 0;
3020
- };
3021
- return invokeCallback;
3022
- };
3023
-
3024
2882
  // platforms/astro.ts
3025
- var telemetry = {
3026
- sdk: SDK_TELEMETRY,
3027
- framework: "astro",
3028
- runtime: process.versions.bun ? `bun@${process.versions.bun}/node@${process.version}` : `node@${process.version}`
3029
- };
3030
2883
  function serve(routeFunction, options) {
3031
2884
  const POST = (apiContext) => {
3032
2885
  const { handler } = serveBase(
3033
2886
  (workflowContext) => routeFunction(workflowContext, apiContext),
3034
- telemetry,
2887
+ {
2888
+ sdk: SDK_TELEMETRY,
2889
+ framework: "astro",
2890
+ runtime: process.versions.bun ? `bun@${process.versions.bun}/node@${process.version}` : `node@${process.version}`
2891
+ },
3035
2892
  options
3036
2893
  );
3037
2894
  return handler(apiContext.request);
3038
2895
  };
3039
2896
  return { POST };
3040
2897
  }
3041
- var createWorkflow = (...params) => {
3042
- const { POST: handler } = serve(...params);
3043
- return {
3044
- callback: createInvokeCallback(telemetry),
3045
- handler,
3046
- workflowId: void 0
3047
- };
3048
- };
3049
- var serveMany = (workflows) => {
3050
- return {
3051
- POST: serveManyBase({
3052
- workflows,
3053
- getWorkflowId(...params) {
3054
- const components = params[0].request.url.split("/");
3055
- return components[components.length - 1];
3056
- }
3057
- }).handler
3058
- };
3059
- };
3060
2898
  // Annotate the CommonJS export names for ESM import in node:
3061
2899
  0 && (module.exports = {
3062
- createWorkflow,
3063
- serve,
3064
- serveMany
2900
+ serve
3065
2901
  });
package/astro.mjs CHANGED
@@ -1,50 +1,24 @@
1
- import {
2
- createInvokeCallback,
3
- serveManyBase
4
- } from "./chunk-LCZMBGEM.mjs";
5
1
  import {
6
2
  SDK_TELEMETRY,
7
3
  serveBase
8
- } from "./chunk-IWAW7GIG.mjs";
4
+ } from "./chunk-BPUSHNSD.mjs";
9
5
 
10
6
  // platforms/astro.ts
11
- var telemetry = {
12
- sdk: SDK_TELEMETRY,
13
- framework: "astro",
14
- runtime: process.versions.bun ? `bun@${process.versions.bun}/node@${process.version}` : `node@${process.version}`
15
- };
16
7
  function serve(routeFunction, options) {
17
8
  const POST = (apiContext) => {
18
9
  const { handler } = serveBase(
19
10
  (workflowContext) => routeFunction(workflowContext, apiContext),
20
- telemetry,
11
+ {
12
+ sdk: SDK_TELEMETRY,
13
+ framework: "astro",
14
+ runtime: process.versions.bun ? `bun@${process.versions.bun}/node@${process.version}` : `node@${process.version}`
15
+ },
21
16
  options
22
17
  );
23
18
  return handler(apiContext.request);
24
19
  };
25
20
  return { POST };
26
21
  }
27
- var createWorkflow = (...params) => {
28
- const { POST: handler } = serve(...params);
29
- return {
30
- callback: createInvokeCallback(telemetry),
31
- handler,
32
- workflowId: void 0
33
- };
34
- };
35
- var serveMany = (workflows) => {
36
- return {
37
- POST: serveManyBase({
38
- workflows,
39
- getWorkflowId(...params) {
40
- const components = params[0].request.url.split("/");
41
- return components[components.length - 1];
42
- }
43
- }).handler
44
- };
45
- };
46
22
  export {
47
- createWorkflow,
48
- serve,
49
- serveMany
23
+ serve
50
24
  };