[Polyfill > Request] Tweak Request

This commit is contained in:
Ducko 2022-01-13 13:40:06 +00:00
parent 19366fa6db
commit 3ef11ae967

View file

@ -2,42 +2,45 @@ const https = require('https');
const querystring = require("querystring"); const querystring = require("querystring");
// Generic polyfill for "request" npm package, wrapper for https // Generic polyfill for "request" npm package, wrapper for https
const nodeReq = ({ method, url, headers, qs, timeout, body, stream }) => { const nodeReq = ({ method, url, headers, qs, timeout, body, stream }) => new Promise((resolve, reject) => {
return new Promise((resolve, reject) => { const fullUrl = `${url}${qs != null ? `?${querystring.stringify(qs)}` : ''}`; // With query string
const fullUrl = `${url}${qs != null ? `?${querystring.stringify(qs)}` : ''}`; // With query string
let req; let req;
try { try {
req = https.request(fullUrl, { req = https.request(fullUrl, {
method, method,
headers, headers,
timeout timeout
}, async (res) => { }, async (res) => {
if (res.statusCode === 301 || res.statusCode === 302) { // Redirect, recall function console.log('https response', res.statusCode);
return resolve(await nodeReq({ if (res.statusCode === 301 || res.statusCode === 302) { // Redirect, recall function
url: res.headers.location, return resolve(await nodeReq({
qs: null, url: res.headers.location,
method, qs: null,
headers, method,
timeout, headers,
body, timeout,
stream body,
})); stream
} }));
}
resolve(res); resolve(res);
}); });
} catch (e) { } catch (e) {
return resolve(e); return resolve(e);
} }
req.on('error', resolve); console.log('https req');
if (body) req.write(body); // Write POST body if included req.on('error', resolve);
req.end(); if (body) req.write(body); // Write POST body if included
});
}; req.end();
console.log('https ended');
});
const request = (...args) => { // Main function const request = (...args) => { // Main function
// We have to use ...args because fun fact! request supports both: // We have to use ...args because fun fact! request supports both:
@ -78,6 +81,7 @@ const request = (...args) => { // Main function
const isError = !res.statusCode; const isError = !res.statusCode;
if (isError) { if (isError) {
console.log('[OpenAsar Request Polyfill] Error:', res);
listeners['error']?.(res); listeners['error']?.(res);
callback?.(res, null, null); // Return null for others? callback?.(res, null, null); // Return null for others?
@ -108,7 +112,6 @@ const request = (...args) => { // Main function
return ret; return ret;
}; };
['get']
// Method functions // Method functions
request.get = (url, callback) => request({ url: url, method: 'GET' }, callback); request.get = (url, callback) => request({ url: url, method: 'GET' }, callback);
request.post = (url, callback) => request({ url: url, method: 'POST' }, callback); request.post = (url, callback) => request({ url: url, method: 'POST' }, callback);
@ -119,4 +122,4 @@ request.del = request.delete; // Random shortened func because request
request.head = (url, callback) => request({ url: url, method: 'HEAD' }, callback); request.head = (url, callback) => request({ url: url, method: 'HEAD' }, callback);
request.options = (url, callback) => request({ url: url, method: 'OPTIONS' }, callback); request.options = (url, callback) => request({ url: url, method: 'OPTIONS' }, callback);
module.exports = request; module.exports = request;