Files
gochat/frontend/app/javascript/dashboard/helper/APIHelper.js
T
rogee ca2a3c2dee
Build and publish Docker images / Build and publish images (push) Successful in 2m35s
fix: localize API error messages
2026-09-14 14:40:49 +08:00

58 lines
1.6 KiB
JavaScript

import Auth from '../api/auth';
import { parseAPIErrorResponse } from '../store/utils/api';
const parseErrorCode = error => {
if (error && typeof error === 'object') {
error.message = parseAPIErrorResponse(error);
}
return Promise.reject(error);
};
const AUTH_HEADERS = ['access-token', 'token-type', 'client', 'expiry', 'uid'];
export default axios => {
const { apiHost = '' } = window.chatwootConfig || {};
const wootApi = axios.create({
baseURL: `${apiHost}/`,
withCredentials: true,
});
const authHeaders = {};
let refreshRequest;
wootApi.interceptors.request.use(config => {
Object.assign(config.headers, authHeaders);
return config;
});
wootApi.interceptors.response.use(
response => {
AUTH_HEADERS.forEach(header => {
if (response.headers?.[header])
authHeaders[header] = response.headers[header];
});
return response;
},
async error => {
const request = error.config;
if (
error.response?.status !== 401 ||
// eslint-disable-next-line no-underscore-dangle
request?._retry ||
// eslint-disable-next-line no-underscore-dangle
request?._sessionRefresh ||
!Auth.hasAuthCookie()
) {
return parseErrorCode(error);
}
// eslint-disable-next-line no-underscore-dangle
request._retry = true;
refreshRequest ||= wootApi
.get('/auth/validate_token', { _sessionRefresh: true })
.finally(() => {
refreshRequest = null;
});
await refreshRequest;
return wootApi(request);
}
);
return wootApi;
};