trm-core
Version:
TRM (Transport Request Manager) Core
95 lines (94 loc) • 4.17 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.AXIOS_INTERNAL_HEADER = exports.AXIOS_SESSION_HEADER = void 0;
exports.getAxiosInstance = getAxiosInstance;
const axios_1 = __importDefault(require("axios"));
const util_1 = require("util");
const logger_1 = require("../logger");
const uuid_1 = require("uuid");
exports.AXIOS_SESSION_HEADER = 'X-TRM-SESSION-ID';
exports.AXIOS_INTERNAL_HEADER = 'X-TRM-REQUEST-ID';
function _getInternalId(response) {
try {
return response.request.getHeader(exports.AXIOS_INTERNAL_HEADER);
}
catch (e) {
return 'Unknown';
}
}
function getAxiosInstance(config, sCtx) {
const instance = axios_1.default.create(config);
instance.interceptors.request.use((request) => {
const internalId = (0, uuid_1.v4)();
request.headers.set(exports.AXIOS_INTERNAL_HEADER, internalId);
if (logger_1.Logger.logger instanceof logger_1.CliLogFileLogger) {
request.headers.set(exports.AXIOS_SESSION_HEADER, logger_1.Logger.logger.getSessionId());
}
var sRequest = `${request.method} ${request.baseURL}${request.url}`;
if (request.params) {
sRequest += `, parameters: ${(0, util_1.inspect)(request.params, { breakLength: Infinity, compact: true })}`;
}
if (request.headers.getAuthorization()) {
sRequest += `, authorization: HIDDEN`;
}
if (request.data) {
sRequest += `, data: ${(0, util_1.inspect)(request.data, { breakLength: Infinity, compact: true })}`;
}
logger_1.Logger.log(`${sCtx} AXIOS request ${internalId}: ${sRequest}`, true);
return request;
}, (error) => {
logger_1.Logger.error(`${sCtx} AXIOS request error: ${error}`, true);
return Promise.reject(error);
});
instance.interceptors.response.use((response) => {
const internalId = _getInternalId(response);
var sResponse = `status: ${response.status}, status text: ${response.statusText}`;
if (response.data) {
sResponse += `, data: ${(0, util_1.inspect)(response.data, { breakLength: Infinity, compact: true })}`;
}
logger_1.Logger.log(`Ending ${sCtx} AXIOS request ${internalId}: ${sResponse}`, true);
return response;
}, (error) => {
if (error.response) {
const internalId = _getInternalId(error.response);
var sError;
if (error.response.data) {
if (error.config.responseType === 'arraybuffer') {
try {
const charset = /^application\/json;.*charset=([^;]*)/i.exec(error.response.headers['content-type'])[1];
const enc = new TextDecoder(charset);
error.response.data = JSON.parse(enc.decode(error.response.data));
}
catch (e) { }
}
if (error.response.data.message && typeof (error.response.data.message) === 'string') {
sError = error.response.data.message;
}
else if (typeof (error.response.data) === 'string') {
sError = error.response.data;
}
else {
sError = error.response.statusText;
}
}
else {
sError = error.response.statusText;
}
var oError = new Error(sError);
oError.name = `Trm${sCtx}Error`;
oError.status = error.response.status;
oError.response = error.response.data || {};
oError.axiosError = error;
logger_1.Logger.error(`${sCtx} response id ${internalId} error: ${error} (${JSON.stringify(sError)})`, true);
return Promise.reject(oError);
}
else {
logger_1.Logger.error(`${sCtx} response error: ${error}`, true);
return Promise.reject(error);
}
});
return instance;
}