import type { ILogObj } from 'tslog';
import { Logger } from 'tslog';
import type { IMessage } from './Message.js';
import type { IMessageHandler } from './MessageHandler.js';
import { OcppError } from '../../ocpp/rpc/message.js';
import type { OcppRequest, OcppResponse } from '../../ocpp/internal-types.js';
import type { CallAction } from '../../ocpp/rpc/message.js';
import type { IModule } from '../modules/Module.js';
import type { HandlerProperties } from '../messages/internal-types.js';
/**
 * Abstract class implementing {@link IMessageHandler}.
 */
export declare abstract class AbstractMessageHandler implements IMessageHandler {
    /**
     * Fields
     */
    protected _module?: IModule;
    protected _logger: Logger<ILogObj>;
    /**
     * Constructor
     *
     * @param config The system configuration.
     * @param logger [Optional] The logger to use.
     */
    constructor(logger?: Logger<ILogObj>, module?: IModule);
    /**
     * Getter & Setter
     */
    get module(): IModule | undefined;
    set module(value: IModule | undefined);
    /**
     * Methods
     */
    handle(message: IMessage<OcppRequest | OcppResponse | OcppError>, props?: HandlerProperties): Promise<void>;
    /**
     * Abstract Methods
     */
    abstract subscribe(identifier: string, actions?: CallAction[], filter?: {
        [k: string]: string;
    }): Promise<boolean>;
    abstract unsubscribe(identifier: string): Promise<boolean>;
    abstract shutdown(): Promise<void>;
}
