UNPKG

send-stream

Version:

Streaming file serving library with Range and conditional-GET support from file system or any streaming sources.

103 lines (102 loc) 3.53 kB
/** * Request headers */ export interface RequestHeaders { [header: string]: string | string[] | undefined; 'accept-encoding'?: string | undefined; 'if-match'?: string | undefined; 'if-none-match'?: string | undefined; 'if-modified-since'?: string | undefined; 'if-unmodified-since'?: string | undefined; 'range'?: string | undefined; 'if-range'?: string | undefined; } /** * Response headers */ export interface ResponseHeaders { [header: string]: string | string[] | undefined; 'Content-Encoding'?: string | undefined; 'Last-Modified'?: string | undefined; 'Cache-Control'?: string | undefined; 'Content-Type'?: string | undefined; 'ETag'?: string | undefined; 'Accept-Ranges'?: string | undefined; 'Content-Range'?: string | undefined; 'Content-Length'?: string | undefined; 'Vary'?: string | undefined; 'Content-Disposition'?: string | undefined; 'Allow'?: string | undefined; } /** * Range */ export declare class StreamRange { readonly start: number; readonly end: number; /** * StreamRange constructor * @param start - start index * @param end - end index */ constructor(start: number, end: number); } /** * Uint8Array or StreamRange */ export type Uint8ArrayOrStreamRange = StreamRange | Uint8Array; /** * Random bytes function returing promise */ export declare const randomBytes: (size: number) => Promise<Buffer>; /** * Transform stats to etag * @param size - file size * @param mtimeMs - modification time in milliseconds * @param contentEncoding - content encoding * @param weak - generate weak etag * @returns etag */ export declare function statsToEtag(size: number, mtimeMs: number, contentEncoding?: string, weak?: boolean): string; /** * Convert milliseconds to utc string * @param timeMs - time in milliseconds * @returns utc string */ export declare function millisecondsToUTCString(timeMs: number): string; /** * Check if range is fresh * @param requestHeaders - request headers * @param etag - etag response header * @param lastModified - last modified response header * @returns true if range fresh */ export declare function isRangeFresh(requestHeaders: RequestHeaders, etag: string | false, lastModified: string | false): boolean; /** * Format content-range header * @param rangeType - type of range * @param size - total size * @param range - range to use (empty = *) * @returns content-range header */ export declare function contentRange(rangeType: string, size: number, range?: StreamRange): string; /** * Get accepted content encodings * @template T - encoding object type * @param acceptEncoding - Accept-Encoding header value * @param encodingPreferences - order of preference * @param identityEncodingPreference - identity encoding preference * @returns accepted content encodings */ export declare function acceptEncodings<T extends { order: number; }>(acceptEncoding: string | undefined, encodingPreferences: ReadonlyMap<string, T>, identityEncodingPreference: T): readonly (readonly [string, T])[]; /** * Get fresh status (ETag, Last-Modified handling) * @param isGetOrHead - http method is GET or HEAD * @param requestHeaders - request headers * @param etag - etag response header * @param lastModified - last modified response header * @returns status code */ export declare function getFreshStatus(isGetOrHead: boolean, requestHeaders: RequestHeaders, etag: string | false, lastModified: string | false): 412 | 304 | 200;