@markwylde/eventbase
Version:
A distributed, event-sourced, key-value database built on top of **NATS JetStream**. Eventbase provides a simple yet powerful API for storing, retrieving, and subscribing to data changes, with automatic state synchronization across distributed instances a
65 lines (64 loc) • 2.3 kB
TypeScript
import { EventEmitter } from 'events';
import type { EventbaseConfig } from './types.js';
export type EventbaseManagerConfig = {
dbPath?: string;
getStatsStreamName?: (streamName: string) => string;
nats: EventbaseConfig['nats'];
keepAliveSeconds?: number;
onMessage?: EventbaseConfig['onMessage'];
cleanupIntervalMs?: number;
};
export declare class EventbaseManager extends EventEmitter {
private config;
private instances;
private dbPath?;
private nats;
private keepAliveSeconds;
private onMessage?;
private cleanupIntervalMs;
private cleanupInterval;
private getStatsStreamName?;
constructor(config: EventbaseManagerConfig);
private startCleanupInterval;
private stopCleanupInterval;
getStream(streamName: string): Promise<{
closed: boolean;
get: <T extends object>(id: string) => Promise<{
meta: import("./index.js").MetaData;
data: T;
} | null>;
put: <T extends object>(id: string, data: T) => Promise<{
meta: import("./index.js").MetaData;
data: T;
}>;
insert: <T extends object>(data: T) => Promise<{
id: string;
meta: import("./index.js").MetaData;
data: T;
}>;
delete: (id: string) => Promise<{
purged: number;
}>;
keys: (pattern?: string) => Promise<string[]>;
subscribe: <T extends object>(query: {
[key: string]: any;
}, callback: (key: string, data: T, meta: import("./index.js").MetaData, event: import("./types.js").Event) => void) => () => void;
query: <T extends object>(queryObject: object, options?: {
limit?: number;
offset?: number;
sort?: {
[key: string]: 1 | -1;
};
project?: {
[key: string]: 1;
};
}) => Promise<T[]>;
count: (queryObject: object) => Promise<number>;
getLastAccessed: () => number;
getActiveSubscriptions: () => number;
deleteStream: () => Promise<void>;
close: () => Promise<void>;
}>;
closeAll(): Promise<void>;
}
export declare function createEventbaseManager(config: EventbaseManagerConfig): EventbaseManager;