import { ModuleManager } from "./module-manager.js";
import { Logger } from "./logger/Logger.js";
import { type ValidatorTypeResolver } from "../validator/validator.js";
import { type TimerHandler } from "../utils/date-time-tools.js";
export declare abstract class Module<Config = any> extends Logger {
    private name;
    protected manager?: ModuleManager;
    readonly initiated = false;
    protected configValidator?: ValidatorTypeResolver<Config>;
    protected timeoutMap: {
        [k: string]: number;
    };
    private moduleDefaultConfig?;
    private manualConfig?;
    private resolvedConfig?;
    private resolvedAtEpoch;
    protected get config(): Config;
    constructor(name: string);
    private deduceName;
    debounce(handler: TimerHandler, key: string, ms?: number): void;
    throttle(handler: TimerHandler, key: string, ms?: number): void;
    throttleV2(handler: TimerHandler, key: string, ms: number, force?: boolean): void;
    setConfigValidator(validator: ValidatorTypeResolver<Config>): void;
    setDefaultConfig(config: Partial<Config>): void;
    getName(): string;
    setName(name: string): void;
    setConfig(config: Config): void;
    setManager(manager: ModuleManager): void;
    protected runAsync: (label: string, toCall: () => Promise<any>) => void;
    /**
     * @deprecated Backend (Storm) never calls init() — `Storm.build()` fails if a
     * registered module overrides it. Move work to the constructor (only if trivially
     * cheap and config-independent) or to lazy memoized getters that resolve on first
     * use. Run `thunderstorm-codemod check-module-init` to flag offenders.
     * The frontend (Thunder) still calls init() eagerly at app boot.
     */
    protected init(): void;
    validate(): void;
}
//# sourceMappingURL=module.d.ts.map