@ideal-postcodes/core-axios
Version:
Axios based client for api.ideal-postcodes.co.uk
103 lines (102 loc) • 3.49 kB
JavaScript
;
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;