Fix lazy creation of ProxyAgent
This commit is contained in:
parent
968d8d8911
commit
97f5430541
1 changed files with 22 additions and 14 deletions
|
@ -86,7 +86,7 @@ export class SocketManager extends EventListener {
|
||||||
|
|
||||||
private credentials?: WebAPICredentials;
|
private credentials?: WebAPICredentials;
|
||||||
|
|
||||||
private proxyAgent?: ProxyAgent;
|
private lazyProxyAgent?: Promise<ProxyAgent>;
|
||||||
|
|
||||||
private status = SocketStatus.CLOSED;
|
private status = SocketStatus.CLOSED;
|
||||||
|
|
||||||
|
@ -164,6 +164,7 @@ export class SocketManager extends EventListener {
|
||||||
name: AUTHENTICATED_CHANNEL_NAME,
|
name: AUTHENTICATED_CHANNEL_NAME,
|
||||||
path: '/v1/websocket/',
|
path: '/v1/websocket/',
|
||||||
query: { login: username, password },
|
query: { login: username, password },
|
||||||
|
proxyAgent: await this.getProxyAgent(),
|
||||||
resourceOptions: {
|
resourceOptions: {
|
||||||
name: AUTHENTICATED_CHANNEL_NAME,
|
name: AUTHENTICATED_CHANNEL_NAME,
|
||||||
keepalive: { path: '/v1/keepalive' },
|
keepalive: { path: '/v1/keepalive' },
|
||||||
|
@ -321,6 +322,7 @@ export class SocketManager extends EventListener {
|
||||||
return this.connectResource({
|
return this.connectResource({
|
||||||
name: 'provisioning',
|
name: 'provisioning',
|
||||||
path: '/v1/websocket/provisioning/',
|
path: '/v1/websocket/provisioning/',
|
||||||
|
proxyAgent: await this.getProxyAgent(),
|
||||||
resourceOptions: {
|
resourceOptions: {
|
||||||
name: 'provisioning',
|
name: 'provisioning',
|
||||||
handleRequest: (req: IncomingWebSocketRequest): void => {
|
handleRequest: (req: IncomingWebSocketRequest): void => {
|
||||||
|
@ -339,16 +341,13 @@ export class SocketManager extends EventListener {
|
||||||
url: string;
|
url: string;
|
||||||
extraHeaders?: Record<string, string>;
|
extraHeaders?: Record<string, string>;
|
||||||
}): Promise<WebSocket> {
|
}): Promise<WebSocket> {
|
||||||
// Create proxy agent lazily
|
const proxyAgent = await this.getProxyAgent();
|
||||||
if (this.options.proxyUrl && !this.proxyAgent) {
|
|
||||||
this.proxyAgent = await createProxyAgent(this.options.proxyUrl);
|
|
||||||
}
|
|
||||||
|
|
||||||
return connectWebSocket({
|
return connectWebSocket({
|
||||||
name: 'art-creator-provisioning',
|
name: 'art-creator-provisioning',
|
||||||
url,
|
url,
|
||||||
version: this.options.version,
|
version: this.options.version,
|
||||||
proxyAgent: this.proxyAgent,
|
proxyAgent,
|
||||||
extraHeaders,
|
extraHeaders,
|
||||||
|
|
||||||
createResource(socket: WebSocket): WebSocket {
|
createResource(socket: WebSocket): WebSocket {
|
||||||
|
@ -525,15 +524,11 @@ export class SocketManager extends EventListener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private transportOption(): TransportOption {
|
private transportOption(proxyAgent: ProxyAgent | undefined): TransportOption {
|
||||||
const { hostname } = URL.parse(this.options.url);
|
const { hostname } = URL.parse(this.options.url);
|
||||||
|
|
||||||
// transport experiment doesn't support proxy
|
// transport experiment doesn't support proxy
|
||||||
if (
|
if (proxyAgent || hostname == null || !hostname.endsWith('signal.org')) {
|
||||||
this.proxyAgent ||
|
|
||||||
hostname == null ||
|
|
||||||
!hostname.endsWith('signal.org')
|
|
||||||
) {
|
|
||||||
return TransportOption.Original;
|
return TransportOption.Original;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -590,7 +585,9 @@ export class SocketManager extends EventListener {
|
||||||
|
|
||||||
log.info('SocketManager: connecting unauthenticated socket');
|
log.info('SocketManager: connecting unauthenticated socket');
|
||||||
|
|
||||||
const transportOption = this.transportOption();
|
const proxyAgent = await this.getProxyAgent();
|
||||||
|
|
||||||
|
const transportOption = this.transportOption(proxyAgent);
|
||||||
log.info(
|
log.info(
|
||||||
`SocketManager: connecting unauthenticated socket, transport option [${transportOption}]`
|
`SocketManager: connecting unauthenticated socket, transport option [${transportOption}]`
|
||||||
);
|
);
|
||||||
|
@ -603,6 +600,7 @@ export class SocketManager extends EventListener {
|
||||||
const process = this.connectResource({
|
const process = this.connectResource({
|
||||||
name: UNAUTHENTICATED_CHANNEL_NAME,
|
name: UNAUTHENTICATED_CHANNEL_NAME,
|
||||||
path: '/v1/websocket/',
|
path: '/v1/websocket/',
|
||||||
|
proxyAgent,
|
||||||
resourceOptions: {
|
resourceOptions: {
|
||||||
name: UNAUTHENTICATED_CHANNEL_NAME,
|
name: UNAUTHENTICATED_CHANNEL_NAME,
|
||||||
keepalive: { path: '/v1/keepalive' },
|
keepalive: { path: '/v1/keepalive' },
|
||||||
|
@ -646,12 +644,14 @@ export class SocketManager extends EventListener {
|
||||||
private connectResource({
|
private connectResource({
|
||||||
name,
|
name,
|
||||||
path,
|
path,
|
||||||
|
proxyAgent,
|
||||||
resourceOptions,
|
resourceOptions,
|
||||||
query = {},
|
query = {},
|
||||||
extraHeaders = {},
|
extraHeaders = {},
|
||||||
}: {
|
}: {
|
||||||
name: string;
|
name: string;
|
||||||
path: string;
|
path: string;
|
||||||
|
proxyAgent: ProxyAgent | undefined;
|
||||||
resourceOptions: WebSocketResourceOptions;
|
resourceOptions: WebSocketResourceOptions;
|
||||||
query?: Record<string, string>;
|
query?: Record<string, string>;
|
||||||
extraHeaders?: Record<string, string>;
|
extraHeaders?: Record<string, string>;
|
||||||
|
@ -671,7 +671,7 @@ export class SocketManager extends EventListener {
|
||||||
url,
|
url,
|
||||||
version,
|
version,
|
||||||
certificateAuthority: this.options.certificateAuthority,
|
certificateAuthority: this.options.certificateAuthority,
|
||||||
proxyAgent: this.proxyAgent,
|
proxyAgent,
|
||||||
|
|
||||||
extraHeaders,
|
extraHeaders,
|
||||||
|
|
||||||
|
@ -876,6 +876,14 @@ export class SocketManager extends EventListener {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async getProxyAgent(): Promise<ProxyAgent | undefined> {
|
||||||
|
if (this.options.proxyUrl && !this.lazyProxyAgent) {
|
||||||
|
// Cache the promise so that we don't import concurrently.
|
||||||
|
this.lazyProxyAgent = createProxyAgent(this.options.proxyUrl);
|
||||||
|
}
|
||||||
|
return this.lazyProxyAgent;
|
||||||
|
}
|
||||||
|
|
||||||
// EventEmitter types
|
// EventEmitter types
|
||||||
|
|
||||||
public override on(
|
public override on(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue