import { Collection } from "./Collection";
import Handler from "./Handler";
export declare type AnyPublicationArgs = CallbackSubscriptionType | Cursor[] | Cursor | Collection | Collection[];
export declare type CallbackSubscriptionType = (...args: any[]) => Cursor | Cursor[];
export interface PublicationsDictionary {
    [name: string]: AnyPublicationArgs;
}
export interface SubscriptionsDictionary {
    [name: string]: Subscription[];
}
export interface Subscription {
    name: string;
    subscriber: string;
    cursor: Cursor;
}
export declare type Cursor = FindCursor | ProcedureCursor;
export interface FindCursor {
    collectionName: string;
    criteria: any;
    __find__: boolean;
}
export interface ProcedureCursor {
    name: string;
    params: any[];
    __procedure__: boolean;
    canInsert?: (newItem: any) => boolean;
    collectionNames: string[];
}
export declare class LiveStore {
    private handler;
    publications: PublicationsDictionary;
    subscriptions: SubscriptionsDictionary;
    constructor(handler: Handler);
    isFindCursor(cursor: any): cursor is FindCursor;
    isProcedureCursor(cursor: any): cursor is ProcedureCursor;
    registerPublication(publicationName: string, subscriptionCb: AnyPublicationArgs): void;
    registerSubscriptions(socketId: string, subscriptionName: string, ...clientArgs: any[]): Subscription[];
    getSubscriptionsByCollection(collectionName: string): Subscription[];
    getSubscriptionsByProcedure(procedureName: string): Subscription[];
    getSubscriptionByCollectionAndSubscriber(socketId: string, collectionName: string): Subscription;
    removeAllSubscriptionsBySubscriber(socketId: string): void;
    removeSubscriptionByNameAndSubscriber(socketId: string, subscriptionName: string): void;
    isSubscribedToCollection(socketId: string, collectionName: string): boolean;
    isSubscribedTo(socketId: string, subscriptionName: string): boolean;
}
