/** * Capabilities table for workflow runs based on their `@workflow/core` version. * * When resuming a hook or webhook, the payload must be encoded in a format * that the *target* workflow run's deployment can decode. This module provides * a way to look up what serialization formats a given `@workflow/core` version * supports, so that newer deployments can avoid encoding payloads in formats * that older deployments don't understand (e.g., the `encr` encryption format). * * ## Adding a new format * * When a new serialization format is introduced: * 1. Add the format constant to `SerializationFormat` in `serialization.ts` * 2. Add an entry to `FORMAT_VERSION_TABLE` below with the minimum * `@workflow/core` version that supports it * 3. The `getRunCapabilities()` function will automatically include it * * ## Adding a new non-format capability * * Some capabilities aren't serialization format prefixes — e.g. * byte-stream wire framing is an envelope around chunks rather than * a content format. For those, add a boolean field to `RunCapabilities` * and an entry in `CAPABILITY_VERSION_TABLE` below. * * ## History * * - `encr` (AES-256-GCM encryption): added in `4.2.0-beta.64` * Commit: 7618ac36 "Wire AES-GCM encryption into serialization layer (#1251)" * https://github.com/vercel/workflow/commit/7618ac36 * - `framedByteStreams` (wire-level chunk framing for byte streams): added in * `4.6.0` on the stable line and `5.0.0-beta.15` on the beta line * Commit: f2ad726 "Add wire-level framing for byte streams (#1853)" * https://github.com/vercel/workflow/commit/f2ad726 */ import { type SerializationFormatType } from './serialization.js'; /** * Capabilities of a workflow run based on its `@workflow/core` version. */ export interface RunCapabilities { /** * The set of serialization format prefixes that the target run can decode. * Use `supportedFormats.has(SerializationFormat.ENCRYPTED)` to check * if encryption is supported, etc. */ supportedFormats: ReadonlySet; /** * Whether the target run can decode wire-framed byte streams. When true, * byte streams (`type: 'bytes'` ReadableStreams passed across boundaries) * are wrapped in a length-prefixed frame envelope on the wire so the * reader can identify chunk boundaries — which enables auto-reconnect * on transient stream errors. When false, byte streams are written as * raw bytes (the legacy format) for compatibility with older runs. */ framedByteStreams: boolean; } /** * Look up what serialization capabilities a workflow run supports based on * its `@workflow/core` version string (from `executionContext.workflowCoreVersion`). * * When the version is `undefined`, not a string, or not a valid semver string * (e.g. very old runs that predate the field, or corrupted metadata), * we assume the most conservative capabilities (baseline formats only, * non-format capabilities all `false`). */ export declare function getRunCapabilities(workflowCoreVersion: string | undefined): RunCapabilities; //# sourceMappingURL=capabilities.d.ts.map