import { Checksum, Metadata, UploadxFile } from '../storages';
import { Headers, IncomingMessage, ServerResponse, UploadxResponse } from '../types';
import { BaseHandler, UploadxOptions } from './base-handler';
export declare const TUS_RESUMABLE = "1.0.0";
export declare const TUS_VERSION = "1.0.0";
export declare function serializeMetadata(obj: Metadata): string;
export declare function parseMetadata(encoded?: string): Metadata;
/**
 * [tus resumable upload protocol](https://github.com/tus/tus-resumable-upload-protocol/blob/master/protocol.md)
 */
export declare class Tus<TFile extends UploadxFile> extends BaseHandler<TFile> {
    get extension(): string[];
    /**
     *  Sends current server configuration
     */
    options(req: IncomingMessage, res: ServerResponse): Promise<TFile>;
    /**
     * Create a file and send url to client
     */
    post(req: IncomingMessage, res: ServerResponse): Promise<TFile>;
    /**
     * Write a chunk to file
     */
    patch(req: IncomingMessage, res: ServerResponse): Promise<TFile>;
    /**
     * Return chunk offset
     */
    head(req: IncomingMessage, res: ServerResponse): Promise<TFile>;
    /**
     * Delete upload
     */
    delete(req: IncomingMessage, res: ServerResponse): Promise<TFile>;
    buildHeaders(file: UploadxFile, headers?: Headers): Headers;
    send(res: ServerResponse, { statusCode, headers, body }: UploadxResponse): void;
    extractChecksum(req: IncomingMessage): Checksum;
}
/**
 * Basic express wrapper
 * @example
 * ```js
 * app.use('/files', tus({directory: '/tmp', maxUploadSize: '250GB'}));
 * ```
 */
export declare function tus<TFile extends UploadxFile>(options?: UploadxOptions<TFile>): (req: IncomingMessage, res: ServerResponse) => void;
export declare namespace tus {
    var upload: <TFile extends UploadxFile>(options?: UploadxOptions<TFile>) => (req: IncomingMessage, res: ServerResponse, next?: (() => void) | undefined) => void;
}
