38 lines
1.2 KiB
JavaScript
38 lines
1.2 KiB
JavaScript
const supportedMethods = ['patch', 'post', 'put'];
|
|
|
|
export function registerCaptchaModalInterceptor(axios) {
|
|
return axios.interceptors.response.use(
|
|
(response) => {
|
|
return response;
|
|
},
|
|
(err) => {
|
|
if (
|
|
supportedMethods.includes(err?.config?.method) &&
|
|
err?.response?.data?.needs_captcha_response
|
|
) {
|
|
const { data } = err.response;
|
|
const captchaSiteKey = data.captcha_site_key;
|
|
const spamLogId = data.spam_log_id;
|
|
// eslint-disable-next-line promise/no-promise-in-callback
|
|
return import('~/captcha/wait_for_captcha_to_be_solved')
|
|
.then(({ waitForCaptchaToBeSolved }) => waitForCaptchaToBeSolved(captchaSiteKey))
|
|
.then((captchaResponse) => {
|
|
const errConfig = err.config;
|
|
const originalData = JSON.parse(errConfig.data);
|
|
return axios({
|
|
method: errConfig.method,
|
|
url: errConfig.url,
|
|
data: {
|
|
...originalData,
|
|
captcha_response: captchaResponse,
|
|
spam_log_id: spamLogId,
|
|
},
|
|
});
|
|
});
|
|
}
|
|
|
|
return Promise.reject(err);
|
|
},
|
|
);
|
|
}
|