Holy-Unblocker/src/alloyproxy/libs/requests.js
TheEmeraldStarr 27b55eb78e Minor Edits
2021-02-28 12:01:47 -08:00

142 lines
No EOL
1.8 KiB
JavaScript

const http = require('http'),
https = require('https'),
zlib = require('zlib');
module.exports = (url, options) => {
if (!options) options = {};
var request = {};
request.options = options;
var protocol;
if (url.startsWith('https://')) {
protocol = https
} else protocol = http;
return new Promise((resolve, error) => {
var req = protocol.request(url, request.options, res => {
var response = res;
response.json = new Promise(resolve => {
var body = '',
json = '';
res.on('data', chunk => body += chunk);
res.on('end', () => {
try {
json = JSON.parse(body);
} catch (err) {
json = {};
}
resolve(json);
});
});
response.text = new Promise(resolve => {
var data = '',
text = '';
res.on('data', chunk => data = chunk.toString());
res.on('end', () => {
text = data;
resolve(text);
});
});
response.buffer = new Promise(resolve => {
var buffer = [];
res.on('data', binary => {
buffer.push(binary)
}).on('end', () => {
buffer = Buffer.concat(buffer)
switch (res.headers['content-encoding']) {
case 'gzip':
case 'x-gzip':
zlib.gunzip(buffer, (err, buffer) => {
resolve(buffer);
});
break;
case 'deflate':
case 'x-deflate':
zlib.inflate(buffer, (err, buffer) => {
resolve(buffer);
});
break;
case 'br':
zlib.BrotliDecompress(buffer, (err, buffer) => {
resolve(buffer);
});
break;
default:
resolve(buffer);
break;
};
});
});
resolve(response);
});
req.on('error', err => {
error(err);
});
if (options.body) {
req.write(options.body);
req.end();
} else req.end();
});
}