UNPKG

3.3 kBPlain TextView Raw
1/**
2 * @license
3 * Copyright 2023 Google Inc.
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7import type Protocol from 'devtools-protocol';
8
9import type {SecurityDetails} from '../common/SecurityDetails.js';
10
11import type {Frame} from './Frame.js';
12import type {HTTPRequest} from './HTTPRequest.js';
13
14/**
15 * @public
16 */
17export interface RemoteAddress {
18 ip?: string;
19 port?: number;
20}
21
22/**
23 * The HTTPResponse class represents responses which are received by the
24 * {@link Page} class.
25 *
26 * @public
27 */
28export abstract class HTTPResponse {
29 /**
30 * @internal
31 */
32 constructor() {}
33
34 /**
35 * The IP address and port number used to connect to the remote
36 * server.
37 */
38 abstract remoteAddress(): RemoteAddress;
39
40 /**
41 * The URL of the response.
42 */
43 abstract url(): string;
44
45 /**
46 * True if the response was successful (status in the range 200-299).
47 */
48 ok(): boolean {
49 // TODO: document === 0 case?
50 const status = this.status();
51 return status === 0 || (status >= 200 && status <= 299);
52 }
53
54 /**
55 * The status code of the response (e.g., 200 for a success).
56 */
57 abstract status(): number;
58
59 /**
60 * The status text of the response (e.g. usually an "OK" for a
61 * success).
62 */
63 abstract statusText(): string;
64
65 /**
66 * An object with HTTP headers associated with the response. All
67 * header names are lower-case.
68 */
69 abstract headers(): Record<string, string>;
70
71 /**
72 * {@link SecurityDetails} if the response was received over the
73 * secure connection, or `null` otherwise.
74 */
75 abstract securityDetails(): SecurityDetails | null;
76
77 /**
78 * Timing information related to the response.
79 */
80 abstract timing(): Protocol.Network.ResourceTiming | null;
81
82 /**
83 * Promise which resolves to a buffer with response body.
84 *
85 * @remarks
86 *
87 * The buffer might be re-encoded by the browser
88 * based on HTTP-headers or other heuristics. If the browser
89 * failed to detect the correct encoding, the buffer might
90 * be encoded incorrectly. See https://github.com/puppeteer/puppeteer/issues/6478.
91 */
92 abstract content(): Promise<Uint8Array>;
93
94 /**
95 * {@inheritDoc HTTPResponse.content}
96 */
97 async buffer(): Promise<Buffer> {
98 const content = await this.content();
99 return Buffer.from(content);
100 }
101 /**
102 * Promise which resolves to a text (utf8) representation of response body.
103 */
104 async text(): Promise<string> {
105 const content = await this.content();
106 return new TextDecoder().decode(content);
107 }
108
109 /**
110 * Promise which resolves to a JSON representation of response body.
111 *
112 * @remarks
113 *
114 * This method will throw if the response body is not parsable via
115 * `JSON.parse`.
116 */
117 async json(): Promise<any> {
118 const content = await this.text();
119 return JSON.parse(content);
120 }
121
122 /**
123 * A matching {@link HTTPRequest} object.
124 */
125 abstract request(): HTTPRequest;
126
127 /**
128 * True if the response was served from either the browser's disk
129 * cache or memory cache.
130 */
131 abstract fromCache(): boolean;
132
133 /**
134 * True if the response was served by a service worker.
135 */
136 abstract fromServiceWorker(): boolean;
137
138 /**
139 * A {@link Frame} that initiated this response, or `null` if
140 * navigating to error pages.
141 */
142 abstract frame(): Frame | null;
143}