import { MegaDriver } from '@megaorm/driver';
import { MegaConnection } from '@megaorm/driver';
export interface SslOptions {
    /**
     * A string or buffer holding the PFX or PKCS12 encoded private key, certificate and CA certificates
     */
    pfx?: string;
    /**
     * Either a string/buffer or list of strings/Buffers holding the PEM encoded private key(s) to use
     */
    key?: string | string[] | Buffer | Buffer[];
    /**
     * A string of passphrase for the private key or pfx
     */
    passphrase?: string;
    /**
     * A string/buffer or list of strings/Buffers holding the PEM encoded certificate(s)
     */
    cert?: string | string[] | Buffer | Buffer[];
    /**
     * Either a string/Buffer or list of strings/Buffers of PEM encoded CA certificates to trust.
     */
    ca?: string | string[] | Buffer | Buffer[];
    /**
     * Either a string or list of strings of PEM encoded CRLs (Certificate Revocation List)
     */
    crl?: string | string[];
    /**
     * A string describing the ciphers to use or exclude
     */
    ciphers?: string;
    /**
     * You can also connect to a MySQL server without properly providing the appropriate CA to trust. You should not do this.
     */
    rejectUnauthorized?: boolean;
    /**
     * Configure the minimum supported version of SSL, the default is TLSv1.2.
     */
    minVersion?: string;
    /**
     * Configure the maximum supported version of SSL, the default is TLSv1.3.
     */
    maxVersion?: string;
    /**
     * You can verify the server name identity presented on the server certificate when connecting to a MySQL server.
     * You should enable this but it is disabled by default right now for backwards compatibility.
     */
    verifyIdentity?: boolean;
}
export interface MySQLOptions {
    /**
     * The MySQL user to authenticate as
     */
    user?: string;
    /**
     * The password of that MySQL user
     */
    password?: string;
    /**
     * Alias for the MySQL user password. Makes a bit more sense in a multifactor authentication setup (see
     * "password2" and "password3")
     */
    password1?: string;
    /**
     * 2nd factor authentication password. Mandatory when the authentication policy for the MySQL user account
     * requires an additional authentication method that needs a password.
     * https://dev.mysql.com/doc/refman/8.0/en/multifactor-authentication.html
     */
    password2?: string;
    /**
     * 3rd factor authentication password. Mandatory when the authentication policy for the MySQL user account
     * requires two additional authentication methods and the last one needs a password.
     * https://dev.mysql.com/doc/refman/8.0/en/multifactor-authentication.html
     */
    password3?: string;
    /**
     * Name of the database to use for this connection
     */
    database?: string;
    /**
     * The charset for the connection. This is called 'collation' in the SQL-level of MySQL (like utf8_general_ci).
     * If a SQL-level charset is specified (like utf8mb4) then the default collation for that charset is used.
     * (Default: 'UTF8_GENERAL_CI')
     */
    charset?: string;
    /**
     * The hostname of the database you are connecting to. (Default: localhost)
     */
    host?: string;
    /**
     * The port number to connect to. (Default: 3306)
     */
    port?: number;
    /**
     * The source IP address to use for TCP connection
     */
    localAddress?: string;
    /**
     * The path to a unix domain socket to connect to. When used host and port are ignored
     */
    socketPath?: string;
    /**
     * List of connection flags to use other than the default ones. It is also possible to blacklist default ones
     */
    flags?: Array<string>;
    /**
     * object with ssl parameters or a string containing name of ssl profile
     */
    ssl?: string | SslOptions;
    /**
     * Tells if you want to retrive BIGINT values as string
     */
    bigNumberStrings?: boolean;
}
/**
 * MySQL driver responsible for creating MySQL connections.
 * @implements `MegaDriver` interface.
 * @example
 *
 * // Create a new MySQL driver
 * const driver = new MySQL({
 *   database: 'main', // Your db name
 *   password: 'root', // Your db password,
 *   user: 'root', // Your db user name
 *   host: 'localhost', // Your db host
 * });
 *
 * // Create connection
 * const connection = await driver.create();
 *
 * // Execute your queries
 * const result = await connection.query(sql, values);
 * console.log(result);
 *
 * // Begin a transaction
 * await connection.beginTransaction();
 *
 * // Commit transaction
 * await connection.commit();
 *
 * // Rollback transaction
 * await connection.rollback();
 *
 * // Close connection
 * await connection.close();
 */
export declare class MySQL implements MegaDriver {
    /**
     * Unique identifier for the driver instance.
     */
    id: Symbol;
    /**
     * MySQL driver configuration options.
     */
    private options;
    /**
     * Constructs a MySQL driver with the given options.
     * @param options - Configuration options for the MySQL driver.
     * @example
     *
     * // Create a new MySQL driver
     * const driver = new MySQL({
     *   database: 'main', // Your db name
     *   password: 'root', // Your db password,
     *   user: 'root', // Your db user name
     *   host: 'localhost', // Your db host
     * });
     *
     * // Create connection
     * const connection = await driver.create();
     *
     * // Execute your queries
     * const result = await connection.query(sql, values);
     * console.log(result);
     *
     * // Begin a transaction
     * await connection.beginTransaction();
     *
     * // Commit transaction
     * await connection.commit();
     *
     * // Rollback transaction
     * await connection.rollback();
     *
     * // Close connection
     * await connection.close();
     */
    constructor(options: MySQLOptions);
    /**
     * Creates a new MySQL connection.
     * @returns A `Promise` that resolves with a new MySQL connection.
     * @throws  `CreateConnectionError` If connection creation fails.
     * @example
     *
     * // Create a new MySQL driver
     * const driver = new MySQL({
     *   database: 'main', // Your db name
     *   password: 'root', // Your db password,
     *   user: 'root', // Your db user name
     *   host: 'localhost', // Your db host
     * });
     *
     * // Create connection
     * const connection = await driver.create();
     *
     * // Execute your queries
     * const result = await connection.query(sql, values);
     * console.log(result);
     *
     * // Begin a transaction
     * await connection.beginTransaction();
     *
     * // Commit transaction
     * await connection.commit();
     *
     * // Rollback transaction
     * await connection.rollback();
     *
     * // Close connection
     * await connection.close();
     */
    create(): Promise<MegaConnection>;
}
