import Crypto from '../crypto';
type CounterMap = Map<string, CounterNode>;
interface CounterNode {
    count: number;
    subCounters: CounterMap;
}
type CounterArray = {
    key: string;
    count: number;
    subArray: CounterArray;
}[];
declare class NestedCounters {
    eventCounters: Map<string, CounterNode>;
    rareEventCounters: Map<string, CounterNode>;
    crypto: Crypto;
    infLoopDebug: boolean;
    constructor();
    registerEndpoints(): void;
    /**
     * Increments event counter map for a specified category and sub category
     * @param category1 Primary category to be updated
     * @param category2 Sub counter category
     * @param count Amount to increment primary and sub counter by. Defaults to 1
     */
    countEvent(category1: string, category2: string, count?: number): void;
    /**
     * Increments event counter map and rare event counter map for a specified category and sub category
     * @param category1 Primary category to be updated
     * @param category2 Sub counter category
     * @param count Amount to increment primary and sub counter by. Defaults to 1
     */
    countRareEvent(category1: string, category2: string, count?: number): void;
    /**
     * Recursively convert the counterMap to an array and sort by the count property
     * @param counterMap
     * @returns sorted array of counts
     */
    arrayitizeAndSort(counterMap: CounterMap): CounterArray;
    /**
     * Generates a formatted response and recursively prints it to the response stream
     * @param arrayReport
     * @param stream
     * @param indent
     */
    printArrayReport(arrayReport: CounterArray, stream: any, indent?: number): void;
    resetCounters(): void;
    resetRareCounters(): void;
}
export declare const nestedCountersInstance: NestedCounters;
export default NestedCounters;
