import { Client } from 'pg';
import { Storage } from '.';
import { CrowdinCredentials } from '../types';
import { IntegrationConfig, IntegrationCredentials, IntegrationFilesSnapshot, IntegrationSyncSettings, IntegrationWebhooks } from '../modules/integration/types';
import { CreateJobParams, GetActiveJobsParams, GetJobParams, GetFileTranslationCacheByLanguageParams, Job, TranslationCache, UpdateJobParams, UpdateTranslationCacheParams, GetFileTranslationCache, UnsyncedFiles, GetUnsyncedFiles } from '../modules/integration/util/types';
import { UserErrors } from './types';
export interface PostgreStorageConfig {
    host?: string;
    connectionString?: string;
    user?: string;
    database?: string;
    password?: string;
    port?: number;
    keepAlive?: boolean;
    keepAliveInitialDelayMillis?: number;
    idle_in_transaction_session_timeout?: number;
    connectionTimeoutMillis?: number;
}
interface TableIndexes {
    [key: string]: {
        [key: string]: string;
    };
}
export declare class PostgreStorage implements Storage {
    private config;
    private directoryPath;
    private _res?;
    private _rej?;
    private dbPromise;
    tables: {
        crowdin_credentials: string;
        integration_credentials: string;
        sync_settings: string;
        app_metadata: string;
        files_snapshot: string;
        webhooks: string;
        user_errors: string;
        integration_settings: string;
        job: string;
        translation_file_cache: string;
        unsynced_files: string;
    };
    tableIndexes: TableIndexes;
    constructor(config: PostgreStorageConfig, directoryPath: string | null);
    executeQuery<T>(command: (client: Client) => Promise<T>): Promise<T>;
    migrate(): Promise<void>;
    alterTables(client: Client): Promise<void>;
    addColumns(client: Client, newColumns: string[], tableName: string): Promise<void>;
    addColumn(client: Client, columnName: string, tableName: string, columnType: string): Promise<void>;
    addTables(client: Client): Promise<void>;
    saveCrowdinCredentials(credentials: CrowdinCredentials): Promise<void>;
    updateCrowdinCredentials(credentials: CrowdinCredentials): Promise<void>;
    getCrowdinCredentials(id: string): Promise<CrowdinCredentials | undefined>;
    getAllCrowdinCredentials(): Promise<CrowdinCredentials[]>;
    deleteCrowdinCredentials(id: string): Promise<void>;
    saveIntegrationCredentials(id: string, credentials: any, crowdinId: string): Promise<void>;
    updateIntegrationCredentials(id: string, credentials: any): Promise<void>;
    updateIntegrationManagers(id: string, managers: any): Promise<void>;
    getIntegrationCredentials(id: string): Promise<IntegrationCredentials | undefined>;
    getAllIntegrationCredentials(crowdinId: string): Promise<IntegrationCredentials[]>;
    deleteIntegrationCredentials(id: string): Promise<void>;
    deleteAllIntegrationCredentials(crowdinId: string): Promise<void>;
    saveMetadata(id: string, metadata: any, crowdinId: string): Promise<void>;
    updateMetadata(id: string, metadata: any, crowdinId?: string): Promise<void>;
    getMetadata(id: string): Promise<any>;
    getAllMetadata(): Promise<any[]>;
    deleteMetadata(id: string): Promise<void>;
    getSyncSettingsByProvider(integrationId: string, provider: string): Promise<IntegrationSyncSettings | undefined>;
    getAllSyncSettingsByType(type: string): Promise<IntegrationSyncSettings[]>;
    saveSyncSettings(files: any, integrationId: string, crowdinId: string, type: string, provider: string): Promise<void>;
    updateSyncSettings(files: any, integrationId: string, crowdinId: string, type: string, provider: string): Promise<void>;
    getSyncSettings(integrationId: string, crowdinId: string, type: string, provider: string): Promise<IntegrationSyncSettings | undefined>;
    saveFilesSnapshot(files: any, integrationId: string, crowdinId: string, provider: string): Promise<void>;
    updateFilesSnapshot(files: any, integrationId: string, crowdinId: string, provider: string): Promise<void>;
    getFilesSnapshot(integrationId: string, crowdinId: string, provider: string): Promise<IntegrationFilesSnapshot | undefined>;
    getAllWebhooks(integrationId: string, crowdinId: string, provider: string): Promise<IntegrationWebhooks[] | undefined>;
    getWebhooks(fileId: string, integrationId: string, crowdinId: string, provider: string): Promise<IntegrationWebhooks | undefined>;
    saveWebhooks(fileId: string, integrationId: string, crowdinId: string, provider: string): Promise<void>;
    deleteWebhooks(fileIds: any[], integrationId: string, crowdinId: string, provider: string): Promise<void>;
    getAllUserErrors(crowdinId: string, integrationId?: string): Promise<UserErrors[] | undefined>;
    saveUserError(action: string, message: string, data: any, createdAt: string, crowdinId: string, integrationId?: string): Promise<void>;
    deleteUserErrors(createdAt: string, crowdinId: string, integrationId?: string): Promise<void>;
    deleteAllUsersErrorsOlderThan(createdAt: string): Promise<void>;
    saveIntegrationConfig(integrationId: string, crowdinId: string, config: any): Promise<void>;
    getAllIntegrationConfigs(crowdinId: string): Promise<IntegrationConfig[]>;
    getIntegrationConfig(integrationId: string): Promise<IntegrationConfig | undefined>;
    updateIntegrationConfig(integrationId: string, config: any): Promise<void>;
    createJob({ integrationId, crowdinId, type, payload, title }: CreateJobParams): Promise<string>;
    updateJob({ id, progress, status, info, data, attempt }: UpdateJobParams): Promise<void>;
    getJob({ id }: GetJobParams): Promise<Job | undefined>;
    getActiveJobs({ integrationId, crowdinId }: GetActiveJobsParams): Promise<Job[] | undefined>;
    deleteFinishedJobs(): Promise<void>;
    getAllInProgressJobs(): Promise<Job[] | undefined>;
    saveTranslationCache({ integrationId, crowdinId, fileId, languageId, etag, }: TranslationCache): Promise<void>;
    getFileTranslationCache({ integrationId, crowdinId, fileId, }: GetFileTranslationCache): Promise<TranslationCache[] | undefined>;
    getFileTranslationCacheByLanguage({ integrationId, crowdinId, fileId, languageId, }: GetFileTranslationCacheByLanguageParams): Promise<TranslationCache | undefined>;
    updateTranslationCache({ integrationId, crowdinId, fileId, languageId, etag, }: UpdateTranslationCacheParams): Promise<void>;
    private migrateFromSqlite;
    saveUnsyncedFiles({ integrationId, crowdinId, files }: UnsyncedFiles): Promise<void>;
    updateUnsyncedFiles({ integrationId, crowdinId, files }: UnsyncedFiles): Promise<void>;
    getUnsyncedFiles({ integrationId, crowdinId }: GetUnsyncedFiles): Promise<UnsyncedFiles | undefined>;
    registerCustomTable(tableName: string, schema: Record<string, string>): Promise<void>;
    insertRecord(tableName: string, data: Record<string, any>): Promise<void>;
    selectRecords(tableName: string, options?: {
        columns?: string[];
        whereClause?: string;
        orderBy?: string;
        limit?: number;
        distinct?: boolean;
    }, params?: any[]): Promise<any[]>;
    updateRecord(tableName: string, data: Record<string, any>, whereClause: string, params?: any[]): Promise<void>;
    deleteRecord(tableName: string, whereClause: string, params?: any[]): Promise<void>;
}
export {};
