UNPKG

node-onesky-utils

Version:

Node.js utils for working with OneSky translation service. Original package from @brainly/onesky-utils

108 lines (98 loc) 2.83 kB
'use strict' module.exports = { getDevHash: _getDevHash, handleError: _handleError, makeRequest: _makeRequest } var md5 = require('md5') var axios = require('axios') /** * @param {String} secret * @return {Object} * @private */ function _getDevHash(secret) { var timestamp = Math.floor(Date.now() / 1000) return { devHash: md5(timestamp + secret), timestamp: timestamp } } /** * @param {String|Object} options URL to get from or object with request config * @param {String} message Error message * @private */ function _makeRequest(options, message) { // Convert request-promise options to axios options const axiosOptions = { method: options.method, url: options.url, headers: options.headers || {}, params: options.qs, }; // Handle data differently based on type if (options.data) { // If data is already provided (from our form-data implementation) axiosOptions.data = options.data; } else if (options.formData) { // Legacy formData support axiosOptions.data = options.formData; } else if (options.body) { // Handle body if provided axiosOptions.data = options.body; } if (options.json) { axiosOptions.responseType = 'json'; } return axios(axiosOptions) .then(response => { // Handle cases where request-promise might have returned the body directly if (options.json && response.data) { return response.data; } return response.data; }) .catch(error => { // Adapt error handling to match the previous structure if possible const customError = { message: message, code: error.response ? error.response.status : 500, details: error.response ? error.response.data : error.message }; return _handleError(message, { response: { body: JSON.stringify(customError.details || {}) } }); }); } /** * @param {Object} data * @private */ function _handleError(message, data) { var error = {} return new Promise(function (resolve, reject) { try { var content = JSON.parse(data.response.body) if (content.meta) { error.message = content.meta.message error.code = content.meta.status } else if (content.message && content.code) { // Check if content has message and code (axios error structure) error.message = content.message error.code = content.code } else { error.message = message // Fallback message error.code = data.response && data.response.statusCode ? data.response.statusCode : 500 } } catch (e) { error.message = message error.code = data.response && data.response.statusCode ? data.response.statusCode : 500 } reject(error) }) }