eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
72 lines • 3.25 kB
TypeScript
import type { Event } from '#compiled/@workflow/world/index.js';
/**
* Delay before firing the deferred unconsumed-event check after the promise
* queue has drained. Must be long enough for cross-VM microtask chains to
* propagate (resolve in host → workflow code in VM → subscribe call back
* in host). Any subscribe() arriving during this window cancels the check.
*/
export declare const DEFERRED_CHECK_DELAY_MS = 100;
export declare enum EventConsumerResult {
/**
* Callback consumed the event, but should not be removed from the callbacks list
*/
Consumed = 0,
/**
* Callback did not consume the event, so it should be passed to the next callback
*/
NotConsumed = 1,
/**
* Callback consumed the event, and should be removed from the callbacks list
*/
Finished = 2
}
type EventConsumerCallback = (event: Event | null) => EventConsumerResult;
export interface EventsConsumerOptions {
/**
* Callback invoked after an event has been consumed. Consumers such as the
* deterministic workflow clock must not observe events that are merely
* inspected while waiting for user code to subscribe to the next operation.
*/
onConsumedEvent?: (event: Event) => void;
/**
* Callback invoked when a non-null event cannot be consumed by any registered
* callback, indicating an orphaned or invalid event in the event log. The
* check is deferred until after the promise queue has drained, ensuring that
* any pending async work (e.g., deserialization/decryption) completes and
* downstream subscribe() calls have a chance to cancel the check first.
*/
onUnconsumedEvent: (event: Event) => void;
/**
* Returns the current promise queue. The unconsumed event check is chained
* onto this queue so it only fires after all pending async work (e.g.,
* deserialization) has completed. This prevents false positives when async
* deserialization delays the resolve() that triggers the next subscribe().
*/
getPromiseQueue: () => Promise<void>;
}
export declare class EventsConsumer {
eventIndex: number;
readonly events: Event[];
readonly callbacks: EventConsumerCallback[];
private onConsumedEvent?;
private onUnconsumedEvent;
private getPromiseQueue;
private pendingUnconsumedCheck;
private pendingUnconsumedTimeout;
private unconsumedCheckVersion;
constructor(events: Event[], options: EventsConsumerOptions);
/**
* Registers a callback function to be called after an event has been consumed
* by a different callback. The callback can return:
* - `EventConsumerResult.Consumed` the event is considered consumed and will not be passed to any other callback, but the callback will remain in the callbacks list
* - `EventConsumerResult.NotConsumed` the event is passed to the next callback
* - `EventConsumerResult.Finished` the event is considered consumed and the callback is removed from the callbacks list
*
* @param fn - The callback function to register.
*/
subscribe(fn: EventConsumerCallback): void;
private notifyConsumedEvent;
private consume;
}
export {};
//# sourceMappingURL=events-consumer.d.ts.map