/// <reference types="node" />
import { Logger } from "../shared/Logger";
import { StatsdReceiver } from "../stats";
import { StatsSink } from "../stats";
import { EventEmitter } from "events";
import { SyncServiceConfig } from "../services/SyncService";
export interface SyncWorkerConfiguration extends SyncServiceConfig {
    serviceName: string;
    endpointsName: string;
    syncWorkerGroup: string;
    syncWorkerId: string;
    kubernetesConfig: any;
    podIp: string;
    podRef: any;
    nodeName: string;
    disableSlave?: boolean;
    disableDiskStats?: boolean;
    enableDebugMode?: boolean;
    realmsEncryptionKey?: ArrayBuffer | ArrayBufferView;
    fileUploadFunction?: (file: string) => Promise<void>;
}
export interface SyncWorkerStartParams {
    logger: Logger;
    statsSink: StatsSink;
    statsdReceiver?: StatsdReceiver;
    disableWatcher?: boolean;
}
export interface EndpointsMetadata extends Object {
    name: string;
    namespace: string;
    annotations?: {
        [key: string]: string;
    };
    labels?: {
        [key: string]: string;
    };
    resourceVersion: string;
}
export interface EndpointsResource {
    metadata: EndpointsMetadata;
    subsets: any[];
}
export declare class KubernetesSyncWorker extends EventEmitter {
    private readonly masterAnnotationKey;
    private readonly slaveAnnotationKey;
    private readonly requestedOperationAnnotationKey;
    private readonly operationArgumentsAnnotationKey;
    private readonly config;
    private readonly disableSlave;
    private readonly disableDiskStats;
    startedAt: Date;
    private watcher;
    private logger;
    private statsdSocket;
    private syncServerPromise;
    private coreApi;
    private namespace;
    private role;
    private syncWorkerSlaveStatus;
    private currentResourceVersion;
    private statsInterval;
    private statsdToStatsSink;
    private currentSyncServerConfig;
    private currentOperation;
    constructor(config: SyncWorkerConfiguration);
    start(params: SyncWorkerStartParams): Promise<void>;
    shutdown(err?: any): Promise<void>;
    reconcileEndpoints(endpoints: EndpointsResource): Promise<EndpointsResource>;
    private generateSyncServerConfig;
    private configureDiskStats;
    private startSyncServer;
    private stopSyncServer;
    private assumeRole;
    private patchEndpoints;
    private getReplicaCount;
    private reconcileSubsets;
    private registerCandidate;
    private deregisterCandidate;
    private verifyFiles;
    private copyAndUploadFile;
    private copyFileSafely;
    private compressFolder;
    private quarantineFile;
}
