/// /// import {ReadStream} from "fs"; import {Gunzip} from "zlib"; import {Transform} from "stream"; import {URL} from 'url'; import { EventEmitter } from "eventemitter3"; import * as puppeteer from 'puppeteer' interface Error { stack?: string; message?: string } export type NullableEr = Error | null export class AutoWARCParser extends EventEmitter { _wp?: string; _parsing: boolean; constructor(wp?: string); start(): boolean; parseWARC(wp?: string): boolean; _onRecord(record: WARCRecord): void; _onEnd(): void; _onError(error: Error): void; _getStream(): ReadStream | Gunzip; on(event: 'record', cb: (record: WARCRecord) => any): this; on(event: 'error', cb: (error: Error) => any): this; on(event: 'done', cb: () => any): this; [Symbol.asyncIterator](): AsyncIterableIterator; } export class WARCGzParser extends EventEmitter { _wp?: string; _parsing: boolean; constructor(wp?: string); start(): boolean; parseWARC(wp?: string): boolean; _onRecord(record: WARCRecord): void; _onEnd(): void; _onError(error: Error): void; on(event: 'record', cb: (record: WARCRecord) => any): this; on(event: 'error', cb: (error: Error) => any): this; on(event: 'done', cb: () => any): this; [Symbol.asyncIterator](): AsyncIterableIterator; } export class WARCParser extends EventEmitter { _wp?: string; _parsing: boolean; constructor(wp?: string); start(): boolean; parseWARC(wp?: string): boolean; _onRecord(record: WARCRecord): void; _onEnd(): void; _onError(error: Error): void; on(event: 'record', cb: (record: WARCRecord) => any): this; on(event: 'error', cb: (error: Error) => any): this; on(event: 'done', cb: () => any): this; [Symbol.asyncIterator](): AsyncIterableIterator; } export class WARCStreamTransform extends Transform { _consumeChunk(chunk: Buffer, done: () => void, pushLast?: boolean): void; _transform(buf: Buffer, enc: string, done: () => void): void; _flush(done: () => void): void; push(record: WARCRecord): boolean; [Symbol.asyncIterator](): AsyncIterableIterator; } export function recordIterator(warcStream: ReadStream | Gunzip): AsyncIterableIterator; export class GzipDetector { static isGzipped(filePath: string): Promise; static isGzippedSync(filePath: string): boolean; } export interface WARCRecordParts { header: Buffer[]; c1: Buffer[]; c2: Buffer[]; } export interface RequestHTTPInfo { requestLine: string; path: string; method: string; httpVersion: string; headers: object; } export interface ResponseHTTPInfo { statusLine: string; statusCode: string; statusReason: string; httpVersion: string; headers: object; } export class WARCRecord { warcHeader: object; httpInfo?: RequestHTTPInfo | ResponseHTTPInfo; content: Buffer; warcType: string; warcRecordID: string; warcDate: string; warcContentLength: string; warcContentType: string; warcConcurrentTo: string; warcBlockDigest?: string; warcPayloadDigest?: string; warcIPAddress?: string; warcRefersTo?: string; warcRefersToTargetURI?: string; warcRefersToDate?: string; warcTargetURI: string; warcTruncated?: string; warcWarcinfoID?: string; warcFilename?: string; warcProfile?: string; warcIdentifiedPayloadType?: string; warcSegmentOriginID?: string; warcSegmentNumber?: string; warcSegmentTotalLength?: string; constructor (warcParts: WARCRecordParts); hasWARCHeader(headerKey: string): boolean; getWARCHeader(headerKey: string): string | undefined; } export class RecordBuilder { _parts: WARCRecordParts; _parsingState: symbol; buildRecord(): WARCRecord | null; consumeLine(line: Buffer): WARCRecord | null; } export class ContentParser { static utf8BufferSlice (buf: Buffer, start: number, end: number): string; static bufEndPosNoCRLF (buf: Buffer, bufLen: number): number; static parseHTTPPortion (bufs: Buffer[], req: boolean): RequestHTTPInfo | ResponseHTTPInfo; static parseWarcRecordHeader (bufs: Buffer[]): object; static parseWarcInfoMetaDataContent (bufs: Buffer[]): object; static parseReqHTTP (bufs: Buffer[]): object; static parseResHTTP (bufs: Buffer[]): object; static _parseHeaders (headerBuffs: Buffer[]): object; } export class CDPRequestInfo { requestId?: string; _url?: string; urlFragment?: string; method?: string; protocol?: string; status?: string; statusText?: string; postData?: string; requestHeaders?: object; requestHeaders_?: object; requestHeadersText?: string; responseHeaders?: object; responseHeadersText?: string; getBody: boolean; hasPostData: boolean; addResponse(res: object, not3xx: boolean): void; getParsedURL(): URL; serializeRequestHeaders(): string; serializeResponseHeaders(): string; canSerializeResponse(): boolean; static fromRequest(info: object): CDPRequestInfo; static fromRedir(info: object): CDPRequestInfo; static fromResponse(info: object): CDPRequestInfo; _serializeRequestHeadersText(): string; _serializeRequestHeadersObj(): string; _getReqHeaderObj(): object | null; _ensureProto(): void; _checkMethod(): void; _methProtoFromReqHeadText(requestHeadersText?: string): void; _correctProtocol(originalProtocol: string): string; } export class CapturedRequest { requestId: string; _reqs: Map; constructor(info: object); addRequestInfo(info: object): void; url(): string | string[]; keys(): Iterator; values(): Iterator; static newOne(info: object): CapturedRequest; [Symbol.iterator](): Iterator; } export class RequestHandler { _capture: boolean; requests: Map; startCapturing(): void; stopCapturing(): void; addRequestInfo(info: object): void; clear(): void; size(): number; entries(): Iterator<[string, CapturedRequest]>; values(): Iterator; keys(): Iterator; forEach(iteratee: (entry: [string, CapturedRequest]) => any, thisArg?: any): void; requestWillBeSent(info: object): void; responseReceived(info: object): void; iterateRequests(): Iterator; [Symbol.iterator](): Iterator<[string, CapturedRequest]>; } export class ElectronRequestCapturer extends RequestHandler { attach (wcDebugger: object): void; maybeNetworkMessage(method: string, params: string): void; } export class PuppeteerRequestCapturer { _capture: boolean; _requests: Map; _requestC: number; constructor (page?: puppeteer.Page, requestEvent?: string = 'request'); attach (page: puppeteer.Page, requestEvent?: string = 'request'): void; detach (page: puppeteer.Page, requestEvent?: string = 'request'): void; startCapturing(): void; stopCapturing(): void; requestWillBeSent(r: puppeteer.Request): void; iterateRequests(): Iterator; requests(): puppeteer.Request[]; [Symbol.iterator](): Iterator; } export class PuppeteerCDPRequestCapturer extends RequestHandler { constructor (client?: puppeteer.CDPSession); attach(client: puppeteer.CDPSession); detach(client: puppeteer.CDPSession); } export class RemoteChromeRequestCapturer extends RequestHandler { constructor(network?: object); attach(network: object); detach(cdpClient: object); } export type CRIEPage = object export type CRIERequest = object export class CRIExtraRequestCapturer { _capture: boolean; _requests: Map; _requestC: number; constructor (page?: CRIEPage, requestEvent?: string = 'request'); attach (page: CRIEPage, requestEvent?: string = 'request'): void; detach (page: CRIEPage, requestEvent?: string = 'request'): void; startCapturing(): void; stopCapturing(): void; requestWillBeSent(r: CRIERequest): void; iterateRequests(): Iterator; requests(): CRIERequest[]; [Symbol.iterator](): Iterator; } export type WARCContentData = Buffer | string export interface WARCFileOpts { appending?: boolean, gzip?: boolean } export interface WARCInitOpts { warcPath: string, appending?: boolean, gzip?: boolean } export interface ResReqData { headers: string, data?: Buffer | string } export interface Metadata { targetURI: string, content?: WARCContentData } export type WARCInfoContent = Object | Buffer | string export interface WARCGenOpts { warcOpts: WARCInitOpts, winfo?: WARCInfoContent, metadata?: Metadata, pages?: string | string[] } export class WARCWriterBase extends EventEmitter { constructor (defaultOpts?: WARCFileOpts); setDefaultOpts (defaultOpts: WARCFileOpts): void; initWARC (warcPath: string, options: WARCFileOpts): void; writeRequestResponseRecords (targetURI: string, reqData: ResReqData, resData: ResReqData): Promise; writeWarcInfoRecord (winfo: WARCInfoContent): Promise; writeWarcRawInfoRecord (warcInfoContent: WARCContentData): Promise; writeWebrecorderBookmarksInfoRecord (pages: string | string[]): Promise; writeWarcMetadataOutlinks (targetURI: string, outlinks: string): Promise; writeWarcMetadata (targetURI: string, metaData: WARCContentData): Promise; writeRequestRecord (targetURI: string, httpHeaderString: string, requestData?: WARCContentData): Promise; writeResponseRecord (targetURI: string, httpHeaderString: string, requestData?: WARCContentData): Promise; writeRecordBlock (targetURI: string, httpHeaderString: string, requestData?: WARCContentData): Promise; writeRecordChunks (...recordParts: Buffer[]): Promise; end(): void; _writeRequestRecord(targetURI: string, resId: string | null, httpHeaderString: string, requestData?: WARCContentData): Promise; _writeResponseRecord(targetURI: string, resId: string | null, httpHeaderString: string, responseData?: WARCContentData): Promise; _onFinish(): void; _onError(error: Error): void; on(event: 'finished', cb: (error?: Error) => any): this; on(event: 'error', cb: (error: Error) => any): this; } export class ElectronWARCGenerator extends WARCWriterBase { generateWARC (capturer: ElectronRequestCapturer, network: object, genOpts: WARCGenOpts): Promise; generateWarcEntry (nreq: CDPRequestInfo, wcDebugger: object): Promise; } export class PuppeteerWARCGenerator extends WARCWriterBase { generateWARC (capturer: PuppeteerRequestCapturer, genOpts: WARCGenOpts): Promise; generateWarcEntry (request: puppeteer.Request): Promise; } export class PuppeteerCDPWARCGenerator extends WARCWriterBase { generateWARC (capturer: PuppeteerCDPRequestCapturer, client: puppeteer.CDPSession, genOpts: WARCGenOpts): Promise; generateWarcEntry (nreq: CDPRequestInfo, client: puppeteer.CDPSession): Promise; } export class RemoteChromeWARCGenerator extends WARCWriterBase { generateWARC (capturer: RemoteChromeRequestCapturer, network: object, genOpts: WARCGenOpts): Promise; generateWarcEntry (nreq: CDPRequestInfo, network: object): Promise; } export class RequestLibWARCGenerator extends WARCWriterBase { generateWarcEntry (resp: object): Promise; } export class CRIExtraWARCGenerator extends WARCWriterBase { generateWARC (capturer: CRIExtraRequestCapturer, genOpts: WARCGenOpts): Promise; generateWarcEntry (request: CRIERequest): Promise; }