diff --git a/__tests__/proxy.test.ts b/__tests__/proxy.test.ts index e8e79f4..7ba3cef 100644 --- a/__tests__/proxy.test.ts +++ b/__tests__/proxy.test.ts @@ -2,6 +2,7 @@ import * as http from 'http' import * as httpm from '../_out' import * as pm from '../_out/proxy' import * as proxy from 'proxy' +import * as tunnelm from 'tunnel' let _proxyConnects: string[] let _proxyServer: http.Server @@ -195,6 +196,26 @@ describe('proxy', () => { expect(obj.url).toBe('https://httpbin.org/get') expect(_proxyConnects).toHaveLength(0) }) + + it('proxyAuth not set in tunnel agent when authentication is not provided', async () => { + process.env['https_proxy'] = 'http://127.0.0.1:8080' + const httpClient = new httpm.HttpClient() + let agent: tunnelm.TunnelingAgent = httpClient.getAgent('https://some-url') + console.log(agent) + expect(agent.proxyOptions.host).toBe('127.0.0.1') + expect(agent.proxyOptions.port).toBe('8080') + expect(agent.proxyOptions.proxyAuth).toBe(undefined) + }) + + it('proxyAuth is set in tunnel agent when authentication is provided', async () => { + process.env['https_proxy'] = 'http://user:password@127.0.0.1:8080' + const httpClient = new httpm.HttpClient() + let agent: tunnelm.TunnelingAgent = httpClient.getAgent('https://some-url') + console.log(agent) + expect(agent.proxyOptions.host).toBe('127.0.0.1') + expect(agent.proxyOptions.port).toBe('8080') + expect(agent.proxyOptions.proxyAuth).toBe('user:password') + }) }) function _clearVars() { diff --git a/index.ts b/index.ts index 97a3fa4..a7858d9 100644 --- a/index.ts +++ b/index.ts @@ -642,7 +642,9 @@ export class HttpClient { maxSockets: maxSockets, keepAlive: this._keepAlive, proxy: { - proxyAuth: `${proxyUrl.username}:${proxyUrl.password}`, + ...((proxyUrl.username || proxyUrl.password) && { + proxyAuth: `${proxyUrl.username}:${proxyUrl.password}` + }), host: proxyUrl.hostname, port: proxyUrl.port }