/// <reference types="node" /> import EventEmitter from 'eventemitter3'; import { Socket } from 'socket.io-client'; declare type FileInfo<T = unknown> = { /** * file size */ size: number; /** * file name */ name: string; /** * Your custom data to send to the server. please note that you should not put * some largest object here. otherwise the socket will failed and disconnect itself automatically. * This is the reason while we need upload large buffer by chunk. * > * **Please remove your file from this object. eg: Your File buffer.** * > * Puts some json object here.. */ meta: T; /** * file buffer * if you are using browser you can use https://github.com/feross/blob-to-buffer to convert a Blob to buffer */ content: Buffer; /** * last modified time */ mtime: number; }; declare type Options = { /** * max file: 200MB */ maxFileSize: number; /** * socket event name prefix */ prefix: string; /** * chunk size: 50kb */ chunkSize: number; }; export interface UploaderClient<T> { /** * The start event, you can listen and add some meta info via * `file.meta = { x: 'my data'}` * @param event * @param listener */ on(event: 'start', listener: (params: { file: Partial<FileInfo>; }) => void): this; on(event: 'progress', listener: (params: { file: FileInfo<T>; bytesLoaded: number; name: string; }) => void): this; /** * The complete event contains some important infos. * - detail you can pass through data from server side to client after upload completely. * - success which the upload status * @param event * @param listener */ on(event: 'complete', listener: (params: { file: FileInfo; success: boolean; detail: T; }) => void): this; /** * An error occurred * @param event * @param listener */ on(event: 'error', listener: (params: { file: FileInfo; error: Error; message: string; }) => void): this; } /** * socket.io upload client for browser and react-native */ export declare class UploaderClient<T = Record<string, unknown>> extends EventEmitter { private readonly socket; private readonly options; static downloads: number; constructor(socket: Socket, options?: Partial<Options>); private get maxFileSize(); /** * files */ private files; /** * get event with prefix * @param event */ private getSocketNameWithPrefix; upload(file: FileInfo<T>): void; chunkCallbacks: {}; readyCallbacks: {}; communicators: {}; /** * listen on socket * @param socket */ private listenSocket; destroy(): void; } export {};