import { getCookie, setCookie } from 'cookies-next'; import axios from 'axios'; import { getAuth } from './auth'; const renewToken = async () => { let token = await axios.get(process.env.SELF_HOST + '/api/token'); setCookie('token', token.data); return token.data; }; const getToken = async () => { let token = getCookie('token'); if (token == undefined) token = await renewToken(); return token; }; let connectionTry = 0; const apiOdoo = async (method, url, data = {}, headers = {}) => { try { connectionTry++; let token = await getToken(); let axiosParameter = { method, url: process.env.ODOO_HOST + url, headers: {'Authorization': token, ...headers} } const auth = getAuth(); if (auth) axiosParameter.headers['Token'] = auth.token; if (method.toUpperCase() == 'POST') axiosParameter.headers['Content-Type'] = 'application/x-www-form-urlencoded'; if (Object.keys(data).length > 0) axiosParameter.data = new URLSearchParams(Object.entries(data)).toString(); let res = await axios(axiosParameter); if (res.data.status.code == 401 && connectionTry < 15) { await renewToken(); return apiOdoo(method, url, data, headers); } return res.data.result || []; } catch (error) { console.log(error) } } export default apiOdoo;