summaryrefslogtreecommitdiff
path: root/src-migrate/libs/odooApi.ts
diff options
context:
space:
mode:
authorRafi Zadanly <zadanlyr@gmail.com>2024-01-13 10:35:22 +0700
committerRafi Zadanly <zadanlyr@gmail.com>2024-01-13 10:35:22 +0700
commitf62b2345f463695ef0f8f79830cd76b6e0332821 (patch)
treec06ff12a8312e3a02b0203f588db0f4da044c911 /src-migrate/libs/odooApi.ts
parentee0b5893ac039ab05fe8247647364a923d707da3 (diff)
Refactor src migrate folder
Diffstat (limited to 'src-migrate/libs/odooApi.ts')
-rw-r--r--src-migrate/libs/odooApi.ts81
1 files changed, 81 insertions, 0 deletions
diff --git a/src-migrate/libs/odooApi.ts b/src-migrate/libs/odooApi.ts
new file mode 100644
index 00000000..9482542b
--- /dev/null
+++ b/src-migrate/libs/odooApi.ts
@@ -0,0 +1,81 @@
+import axios, { AxiosRequestConfig, Method } from 'axios';
+import { getCookie, setCookie } from 'cookies-next';
+import { getAuth } from './auth';
+import { AuthApiProps } from '~/types/auth';
+
+const ODOO_HOST = process.env.NEXT_PUBLIC_ODOO_API_HOST as string;
+
+const renewToken = async () => {
+ let token = await axios.get(`${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: Method,
+ url: string,
+ data = {},
+ headers = {}
+): Promise<any> => {
+ connectionAttempt++;
+
+ try {
+ let token = await getToken();
+ const auth = getAuth();
+
+ let axiosParameter: AxiosRequestConfig = {
+ method,
+ url: process.env.NEXT_PUBLIC_ODOO_API_HOST + url,
+ headers: { Authorization: token, ...headers },
+ };
+
+ if (typeof auth === 'object' && 'token' in auth) {
+ axiosParameter.headers = {
+ ...axiosParameter.headers,
+ Token: auth.token,
+ };
+ }
+
+ if (method.toUpperCase() === 'POST') {
+ axiosParameter.headers = {
+ ...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);
+ const authResponse: AuthApiProps = res.data;
+
+ if (
+ authResponse.status.code == 401 &&
+ connectionAttempt < maxConnectionAttempt
+ ) {
+ await renewToken();
+ return odooApi(method, url, data, headers);
+ }
+
+ return authResponse.result || null;
+ } catch (error) {
+ console.log(error);
+ return null;
+ }
+};
+
+export default odooApi;