import { Module } from "@intuitionrobotics/ts-common";
import { FirebaseType_BatchResponse, FirebaseType_Message, FirestoreTransaction } from "@intuitionrobotics/firebase/backend";
import { DB_Notifications, IFP, ISP, ITP, MessageType, Request_PushRegister, SubscribeProps } from "../../index";
import { ExpressRequest } from "@intuitionrobotics/thunderstorm/backend";
type Config = {
    notificationsCleanupTime?: number;
    sessionsCleanupTime?: number;
};
type TempMessages = {
    [token: string]: DB_Notifications[];
};
export declare class PushPubSubModule_Class extends Module<Config> {
    constructor();
    private pushSessions;
    private pushKeys;
    private notifications;
    private messaging;
    protected init(): void;
    register(body: Request_PushRegister, request: ExpressRequest): Promise<DB_Notifications[]>;
    pushToKey<M extends MessageType<any, any, any> = never, S extends string = IFP<M>, P extends SubscribeProps = ISP<M>, D = ITP<M>>(key: S, props?: P, data?: D, persistent?: boolean, transaction?: FirestoreTransaction): Promise<void>;
    pushToUser<M extends MessageType<any, any, any> = never, S extends string = IFP<M>, P extends SubscribeProps = ISP<M>, D = ITP<M>>(user: string, key: string, props?: P, data?: D, persistent?: boolean): Promise<void>;
    private buildNotification;
    sendMessage: (persistent: boolean, _messages: TempMessages) => Promise<{
        response: FirebaseType_BatchResponse;
        messages: FirebaseType_Message[];
    } | undefined>;
    readNotification: (id: string, read: boolean) => Promise<void>;
    scheduledCleanup: () => Promise<void>;
    cleanUp: (response: FirebaseType_BatchResponse, messages: FirebaseType_Message[]) => Promise<void>;
    private cleanUpImpl;
}
export declare const PushPubSubModule: PushPubSubModule_Class;
export {};
