UNPKG

fetch-base64

Version:

A node package to retrieve fetch local or remote files in base64 encoding.

54 lines (51 loc) 1.53 kB
const { URL } = require('url'); const legacyUrl = require('url'); const http = require('http'); const https = require('https'); const ua = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'; module.exports = { fetch: ({ paths, headers = {} }) => { const promise = new Promise((resolve, reject) => { const uri = (paths.length > 1) ? legacyUrl.resolve(...paths) : paths[0]; let myUrl; try { myUrl = new URL(uri); } catch (e) { reject(`URL Parse error: ${e}`); } const { hostname, port, protocol, pathname } = myUrl; const headersTemp = headers; headersTemp['User-Agent'] = ua; const options = { method: 'GET', headers: headersTemp, hostname, path: pathname, port, protocol }; const agent = (options.protocol === 'https:') ? https : http; const req = agent.request(options, (res) => { if (res.statusCode !== 200) { reject(`Status code ${res.statusCode} returned when trying to fetch file`); return false; } res.setEncoding('base64'); let body = ''; res.on('data', (chunk) => { body += chunk; }); res.on('end', () => { resolve(body); req.end(); }); res.resume(); return true; }).on('error', (e) => { reject(`HTTP Request error: ${e}`); }); req.end(); }); return promise; }, };