Skip to content

Instantly share code, notes, and snippets.

@hamiltongabriel
Created October 20, 2020 14:30
Show Gist options
  • Save hamiltongabriel/cf3b79d077334883c637c09b3b235cbb to your computer and use it in GitHub Desktop.
Save hamiltongabriel/cf3b79d077334883c637c09b3b235cbb to your computer and use it in GitHub Desktop.
import axios from 'axios';
const URLs = {
merchant: process.env.MERCHANT_API,
order: process.env.ORDER_API,
customer: process.env.CUSTOMER_API
};
/**
* Create a new Axios instance
* @see https://github.com/mzabriskie/axios#creating-an-instance
*/
const instanceCreator = (domain, subdomain = '') => {
if (!domain || !URLs[domain]) {
throw new Error('domain is needed to instance an api');
}
const baseURLArray = [URLs[domain]];
if (subdomain) {
baseURLArray.push(subdomain);
}
const options = {
baseURL: baseURLArray.join('/')
};
// Create the interceptors callbacks
const requestInterceptorSuccess = async request => {
// adicionar os headers de autorização e x-merchantId
const token = await getIdToken();
if (token) {
request.headers['Authorization'] = await getIdToken();
}
if (request.merchantId) {
request.headers['X-MerchantId'] = request.merchantId;
}
return Promise.resolve(request);
};
/************* TRABALHAMOS ATÉ AQUI *************/
const requestInterceptorError = error => {
// tratamento de erro genérico
return Promise.reject(error);
};
const responseInterceptorSuccess = response => {
return Promise.resolve(response);
};
const responseInterceptorError = error => {
// tratamento de erro genérico
error.errorMessage = errorMessage[error.statusText];
return Promise.reject(error);
};
// Create instance and set up interceptors
const instance = axios.create(options);
instance.interceptors.request.use(
requestInterceptorSuccess,
requestInterceptorError
);
instance.interceptors.response.use(
responseInterceptorSuccess,
responseInterceptorError
);
return instance;
};
export default instanceCreator;
// EXEMPLOS DE USO
// coupons-api.js
const CouponsAPI = instanceCreator('merchant', '/coupons')
.
.
.
const response = CouponsAPI.post(`/`, {
name: 'HALLOWIN',
value: 10,
category: 'PRODUCTS_AMOUNT'
}, {
merchantId: 'xpto'
})
response.data // json
response.status // number
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment