@elastic.io/odata-library
Version:
Re-usable OData client library
58 lines (48 loc) • 2.02 kB
JavaScript
/* eslint-disable no-param-reassign, no-underscore-dangle, class-methods-use-this */
const { promisify } = require('util');
const request = promisify(require('request'));
const removeTrailingSlash = require('remove-trailing-slash');
const removeLeadingSlash = require('remove-leading-slash');
const debug = require('debug')('statelessAuthenticationRestClients');
module.exports = class NoAuthRestClient {
constructor(emitter, cfg) {
this.emitter = emitter;
this.cfg = cfg;
}
// eslint-disable-next-line no-unused-vars
_addAuthenticationToRequestOptions(requestOptions) {}
_handleRestResponse(response) {
if (response.statusCode >= 400) {
throw new Error(`Error in making request to ${response.request.uri.href} Status code: ${response.statusCode}, Body: ${JSON.stringify(response.body)}`);
}
debug(`Response statusCode: ${response.statusCode}`);
return response.body;
}
// options expects the following sub-variables:
// url: Url to call
// method: HTTP verb to use
// body: Body of the request, if applicable. Defaults to undefined.
// headers: Any HTTP headers to add to the request. Defaults to {}
// urlIsSegment: Whether to append to the base server url or
// if the provided URL is an absolute path. Defaults to true
async makeRequest(options) {
const {
url, method, body, headers = {}, urlIsSegment = true, isJson = true,
} = options;
const urlToCall = urlIsSegment
? `${removeTrailingSlash(this.cfg.resourceServerUrl.trim())}/${removeLeadingSlash(url.trim())}` // Trim trailing or leading '/'
: url.trim();
debug(`Making ${method} request...`);
const requestOptions = {
url: urlToCall,
method,
json: isJson,
body,
headers,
};
// eslint-disable-next-line no-underscore-dangle
await this._addAuthenticationToRequestOptions(requestOptions);
const response = await request(requestOptions);
return this._handleRestResponse(response);
}
};