import { EventEmitter } from 'events';
import { Pgoutput } from 'pg-logical-replication';
import { ExtendedError } from '../common/error';
import { TransactionalLogger } from '../common/logger';
import { StoredTransactionalMessage } from '../message/transactional-message';
import { FullReplicationListenerConfig } from './config';
import { ReplicationStrategies } from './replication-strategies';
/**
 * Initiate the outbox or inbox listener to listen for WAL messages.
 * @param config The replication connection settings and general replication settings
 * @param messageHandler The message handler that handles the outbox/inbox message
 * @param errorHandler A handler that can decide if the WAL message should be acknowledged (permanent_error) or not (transient_error which restarts the logical replication listener)
 * @param logger A logger instance for logging trace up to error logs
 * @param strategies Strategies to provide custom logic for handling specific scenarios
 * @returns A function to stop the logical replication listener
 */
export declare const createLogicalReplicationListener: (config: FullReplicationListenerConfig, messageHandler: (message: StoredTransactionalMessage, cancellation: EventEmitter) => Promise<void>, errorHandler: (message: StoredTransactionalMessage, err: ExtendedError) => Promise<boolean>, logger: TransactionalLogger, strategies: ReplicationStrategies) => [shutdown: {
    (): Promise<void>;
}];
/** Get and map the outbox/inbox message if the WAL log entry is such a message. Otherwise returns undefined. */
declare const getRelevantMessage: (log: Pgoutput.Message, { dbSchema, dbTable }: FullReplicationListenerConfig["settings"]) => StoredTransactionalMessage | undefined;
/** Maps the WAL log entry to an outbox or inbox message */
declare const mapMessage: (input: unknown) => StoredTransactionalMessage | undefined;
/**
 * This export is _only_ done for unit tests as the createLogicalReplicationListener
 * function is otherwise very hard to unit test. Exports work only for jest tests!
 */
export declare const __only_for_unit_tests__: {
    getRelevantMessage?: typeof getRelevantMessage;
    mapMessage?: typeof mapMessage;
};
export {};
//# sourceMappingURL=logical-replication-listener.d.ts.map