-
Notifications
You must be signed in to change notification settings - Fork 297
/
externalRequest.js
37 lines (33 loc) · 991 Bytes
/
externalRequest.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// @flow
import { ALLOWED_EXTERNAL_HOSTNAMES } from '../../config/urlsConfig';
export type HttpOptions = {
hostname: string,
method: string,
path?: string,
port?: number,
headers?: {
'Content-Type': string,
'Content-Length': number,
},
};
export const externalRequest = (httpOptions: HttpOptions): Promise<any> => {
return new Promise((resolve, reject) => {
if (!ALLOWED_EXTERNAL_HOSTNAMES.includes(httpOptions.hostname)) {
return reject(new Error('Hostname not allowed'));
}
const httpsRequest = global.https.request(httpOptions);
httpsRequest.on('response', response => {
let body = '';
response.on('data', chunk => {
body += chunk;
});
response.on('error', error => reject(error));
response.on('end', () => {
const parsedBody = JSON.parse(body);
return resolve(parsedBody);
});
});
httpsRequest.on('error', error => reject(error));
return httpsRequest.end();
});
};