feathers-solr
Version:
A Feathers service adapter for Solr
78 lines • 2.77 kB
JavaScript
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
;