use addEventListener

This commit is contained in:
Simon Knott 2024-10-04 15:52:14 +02:00
parent aebd5c0565
commit a483cab690
No known key found for this signature in database
GPG key ID: 8CEDC00028084AEC

View file

@ -25,7 +25,7 @@ import zlib from 'zlib';
import type { HTTPCredentials } from '../../types/types'; import type { HTTPCredentials } from '../../types/types';
import { TimeoutSettings } from '../common/timeoutSettings'; import { TimeoutSettings } from '../common/timeoutSettings';
import { getUserAgent } from '../utils/userAgent'; import { getUserAgent } from '../utils/userAgent';
import { assert, constructURLBasedOnBaseURL, createGuid, monotonicTime } from '../utils'; import { assert, constructURLBasedOnBaseURL, createGuid, eventsHelper, monotonicTime, type RegisteredListener } from '../utils';
import { HttpsProxyAgent, SocksProxyAgent } from '../utilsBundle'; import { HttpsProxyAgent, SocksProxyAgent } from '../utilsBundle';
import { BrowserContext, verifyClientCertificates } from './browserContext'; import { BrowserContext, verifyClientCertificates } from './browserContext';
import { CookieStore, domainMatches, parseRawCookie } from './cookieStore'; import { CookieStore, domainMatches, parseRawCookie } from './cookieStore';
@ -312,7 +312,7 @@ export abstract class APIRequestContext extends SdkObject {
let securityDetails: har.SecurityDetails | undefined; let securityDetails: har.SecurityDetails | undefined;
const cleanup: (() => void)[] = []; const listeners: RegisteredListener[] = [];
const request = requestConstructor(url, requestOptions as any, async response => { const request = requestConstructor(url, requestOptions as any, async response => {
const responseAt = monotonicTime(); const responseAt = monotonicTime();
@ -481,13 +481,13 @@ export abstract class APIRequestContext extends SdkObject {
}); });
request.on('error', reject); request.on('error', reject);
const disposeListener = () => { listeners.push(
eventsHelper.addEventListener(this, APIRequestContext.Events.Dispose, () => {
reject(new Error('Request context disposed.')); reject(new Error('Request context disposed.'));
request.destroy(); request.destroy();
}; })
this.on(APIRequestContext.Events.Dispose, disposeListener); );
cleanup.push(() => this.off(APIRequestContext.Events.Dispose, disposeListener)); request.on('close', () => eventsHelper.removeEventListeners(listeners));
request.on('close', () => cleanup.forEach(c => c()));
request.on('socket', socket => { request.on('socket', socket => {
// happy eyeballs don't emit lookup and connect events, so we use our custom ones // happy eyeballs don't emit lookup and connect events, so we use our custom ones
@ -496,13 +496,10 @@ export abstract class APIRequestContext extends SdkObject {
tcpConnectionAt = happyEyeBallsTimings.tcpConnectionAt; tcpConnectionAt = happyEyeBallsTimings.tcpConnectionAt;
// non-happy-eyeballs sockets // non-happy-eyeballs sockets
const onLookup = () => { dnsLookupAt = monotonicTime(); }; listeners.push(
socket.once('lookup', onLookup); eventsHelper.addEventListener(socket, 'lookup', () => { dnsLookupAt = monotonicTime(); }),
cleanup.push(() => socket.removeListener('lookup', onLookup)); eventsHelper.addEventListener(socket, 'connect', () => { tcpConnectionAt = monotonicTime(); }),
const onConnect = () => { tcpConnectionAt = monotonicTime(); }; eventsHelper.addEventListener(socket, 'secureConnect', () => {
socket.once('connect', onConnect);
cleanup.push(() => socket.removeListener('connect', onConnect));
const onSecureConnect = () => {
tlsHandshakeAt = monotonicTime(); tlsHandshakeAt = monotonicTime();
if (socket instanceof TLSSocket) { if (socket instanceof TLSSocket) {
@ -515,9 +512,8 @@ export abstract class APIRequestContext extends SdkObject {
issuer: peerCertificate.issuer.CN issuer: peerCertificate.issuer.CN
}; };
} }
}; }),
socket.once('secureConnect', onSecureConnect); );
cleanup.push(() => socket.removeListener('secureConnect', onSecureConnect));
serverIPAddress = socket.remoteAddress; serverIPAddress = socket.remoteAddress;
serverPort = socket.remotePort; serverPort = socket.remotePort;