import { n as EventTag, r as Eventa } from "./eventa-CCPqecvv.mjs"; import { t as EventContext } from "./context-C4Cia9QU.mjs"; //#region src/channel.d.ts type ChannelPluginResult = false | void | Eventa | Promise>; interface ChannelPluginContext { source: EventContext; target: EventContext; direction?: string; } type ChannelPlugin = (event: Eventa, context: ChannelPluginContext) => ChannelPluginResult; interface ChannelLinkPluginContext { source: EventContext | EventContext; target: EventContext | EventContext; direction?: string; } type ChannelLinkPlugin = (event: Eventa, context: ChannelLinkPluginContext) => ChannelPluginResult; declare function defineChannelPlugin(plugin: ChannelPlugin): ChannelPlugin; interface ChannelPipe { use: (plugin: ChannelPlugin) => () => void; dispose: () => void; } interface ChannelPipeGroup extends ChannelPipe { pipes: Array>; } interface ChannelPipeOptions { plugins?: ChannelPlugin | Array>; direction?: string; /** * Propagates source context abort to every target context by default. * * NOTICE: this is lifecycle propagation, not an event flowing through the * plugin pipeline. Channel plugins and filters do not block it. Set false * when contexts should share events but keep independent lifetimes. */ propagateAbort?: boolean; } interface ChannelLinkOptions { plugins?: ChannelLinkPlugin | Array>; /** * Propagates abort across the linked mesh by default. * * NOTICE: this is lifecycle propagation, not an event flowing through the * plugin pipeline. Link plugins and filters do not block it. Set false when * contexts should share events but keep independent lifetimes. */ propagateAbort?: boolean; } interface ChannelLink { pipes: Array>; use: (plugin: ChannelLinkPlugin) => () => void; dispose: () => void; } type ChannelConnectionOptions = ChannelLinkOptions; type ChannelConnection = ChannelLink; declare function pipeChannel(from: EventContext, to: EventContext, options?: ChannelPipeOptions | ChannelPlugin | Array>): ChannelPipeGroup; declare function pipeChannel(from: EventContext, firstTo: EventContext, ...targetsAndOptions: Array | ChannelPipeOptions | ChannelPlugin | Array>>): ChannelPipeGroup; declare function linkChannel(leftContext: EventContext, rightContext: EventContext, options?: ChannelLinkOptions): ChannelLink; declare function linkChannel(...contextsAndOptions: Array | ChannelLinkOptions>): ChannelLink; //#endregion //#region src/invoke-shared.d.ts declare enum InvokeEventType { SendEvent = 0, SendEventError = 1, SendEventStreamEnd = 2, SendEventAbort = 3, ReceiveEvent = 4, ReceiveEventError = 5, ReceiveEventStreamEnd = 6 } interface SendEvent extends Eventa<{ invokeId: string; content: Req; isReqStream?: boolean; }, M, IM> { id: EventTag; invokeType: InvokeEventType.SendEvent; } interface SendEventError extends Eventa<{ invokeId: string; content: ReqErr; }, M, IM> { id: EventTag; invokeType: InvokeEventType.SendEventError; } interface SendEventStreamEnd extends Eventa<{ invokeId: string; content: undefined; }, M, IM> { id: EventTag; invokeType: InvokeEventType.SendEventStreamEnd; } interface SendEventAbort extends Eventa<{ invokeId: string; content?: unknown; }, M, IM> { id: EventTag; invokeType: InvokeEventType.SendEventAbort; } interface ReceiveEvent extends Eventa<{ invokeId: string; content: Res; }, M, IM> { id: EventTag; invokeType: InvokeEventType.ReceiveEvent; } interface ReceiveEventError extends Eventa<{ invokeId: string; content: { error: ResErr; }; }, M, IM> { id: EventTag; invokeType: InvokeEventType.ReceiveEventError; } interface ReceiveEventStreamEnd extends Eventa<{ invokeId: string; content: undefined; }, M, IM> { id: EventTag; invokeType: InvokeEventType.ReceiveEventStreamEnd; } interface InvokeEventa { sendEvent: SendEvent; sendEventError: SendEventError; sendEventStreamEnd: SendEventStreamEnd; sendEventAbort: SendEventAbort; receiveEvent: ReceiveEvent; receiveEventError: ReceiveEventError; receiveEventStreamEnd: ReceiveEventStreamEnd; } interface InvokeHandlerEventa extends InvokeEventa { sendEvent: SendEvent; sendEventError: SendEventError; sendEventStreamEnd: SendEventStreamEnd; sendEventAbort: SendEventAbort; receiveEvent: ReceiveEvent; receiveEventError: ReceiveEventError; receiveEventStreamEnd: ReceiveEventStreamEnd; } type InferSendEvent = T extends { sendEvent: SendEvent; } ? SendEvent : never; type InferSendEventError = T extends { sendEventError: SendEventError; } ? SendEventError : never; type InferSendEventStreamEnd = T extends { sendEventStreamEnd: SendEventStreamEnd; } ? SendEventStreamEnd : never; type InferSendEventAbort = T extends { sendEventAbort: SendEventAbort; } ? SendEventAbort : never; type InferReceiveEvent = T extends { receiveEvent: ReceiveEvent; } ? ReceiveEvent : never; type InferReceiveEventError = T extends { receiveEventError: ReceiveEventError; } ? ReceiveEventError : never; type InferReceiveEventStreamEnd = T extends { receiveEventStreamEnd: ReceiveEventStreamEnd; } ? ReceiveEventStreamEnd : never; declare function defineInvokeEventa(tag?: string, options?: { metadata?: M; invokeMetadata?: IM; }): { sendEvent: SendEvent; sendEventError: SendEventError; sendEventStreamEnd: SendEventStreamEnd; sendEventAbort: SendEventAbort; receiveEvent: ReceiveEvent; receiveEventError: ReceiveEventError; receiveEventStreamEnd: ReceiveEventStreamEnd; }; declare function isInvokeEventa(event: Eventa): event is SendEvent | SendEventError | SendEventStreamEnd | ReceiveEvent | ReceiveEventError | ReceiveEventStreamEnd | SendEventAbort; declare function isSendEvent(event: Eventa): event is SendEvent | SendEventError | SendEventStreamEnd | SendEventAbort; declare function isReceiveEvent(event: Eventa): event is ReceiveEvent | ReceiveEventError | ReceiveEventStreamEnd; //#endregion //#region src/invoke.d.ts type IsInvokeRequestOptional> = EC extends EventContext ? E extends { invokeRequest: any; } ? undefined extends E['invokeRequest'] ? true : false : E extends { invokeRequest?: any; } ? undefined extends E['invokeRequest'] ? true : false : true : true; type ExtractInvokeRequestOptions> = EC extends EventContext ? E extends { invokeRequest: infer IR; } ? IR & { signal?: AbortSignal; } : E extends { invokeRequest?: infer IR; } ? IR & { signal?: AbortSignal; } : { signal?: AbortSignal; } : { signal?: AbortSignal; }; type ExtractInvokeResponseOptions> = EC extends EventContext ? E extends { invokeResponse: infer IR; } ? IR : E extends { invokeResponse?: infer IR; } ? IR : undefined : undefined; type InvokeFunction> = [Req] extends [undefined] ? IsInvokeRequestOptional extends true ? (req?: Req, options?: ExtractInvokeRequestOptions) => Promise : (req: Req, options: ExtractInvokeRequestOptions) => Promise : IsInvokeRequestOptional extends true ? (req: Req, options?: ExtractInvokeRequestOptions) => Promise : (req: Req, options: ExtractInvokeRequestOptions) => Promise; type InvokeFunctionMap>, EC extends EventContext> = { [K in keyof EventMap]: EventMap[K] extends InvokeEventa ? InvokeFunction : never }; type ExtendableInvokeResponse> = Promise | Res | Promise<{ response: Res; invokeResponse?: ExtractInvokeResponseOptions; }> | { response: Res; invokeResponse?: ExtractInvokeResponseOptions; }; declare function isExtendableInvokeResponseLike>(value: Eventa | ReceiveEvent<{ response: Res; invokeResponse?: unknown; }>): value is ReceiveEvent<{ response: Res; invokeResponse?: ExtractInvokeResponseOptions; }>; type Handler = EventContext, RawEventOptions = unknown> = (payload: Req, options?: { abortController?: AbortController; } & RawEventOptions) => ExtendableInvokeResponse; interface InternalInvokeHandler { onSend: (params: Eventa['sendEvent']['body']>>, eventOptions?: EO) => void; onSendStreamEnd: (params: Eventa['sendEventStreamEnd']['body']>>, eventOptions?: EO) => void; onSendAbort: (params: Eventa['sendEventAbort']['body']>>, eventOptions?: EO) => void; cleanup: () => void; } type HandlerMap>, EO = any, EC extends EventContext = EventContext> = { [K in keyof EventMap]: EventMap[K] extends InvokeEventa ? Handler : never }; interface InvocableEventContext extends EventContext { invokeHandlers?: Map, InternalInvokeHandler>>; } /** * Create a unary invoke function (client side). * * It supports unary or streaming requests, but returns a single response. * Use `defineStreamInvoke` when you expect a stream of responses. * * If you want stream input, set `Req` to `ReadableStream` or `AsyncIterable` * (or a union type like `T | ReadableStream` for optional streaming). * * @example * ```ts * // 1) Define eventa once (shared by client/server) * const events = defineInvokeEventa<{ id: string }, { name: string }>() * * // 2) Client: define invoke function * const invoke = defineInvoke(clientCtx, events) * * // 3) Call * const res = await invoke({ name: 'alice' }) * ``` * * @example * ```ts * // Stream request -> unary response * const events = defineInvokeEventa>() * * defineInvokeHandler(serverCtx, events, async (payload) => { * let sum = 0 * for await (const value of payload) { * sum += value * } * * return sum * }) * * const invoke = defineInvoke(clientCtx, events) * const input = new ReadableStream({ * start(controller) { * controller.enqueue(1) * controller.enqueue(2) * controller.close() * }, * }) * * const total = await invoke(input) * ``` * * @param ctx Event context on the caller/client side. * @param event Invoke event definition created by `defineInvokeEventa`. */ declare function defineInvoke = EventContext>(ctx: ECtx | (() => ECtx | Promise), event: InvokeEventa): InvokeFunction; /** * Create a map of invoke functions from a map of invoke events (client side). * * @example * ```ts * const events = { * double: defineInvokeEventa(), * greet: defineInvokeEventa(), * } * * const invokes = defineInvokes(ctx, events) * const result = await invokes.double(2) * ``` * * @param ctx Event context on the caller/client side. * @param events Map of invoke events created by `defineInvokeEventa`. */ declare function defineInvokes>, CtxExt = any, EOpts = any, ECtx extends EventContext = EventContext>(ctx: ECtx | (() => ECtx | Promise), events: EventMap): InvokeFunctionMap; /** * Define a unary invoke handler (server side). * * The handler can accept a unary or streaming request; it must return * a single response (or an extendable response envelope). * * @example * ```ts * const events = defineInvokeEventa<{ id: string }, { name: string }>() * * defineInvokeHandler(serverCtx, events, ({ name }) => ({ * id: `user-${name}`, * })) * ``` * * @param ctx Event context on the handler/server side. * @param event Invoke event definition created by `defineInvokeEventa`. * @param handler Handler that returns a response (or response + metadata). */ declare function defineInvokeHandler(ctx: InvocableEventContext, event: InvokeHandlerEventa, handler: Handler, EOpts>): () => void; /** * Define multiple invoke handlers in batch (server side). * * @example * ```ts * const events = { * double: defineInvokeEventa(), * greet: defineInvokeEventa(), * } * * defineInvokeHandlers(ctx, events, { * double: value => value * 2, * greet: ({ name }) => `hi ${name}`, * }) * ``` * * @param ctx Event context on the handler/server side. * @param events Map of invoke events created by `defineInvokeEventa`. * @param handlers Map of handlers keyed by event name. */ declare function defineInvokeHandlers>, CtxExt = any, EOpts extends { raw?: any; } = any>(ctx: InvocableEventContext, events: EventMap, handlers: HandlerMap): Record void>; /** * Remove one or all invoke handlers for a specific invoke event (server side). * * @example * ```ts * const off = defineInvokeHandler(ctx, events, handler) * off() // remove one handler * * // or remove all handlers for the event: * undefineInvokeHandler(ctx, events) * ``` * * @param ctx Event context on the handler/server side. * @param event Invoke event definition created by `defineInvokeEventa`. * @param handler Specific handler to remove (omit to remove all). * @returns `true` if at least one handler was removed, `false` otherwise */ declare function undefineInvokeHandler(ctx: InvocableEventContext, event: InvokeEventa, handler?: Handler, EOpts>): boolean; //#endregion //#region src/invoke-extension-transfer.d.ts interface WithTransfer { message: T; _transfer?: Transferable[]; } declare function withTransfer(body: T, transfer?: Transferable[]): ExtendableInvokeResponse>; //#endregion //#region src/invoke-remote-methods.d.ts interface InvokeFunctionStubOptions { allow?: boolean; maxDepth?: number; maxFunctions?: number; tagPrefix?: string; onDisallowedTag?: 'ignore' | 'throw'; autoDisposeMs?: number; strict?: boolean; } type RemoteInvokeOptions> = ExtractInvokeRequestOptions & { functionStubs?: boolean | InvokeFunctionStubOptions; }; interface RemoteInvokeResult extends Promise { dispose: () => void; } type RemoteInvokeFunction> = [Req] extends [undefined] ? (req?: Req, options?: RemoteInvokeOptions) => RemoteInvokeResult : (req: Req, options?: RemoteInvokeOptions) => RemoteInvokeResult; declare function createRemoteMethodTagPrefix(prefix?: string): string; /** * Enable "remote method" payloads for invoke: functions in the request body are * serialized into stub descriptors and rehydrated into invoke callers on the * receiving side. * * This is an adapter around the plain-value RPC primitives `defineInvoke` and * `defineInvokeHandler`. It keeps the core invoke APIs clean while offering an * opt-in bridge for function values. * * @example * ```ts * const remote = withRemoteMethods({ allow: true }) * const events = defineInvokeEventa<{ output: number }, { helper: (n: number) => Promise }>() * * // server (handler) * remote.defineInvokeHandler(serverCtx, events, async ({ helper }) => { * const output = await helper(21) * return { output } * }) * * // client (caller) * const invoke = remote.defineInvoke(clientCtx, events) * const result = await invoke({ helper: async n => n * 2 }, { functionStubs: true }) * ``` * * @example * ```ts * // Manual cleanup when you fire-and-forget or cancel midway: * const invoke = remote.defineInvoke(clientCtx, events) * const result = invoke({ helper: () => 'ok' }, { functionStubs: true }) * result.dispose() * await result * ``` * * Security notes: * - This feature is off by default. Enabling it allows the remote side to call * back into your process; only use with trusted peers. * - Function stubs are tagged; prefer a unique `tagPrefix` to avoid collisions * (see `createRemoteMethodTagPrefix`). * - `maxDepth`, `maxFunctions`, and `autoDisposeMs` limit attack surface and * resource usage. `autoDisposeMs` is useful for fire-and-forget calls. * - Objects are rebuilt with a null prototype to mitigate `__proto__` pollution. * - Enable `strict` to reject malformed `__eventaInvoke` payloads. * * @param defaultOptions Defaults for function stub behavior. Use `{ allow: true }` * to enable, or provide `maxDepth`, `maxFunctions`, `tagPrefix`, * `onDisallowedTag`, `autoDisposeMs`, and `strict` for stricter control. */ declare function withRemoteMethods(defaultOptions?: boolean | InvokeFunctionStubOptions): { defineInvoke = EventContext>(ctx: ECtx, event: InvokeEventa): RemoteInvokeFunction; defineInvokeHandler(ctx: InvocableEventContext, event: InvokeEventa, handler: Handler, EOpts>): () => void; }; //#endregion //#region src/stream.d.ts /** * Create a stream invoke function (client side). * * Use when the response is streamed and the request may be unary or streaming. * * Common patterns: * - Unary request -> stream response (server-streaming) * - Stream request -> stream response (bi-directional streaming) * * @example * ```ts * // 1) Define eventa once (shared by client/server) * const events = defineInvokeEventa() * * // 2) Client: define invoke function * const invoke = defineStreamInvoke(clientCtx, events) * * // 3) Call with unary request * for await (const msg of invoke({ name: 'alice' })) { * console.log(msg) * } * ``` * * @example * ```ts * // Client-streaming request * const input = new ReadableStream({ * start(c) { c.enqueue(1); c.enqueue(2); c.close() }, * }) * * for await (const msg of invoke(input)) { * console.log(msg) * } * ``` * * @param clientCtx Event context on the caller/client side. * @param event Invoke event definition created by `defineInvokeEventa`. */ declare function defineStreamInvoke(clientCtx: EventContext, event: InvokeEventa): (req: Req | ReadableStream | AsyncIterable, options?: ExtractInvokeRequestOptions>) => ReadableStream; type StreamHandler = (payload: Req, options?: { abortController?: AbortController; } & RawEventOptions) => AsyncGenerator; /** * Define a stream invoke handler (server side). * * The handler can receive either: * - a unary request `Req` * - a streaming request `ReadableStream` / `AsyncIterable` * * It must return an async generator of response messages. * * @example * ```ts * const events = defineInvokeEventa() * * defineStreamInvokeHandler(serverCtx, events, async function* (payload) { * if (isReadableStream(payload) || isAsyncIterable(payload)) { * for await (const item of payload) { * yield { type: 'progress', value: item } * } * } * * yield { type: 'result', ok: true } * }) * ``` * * @param serverCtx Event context on the handler/server side. * @param event Invoke event definition created by `defineInvokeEventa`. * @param fn Stream handler that yields response chunks. */ declare function defineStreamInvokeHandler(serverCtx: EventContext, event: InvokeEventa, fn: StreamHandler): void; /** * Convert a callback-style handler into a stream handler. * * Use `emit` to push response chunks, and return when done. * Works for unary or streaming requests. * * @example * ```ts * defineStreamInvokeHandler(ctx, events, toStreamHandler(async ({ payload, emit }) => { * if (isReadableStream(payload) || isAsyncIterable(payload)) { * for await (const item of payload) { * emit({ type: 'progress', value: item }) * } * * emit({ type: 'result', ok: true }) * return * } * * emit({ type: 'result', ok: true }) * })) * ``` * * @param handler Callback handler with `emit` for streaming responses. */ declare function toStreamHandler(handler: (context: { payload: Req; options?: EO; emit: (data: Res) => void; }) => Promise): StreamHandler; //#endregion //#region src/utils.d.ts declare function randomBetween(min: number, max: number): number; /** * Checks if a value is an AsyncIterable. * * @param value * @returns True if the value is an AsyncIterable. */ declare function isAsyncIterable(value: unknown): value is AsyncIterable; /** * Checks if an object is a ReadableStream. * * @link https://github.com/cloudflare/workerd/blob/88e8696ce7a5f8969a7e02a2dcfb6504c17c9e8d/src/cloudflare/internal/streaming-forms.ts#L3 * @param obj * @returns True if the object looks like a ReadableStream. */ declare function isReadableStream(obj?: unknown | null): obj is ReadableStream; declare function createAbortError(reason?: unknown): Error; declare function isAbortError(error: unknown): error is Error; declare function createUntilTriggeredOnce any, P extends any[] = Parameters, R = ReturnType>(fn: F): { onceTriggered: Promise>; wrapper: (...args: P) => Promise>; }; declare function createUntilTriggered(fn: (...args: P[]) => R): { promise: Promise; handler: () => void; }; declare function createUntil(options?: { intervalHandler?: () => Promise; interval?: number; }): { promise: Promise; handler: (value: T) => void; }; //#endregion export { isReceiveEvent as $, defineInvokeHandlers as A, InferSendEventStreamEnd as B, Handler as C, InvokeFunctionMap as D, InvokeFunction as E, InferReceiveEventError as F, ReceiveEventError as G, InvokeEventa as H, InferReceiveEventStreamEnd as I, SendEventAbort as J, ReceiveEventStreamEnd as K, InferSendEvent as L, isExtendableInvokeResponseLike as M, undefineInvokeHandler as N, defineInvoke as O, InferReceiveEvent as P, isInvokeEventa as Q, InferSendEventAbort as R, ExtractInvokeResponseOptions as S, InvocableEventContext as T, InvokeHandlerEventa as U, InvokeEventType as V, ReceiveEvent as W, SendEventStreamEnd as X, SendEventError as Y, defineInvokeEventa as Z, withRemoteMethods as _, isAbortError as a, ChannelLinkPlugin as at, ExtendableInvokeResponse as b, randomBetween as c, ChannelPipeGroup as ct, toStreamHandler as d, ChannelPluginContext as dt, isSendEvent as et, InvokeFunctionStubOptions as f, ChannelPluginResult as ft, createRemoteMethodTagPrefix as g, RemoteInvokeResult as h, pipeChannel as ht, createUntilTriggeredOnce as i, ChannelLinkOptions as it, defineInvokes as j, defineInvokeHandler as k, defineStreamInvoke as l, ChannelPipeOptions as lt, RemoteInvokeOptions as m, linkChannel as mt, createUntil as n, ChannelConnectionOptions as nt, isAsyncIterable as o, ChannelLinkPluginContext as ot, RemoteInvokeFunction as p, defineChannelPlugin as pt, SendEvent as q, createUntilTriggered as r, ChannelLink as rt, isReadableStream as s, ChannelPipe as st, createAbortError as t, ChannelConnection as tt, defineStreamInvokeHandler as u, ChannelPlugin as ut, WithTransfer as v, HandlerMap as w, ExtractInvokeRequestOptions as x, withTransfer as y, InferSendEventError as z }; //# sourceMappingURL=index-CeSxLb7L.d.mts.map