UNPKG

inngest

Version:

Official SDK for Inngest.com. Inngest is the reliability layer for modern applications. Inngest combines durable execution, events, and queues into a zero-infra platform with built-in observability.

161 lines (159 loc) 5.44 kB
import { SseResponse } from "./execution/streaming.cjs"; //#region src/components/StreamTools.d.ts /** * Accepted source types for `stream.pipe()`. * * - `ReadableStream` — piped directly * - `AsyncIterable<string>` — iterated; each yielded value becomes a chunk * - `() => AsyncIterable<string>` — factory invoked lazily, then iterated */ type PipeSource = ReadableStream | AsyncIterable<string> | (() => AsyncIterable<string>); /** * The public interface for stream tools available to user code. */ interface StreamTools { /** * Push data to the client as an SSE stream event. Fire-and-forget from the * caller's perspective. * * Outside of an Inngest execution context this is a silent no-op (graceful * degradation). */ push(data: unknown): void; /** * Pipe a source to the client, writing each chunk as an SSE stream event. * Resolves with the concatenated content of all chunks when the source is * fully consumed. * * Accepts a `ReadableStream`, an `AsyncIterable<string>`, or a factory * function that returns an `AsyncIterable<string>` (e.g. an async * generator function). * * Outside of an Inngest execution context this resolves with an empty string. */ pipe(source: PipeSource): Promise<string>; } /** * Wraps a `TransformStream<Uint8Array>` to provide push/pipe SSE streaming * capabilities within an Inngest execution. * * @internal */ declare class Stream implements StreamTools { private transform; private writer; private encoder; private _activated; private _errored; private writeChain; /** * Optional callback invoked the first time `push` or `pipe` is called. * Used by the execution engine to fire a checkpoint that returns the SSE * Response to the client immediately. */ private onActivated?; /** * Optional callback invoked when a write to the underlying stream fails * (e.g. the client disconnected or the transform stream errored). Used by * the execution engine to emit diagnostic logs. */ private onWriteError?; constructor(opts?: { onActivated?: () => void; onWriteError?: (err: unknown) => void; }); /** * Whether `push` or `pipe` has been called at least once. */ get activated(): boolean; /** * The readable side of the underlying transform stream. Consumers (i.e. the * HTTP response) read SSE events from here. */ get readable(): ReadableStream<Uint8Array>; /** * Resolve the current hashed step ID for stream events. Returns the * executing step's hashed ID (read from ALS), or undefined if outside a step. */ private currentHashedStepId; private activate; /** * Encode and write an SSE event string to the underlying writer. */ private writeEncoded; /** * Enqueue a pre-built SSE event string onto the write chain. */ private enqueue; /** * Emit an `inngest.commit` SSE event indicating that uncommitted streamed data * should be committed (i.e. will not be rolled back). Internal use only. */ commit(hashedStepId: string | null): void; /** * Emit an `inngest.rollback` SSE event indicating the uncommitted streamed * data should be discarded (e.g. step errored). Internal use only. */ rollback(hashedStepId: string | null): void; /** * Serialize `data` into an SSE stream event and enqueue it. Returns `false` * if serialization fails (e.g. circular reference) so callers can skip. */ private enqueueStreamEvent; /** * Write a single SSE stream event containing `data`. The current step's * hashed ID is automatically included as stepId for rollback tracking. */ push(data: unknown): void; /** * Pipe a source to the client, writing each chunk as an SSE stream event. * Returns the concatenated content of all chunks. */ pipe(source: PipeSource): Promise<string>; /** * Adapt a ReadableStream into an AsyncIterable<string>. TypeScript's * ReadableStream type doesn't declare Symbol.asyncIterator, so we use the * reader API for type safety. */ private readableToAsyncIterable; /** * Core pipe loop: iterate an async iterable, writing each chunk as an SSE * stream event and collecting the concatenated result. */ private pipeIterable; /** * Write a redirect info event. Tells the client where to reconnect if the * durable endpoint goes async. Does NOT close the writer — more stream * events may follow before the durable endpoint actually switches to async * mode. Internal use only. */ sendRedirectInfo(data: { runId: string; url: string; }): void; /** * Write a succeeded result event and close the writer. Internal use only. */ closeSucceeded(response: SseResponse): void; /** * Write a failed result event and close the writer. Internal use only. */ closeFailed(error: string): void; /** * Optionally write a final SSE event, then close the writer. */ private closeWriter; /** * Close the writer without writing a result event. Used when the durable endpoint goes * async and the real result will arrive on the redirected stream. */ end(): void; } /** * Stream tools that use ALS to resolve the current execution context. * Outside an Inngest execution, `push()` is a no-op and `pipe()` resolves immediately. */ declare const stream: StreamTools; //#endregion export { Stream, stream }; //# sourceMappingURL=StreamTools.d.cts.map