UNPKG

node-red-contrib-smartnora

Version:

Google Smart Home integration via Smart Nora https://smart-nora.eu/

64 lines (63 loc) 2.11 kB
"use strict"; 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(); } }); }