| /** |
| * @license |
| * Copyright 2023 Google Inc. |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| import type Protocol from 'devtools-protocol'; |
| |
| import type {SecurityDetails} from '../common/SecurityDetails.js'; |
| |
| import type {Frame} from './Frame.js'; |
| import type {HTTPRequest} from './HTTPRequest.js'; |
| |
| /** |
| * @public |
| */ |
| export interface RemoteAddress { |
| ip?: string; |
| port?: number; |
| } |
| |
| /** |
| * The HTTPResponse class represents responses which are received by the |
| * {@link Page} class. |
| * |
| * @public |
| */ |
| export abstract class HTTPResponse { |
| /** |
| * @internal |
| */ |
| constructor() {} |
| |
| /** |
| * The IP address and port number used to connect to the remote |
| * server. |
| */ |
| abstract remoteAddress(): RemoteAddress; |
| |
| /** |
| * The URL of the response. |
| */ |
| abstract url(): string; |
| |
| /** |
| * True if the response was successful (status in the range 200-299). |
| */ |
| ok(): boolean { |
| // TODO: document === 0 case? |
| const status = this.status(); |
| return status === 0 || (status >= 200 && status <= 299); |
| } |
| |
| /** |
| * The status code of the response (e.g., 200 for a success). |
| */ |
| abstract status(): number; |
| |
| /** |
| * The status text of the response (e.g. usually an "OK" for a |
| * success). |
| */ |
| abstract statusText(): string; |
| |
| /** |
| * An object with HTTP headers associated with the response. All |
| * header names are lower-case. |
| */ |
| abstract headers(): Record<string, string>; |
| |
| /** |
| * {@link SecurityDetails} if the response was received over the |
| * secure connection, or `null` otherwise. |
| */ |
| abstract securityDetails(): SecurityDetails | null; |
| |
| /** |
| * Timing information related to the response. |
| */ |
| abstract timing(): Protocol.Network.ResourceTiming | null; |
| |
| /** |
| * Promise which resolves to a buffer with response body. |
| * |
| * @remarks |
| * |
| * The buffer might be re-encoded by the browser |
| * based on HTTP-headers or other heuristics. If the browser |
| * failed to detect the correct encoding, the buffer might |
| * be encoded incorrectly. See https://github.com/puppeteer/puppeteer/issues/6478. |
| */ |
| abstract content(): Promise<Uint8Array>; |
| |
| /** |
| * {@inheritDoc HTTPResponse.content} |
| */ |
| async buffer(): Promise<Buffer> { |
| const content = await this.content(); |
| return Buffer.from(content); |
| } |
| /** |
| * Promise which resolves to a text (utf8) representation of response body. |
| */ |
| async text(): Promise<string> { |
| const content = await this.content(); |
| return new TextDecoder().decode(content); |
| } |
| |
| /** |
| * Promise which resolves to a JSON representation of response body. |
| * |
| * @remarks |
| * |
| * This method will throw if the response body is not parsable via |
| * `JSON.parse`. |
| */ |
| async json(): Promise<any> { |
| const content = await this.text(); |
| return JSON.parse(content); |
| } |
| |
| /** |
| * A matching {@link HTTPRequest} object. |
| */ |
| abstract request(): HTTPRequest; |
| |
| /** |
| * True if the response was served from either the browser's disk |
| * cache or memory cache. |
| */ |
| abstract fromCache(): boolean; |
| |
| /** |
| * True if the response was served by a service worker. |
| */ |
| abstract fromServiceWorker(): boolean; |
| |
| /** |
| * A {@link Frame} that initiated this response, or `null` if |
| * navigating to error pages. |
| */ |
| abstract frame(): Frame | null; |
| } |