node-red-contrib-smartnora
Version:
Google Smart Home integration via Smart Nora https://smart-nora.eu/
64 lines (63 loc) • 2.11 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.fetch = fetch;
const https_1 = require("https");
const zlib_1 = require("zlib");
async function fetch(url, { method, agent, headers, body }) {
const bodyContent = body ? await new Promise((resolve, reject) => {
const jsonContent = Buffer.from(JSON.stringify(body));
(0, zlib_1.gzip)(jsonContent, (err, result) => {
if (err) {
reject(err);
}
else {
resolve(result);
}
});
}) : null;
return new Promise((resolve, reject) => {
const uri = new URL(url);
const req = (0, https_1.request)({
hostname: uri.hostname,
path: uri.pathname + uri.search,
port: uri.port,
method,
agent,
headers: Object.assign(Object.assign({}, headers), (bodyContent ? {
'content-type': 'application/json',
'content-length': bodyContent.length,
'content-encoding': 'gzip'
} : {})),
}, res => {
const responseText = new Promise((resolveResponse, rejectResponse) => {
const data = [];
res.on('data', chunk => {
data.push(chunk);
});
res.on('end', () => {
const text = Buffer.concat(data).toString();
resolveResponse(text);
});
res.on('error', err => {
rejectResponse(err);
});
});
const status = res.statusCode || 0;
resolve({
status,
ok: Math.floor(status / 100) === 2,
text: () => responseText,
json: () => responseText.then(v => JSON.parse(v)),
});
});
req.on('error', error => {
reject(error);
});
if (bodyContent) {
req.end(bodyContent);
}
else {
req.end();
}
});
}