import * as plugins from './smartproxy.plugins.js'; export class ProxyRouter { public reverseProxyConfigs: plugins.tsclass.network.IReverseProxyConfig[] = []; /** * sets a new set of reverse configs to be routed to * @param reverseCandidatesArg */ public setNewProxyConfigs(reverseCandidatesArg: plugins.tsclass.network.IReverseProxyConfig[]) { this.reverseProxyConfigs = reverseCandidatesArg; } /** * routes a request */ public routeReq(req: plugins.http.IncomingMessage): plugins.tsclass.network.IReverseProxyConfig { const originalHost = req.headers.host; const correspodingReverseProxyConfig = this.reverseProxyConfigs.find((reverseConfig) => { return reverseConfig.hostName === originalHost; }); return correspodingReverseProxyConfig; } public routeWs(wsReq: plugins.http.IncomingMessage) { const originalHost = plugins.url.parse(wsReq.url).host; const correspodingReverseProxyConfig = this.reverseProxyConfigs.find((reverseConfig) => { return reverseConfig.hostName === originalHost; }); return correspodingReverseProxyConfig.destinationIp; } }