@atomist/automation-client
Version:
Atomist API for software low-level client
38 lines (31 loc) • 1.23 kB
text/typescript
import * as HttpsProxyAgent from "https-proxy-agent";
import * as WebSocket from "ws";
import { RegistrationConfirmation } from "../../internal/transport/websocket/WebSocketRequestProcessor";
import { logger } from "../../util/logger";
/**
* Factory to create a WebSocket instance.
*/
export interface WebSocketFactory {
/**
* Create a WebSocket for the provided registration
* @param registration
*/
create(registration: RegistrationConfirmation): WebSocket;
}
/**
* WS based WebSocketFactory implementation
*/
export class WSWebSocketFactory implements WebSocketFactory {
public create(registration: RegistrationConfirmation): WebSocket {
return new WebSocket(registration.url, this.configureOptions({}));
}
protected configureOptions(options: WebSocket.ClientOptions): WebSocket.ClientOptions {
if (process.env.HTTPS_PROXY || process.env.https_proxy) {
const proxy = process.env.HTTPS_PROXY || process.env.https_proxy;
logger.debug(`WebSocket connection using proxy '${proxy}'`);
options.agent = new HttpsProxyAgent(proxy);
}
return options;
}
}
export const DefaultWebSocketFactory = new WSWebSocketFactory();