import { TypedMap } from '@nu-art/ts-common';
import { FileWrapper, FirebaseType_Metadata, FirestoreTransaction } from '@nu-art/firebase/backend';
import { CleanupDetails, DBApiConfigV3, ModuleBE_BaseDB, OnCleanupSchedulerAct } from '@nu-art/thunderstorm/backend';
import { FileExtension, MimeType } from 'file-type';
import { Clause_Where } from '@nu-art/firebase';
import { OnAssetUploaded } from './ModuleBE_BucketListener';
import { DB_Asset, DBProto_Assets, TempSignedUrl, UI_Asset } from '../../shared';
import { CollectionActionType, PostWriteProcessingData } from '@nu-art/firebase/backend/firestore-v3/FirestoreCollectionV3';
import { firestore } from 'firebase-admin';
import Transaction = firestore.Transaction;
type MyConfig = DBApiConfigV3<DBProto_Assets> & {
    authKey: string;
    bucketName?: string;
    storagePath: string;
    pathRegexp: string;
};
export type AssetContent = {
    asset: DB_Asset;
    content: Buffer;
};
export type FileTypeResult = {
    ext: FileExtension;
    mime: MimeType;
} | {
    ext: string;
    mime: string;
};
export type FileTypeValidation = {
    fileType?: string[];
    minSize?: number;
    maxSize?: number;
    validator?: FileValidator;
};
export declare const DefaultMimetypeValidator: (file: FileWrapper, doc: DB_Asset) => Promise<import("file-type/core").FileTypeResult>;
export type FileValidator = (file: FileWrapper, doc: DB_Asset) => Promise<FileTypeResult | undefined>;
export declare const fileSizeValidator: (file: FileWrapper, metadata: FirebaseType_Metadata, minSizeInBytes?: number, maxSizeInBytes?: number) => Promise<boolean>;
export declare class ModuleBE_AssetsDB_Class extends ModuleBE_BaseDB<DBProto_Assets, MyConfig> implements OnCleanupSchedulerAct, OnAssetUploaded {
    constructor();
    mimeTypeValidator: TypedMap<FileValidator>;
    fileValidator: TypedMap<FileTypeValidation>;
    protected postWriteProcessing(data: PostWriteProcessingData<DBProto_Assets>, actionType: CollectionActionType, transaction?: Transaction): Promise<void>;
    init(): void;
    getAssetsContent(assetIds: string[]): Promise<AssetContent[]>;
    registerTypeValidator(mimeType: string, validator: (file: FileWrapper, doc: DB_Asset) => Promise<void>): void;
    queryUnique(where: Clause_Where<DB_Asset>, transaction?: FirestoreTransaction): Promise<DB_Asset>;
    register: (key: string, validationConfig: FileTypeValidation) => void;
    __onCleanupSchedulerAct(): CleanupDetails;
    private cleanup;
    getUrl: (files: UI_Asset[]) => Promise<TempSignedUrl[]>;
    processAssetManually: (feId?: string) => Promise<void[]>;
    __processAsset: (filePath?: string) => Promise<void>;
    private notifyFrontend;
}
export declare const ModuleBE_AssetsDB: ModuleBE_AssetsDB_Class;
export {};
