import * as plugins from './plugins.js';
import { SmartdataCollection } from './classes.collection.js';
import { EasyStore } from './classes.easystore.js';
/**
 * interface - indicates the connection status of the db
 */
export type TConnectionStatus = 'initial' | 'disconnected' | 'connected' | 'failed';
export declare class SmartdataDb {
    smartdataOptions: plugins.tsclass.database.IMongoDescriptor;
    mongoDbClient: plugins.mongodb.MongoClient;
    mongoDb: plugins.mongodb.Db;
    status: TConnectionStatus;
    statusConnectedDeferred: plugins.smartpromise.Deferred<void>;
    smartdataCollectionMap: plugins.lik.ObjectMap<SmartdataCollection<any>>;
    constructor(smartdataOptions: plugins.tsclass.database.IMongoDescriptor);
    createEasyStore<T = unknown>(nameIdArg: string): Promise<EasyStore<T>>;
    /**
     * connects to the database that was specified during instance creation
     */
    init(): Promise<any>;
    /**
     * closes the connection to the databse
     */
    close(): Promise<any>;
    /**
     * Start a MongoDB client session for transactions
     */
    startSession(): plugins.mongodb.ClientSession;
    addCollection(SmartdataCollectionArg: SmartdataCollection<any>): void;
    /**
     * Gets a collection's name and returns a SmartdataCollection instance
     * @param nameArg
     * @returns DbTable
     */
    getSmartdataCollectionByName<T>(nameArg: string): Promise<SmartdataCollection<T>>;
}
