summaryrefslogtreecommitdiff
path: root/src/core/api/odooApi.js
diff options
context:
space:
mode:
authorIT Fixcomart <it@fixcomart.co.id>2023-03-01 09:18:52 +0000
committerIT Fixcomart <it@fixcomart.co.id>2023-03-01 09:18:52 +0000
commita7abbf4ddc70068620e9f44b74dc162ce2e16ee2 (patch)
tree74f66253717515d364ce74bd8275015c1f829cbc /src/core/api/odooApi.js
parent90e1edab9b6a8ccc09a49fed3addbec2cbc4e4c3 (diff)
parenta1b9b647a6c4bda1f5db63879639d44543f9557e (diff)
Merged in refactor (pull request #1)
Refactor
Diffstat (limited to 'src/core/api/odooApi.js')
-rw-r--r--src/core/api/odooApi.js49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/core/api/odooApi.js b/src/core/api/odooApi.js
new file mode 100644
index 00000000..202c355e
--- /dev/null
+++ b/src/core/api/odooApi.js
@@ -0,0 +1,49 @@
+import axios from 'axios'
+import camelcaseObjectDeep from 'camelcase-object-deep'
+import { getCookie, setCookie } from 'cookies-next'
+import { getAuth } from '../utils/auth'
+
+const renewToken = async () => {
+ let token = await axios.get(process.env.ODOO_HOST + '/api/token')
+ setCookie('token', token.data.result)
+ return token.data.result
+}
+
+const getToken = async () => {
+ let token = getCookie('token')
+ if (token == undefined) token = await renewToken()
+ return token
+}
+
+const maxConnectionAttempt = 15
+let connectionAttempt = 0
+
+const odooApi = async (method, url, data = {}, headers = {}) => {
+ connectionAttempt++
+ try {
+ let token = await getToken()
+ const auth = getAuth()
+
+ let axiosParameter = {
+ method,
+ url: process.env.ODOO_HOST + url,
+ headers: { Authorization: token, ...headers }
+ }
+ 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 && connectionAttempt < maxConnectionAttempt) {
+ await renewToken()
+ return odooApi(method, url, data, headers)
+ }
+ return camelcaseObjectDeep(res.data.result) || []
+ } catch (error) {
+ console.log(error)
+ }
+}
+
+export default odooApi