import { FirestoreQuery } from '@nu-art/firebase';
import { DB_Object, Module, ResolvableContent, TypedMap, UniqueId } from '@nu-art/ts-common';
import { firestore } from 'firebase-admin';
import { ModuleBE_BaseDB } from '../db-api-gen/ModuleBE_BaseDB.js';
import { DeltaSyncModule, FullSyncModule, NoNeedToSyncModule, SyncDataFirebaseState } from '../../../shared/sync-manager/types.js';
import { DBProto_DeletedDoc } from '../../../shared/index.js';
import { OnSyncEnvCompleted } from '../sync-env/ModuleBE_SyncEnv.js';
import { OnModuleCleanupV2 } from '../../_entity.js';
import { FirestoreCollectionV3 } from '@nu-art/firebase/backend/firestore-v3/FirestoreCollectionV3';
import Transaction = firestore.Transaction;
type DeletedDBItem = DB_Object & {
__collectionName: string;
__docId: UniqueId;
};
type Config = {
retainDeletedCount: number;
};
/**
* # ModuleBE_SyncManager
*
* ## Description:
* This module manages all the {@link BaseDB_Module} updates and deleted items in order to allow incremental sync of items with clients
*
* ## Config:
*
* ```json
* "ModuleBE_SyncManager" : {
* retainDeletedCount: 100
* }
* ```
*/
export declare class ModuleBE_SyncManager_Class extends Module implements OnModuleCleanupV2, OnSyncEnvCompleted {
collection: FirestoreCollectionV3;
private database;
private dbModules;
smartSyncApi: import("../_imports.js")._ServerBodyApi>;
private resolvableFirebaseBasePath;
constructor();
__onSyncEnvCompleted(env: string, baseUrl: string, requiredHeaders: TypedMap): Promise;
init(): void;
private calculateSmartSync;
getOrCreateSyncData: () => Promise;
private prepareItemToDelete;
onItemsDeleted(collectionName: string, items: DB_Object[], uniqueKeys?: string[], transaction?: Transaction): Promise;
queryDeleted(collectionName: string, query: FirestoreQuery): Promise;
__onCleanupInvokedV2: () => Promise;
getFullSyncData: () => Promise;
setLastUpdated(collectionName: string, lastUpdated: number): Promise;
setOldestDeleted(collectionName: string, oldestDeleted: number): Promise;
setModuleFilter: (filter: (modules: (ModuleBE_BaseDB)[]) => Promise<(ModuleBE_BaseDB)[]>) => void;
/**
* Set function that allows to set a custom resolver for the rtdb node path
* @param resolvablePath The resolver for the node path
*/
setResolvablePath: (resolvablePath: ResolvableContent) => void;
private filterModules;
}
export declare const ModuleBE_SyncManager: ModuleBE_SyncManager_Class;
export {};