import { UploadApiOptions, v2 as Cloudinary } from 'cloudinary'; import type { Request } from 'express'; import type { StorageEngine } from 'multer'; declare type KnownKeys = { [K in keyof T]: string extends K ? never : number extends K ? never : K; } extends { [_ in keyof T]: infer U; } ? U : never; declare type File = Express.Multer.File; declare type PickedUploadApiOptions = Pick>; export declare type OptionCallback = (req: Request, file: File) => Promise | T; declare type CloudinaryStorageUploadOptionsWithoutPublicId = { [key in keyof PickedUploadApiOptions]: OptionCallback | PickedUploadApiOptions[key]; }; declare type CloudinaryStorageUploadOptions = CloudinaryStorageUploadOptionsWithoutPublicId & { public_id?: OptionCallback; }; declare type Params = CloudinaryStorageUploadOptions | OptionCallback; export interface Options { cloudinary: typeof Cloudinary; params?: Params; } export declare class CloudinaryStorage implements StorageEngine { private cloudinary; private params; constructor(opts: Options); _handleFile(req: Request, file: File, callback: (error?: any, info?: Partial) => void): Promise; _removeFile(req: Request, file: File, callback: (error: Error) => void): void; private upload; } export declare function createCloudinaryStorage(opts: Options): CloudinaryStorage; export default createCloudinaryStorage;