deputy-timesheet/app/request.js
2023-03-14 18:29:01 +01:00

64 lines
1.4 KiB
JavaScript

const { net } = require('electron');
async function get(url, headers) {
return request({ url, method: 'GET', headers })
}
async function post(url, body, headers) {
return request({ url, method: 'POST', headers }, body)
}
async function request(options, body) {
return new Promise((resolve, reject) => {
const responseBody = [];
let responseHeaders;
let responseStatus;
const request = net.request(options);
request.on('response', (response) => {
responseStatus = response.statusCode;
responseHeaders = response.headers;
response.on('data', (chunk) => {
if (chunk) {
responseBody.push(`${chunk}`);
}
});
response.on('end', () => {
resolve({
status: responseStatus,
headers: responseHeaders,
body: parseReponseBody(responseBody),
});
});
response.on('aborted', () => console.log('request aborted'));
response.on('error', (error) => reject(error));
});
request.on('error', (error) => reject(error));
request.setHeader('Content-Type', 'application/json');
if (['POST'].includes(options.method.toUpperCase())) {
request.write(JSON.stringify(body), 'utf-8')
}
request.end();
});
}
function parseReponseBody(body) {
if (Array.isArray(body)) {
if (body.length) {
return JSON.parse(body.join(''));
}
}
}
module.exports = {
get,
post
};