export interface CustomProperties {
    /**
     * Get a custom property from the correlation context
     */
    getProperty(key: string): string;
    /**
     * Store a custom property in the correlation context.
     * Do not store sensitive information here.
     * Properties stored here are exposed via outgoing HTTP headers for correlating data cross-component.
     * The characters ',' and '=' are disallowed within keys or values.
     */
    setProperty(key: string, value: string): void;
}
export interface PrivateCustomProperties extends CustomProperties {
    addHeaderData(header: string): void;
    serializeToHeader(): string;
}
export interface CorrelationContext {
    operation: {
        name: string;
        id: string;
        parentId: string;
    };
    /** Do not store sensitive information here.
     *  Properties here are exposed via outgoing HTTP headers for correlating data cross-component.
     */
    customProperties: CustomProperties;
}
export declare class CorrelationContextManager {
    private static enabled;
    private static hasEverEnabled;
    /**
     *  Provides the current Context.
     *  The context is the most recent one entered into for the current
     *  logical chain of execution, including across asynchronous calls.
     */
    static getCurrentContext(): CorrelationContext;
    /**
     *  A helper to generate objects conforming to the CorrelationContext interface
     */
    static generateContextObject(operationId: string, parentId?: string, operationName?: string, correlationContextHeader?: string): CorrelationContext;
    /**
     *  Runs a function inside a given Context.
     *  All logical children of the execution path that entered this Context
     *  will receive this Context object on calls to GetCurrentContext.
     */
    static runWithContext(context: CorrelationContext, fn: () => any): void;
    /**
     *  Patches a callback to restore the correct Context when getCurrentContext
     *  is run within it. This is necessary if automatic correlation fails to work
     *  with user-included libraries.
     *
     *  The supplied callback will be given the same context that was present for
     *  the call to wrapCallback.  */
    static wrapCallback<T extends Function>(fn: T): T;
    /**
     *  Enables the CorrelationContextManager.
     */
    static enable(): void;
    /**
     *  Disables the CorrelationContextManager.
     */
    static disable(): void;
    /**
     *  Reports if the CorrelationContextManager is able to run in this environment
     */
    static isNodeVersionCompatible(): boolean;
    private static requireForPatch(module);
    private static patchTimers(methodNames);
    private static patchError();
}
