UNPKG

clayful

Version:

JavaScript & Node.js SDK for Clayful API

79 lines (56 loc) 1.82 kB
const callbackAsPromise = require('../lib/callbackAsPromise'); const axiosRequestMiddleware = axios => (detail, ClayfulError, callback) => { const { promise, callback: c } = callbackAsPromise(callback); callback = c; // Promise -> regular fn(err, result) format const wrappedCallback = (err, result) => setTimeout(() => callback(err, result), 0); const options = { method: detail.httpMethod.toLowerCase(), url: detail.requestUrl, params: detail.query, headers: detail.headers }; if (detail.payload) { options.data = detail.payload; if (detail.usesFormData) { /** * When using `form-data` module in Node.js environment.. * References: * - https://www.npmjs.com/package/form-data * - https://github.com/mzabriskie/axios/issues/318#issuecomment-271703437 */ if (typeof options.data.getHeaders === 'function') { const headers = options.data.getHeaders(); for (const key in headers) { options.headers[key] = headers[key]; } } } } axios(options).then(response => wrappedCallback(null, { status: response.status, data: response.data, headers: response.headers }), err => { if (!err.response) { return wrappedCallback(err); } const error = new ClayfulError( detail.modelName, detail.methodName, err.response.status, err.response.headers, err.response.data.errorCode, err.response.data.message || err.response.data.error, err.response.data.validation || null ); return wrappedCallback(error); }); return promise; }; if (typeof module === 'object' && module.exports) { module.exports = axiosRequestMiddleware; } if (typeof window === 'object') { window.axiosRequestMiddleware = axiosRequestMiddleware; }