import { z } from 'zod';
import * as Knex from 'knex';
import { Logger } from 'pino';
export declare const regionConfigSchema: z.ZodObject<{
    postgres: z.ZodObject<{
        connectionUri: z.ZodString;
        databaseName: z.ZodOptional<z.ZodString>;
        privateConnectionUri: z.ZodOptional<z.ZodString>;
        publicTlsCertificate: z.ZodOptional<z.ZodString>;
        skipInitialization: z.ZodEffects<z.ZodOptional<z.ZodBoolean>, boolean | undefined, boolean | undefined>;
    }, "strip", z.ZodTypeAny, {
        connectionUri: string;
        databaseName?: string | undefined;
        privateConnectionUri?: string | undefined;
        publicTlsCertificate?: string | undefined;
        skipInitialization?: boolean | undefined;
    }, {
        connectionUri: string;
        databaseName?: string | undefined;
        privateConnectionUri?: string | undefined;
        publicTlsCertificate?: string | undefined;
        skipInitialization?: boolean | undefined;
    }>;
    blobStorage: z.ZodObject<{
        endpoint: z.ZodString;
        publicEndpoint: z.ZodOptional<z.ZodString>;
        accessKey: z.ZodString;
        secretKey: z.ZodString;
        bucket: z.ZodString;
        createBucketIfNotExists: z.ZodBoolean;
        s3Region: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        endpoint: string;
        accessKey: string;
        secretKey: string;
        bucket: string;
        createBucketIfNotExists: boolean;
        s3Region: string;
        publicEndpoint?: string | undefined;
    }, {
        endpoint: string;
        accessKey: string;
        secretKey: string;
        bucket: string;
        createBucketIfNotExists: boolean;
        s3Region: string;
        publicEndpoint?: string | undefined;
    }>;
}, "strip", z.ZodTypeAny, {
    postgres: {
        connectionUri: string;
        databaseName?: string | undefined;
        privateConnectionUri?: string | undefined;
        publicTlsCertificate?: string | undefined;
        skipInitialization?: boolean | undefined;
    };
    blobStorage: {
        endpoint: string;
        accessKey: string;
        secretKey: string;
        bucket: string;
        createBucketIfNotExists: boolean;
        s3Region: string;
        publicEndpoint?: string | undefined;
    };
}, {
    postgres: {
        connectionUri: string;
        databaseName?: string | undefined;
        privateConnectionUri?: string | undefined;
        publicTlsCertificate?: string | undefined;
        skipInitialization?: boolean | undefined;
    };
    blobStorage: {
        endpoint: string;
        accessKey: string;
        secretKey: string;
        bucket: string;
        createBucketIfNotExists: boolean;
        s3Region: string;
        publicEndpoint?: string | undefined;
    };
}>;
declare const multiRegionConfigSchema: z.ZodObject<{
    main: z.ZodObject<{
        postgres: z.ZodObject<{
            connectionUri: z.ZodString;
            databaseName: z.ZodOptional<z.ZodString>;
            privateConnectionUri: z.ZodOptional<z.ZodString>;
            publicTlsCertificate: z.ZodOptional<z.ZodString>;
            skipInitialization: z.ZodEffects<z.ZodOptional<z.ZodBoolean>, boolean | undefined, boolean | undefined>;
        }, "strip", z.ZodTypeAny, {
            connectionUri: string;
            databaseName?: string | undefined;
            privateConnectionUri?: string | undefined;
            publicTlsCertificate?: string | undefined;
            skipInitialization?: boolean | undefined;
        }, {
            connectionUri: string;
            databaseName?: string | undefined;
            privateConnectionUri?: string | undefined;
            publicTlsCertificate?: string | undefined;
            skipInitialization?: boolean | undefined;
        }>;
        blobStorage: z.ZodObject<{
            endpoint: z.ZodString;
            publicEndpoint: z.ZodOptional<z.ZodString>;
            accessKey: z.ZodString;
            secretKey: z.ZodString;
            bucket: z.ZodString;
            createBucketIfNotExists: z.ZodBoolean;
            s3Region: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            endpoint: string;
            accessKey: string;
            secretKey: string;
            bucket: string;
            createBucketIfNotExists: boolean;
            s3Region: string;
            publicEndpoint?: string | undefined;
        }, {
            endpoint: string;
            accessKey: string;
            secretKey: string;
            bucket: string;
            createBucketIfNotExists: boolean;
            s3Region: string;
            publicEndpoint?: string | undefined;
        }>;
    }, "strip", z.ZodTypeAny, {
        postgres: {
            connectionUri: string;
            databaseName?: string | undefined;
            privateConnectionUri?: string | undefined;
            publicTlsCertificate?: string | undefined;
            skipInitialization?: boolean | undefined;
        };
        blobStorage: {
            endpoint: string;
            accessKey: string;
            secretKey: string;
            bucket: string;
            createBucketIfNotExists: boolean;
            s3Region: string;
            publicEndpoint?: string | undefined;
        };
    }, {
        postgres: {
            connectionUri: string;
            databaseName?: string | undefined;
            privateConnectionUri?: string | undefined;
            publicTlsCertificate?: string | undefined;
            skipInitialization?: boolean | undefined;
        };
        blobStorage: {
            endpoint: string;
            accessKey: string;
            secretKey: string;
            bucket: string;
            createBucketIfNotExists: boolean;
            s3Region: string;
            publicEndpoint?: string | undefined;
        };
    }>;
    regions: z.ZodRecord<z.ZodString, z.ZodObject<{
        postgres: z.ZodObject<{
            connectionUri: z.ZodString;
            databaseName: z.ZodOptional<z.ZodString>;
            privateConnectionUri: z.ZodOptional<z.ZodString>;
            publicTlsCertificate: z.ZodOptional<z.ZodString>;
            skipInitialization: z.ZodEffects<z.ZodOptional<z.ZodBoolean>, boolean | undefined, boolean | undefined>;
        }, "strip", z.ZodTypeAny, {
            connectionUri: string;
            databaseName?: string | undefined;
            privateConnectionUri?: string | undefined;
            publicTlsCertificate?: string | undefined;
            skipInitialization?: boolean | undefined;
        }, {
            connectionUri: string;
            databaseName?: string | undefined;
            privateConnectionUri?: string | undefined;
            publicTlsCertificate?: string | undefined;
            skipInitialization?: boolean | undefined;
        }>;
        blobStorage: z.ZodObject<{
            endpoint: z.ZodString;
            publicEndpoint: z.ZodOptional<z.ZodString>;
            accessKey: z.ZodString;
            secretKey: z.ZodString;
            bucket: z.ZodString;
            createBucketIfNotExists: z.ZodBoolean;
            s3Region: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            endpoint: string;
            accessKey: string;
            secretKey: string;
            bucket: string;
            createBucketIfNotExists: boolean;
            s3Region: string;
            publicEndpoint?: string | undefined;
        }, {
            endpoint: string;
            accessKey: string;
            secretKey: string;
            bucket: string;
            createBucketIfNotExists: boolean;
            s3Region: string;
            publicEndpoint?: string | undefined;
        }>;
    }, "strip", z.ZodTypeAny, {
        postgres: {
            connectionUri: string;
            databaseName?: string | undefined;
            privateConnectionUri?: string | undefined;
            publicTlsCertificate?: string | undefined;
            skipInitialization?: boolean | undefined;
        };
        blobStorage: {
            endpoint: string;
            accessKey: string;
            secretKey: string;
            bucket: string;
            createBucketIfNotExists: boolean;
            s3Region: string;
            publicEndpoint?: string | undefined;
        };
    }, {
        postgres: {
            connectionUri: string;
            databaseName?: string | undefined;
            privateConnectionUri?: string | undefined;
            publicTlsCertificate?: string | undefined;
            skipInitialization?: boolean | undefined;
        };
        blobStorage: {
            endpoint: string;
            accessKey: string;
            secretKey: string;
            bucket: string;
            createBucketIfNotExists: boolean;
            s3Region: string;
            publicEndpoint?: string | undefined;
        };
    }>>;
    defaultProjectRegionKey: z.ZodOptional<z.ZodNullable<z.ZodString>>;
}, "strip", z.ZodTypeAny, {
    main: {
        postgres: {
            connectionUri: string;
            databaseName?: string | undefined;
            privateConnectionUri?: string | undefined;
            publicTlsCertificate?: string | undefined;
            skipInitialization?: boolean | undefined;
        };
        blobStorage: {
            endpoint: string;
            accessKey: string;
            secretKey: string;
            bucket: string;
            createBucketIfNotExists: boolean;
            s3Region: string;
            publicEndpoint?: string | undefined;
        };
    };
    regions: Record<string, {
        postgres: {
            connectionUri: string;
            databaseName?: string | undefined;
            privateConnectionUri?: string | undefined;
            publicTlsCertificate?: string | undefined;
            skipInitialization?: boolean | undefined;
        };
        blobStorage: {
            endpoint: string;
            accessKey: string;
            secretKey: string;
            bucket: string;
            createBucketIfNotExists: boolean;
            s3Region: string;
            publicEndpoint?: string | undefined;
        };
    }>;
    defaultProjectRegionKey?: string | null | undefined;
}, {
    main: {
        postgres: {
            connectionUri: string;
            databaseName?: string | undefined;
            privateConnectionUri?: string | undefined;
            publicTlsCertificate?: string | undefined;
            skipInitialization?: boolean | undefined;
        };
        blobStorage: {
            endpoint: string;
            accessKey: string;
            secretKey: string;
            bucket: string;
            createBucketIfNotExists: boolean;
            s3Region: string;
            publicEndpoint?: string | undefined;
        };
    };
    regions: Record<string, {
        postgres: {
            connectionUri: string;
            databaseName?: string | undefined;
            privateConnectionUri?: string | undefined;
            publicTlsCertificate?: string | undefined;
            skipInitialization?: boolean | undefined;
        };
        blobStorage: {
            endpoint: string;
            accessKey: string;
            secretKey: string;
            bucket: string;
            createBucketIfNotExists: boolean;
            s3Region: string;
            publicEndpoint?: string | undefined;
        };
    }>;
    defaultProjectRegionKey?: string | null | undefined;
}>;
export type MultiRegionConfig = z.infer<typeof multiRegionConfigSchema>;
export type MainRegionConfig = MultiRegionConfig['main'];
export type DataRegionsConfig = MultiRegionConfig['regions'];
export type RegionServerConfig = z.infer<typeof regionConfigSchema>;
export type BlobStorageConfig = RegionServerConfig['blobStorage'];
export declare const loadMultiRegionsConfig: ({ path }: {
    path: string;
}) => Promise<MultiRegionConfig>;
export type KnexConfigArgs = {
    migrationDirs: string[];
    /**
     * Override migration source loader to load migrations a custom way
     */
    migrationSource?: any;
    isTestEnv?: boolean;
    isDevOrTestEnv?: boolean;
    isDevEnv?: boolean;
    logger: Logger;
    maxConnections: number;
    applicationName: string;
    connectionAcquireTimeoutMillis: number;
    connectionCreateTimeoutMillis: number;
    /**
     * If set to any value - true or false - will explicitly enable or disable async stack traces
     * that show where queries are launched from. If not set, will default to true in dev
     * and test environments
     */
    asyncStackTraces?: boolean;
};
export declare const createKnexConfig: ({ connectionString, migrationDirs, isTestEnv, isDevOrTestEnv, logger, maxConnections, caCertificate, connectionAcquireTimeoutMillis, connectionCreateTimeoutMillis, asyncStackTraces, migrationSource }: {
    connectionString?: string | undefined;
    caCertificate?: string | undefined;
} & KnexConfigArgs) => Knex.Knex.Config;
export declare const configureKnexClient: (config: Pick<RegionServerConfig, "postgres">, configArgs: KnexConfigArgs) => {
    public: Knex.Knex;
    private?: Knex.Knex;
};
export declare const getConnectionSettings: (knex: Knex.Knex) => {
    connectionString?: string;
    ssl?: boolean;
    application_name?: string;
};
export declare const obfuscateConnectionString: (connectionString: string) => string;
export {};
//# sourceMappingURL=db.d.ts.map