UNPKG

2.29 kBTypeScriptView Raw
1import { Readable } from 'stream';
2
3declare namespace getRawBody {
4 export type Encoding = string | true;
5
6 export interface Options {
7 /**
8 * The expected length of the stream.
9 */
10 length?: number | string | null;
11 /**
12 * The byte limit of the body. This is the number of bytes or any string
13 * format supported by `bytes`, for example `1000`, `'500kb'` or `'3mb'`.
14 */
15 limit?: number | string | null;
16 /**
17 * The encoding to use to decode the body into a string. By default, a
18 * `Buffer` instance will be returned when no encoding is specified. Most
19 * likely, you want `utf-8`, so setting encoding to `true` will decode as
20 * `utf-8`. You can use any type of encoding supported by `iconv-lite`.
21 */
22 encoding?: Encoding | null;
23 }
24
25 export interface RawBodyError extends Error {
26 /**
27 * The limit in bytes.
28 */
29 limit?: number;
30 /**
31 * The expected length of the stream.
32 */
33 length?: number;
34 expected?: number;
35 /**
36 * The received bytes.
37 */
38 received?: number;
39 /**
40 * The encoding.
41 */
42 encoding?: string;
43 /**
44 * The corresponding status code for the error.
45 */
46 status: number;
47 statusCode: number;
48 /**
49 * The error type.
50 */
51 type: string;
52 }
53}
54
55/**
56 * Gets the entire buffer of a stream either as a `Buffer` or a string.
57 * Validates the stream's length against an expected length and maximum
58 * limit. Ideal for parsing request bodies.
59 */
60declare function getRawBody(
61 stream: Readable,
62 callback: (err: getRawBody.RawBodyError, body: Buffer) => void
63): void;
64
65declare function getRawBody(
66 stream: Readable,
67 options: (getRawBody.Options & { encoding: getRawBody.Encoding }) | getRawBody.Encoding,
68 callback: (err: getRawBody.RawBodyError, body: string) => void
69): void;
70
71declare function getRawBody(
72 stream: Readable,
73 options: getRawBody.Options,
74 callback: (err: getRawBody.RawBodyError, body: Buffer) => void
75): void;
76
77declare function getRawBody(
78 stream: Readable,
79 options: (getRawBody.Options & { encoding: getRawBody.Encoding }) | getRawBody.Encoding
80): Promise<string>;
81
82declare function getRawBody(
83 stream: Readable,
84 options?: getRawBody.Options
85): Promise<Buffer>;
86
87export = getRawBody;