@mastra/core
Version:
59 lines • 2.42 kB
TypeScript
import EventEmitter from 'node:events';
import type { IMastraLogger } from '../../logger/index.js';
import { PubSub } from '../pubsub.js';
import type { LeaseProvider, PubSubDeliveryMode } from '../pubsub.js';
import type { Event, EventCallback, SubscribeOptions } from '../types.js';
export interface EventEmitterPubSubOptions {
/**
* Optional logger for surfacing batched-delivery errors. Falls back to
* `console.error` when not provided.
*/
logger?: IMastraLogger;
}
export declare class EventEmitterPubSub extends PubSub implements LeaseProvider {
get supportedModes(): ReadonlyArray<PubSubDeliveryMode>;
/**
* `EventEmitterPubSub` is strictly in-process, so the `AckHandleBuffer`
* queue it uses for batching shares the same lifetime as everything
* else here. Nothing more durable is promised, and nothing less is
* needed.
*/
get supportsNativeBatching(): boolean;
private emitter;
private groups;
private groupCounters;
private groupListeners;
private pendingNacks;
private deliveryAttempts;
private fanoutWrappers;
private batchBuffers;
private readonly logger?;
constructor(existingEmitter?: EventEmitter, options?: EventEmitterPubSubOptions);
/**
* Debug-hostile silent failures are the default for emitter listeners.
* Surface buffer-side errors on a single channel so they're at least visible.
*/
private logBufferError;
publish(topic: string, event: Omit<Event, 'id' | 'createdAt'>, _options?: {
localOnly?: boolean;
}): Promise<void>;
subscribe(topic: string, cb: EventCallback, options?: SubscribeOptions): Promise<void>;
unsubscribe(topic: string, cb: EventCallback): Promise<void>;
flush(): Promise<void>;
/**
* Clean up all listeners during graceful shutdown.
*/
close(): Promise<void>;
private subscribeWithGroup;
private deliverToGroup;
private leases;
acquireLease(key: string, owner: string, ttlMs: number): Promise<{
acquired: boolean;
owner?: string;
}>;
getLeaseOwner(key: string): Promise<string | undefined>;
releaseLease(key: string, owner: string): Promise<void>;
renewLease(key: string, owner: string, ttlMs: number): Promise<boolean>;
transferLease(key: string, fromOwner: string, toOwner: string, ttlMs: number): Promise<boolean>;
}
//# sourceMappingURL=index.d.ts.map