request.ts 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import axios from 'axios';
  2. import { API_URL, APP_VERSION } from '../constants';
  3. import { Platform } from 'react-native';
  4. import { showBanner } from './bannerUtils';
  5. export const request = axios.create({
  6. baseURL: API_URL,
  7. timeout: 10000
  8. });
  9. export const setupInterceptors = ({ showError }: { showError: (message: string) => void }) => {
  10. request.interceptors.request.use(
  11. (config) => {
  12. config.headers['App-Version'] = APP_VERSION;
  13. config.headers['Platform'] = Platform.OS;
  14. return config;
  15. },
  16. (error) => {
  17. return Promise.reject(error);
  18. }
  19. );
  20. request.interceptors.response.use(
  21. (response) => {
  22. if (response.data.result === 'ERROR' && response.data.result_description) {
  23. setTimeout(() => {
  24. showError(response.data.result_description);
  25. }, 1000);
  26. }
  27. return response;
  28. },
  29. (error) => {
  30. if (error.code === 'ECONNABORTED' || error.message === 'Network Error') {
  31. error.isTimeout = true;
  32. showBanner('Slow internet connection!');
  33. return Promise.reject(error);
  34. }
  35. showError(error.message);
  36. return Promise.reject(error);
  37. }
  38. );
  39. };