import { type DbConfig } from '@overture-stack/lyric-data-model';
import type { FeaturesConfig, IdServiceConfig, LoggerConfig, SchemaServiceConfig, SubmissionServiceConfig, ValidatorConfig } from '../../../src/config/config.js';
export type LyricProviderConfig = {
    db: DbConfig;
    schemaService: SchemaServiceConfig;
    features?: FeaturesConfig;
    idService?: IdServiceConfig;
    logger?: LoggerConfig;
    submissionService?: SubmissionServiceConfig;
    validator?: ValidatorConfig;
};
export type LyricProvider = Awaited<ReturnType<typeof createLyricProvider>>;
export declare function createLyricProvider(config: LyricProviderConfig): Promise<{
    disconnect: () => Promise<void>;
    configs: import("../../../src/config/config.js").BaseDependencies;
    routers: {
        audit: import("express").Router;
        category: import("express").Router;
        dictionary: import("express").Router;
        submission: import("express").Router;
        submittedData: import("express").Router;
        validator: import("express").Router;
    };
    controllers: {
        audit: {
            byCategoryIdAndOrganization: import("express-serve-static-core").RequestHandler<{
                organization: string;
                categoryId: string;
            }, unknown, object, import("../../../src/utils/schemas.js").PaginationQueryParams & import("../../../src/utils/schemas.js").AuditQueryParams, Record<string, any>>;
        };
        category: {
            getDetails: import("express-serve-static-core").RequestHandler<import("../../../src/utils/schemas.js").CategoryPathParams, unknown, object, import("qs").ParsedQs, Record<string, any>>;
            listAll: (req: import("express").Request, res: import("express").Response, next: import("express").NextFunction) => Promise<import("express").Response<any, Record<string, any>> | undefined>;
        };
        dictionary: {
            registerDictionary: import("express-serve-static-core").RequestHandler<import("express-serve-static-core").ParamsDictionary, unknown, import("../../../src/utils/schemas.js").DictionaryRegisterBodyParams, import("qs").ParsedQs, Record<string, any>>;
            downloadDataFileTemplates: import("express-serve-static-core").RequestHandler<{
                categoryId: string;
            }, unknown, unknown, {
                fileType?: "csv" | "tsv" | undefined;
            }, Record<string, any>>;
            getDictionaryJson: (req: import("express").Request, res: import("express").Response, next: import("express").NextFunction) => Promise<import("express").Response<any, Record<string, any>> | undefined>;
        };
        submission: {
            commit: import("express-serve-static-core").RequestHandler<import("../../../src/utils/schemas.js").submissionCommitPathParams, unknown, object, import("qs").ParsedQs, Record<string, any>>;
            delete: import("express-serve-static-core").RequestHandler<import("../../../src/utils/schemas.js").submissionIdPathParam, unknown, object, import("../../../src/utils/schemas.js").SubmissionDeleteQueryParams, Record<string, any>>;
            deleteEntityName: import("express-serve-static-core").RequestHandler<import("../../../src/utils/schemas.js").SubmissionDeleteEntityNameParams, unknown, object, import("../../../src/utils/schemas.js").SubmissionDeleteEntityNameQueryParams, Record<string, any>>;
            deleteSubmittedDataBySystemId: import("express-serve-static-core").RequestHandler<import("../../../src/utils/schemas.js").DataDeleteBySystemIdPathParams, unknown, object, import("qs").ParsedQs, Record<string, any>>;
            editSubmittedData: import("express-serve-static-core").RequestHandler<import("../../../src/utils/schemas.js").CategoryPathParams, unknown, Record<string, unknown>[], {
                entityName: string;
                organization: string;
            }, Record<string, any>>;
            getSubmissionsByCategory: import("express-serve-static-core").RequestHandler<import("../../../src/utils/schemas.js").CategoryPathParams, unknown, object, import("../../../src/utils/schemas.js").SubmissionsByCategoryQueryParams, Record<string, any>>;
            getSubmissionById: import("express-serve-static-core").RequestHandler<import("../../../src/utils/schemas.js").submissionIdPathParam, unknown, object, import("qs").ParsedQs, Record<string, any>>;
            getSubmissionDetailsById: import("express-serve-static-core").RequestHandler<import("../../../src/utils/schemas.js").submissionIdPathParam, unknown, object, import("../../../src/utils/schemas.js").SubmissionsDetailsQueryParams, Record<string, any>>;
            getActiveByOrganization: import("express-serve-static-core").RequestHandler<{
                organization: string;
                categoryId: string;
            }, unknown, object, import("qs").ParsedQs, Record<string, any>>;
            submit: import("express-serve-static-core").RequestHandler<import("../../../src/utils/schemas.js").CategoryPathParams, unknown, import("@overture-stack/lectern-client").DataRecord[], {
                entityName: string;
                organization: string;
            }, Record<string, any>>;
            submitFiles: import("express-serve-static-core").RequestHandler<import("../../../src/utils/schemas.js").CategoryPathParams, unknown, {
                filename: string;
                entity: string;
            }[] | undefined, {
                organization: string;
            }, Record<string, any>>;
        };
        submittedData: {
            getSubmittedDataByCategory: import("express-serve-static-core").RequestHandler<import("../../../src/utils/schemas.js").CategoryPathParams, unknown, object, import("../../../src/utils/schemas.js").DataQueryParams, Record<string, any>>;
            getSubmittedDataByOrganization: import("express-serve-static-core").RequestHandler<{
                organization: string;
                categoryId: string;
            }, unknown, object, import("../../../src/utils/schemas.js").DataQueryParams, Record<string, any>>;
            getSubmittedDataByQuery: import("express-serve-static-core").RequestHandler<{
                organization: string;
                categoryId: string;
            }, unknown, object, import("../../../src/utils/schemas.js").DataQueryParams, Record<string, any>>;
            getSubmittedDataBySystemId: import("express-serve-static-core").RequestHandler<import("../../../src/utils/schemas.js").DataGetBySystemIdPathParams, unknown, object, import("../../../src/utils/schemas.js").GetDataQueryParams, Record<string, any>>;
            getSubmittedDataByCategoryStream: import("express-serve-static-core").RequestHandler<import("../../../src/utils/schemas.js").CategoryPathParams, unknown, object, import("../../../src/utils/schemas.js").DataQueryParams, Record<string, any>>;
        };
        validator: {
            existsRecord: import("express-serve-static-core").RequestHandler<import("../../../src/utils/schemas.js").ValidationPathParams, unknown, object, import("../../../src/utils/schemas.js").ValidationQueryParam, Record<string, any>>;
        };
    };
    services: {
        audit: {
            byCategoryIdAndOrganization: (categoryId: number, organization: string, filterOptions: import("../../../index.js").AuditFilterOptions) => Promise<{
                data: import("../../../index.js").AuditDataResponse[];
                metadata: {
                    totalRecords: number;
                    errorMessage?: string;
                };
            }>;
        };
        category: {
            getDetails: (categoryId: number) => Promise<import("../../../index.js").CategoryDetailsResponse | undefined>;
            listAll: () => Promise<import("../../../index.js").ListAllCategoriesResponse[]>;
        };
        dictionary: {
            createDictionaryIfDoesNotExist: (dictionaryName: string, version: string, schemas: import("@overture-stack/lectern-client").Schema[], username?: string) => Promise<import("@overture-stack/lyric-data-model/models").Dictionary>;
            fetchDictionaryByVersion: (dictionaryName: string, version: string) => Promise<import("@overture-stack/lectern-client").Dictionary>;
            getActiveDictionaryByCategory: (categoryId: number) => Promise<import("@overture-stack/lyric-data-model/models").Dictionary | undefined>;
            register: ({ categoryName, dictionaryName, dictionaryVersion, defaultCentricEntity, username, }: {
                categoryName: string;
                dictionaryName: string;
                dictionaryVersion: string;
                defaultCentricEntity?: string;
                username?: string;
            }) => Promise<{
                dictionary: import("@overture-stack/lyric-data-model/models").Dictionary;
                category: import("@overture-stack/lyric-data-model/models").Category;
            }>;
        };
        submission: {
            commitSubmission: (categoryId: number, submissionId: number, username: string) => Promise<import("../../../index.js").CommitSubmissionResult>;
            deleteActiveSubmissionById: (submissionId: number, username: string, force: boolean) => Promise<import("../../../index.js").DeleteSubmissionResult>;
            deleteActiveSubmissionEntity: (submissionId: number, username: string, filter: {
                actionType: import("../../../index.js").SubmissionActionType;
                entityName: string;
                index: number | null;
            }) => Promise<import("../../../index.js").SubmitDataResult>;
            getSubmissionsByCategory: (categoryId: number, paginationOptions: import("../../../index.js").PaginationOptions, filterOptions: {
                onlyActive: boolean;
                username?: string;
                organization?: string;
            }) => Promise<{
                result: import("../../../index.js").SubmissionSummary[];
                metadata: {
                    totalRecords: number;
                    errorMessage?: string;
                };
            }>;
            getSubmissionById: (submissionId: number) => Promise<import("../../../index.js").SubmissionSummary | undefined>;
            getSubmissionDetailsById: ({ submissionId, paginationOptions, filterOptions, }: {
                submissionId: number;
                paginationOptions: import("../../../index.js").PaginationOptions;
                filterOptions: {
                    entityNames: string[];
                    actionTypes: import("../../../index.js").SubmissionActionType[];
                };
            }) => Promise<{
                data: import("../../../src/utils/submissionResponseParser.js").FlattenedSubmissionData[];
                errors?: import("@overture-stack/lyric-data-model/models").SubmissionRecordErrorDetails[];
            }>;
            getActiveSubmissionByOrganization: ({ categoryId, username, organization, }: {
                categoryId: number;
                username: string;
                organization: string;
            }) => Promise<import("../../../index.js").SubmissionSummary | undefined>;
            getOrCreateActiveSubmission: (params: {
                username: string;
                categoryId: number;
                organization: string;
            }) => Promise<number>;
            submit: ({ data, categoryId, organization, username, }: {
                data: import("../../../index.js").EntityData;
                categoryId: number;
                organization: string;
                username: string;
            }) => Promise<import("../../../index.js").SubmitDataResult | {
                status: "UNKNOWN_CATEGORY";
                description: string;
            }>;
            submitFiles: ({ files, categoryId, organization, username, fileEntityMap, }: {
                files: Express.Multer.File[];
                categoryId: number;
                organization: string;
                username: string;
                fileEntityMap?: import("../../../src/utils/schemas.js").FilenameEntityPair[];
            }) => Promise<import("../../../index.js").SubmitFileResult | {
                status: "UNKNOWN_CATEGORY";
                description: string;
            }>;
        };
        submittedData: {
            deleteSubmittedDataBySystemId: (categoryId: number, systemId: string, username: string) => Promise<{
                description: string;
                inProcessEntities: string[];
                status: import("../../../index.js").ActiveSubmissionStatus;
                submissionId?: string;
            }>;
            editSubmittedData: ({ categoryId, entityName, organization, records, username, }: {
                categoryId: number;
                entityName: string;
                organization: string;
                records: Record<string, unknown>[];
                username: string;
            }) => Promise<{
                description?: string;
                submissionId?: number;
                status: string;
            }>;
            getSubmittedDataByCategory: (categoryId: number, paginationOptions: import("../../../index.js").PaginationOptions, filterOptions: {
                entityName?: string[];
                view: import("../../../index.js").ViewType;
                organizations?: string[];
            }) => Promise<{
                result: import("../../../index.js").SubmittedDataResponse[];
                metadata: {
                    totalRecords: number;
                    errorMessage?: string;
                };
            }>;
            getSubmittedDataByOrganization: (categoryId: number, organization: string, paginationOptions: import("../../../index.js").PaginationOptions, filterOptions: {
                sqon?: import("@overture-stack/sqon-builder").SQON;
                entityName?: string[];
                view: import("../../../index.js").ViewType;
            }) => Promise<{
                result: import("../../../index.js").SubmittedDataResponse[];
                metadata: {
                    totalRecords: number;
                    errorMessage?: string;
                };
            }>;
            getSubmittedDataBySystemId: (categoryId: number, systemId: string, filterOptions: {
                view: import("../../../index.js").ViewType;
            }) => Promise<{
                result: import("../../../index.js").SubmittedDataResponse | undefined;
                metadata: {
                    errorMessage?: string;
                };
            }>;
            getSubmittedDataByCategoryStream: (categoryId: number, filterOptions: {
                entityName?: string[];
                view: import("../../../index.js").ViewType;
                organizations?: string[];
            }) => AsyncGenerator<import("../../../index.js").SubmittedDataResponse, {
                result: [];
                metadata: {
                    totalRecords: number;
                    errorMessage?: string;
                };
            } | undefined, unknown>;
        };
        validation: {
            existsRecord: ({ categoryId, entityName, field, organization, value, }: {
                categoryId: number;
                entityName: string;
                field: string;
                organization: string;
                value: string;
            }) => Promise<boolean>;
        };
    };
    repositories: {
        audit: {
            getRecordsByCategoryIdAndOrganizationPaginated: (categoryId: number, organization: string, filterOptions: import("../../../index.js").AuditFilterOptions) => Promise<import("../../../index.js").AuditRepositoryRecord[]>;
            getTotalRecordsByCategoryIdAndOrganization: (categoryId: number, organization: string, filterOptions: import("../../../index.js").AuditFilterOptions) => Promise<number>;
        };
        category: {
            save: (data: import("@overture-stack/lyric-data-model/models").NewCategory) => Promise<import("@overture-stack/lyric-data-model/models").Category>;
            categoryIdExists: (categoryId: number) => Promise<boolean>;
            getAllCategoryNames: () => Promise<import("../../../index.js").ListAllCategoriesResponse[]>;
            getCategoryById: (id: number) => Promise<(import("@overture-stack/lyric-data-model/models").Category & {
                activeDictionary: import("@overture-stack/lyric-data-model/models").Dictionary | null;
            }) | undefined>;
            getCategoryByName: (name: string) => Promise<import("@overture-stack/lyric-data-model/models").Category | undefined>;
            getActiveDictionaryByCategory: (categoryId: number) => Promise<(import("@overture-stack/lectern-client").Dictionary & {
                id: number;
            }) | undefined>;
            update: (categoryId: number, newData: Partial<import("@overture-stack/lyric-data-model/models").Category>) => Promise<import("@overture-stack/lyric-data-model/models").Category>;
        };
        dictionary: {
            save: (data: import("@overture-stack/lyric-data-model/models").NewDictionary) => Promise<import("@overture-stack/lyric-data-model/models").Dictionary>;
            getDictionary: (dictionaryName: string, version: string) => Promise<import("@overture-stack/lyric-data-model/models").Dictionary | undefined>;
            getDictionaryById: (dictionaryId: number) => Promise<import("@overture-stack/lyric-data-model/models").Dictionary | undefined>;
        };
        submission: {
            save: (data: import("@overture-stack/lyric-data-model/models").NewSubmission) => Promise<number>;
            getActiveSubmissionDetails: ({ categoryId, organization, username, }: {
                categoryId: number;
                username: string;
                organization: string;
            }) => Promise<Pick<import("@overture-stack/lyric-data-model/models").Submission, "data" | "id"> | undefined>;
            getActiveSubmissionSummary: ({ categoryId, username, organization, }: {
                categoryId: number;
                username: string;
                organization: string;
            }) => Promise<import("../../../index.js").SubmissionDataSummaryRepositoryRecord | undefined>;
            getSubmissionById: (submissionId: number) => Promise<import("../../../index.js").SubmissionDataSummaryRepositoryRecord | undefined>;
            getSubmissionDetailsById: (submissionId: number) => Promise<import("../../../index.js").SubmissionDataDetailsRepositoryRecord | undefined>;
            update: (submissionId: number, newData: Partial<import("@overture-stack/lyric-data-model/models").Submission>, tx?: import("drizzle-orm/pg-core").PgTransaction<import("drizzle-orm/postgres-js").PostgresJsQueryResultHKT, import("@overture-stack/lyric-data-model/models").Submission, import("drizzle-orm").ExtractTablesWithRelations<import("@overture-stack/lyric-data-model/models").Submission>>) => Promise<number>;
            getSubmissionsByCategory: (categoryId: number, paginationOptions: import("../../../index.js").PaginationOptions, filterOptions: {
                onlyActive: boolean;
                username?: string;
                organization?: string;
            }) => Promise<import("../../../index.js").SubmissionDataSummaryRepositoryRecord[] | undefined>;
            getTotalSubmissionsByCategory: (categoryId: number, filterOptions: {
                onlyActive: boolean;
                username?: string;
                organization?: string;
            }) => Promise<number>;
        };
        submittedData: {
            deleteBySystemId: (params: {
                diff: import("@overture-stack/lyric-data-model/models").DataDiff;
                submissionId: number;
                systemId: string;
                username: string;
            } | {
                diff: import("@overture-stack/lyric-data-model/models").DataDiff;
                submissionId: number;
                systemId: string;
                username: string;
            }[], tx?: import("drizzle-orm/pg-core").PgTransaction<import("drizzle-orm/postgres-js").PostgresJsQueryResultHKT, import("@overture-stack/lyric-data-model/models").SubmittedData, import("drizzle-orm").ExtractTablesWithRelations<import("@overture-stack/lyric-data-model/models").SubmittedData>>) => Promise<{
                id: number;
                createdAt: Date | null;
                createdBy: string | null;
                updatedAt: Date | null;
                updatedBy: string | null;
                data: import("@overture-stack/lectern-client").DataRecord;
                dictionaryCategoryId: number;
                entityName: string;
                isValid: boolean;
                lastValidSchemaId: number | null;
                organization: string;
                originalSchemaId: number;
                systemId: string;
            }[]>;
            save: (data: import("@overture-stack/lyric-data-model/models").NewSubmittedData | import("@overture-stack/lyric-data-model/models").NewSubmittedData[], tx?: import("drizzle-orm/pg-core").PgTransaction<import("drizzle-orm/postgres-js").PostgresJsQueryResultHKT, import("@overture-stack/lyric-data-model/models").SubmittedData, import("drizzle-orm").ExtractTablesWithRelations<import("@overture-stack/lyric-data-model/models").SubmittedData>>) => Promise<{
                id: number;
            } | {
                id: number;
            }[]>;
            getAllOrganizationsByCategoryId: (categoryId: number) => Promise<string[]>;
            getSubmittedDataByCategoryIdAndOrganization: (categoryId: number, organization: string) => Promise<import("@overture-stack/lyric-data-model/models").SubmittedData[]>;
            getSubmittedDataByCategoryIdPaginated: (categoryId: number, paginationOptions: import("../../../index.js").PaginationOptions, filter?: {
                entityNames?: string[];
                organizations?: string[];
            }) => Promise<import("../../../index.js").SubmittedDataResponse[]>;
            getSubmittedDataByCategoryIdAndOrganizationPaginated: (categoryId: number, organization: string, paginationOptions: import("../../../index.js").PaginationOptions, filter?: {
                sql?: import("drizzle-orm").SQL;
                entityNames?: string[];
            }) => Promise<import("../../../index.js").SubmittedDataResponse[]>;
            getTotalRecordsByCategoryIdAndOrganization: (categoryId: number, organization: string, filter?: {
                sql?: import("drizzle-orm").SQL;
                entityNames?: string[];
            }) => Promise<number>;
            getTotalRecordsByCategoryId: (categoryId: number, filter?: {
                sql?: import("drizzle-orm").SQL;
                entityNames?: string[];
                organizations?: string[];
            }) => Promise<number>;
            update: (params: {
                submittedDataId: number;
                dataDiff: import("@overture-stack/lyric-data-model/models").DataDiff;
                newData: Partial<import("@overture-stack/lyric-data-model/models").SubmittedData>;
                oldIsValid: boolean;
                submissionId: number;
            } | {
                submittedDataId: number;
                dataDiff: import("@overture-stack/lyric-data-model/models").DataDiff;
                newData: Partial<import("@overture-stack/lyric-data-model/models").SubmittedData>;
                oldIsValid: boolean;
                submissionId: number;
            }[], tx?: import("drizzle-orm/pg-core").PgTransaction<import("drizzle-orm/postgres-js").PostgresJsQueryResultHKT, import("@overture-stack/lyric-data-model/models").SubmittedData, import("drizzle-orm").ExtractTablesWithRelations<import("@overture-stack/lyric-data-model/models").SubmittedData>>) => Promise<import("@overture-stack/lyric-data-model/models").SubmittedData | import("@overture-stack/lyric-data-model/models").SubmittedData[]>;
            getSubmittedDataBySystemId: (systemId: string) => Promise<import("@overture-stack/lyric-data-model/models").SubmittedData | undefined>;
            getSubmittedDataFiltered: (organization: string, filterData: {
                entityName: string;
                dataField: string;
                dataValue: string | undefined;
            }[]) => Promise<import("@overture-stack/lyric-data-model/models").SubmittedData[]>;
        };
    };
    utils: {
        audit: typeof import("../../../src/utils/auditUtils.js");
        convertSqonToQuery: typeof import("../../../src/utils/convertSqonToQuery.js");
        dictionarySchemaRelations: typeof import("../../../src/utils/dictionarySchemaRelations.js");
        dictionary: typeof import("../../../src/utils/dictionaryUtils.js");
        errors: typeof import("../../../src/utils/errors.js");
        schema: typeof import("../../../src/utils/schemas.js");
        submission: typeof import("../../../src/utils/submissionUtils.js");
        submittedData: typeof import("../../../src/utils/submittedDataUtils.js");
        type: typeof import("../../../src/utils/types.js");
    };
    shutdown: () => Promise<void>;
}>;
