-
Notifications
You must be signed in to change notification settings - Fork 53
Expand file tree
/
Copy pathfetchDownloadSourceUrlAsync.js
More file actions
71 lines (66 loc) · 1.88 KB
/
fetchDownloadSourceUrlAsync.js
File metadata and controls
71 lines (66 loc) · 1.88 KB
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
const https = require('https'),
fs = require('fs'),
HttpsProxyAgent = require('https-proxy-agent'),
{ isUndefined } = require('./util'),
version = require('../package.json').version;
const packageName = 'browserstack-local-nodejs';
function fetchDownloadSourceUrlAsync(authToken, bsHost, downloadFallback, downloadErrorMessage, proxyHost, proxyPort, useCaCertificate, callback) {
let body = '', data = {'auth_token': authToken};
const userAgent = [packageName, version].join('/');
const options = {
hostname: !isUndefined(bsHost) ? bsHost : 'local.browserstack.com',
port: 443,
path: '/binary/api/v1/endpoint',
method: 'POST',
headers: {
'Content-Type': 'application/json',
'user-agent': userAgent
}
};
if (downloadFallback == 'true') {
options.headers['X-Local-Fallback-Cloudflare'] = true;
data['error_message'] = downloadErrorMessage;
}
if(!isUndefined(proxyHost) && !isUndefined(proxyPort)) {
options.agent = new HttpsProxyAgent({
host: proxyHost,
port: proxyPort
});
}
if (!isUndefined(useCaCertificate)) {
try {
options.ca = fs.readFileSync(useCaCertificate);
} catch(err) {
console.log('failed to read cert file', err);
}
}
const req = https.request(options, res => {
res.on('data', d => {
body += d;
});
res.on('end', () => {
try {
const reqBody = JSON.parse(body);
if(reqBody.error) {
throw reqBody.error;
}
console.log(reqBody.data.endpoint);
callback(null, reqBody.data.endpoint);
} catch (e) {
console.error(e);
callback(e);
}
});
res.on('error', (err) => {
console.error(err);
callback(err);
});
});
req.on('error', e => {
console.error(e);
callback(e);
});
req.write(JSON.stringify(data));
req.end();
}
module.exports = fetchDownloadSourceUrlAsync;