import type { MessageMetricsManager, ProcessedMessageMetadata } from '@message-queue-toolkit/core';
import type { Metric } from 'prom-client';
import promClient from 'prom-client';
import type { MessageVersionGeneratingFunction, PrometheusMetricParams } from './types.ts';
/**w
 * Implementation of MessageMetricsManager for Prometheus
 */
export declare abstract class PrometheusMessageMetric<MessagePayload extends object, MetricType extends Metric> implements MessageMetricsManager<MessagePayload> {
    /** Fallbacks to null if metrics are disabled on app level */
    protected readonly metric: MetricType;
    protected readonly messageVersionGeneratingFunction: MessageVersionGeneratingFunction<MessagePayload>;
    private readonly metricParams;
    /**
     * @param metricParams - metrics parameters (see PrometheusMetricParams)
     * @param client - use it to specify custom Prometheus client
     */
    constructor(metricParams: PrometheusMetricParams<MessagePayload>, client?: typeof promClient);
    private registerMetric;
    private resolveMessageVersionGeneratingFunction;
    protected abstract createMetric(client: typeof promClient, metricParams: PrometheusMetricParams<MessagePayload>): MetricType;
    abstract registerProcessedMessage(metadata: ProcessedMessageMetadata<MessagePayload>): void;
}
