import { DVCRequestEvent } from './models/requestEvent';
import { BucketedUserConfig, DVCLogger, DVCReporter } from '@devcycle/types';
import { DevCycleEvent, DVCPopulatedUser } from '@devcycle/js-cloud-server-sdk';
import { WASMBucketingExports } from '@devcycle/bucketing-assembly-script';
export declare const AggregateEventTypes: Record<string, string>;
export declare const EventTypes: Record<string, string>;
type UserEventsBatchRecord = {
    user: DVCPopulatedUser;
    events: DVCRequestEvent[];
};
export type FlushPayload = {
    payloadId: string;
    eventCount: number;
    records: UserEventsBatchRecord[];
};
export type EventQueueOptions = {
    eventFlushIntervalMS?: number;
    disableAutomaticEventLogging?: boolean;
    disableCustomEventLogging?: boolean;
    eventRequestChunkSize?: number;
    maxEventQueueSize?: number;
    flushEventQueueSize?: number;
    logger: DVCLogger;
    reporter?: DVCReporter;
    eventsAPIURI?: string;
};
export declare class EventQueue {
    private readonly sdkKey;
    private readonly clientUUID;
    private readonly bucketing;
    private readonly logger;
    private readonly reporter?;
    private readonly eventsAPIURI?;
    eventFlushIntervalMS: number;
    flushEventQueueSize: number;
    maxEventQueueSize: number;
    disabledEventFlush: boolean;
    private flushInterval;
    private flushInProgress;
    private flushCallbacks;
    constructor(sdkKey: string, clientUUID: string, bucketing: WASMBucketingExports, options: EventQueueOptions);
    cleanup(): void;
    private _flushEvents;
    /**
     * Flush events in queue to DevCycle Events API. Requeue events if flush fails
     */
    flushEvents(): Promise<void>;
    /**
     * Queue DVCAPIEvent for publishing to DevCycle Events API.
     */
    queueEvent(user: DVCPopulatedUser, event: DevCycleEvent): void;
    /**
     * Queue DVCEvent that can be aggregated together, where multiple calls are aggregated
     * by incrementing the 'value' field.
     */
    queueAggregateEvent(user: DVCPopulatedUser, event: DevCycleEvent, bucketedConfig?: BucketedUserConfig): void;
    private checkEventQueueSize;
}
export {};
