UNPKG

@twreporter/universal-header

Version:
148 lines (141 loc) 4.74 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _get = _interopRequireDefault(require("lodash/get")); var _merge = _interopRequireDefault(require("lodash/merge")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } // lodash var _ = { get: _get["default"], merge: _merge["default"] }; /** * Refine Axios config to remain the infomative properties. * @param {Object} axiosConfig - config provied by Axios * @return {Object} - empty object or the object containing the following properties * 'url', * 'method' , * 'baseURL', * 'headers', * 'params', * 'timeout', * 'withCredentials', * 'auth', * 'responseType', * 'responseEncoding', * 'maxContentLength', * 'proxy' * * For other removed properties, * see https://github.com/axios/axios#request-config */ function refineAxiosConfig(axiosConfig) { if (_typeof(axiosConfig) === 'object' && axiosConfig !== null) { return { // request url url: axiosConfig.url, // requst method method: axiosConfig.method, // request baseURL baseURL: axiosConfig.baseURL, // request headers headers: axiosConfig.headers, // request query params params: axiosConfig.params, // request data data: axiosConfig.data, // request timeout timeout: axiosConfig.timeout, withCredentials: axiosConfig.withCredentials, auth: axiosConfig.auth, responseType: axiosConfig.responseType, responseEncoding: axiosConfig.responseEncoding, maxContentLength: axiosConfig.maxContentLength, proxy: axiosConfig.proxy }; } return {}; } /** * Axios Error object * @typedef {Error} AxiosError * @property {Function} toJSON * @property {Object} config - Axios config * @property {Object} request - Axios request * @property {Object} response- Axios response * @property {bool} isAxiosError * @property {string} message - Error message * @property {string} stack - Error stack */ /** * Refined Axios error object type definition * We only pick certain properties of Axios error to log * because of the record size limitation (250kb) of * Stackdriver logging system. * @typedef {Error} RefinedAxiosError * @property {Object} config - Refined Axios config object * @property {Object} data - Server response body * @property {Object} headers - Server response headers * @property {number} statusCode - Response status code * @property {string} message - Error message * @property {string} name - Error name */ /** * Error rejected from Axios contains many details * which we might not need. * Therefore, we need to remove those properties * to maintain a neat and informative object. * * @param {AxiosError} err - Axios Error object * @return {RefinedAxiosError} */ function refineAxiosError(err) { var config = refineAxiosConfig(_.get(err, 'config')); var data = null; var statusCode = 500; // internal server error var headers = null; var message = _.get(err, 'message'); if (err.response) { data = _.get(err, 'response.data'); statusCode = _.get(err, 'response.status'); headers = _.get(err, 'response.headers'); } else if (err.request) { message = 'A request was made but no response was received: ' + message; } else { message = 'An error occured when setting up the request: ' + message; } var refinedErr = new Error(message); refinedErr.name = 'AxiosError'; refinedErr.data = data; refinedErr.statusCode = statusCode; refinedErr.headers = headers; refinedErr.config = config; return refinedErr; } /** * error action type definition * @typedef {Object} ErrorAction * @property {string} type - Action error type * @property {RefinedAxiosError} payload */ /** * Create an action which carefully records the details about the error. * @param {AxiosError} [err={}] - Axios Error * @param {string} failActionType * @returns {ErrorAction} */ function createAxiosErrorAction() { var err = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var failActionType = arguments.length > 1 ? arguments[1] : undefined; return { type: failActionType, payload: { error: refineAxiosError(err) } }; } var _default = exports["default"] = { axios: createAxiosErrorAction };