|
1 | 1 | import { Routes } from '@Config/constants'
|
2 | 2 |
|
3 | 3 | import { INTERNET_CONNECTIVITY_INTERVAL } from '../constants'
|
| 4 | +import { CheckConnectivityParamsType, FetchConnectivityParamsType } from './types' |
4 | 5 |
|
5 |
| -const fetchWithTimeout = (url: string, options: RequestInit, controller: AbortController): Promise<any> => { |
| 6 | +const fetchWithTimeout = ({ |
| 7 | + url, |
| 8 | + options, |
| 9 | + controller, |
| 10 | + setTimeoutRef, |
| 11 | + checkConnectivity, |
| 12 | +}: FetchConnectivityParamsType): Promise<any> => { |
6 | 13 | const timeoutId = setTimeout(() => controller.abort(), INTERNET_CONNECTIVITY_INTERVAL)
|
7 | 14 |
|
8 |
| - return fetch(url, { ...options, signal: controller.signal }).finally(() => clearTimeout(timeoutId)) |
| 15 | + return fetch(url, { ...options, signal: controller.signal }).finally(() => { |
| 16 | + clearTimeout(timeoutId) |
| 17 | + const nextRef = setTimeout(checkConnectivity, INTERNET_CONNECTIVITY_INTERVAL) |
| 18 | + setTimeoutRef(nextRef) |
| 19 | + }) |
9 | 20 | }
|
10 | 21 |
|
11 |
| -export const getFallbackInternetConnectivity = (controller: AbortController): Promise<any> => |
12 |
| - fetchWithTimeout( |
13 |
| - 'https://www.google.com/favicon.ico', |
14 |
| - { |
| 22 | +export const getFallbackInternetConnectivity = ({ |
| 23 | + controller, |
| 24 | + setTimeoutRef, |
| 25 | + checkConnectivity, |
| 26 | +}: CheckConnectivityParamsType): Promise<any> => |
| 27 | + fetchWithTimeout({ |
| 28 | + url: 'https://www.google.com/favicon.ico', |
| 29 | + options: { |
15 | 30 | method: 'HEAD',
|
16 | 31 | mode: 'no-cors',
|
17 | 32 | },
|
18 | 33 | controller,
|
19 |
| - ) |
| 34 | + setTimeoutRef, |
| 35 | + checkConnectivity, |
| 36 | + }) |
20 | 37 |
|
21 |
| -export const getInternetConnectivity = (controller: AbortController): Promise<any> => { |
| 38 | +export const getInternetConnectivity = ({ |
| 39 | + controller, |
| 40 | + setTimeoutRef, |
| 41 | + checkConnectivity, |
| 42 | +}: CheckConnectivityParamsType): Promise<any> => { |
22 | 43 | const baseUrl = window._env_?.CENTRAL_API_ENDPOINT ?? 'https://api.devtron.ai'
|
23 | 44 | const url = `${baseUrl}/${Routes.HEALTH}`
|
24 | 45 |
|
25 |
| - return fetchWithTimeout(url, {}, controller).then((res) => res.json()) |
| 46 | + return fetchWithTimeout({ url, options: {}, controller, setTimeoutRef, checkConnectivity }).then((res) => |
| 47 | + res.json(), |
| 48 | + ) |
26 | 49 | }
|
0 commit comments