import { EventEmitter } from 'events'; import { BaseStorage, DiskStorageOptions, UploadList, UploadxEventType, UploadxFile, UserIdentifier } from '../storages'; import { IncomingMessage, ResponseBodyType, ServerResponse, UploadxResponse } from '../types'; import { ErrorResponses, Logger, UploadxError } from '../utils'; import { Cors } from './cors'; type Handlers = 'delete' | 'get' | 'head' | 'options' | 'patch' | 'post' | 'put'; export type AsyncHandler = (req: IncomingMessage, res: ServerResponse) => Promise; export type MethodHandler = { [h in Handlers]?: AsyncHandler; }; type ReqEvent = { request: Pick; }; export type UploadxEvent = TFile & ReqEvent; export type UploadxErrorEvent = UploadxError & ReqEvent; export interface BaseHandler extends EventEmitter { on(event: 'error', listener: (error: UploadxErrorEvent) => void): this; on(event: UploadxEventType, listener: (payload: UploadxEvent) => void): this; off(event: UploadxEventType, listener: (payload: UploadxEvent) => void): this; off(event: 'error', listener: (error: UploadxErrorEvent) => void): this; emit(event: UploadxEventType, payload: UploadxEvent): boolean; emit(event: 'error', error: UploadxErrorEvent): boolean; } export type UploadxOptions = { storage: BaseStorage; userIdentifier?: UserIdentifier; } | DiskStorageOptions; export declare abstract class BaseHandler extends EventEmitter implements MethodHandler { /** * Limiting enabled http method handlers * @example * ```ts * Uploadx.methods = ['post', 'put', 'delete']; * app.use('/upload', uploadx(opts)); * ``` */ static methods: Handlers[]; cors: Cors; responseType: ResponseBodyType; storage: BaseStorage; registeredHandlers: Map; logger: Logger; protected _errorResponses: ErrorResponses; constructor(config?: UploadxOptions); /** * Override error responses * @example * ```ts * const uploadx = new Uploadx({ storage }); * uploadx.errorResponses = { * FileNotFound: [404, { message: 'Not Found!' }] * } * ``` */ set errorResponses(value: Partial); compose(): void; assembleErrors(customErrors?: {}): void; handle: (req: IncomingMessage, res: ServerResponse) => void; upload: (req: IncomingMessage, res: ServerResponse, next?: () => void) => void; getUserId: UserIdentifier; options(req: IncomingMessage, res: ServerResponse): Promise; /** * Returns user uploads list */ get(req: IncomingMessage, res: ServerResponse): Promise; /** * Make response */ send(res: ServerResponse, { statusCode, headers, body }: UploadxResponse): void; /** * Send Error to client */ sendError(res: ServerResponse, error: Error): void; /** * Get id from request */ getId(req: IncomingMessage): string; getAndVerifyId(req: IncomingMessage, res: ServerResponse): Promise; /** * Build file url from request */ buildFileUrl(req: IncomingMessage, file: TFile): string; protected finish(req: IncomingMessage, res: ServerResponse, response: UploadxResponse): void; } export {};