UNPKG

3.49 kBJavaScriptView Raw
1"use strict";
2var __importDefault = (this && this.__importDefault) || function (mod) {
3 return (mod && mod.__esModule) ? mod : { "default": mod };
4};
5Object.defineProperty(exports, "__esModule", { value: true });
6exports.Agent = exports.toHeader = void 0;
7var axios_1 = __importDefault(require("axios"));
8var core_interface_1 = require("@ideal-postcodes/core-interface");
9var
10/**
11 * Ideal Postcodes base error class implemented in [core-interface](https://core-interface.ideal-postcodes.dev/classes/idealpostcodeserror.html)
12 */
13IdealPostcodesError = core_interface_1.errors.IdealPostcodesError;
14/**
15 * Converts a Got header object to one that can be used by the client
16 *
17 * @hidden
18 */
19var toHeader = function (gotHeaders) {
20 return Object.keys(gotHeaders).reduce(function (headers, key) {
21 var val = gotHeaders[key];
22 if (typeof val === "string") {
23 headers[key] = val;
24 }
25 else if (Array.isArray(val)) {
26 headers[key] = val.join(",");
27 }
28 return headers;
29 }, {});
30};
31exports.toHeader = toHeader;
32/**
33 * Adapts got responses to a format consumable by core-interface
34 *
35 * @hidden
36 */
37var toHttpResponse = function (httpRequest, response) { return ({
38 httpRequest: httpRequest,
39 body: response.data,
40 httpStatus: response.status || 0,
41 header: (0, exports.toHeader)(response.headers),
42 metadata: { response: response },
43}); };
44/**
45 * Catch non-response errors (e.g. network failure, DNS failure, timeout)
46 * wrap in our Error class and return
47 *
48 * @hidden
49 */
50var handleError = function (error) {
51 var idpcError = new IdealPostcodesError({
52 message: "[".concat(error.name, "] ").concat(error.message),
53 httpStatus: 0,
54 metadata: { axios: error },
55 });
56 return Promise.reject(idpcError);
57};
58// Don't throw errors for any HTTP status code
59// Allow core-interface to absorb these and emit own errors
60var validateStatus = function () { return true; };
61/**
62 * Agent
63 *
64 * @hidden
65 */
66var Agent = /** @class */ (function () {
67 function Agent() {
68 this.Axios = axios_1.default.create({ validateStatus: validateStatus });
69 }
70 Agent.prototype.requestWithBody = function (httpRequest) {
71 var body = httpRequest.body, method = httpRequest.method, timeout = httpRequest.timeout, url = httpRequest.url, header = httpRequest.header, query = httpRequest.query;
72 return this.Axios.request({
73 url: url,
74 method: method,
75 headers: header,
76 params: query,
77 data: body,
78 timeout: timeout,
79 })
80 .then(function (response) { return toHttpResponse(httpRequest, response); })
81 .catch(handleError);
82 };
83 Agent.prototype.request = function (httpRequest) {
84 var method = httpRequest.method, timeout = httpRequest.timeout, url = httpRequest.url, header = httpRequest.header, query = httpRequest.query;
85 return this.Axios.request({
86 url: url,
87 method: method,
88 headers: header,
89 params: query,
90 timeout: timeout,
91 })
92 .then(function (response) { return toHttpResponse(httpRequest, response); })
93 .catch(handleError);
94 };
95 Agent.prototype.http = function (httpRequest) {
96 if (httpRequest.body !== undefined)
97 return this.requestWithBody(httpRequest);
98 return this.request(httpRequest);
99 };
100 return Agent;
101}());
102exports.Agent = Agent;