UNPKG

@uploadx/core

Version:
86 lines (85 loc) 3.45 kB
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<any>; export type MethodHandler = { [h in Handlers]?: AsyncHandler; }; type ReqEvent = { request: Pick<IncomingMessage, 'url' | 'headers' | 'method'>; }; export type UploadxEvent<TFile extends UploadxFile> = TFile & ReqEvent; export type UploadxErrorEvent = UploadxError & ReqEvent; export interface BaseHandler<TFile extends UploadxFile> extends EventEmitter { on(event: 'error', listener: (error: UploadxErrorEvent) => void): this; on(event: UploadxEventType, listener: (payload: UploadxEvent<TFile>) => void): this; off(event: UploadxEventType, listener: (payload: UploadxEvent<TFile>) => void): this; off(event: 'error', listener: (error: UploadxErrorEvent) => void): this; emit(event: UploadxEventType, payload: UploadxEvent<TFile>): boolean; emit(event: 'error', error: UploadxErrorEvent): boolean; } export type UploadxOptions<TFile extends UploadxFile> = { storage: BaseStorage<TFile>; userIdentifier?: UserIdentifier; } | DiskStorageOptions; export declare abstract class BaseHandler<TFile extends UploadxFile> 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<TFile>; registeredHandlers: Map<string, AsyncHandler>; logger: Logger; protected _errorResponses: ErrorResponses; constructor(config?: UploadxOptions<TFile>); /** * Override error responses * @example * ```ts * const uploadx = new Uploadx({ storage }); * uploadx.errorResponses = { * FileNotFound: [404, { message: 'Not Found!' }] * } * ``` */ set errorResponses(value: Partial<ErrorResponses>); 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<TFile>; /** * Returns user uploads list */ get(req: IncomingMessage, res: ServerResponse): Promise<UploadList>; /** * 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<string>; /** * Build file url from request */ buildFileUrl(req: IncomingMessage, file: TFile): string; protected finish(req: IncomingMessage, res: ServerResponse, response: UploadxResponse): void; } export {};