import { type PoolOptions } from 'mysql2/promise';
export interface MySQLSessionManagerOptions {
    mysql: PoolOptions;
    token: string;
    testRunTs?: string;
    poolSize?: number;
}
export declare class MySQLSessionManager {
    private readonly options;
    private rpcServer?;
    private readonly databases;
    private readonly poolSize;
    private readonly logger;
    private nextFrontendConnectionId;
    private nextBackendConnectionId;
    constructor(options: MySQLSessionManagerOptions);
    get port(): number;
    start(): Promise<void>;
    stop(): Promise<void>;
    private handle;
    private ensureDatabase;
    private releaseDatabase;
    private ensureGroup;
    private reserveSlot;
    private reserveAvailableSlot;
    private wakeSlotWaiter;
    private createSlot;
    private prepareSchema;
    private completeSchema;
    private acquire;
    private release;
    private run;
    private runIsolatedSlotStatement;
    private requireReadySlot;
    private findSlotByLeaseId;
    private findSlotByOwner;
    private ensureConnection;
    private enqueueSlot;
    private ensurePersistentTransaction;
    private restartPersistentTransaction;
    private resetConnectionAfterLease;
    private runManagedTransactionCommand;
    private destroySlot;
    private createDatabase;
    private dropDatabase;
    private adminConnection;
    private createDatabaseName;
    private failSchemaPreparation;
    private closeBackendConnection;
    private logSlot;
    private debugSlot;
    private slotLogData;
    private groupLogData;
    private createConnectionId;
    private logManagedSessionSqlSignal;
    private throwRuntimeDdl;
    private traceManagedSessionSql;
}
//# sourceMappingURL=mysql-session-manager.d.ts.map