mirror of
https://github.com/actions/http-client.git
synced 2025-02-24 16:22:28 +00:00
apply formatting
This commit is contained in:
parent
c715044f28
commit
7af5adfb99
4
.github/workflows/test.yml
vendored
4
.github/workflows/test.yml
vendored
@ -40,8 +40,8 @@ jobs:
|
||||
- name: npm test
|
||||
run: npm test
|
||||
|
||||
# - name: Format
|
||||
# run: npm run format-check
|
||||
- name: Format
|
||||
run: npm run format-check
|
||||
|
||||
- name: audit security
|
||||
run: npm audit --audit-level=moderate
|
||||
|
@ -1,56 +1,61 @@
|
||||
import * as httpm from '../_out';
|
||||
import * as am from '../_out/auth';
|
||||
import * as httpm from '../_out'
|
||||
import * as am from '../_out/auth'
|
||||
|
||||
describe('auth', () => {
|
||||
beforeEach(() => {
|
||||
beforeEach(() => {})
|
||||
|
||||
})
|
||||
|
||||
afterEach(() => {
|
||||
afterEach(() => {})
|
||||
|
||||
})
|
||||
|
||||
it('does basic http get request with basic auth', async() => {
|
||||
let bh: am.BasicCredentialHandler = new am.BasicCredentialHandler('johndoe', 'password');
|
||||
let http: httpm.HttpClient = new httpm.HttpClient('http-client-tests', [bh]);
|
||||
let res: httpm.HttpClientResponse = await http.get('http://httpbin.org/get');
|
||||
expect(res.message.statusCode).toBe(200);
|
||||
let body: string = await res.readBody();
|
||||
let obj:any = JSON.parse(body);
|
||||
let auth: string = obj.headers.Authorization;
|
||||
let creds: string = Buffer.from(auth.substring('Basic '.length), 'base64').toString();
|
||||
expect(creds).toBe('johndoe:password');
|
||||
expect(obj.url).toBe("http://httpbin.org/get");
|
||||
});
|
||||
it('does basic http get request with basic auth', async () => {
|
||||
let bh: am.BasicCredentialHandler = new am.BasicCredentialHandler(
|
||||
'johndoe',
|
||||
'password'
|
||||
)
|
||||
let http: httpm.HttpClient = new httpm.HttpClient('http-client-tests', [bh])
|
||||
let res: httpm.HttpClientResponse = await http.get('http://httpbin.org/get')
|
||||
expect(res.message.statusCode).toBe(200)
|
||||
let body: string = await res.readBody()
|
||||
let obj: any = JSON.parse(body)
|
||||
let auth: string = obj.headers.Authorization
|
||||
let creds: string = Buffer.from(
|
||||
auth.substring('Basic '.length),
|
||||
'base64'
|
||||
).toString()
|
||||
expect(creds).toBe('johndoe:password')
|
||||
expect(obj.url).toBe('http://httpbin.org/get')
|
||||
})
|
||||
|
||||
it('does basic http get request with pat token auth', async() => {
|
||||
let token: string = 'scbfb44vxzku5l4xgc3qfazn3lpk4awflfryc76esaiq7aypcbhs';
|
||||
let ph: am.PersonalAccessTokenCredentialHandler =
|
||||
new am.PersonalAccessTokenCredentialHandler(token);
|
||||
it('does basic http get request with pat token auth', async () => {
|
||||
let token: string = 'scbfb44vxzku5l4xgc3qfazn3lpk4awflfryc76esaiq7aypcbhs'
|
||||
let ph: am.PersonalAccessTokenCredentialHandler = new am.PersonalAccessTokenCredentialHandler(
|
||||
token
|
||||
)
|
||||
|
||||
let http: httpm.HttpClient = new httpm.HttpClient('http-client-tests', [ph]);
|
||||
let res: httpm.HttpClientResponse = await http.get('http://httpbin.org/get');
|
||||
expect(res.message.statusCode).toBe(200);
|
||||
let body: string = await res.readBody();
|
||||
let obj:any = JSON.parse(body);
|
||||
let auth: string = obj.headers.Authorization;
|
||||
let creds: string = Buffer.from(auth.substring('Basic '.length), 'base64').toString();
|
||||
expect(creds).toBe('PAT:' + token);
|
||||
expect(obj.url).toBe("http://httpbin.org/get");
|
||||
});
|
||||
|
||||
it('does basic http get request with pat token auth', async() => {
|
||||
let token: string = 'scbfb44vxzku5l4xgc3qfazn3lpk4awflfryc76esaiq7aypcbhs';
|
||||
let ph: am.BearerCredentialHandler =
|
||||
new am.BearerCredentialHandler(token);
|
||||
let http: httpm.HttpClient = new httpm.HttpClient('http-client-tests', [ph])
|
||||
let res: httpm.HttpClientResponse = await http.get('http://httpbin.org/get')
|
||||
expect(res.message.statusCode).toBe(200)
|
||||
let body: string = await res.readBody()
|
||||
let obj: any = JSON.parse(body)
|
||||
let auth: string = obj.headers.Authorization
|
||||
let creds: string = Buffer.from(
|
||||
auth.substring('Basic '.length),
|
||||
'base64'
|
||||
).toString()
|
||||
expect(creds).toBe('PAT:' + token)
|
||||
expect(obj.url).toBe('http://httpbin.org/get')
|
||||
})
|
||||
|
||||
let http: httpm.HttpClient = new httpm.HttpClient('http-client-tests', [ph]);
|
||||
let res: httpm.HttpClientResponse = await http.get('http://httpbin.org/get');
|
||||
expect(res.message.statusCode).toBe(200);
|
||||
let body: string = await res.readBody();
|
||||
let obj:any = JSON.parse(body);
|
||||
let auth: string = obj.headers.Authorization;
|
||||
expect(auth).toBe('Bearer ' + token);
|
||||
expect(obj.url).toBe("http://httpbin.org/get");
|
||||
});
|
||||
it('does basic http get request with pat token auth', async () => {
|
||||
let token: string = 'scbfb44vxzku5l4xgc3qfazn3lpk4awflfryc76esaiq7aypcbhs'
|
||||
let ph: am.BearerCredentialHandler = new am.BearerCredentialHandler(token)
|
||||
|
||||
let http: httpm.HttpClient = new httpm.HttpClient('http-client-tests', [ph])
|
||||
let res: httpm.HttpClientResponse = await http.get('http://httpbin.org/get')
|
||||
expect(res.message.statusCode).toBe(200)
|
||||
let body: string = await res.readBody()
|
||||
let obj: any = JSON.parse(body)
|
||||
let auth: string = obj.headers.Authorization
|
||||
expect(auth).toBe('Bearer ' + token)
|
||||
expect(obj.url).toBe('http://httpbin.org/get')
|
||||
})
|
||||
})
|
||||
|
@ -1,256 +1,329 @@
|
||||
import * as httpm from '../_out';
|
||||
import * as httpm from '../_out'
|
||||
import * as ifm from '../_out/interfaces'
|
||||
import * as path from 'path';
|
||||
import * as fs from 'fs';
|
||||
import * as path from 'path'
|
||||
import * as fs from 'fs'
|
||||
|
||||
let sampleFilePath: string = path.join(__dirname, 'testoutput.txt');
|
||||
let sampleFilePath: string = path.join(__dirname, 'testoutput.txt')
|
||||
|
||||
interface HttpBinData {
|
||||
url: string;
|
||||
data: any;
|
||||
json: any;
|
||||
headers: any;
|
||||
args?: any
|
||||
url: string
|
||||
data: any
|
||||
json: any
|
||||
headers: any
|
||||
args?: any
|
||||
}
|
||||
|
||||
describe('basics', () => {
|
||||
let _http: httpm.HttpClient;
|
||||
let _http: httpm.HttpClient
|
||||
|
||||
beforeEach(() => {
|
||||
_http = new httpm.HttpClient('http-client-tests');
|
||||
beforeEach(() => {
|
||||
_http = new httpm.HttpClient('http-client-tests')
|
||||
})
|
||||
|
||||
afterEach(() => {})
|
||||
|
||||
it('constructs', () => {
|
||||
let http: httpm.HttpClient = new httpm.HttpClient('thttp-client-tests')
|
||||
expect(http).toBeDefined()
|
||||
})
|
||||
|
||||
// responses from httpbin return something like:
|
||||
// {
|
||||
// "args": {},
|
||||
// "headers": {
|
||||
// "Connection": "close",
|
||||
// "Host": "httpbin.org",
|
||||
// "User-Agent": "typed-test-client-tests"
|
||||
// },
|
||||
// "origin": "173.95.152.44",
|
||||
// "url": "https://httpbin.org/get"
|
||||
// }
|
||||
|
||||
it('does basic http get request', async done => {
|
||||
let res: httpm.HttpClientResponse = await _http.get(
|
||||
'http://httpbin.org/get'
|
||||
)
|
||||
expect(res.message.statusCode).toBe(200)
|
||||
let body: string = await res.readBody()
|
||||
let obj: any = JSON.parse(body)
|
||||
expect(obj.url).toBe('http://httpbin.org/get')
|
||||
expect(obj.headers['User-Agent']).toBeTruthy()
|
||||
done()
|
||||
})
|
||||
|
||||
it('does basic http get request with no user agent', async done => {
|
||||
let http: httpm.HttpClient = new httpm.HttpClient()
|
||||
let res: httpm.HttpClientResponse = await http.get('http://httpbin.org/get')
|
||||
expect(res.message.statusCode).toBe(200)
|
||||
let body: string = await res.readBody()
|
||||
let obj: any = JSON.parse(body)
|
||||
expect(obj.url).toBe('http://httpbin.org/get')
|
||||
expect(obj.headers['User-Agent']).toBeFalsy()
|
||||
done()
|
||||
})
|
||||
|
||||
it('does basic https get request', async done => {
|
||||
let res: httpm.HttpClientResponse = await _http.get(
|
||||
'https://httpbin.org/get'
|
||||
)
|
||||
expect(res.message.statusCode).toBe(200)
|
||||
let body: string = await res.readBody()
|
||||
let obj: any = JSON.parse(body)
|
||||
expect(obj.url).toBe('https://httpbin.org/get')
|
||||
done()
|
||||
})
|
||||
|
||||
it('does basic http get request with default headers', async done => {
|
||||
let http: httpm.HttpClient = new httpm.HttpClient('http-client-tests', [], {
|
||||
headers: {
|
||||
Accept: 'application/json',
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
})
|
||||
|
||||
afterEach(() => {
|
||||
let res: httpm.HttpClientResponse = await http.get('http://httpbin.org/get')
|
||||
expect(res.message.statusCode).toBe(200)
|
||||
let body: string = await res.readBody()
|
||||
let obj: any = JSON.parse(body)
|
||||
expect(obj.headers.Accept).toBe('application/json')
|
||||
expect(obj.headers['Content-Type']).toBe('application/json')
|
||||
expect(obj.url).toBe('http://httpbin.org/get')
|
||||
done()
|
||||
})
|
||||
|
||||
it('does basic http get request with merged headers', async done => {
|
||||
let http: httpm.HttpClient = new httpm.HttpClient('http-client-tests', [], {
|
||||
headers: {
|
||||
Accept: 'application/json',
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
})
|
||||
|
||||
it('constructs', () => {
|
||||
let http: httpm.HttpClient = new httpm.HttpClient('thttp-client-tests');
|
||||
expect(http).toBeDefined();
|
||||
});
|
||||
let res: httpm.HttpClientResponse = await http.get(
|
||||
'http://httpbin.org/get',
|
||||
{
|
||||
'content-type': 'application/x-www-form-urlencoded'
|
||||
}
|
||||
)
|
||||
expect(res.message.statusCode).toBe(200)
|
||||
let body: string = await res.readBody()
|
||||
let obj: any = JSON.parse(body)
|
||||
expect(obj.headers.Accept).toBe('application/json')
|
||||
expect(obj.headers['Content-Type']).toBe(
|
||||
'application/x-www-form-urlencoded'
|
||||
)
|
||||
expect(obj.url).toBe('http://httpbin.org/get')
|
||||
done()
|
||||
})
|
||||
|
||||
// responses from httpbin return something like:
|
||||
// {
|
||||
// "args": {},
|
||||
// "headers": {
|
||||
// "Connection": "close",
|
||||
// "Host": "httpbin.org",
|
||||
// "User-Agent": "typed-test-client-tests"
|
||||
// },
|
||||
// "origin": "173.95.152.44",
|
||||
// "url": "https://httpbin.org/get"
|
||||
// }
|
||||
it('pipes a get request', () => {
|
||||
return new Promise<string>(async (resolve, reject) => {
|
||||
let file: NodeJS.WritableStream = fs.createWriteStream(sampleFilePath)
|
||||
;(await _http.get('https://httpbin.org/get')).message
|
||||
.pipe(file)
|
||||
.on('close', () => {
|
||||
let body: string = fs.readFileSync(sampleFilePath).toString()
|
||||
let obj: any = JSON.parse(body)
|
||||
expect(obj.url).toBe('https://httpbin.org/get')
|
||||
resolve()
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
it('does basic http get request', async(done) => {
|
||||
let res: httpm.HttpClientResponse = await _http.get('http://httpbin.org/get');
|
||||
expect(res.message.statusCode).toBe(200);
|
||||
let body: string = await res.readBody();
|
||||
let obj: any = JSON.parse(body);
|
||||
expect(obj.url).toBe("http://httpbin.org/get");
|
||||
expect(obj.headers["User-Agent"]).toBeTruthy();
|
||||
done();
|
||||
});
|
||||
|
||||
it('does basic http get request with no user agent', async(done) => {
|
||||
let http: httpm.HttpClient = new httpm.HttpClient();
|
||||
let res: httpm.HttpClientResponse = await http.get('http://httpbin.org/get');
|
||||
expect(res.message.statusCode).toBe(200);
|
||||
let body: string = await res.readBody();
|
||||
let obj: any = JSON.parse(body);
|
||||
expect(obj.url).toBe("http://httpbin.org/get");
|
||||
expect(obj.headers["User-Agent"]).toBeFalsy();
|
||||
done();
|
||||
});
|
||||
it('does basic get request with redirects', async done => {
|
||||
let res: httpm.HttpClientResponse = await _http.get(
|
||||
'https://httpbin.org/redirect-to?url=' +
|
||||
encodeURIComponent('https://httpbin.org/get')
|
||||
)
|
||||
expect(res.message.statusCode).toBe(200)
|
||||
let body: string = await res.readBody()
|
||||
let obj: any = JSON.parse(body)
|
||||
expect(obj.url).toBe('https://httpbin.org/get')
|
||||
done()
|
||||
})
|
||||
|
||||
it('does basic https get request', async(done) => {
|
||||
let res: httpm.HttpClientResponse = await _http.get('https://httpbin.org/get');
|
||||
expect(res.message.statusCode).toBe(200);
|
||||
let body: string = await res.readBody();
|
||||
let obj: any = JSON.parse(body);
|
||||
expect(obj.url).toBe("https://httpbin.org/get");
|
||||
done();
|
||||
});
|
||||
it('does basic get request with redirects (303)', async done => {
|
||||
let res: httpm.HttpClientResponse = await _http.get(
|
||||
'https://httpbin.org/redirect-to?url=' +
|
||||
encodeURIComponent('https://httpbin.org/get') +
|
||||
'&status_code=303'
|
||||
)
|
||||
expect(res.message.statusCode).toBe(200)
|
||||
let body: string = await res.readBody()
|
||||
let obj: any = JSON.parse(body)
|
||||
expect(obj.url).toBe('https://httpbin.org/get')
|
||||
done()
|
||||
})
|
||||
|
||||
it('does basic http get request with default headers', async(done) => {
|
||||
let http: httpm.HttpClient = new httpm.HttpClient('http-client-tests', [], {
|
||||
headers: {
|
||||
'Accept': 'application/json',
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
});
|
||||
let res: httpm.HttpClientResponse = await http.get('http://httpbin.org/get');
|
||||
expect(res.message.statusCode).toBe(200);
|
||||
let body: string = await res.readBody();
|
||||
let obj:any = JSON.parse(body);
|
||||
expect(obj.headers.Accept).toBe('application/json');
|
||||
expect(obj.headers['Content-Type']).toBe('application/json');
|
||||
expect(obj.url).toBe("http://httpbin.org/get");
|
||||
done();
|
||||
});
|
||||
it('returns 404 for not found get request on redirect', async done => {
|
||||
let res: httpm.HttpClientResponse = await _http.get(
|
||||
'https://httpbin.org/redirect-to?url=' +
|
||||
encodeURIComponent('https://httpbin.org/status/404') +
|
||||
'&status_code=303'
|
||||
)
|
||||
expect(res.message.statusCode).toBe(404)
|
||||
let body: string = await res.readBody()
|
||||
done()
|
||||
})
|
||||
|
||||
it('does basic http get request with merged headers', async(done) => {
|
||||
let http: httpm.HttpClient = new httpm.HttpClient('http-client-tests', [], {
|
||||
headers: {
|
||||
'Accept': 'application/json',
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
});
|
||||
let res: httpm.HttpClientResponse = await http.get('http://httpbin.org/get', {
|
||||
'content-type': 'application/x-www-form-urlencoded'
|
||||
});
|
||||
expect(res.message.statusCode).toBe(200);
|
||||
let body: string = await res.readBody();
|
||||
let obj:any = JSON.parse(body);
|
||||
expect(obj.headers.Accept).toBe('application/json');
|
||||
expect(obj.headers['Content-Type']).toBe('application/x-www-form-urlencoded');
|
||||
expect(obj.url).toBe("http://httpbin.org/get");
|
||||
done();
|
||||
});
|
||||
it('does not follow redirects if disabled', async done => {
|
||||
let http: httpm.HttpClient = new httpm.HttpClient(
|
||||
'typed-test-client-tests',
|
||||
null,
|
||||
{allowRedirects: false}
|
||||
)
|
||||
let res: httpm.HttpClientResponse = await http.get(
|
||||
'https://httpbin.org/redirect-to?url=' +
|
||||
encodeURIComponent('https://httpbin.org/get')
|
||||
)
|
||||
expect(res.message.statusCode).toBe(302)
|
||||
let body: string = await res.readBody()
|
||||
done()
|
||||
})
|
||||
|
||||
it('pipes a get request', () => {
|
||||
return new Promise<string>(async (resolve, reject) => {
|
||||
let file: NodeJS.WritableStream = fs.createWriteStream(sampleFilePath);
|
||||
(await _http.get('https://httpbin.org/get')).message.pipe(file).on('close', () => {
|
||||
let body: string = fs.readFileSync(sampleFilePath).toString();
|
||||
let obj:any = JSON.parse(body);
|
||||
expect(obj.url).toBe("https://httpbin.org/get");
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('does basic get request with redirects', async(done) => {
|
||||
let res: httpm.HttpClientResponse = await _http.get("https://httpbin.org/redirect-to?url=" + encodeURIComponent("https://httpbin.org/get"))
|
||||
expect(res.message.statusCode).toBe(200);
|
||||
let body: string = await res.readBody();
|
||||
let obj:any = JSON.parse(body);
|
||||
expect(obj.url).toBe("https://httpbin.org/get");
|
||||
done();
|
||||
});
|
||||
it('does basic head request', async done => {
|
||||
let res: httpm.HttpClientResponse = await _http.head(
|
||||
'http://httpbin.org/get'
|
||||
)
|
||||
expect(res.message.statusCode).toBe(200)
|
||||
done()
|
||||
})
|
||||
|
||||
it('does basic get request with redirects (303)', async(done) => {
|
||||
let res: httpm.HttpClientResponse = await _http.get("https://httpbin.org/redirect-to?url=" + encodeURIComponent("https://httpbin.org/get") + '&status_code=303')
|
||||
expect(res.message.statusCode).toBe(200);
|
||||
let body: string = await res.readBody();
|
||||
let obj:any = JSON.parse(body);
|
||||
expect(obj.url).toBe("https://httpbin.org/get");
|
||||
done();
|
||||
});
|
||||
it('does basic http delete request', async done => {
|
||||
let res: httpm.HttpClientResponse = await _http.del(
|
||||
'http://httpbin.org/delete'
|
||||
)
|
||||
expect(res.message.statusCode).toBe(200)
|
||||
let body: string = await res.readBody()
|
||||
let obj: any = JSON.parse(body)
|
||||
done()
|
||||
})
|
||||
|
||||
it('returns 404 for not found get request on redirect', async(done) => {
|
||||
let res: httpm.HttpClientResponse = await _http.get("https://httpbin.org/redirect-to?url=" + encodeURIComponent("https://httpbin.org/status/404") + '&status_code=303')
|
||||
expect(res.message.statusCode).toBe(404);
|
||||
let body: string = await res.readBody();
|
||||
done();
|
||||
});
|
||||
it('does basic http post request', async done => {
|
||||
let b: string = 'Hello World!'
|
||||
let res: httpm.HttpClientResponse = await _http.post(
|
||||
'http://httpbin.org/post',
|
||||
b
|
||||
)
|
||||
expect(res.message.statusCode).toBe(200)
|
||||
let body: string = await res.readBody()
|
||||
let obj: any = JSON.parse(body)
|
||||
expect(obj.data).toBe(b)
|
||||
expect(obj.url).toBe('http://httpbin.org/post')
|
||||
done()
|
||||
})
|
||||
|
||||
it('does not follow redirects if disabled', async(done) => {
|
||||
let http: httpm.HttpClient = new httpm.HttpClient('typed-test-client-tests', null, { allowRedirects: false });
|
||||
let res: httpm.HttpClientResponse = await http.get("https://httpbin.org/redirect-to?url=" + encodeURIComponent("https://httpbin.org/get"))
|
||||
expect(res.message.statusCode).toBe(302);
|
||||
let body: string = await res.readBody();
|
||||
done();
|
||||
});
|
||||
it('does basic http patch request', async done => {
|
||||
let b: string = 'Hello World!'
|
||||
let res: httpm.HttpClientResponse = await _http.patch(
|
||||
'http://httpbin.org/patch',
|
||||
b
|
||||
)
|
||||
expect(res.message.statusCode).toBe(200)
|
||||
let body: string = await res.readBody()
|
||||
let obj: any = JSON.parse(body)
|
||||
expect(obj.data).toBe(b)
|
||||
expect(obj.url).toBe('http://httpbin.org/patch')
|
||||
done()
|
||||
})
|
||||
|
||||
it('does basic head request', async(done) => {
|
||||
let res: httpm.HttpClientResponse = await _http.head('http://httpbin.org/get');
|
||||
expect(res.message.statusCode).toBe(200);
|
||||
done();
|
||||
});
|
||||
it('does basic http options request', async done => {
|
||||
let res: httpm.HttpClientResponse = await _http.options(
|
||||
'http://httpbin.org'
|
||||
)
|
||||
expect(res.message.statusCode).toBe(200)
|
||||
let body: string = await res.readBody()
|
||||
done()
|
||||
})
|
||||
|
||||
it('does basic http delete request', async(done) => {
|
||||
let res: httpm.HttpClientResponse = await _http.del('http://httpbin.org/delete');
|
||||
expect(res.message.statusCode).toBe(200);
|
||||
let body: string = await res.readBody();
|
||||
let obj:any = JSON.parse(body);
|
||||
done();
|
||||
});
|
||||
it('returns 404 for not found get request', async done => {
|
||||
let res: httpm.HttpClientResponse = await _http.get(
|
||||
'http://httpbin.org/status/404'
|
||||
)
|
||||
expect(res.message.statusCode).toBe(404)
|
||||
let body: string = await res.readBody()
|
||||
done()
|
||||
})
|
||||
|
||||
it('does basic http post request', async(done) => {
|
||||
let b: string = 'Hello World!';
|
||||
let res: httpm.HttpClientResponse = await _http.post('http://httpbin.org/post', b);
|
||||
expect(res.message.statusCode).toBe(200);
|
||||
let body: string = await res.readBody();
|
||||
let obj:any = JSON.parse(body);
|
||||
expect(obj.data).toBe(b);
|
||||
expect(obj.url).toBe("http://httpbin.org/post");
|
||||
done();
|
||||
});
|
||||
it('gets a json object', async () => {
|
||||
let jsonObj: ifm.ITypedResponse<HttpBinData> = await _http.getJson<
|
||||
HttpBinData
|
||||
>('https://httpbin.org/get')
|
||||
expect(jsonObj.statusCode).toBe(200)
|
||||
expect(jsonObj.result).toBeDefined()
|
||||
expect(jsonObj.result.url).toBe('https://httpbin.org/get')
|
||||
expect(jsonObj.result.headers['Accept']).toBe(
|
||||
httpm.MediaTypes.ApplicationJson
|
||||
)
|
||||
expect(jsonObj.headers[httpm.Headers.ContentType]).toBe(
|
||||
httpm.MediaTypes.ApplicationJson
|
||||
)
|
||||
})
|
||||
|
||||
it('does basic http patch request', async(done) => {
|
||||
let b: string = 'Hello World!';
|
||||
let res: httpm.HttpClientResponse = await _http.patch('http://httpbin.org/patch', b);
|
||||
expect(res.message.statusCode).toBe(200);
|
||||
let body: string = await res.readBody();
|
||||
let obj:any = JSON.parse(body);
|
||||
expect(obj.data).toBe(b);
|
||||
expect(obj.url).toBe("http://httpbin.org/patch");
|
||||
done();
|
||||
});
|
||||
|
||||
it('does basic http options request', async(done) => {
|
||||
let res: httpm.HttpClientResponse = await _http.options('http://httpbin.org');
|
||||
expect(res.message.statusCode).toBe(200);
|
||||
let body: string = await res.readBody();
|
||||
done();
|
||||
});
|
||||
|
||||
it('returns 404 for not found get request', async(done) => {
|
||||
let res: httpm.HttpClientResponse = await _http.get('http://httpbin.org/status/404');
|
||||
expect(res.message.statusCode).toBe(404);
|
||||
let body: string = await res.readBody();
|
||||
done();
|
||||
});
|
||||
|
||||
it('gets a json object', async() => {
|
||||
let jsonObj: ifm.ITypedResponse<HttpBinData> = await _http.getJson<HttpBinData>('https://httpbin.org/get');
|
||||
expect(jsonObj.statusCode).toBe(200);
|
||||
expect(jsonObj.result).toBeDefined();
|
||||
expect(jsonObj.result.url).toBe('https://httpbin.org/get');
|
||||
expect(jsonObj.result.headers["Accept"]).toBe(httpm.MediaTypes.ApplicationJson);
|
||||
expect(jsonObj.headers[httpm.Headers.ContentType]).toBe(httpm.MediaTypes.ApplicationJson);
|
||||
});
|
||||
|
||||
it('getting a non existent json object returns null', async() => {
|
||||
let jsonObj: ifm.ITypedResponse<HttpBinData> = await _http.getJson<HttpBinData>('https://httpbin.org/status/404');
|
||||
expect(jsonObj.statusCode).toBe(404);
|
||||
expect(jsonObj.result).toBeNull();
|
||||
});
|
||||
it('getting a non existent json object returns null', async () => {
|
||||
let jsonObj: ifm.ITypedResponse<HttpBinData> = await _http.getJson<
|
||||
HttpBinData
|
||||
>('https://httpbin.org/status/404')
|
||||
expect(jsonObj.statusCode).toBe(404)
|
||||
expect(jsonObj.result).toBeNull()
|
||||
})
|
||||
|
||||
it('posts a json object', async() => {
|
||||
let res: any = { name: 'foo' };
|
||||
let restRes: ifm.ITypedResponse<HttpBinData> = await _http.postJson<HttpBinData>('https://httpbin.org/post', res);
|
||||
expect(restRes.statusCode).toBe(200);
|
||||
expect(restRes.result).toBeDefined();
|
||||
expect(restRes.result.url).toBe('https://httpbin.org/post');
|
||||
expect(restRes.result.json.name).toBe('foo');
|
||||
expect(restRes.result.headers["Accept"]).toBe(httpm.MediaTypes.ApplicationJson);
|
||||
expect(restRes.result.headers["Content-Type"]).toBe(httpm.MediaTypes.ApplicationJson);
|
||||
expect(restRes.headers[httpm.Headers.ContentType]).toBe(httpm.MediaTypes.ApplicationJson);
|
||||
});
|
||||
it('posts a json object', async () => {
|
||||
let res: any = {name: 'foo'}
|
||||
let restRes: ifm.ITypedResponse<HttpBinData> = await _http.postJson<
|
||||
HttpBinData
|
||||
>('https://httpbin.org/post', res)
|
||||
expect(restRes.statusCode).toBe(200)
|
||||
expect(restRes.result).toBeDefined()
|
||||
expect(restRes.result.url).toBe('https://httpbin.org/post')
|
||||
expect(restRes.result.json.name).toBe('foo')
|
||||
expect(restRes.result.headers['Accept']).toBe(
|
||||
httpm.MediaTypes.ApplicationJson
|
||||
)
|
||||
expect(restRes.result.headers['Content-Type']).toBe(
|
||||
httpm.MediaTypes.ApplicationJson
|
||||
)
|
||||
expect(restRes.headers[httpm.Headers.ContentType]).toBe(
|
||||
httpm.MediaTypes.ApplicationJson
|
||||
)
|
||||
})
|
||||
|
||||
it('puts a json object', async() => {
|
||||
let res: any = { name: 'foo' };
|
||||
let restRes: ifm.ITypedResponse<HttpBinData> = await _http.putJson<HttpBinData>('https://httpbin.org/put', res);
|
||||
expect(restRes.statusCode).toBe(200);
|
||||
expect(restRes.result).toBeDefined();
|
||||
expect(restRes.result.url).toBe('https://httpbin.org/put');
|
||||
expect(restRes.result.json.name).toBe('foo');
|
||||
it('puts a json object', async () => {
|
||||
let res: any = {name: 'foo'}
|
||||
let restRes: ifm.ITypedResponse<HttpBinData> = await _http.putJson<
|
||||
HttpBinData
|
||||
>('https://httpbin.org/put', res)
|
||||
expect(restRes.statusCode).toBe(200)
|
||||
expect(restRes.result).toBeDefined()
|
||||
expect(restRes.result.url).toBe('https://httpbin.org/put')
|
||||
expect(restRes.result.json.name).toBe('foo')
|
||||
|
||||
expect(restRes.result.headers["Accept"]).toBe(httpm.MediaTypes.ApplicationJson);
|
||||
expect(restRes.result.headers["Content-Type"]).toBe(httpm.MediaTypes.ApplicationJson);
|
||||
expect(restRes.headers[httpm.Headers.ContentType]).toBe(httpm.MediaTypes.ApplicationJson);
|
||||
});
|
||||
|
||||
it('patch a json object', async() => {
|
||||
let res: any = { name: 'foo' };
|
||||
let restRes: ifm.ITypedResponse<HttpBinData> = await _http.patchJson<HttpBinData>('https://httpbin.org/patch', res);
|
||||
expect(restRes.statusCode).toBe(200);
|
||||
expect(restRes.result).toBeDefined();
|
||||
expect(restRes.result.url).toBe('https://httpbin.org/patch');
|
||||
expect(restRes.result.json.name).toBe('foo');
|
||||
expect(restRes.result.headers["Accept"]).toBe(httpm.MediaTypes.ApplicationJson);
|
||||
expect(restRes.result.headers["Content-Type"]).toBe(httpm.MediaTypes.ApplicationJson);
|
||||
expect(restRes.headers[httpm.Headers.ContentType]).toBe(httpm.MediaTypes.ApplicationJson);
|
||||
});
|
||||
});
|
||||
expect(restRes.result.headers['Accept']).toBe(
|
||||
httpm.MediaTypes.ApplicationJson
|
||||
)
|
||||
expect(restRes.result.headers['Content-Type']).toBe(
|
||||
httpm.MediaTypes.ApplicationJson
|
||||
)
|
||||
expect(restRes.headers[httpm.Headers.ContentType]).toBe(
|
||||
httpm.MediaTypes.ApplicationJson
|
||||
)
|
||||
})
|
||||
|
||||
it('patch a json object', async () => {
|
||||
let res: any = {name: 'foo'}
|
||||
let restRes: ifm.ITypedResponse<HttpBinData> = await _http.patchJson<
|
||||
HttpBinData
|
||||
>('https://httpbin.org/patch', res)
|
||||
expect(restRes.statusCode).toBe(200)
|
||||
expect(restRes.result).toBeDefined()
|
||||
expect(restRes.result.url).toBe('https://httpbin.org/patch')
|
||||
expect(restRes.result.json.name).toBe('foo')
|
||||
expect(restRes.result.headers['Accept']).toBe(
|
||||
httpm.MediaTypes.ApplicationJson
|
||||
)
|
||||
expect(restRes.result.headers['Content-Type']).toBe(
|
||||
httpm.MediaTypes.ApplicationJson
|
||||
)
|
||||
expect(restRes.headers[httpm.Headers.ContentType]).toBe(
|
||||
httpm.MediaTypes.ApplicationJson
|
||||
)
|
||||
})
|
||||
})
|
||||
|
@ -1,79 +1,115 @@
|
||||
import * as httpm from '../_out';
|
||||
import * as httpm from '../_out'
|
||||
import * as ifm from '../_out/interfaces'
|
||||
|
||||
describe('headers', () => {
|
||||
let _http: httpm.HttpClient;
|
||||
let _http: httpm.HttpClient
|
||||
|
||||
beforeEach(() => {
|
||||
_http = new httpm.HttpClient('http-client-tests');
|
||||
});
|
||||
beforeEach(() => {
|
||||
_http = new httpm.HttpClient('http-client-tests')
|
||||
})
|
||||
|
||||
it('preserves existing headers on getJson', async() => {
|
||||
let additionalHeaders = { [httpm.Headers.Accept]: "foo" };
|
||||
let jsonObj: ifm.ITypedResponse<any> = await _http.getJson<any>('https://httpbin.org/get', additionalHeaders);
|
||||
expect(jsonObj.result.headers["Accept"]).toBe("foo");
|
||||
expect(jsonObj.headers[httpm.Headers.ContentType]).toBe(httpm.MediaTypes.ApplicationJson);
|
||||
it('preserves existing headers on getJson', async () => {
|
||||
let additionalHeaders = {[httpm.Headers.Accept]: 'foo'}
|
||||
let jsonObj: ifm.ITypedResponse<any> = await _http.getJson<any>(
|
||||
'https://httpbin.org/get',
|
||||
additionalHeaders
|
||||
)
|
||||
expect(jsonObj.result.headers['Accept']).toBe('foo')
|
||||
expect(jsonObj.headers[httpm.Headers.ContentType]).toBe(
|
||||
httpm.MediaTypes.ApplicationJson
|
||||
)
|
||||
|
||||
let httpWithHeaders = new httpm.HttpClient();
|
||||
httpWithHeaders.requestOptions = {
|
||||
headers: {
|
||||
[httpm.Headers.Accept]: "baz"
|
||||
}
|
||||
};
|
||||
jsonObj = await httpWithHeaders.getJson<any>('https://httpbin.org/get');
|
||||
expect(jsonObj.result.headers["Accept"]).toBe("baz");
|
||||
expect(jsonObj.headers[httpm.Headers.ContentType]).toBe(httpm.MediaTypes.ApplicationJson);
|
||||
});
|
||||
let httpWithHeaders = new httpm.HttpClient()
|
||||
httpWithHeaders.requestOptions = {
|
||||
headers: {
|
||||
[httpm.Headers.Accept]: 'baz'
|
||||
}
|
||||
}
|
||||
jsonObj = await httpWithHeaders.getJson<any>('https://httpbin.org/get')
|
||||
expect(jsonObj.result.headers['Accept']).toBe('baz')
|
||||
expect(jsonObj.headers[httpm.Headers.ContentType]).toBe(
|
||||
httpm.MediaTypes.ApplicationJson
|
||||
)
|
||||
})
|
||||
|
||||
it('preserves existing headers on postJson', async() => {
|
||||
let additionalHeaders = { [httpm.Headers.Accept]: "foo" };
|
||||
let jsonObj: ifm.ITypedResponse<any> = await _http.postJson<any>('https://httpbin.org/post', {}, additionalHeaders);
|
||||
expect(jsonObj.result.headers["Accept"]).toBe("foo");
|
||||
expect(jsonObj.headers[httpm.Headers.ContentType]).toBe(httpm.MediaTypes.ApplicationJson);
|
||||
it('preserves existing headers on postJson', async () => {
|
||||
let additionalHeaders = {[httpm.Headers.Accept]: 'foo'}
|
||||
let jsonObj: ifm.ITypedResponse<any> = await _http.postJson<any>(
|
||||
'https://httpbin.org/post',
|
||||
{},
|
||||
additionalHeaders
|
||||
)
|
||||
expect(jsonObj.result.headers['Accept']).toBe('foo')
|
||||
expect(jsonObj.headers[httpm.Headers.ContentType]).toBe(
|
||||
httpm.MediaTypes.ApplicationJson
|
||||
)
|
||||
|
||||
let httpWithHeaders = new httpm.HttpClient();
|
||||
httpWithHeaders.requestOptions = {
|
||||
headers: {
|
||||
[httpm.Headers.Accept]: "baz"
|
||||
}
|
||||
};
|
||||
jsonObj = await httpWithHeaders.postJson<any>('https://httpbin.org/post', {});
|
||||
expect(jsonObj.result.headers["Accept"]).toBe("baz");
|
||||
expect(jsonObj.headers[httpm.Headers.ContentType]).toBe(httpm.MediaTypes.ApplicationJson);
|
||||
});
|
||||
let httpWithHeaders = new httpm.HttpClient()
|
||||
httpWithHeaders.requestOptions = {
|
||||
headers: {
|
||||
[httpm.Headers.Accept]: 'baz'
|
||||
}
|
||||
}
|
||||
jsonObj = await httpWithHeaders.postJson<any>(
|
||||
'https://httpbin.org/post',
|
||||
{}
|
||||
)
|
||||
expect(jsonObj.result.headers['Accept']).toBe('baz')
|
||||
expect(jsonObj.headers[httpm.Headers.ContentType]).toBe(
|
||||
httpm.MediaTypes.ApplicationJson
|
||||
)
|
||||
})
|
||||
|
||||
it('preserves existing headers on putJson', async() => {
|
||||
let additionalHeaders = { [httpm.Headers.Accept]: "foo" };
|
||||
let jsonObj: ifm.ITypedResponse<any> = await _http.putJson<any>('https://httpbin.org/put', {}, additionalHeaders);
|
||||
expect(jsonObj.result.headers["Accept"]).toBe("foo");
|
||||
expect(jsonObj.headers[httpm.Headers.ContentType]).toBe(httpm.MediaTypes.ApplicationJson);
|
||||
it('preserves existing headers on putJson', async () => {
|
||||
let additionalHeaders = {[httpm.Headers.Accept]: 'foo'}
|
||||
let jsonObj: ifm.ITypedResponse<any> = await _http.putJson<any>(
|
||||
'https://httpbin.org/put',
|
||||
{},
|
||||
additionalHeaders
|
||||
)
|
||||
expect(jsonObj.result.headers['Accept']).toBe('foo')
|
||||
expect(jsonObj.headers[httpm.Headers.ContentType]).toBe(
|
||||
httpm.MediaTypes.ApplicationJson
|
||||
)
|
||||
|
||||
let httpWithHeaders = new httpm.HttpClient();
|
||||
httpWithHeaders.requestOptions = {
|
||||
headers: {
|
||||
[httpm.Headers.Accept]: "baz"
|
||||
}
|
||||
};
|
||||
jsonObj = await httpWithHeaders.putJson<any>('https://httpbin.org/put', {});
|
||||
expect(jsonObj.result.headers["Accept"]).toBe("baz");
|
||||
expect(jsonObj.headers[httpm.Headers.ContentType]).toBe(httpm.MediaTypes.ApplicationJson);
|
||||
});
|
||||
let httpWithHeaders = new httpm.HttpClient()
|
||||
httpWithHeaders.requestOptions = {
|
||||
headers: {
|
||||
[httpm.Headers.Accept]: 'baz'
|
||||
}
|
||||
}
|
||||
jsonObj = await httpWithHeaders.putJson<any>('https://httpbin.org/put', {})
|
||||
expect(jsonObj.result.headers['Accept']).toBe('baz')
|
||||
expect(jsonObj.headers[httpm.Headers.ContentType]).toBe(
|
||||
httpm.MediaTypes.ApplicationJson
|
||||
)
|
||||
})
|
||||
|
||||
it('preserves existing headers on patchJson', async() => {
|
||||
let additionalHeaders = { [httpm.Headers.Accept]: "foo" };
|
||||
let jsonObj: ifm.ITypedResponse<any> = await _http.patchJson<any>('https://httpbin.org/patch', {}, additionalHeaders);
|
||||
expect(jsonObj.result.headers["Accept"]).toBe("foo");
|
||||
expect(jsonObj.headers[httpm.Headers.ContentType]).toBe(httpm.MediaTypes.ApplicationJson);
|
||||
it('preserves existing headers on patchJson', async () => {
|
||||
let additionalHeaders = {[httpm.Headers.Accept]: 'foo'}
|
||||
let jsonObj: ifm.ITypedResponse<any> = await _http.patchJson<any>(
|
||||
'https://httpbin.org/patch',
|
||||
{},
|
||||
additionalHeaders
|
||||
)
|
||||
expect(jsonObj.result.headers['Accept']).toBe('foo')
|
||||
expect(jsonObj.headers[httpm.Headers.ContentType]).toBe(
|
||||
httpm.MediaTypes.ApplicationJson
|
||||
)
|
||||
|
||||
let httpWithHeaders = new httpm.HttpClient();
|
||||
httpWithHeaders.requestOptions = {
|
||||
headers: {
|
||||
[httpm.Headers.Accept]: "baz"
|
||||
}
|
||||
};
|
||||
jsonObj = await httpWithHeaders.patchJson<any>('https://httpbin.org/patch', {});
|
||||
expect(jsonObj.result.headers["Accept"]).toBe("baz");
|
||||
expect(jsonObj.headers[httpm.Headers.ContentType]).toBe(httpm.MediaTypes.ApplicationJson);
|
||||
});
|
||||
|
||||
});
|
||||
let httpWithHeaders = new httpm.HttpClient()
|
||||
httpWithHeaders.requestOptions = {
|
||||
headers: {
|
||||
[httpm.Headers.Accept]: 'baz'
|
||||
}
|
||||
}
|
||||
jsonObj = await httpWithHeaders.patchJson<any>(
|
||||
'https://httpbin.org/patch',
|
||||
{}
|
||||
)
|
||||
expect(jsonObj.result.headers['Accept']).toBe('baz')
|
||||
expect(jsonObj.headers[httpm.Headers.ContentType]).toBe(
|
||||
httpm.MediaTypes.ApplicationJson
|
||||
)
|
||||
})
|
||||
})
|
||||
|
@ -1,65 +1,79 @@
|
||||
import * as httpm from '../_out';
|
||||
import * as httpm from '../_out'
|
||||
|
||||
describe('basics', () => {
|
||||
let _http: httpm.HttpClient;
|
||||
let _http: httpm.HttpClient
|
||||
|
||||
beforeEach(() => {
|
||||
_http = new httpm.HttpClient('http-client-tests', [], { keepAlive: true });
|
||||
})
|
||||
|
||||
afterEach(() => {
|
||||
_http.dispose();
|
||||
})
|
||||
|
||||
it('does basic http get request with keepAlive true', async(done) => {
|
||||
let res: httpm.HttpClientResponse = await _http.get('http://httpbin.org/get');
|
||||
expect(res.message.statusCode).toBe(200);
|
||||
let body: string = await res.readBody();
|
||||
let obj:any = JSON.parse(body);
|
||||
expect(obj.url).toBe("http://httpbin.org/get");
|
||||
done();
|
||||
});
|
||||
beforeEach(() => {
|
||||
_http = new httpm.HttpClient('http-client-tests', [], {keepAlive: true})
|
||||
})
|
||||
|
||||
it('does basic head request with keepAlive true', async(done) => {
|
||||
let res: httpm.HttpClientResponse = await _http.head('http://httpbin.org/get');
|
||||
expect(res.message.statusCode).toBe(200);
|
||||
done();
|
||||
});
|
||||
afterEach(() => {
|
||||
_http.dispose()
|
||||
})
|
||||
|
||||
it('does basic http delete request with keepAlive true', async(done) => {
|
||||
let res: httpm.HttpClientResponse = await _http.del('http://httpbin.org/delete');
|
||||
expect(res.message.statusCode).toBe(200);
|
||||
let body: string = await res.readBody();
|
||||
let obj:any = JSON.parse(body);
|
||||
done();
|
||||
});
|
||||
|
||||
it('does basic http post request with keepAlive true', async(done) => {
|
||||
let b: string = 'Hello World!';
|
||||
let res: httpm.HttpClientResponse = await _http.post('http://httpbin.org/post', b);
|
||||
expect(res.message.statusCode).toBe(200);
|
||||
let body: string = await res.readBody();
|
||||
let obj:any = JSON.parse(body);
|
||||
expect(obj.data).toBe(b);
|
||||
expect(obj.url).toBe("http://httpbin.org/post");
|
||||
done();
|
||||
});
|
||||
|
||||
it('does basic http patch request with keepAlive true', async(done) => {
|
||||
let b: string = 'Hello World!';
|
||||
let res: httpm.HttpClientResponse = await _http.patch('http://httpbin.org/patch', b);
|
||||
expect(res.message.statusCode).toBe(200);
|
||||
let body: string = await res.readBody();
|
||||
let obj:any = JSON.parse(body);
|
||||
expect(obj.data).toBe(b);
|
||||
expect(obj.url).toBe("http://httpbin.org/patch");
|
||||
done();
|
||||
});
|
||||
|
||||
it('does basic http options request with keepAlive true', async(done) => {
|
||||
let res: httpm.HttpClientResponse = await _http.options('http://httpbin.org');
|
||||
expect(res.message.statusCode).toBe(200);
|
||||
let body: string = await res.readBody();
|
||||
done();
|
||||
});
|
||||
});
|
||||
it('does basic http get request with keepAlive true', async done => {
|
||||
let res: httpm.HttpClientResponse = await _http.get(
|
||||
'http://httpbin.org/get'
|
||||
)
|
||||
expect(res.message.statusCode).toBe(200)
|
||||
let body: string = await res.readBody()
|
||||
let obj: any = JSON.parse(body)
|
||||
expect(obj.url).toBe('http://httpbin.org/get')
|
||||
done()
|
||||
})
|
||||
|
||||
it('does basic head request with keepAlive true', async done => {
|
||||
let res: httpm.HttpClientResponse = await _http.head(
|
||||
'http://httpbin.org/get'
|
||||
)
|
||||
expect(res.message.statusCode).toBe(200)
|
||||
done()
|
||||
})
|
||||
|
||||
it('does basic http delete request with keepAlive true', async done => {
|
||||
let res: httpm.HttpClientResponse = await _http.del(
|
||||
'http://httpbin.org/delete'
|
||||
)
|
||||
expect(res.message.statusCode).toBe(200)
|
||||
let body: string = await res.readBody()
|
||||
let obj: any = JSON.parse(body)
|
||||
done()
|
||||
})
|
||||
|
||||
it('does basic http post request with keepAlive true', async done => {
|
||||
let b: string = 'Hello World!'
|
||||
let res: httpm.HttpClientResponse = await _http.post(
|
||||
'http://httpbin.org/post',
|
||||
b
|
||||
)
|
||||
expect(res.message.statusCode).toBe(200)
|
||||
let body: string = await res.readBody()
|
||||
let obj: any = JSON.parse(body)
|
||||
expect(obj.data).toBe(b)
|
||||
expect(obj.url).toBe('http://httpbin.org/post')
|
||||
done()
|
||||
})
|
||||
|
||||
it('does basic http patch request with keepAlive true', async done => {
|
||||
let b: string = 'Hello World!'
|
||||
let res: httpm.HttpClientResponse = await _http.patch(
|
||||
'http://httpbin.org/patch',
|
||||
b
|
||||
)
|
||||
expect(res.message.statusCode).toBe(200)
|
||||
let body: string = await res.readBody()
|
||||
let obj: any = JSON.parse(body)
|
||||
expect(obj.data).toBe(b)
|
||||
expect(obj.url).toBe('http://httpbin.org/patch')
|
||||
done()
|
||||
})
|
||||
|
||||
it('does basic http options request with keepAlive true', async done => {
|
||||
let res: httpm.HttpClientResponse = await _http.options(
|
||||
'http://httpbin.org'
|
||||
)
|
||||
expect(res.message.statusCode).toBe(200)
|
||||
let body: string = await res.readBody()
|
||||
done()
|
||||
})
|
||||
})
|
||||
|
@ -1,201 +1,208 @@
|
||||
import * as http from 'http'
|
||||
import * as httpm from '../_out';
|
||||
import * as pm from '../_out/proxy';
|
||||
import * as httpm from '../_out'
|
||||
import * as pm from '../_out/proxy'
|
||||
import * as proxy from 'proxy'
|
||||
import * as url from 'url';
|
||||
import * as url from 'url'
|
||||
|
||||
let _proxyConnects: string[]
|
||||
let _proxyServer: http.Server
|
||||
let _proxyUrl = 'http://127.0.0.1:8080'
|
||||
|
||||
describe('proxy', () => {
|
||||
beforeAll(async () => {
|
||||
// Start proxy server
|
||||
_proxyServer = proxy()
|
||||
await new Promise((resolve) => {
|
||||
const port = Number(_proxyUrl.split(':')[2])
|
||||
_proxyServer.listen(port, () => resolve())
|
||||
})
|
||||
_proxyServer.on('connect', (req) => {
|
||||
_proxyConnects.push(req.url)
|
||||
});
|
||||
beforeAll(async () => {
|
||||
// Start proxy server
|
||||
_proxyServer = proxy()
|
||||
await new Promise(resolve => {
|
||||
const port = Number(_proxyUrl.split(':')[2])
|
||||
_proxyServer.listen(port, () => resolve())
|
||||
})
|
||||
_proxyServer.on('connect', req => {
|
||||
_proxyConnects.push(req.url)
|
||||
})
|
||||
})
|
||||
|
||||
beforeEach(() => {
|
||||
_proxyConnects = []
|
||||
_clearVars()
|
||||
})
|
||||
|
||||
afterEach(() => {
|
||||
})
|
||||
beforeEach(() => {
|
||||
_proxyConnects = []
|
||||
_clearVars()
|
||||
})
|
||||
|
||||
afterAll(async() => {
|
||||
_clearVars()
|
||||
afterEach(() => {})
|
||||
|
||||
// Stop proxy server
|
||||
await new Promise((resolve) => {
|
||||
_proxyServer.once('close', () => resolve())
|
||||
_proxyServer.close()
|
||||
})
|
||||
})
|
||||
afterAll(async () => {
|
||||
_clearVars()
|
||||
|
||||
it('getProxyUrl does not return proxyUrl if variables not set', () => {
|
||||
let proxyUrl = pm.getProxyUrl(url.parse('https://github.com'));
|
||||
expect(proxyUrl).toBeUndefined();
|
||||
// Stop proxy server
|
||||
await new Promise(resolve => {
|
||||
_proxyServer.once('close', () => resolve())
|
||||
_proxyServer.close()
|
||||
})
|
||||
})
|
||||
|
||||
it('getProxyUrl returns proxyUrl if https_proxy set for https url', () => {
|
||||
process.env["https_proxy"] = "https://myproxysvr";
|
||||
let proxyUrl = pm.getProxyUrl(url.parse('https://github.com'));
|
||||
expect(proxyUrl).toBeDefined();
|
||||
})
|
||||
it('getProxyUrl does not return proxyUrl if variables not set', () => {
|
||||
let proxyUrl = pm.getProxyUrl(url.parse('https://github.com'))
|
||||
expect(proxyUrl).toBeUndefined()
|
||||
})
|
||||
|
||||
it('getProxyUrl does not return proxyUrl if http_proxy set for https url', () => {
|
||||
process.env["http_proxy"] = "https://myproxysvr";
|
||||
let proxyUrl = pm.getProxyUrl(url.parse('https://github.com'));
|
||||
expect(proxyUrl).toBeUndefined();
|
||||
})
|
||||
|
||||
it('getProxyUrl returns proxyUrl if http_proxy set for http url', () => {
|
||||
process.env["http_proxy"] = "http://myproxysvr";
|
||||
let proxyUrl = pm.getProxyUrl(url.parse('http://github.com'));
|
||||
expect(proxyUrl).toBeDefined();
|
||||
})
|
||||
it('getProxyUrl returns proxyUrl if https_proxy set for https url', () => {
|
||||
process.env['https_proxy'] = 'https://myproxysvr'
|
||||
let proxyUrl = pm.getProxyUrl(url.parse('https://github.com'))
|
||||
expect(proxyUrl).toBeDefined()
|
||||
})
|
||||
|
||||
it('getProxyUrl does not return proxyUrl if https_proxy set and in no_proxy list', () => {
|
||||
process.env["https_proxy"] = "https://myproxysvr";
|
||||
process.env["no_proxy"] = "otherserver,myserver,anotherserver:8080"
|
||||
let proxyUrl = pm.getProxyUrl(url.parse('https://myserver'));
|
||||
expect(proxyUrl).toBeUndefined();
|
||||
})
|
||||
it('getProxyUrl does not return proxyUrl if http_proxy set for https url', () => {
|
||||
process.env['http_proxy'] = 'https://myproxysvr'
|
||||
let proxyUrl = pm.getProxyUrl(url.parse('https://github.com'))
|
||||
expect(proxyUrl).toBeUndefined()
|
||||
})
|
||||
|
||||
it('getProxyUrl returns proxyUrl if https_proxy set and not in no_proxy list', () => {
|
||||
process.env["https_proxy"] = "https://myproxysvr";
|
||||
process.env["no_proxy"] = "otherserver,myserver,anotherserver:8080"
|
||||
let proxyUrl = pm.getProxyUrl(url.parse('https://github.com'));
|
||||
expect(proxyUrl).toBeDefined();
|
||||
})
|
||||
it('getProxyUrl returns proxyUrl if http_proxy set for http url', () => {
|
||||
process.env['http_proxy'] = 'http://myproxysvr'
|
||||
let proxyUrl = pm.getProxyUrl(url.parse('http://github.com'))
|
||||
expect(proxyUrl).toBeDefined()
|
||||
})
|
||||
|
||||
it('getProxyUrl does not return proxyUrl if http_proxy set and in no_proxy list', () => {
|
||||
process.env["http_proxy"] = "http://myproxysvr";
|
||||
process.env["no_proxy"] = "otherserver,myserver,anotherserver:8080"
|
||||
let proxyUrl = pm.getProxyUrl(url.parse('http://myserver'));
|
||||
expect(proxyUrl).toBeUndefined();
|
||||
})
|
||||
it('getProxyUrl does not return proxyUrl if https_proxy set and in no_proxy list', () => {
|
||||
process.env['https_proxy'] = 'https://myproxysvr'
|
||||
process.env['no_proxy'] = 'otherserver,myserver,anotherserver:8080'
|
||||
let proxyUrl = pm.getProxyUrl(url.parse('https://myserver'))
|
||||
expect(proxyUrl).toBeUndefined()
|
||||
})
|
||||
|
||||
it('getProxyUrl returns proxyUrl if http_proxy set and not in no_proxy list', () => {
|
||||
process.env["http_proxy"] = "http://myproxysvr";
|
||||
process.env["no_proxy"] = "otherserver,myserver,anotherserver:8080"
|
||||
let proxyUrl = pm.getProxyUrl(url.parse('http://github.com'));
|
||||
expect(proxyUrl).toBeDefined();
|
||||
})
|
||||
it('getProxyUrl returns proxyUrl if https_proxy set and not in no_proxy list', () => {
|
||||
process.env['https_proxy'] = 'https://myproxysvr'
|
||||
process.env['no_proxy'] = 'otherserver,myserver,anotherserver:8080'
|
||||
let proxyUrl = pm.getProxyUrl(url.parse('https://github.com'))
|
||||
expect(proxyUrl).toBeDefined()
|
||||
})
|
||||
|
||||
it('checkBypass returns true if host as no_proxy list', () => {
|
||||
process.env["no_proxy"] = "myserver"
|
||||
let bypass = pm.checkBypass(url.parse('https://myserver'));
|
||||
expect(bypass).toBeTruthy();
|
||||
})
|
||||
it('getProxyUrl does not return proxyUrl if http_proxy set and in no_proxy list', () => {
|
||||
process.env['http_proxy'] = 'http://myproxysvr'
|
||||
process.env['no_proxy'] = 'otherserver,myserver,anotherserver:8080'
|
||||
let proxyUrl = pm.getProxyUrl(url.parse('http://myserver'))
|
||||
expect(proxyUrl).toBeUndefined()
|
||||
})
|
||||
|
||||
it('checkBypass returns true if host in no_proxy list', () => {
|
||||
process.env["no_proxy"] = "otherserver,myserver,anotherserver:8080"
|
||||
let bypass = pm.checkBypass(url.parse('https://myserver'));
|
||||
expect(bypass).toBeTruthy();
|
||||
})
|
||||
|
||||
it('checkBypass returns true if host in no_proxy list with spaces', () => {
|
||||
process.env["no_proxy"] = "otherserver, myserver ,anotherserver:8080"
|
||||
let bypass = pm.checkBypass(url.parse('https://myserver'));
|
||||
expect(bypass).toBeTruthy();
|
||||
})
|
||||
|
||||
it('checkBypass returns true if host in no_proxy list with port', () => {
|
||||
process.env["no_proxy"] = "otherserver, myserver:8080 ,anotherserver"
|
||||
let bypass = pm.checkBypass(url.parse('https://myserver:8080'));
|
||||
expect(bypass).toBeTruthy();
|
||||
})
|
||||
it('getProxyUrl returns proxyUrl if http_proxy set and not in no_proxy list', () => {
|
||||
process.env['http_proxy'] = 'http://myproxysvr'
|
||||
process.env['no_proxy'] = 'otherserver,myserver,anotherserver:8080'
|
||||
let proxyUrl = pm.getProxyUrl(url.parse('http://github.com'))
|
||||
expect(proxyUrl).toBeDefined()
|
||||
})
|
||||
|
||||
it('checkBypass returns true if host with port in no_proxy list without port', () => {
|
||||
process.env["no_proxy"] = "otherserver, myserver ,anotherserver"
|
||||
let bypass = pm.checkBypass(url.parse('https://myserver:8080'));
|
||||
expect(bypass).toBeTruthy();
|
||||
})
|
||||
it('checkBypass returns true if host as no_proxy list', () => {
|
||||
process.env['no_proxy'] = 'myserver'
|
||||
let bypass = pm.checkBypass(url.parse('https://myserver'))
|
||||
expect(bypass).toBeTruthy()
|
||||
})
|
||||
|
||||
it('checkBypass returns true if host in no_proxy list with default https port', () => {
|
||||
process.env["no_proxy"] = "otherserver, myserver:443 ,anotherserver"
|
||||
let bypass = pm.checkBypass(url.parse('https://myserver'));
|
||||
expect(bypass).toBeTruthy();
|
||||
})
|
||||
it('checkBypass returns true if host in no_proxy list', () => {
|
||||
process.env['no_proxy'] = 'otherserver,myserver,anotherserver:8080'
|
||||
let bypass = pm.checkBypass(url.parse('https://myserver'))
|
||||
expect(bypass).toBeTruthy()
|
||||
})
|
||||
|
||||
it('checkBypass returns true if host in no_proxy list with default http port', () => {
|
||||
process.env["no_proxy"] = "otherserver, myserver:80 ,anotherserver"
|
||||
let bypass = pm.checkBypass(url.parse('http://myserver'));
|
||||
expect(bypass).toBeTruthy();
|
||||
})
|
||||
it('checkBypass returns true if host in no_proxy list with spaces', () => {
|
||||
process.env['no_proxy'] = 'otherserver, myserver ,anotherserver:8080'
|
||||
let bypass = pm.checkBypass(url.parse('https://myserver'))
|
||||
expect(bypass).toBeTruthy()
|
||||
})
|
||||
|
||||
it('checkBypass returns false if host not in no_proxy list', () => {
|
||||
process.env["no_proxy"] = "otherserver, myserver ,anotherserver:8080"
|
||||
let bypass = pm.checkBypass(url.parse('https://github.com'));
|
||||
expect(bypass).toBeFalsy();
|
||||
})
|
||||
|
||||
it('checkBypass returns false if empty no_proxy', () => {
|
||||
process.env["no_proxy"] = ""
|
||||
let bypass = pm.checkBypass(url.parse('https://github.com'));
|
||||
expect(bypass).toBeFalsy();
|
||||
})
|
||||
it('checkBypass returns true if host in no_proxy list with port', () => {
|
||||
process.env['no_proxy'] = 'otherserver, myserver:8080 ,anotherserver'
|
||||
let bypass = pm.checkBypass(url.parse('https://myserver:8080'))
|
||||
expect(bypass).toBeTruthy()
|
||||
})
|
||||
|
||||
it('HttpClient does basic http get request through proxy', async () => {
|
||||
process.env['http_proxy'] = _proxyUrl
|
||||
const httpClient = new httpm.HttpClient();
|
||||
let res: httpm.HttpClientResponse = await httpClient.get('http://httpbin.org/get');
|
||||
expect(res.message.statusCode).toBe(200);
|
||||
let body: string = await res.readBody();
|
||||
let obj: any = JSON.parse(body);
|
||||
expect(obj.url).toBe("http://httpbin.org/get");
|
||||
expect(_proxyConnects).toEqual(['httpbin.org:80'])
|
||||
})
|
||||
it('checkBypass returns true if host with port in no_proxy list without port', () => {
|
||||
process.env['no_proxy'] = 'otherserver, myserver ,anotherserver'
|
||||
let bypass = pm.checkBypass(url.parse('https://myserver:8080'))
|
||||
expect(bypass).toBeTruthy()
|
||||
})
|
||||
|
||||
it('HttoClient does basic http get request when bypass proxy', async () => {
|
||||
process.env['http_proxy'] = _proxyUrl
|
||||
process.env['no_proxy'] = 'httpbin.org'
|
||||
const httpClient = new httpm.HttpClient();
|
||||
let res: httpm.HttpClientResponse = await httpClient.get('http://httpbin.org/get');
|
||||
expect(res.message.statusCode).toBe(200);
|
||||
let body: string = await res.readBody();
|
||||
let obj: any = JSON.parse(body);
|
||||
expect(obj.url).toBe("http://httpbin.org/get");
|
||||
expect(_proxyConnects).toHaveLength(0)
|
||||
})
|
||||
it('checkBypass returns true if host in no_proxy list with default https port', () => {
|
||||
process.env['no_proxy'] = 'otherserver, myserver:443 ,anotherserver'
|
||||
let bypass = pm.checkBypass(url.parse('https://myserver'))
|
||||
expect(bypass).toBeTruthy()
|
||||
})
|
||||
|
||||
it('HttpClient does basic https get request through proxy', async () => {
|
||||
process.env['https_proxy'] = _proxyUrl
|
||||
const httpClient = new httpm.HttpClient();
|
||||
let res: httpm.HttpClientResponse = await httpClient.get('https://httpbin.org/get');
|
||||
expect(res.message.statusCode).toBe(200);
|
||||
let body: string = await res.readBody();
|
||||
let obj: any = JSON.parse(body);
|
||||
expect(obj.url).toBe("https://httpbin.org/get");
|
||||
expect(_proxyConnects).toEqual(['httpbin.org:443'])
|
||||
})
|
||||
it('checkBypass returns true if host in no_proxy list with default http port', () => {
|
||||
process.env['no_proxy'] = 'otherserver, myserver:80 ,anotherserver'
|
||||
let bypass = pm.checkBypass(url.parse('http://myserver'))
|
||||
expect(bypass).toBeTruthy()
|
||||
})
|
||||
|
||||
it('HttpClient does basic https get request when bypass proxy', async () => {
|
||||
process.env['https_proxy'] = _proxyUrl
|
||||
process.env['no_proxy'] = 'httpbin.org'
|
||||
const httpClient = new httpm.HttpClient();
|
||||
let res: httpm.HttpClientResponse = await httpClient.get('https://httpbin.org/get');
|
||||
expect(res.message.statusCode).toBe(200);
|
||||
let body: string = await res.readBody();
|
||||
let obj: any = JSON.parse(body);
|
||||
expect(obj.url).toBe("https://httpbin.org/get");
|
||||
expect(_proxyConnects).toHaveLength(0)
|
||||
})
|
||||
it('checkBypass returns false if host not in no_proxy list', () => {
|
||||
process.env['no_proxy'] = 'otherserver, myserver ,anotherserver:8080'
|
||||
let bypass = pm.checkBypass(url.parse('https://github.com'))
|
||||
expect(bypass).toBeFalsy()
|
||||
})
|
||||
|
||||
it('checkBypass returns false if empty no_proxy', () => {
|
||||
process.env['no_proxy'] = ''
|
||||
let bypass = pm.checkBypass(url.parse('https://github.com'))
|
||||
expect(bypass).toBeFalsy()
|
||||
})
|
||||
|
||||
it('HttpClient does basic http get request through proxy', async () => {
|
||||
process.env['http_proxy'] = _proxyUrl
|
||||
const httpClient = new httpm.HttpClient()
|
||||
let res: httpm.HttpClientResponse = await httpClient.get(
|
||||
'http://httpbin.org/get'
|
||||
)
|
||||
expect(res.message.statusCode).toBe(200)
|
||||
let body: string = await res.readBody()
|
||||
let obj: any = JSON.parse(body)
|
||||
expect(obj.url).toBe('http://httpbin.org/get')
|
||||
expect(_proxyConnects).toEqual(['httpbin.org:80'])
|
||||
})
|
||||
|
||||
it('HttoClient does basic http get request when bypass proxy', async () => {
|
||||
process.env['http_proxy'] = _proxyUrl
|
||||
process.env['no_proxy'] = 'httpbin.org'
|
||||
const httpClient = new httpm.HttpClient()
|
||||
let res: httpm.HttpClientResponse = await httpClient.get(
|
||||
'http://httpbin.org/get'
|
||||
)
|
||||
expect(res.message.statusCode).toBe(200)
|
||||
let body: string = await res.readBody()
|
||||
let obj: any = JSON.parse(body)
|
||||
expect(obj.url).toBe('http://httpbin.org/get')
|
||||
expect(_proxyConnects).toHaveLength(0)
|
||||
})
|
||||
|
||||
it('HttpClient does basic https get request through proxy', async () => {
|
||||
process.env['https_proxy'] = _proxyUrl
|
||||
const httpClient = new httpm.HttpClient()
|
||||
let res: httpm.HttpClientResponse = await httpClient.get(
|
||||
'https://httpbin.org/get'
|
||||
)
|
||||
expect(res.message.statusCode).toBe(200)
|
||||
let body: string = await res.readBody()
|
||||
let obj: any = JSON.parse(body)
|
||||
expect(obj.url).toBe('https://httpbin.org/get')
|
||||
expect(_proxyConnects).toEqual(['httpbin.org:443'])
|
||||
})
|
||||
|
||||
it('HttpClient does basic https get request when bypass proxy', async () => {
|
||||
process.env['https_proxy'] = _proxyUrl
|
||||
process.env['no_proxy'] = 'httpbin.org'
|
||||
const httpClient = new httpm.HttpClient()
|
||||
let res: httpm.HttpClientResponse = await httpClient.get(
|
||||
'https://httpbin.org/get'
|
||||
)
|
||||
expect(res.message.statusCode).toBe(200)
|
||||
let body: string = await res.readBody()
|
||||
let obj: any = JSON.parse(body)
|
||||
expect(obj.url).toBe('https://httpbin.org/get')
|
||||
expect(_proxyConnects).toHaveLength(0)
|
||||
})
|
||||
})
|
||||
|
||||
function _clearVars() {
|
||||
delete process.env.http_proxy;
|
||||
delete process.env.HTTP_PROXY;
|
||||
delete process.env.https_proxy;
|
||||
delete process.env.HTTPS_PROXY;
|
||||
delete process.env.no_proxy;
|
||||
delete process.env.NO_PROXY;
|
||||
}
|
||||
delete process.env.http_proxy
|
||||
delete process.env.HTTP_PROXY
|
||||
delete process.env.https_proxy
|
||||
delete process.env.HTTPS_PROXY
|
||||
delete process.env.no_proxy
|
||||
delete process.env.NO_PROXY
|
||||
}
|
||||
|
117
auth.ts
117
auth.ts
@ -1,71 +1,86 @@
|
||||
|
||||
import ifm = require('./interfaces');
|
||||
import ifm = require('./interfaces')
|
||||
|
||||
export class BasicCredentialHandler implements ifm.IRequestHandler {
|
||||
username: string;
|
||||
password: string;
|
||||
username: string
|
||||
password: string
|
||||
|
||||
constructor(username: string, password: string) {
|
||||
this.username = username;
|
||||
this.password = password;
|
||||
}
|
||||
constructor(username: string, password: string) {
|
||||
this.username = username
|
||||
this.password = password
|
||||
}
|
||||
|
||||
prepareRequest(options:any): void {
|
||||
options.headers['Authorization'] = 'Basic ' + Buffer.from(this.username + ':' + this.password).toString('base64');
|
||||
}
|
||||
prepareRequest(options: any): void {
|
||||
options.headers['Authorization'] =
|
||||
'Basic ' +
|
||||
Buffer.from(this.username + ':' + this.password).toString('base64')
|
||||
}
|
||||
|
||||
// This handler cannot handle 401
|
||||
canHandleAuthentication(response: ifm.IHttpClientResponse): boolean {
|
||||
return false;
|
||||
}
|
||||
// This handler cannot handle 401
|
||||
canHandleAuthentication(response: ifm.IHttpClientResponse): boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
handleAuthentication(httpClient: ifm.IHttpClient, requestInfo: ifm.IRequestInfo, objs): Promise<ifm.IHttpClientResponse> {
|
||||
return null;
|
||||
}
|
||||
handleAuthentication(
|
||||
httpClient: ifm.IHttpClient,
|
||||
requestInfo: ifm.IRequestInfo,
|
||||
objs
|
||||
): Promise<ifm.IHttpClientResponse> {
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
export class BearerCredentialHandler implements ifm.IRequestHandler {
|
||||
token: string;
|
||||
token: string
|
||||
|
||||
constructor(token: string) {
|
||||
this.token = token;
|
||||
}
|
||||
constructor(token: string) {
|
||||
this.token = token
|
||||
}
|
||||
|
||||
// currently implements pre-authorization
|
||||
// TODO: support preAuth = false where it hooks on 401
|
||||
prepareRequest(options:any): void {
|
||||
options.headers['Authorization'] = 'Bearer ' + this.token;
|
||||
}
|
||||
// currently implements pre-authorization
|
||||
// TODO: support preAuth = false where it hooks on 401
|
||||
prepareRequest(options: any): void {
|
||||
options.headers['Authorization'] = 'Bearer ' + this.token
|
||||
}
|
||||
|
||||
// This handler cannot handle 401
|
||||
canHandleAuthentication(response: ifm.IHttpClientResponse): boolean {
|
||||
return false;
|
||||
}
|
||||
// This handler cannot handle 401
|
||||
canHandleAuthentication(response: ifm.IHttpClientResponse): boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
handleAuthentication(httpClient: ifm.IHttpClient, requestInfo: ifm.IRequestInfo, objs): Promise<ifm.IHttpClientResponse> {
|
||||
return null;
|
||||
}
|
||||
handleAuthentication(
|
||||
httpClient: ifm.IHttpClient,
|
||||
requestInfo: ifm.IRequestInfo,
|
||||
objs
|
||||
): Promise<ifm.IHttpClientResponse> {
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
export class PersonalAccessTokenCredentialHandler implements ifm.IRequestHandler {
|
||||
token: string;
|
||||
export class PersonalAccessTokenCredentialHandler
|
||||
implements ifm.IRequestHandler {
|
||||
token: string
|
||||
|
||||
constructor(token: string) {
|
||||
this.token = token;
|
||||
}
|
||||
constructor(token: string) {
|
||||
this.token = token
|
||||
}
|
||||
|
||||
// currently implements pre-authorization
|
||||
// TODO: support preAuth = false where it hooks on 401
|
||||
prepareRequest(options:any): void {
|
||||
options.headers['Authorization'] = 'Basic ' + Buffer.from('PAT:' + this.token).toString('base64');
|
||||
}
|
||||
// currently implements pre-authorization
|
||||
// TODO: support preAuth = false where it hooks on 401
|
||||
prepareRequest(options: any): void {
|
||||
options.headers['Authorization'] =
|
||||
'Basic ' + Buffer.from('PAT:' + this.token).toString('base64')
|
||||
}
|
||||
|
||||
// This handler cannot handle 401
|
||||
canHandleAuthentication(response: ifm.IHttpClientResponse): boolean {
|
||||
return false;
|
||||
}
|
||||
// This handler cannot handle 401
|
||||
canHandleAuthentication(response: ifm.IHttpClientResponse): boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
handleAuthentication(httpClient: ifm.IHttpClient, requestInfo: ifm.IRequestInfo, objs): Promise<ifm.IHttpClientResponse> {
|
||||
return null;
|
||||
}
|
||||
handleAuthentication(
|
||||
httpClient: ifm.IHttpClient,
|
||||
requestInfo: ifm.IRequestInfo,
|
||||
objs
|
||||
): Promise<ifm.IHttpClientResponse> {
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
116
interfaces.ts
116
interfaces.ts
@ -1,55 +1,99 @@
|
||||
import http = require("http");
|
||||
import url = require("url");
|
||||
import http = require('http')
|
||||
import url = require('url')
|
||||
|
||||
export interface IHeaders { [key: string]: any };
|
||||
export interface IHeaders {
|
||||
[key: string]: any
|
||||
}
|
||||
|
||||
export interface IHttpClient {
|
||||
options(requestUrl: string, additionalHeaders?: IHeaders): Promise<IHttpClientResponse>;
|
||||
get(requestUrl: string, additionalHeaders?: IHeaders): Promise<IHttpClientResponse>;
|
||||
del(requestUrl: string, additionalHeaders?: IHeaders): Promise<IHttpClientResponse>;
|
||||
post(requestUrl: string, data: string, additionalHeaders?: IHeaders): Promise<IHttpClientResponse>;
|
||||
patch(requestUrl: string, data: string, additionalHeaders?: IHeaders): Promise<IHttpClientResponse>;
|
||||
put(requestUrl: string, data: string, additionalHeaders?: IHeaders): Promise<IHttpClientResponse>;
|
||||
sendStream(verb: string, requestUrl: string, stream: NodeJS.ReadableStream, additionalHeaders?: IHeaders): Promise<IHttpClientResponse>;
|
||||
request(verb: string, requestUrl: string, data: string | NodeJS.ReadableStream, headers: IHeaders): Promise<IHttpClientResponse>;
|
||||
requestRaw(info: IRequestInfo, data: string | NodeJS.ReadableStream): Promise<IHttpClientResponse>;
|
||||
requestRawWithCallback(info: IRequestInfo, data: string | NodeJS.ReadableStream, onResult: (err: any, res: IHttpClientResponse) => void): void;
|
||||
options(
|
||||
requestUrl: string,
|
||||
additionalHeaders?: IHeaders
|
||||
): Promise<IHttpClientResponse>
|
||||
get(
|
||||
requestUrl: string,
|
||||
additionalHeaders?: IHeaders
|
||||
): Promise<IHttpClientResponse>
|
||||
del(
|
||||
requestUrl: string,
|
||||
additionalHeaders?: IHeaders
|
||||
): Promise<IHttpClientResponse>
|
||||
post(
|
||||
requestUrl: string,
|
||||
data: string,
|
||||
additionalHeaders?: IHeaders
|
||||
): Promise<IHttpClientResponse>
|
||||
patch(
|
||||
requestUrl: string,
|
||||
data: string,
|
||||
additionalHeaders?: IHeaders
|
||||
): Promise<IHttpClientResponse>
|
||||
put(
|
||||
requestUrl: string,
|
||||
data: string,
|
||||
additionalHeaders?: IHeaders
|
||||
): Promise<IHttpClientResponse>
|
||||
sendStream(
|
||||
verb: string,
|
||||
requestUrl: string,
|
||||
stream: NodeJS.ReadableStream,
|
||||
additionalHeaders?: IHeaders
|
||||
): Promise<IHttpClientResponse>
|
||||
request(
|
||||
verb: string,
|
||||
requestUrl: string,
|
||||
data: string | NodeJS.ReadableStream,
|
||||
headers: IHeaders
|
||||
): Promise<IHttpClientResponse>
|
||||
requestRaw(
|
||||
info: IRequestInfo,
|
||||
data: string | NodeJS.ReadableStream
|
||||
): Promise<IHttpClientResponse>
|
||||
requestRawWithCallback(
|
||||
info: IRequestInfo,
|
||||
data: string | NodeJS.ReadableStream,
|
||||
onResult: (err: any, res: IHttpClientResponse) => void
|
||||
): void
|
||||
}
|
||||
|
||||
export interface IRequestHandler {
|
||||
prepareRequest(options: http.RequestOptions): void;
|
||||
canHandleAuthentication(response: IHttpClientResponse): boolean;
|
||||
handleAuthentication(httpClient: IHttpClient, requestInfo: IRequestInfo, objs): Promise<IHttpClientResponse>;
|
||||
prepareRequest(options: http.RequestOptions): void
|
||||
canHandleAuthentication(response: IHttpClientResponse): boolean
|
||||
handleAuthentication(
|
||||
httpClient: IHttpClient,
|
||||
requestInfo: IRequestInfo,
|
||||
objs
|
||||
): Promise<IHttpClientResponse>
|
||||
}
|
||||
|
||||
export interface IHttpClientResponse {
|
||||
message: http.IncomingMessage;
|
||||
readBody(): Promise<string>;
|
||||
message: http.IncomingMessage
|
||||
readBody(): Promise<string>
|
||||
}
|
||||
|
||||
export interface IRequestInfo {
|
||||
options: http.RequestOptions;
|
||||
parsedUrl: url.Url;
|
||||
httpModule: any;
|
||||
options: http.RequestOptions
|
||||
parsedUrl: url.Url
|
||||
httpModule: any
|
||||
}
|
||||
|
||||
export interface IRequestOptions {
|
||||
headers?: IHeaders;
|
||||
socketTimeout?: number;
|
||||
ignoreSslError?: boolean;
|
||||
allowRedirects?: boolean;
|
||||
allowRedirectDowngrade?: boolean;
|
||||
maxRedirects?: number;
|
||||
maxSockets?: number;
|
||||
keepAlive?: boolean;
|
||||
deserializeDates?: boolean;
|
||||
// Allows retries only on Read operations (since writes may not be idempotent)
|
||||
allowRetries?: boolean;
|
||||
maxRetries?: number;
|
||||
headers?: IHeaders
|
||||
socketTimeout?: number
|
||||
ignoreSslError?: boolean
|
||||
allowRedirects?: boolean
|
||||
allowRedirectDowngrade?: boolean
|
||||
maxRedirects?: number
|
||||
maxSockets?: number
|
||||
keepAlive?: boolean
|
||||
deserializeDates?: boolean
|
||||
// Allows retries only on Read operations (since writes may not be idempotent)
|
||||
allowRetries?: boolean
|
||||
maxRetries?: number
|
||||
}
|
||||
|
||||
export interface ITypedResponse<T> {
|
||||
statusCode: number,
|
||||
result: T | null,
|
||||
headers: Object
|
||||
statusCode: number
|
||||
result: T | null
|
||||
headers: Object
|
||||
}
|
||||
|
2
package-lock.json
generated
2
package-lock.json
generated
@ -3416,7 +3416,7 @@
|
||||
"prettier": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.0.4.tgz",
|
||||
"integrity": "sha512-SVJIQ51spzFDvh4fIbCLvciiDMCrRhlN3mbZvv/+ycjvmF5E73bKdGfU8QDLNmjYJf+lsGnDBC4UUnvTe5OO0w==",
|
||||
"integrity": "sha1-LRuuFz41WZbuNV7Jgwp6HuBUV+8=",
|
||||
"dev": true
|
||||
},
|
||||
"pretty-format": {
|
||||
|
@ -6,8 +6,8 @@
|
||||
"scripts": {
|
||||
"build": "rm -Rf ./_out && tsc && cp package*.json ./_out && cp *.md ./_out && cp LICENSE ./_out && cp actions.png ./_out",
|
||||
"test": "jest",
|
||||
"format": "prettier --write packages/**/*.ts",
|
||||
"format-check": "prettier --check packages/**/*.ts",
|
||||
"format": "prettier --write *.ts && prettier --write **/*.ts",
|
||||
"format-check": "prettier --check *.ts && prettier --check **/*.ts",
|
||||
"audit-check": "npm audit --audit-level=moderate"
|
||||
},
|
||||
"repository": {
|
||||
|
107
proxy.ts
107
proxy.ts
@ -1,65 +1,62 @@
|
||||
import * as url from 'url';
|
||||
import * as url from 'url'
|
||||
|
||||
export function getProxyUrl(reqUrl: url.Url): url.Url | undefined {
|
||||
let usingSsl = reqUrl.protocol === 'https:';
|
||||
let usingSsl = reqUrl.protocol === 'https:'
|
||||
|
||||
let proxyUrl: url.Url;
|
||||
if (checkBypass(reqUrl)) {
|
||||
return proxyUrl;
|
||||
}
|
||||
let proxyUrl: url.Url
|
||||
if (checkBypass(reqUrl)) {
|
||||
return proxyUrl
|
||||
}
|
||||
|
||||
let proxyVar: string;
|
||||
if (usingSsl) {
|
||||
proxyVar = process.env["https_proxy"] ||
|
||||
process.env["HTTPS_PROXY"];
|
||||
|
||||
} else {
|
||||
proxyVar = process.env["http_proxy"] ||
|
||||
process.env["HTTP_PROXY"];
|
||||
}
|
||||
let proxyVar: string
|
||||
if (usingSsl) {
|
||||
proxyVar = process.env['https_proxy'] || process.env['HTTPS_PROXY']
|
||||
} else {
|
||||
proxyVar = process.env['http_proxy'] || process.env['HTTP_PROXY']
|
||||
}
|
||||
|
||||
if (proxyVar) {
|
||||
proxyUrl = url.parse(proxyVar);
|
||||
}
|
||||
if (proxyVar) {
|
||||
proxyUrl = url.parse(proxyVar)
|
||||
}
|
||||
|
||||
return proxyUrl;
|
||||
return proxyUrl
|
||||
}
|
||||
|
||||
|
||||
export function checkBypass(reqUrl: url.Url): boolean {
|
||||
if (!reqUrl.hostname) {
|
||||
return false
|
||||
}
|
||||
|
||||
let noProxy = process.env["no_proxy"] || process.env["NO_PROXY"] || '';
|
||||
if (!noProxy) {
|
||||
return false
|
||||
}
|
||||
|
||||
// Determine the request port
|
||||
let reqPort: number
|
||||
if (reqUrl.port) {
|
||||
reqPort = Number(reqUrl.port)
|
||||
}
|
||||
else if (reqUrl.protocol === 'http:') {
|
||||
reqPort = 80
|
||||
}
|
||||
else if (reqUrl.protocol === 'https:') {
|
||||
reqPort = 443
|
||||
}
|
||||
|
||||
// Format the request hostname and hostname with port
|
||||
let upperReqHosts = [reqUrl.hostname.toUpperCase()]
|
||||
if (typeof reqPort === 'number') {
|
||||
upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`)
|
||||
}
|
||||
|
||||
// Compare request host against noproxy
|
||||
for (let upperNoProxyItem of noProxy.split(',').map(x => x.trim().toUpperCase()).filter(x => x)) {
|
||||
if (upperReqHosts.some(x => x === upperNoProxyItem)) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
if (!reqUrl.hostname) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
let noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || ''
|
||||
if (!noProxy) {
|
||||
return false
|
||||
}
|
||||
|
||||
// Determine the request port
|
||||
let reqPort: number
|
||||
if (reqUrl.port) {
|
||||
reqPort = Number(reqUrl.port)
|
||||
} else if (reqUrl.protocol === 'http:') {
|
||||
reqPort = 80
|
||||
} else if (reqUrl.protocol === 'https:') {
|
||||
reqPort = 443
|
||||
}
|
||||
|
||||
// Format the request hostname and hostname with port
|
||||
let upperReqHosts = [reqUrl.hostname.toUpperCase()]
|
||||
if (typeof reqPort === 'number') {
|
||||
upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`)
|
||||
}
|
||||
|
||||
// Compare request host against noproxy
|
||||
for (let upperNoProxyItem of noProxy
|
||||
.split(',')
|
||||
.map(x => x.trim().toUpperCase())
|
||||
.filter(x => x)) {
|
||||
if (upperReqHosts.some(x => x === upperNoProxyItem)) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user