@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
50 lines (49 loc) • 1.54 kB
TypeScript
import type { Event, EventbaseConfig } from './types.js';
type QueryOptions = {
limit?: number;
offset?: number;
sort?: {
[key: string]: 1 | -1;
};
project?: {
[key: string]: 1;
};
};
export interface MetaData {
dateCreated: string;
dateModified: string;
changes: number;
}
type SubscriptionCallback<T extends object> = (key: string, data: T, meta: MetaData, event: Event) => void;
type SubscriptionQuery = {
[key: string]: any;
};
export declare function createEventbase(config: EventbaseConfig): Promise<{
closed: boolean;
get: <T extends object>(id: string) => Promise<{
meta: MetaData;
data: T;
} | null>;
put: <T extends object>(id: string, data: T) => Promise<{
meta: MetaData;
data: T;
}>;
insert: <T extends object>(data: T) => Promise<{
id: string;
meta: MetaData;
data: T;
}>;
delete: (id: string) => Promise<{
purged: number;
}>;
keys: (pattern?: string) => Promise<string[]>;
subscribe: <T extends object>(query: SubscriptionQuery, callback: SubscriptionCallback<T>) => () => void;
query: <T extends object>(queryObject: object, options?: QueryOptions) => Promise<T[]>;
count: (queryObject: object) => Promise<number>;
getLastAccessed: () => number;
getActiveSubscriptions: () => number;
deleteStream: () => Promise<void>;
close: () => Promise<void>;
}>;
export { createEventbaseManager } from './manager.js';
export default createEventbase;