UNPKG

trm-core

Version:

TRM (Transport Request Manager) Core

95 lines (94 loc) 4.17 kB
"use strict"; 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; }