@workflow/web 5.0.0-beta.52 → 5.0.0-beta.53

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.
@@ -54983,7 +54983,7 @@ function replaceEncryptedAndExpiredWithMarkers(resource) {
54983
54983
  }
54984
54984
  async function hydrateResourceIOAsync(resource, key) {
54985
54985
  const { hydrateDataWithKey: hydrateDataWithKey2, deriveRunPayloadKeys: deriveRunPayloadKeys2 } = await Promise.resolve().then(() => serializationFormat);
54986
- const { ensureZstdDecoderRegistered } = await import("./zstd-browser-decoder-BlsTrKGs.js");
54986
+ const { ensureZstdDecoderRegistered } = await import("./zstd-browser-decoder-DUCK00sT.js");
54987
54987
  ensureZstdDecoderRegistered();
54988
54988
  const cryptoKey = key ? await deriveRunPayloadKeys2(key) : void 0;
54989
54989
  const revivers = getRevivers();
@@ -85927,7 +85927,7 @@ var tn = f("block", "before:content-[counter(line)]", "before:inline-block", "be
85927
85927
  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 });
85928
85928
  var Se = reactExports.createContext({ code: "" }), de = () => reactExports.useContext(Se);
85929
85929
  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 }) });
85930
- var cn$1 = /\n+$/, dn = reactExports.lazy(() => import("./highlighted-body-B3W2YXNL-BMAfAXV9.js").then((e) => ({ default: e.HighlightedCodeBlockBody }))), rt = ({ code: e, language: t, className: o, children: n, isIncomplete: s2 = false, ...r2 }) => {
85930
+ var cn$1 = /\n+$/, dn = reactExports.lazy(() => import("./highlighted-body-B3W2YXNL-Cq95j2_r.js").then((e) => ({ default: e.HighlightedCodeBlockBody }))), rt = ({ code: e, language: t, className: o, children: n, isIncomplete: s2 = false, ...r2 }) => {
85931
85931
  let i = reactExports.useMemo(() => e.replace(cn$1, ""), [e]), c = reactExports.useMemo(() => ({ bg: "transparent", fg: "inherit", tokens: i.split(`
85932
85932
  `).map((a2) => [{ content: a2, color: "inherit", bgColor: "transparent", htmlStyle: {}, offset: 0 }]) }), [i]);
85933
85933
  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 }) })] }) });
@@ -86249,7 +86249,7 @@ var Dt = ({ children: e, className: t, onDownload: o, onError: n }) => {
86249
86249
  }, []), 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] });
86250
86250
  };
86251
86251
  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 }) })] });
86252
- var Jn = reactExports.lazy(() => import("./mermaid-3ZIDBTTL-B43KQnMx.js").then((e) => ({ default: e.Mermaid }))), Kn = /language-([^\s]+)/;
86252
+ var Jn = reactExports.lazy(() => import("./mermaid-3ZIDBTTL-BolQF4wC.js").then((e) => ({ default: e.Mermaid }))), Kn = /language-([^\s]+)/;
86253
86253
  function ke(e, t) {
86254
86254
  if (!(e != null && e.position || t != null && t.position)) return true;
86255
86255
  if (!(e != null && e.position && (t != null && t.position))) return false;
@@ -94838,6 +94838,7 @@ function renderStructuredFields(framing, body2, metadata) {
94838
94838
  "errorName",
94839
94839
  "errorMessage",
94840
94840
  "errorStack",
94841
+ "errorCause",
94841
94842
  "hint",
94842
94843
  "attempt",
94843
94844
  "retryCount"
@@ -94880,6 +94881,10 @@ function renderStructuredFields(framing, body2, metadata) {
94880
94881
  if (errorMessage && !redundant.has("errorMessage")) {
94881
94882
  lines.push(` ${kvKey("error")} ${formatPassthroughValue(errorMessage)}`);
94882
94883
  }
94884
+ const errorCause = pickString(metadata, "errorCause");
94885
+ if (errorCause && !body2.includes(errorCause)) {
94886
+ lines.push(` ${kvKey("cause")} ${formatPassthroughValue(errorCause)}`);
94887
+ }
94883
94888
  const hint$12 = pickString(metadata, "hint");
94884
94889
  if (hint$12) {
94885
94890
  lines.push(` ${hint(hint$12)}`);
@@ -98140,6 +98145,13 @@ async function getForwardedWritableEncryptionKey(runId, deploymentId, encryption
98140
98145
  const rawKey = deploymentId ? await world.getEncryptionKeyForRun(runId, { deploymentId }) : await world.getEncryptionKeyForRun(await world.runs.get(runId));
98141
98146
  return rawKey ? await importKey(rawKey, ["encrypt"]) : void 0;
98142
98147
  }
98148
+ function lazyForwardedWritableEncryptionKey(runId, deploymentId, encryptionPublicKey) {
98149
+ let keyPromise;
98150
+ return () => {
98151
+ keyPromise ?? (keyPromise = getForwardedWritableEncryptionKey(runId, deploymentId, encryptionPublicKey));
98152
+ return keyPromise;
98153
+ };
98154
+ }
98143
98155
  function tagForwardedWritableTarget(writable, { deploymentId, encryptionPublicKey }) {
98144
98156
  if (typeof deploymentId === "string") {
98145
98157
  Object.defineProperty(writable, STREAM_SERVER_DEPLOYMENT_ID_SYMBOL, {
@@ -98291,7 +98303,7 @@ function getExternalRevivers(global2 = globalThis, ops, runId, cryptoKey, option
98291
98303
  },
98292
98304
  WritableStream: (value) => {
98293
98305
  const targetRunId = typeof value.runId === "string" ? value.runId : runId;
98294
- const targetKey = targetRunId === runId ? cryptoKey : getForwardedWritableEncryptionKey(targetRunId, value.deploymentId, value.encryptionPublicKey);
98306
+ const targetKey = targetRunId === runId ? cryptoKey : lazyForwardedWritableEncryptionKey(targetRunId, value.deploymentId, value.encryptionPublicKey);
98295
98307
  return createForwardedWritable({
98296
98308
  global: global2,
98297
98309
  ops,
@@ -98548,7 +98560,7 @@ function getStepRevivers(global2 = globalThis, ops, runId, cryptoKey, deployment
98548
98560
  WritableStream: (value) => {
98549
98561
  const targetRunId = typeof value.runId === "string" ? value.runId : runId;
98550
98562
  const targetDeploymentId = typeof value.deploymentId === "string" ? value.deploymentId : targetRunId === runId ? deploymentId : void 0;
98551
- const targetKey = targetRunId === runId ? cryptoKey : getForwardedWritableEncryptionKey(targetRunId, targetDeploymentId, value.encryptionPublicKey);
98563
+ const targetKey = targetRunId === runId ? cryptoKey : lazyForwardedWritableEncryptionKey(targetRunId, targetDeploymentId, value.encryptionPublicKey);
98552
98564
  const serialize2 = getSerializeStream(getStepReducers(global2, ops, targetRunId, targetKey), targetKey);
98553
98565
  const serverWritable = new WorkflowServerWritableStream(targetRunId, value.name);
98554
98566
  const state = createFlushableState();
@@ -98759,7 +98771,7 @@ globalSingleton("@workflow/core//envWarnings", 1, () => ({
98759
98771
  maxInlineStepsValues: /* @__PURE__ */ new Set(),
98760
98772
  maxEventsValues: /* @__PURE__ */ new Set()
98761
98773
  }));
98762
- const version$1 = "5.0.0-beta.52";
98774
+ const version$1 = "5.0.0-beta.53";
98763
98775
  const DEFAULT_HEALTH_CHECK_TIMEOUT = 3e4;
98764
98776
  const SAFE_WORKFLOW_NAME_PATTERN = /^[a-zA-Z0-9_\-./@()[\]]+$/;
98765
98777
  function getWorkflowQueueName(workflowName, namespace2) {
@@ -130995,7 +131007,7 @@ function createWorld$2(args) {
130995
131007
  const basedir = mergedConfig.dataDir;
130996
131008
  const hooksDir = path$3.join(basedir, "hooks");
130997
131009
  const taggedHookFiles = await listTaggedFiles(hooksDir, tag);
130998
- const { HookSchema: HookSchema2 } = await import("./index-BslvMxmv.js");
131010
+ const { HookSchema: HookSchema2 } = await import("./index-DPoW5P_O.js");
130999
131011
  await Promise.all(taggedHookFiles.map(async (hookFile) => {
131000
131012
  const hook = await readJSON(path$3.join(hooksDir, hookFile), HookSchema2);
131001
131013
  if (hook == null ? void 0 : hook.token) {
@@ -131178,8 +131190,8 @@ function requireGetVercelOidcToken() {
131178
131190
  }
131179
131191
  try {
131180
131192
  const [{ getTokenPayload, isExpired }, { refreshToken }] = await Promise.all([
131181
- await import("./token-util-C1nMjR5C.js").then((n) => n.t),
131182
- await import("./token-CSPXQgAT.js").then((n) => n.t)
131193
+ await import("./token-util-ChwiFJWk.js").then((n) => n.t),
131194
+ await import("./token-D5rGJvd_.js").then((n) => n.t)
131183
131195
  ]);
131184
131196
  if (!token || isExpired(getTokenPayload(token), options == null ? void 0 : options.expirationBufferMs)) {
131185
131197
  await refreshToken(options);
@@ -131742,7 +131754,7 @@ function requireDist() {
131742
131754
  return dist;
131743
131755
  }
131744
131756
  var distExports = requireDist();
131745
- const version = "5.0.0-beta.47";
131757
+ const version = "5.0.0-beta.48";
131746
131758
  const pools = globalSingleton("@workflow/world-vercel//httpPools", 1, () => ({
131747
131759
  dispatcher: void 0,
131748
131760
  queueDispatcher: void 0,
@@ -131908,7 +131920,15 @@ const RECYCLABLE_ERROR_CODES = /* @__PURE__ */ new Set([
131908
131920
  // Covers H2 stream timeout, frameError and GOAWAY (undici InformationalError).
131909
131921
  "UND_ERR_INFO",
131910
131922
  "UND_ERR_HEADERS_TIMEOUT",
131911
- "UND_ERR_BODY_TIMEOUT"
131923
+ "UND_ERR_BODY_TIMEOUT",
131924
+ // Node can surface these directly instead of undici's UND_ERR_INFO. Once
131925
+ // repeated, retire the pool even when classification used its fallback.
131926
+ // Keep this scoped to session/stream failures: ERR_HTTP2_* also contains
131927
+ // request-validation and caller-cancellation errors a new pool cannot fix.
131928
+ "ERR_HTTP2_GOAWAY_SESSION",
131929
+ "ERR_HTTP2_INVALID_SESSION",
131930
+ "ERR_HTTP2_SESSION_ERROR",
131931
+ "ERR_HTTP2_STREAM_ERROR"
131912
131932
  ]);
131913
131933
  const MAX_CAUSE_DEPTH = 8;
131914
131934
  function isRecyclableTransportError(error2) {
@@ -132212,6 +132232,51 @@ function getTransientTransportCode(error2) {
132212
132232
  }
132213
132233
  return void 0;
132214
132234
  }
132235
+ function validateHttpUrl(url) {
132236
+ const { protocol, username, password } = new URL(url);
132237
+ if (protocol !== "http:" && protocol !== "https:") {
132238
+ throw new TypeError(`Unsupported URL protocol ${protocol}; expected http: or https:`);
132239
+ }
132240
+ if (username || password) {
132241
+ throw new TypeError("HTTP(S) URLs with embedded credentials are unsupported");
132242
+ }
132243
+ }
132244
+ const REQUEST_CONSTRUCTION_ERROR_CODES = /* @__PURE__ */ new Set([
132245
+ "ERR_INVALID_URL",
132246
+ "ERR_INVALID_ARG_TYPE",
132247
+ "ERR_INVALID_ARG_VALUE",
132248
+ "ERR_INVALID_CHAR",
132249
+ "ERR_INVALID_HTTP_TOKEN",
132250
+ "ERR_HTTP_INVALID_HEADER_VALUE",
132251
+ "ERR_UNESCAPED_CHARACTERS",
132252
+ // Undici validates request options and headers during dispatch, after
132253
+ // Fetch has constructed the Request (e.g. unsupported Expect headers).
132254
+ "UND_ERR_INVALID_ARG",
132255
+ "UND_ERR_NOT_SUPPORTED"
132256
+ ]);
132257
+ function describeTransportFailure(error2) {
132258
+ const known = getTransientTransportCode(error2);
132259
+ if (known)
132260
+ return known;
132261
+ let firstCode;
132262
+ let innermostName;
132263
+ let current = error2;
132264
+ for (let depth = 0; current && depth < 8; depth++) {
132265
+ const { code: code2, name: name2, message: message2 } = current;
132266
+ if (name2 === "Error" && message2 === "bad port" && code2 === void 0) {
132267
+ return void 0;
132268
+ }
132269
+ if (typeof code2 === "string" && code2) {
132270
+ if (REQUEST_CONSTRUCTION_ERROR_CODES.has(code2))
132271
+ return void 0;
132272
+ firstCode ?? (firstCode = code2);
132273
+ }
132274
+ if (typeof name2 === "string" && name2)
132275
+ innermostName = name2;
132276
+ current = current.cause;
132277
+ }
132278
+ return firstCode ?? innermostName ?? "unknown";
132279
+ }
132215
132280
  const getRequestTimeoutMs = () => envNumber("WORKFLOW_REQUEST_TIMEOUT_MS", REQUEST_TIMEOUT_MS, {
132216
132281
  integer: true,
132217
132282
  min: 1e4,
@@ -132347,6 +132412,7 @@ function recordClientSpanStatus(span, status) {
132347
132412
  async function instrumentedFetch(opts) {
132348
132413
  const { method, url, headers: headers2, body: body2, dispatcher: dispatcher2, peerService, timeoutMs = getRequestTimeoutMs(), signal: callerSignal, injectTraceContext: injectTraceContext2 = true, cacheBust = true, logLabel, buildError, spanName, attributes, durationAttribute, onTransportOutcome, deferTransportSuccessUntilBody = false, onRequestDispatched, transportErrorCode = "TRANSPORT" } = opts;
132349
132414
  const label = logLabel ?? url;
132415
+ validateHttpUrl(url);
132350
132416
  return withHttpClientSpan({ method, url, peerService, spanName, attributes }, async (span) => {
132351
132417
  var _a3, _b2, _c2, _d2, _e2;
132352
132418
  if (injectTraceContext2)
@@ -132355,13 +132421,13 @@ async function instrumentedFetch(opts) {
132355
132421
  headers2.set("X-Request-Time", Date.now().toString());
132356
132422
  const timeoutSignal = timeoutMs != null ? AbortSignal.timeout(timeoutMs) : void 0;
132357
132423
  const signal = callerSignal && timeoutSignal ? AbortSignal.any([callerSignal, timeoutSignal]) : callerSignal ?? timeoutSignal;
132424
+ const nodeAgents = dispatcher2 ? void 0 : getNodeHttpAgents();
132425
+ span == null ? void 0 : span.setAttributes({
132426
+ ...WorkflowHttpTransport(nodeAgents ? "node-http" : "undici")
132427
+ });
132358
132428
  const start2 = Date.now();
132359
132429
  let response2;
132360
132430
  try {
132361
- const nodeAgents = dispatcher2 ? void 0 : getNodeHttpAgents();
132362
- span == null ? void 0 : span.setAttributes({
132363
- ...WorkflowHttpTransport(nodeAgents ? "node-http" : "undici")
132364
- });
132365
132431
  const request2 = nodeAgents ? nodeHttpFetch(url, {
132366
132432
  method,
132367
132433
  headers: headers2,
@@ -132399,7 +132465,7 @@ async function instrumentedFetch(opts) {
132399
132465
  (_a3 = span == null ? void 0 : span.recordException) == null ? void 0 : _a3.call(span, timeoutError);
132400
132466
  throw timeoutError;
132401
132467
  }
132402
- const transportCode = getTransientTransportCode(error2);
132468
+ const transportCode = describeTransportFailure(error2);
132403
132469
  if (transportCode) {
132404
132470
  const message2 = `${method} ${label} transport failure after ${elapsed}ms (${transportCode})`;
132405
132471
  const errorCode = transportErrorCode === "STREAM_ERROR" ? "STREAM_ERROR" : "TRANSPORT";
@@ -132558,6 +132624,7 @@ async function makeRequest({ endpoint, options = {}, config: config2 = {}, schem
132558
132624
  const method = (options.method || "GET").toUpperCase();
132559
132625
  const { baseUrl, headers: headers2 } = await getHttpConfig(config2);
132560
132626
  const url = `${baseUrl}${endpoint}`;
132627
+ validateHttpUrl(url);
132561
132628
  return trace(`http ${method}`, { kind: await getSpanKind("CLIENT") }, async (span) => {
132562
132629
  var _a3, _b2, _c2;
132563
132630
  span == null ? void 0 : span.setAttributes(httpClientSpanAttributes({
@@ -132579,13 +132646,15 @@ async function makeRequest({ endpoint, options = {}, config: config2 = {}, schem
132579
132646
  headers2.set("X-Request-Time", Date.now().toString());
132580
132647
  const timeoutSignal = AbortSignal.timeout(getRequestTimeoutMs());
132581
132648
  const signal = options.signal ? AbortSignal.any([options.signal, timeoutSignal]) : timeoutSignal;
132649
+ const nodeAgents = getNodeHttpAgents(config2);
132650
+ const undiciRequest = nodeAgents ? void 0 : new Request(url, { ...options, body: body2, headers: headers2, signal });
132651
+ const undiciDispatcher = nodeAgents ? void 0 : getDispatcher(config2);
132652
+ span == null ? void 0 : span.setAttributes({
132653
+ ...WorkflowHttpTransport(nodeAgents ? "node-http" : "undici")
132654
+ });
132582
132655
  const fetchStart = Date.now();
132583
132656
  let response2;
132584
132657
  try {
132585
- const nodeAgents = getNodeHttpAgents(config2);
132586
- span == null ? void 0 : span.setAttributes({
132587
- ...WorkflowHttpTransport(nodeAgents ? "node-http" : "undici")
132588
- });
132589
132658
  response2 = nodeAgents ? await nodeHttpFetch(url, {
132590
132659
  method,
132591
132660
  headers: headers2,
@@ -132597,9 +132666,9 @@ async function makeRequest({ endpoint, options = {}, config: config2 = {}, schem
132597
132666
  // no stalled-socket deadline.
132598
132667
  headersTimeoutMs: NODE_HTTP_HEADERS_TIMEOUT_MS,
132599
132668
  bodyTimeoutMs: NODE_HTTP_BODY_TIMEOUT_MS
132600
- }) : await fetch(new Request(url, { ...options, body: body2, headers: headers2, signal }), {
132669
+ }) : await fetch(undiciRequest, {
132601
132670
  // eslint-disable-next-line @typescript-eslint/no-explicit-any -- undici v7 dispatcher types don't match @types/node's RequestInit
132602
- dispatcher: getDispatcher(config2)
132671
+ dispatcher: undiciDispatcher
132603
132672
  });
132604
132673
  } catch (error2) {
132605
132674
  const elapsed = Date.now() - fetchStart;
@@ -132609,7 +132678,7 @@ async function makeRequest({ endpoint, options = {}, config: config2 = {}, schem
132609
132678
  (_a3 = span == null ? void 0 : span.recordException) == null ? void 0 : _a3.call(span, timeoutError);
132610
132679
  throw timeoutError;
132611
132680
  }
132612
- const transportCode = getTransientTransportCode(error2);
132681
+ const transportCode = describeTransportFailure(error2);
132613
132682
  if (transportCode) {
132614
132683
  if (retryConnectTimeout && canRetryRead && transportCode === "UND_ERR_CONNECT_TIMEOUT" && attempt === 0) {
132615
132684
  await new Promise((resolve2) => setTimeout(resolve2, BODY_PARSE_RETRY_BASE_MS));
@@ -133338,7 +133407,7 @@ function createGetEncryptionKeyForRun(projectId, teamId, token, dispatcher2) {
133338
133407
  };
133339
133408
  }
133340
133409
  async function getDeadline() {
133341
- const { getDeadline: getDeadline2 } = await import("./index-BY1UiSvZ.js").then((n) => n.i);
133410
+ const { getDeadline: getDeadline2 } = await import("./index-CsLAjmyX.js").then((n) => n.i);
133342
133411
  return getDeadline2();
133343
133412
  }
133344
133413
  const WORKFLOW_SERVER_SERVICE = {
@@ -138475,7 +138544,7 @@ const wsEventsChannelForInvocation = (runId, config2) => {
138475
138544
  open() {
138476
138545
  if (!runId || !isWsEventsTransportEnabled())
138477
138546
  return;
138478
- claim2 = import("./ws-transport-CfFD7U2V.js").then(({ openWsChannel }) => openWsChannel(runId, config2)).catch(() => void 0);
138547
+ claim2 = import("./ws-transport-BQdJnqBo.js").then(({ openWsChannel }) => openWsChannel(runId, config2)).catch(() => void 0);
138479
138548
  },
138480
138549
  /**
138481
138550
  * Awaited, unlike the open: work scheduled after the handler returns is not
@@ -138928,7 +138997,7 @@ function isRetryableEventPostError(err) {
138928
138997
  if (EntityConflictError.is(err) || RunExpiredError.is(err) || TooEarlyError.is(err) || ThrottleError.is(err)) {
138929
138998
  return false;
138930
138999
  }
138931
- if (WorkflowWorldError.is(err)) {
139000
+ if (WorkflowWorldError.is(err) || StreamError.is(err)) {
138932
139001
  if (err.code === "PARSE_ERROR")
138933
139002
  return true;
138934
139003
  if (err.code === "TRANSPORT")
@@ -138936,6 +139005,14 @@ function isRetryableEventPostError(err) {
138936
139005
  if (typeof err.status === "number") {
138937
139006
  return err.status >= 500 && err.status <= 599;
138938
139007
  }
139008
+ if (err.code === "STREAM_ERROR") {
139009
+ return !collectErrorMarkers(err).some((marker) => [
139010
+ "AbortError",
139011
+ "ABORT_ERR",
139012
+ "UND_ERR_ABORTED",
139013
+ "ERR_HTTP2_STREAM_CANCEL"
139014
+ ].includes(marker));
139015
+ }
138939
139016
  }
138940
139017
  return collectErrorMarkers(err).some((m2) => TRANSIENT_CODES.has(m2));
138941
139018
  }
@@ -139295,7 +139372,7 @@ async function fetchV4(url, init2, config2, opName, attributes) {
139295
139372
  }
139296
139373
  } catch (cause) {
139297
139374
  noteEventsTransportOutcome(dispatcher2, cause);
139298
- const transportCode = getTransientTransportCode(cause);
139375
+ const transportCode = describeTransportFailure(cause);
139299
139376
  controller.error(transportCode ? new StreamError(`v4 ${opName}: response stream transport failure (${transportCode})`, { cause, url }) : cause);
139300
139377
  }
139301
139378
  },
@@ -139785,7 +139862,7 @@ function wsReplyStatus(reply, endpoint) {
139785
139862
  return status;
139786
139863
  }
139787
139864
  async function postEventFrameOverWs(input, config2) {
139788
- const { resolveWsTransport } = await import("./ws-transport-CfFD7U2V.js");
139865
+ const { resolveWsTransport } = await import("./ws-transport-BQdJnqBo.js");
139789
139866
  const { runId } = input;
139790
139867
  const resolved = resolveWsTransport(runId, config2);
139791
139868
  if (!resolved)
@@ -140864,7 +140941,7 @@ function beginNormalWsClose(ws, reason) {
140864
140941
  await observed;
140865
140942
  span == null ? void 0 : span.setAttribute("workflow.stream.ws.close_cleanup_timeout", timedOut);
140866
140943
  });
140867
- void import("./index-BY1UiSvZ.js").then((n) => n.i).then(({ waitUntil: waitUntil2 }) => waitUntil2(cleanup)).catch(() => {
140944
+ void import("./index-CsLAjmyX.js").then((n) => n.i).then(({ waitUntil: waitUntil2 }) => waitUntil2(cleanup)).catch(() => {
140868
140945
  });
140869
140946
  void cleanup.catch(() => {
140870
140947
  });
@@ -141216,7 +141293,7 @@ class VercelStreamWriteSession {
141216
141293
  return http3;
141217
141294
  });
141218
141295
  const [{ WebSocket: WebSocketImpl }, http2] = await Promise.all([
141219
- import("./wrapper-DLlJtdca.js"),
141296
+ import("./wrapper-CeBkFVzB.js"),
141220
141297
  httpPromise
141221
141298
  ]);
141222
141299
  if (this.mode !== "connecting")
@@ -141974,7 +142051,7 @@ globalSingleton("@workflow/core//devServerPort", 1, () => ({
141974
142051
  inFlight: void 0
141975
142052
  }));
141976
142053
  function waitUntil(promise2) {
141977
- void import("./index-BY1UiSvZ.js").then((n) => n.i).then(({ waitUntil: waitUntil2 }) => {
142054
+ void import("./index-CsLAjmyX.js").then((n) => n.i).then(({ waitUntil: waitUntil2 }) => {
141978
142055
  waitUntil2(promise2);
141979
142056
  });
141980
142057
  }
@@ -2,7 +2,7 @@ import { createRequire as __wkfCreateRequire } from "node:module";
2
2
  if (typeof require === "undefined") {
3
3
  globalThis.require = __wkfCreateRequire(import.meta.url);
4
4
  }
5
- import { b4 as reactExports, b5 as R, b6 as Ks, b7 as jsxRuntimeExports, b8 as Qe } from "./app-CPvbv5SM.js";
5
+ import { b4 as reactExports, b5 as R, b6 as Ks, b7 as jsxRuntimeExports, b8 as Qe } from "./app-Bh6jcVnZ.js";
6
6
  import "node:stream";
7
7
  import "stream";
8
8
  import "util";
@@ -1137,7 +1137,7 @@ function requireWebsocket() {
1137
1137
  const DEFAULT_MAX_PAYLOAD = 256 * 1024;
1138
1138
  async function loadWebSocketServer() {
1139
1139
  try {
1140
- const ws = await import("./wrapper-DLlJtdca.js");
1140
+ const ws = await import("./wrapper-CeBkFVzB.js");
1141
1141
  return ws.WebSocketServer;
1142
1142
  } catch {
1143
1143
  throw new Error(
@@ -2,8 +2,8 @@ import { createRequire as __wkfCreateRequire } from "node:module";
2
2
  if (typeof require === "undefined") {
3
3
  globalThis.require = __wkfCreateRequire(import.meta.url);
4
4
  }
5
- import { H as HookSchema } from "./app-CPvbv5SM.js";
6
- import { A, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, B, r, s, t, u, C, D, v, E, w, x, y, F, z, G, I, J, K, L, M, O, P, Q, R, S, T, U, V, W, X, Y, Z, _, $, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, aA, aB, aC, aD, aE, aF, aG, aH, aI, aJ, aK, aL, aM, aN, aO, aP, aQ, aR, aS, aT, aU, aV, aW, aX, aY, aZ, a_, a$, b0, b1, b2, b3 } from "./app-CPvbv5SM.js";
5
+ import { H as HookSchema } from "./app-Bh6jcVnZ.js";
6
+ import { A, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, B, r, s, t, u, C, D, v, E, w, x, y, F, z, G, I, J, K, L, M, O, P, Q, R, S, T, U, V, W, X, Y, Z, _, $, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at, au, av, aw, ax, ay, az, aA, aB, aC, aD, aE, aF, aG, aH, aI, aJ, aK, aL, aM, aN, aO, aP, aQ, aR, aS, aT, aU, aV, aW, aX, aY, aZ, a_, a$, b0, b1, b2, b3 } from "./app-Bh6jcVnZ.js";
7
7
  import "node:stream";
8
8
  import "stream";
9
9
  import "util";
@@ -2,7 +2,7 @@ import { createRequire as __wkfCreateRequire } from "node:module";
2
2
  if (typeof require === "undefined") {
3
3
  globalThis.require = __wkfCreateRequire(import.meta.url);
4
4
  }
5
- import { N as Nt } from "./app-CPvbv5SM.js";
5
+ import { N as Nt } from "./app-Bh6jcVnZ.js";
6
6
  import "node:stream";
7
7
  import "stream";
8
8
  import "util";
@@ -2,7 +2,7 @@ import { createRequire as __wkfCreateRequire } from "node:module";
2
2
  if (typeof require === "undefined") {
3
3
  globalThis.require = __wkfCreateRequire(import.meta.url);
4
4
  }
5
- import { bs as requireTokenError, br as requireTokenUtil, bq as getDefaultExportFromCjs } from "./app-CPvbv5SM.js";
5
+ import { bs as requireTokenError, br as requireTokenUtil, bq as getDefaultExportFromCjs } from "./app-Bh6jcVnZ.js";
6
6
  function _mergeNamespaces(n, m) {
7
7
  for (var i = 0; i < m.length; i++) {
8
8
  const e = m[i];
@@ -2,7 +2,7 @@ import { createRequire as __wkfCreateRequire } from "node:module";
2
2
  if (typeof require === "undefined") {
3
3
  globalThis.require = __wkfCreateRequire(import.meta.url);
4
4
  }
5
- import { bq as getDefaultExportFromCjs, br as requireTokenUtil } from "./app-CPvbv5SM.js";
5
+ import { bq as getDefaultExportFromCjs, br as requireTokenUtil } from "./app-Bh6jcVnZ.js";
6
6
  function _mergeNamespaces(n, m) {
7
7
  for (var i = 0; i < m.length; i++) {
8
8
  const e = m[i];
@@ -2,7 +2,7 @@ import { createRequire as __wkfCreateRequire } from "node:module";
2
2
  if (typeof require === "undefined") {
3
3
  globalThis.require = __wkfCreateRequire(import.meta.url);
4
4
  }
5
- import { bt as getAugmentedNamespace, bq as getDefaultExportFromCjs } from "./app-CPvbv5SM.js";
5
+ import { bt as getAugmentedNamespace, bq as getDefaultExportFromCjs } from "./app-Bh6jcVnZ.js";
6
6
  import require$$0$2 from "stream";
7
7
  import require$$0$3 from "events";
8
8
  import require$$2$1 from "http";
@@ -2,9 +2,9 @@ import { createRequire as __wkfCreateRequire } from "node:module";
2
2
  if (typeof require === "undefined") {
3
3
  globalThis.require = __wkfCreateRequire(import.meta.url);
4
4
  }
5
- import { W as WebSocket } from "./websocket-server-Bcu1iZeP.js";
6
- import { p, r, s, w, a, e, b } from "./websocket-server-Bcu1iZeP.js";
7
- import "./app-CPvbv5SM.js";
5
+ import { W as WebSocket } from "./websocket-server-B8WVLAEO.js";
6
+ import { p, r, s, w, a, e, b } from "./websocket-server-B8WVLAEO.js";
7
+ import "./app-Bh6jcVnZ.js";
8
8
  import "node:stream";
9
9
  import "stream";
10
10
  import "util";
@@ -5,8 +5,8 @@ import { createRequire as __wkfCreateRequire } from "node:module";
5
5
  if (typeof require === "undefined") {
6
6
  globalThis.require = __wkfCreateRequire(import.meta.url);
7
7
  }
8
- import { ba as isWsEventsTransportEnabled, bb as debugLog, bc as getHttpUrl, bd as globalSingleton, be as version, bf as getHttpConfig, bg as headersToRecord, bh as getRequestTimeoutMs, bi as injectTraceContextIntoHeaders, bj as withHttpClientSpan, bk as ErrorType, bl as WorkflowWsReconnectAttempt, bm as NetworkProtocolName, bn as WorkflowEventsTransport, bo as distExports, bp as decodeFrames } from "./app-CPvbv5SM.js";
9
- import { W as WebSocket } from "./websocket-server-Bcu1iZeP.js";
8
+ import { ba as isWsEventsTransportEnabled, bb as debugLog, bc as getHttpUrl, bd as globalSingleton, be as version, bf as getHttpConfig, bg as headersToRecord, bh as getRequestTimeoutMs, bi as injectTraceContextIntoHeaders, bj as withHttpClientSpan, bk as ErrorType, bl as WorkflowWsReconnectAttempt, bm as NetworkProtocolName, bn as WorkflowEventsTransport, bo as distExports, bp as decodeFrames } from "./app-Bh6jcVnZ.js";
9
+ import { W as WebSocket } from "./websocket-server-B8WVLAEO.js";
10
10
  import "node:stream";
11
11
  import "stream";
12
12
  import "util";
@@ -2,7 +2,7 @@ import { createRequire as __wkfCreateRequire } from "node:module";
2
2
  if (typeof require === "undefined") {
3
3
  globalThis.require = __wkfCreateRequire(import.meta.url);
4
4
  }
5
- import { b9 as registerZstdDecoder } from "./app-CPvbv5SM.js";
5
+ import { b9 as registerZstdDecoder } from "./app-Bh6jcVnZ.js";
6
6
  import "node:stream";
7
7
  import "stream";
8
8
  import "util";
@@ -2,7 +2,7 @@ import { createRequire as __wkfCreateRequire } from "node:module";
2
2
  if (typeof require === "undefined") {
3
3
  globalThis.require = __wkfCreateRequire(import.meta.url);
4
4
  }
5
- import { bu, bv } from "./assets/app-CPvbv5SM.js";
5
+ import { bu, bv } from "./assets/app-Bh6jcVnZ.js";
6
6
  import "express";
7
7
  import "node:stream";
8
8
  import "stream";
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@workflow/web",
3
3
  "description": "Workflow Observability UI",
4
- "version": "5.0.0-beta.52",
4
+ "version": "5.0.0-beta.53",
5
5
  "type": "module",
6
6
  "private": false,
7
7
  "files": [
@@ -65,12 +65,12 @@
65
65
  "@types/react": "19",
66
66
  "@types/react-dom": "19",
67
67
  "@vercel/react-router": "1.2.6",
68
- "@workflow/core": "5.0.0-beta.52",
68
+ "@workflow/core": "5.0.0-beta.53",
69
69
  "@workflow/errors": "5.0.0-beta.21",
70
70
  "@workflow/utils": "5.0.0-beta.10",
71
- "@workflow/web-shared": "5.0.0-beta.52",
71
+ "@workflow/web-shared": "5.0.0-beta.53",
72
72
  "@workflow/world": "5.0.0-beta.36",
73
- "@workflow/world-vercel": "5.0.0-beta.47",
73
+ "@workflow/world-vercel": "5.0.0-beta.48",
74
74
  "@xyflow/react": "12.10.1",
75
75
  "cbor-x": "^1",
76
76
  "class-variance-authority": "0.7.1",