UNPKG

feathers-solr

Version:

A Feathers service adapter for Solr

78 lines 2.77 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.httpClient = void 0; const http_1 = __importDefault(require("http")); const https_1 = __importDefault(require("https")); const request = async (options) => { const { url, data, requestOptions, logger } = options; const { method } = requestOptions; const { protocol } = new URL(url); const transport = protocol === 'https:' ? https_1.default : http_1.default; logger({ url, data }); return new Promise((resolve, reject) => { const request = transport.request(url, { ...requestOptions, headers: method === 'GET' ? { 'Content-Type': 'application/json' } : { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(data) } }, (res) => { if (res.statusCode < 200 || res.statusCode > 299) { logger({ statusCode: res.statusCode }); return reject(new Error(`HTTP status code ${res.statusCode}`)); } const body = []; res.on('data', (chunk) => body.push(chunk)); res.on('end', () => resolve(JSON.parse(Buffer.concat(body).toString('utf8')))); }); request.on('error', (err) => { logger({ err }); reject(err); }); request.on('timeout', () => { request.destroy(); logger('timeout'); reject(new Error('timed out')); }); if (data) request.write(data); request.end(); }); }; const httpClient = (hostname, requestOptions = {}, logger = () => { }) => { function getUrl({ resource, params }) { const url = `${hostname}${resource}`; return !params || !Object.keys(params).length ? url : `${url}?${new URLSearchParams(params)}`; } async function get(resource, options) { const { params } = options; return await request({ url: getUrl({ resource, params }), requestOptions: { ...requestOptions, method: 'GET' }, logger }); } async function post(resource, options) { const { params, data } = options; return await request({ url: getUrl({ resource, params }), data: JSON.stringify(data), requestOptions: { ...requestOptions, method: 'POST' }, logger }); } return { get, post }; }; exports.httpClient = httpClient; //# sourceMappingURL=httpClient.js.map