@workflow/web 4.1.22 → 4.1.24

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.
@@ -9180,7 +9180,7 @@ const app = express();
9180
9180
  app.all(
9181
9181
  "/{*splat}",
9182
9182
  createRequestHandler({
9183
- build: () => import("./server-build-B1ehSvPo.js").then((n) => n.a6)
9183
+ build: () => import("./server-build-dZA4Blmq.js").then((n) => n.a7)
9184
9184
  })
9185
9185
  );
9186
9186
  app.use(
@@ -2,8 +2,8 @@ import { createRequire as __wkfCreateRequire } from "node:module";
2
2
  if (typeof globalThis.require === "undefined") {
3
3
  globalThis.require = __wkfCreateRequire(import.meta.url);
4
4
  }
5
- import { a0 as R, a1 as Ks, a2 as jsxRuntimeExports, a3 as Qe } from "./server-build-B1ehSvPo.js";
6
- import { r as reactExports } from "./app-RN9KG5Qq.js";
5
+ import { a1 as R, a2 as Ks, a3 as jsxRuntimeExports, a4 as Qe } from "./server-build-dZA4Blmq.js";
6
+ import { r as reactExports } from "./app-DrQARxC_.js";
7
7
  import "node:stream";
8
8
  import "util";
9
9
  import "crypto";
@@ -2,9 +2,9 @@ import { createRequire as __wkfCreateRequire } from "node:module";
2
2
  if (typeof globalThis.require === "undefined") {
3
3
  globalThis.require = __wkfCreateRequire(import.meta.url);
4
4
  }
5
- import { H as HookSchema } from "./server-build-B1ehSvPo.js";
6
- import { B, D, a, E, b, c, d, e, L, M, f, g, P, Q, h, R, S, i, j, k, l, m, n, o, p, T, q, r, s, t, u, V, W, v, w, x, y, z, A, C, F, G, I, J, K, O, U, X, Y, Z, _, $ } from "./server-build-B1ehSvPo.js";
7
- import "./app-RN9KG5Qq.js";
5
+ import { H as HookSchema } from "./server-build-dZA4Blmq.js";
6
+ import { B, D, a, E, b, c, d, e, L, M, f, g, P, Q, h, R, S, i, j, k, l, m, n, o, p, T, q, r, s, t, u, V, W, v, w, x, y, z, A, C, F, G, I, J, K, O, U, X, Y, Z, _, $, a0 } from "./server-build-dZA4Blmq.js";
7
+ import "./app-DrQARxC_.js";
8
8
  import "stream";
9
9
  import "express";
10
10
  import "node:stream";
@@ -88,17 +88,18 @@ export {
88
88
  y as WorkflowRunSchema,
89
89
  z as WorkflowRunStatusSchema,
90
90
  A as envFlag,
91
- C as getQueueTopicPrefix,
92
- F as isLegacySpecVersion,
93
- G as isNodeHttpEnabled,
94
- I as isTerminalRunEventType,
95
- J as isTerminalStepStatus,
96
- K as isTerminalWorkflowRunStatus,
97
- O as parseQueueName,
98
- U as reenqueueActiveRuns,
99
- X as requiresNewerWorld,
100
- Y as resolveQueueNamespace,
101
- Z as stripEventDataRefs,
102
- _ as ulidToDate,
103
- $ as validateUlidTimestamp
91
+ C as envNumber,
92
+ F as getQueueTopicPrefix,
93
+ G as isLegacySpecVersion,
94
+ I as isNodeHttpEnabled,
95
+ J as isTerminalRunEventType,
96
+ K as isTerminalStepStatus,
97
+ O as isTerminalWorkflowRunStatus,
98
+ U as parseQueueName,
99
+ X as reenqueueActiveRuns,
100
+ Y as requiresNewerWorld,
101
+ Z as resolveQueueNamespace,
102
+ _ as stripEventDataRefs,
103
+ $ as ulidToDate,
104
+ a0 as validateUlidTimestamp
104
105
  };
@@ -2,8 +2,8 @@ import { createRequire as __wkfCreateRequire } from "node:module";
2
2
  if (typeof globalThis.require === "undefined") {
3
3
  globalThis.require = __wkfCreateRequire(import.meta.url);
4
4
  }
5
- import { N as Nt } from "./server-build-B1ehSvPo.js";
6
- import "./app-RN9KG5Qq.js";
5
+ import { N as Nt } from "./server-build-dZA4Blmq.js";
6
+ import "./app-DrQARxC_.js";
7
7
  import "stream";
8
8
  import "express";
9
9
  import "node:stream";
@@ -18,7 +18,7 @@ import { createRequire as __wkfCreateRequire } from "node:module";
18
18
  if (typeof globalThis.require === "undefined") {
19
19
  globalThis.require = __wkfCreateRequire(import.meta.url);
20
20
  }
21
- import { a as requireReact, S as ServerRouter, c as createReadableStreamFromReadable, r as reactExports, g as getDefaultExportFromCjs, R as React, b as ReactExports, w as withComponentProps, d as withErrorBoundaryProps, M as Meta, L as Links, e as ScrollRestoration, f as Scripts, O as Outlet, u as useNavigate, h as useSearchParams, i as Link$1, j as useRouteError, k as isRouteErrorResponse, l as useLocation, m as useParams } from "./app-RN9KG5Qq.js";
21
+ import { a as requireReact, S as ServerRouter, c as createReadableStreamFromReadable, r as reactExports, g as getDefaultExportFromCjs, R as React, b as ReactExports, w as withComponentProps, d as withErrorBoundaryProps, M as Meta, L as Links, e as ScrollRestoration, f as Scripts, O as Outlet, u as useNavigate, h as useSearchParams, i as Link$1, j as useRouteError, k as isRouteErrorResponse, l as useLocation, m as useParams } from "./app-DrQARxC_.js";
22
22
  import require$$0$5, { PassThrough, Transform as Transform$1 } from "node:stream";
23
23
  import require$$0 from "util";
24
24
  import require$$1 from "crypto";
@@ -34874,6 +34874,26 @@ function warnOnce(key, message2) {
34874
34874
  warnedEnvValues.add(key);
34875
34875
  console.warn(`[workflow] ${message2}`);
34876
34876
  }
34877
+ function envNumber(name2, fallback, options = {}) {
34878
+ const raw2 = process.env[name2];
34879
+ if (raw2 === void 0 || raw2 === "")
34880
+ return fallback;
34881
+ const { min: min2 = 0, max: max2, integer: integer2 = false } = options;
34882
+ const parsed = Number(raw2);
34883
+ if (!Number.isFinite(parsed) || integer2 && !Number.isInteger(parsed)) {
34884
+ warnOnce(`${name2}=${raw2}`, `Ignoring ${name2}: not a ${integer2 ? "finite integer" : "finite number"}; using default ${fallback}`);
34885
+ return fallback;
34886
+ }
34887
+ if (parsed < min2) {
34888
+ warnOnce(`${name2}=${raw2}`, `${name2} below minimum ${min2}; clamped`);
34889
+ return min2;
34890
+ }
34891
+ if (max2 !== void 0 && parsed > max2) {
34892
+ warnOnce(`${name2}=${raw2}`, `${name2} above maximum ${max2}; clamped`);
34893
+ return max2;
34894
+ }
34895
+ return parsed;
34896
+ }
34877
34897
  function envFlag(name2, fallback, env2 = process.env) {
34878
34898
  const raw2 = env2[name2];
34879
34899
  if (raw2 === void 0 || raw2 === "")
@@ -81857,7 +81877,7 @@ var tn = f("block", "before:content-[counter(line)]", "before:inline-block", "be
81857
81877
  var et = ({ className: e, language: t, style: o, isIncomplete: n, ...s2 }) => jsxRuntimeExports.jsx("div", { className: f("my-4 flex w-full flex-col gap-2 rounded-xl border border-border bg-sidebar p-2", e), "data-incomplete": n || void 0, "data-language": t, "data-streamdown": "code-block", style: { contentVisibility: "auto", containIntrinsicSize: "auto 200px", ...o }, ...s2 });
81858
81878
  var Se = reactExports.createContext({ code: "" }), de = () => reactExports.useContext(Se);
81859
81879
  var ot = ({ language: e }) => jsxRuntimeExports.jsx("div", { className: "flex h-8 items-center text-muted-foreground text-xs", "data-language": e, "data-streamdown": "code-block-header", children: jsxRuntimeExports.jsx("span", { className: "ml-1 font-mono lowercase", children: e }) });
81860
- var cn$1 = /\n+$/, dn = reactExports.lazy(() => import("./highlighted-body-B3W2YXNL-BHd4-kG6.js").then((e) => ({ default: e.HighlightedCodeBlockBody }))), rt = ({ code: e, language: t, className: o, children: n, isIncomplete: s2 = false, ...r2 }) => {
81880
+ var cn$1 = /\n+$/, dn = reactExports.lazy(() => import("./highlighted-body-B3W2YXNL-DjQADekk.js").then((e) => ({ default: e.HighlightedCodeBlockBody }))), rt = ({ code: e, language: t, className: o, children: n, isIncomplete: s2 = false, ...r2 }) => {
81861
81881
  let i = reactExports.useMemo(() => e.replace(cn$1, ""), [e]), c = reactExports.useMemo(() => ({ bg: "transparent", fg: "inherit", tokens: i.split(`
81862
81882
  `).map((a2) => [{ content: a2, color: "inherit", bgColor: "transparent", htmlStyle: {}, offset: 0 }]) }), [i]);
81863
81883
  return jsxRuntimeExports.jsx(Se.Provider, { value: { code: e }, children: jsxRuntimeExports.jsxs(et, { isIncomplete: s2, language: t, children: [jsxRuntimeExports.jsx(ot, { language: t }), n ? jsxRuntimeExports.jsx("div", { className: "pointer-events-none sticky top-2 z-10 -mt-10 flex h-8 items-center justify-end", children: jsxRuntimeExports.jsx("div", { className: "pointer-events-auto flex shrink-0 items-center gap-2 rounded-md border border-sidebar bg-sidebar/80 px-1.5 py-1 supports-[backdrop-filter]:bg-sidebar/70 supports-[backdrop-filter]:backdrop-blur", "data-streamdown": "code-block-actions", children: n }) }) : null, jsxRuntimeExports.jsx(reactExports.Suspense, { fallback: jsxRuntimeExports.jsx(Qe, { className: o, language: t, result: c, ...r2 }), children: jsxRuntimeExports.jsx(dn, { className: o, code: i, language: t, raw: c, ...r2 }) })] }) });
@@ -82179,7 +82199,7 @@ var Dt = ({ children: e, className: t, onDownload: o, onError: n }) => {
82179
82199
  }, []), jsxRuntimeExports.jsxs("div", { className: "relative", ref: i, children: [jsxRuntimeExports.jsx("button", { className: f("cursor-pointer p-1 text-muted-foreground transition-all hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50", t), disabled: c, onClick: () => r2(!s2), title: "Download table", type: "button", children: e != null ? e : jsxRuntimeExports.jsx(Z, { size: 14 }) }), s2 ? jsxRuntimeExports.jsxs("div", { className: "absolute top-full right-0 z-10 mt-1 min-w-[120px] overflow-hidden rounded-md border border-border bg-background shadow-lg", children: [jsxRuntimeExports.jsx("button", { className: "w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40", onClick: () => a2("csv"), title: "Download table as CSV", type: "button", children: "CSV" }), jsxRuntimeExports.jsx("button", { className: "w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/40", onClick: () => a2("markdown"), title: "Download table as Markdown", type: "button", children: "Markdown" })] }) : null] });
82180
82200
  };
82181
82201
  var Vt = ({ children: e, className: t, showControls: o, ...n }) => jsxRuntimeExports.jsxs("div", { className: "my-4 flex flex-col gap-2 rounded-lg border border-border bg-sidebar p-2", "data-streamdown": "table-wrapper", children: [o ? jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-end gap-1", children: [jsxRuntimeExports.jsx(Ht, {}), jsxRuntimeExports.jsx(Dt, {})] }) : null, jsxRuntimeExports.jsx("div", { className: "border-collapse overflow-x-auto overscroll-y-auto rounded-md border border-border bg-background", children: jsxRuntimeExports.jsx("table", { className: f("w-full divide-y divide-border", t), "data-streamdown": "table", ...n, children: e }) })] });
82182
- var Jn = reactExports.lazy(() => import("./mermaid-3ZIDBTTL-DNnc363s.js").then((e) => ({ default: e.Mermaid }))), Kn = /language-([^\s]+)/;
82202
+ var Jn = reactExports.lazy(() => import("./mermaid-3ZIDBTTL-BkSETGny.js").then((e) => ({ default: e.Mermaid }))), Kn = /language-([^\s]+)/;
82183
82203
  function ke(e, t) {
82184
82204
  if (!(e != null && e.position || t != null && t.position)) return true;
82185
82205
  if (!(e != null && e.position && (t != null && t.position))) return false;
@@ -92071,7 +92091,7 @@ createLogger("build", {
92071
92091
  debugNamespace: "workflow:build"
92072
92092
  });
92073
92093
  const MAX_QUEUE_DELIVERIES = 48;
92074
- const version$1 = "4.8.6";
92094
+ const version$1 = "4.8.8";
92075
92095
  const execFileAsync = promisify(execFile);
92076
92096
  function parsePort$1(value, radix = 10) {
92077
92097
  const port = parseInt(value, radix);
@@ -120733,7 +120753,7 @@ function createLocalWorld(args) {
120733
120753
  const basedir = mergedConfig.dataDir;
120734
120754
  const hooksDir = path$3.join(basedir, "hooks");
120735
120755
  const taggedHookFiles = await listTaggedFiles(hooksDir, tag);
120736
- const { HookSchema: HookSchema2 } = await import("./index-9aIXU-9S.js");
120756
+ const { HookSchema: HookSchema2 } = await import("./index-jGuRgZeU.js");
120737
120757
  await Promise.all(taggedHookFiles.map(async (hookFile) => {
120738
120758
  const hook = await readJSON(path$3.join(hooksDir, hookFile), HookSchema2);
120739
120759
  if (hook == null ? void 0 : hook.token) {
@@ -120770,6 +120790,7 @@ function createLocalWorld(args) {
120770
120790
  };
120771
120791
  }
120772
120792
  let _dispatcher;
120793
+ let _queueDispatcher;
120773
120794
  let _streamDispatcher;
120774
120795
  let _streamCloseDispatcher;
120775
120796
  let _nodeHttpAgents;
@@ -120820,6 +120841,64 @@ function getAgentOptions() {
120820
120841
  pipelining: 1
120821
120842
  };
120822
120843
  }
120844
+ const QUEUE_AGENT_CONNECTIONS = 64;
120845
+ const QUEUE_REQUEST_TIMEOUT_MS = 3e4;
120846
+ const getQueueRequestTimeoutMs = () => envNumber("WORKFLOW_VERCEL_QUEUE_TIMEOUT_MS", QUEUE_REQUEST_TIMEOUT_MS, {
120847
+ integer: true,
120848
+ min: 5e3,
120849
+ max: 12e4
120850
+ });
120851
+ function getQueueAgentOptions() {
120852
+ const timeoutMs = getQueueRequestTimeoutMs();
120853
+ return {
120854
+ ...getAgentOptions(),
120855
+ connections: envNumber("WORKFLOW_VERCEL_QUEUE_CONNECTIONS", QUEUE_AGENT_CONNECTIONS, { integer: true, min: 1, max: 1024 }),
120856
+ headersTimeout: timeoutMs,
120857
+ bodyTimeout: timeoutMs
120858
+ };
120859
+ }
120860
+ const ForwardingHandler = undiciExports.DecoratorHandler;
120861
+ function deadlineInterceptor(timeoutMs) {
120862
+ var _expired, _controller, _timer, _DeadlineHandler_instances, abort_fn;
120863
+ class DeadlineHandler extends ForwardingHandler {
120864
+ constructor(handler) {
120865
+ var _a3, _b2;
120866
+ super(handler);
120867
+ __privateAdd(this, _DeadlineHandler_instances);
120868
+ __privateAdd(this, _expired, false);
120869
+ __privateAdd(this, _controller);
120870
+ __privateAdd(this, _timer);
120871
+ __privateSet(this, _timer, setTimeout(() => {
120872
+ __privateSet(this, _expired, true);
120873
+ __privateMethod(this, _DeadlineHandler_instances, abort_fn).call(this);
120874
+ }, timeoutMs));
120875
+ (_b2 = (_a3 = __privateGet(this, _timer)).unref) == null ? void 0 : _b2.call(_a3);
120876
+ }
120877
+ onRequestStart(controller, context) {
120878
+ __privateSet(this, _controller, controller);
120879
+ super.onRequestStart(controller, context);
120880
+ if (__privateGet(this, _expired))
120881
+ __privateMethod(this, _DeadlineHandler_instances, abort_fn).call(this);
120882
+ }
120883
+ onResponseEnd(controller, trailers) {
120884
+ clearTimeout(__privateGet(this, _timer));
120885
+ super.onResponseEnd(controller, trailers);
120886
+ }
120887
+ onResponseError(controller, error2) {
120888
+ clearTimeout(__privateGet(this, _timer));
120889
+ super.onResponseError(controller, error2);
120890
+ }
120891
+ }
120892
+ _expired = new WeakMap();
120893
+ _controller = new WeakMap();
120894
+ _timer = new WeakMap();
120895
+ _DeadlineHandler_instances = new WeakSet();
120896
+ abort_fn = function() {
120897
+ var _a3;
120898
+ (_a3 = __privateGet(this, _controller)) == null ? void 0 : _a3.abort(new Error(`Queue request exceeded its ${timeoutMs}ms deadline`));
120899
+ };
120900
+ return (dispatch2) => (opts, handler) => dispatch2(opts, new DeadlineHandler(handler));
120901
+ }
120823
120902
  function getEventsAgentOptions() {
120824
120903
  return {
120825
120904
  ...getBaseAgentOptions(),
@@ -121000,7 +121079,7 @@ function getDispatcher(config2) {
121000
121079
  return resolveDispatcher(config2, getDefaultDispatcher);
121001
121080
  }
121002
121081
  function getQueueDispatcher(config2) {
121003
- return (config2 == null ? void 0 : config2.dispatcher) ?? getDefaultDispatcher();
121082
+ return resolveDispatcher(config2, getDefaultQueueDispatcher);
121004
121083
  }
121005
121084
  function getEventsDispatcher(config2) {
121006
121085
  return resolveDispatcher(config2, () => eventsRecycler.get());
@@ -121030,6 +121109,13 @@ function withBoundLifecycle(agent2, composed) {
121030
121109
  function createStreamDispatcher(retryOptions, agentOverrides) {
121031
121110
  return new undiciExports.RetryAgent(new undiciExports.Agent({ ...getStreamAgentOptions(), ...agentOverrides }), retryOptions);
121032
121111
  }
121112
+ function createQueueDispatcher() {
121113
+ return new undiciExports.RetryAgent(new undiciExports.Agent(getQueueAgentOptions()).compose(deadlineInterceptor(getQueueRequestTimeoutMs())), getRetryAgentOptions());
121114
+ }
121115
+ function getDefaultQueueDispatcher() {
121116
+ _queueDispatcher ?? (_queueDispatcher = createQueueDispatcher());
121117
+ return _queueDispatcher;
121118
+ }
121033
121119
  function getDefaultDispatcher() {
121034
121120
  _dispatcher ?? (_dispatcher = new undiciExports.RetryAgent(new undiciExports.Agent(getAgentOptions()), getRetryAgentOptions()));
121035
121121
  return _dispatcher;
@@ -121160,8 +121246,8 @@ function requireGetVercelOidcToken() {
121160
121246
  }
121161
121247
  try {
121162
121248
  const [{ getTokenPayload, isExpired }, { refreshToken }] = await Promise.all([
121163
- await import("./token-util-0IzeGP3A.js").then((n) => n.t),
121164
- await import("./token-Csl_4rgO.js").then((n) => n.t)
121249
+ await import("./token-util-C7q6rX5g.js").then((n) => n.t),
121250
+ await import("./token-a0u6SMZC.js").then((n) => n.t)
121165
121251
  ]);
121166
121252
  if (!token || isExpired(getTokenPayload(token), options == null ? void 0 : options.expirationBufferMs)) {
121167
121253
  await refreshToken(options);
@@ -121796,6 +121882,35 @@ const WorkflowRunId = SemanticConvention("workflow.run.id");
121796
121882
  const StepId = SemanticConvention("step.id");
121797
121883
  const WorkflowHttpTransport = SemanticConvention("workflow.http.transport");
121798
121884
  const REQUEST_TIMEOUT_MS = 6e4;
121885
+ const TRANSIENT_TRANSPORT_ERROR_CODES = /* @__PURE__ */ new Set([
121886
+ "UND_ERR_INFO",
121887
+ "UND_ERR_REQ_RETRY",
121888
+ "UND_ERR_SOCKET",
121889
+ "UND_ERR_CONNECT",
121890
+ "UND_ERR_CONNECT_TIMEOUT",
121891
+ "UND_ERR_HEADERS_TIMEOUT",
121892
+ "UND_ERR_BODY_TIMEOUT",
121893
+ "UND_ERR_CLOSED",
121894
+ "ECONNRESET",
121895
+ "ECONNREFUSED",
121896
+ "ENOTFOUND",
121897
+ "EAI_AGAIN",
121898
+ "EPIPE",
121899
+ "ETIMEDOUT"
121900
+ ]);
121901
+ function getTransientTransportCode(error2) {
121902
+ let current = error2;
121903
+ for (let depth = 0; current != null && depth < 8; depth++) {
121904
+ if (typeof current === "object" && "code" in current) {
121905
+ const code2 = current.code;
121906
+ if (typeof code2 === "string" && TRANSIENT_TRANSPORT_ERROR_CODES.has(code2)) {
121907
+ return code2;
121908
+ }
121909
+ }
121910
+ current = current == null ? void 0 : current.cause;
121911
+ }
121912
+ return void 0;
121913
+ }
121799
121914
  const HTTP_DEBUG_ENABLED = typeof process !== "undefined" && typeof process.env.DEBUG === "string" && (process.env.DEBUG.includes("workflow:") || process.env.DEBUG === "*");
121800
121915
  const DIAGNOSTIC_HEADERS = [
121801
121916
  "x-vercel-id",
@@ -121889,7 +122004,7 @@ async function instrumentedFetch(opts) {
121889
122004
  const { method, url: url2, headers: headers2, body: body2, dispatcher: dispatcher2, peerService = "workflow-server", timeoutMs = REQUEST_TIMEOUT_MS, signal: callerSignal, injectTraceContext = true, cacheBust = true, logLabel, buildError, onTransportOutcome, deferTransportSuccessUntilBody = false } = opts;
121890
122005
  const label = logLabel ?? url2;
121891
122006
  return trace(`http ${method}`, { kind: await getSpanKind("CLIENT") }, async (span) => {
121892
- var _a3, _b2, _c;
122007
+ var _a3, _b2, _c, _d, _e2;
121893
122008
  span == null ? void 0 : span.setAttributes(httpClientSpanAttributes({ method, url: url2, peerService }));
121894
122009
  if (injectTraceContext)
121895
122010
  await injectTraceContextIntoHeaders(headers2);
@@ -121927,11 +122042,18 @@ async function instrumentedFetch(opts) {
121927
122042
  const elapsed = Date.now() - start2;
121928
122043
  onTransportOutcome == null ? void 0 : onTransportOutcome(error2);
121929
122044
  if (error2 instanceof Error && (error2.name === "TimeoutError" || error2.name === "AbortError")) {
121930
- const timeoutError = new WorkflowWorldError(`${method} ${label} timed out after ${elapsed}ms`, { url: url2, cause: error2 });
122045
+ const timeoutError = new WorkflowWorldError(`${method} ${label} timed out after ${elapsed}ms`, { url: url2, code: "TIMEOUT", cause: error2 });
121931
122046
  span == null ? void 0 : span.setAttributes({ ...ErrorType("TIMEOUT") });
121932
122047
  (_a3 = span == null ? void 0 : span.recordException) == null ? void 0 : _a3.call(span, timeoutError);
121933
122048
  throw timeoutError;
121934
122049
  }
122050
+ const transportCode = getTransientTransportCode(error2);
122051
+ if (transportCode) {
122052
+ const transportError2 = new WorkflowWorldError(`${method} ${label} transport failure after ${elapsed}ms (${transportCode})`, { url: url2, code: "TRANSPORT", cause: error2 });
122053
+ span == null ? void 0 : span.setAttributes({ ...ErrorType("TRANSPORT") });
122054
+ (_b2 = span == null ? void 0 : span.recordException) == null ? void 0 : _b2.call(span, transportError2);
122055
+ throw transportError2;
122056
+ }
121935
122057
  throw error2;
121936
122058
  }
121937
122059
  const ms2 = Date.now() - start2;
@@ -121947,6 +122069,16 @@ async function instrumentedFetch(opts) {
121947
122069
  try {
121948
122070
  error3 = await buildError(response2);
121949
122071
  } catch (cause) {
122072
+ const transportCode = getTransientTransportCode(cause);
122073
+ if (transportCode) {
122074
+ if (deferTransportSuccessUntilBody) {
122075
+ onTransportOutcome == null ? void 0 : onTransportOutcome(cause);
122076
+ }
122077
+ const transportError2 = new WorkflowWorldError(`${method} ${label} response body transport failure (${transportCode})`, { url: url2, code: "TRANSPORT", cause });
122078
+ span == null ? void 0 : span.setAttributes({ ...ErrorType("TRANSPORT") });
122079
+ (_c = span == null ? void 0 : span.recordException) == null ? void 0 : _c.call(span, transportError2);
122080
+ throw transportError2;
122081
+ }
121950
122082
  if (deferTransportSuccessUntilBody) {
121951
122083
  onTransportOutcome == null ? void 0 : onTransportOutcome(cause);
121952
122084
  }
@@ -121954,7 +122086,7 @@ async function instrumentedFetch(opts) {
121954
122086
  }
121955
122087
  if (deferTransportSuccessUntilBody)
121956
122088
  onTransportOutcome == null ? void 0 : onTransportOutcome();
121957
- (_b2 = span == null ? void 0 : span.recordException) == null ? void 0 : _b2.call(span, error3);
122089
+ (_d = span == null ? void 0 : span.recordException) == null ? void 0 : _d.call(span, error3);
121958
122090
  throw error3;
121959
122091
  }
121960
122092
  const text2 = await response2.text().catch(() => "");
@@ -121964,7 +122096,7 @@ async function instrumentedFetch(opts) {
121964
122096
  url: url2,
121965
122097
  retryAfter: parseRetryAfter(response2.headers.get("Retry-After"))
121966
122098
  });
121967
- (_c = span == null ? void 0 : span.recordException) == null ? void 0 : _c.call(span, error2);
122099
+ (_e2 = span == null ? void 0 : span.recordException) == null ? void 0 : _e2.call(span, error2);
121968
122100
  throw error2;
121969
122101
  }
121970
122102
  return response2;
@@ -126661,38 +126793,10 @@ var QueueClient = class {
126661
126793
  setApi(this, new ApiClient({ ...options, region }));
126662
126794
  }
126663
126795
  };
126664
- const version = "4.7.2";
126796
+ const version = "4.7.4";
126665
126797
  const IDEMPOTENT_METHODS = /* @__PURE__ */ new Set(["GET", "HEAD"]);
126666
126798
  const MAX_BODY_PARSE_RETRIES = 2;
126667
126799
  const BODY_PARSE_RETRY_BASE_MS = 100;
126668
- const TRANSIENT_TRANSPORT_ERROR_CODES = /* @__PURE__ */ new Set([
126669
- "UND_ERR_REQ_RETRY",
126670
- "UND_ERR_SOCKET",
126671
- "UND_ERR_CONNECT",
126672
- "UND_ERR_CONNECT_TIMEOUT",
126673
- "UND_ERR_HEADERS_TIMEOUT",
126674
- "UND_ERR_BODY_TIMEOUT",
126675
- "UND_ERR_CLOSED",
126676
- "ECONNRESET",
126677
- "ECONNREFUSED",
126678
- "ENOTFOUND",
126679
- "EAI_AGAIN",
126680
- "EPIPE",
126681
- "ETIMEDOUT"
126682
- ]);
126683
- function getTransientTransportCode(error2) {
126684
- let current = error2;
126685
- for (let depth = 0; current != null && depth < 5; depth++) {
126686
- if (typeof current === "object" && "code" in current) {
126687
- const code2 = current.code;
126688
- if (typeof code2 === "string" && TRANSIENT_TRANSPORT_ERROR_CODES.has(code2)) {
126689
- return code2;
126690
- }
126691
- }
126692
- current = current == null ? void 0 : current.cause;
126693
- }
126694
- return void 0;
126695
- }
126696
126800
  const getWorkflowServerUrlOverride = () => process.env.VERCEL_WORKFLOW_SERVER_URL || "";
126697
126801
  const DEFAULT_RESOLVE_DATA_OPTION = "all";
126698
126802
  function deserializeError(obj) {
@@ -127503,7 +127607,8 @@ async function fetchV4(url2, init2, config2, opName) {
127503
127607
  }
127504
127608
  } catch (cause) {
127505
127609
  noteEventsTransportOutcome(dispatcher2, cause);
127506
- controller.error(cause);
127610
+ const transportCode = getTransientTransportCode(cause);
127611
+ controller.error(transportCode ? new WorkflowWorldError(`v4 ${opName}: response stream transport failure (${transportCode})`, { url: url2, code: "TRANSPORT", cause }) : cause);
127507
127612
  }
127508
127613
  },
127509
127614
  cancel(reason) {
@@ -155931,42 +156036,43 @@ const serverBuild = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineP
155931
156036
  ssr
155932
156037
  }, Symbol.toStringTag, { value: "Module" }));
155933
156038
  export {
155934
- validateUlidTimestamp as $,
156039
+ ulidToDate as $,
155935
156040
  envFlag as A,
155936
156041
  BaseEventSchema as B,
155937
- getQueueTopicPrefix as C,
156042
+ envNumber as C,
155938
156043
  DEFAULT_TIMESTAMP_THRESHOLD_FUTURE_MS as D,
155939
156044
  EVENT_DATA_REF_FIELDS as E,
155940
- isLegacySpecVersion as F,
155941
- isNodeHttpEnabled as G,
156045
+ getQueueTopicPrefix as F,
156046
+ isLegacySpecVersion as G,
155942
156047
  HookSchema as H,
155943
- isTerminalRunEventType as I,
155944
- isTerminalStepStatus as J,
155945
- isTerminalWorkflowRunStatus as K,
156048
+ isNodeHttpEnabled as I,
156049
+ isTerminalRunEventType as J,
156050
+ isTerminalStepStatus as K,
155946
156051
  LegacySerializedDataSchemaV1 as L,
155947
156052
  MessageId as M,
155948
156053
  Nt as N,
155949
- parseQueueName as O,
156054
+ isTerminalWorkflowRunStatus as O,
155950
156055
  PaginatedResponseSchema as P,
155951
156056
  QueuePayloadSchema as Q,
155952
156057
  RunInputSchema as R,
155953
156058
  SPEC_VERSION_CURRENT as S,
155954
156059
  TERMINAL_RUN_EVENT_TYPES as T,
155955
- reenqueueActiveRuns as U,
156060
+ parseQueueName as U,
155956
156061
  ValidQueueName as V,
155957
156062
  WaitSchema as W,
155958
- requiresNewerWorld as X,
155959
- resolveQueueNamespace as Y,
155960
- stripEventDataRefs as Z,
155961
- ulidToDate as _,
156063
+ reenqueueActiveRuns as X,
156064
+ requiresNewerWorld as Y,
156065
+ resolveQueueNamespace as Z,
156066
+ stripEventDataRefs as _,
155962
156067
  DEFAULT_TIMESTAMP_THRESHOLD_PAST_MS as a,
155963
- R as a0,
155964
- Ks as a1,
155965
- jsxRuntimeExports as a2,
155966
- Qe as a3,
155967
- requireTokenUtil as a4,
155968
- requireTokenError as a5,
155969
- serverBuild as a6,
156068
+ validateUlidTimestamp as a0,
156069
+ R as a1,
156070
+ Ks as a2,
156071
+ jsxRuntimeExports as a3,
156072
+ Qe as a4,
156073
+ requireTokenUtil as a5,
156074
+ requireTokenError as a6,
156075
+ serverBuild as a7,
155970
156076
  EventSchema as b,
155971
156077
  EventTypeSchema as c,
155972
156078
  HealthCheckPayloadSchema as d,
@@ -2,8 +2,8 @@ import { createRequire as __wkfCreateRequire } from "node:module";
2
2
  if (typeof globalThis.require === "undefined") {
3
3
  globalThis.require = __wkfCreateRequire(import.meta.url);
4
4
  }
5
- import { g as getDefaultExportFromCjs } from "./app-RN9KG5Qq.js";
6
- import { a5 as requireTokenError, a4 as requireTokenUtil } from "./server-build-B1ehSvPo.js";
5
+ import { g as getDefaultExportFromCjs } from "./app-DrQARxC_.js";
6
+ import { a6 as requireTokenError, a5 as requireTokenUtil } from "./server-build-dZA4Blmq.js";
7
7
  function _mergeNamespaces(n, m) {
8
8
  for (var i = 0; i < m.length; i++) {
9
9
  const e = m[i];
@@ -2,8 +2,8 @@ import { createRequire as __wkfCreateRequire } from "node:module";
2
2
  if (typeof globalThis.require === "undefined") {
3
3
  globalThis.require = __wkfCreateRequire(import.meta.url);
4
4
  }
5
- import { g as getDefaultExportFromCjs } from "./app-RN9KG5Qq.js";
6
- import { a4 as requireTokenUtil } from "./server-build-B1ehSvPo.js";
5
+ import { g as getDefaultExportFromCjs } from "./app-DrQARxC_.js";
6
+ import { a5 as requireTokenUtil } from "./server-build-dZA4Blmq.js";
7
7
  function _mergeNamespaces(n, m) {
8
8
  for (var i = 0; i < m.length; i++) {
9
9
  const e = m[i];
@@ -2,7 +2,7 @@ import { createRequire as __wkfCreateRequire } from "node:module";
2
2
  if (typeof globalThis.require === "undefined") {
3
3
  globalThis.require = __wkfCreateRequire(import.meta.url);
4
4
  }
5
- import { n } from "./assets/app-RN9KG5Qq.js";
5
+ import { n } from "./assets/app-DrQARxC_.js";
6
6
  import "express";
7
7
  import "stream";
8
8
  export {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@workflow/web",
3
3
  "description": "Workflow Observability UI",
4
- "version": "4.1.22",
4
+ "version": "4.1.24",
5
5
  "type": "module",
6
6
  "private": false,
7
7
  "files": [
@@ -71,12 +71,12 @@
71
71
  "vite": "^6",
72
72
  "vitest": "^3",
73
73
  "jsdom": "^26",
74
- "@workflow/core": "4.8.6",
75
74
  "@workflow/errors": "4.2.1",
76
75
  "@workflow/utils": "4.1.4",
77
- "@workflow/web-shared": "4.1.22",
76
+ "@workflow/web-shared": "4.1.24",
78
77
  "@workflow/world": "4.5.0",
79
- "@workflow/world-vercel": "4.7.2"
78
+ "@workflow/core": "4.8.8",
79
+ "@workflow/world-vercel": "4.7.4"
80
80
  },
81
81
  "scripts": {
82
82
  "dev": "react-router dev",