import type { ModelConfig, GenericType, Services, AnyObject, ModelInstance } from '../typings'; import type { GraphI } from './graph'; import { Collection } from 'mongodb'; export interface ModelsConfig { models: ModelConfig[]; } export declare class Models { static INTERNAL_MODELS_COLLECTION: string; MODELS: Map; GRAPH: GraphI | null; config: ModelsConfig; services: Services; constructor(config: ModelsConfig, services: Services); initInternalModels(): Promise; addModel(modelConfig: ModelConfig, canReplace?: boolean): any; loadModels(models: ModelConfig[], canReplace?: boolean): void; reset(): Models; hasModel(modelName: string): boolean; getModel(modelName: string): GenericType; isInternalModel(modelName: string): boolean; getModelByCorrelationField(correlationField: string): GenericType | null; load(): Promise; reload(canReplace?: boolean): Promise; createModel(modelConfig: ModelConfig): Promise; getModelIndexes(model: GenericType): Promise; createModelCollections(modelConfig: ModelConfig, model: GenericType): Promise; createModelIndexes(modelConfig: ModelConfig): Promise; updateModel(modelName: string, modelConfig: Partial): Promise; removeModel(modelName: string): Models; factory(modelName: string, correlationId?: string, opts?: Partial<{ retryDuration: number; forcePrimary: boolean; }>): ModelInstance; getGraph(options?: any): GraphI; setGraph(graph: GraphI | null): void; getEntitiesFromGraph(modelName: string, query: any, options?: { graph?: GraphI; models?: string[]; withCorrelationFieldOnly?: boolean; handler?: (services: Services, Model: any, entity: any) => any; }): Promise>; getFromCache(cacheId: string): Promise; setToCache(cacheId: string, value: AnyObject, expiresBy?: string): Promise | null; rotateEncryptionKeyOnCollection(Model: GenericType, collection: Collection, query: object, encryptedFields: string[]): Promise; rotateEncryptionKey(onlyModels?: string[] | null): Promise; log(level: number, modelName: string, correlationId: string, message: string, context: any): Promise; } export declare function init(config: ModelsConfig, services: Services): Models;