UNPKG

@ideal-postcodes/core-axios

Version:

Axios based client for api.ideal-postcodes.co.uk

103 lines (102 loc) 3.49 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Agent = exports.toHeader = void 0; var axios_1 = __importDefault(require("axios")); var core_interface_1 = require("@ideal-postcodes/core-interface"); var /** * Ideal Postcodes base error class implemented in [core-interface](https://core-interface.ideal-postcodes.dev/classes/idealpostcodeserror.html) */ IdealPostcodesError = core_interface_1.errors.IdealPostcodesError; /** * Converts a Got header object to one that can be used by the client * * @hidden */ var toHeader = function (gotHeaders) { return Object.keys(gotHeaders).reduce(function (headers, key) { var val = gotHeaders[key]; if (typeof val === "string") { headers[key] = val; } else if (Array.isArray(val)) { headers[key] = val.join(","); } return headers; }, {}); }; exports.toHeader = toHeader; /** * Adapts got responses to a format consumable by core-interface * * @hidden */ var toHttpResponse = function (httpRequest, response) { return ({ httpRequest: httpRequest, body: response.data, httpStatus: response.status || 0, header: (0, exports.toHeader)(response.headers), metadata: { response: response }, }); }; /** * Catch non-response errors (e.g. network failure, DNS failure, timeout) * wrap in our Error class and return * * @hidden */ var handleError = function (error) { var idpcError = new IdealPostcodesError({ message: "[".concat(error.name, "] ").concat(error.message), httpStatus: 0, metadata: { axios: error }, }); return Promise.reject(idpcError); }; // Don't throw errors for any HTTP status code // Allow core-interface to absorb these and emit own errors var validateStatus = function () { return true; }; /** * Agent * * @hidden */ var Agent = /** @class */ (function () { function Agent() { this.Axios = axios_1.default.create({ validateStatus: validateStatus }); } Agent.prototype.requestWithBody = function (httpRequest) { var body = httpRequest.body, method = httpRequest.method, timeout = httpRequest.timeout, url = httpRequest.url, header = httpRequest.header, query = httpRequest.query; return this.Axios.request({ url: url, method: method, headers: header, params: query, data: body, timeout: timeout, }) .then(function (response) { return toHttpResponse(httpRequest, response); }) .catch(handleError); }; Agent.prototype.request = function (httpRequest) { var method = httpRequest.method, timeout = httpRequest.timeout, url = httpRequest.url, header = httpRequest.header, query = httpRequest.query; return this.Axios.request({ url: url, method: method, headers: header, params: query, timeout: timeout, }) .then(function (response) { return toHttpResponse(httpRequest, response); }) .catch(handleError); }; Agent.prototype.http = function (httpRequest) { if (httpRequest.body !== undefined) return this.requestWithBody(httpRequest); return this.request(httpRequest); }; return Agent; }()); exports.Agent = Agent;