/**
 * This is the entry module is responsible for replicating data between nodes. It is a source for tables that are replicated
 * A typical exchange should look like:
 * 1. Node A connects to node B, and sends its node name and the database name (and the mapping of its node id to short ids?)
 * 2. Node B sends back its node name and the mapping of its node id to short ids
 * 3. Node A sends a subscription request to node B
 * 3a. Node B may also send a subscription request to node A
 * 4. Node B sends back the table names and structures
 * 5. Node B sends back the audit records
 */
export { startOnMainThread } from './subscriptionManager.ts';
import type { Database } from 'lmdb';
export declare const servers: any[];
export declare const replicationCertificateAuthorities: Set<unknown>;
/**
 * Build mTLS configuration for replication server with certificate verification support
 * @param replicationOptions - Replication configuration options
 * @returns mTLS configuration object (always enabled for replication)
 */
export declare function buildReplicationMtlsConfig(replicationOptions: any): any;
/**
 * Start the replication server. This will start a WebSocket server that will accept replication requests from other nodes.
 * @param options
 */
export declare function start(options: any): void;
export declare function monitorNodeCAs(listener: () => void): void;
export declare function disableReplication(disabled?: boolean): void;
export declare let enabledDatabases: any;
/**
 * Get/create a replication resource that can be assigned as a source to tables
 * @param tableName
 * @param dbName
 */
export declare function setReplicator(dbName: string, table: any, options: any): void;
export declare function sendOperationToNode(node: any, operation: any, options: any): Promise<unknown>;
/**
 * Subscribe to a node for a database, getting the necessary connection and subscription and signaling the start of the subscription
 * @param request
 */
export declare function subscribeToNode(request: any): void;
export declare function unsubscribeFromNode({ url, nodes, database }: {
    url: any;
    nodes: any;
    database: any;
}): Promise<void>;
/** Attempt to figure out the host/node name, using direct or indirect settings
 * @returns {string}
 */
export declare function getThisNodeName(): any;
export declare function clearThisNodeName(): void;
export declare function getThisNodeId(auditStore: any): any;
export declare function getThisNodeUrl(): any;
export declare function hostnameToUrl(hostname: any): string;
export declare function urlToNodeName(nodeUrl: any): string;
/**
 * Iterate through all the databases and tables that are replicated, both those that exist now, and future databases that
 * are added or removed, calling the callback for each
 * @param options
 * @param callback
 */
export declare function forEachReplicatedDatabase(options: any, callback: any): {
    remove(): void;
};
/**
 * Get the last time that an audit record was added to the audit store
 * @param auditStore
 */
export declare function lastTimeInAuditStore(auditStore: Database): any;
export declare function replicateOperation(req: any): Promise<{
    message: string;
}>;
