UNPKG

@elastic.io/odata-library

Version:
58 lines (48 loc) 2.02 kB
/* 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); } };