diff --git a/src/common/utils/createAlgodClient/createAlgodClient.ts b/src/common/utils/createAlgodClient/createAlgodClient.ts index d3300658..850418fb 100644 --- a/src/common/utils/createAlgodClient/createAlgodClient.ts +++ b/src/common/utils/createAlgodClient/createAlgodClient.ts @@ -17,8 +17,8 @@ export default function createAlgodClient( network: INetwork, { logger }: IBaseOptions = { logger: undefined } ): Algodv2 { - const _functionName: string = 'createAlgodClient'; - const algod: INode = getRandomItem(network.algods); + const _functionName = 'createAlgodClient'; + const algod = getRandomItem(network.algods); logger?.debug( `${_functionName}: selected algod node "${algod.canonicalName}"` diff --git a/src/extension/constants/Durations.ts b/src/extension/constants/Durations.ts index 708ec139..4628a628 100644 --- a/src/extension/constants/Durations.ts +++ b/src/extension/constants/Durations.ts @@ -1,10 +1,10 @@ -export const ACCOUNT_INFORMATION_REFRESH_INTERVAL: number = 60000; // 1 minute in milliseconds -export const ACCOUNT_INFORMATION_ANTIQUATED_TIMEOUT: number = 30000; // 30 seconds in milliseconds +export const ACCOUNT_INFORMATION_REFRESH_INTERVAL: number = 54000; // 54 seconds in milliseconds +export const ACCOUNT_INFORMATION_ANTIQUATED_TIMEOUT: number = 28000; // 28 seconds in milliseconds export const DEFAULT_NOTIFICATION_DURATION: number = 6000; // 6 seconds in milliseconds export const HEARTBEAT_DURATION: number = 20000; // 20 seconds in milliseconds export const NETWORK_TRANSACTION_PARAMS_REFRESH_INTERVAL: number = 1800000; // 30 minutes in milliseconds export const NETWORK_TRANSACTION_PARAMS_ANTIQUATED_TIMEOUT: number = 900000; // 15 minutes in milliseconds -export const NETWORK_CONNECTIVITY_CHECK_INTERVAL: number = 30000; // 30 seconds in milliseconds +export const NETWORK_CONNECTIVITY_CHECK_INTERVAL: number = 36000; // 36 seconds in milliseconds export const NODE_REQUEST_DELAY: number = 100; // in milliseconds export const PASSWORD_LOCK_DURATION_LOWEST: number = 60000; // 1 minute in milliseconds export const PASSWORD_LOCK_DURATION_LOW: number = 120000; // 2 minutes in milliseconds diff --git a/src/extension/features/system/slice.ts b/src/extension/features/system/slice.ts index 5862424d..56500fac 100644 --- a/src/extension/features/system/slice.ts +++ b/src/extension/features/system/slice.ts @@ -5,7 +5,7 @@ import { StoreNameEnum } from '@extension/enums'; // types import type { ILogger } from '@common/types'; -import type { IConfirmModal, IScanQRCodeModal, ISystemState } from './types'; +import type { IConfirmModal, IScanQRCodeModal, IState } from './types'; // utils import { getInitialState } from './utils'; @@ -15,27 +15,24 @@ const slice = createSlice({ name: StoreNameEnum.System, reducers: { setConfirmModal: ( - state: Draft, + state: Draft, action: PayloadAction ) => { state.confirmModal = action.payload; }, - setLogger: (state: Draft, action: PayloadAction) => { + setLogger: (state: Draft, action: PayloadAction) => { state.logger = action.payload; }, - setOnline: (state: Draft, action: PayloadAction) => { + setOnline: (state: Draft, action: PayloadAction) => { state.online = action.payload; }, setScanQRCodeModal: ( - state: Draft, + state: Draft, action: PayloadAction ) => { state.scanQRCodeModal = action.payload; }, - setSideBar: ( - state: Draft, - action: PayloadAction - ) => { + setSideBar: (state: Draft, action: PayloadAction) => { state.sidebar = action.payload; }, }, diff --git a/src/extension/features/system/types/ISystemState.ts b/src/extension/features/system/types/IState.ts similarity index 57% rename from src/extension/features/system/types/ISystemState.ts rename to src/extension/features/system/types/IState.ts index 6f518b00..4735224a 100644 --- a/src/extension/features/system/types/ISystemState.ts +++ b/src/extension/features/system/types/IState.ts @@ -1,9 +1,9 @@ // types import type { ILogger } from '@common/types'; -import IConfirmModal from './IConfirmModal'; -import IScanQRCodeModal from './IScanQRCodeModal'; +import type IConfirmModal from './IConfirmModal'; +import type IScanQRCodeModal from './IScanQRCodeModal'; -interface ISystemState { +interface IState { confirmModal: IConfirmModal | null; logger: ILogger; online: boolean; @@ -11,4 +11,4 @@ interface ISystemState { sidebar: boolean; } -export default ISystemState; +export default IState; diff --git a/src/extension/features/system/types/index.ts b/src/extension/features/system/types/index.ts index 1fc892a0..15ecc691 100644 --- a/src/extension/features/system/types/index.ts +++ b/src/extension/features/system/types/index.ts @@ -1,3 +1,3 @@ export type { default as IConfirmModal } from './IConfirmModal'; export type { default as IScanQRCodeModal } from './IScanQRCodeModal'; -export type { default as ISystemState } from './ISystemState'; +export type { default as IState } from './IState'; diff --git a/src/extension/features/system/utils/getInitialState.ts b/src/extension/features/system/utils/getInitialState.ts index 6fa096cc..a5ac4bb2 100644 --- a/src/extension/features/system/utils/getInitialState.ts +++ b/src/extension/features/system/utils/getInitialState.ts @@ -2,9 +2,9 @@ import createLogger from '@common/utils/createLogger'; // types -import type { ISystemState } from '../types'; +import type { IState } from '../types'; -export default function getInitialState(): ISystemState { +export default function getInitialState(): IState { return { confirmModal: null, logger: createLogger(__ENV__ === 'development' ? 'debug' : 'error'), diff --git a/src/extension/hooks/useOnNetworkConnectivity/useOnNetworkConnectivity.ts b/src/extension/hooks/useOnNetworkConnectivity/useOnNetworkConnectivity.ts index 88278bcd..e87b00bd 100644 --- a/src/extension/hooks/useOnNetworkConnectivity/useOnNetworkConnectivity.ts +++ b/src/extension/hooks/useOnNetworkConnectivity/useOnNetworkConnectivity.ts @@ -7,39 +7,39 @@ import { NETWORK_CONNECTIVITY_CHECK_INTERVAL } from '@extension/constants'; // features import { setOnline } from '@extension/features/system'; +// selectors +import { useSelectSelectedNetwork } from '@extension/selectors'; + // types -import { IAppThunkDispatch } from '@extension/types'; +import type { IAppThunkDispatch, INode } from '@extension/types'; + +// utils +import getRandomItem from '@common/utils/getRandomItem'; export default function useOnNetworkConnectivity(): void { - const dispatch: IAppThunkDispatch = useDispatch(); + const dispatch = useDispatch(); + // selectors + const network = useSelectSelectedNetwork(); + // states const [checking, setChecking] = useState(false); const [intervalId, setIntervalId] = useState(); + // misc const determineNetworkStatus: () => Promise = async () => { let result: Response; - let url: string = 'https://developer.chrome.com'; - switch (__TARGET__) { - case 'edge': - url = 'https://developer.microsoft.com'; - break; - case 'firefox': - url = 'https://developer.mozilla.org'; - break; - case 'opera': - url = 'https://dev.opera.com'; - break; - case 'safari': - url = 'https://developer.apple.com'; - break; - case 'chrome': - default: - break; + if (!network) { + dispatch(setOnline(false)); + + return; } try { setChecking(true); - result = await fetch(url); + // use a random node + result = await fetch( + `${getRandomItem(network.algods).url}/versions` + ); dispatch(setOnline(result.status >= 200 && result.status < 300)); } catch (error) { diff --git a/src/extension/types/states/IBaseRootState.ts b/src/extension/types/states/IBaseRootState.ts index d2e05952..894d12b3 100644 --- a/src/extension/types/states/IBaseRootState.ts +++ b/src/extension/types/states/IBaseRootState.ts @@ -1,6 +1,6 @@ // features import type { IARC0200AssetsState } from '@extension/features/arc0200-assets'; -import type { ISystemState } from '@extension/features/system'; +import type { IState as ISystemState } from '@extension/features/system'; interface IBaseRootState { arc0200Assets: IARC0200AssetsState; diff --git a/src/extension/types/states/IRegistrationRootState.ts b/src/extension/types/states/IRegistrationRootState.ts index 7d07799e..d19df63e 100644 --- a/src/extension/types/states/IRegistrationRootState.ts +++ b/src/extension/types/states/IRegistrationRootState.ts @@ -3,7 +3,7 @@ import type { IState as INetworksState } from '@extension/features/networks'; import type { INotificationsState } from '@extension/features/notifications'; import type { IState as RegistrationState } from '@extension/features/registration'; import type { ISettingsState } from '@extension/features/settings'; -import type { ISystemState } from '@extension/features/system'; +import type { IState as ISystemState } from '@extension/features/system'; // types import type IBaseRootState from './IBaseRootState';