diff --git a/public/configs/env.json b/public/configs/env.json index daa1809..6b52856 100644 --- a/public/configs/env.json +++ b/public/configs/env.json @@ -893,6 +893,7 @@ "privacy": "https://dydx.exchange/privacy", "statusPage": "https://status.v4testnet.dydx.exchange/", "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}", + "mintscanBase": "https://testnet.mintscan.io/dydx-testnet", "documentation": "https://docs.dydx.exchange/", "community": "https://discord.com/invite/dydx", "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform", @@ -1033,7 +1034,7 @@ "tos": "[HTTP link to TOS]", "privacy": "[HTTP link to Privacy Policy]", "mintscan": "[HTTP link to Mintscan, with {tx_hash} placeholder]", - "mintscanBase": "[HTTP link to TOS mintsacn base url]", + "mintscanBase": "[HTTP link to TOS mintscan base url]", "feedback": "[HTTP link to feedback form, can be null]", "blogs": "[HTTP link to blogs, can be null]", "foundation": "[HTTP link to foundation, can be null]", diff --git a/src/constants/networks.ts b/src/constants/networks.ts index b2c8b47..8bfe05e 100644 --- a/src/constants/networks.ts +++ b/src/constants/networks.ts @@ -1,12 +1,18 @@ import environments from '../../public/configs/env.json'; -// TODO: Update for Mainnet deployment -export const AVAILABLE_ENVIRONMENTS = - import.meta.env.MODE === 'production' - ? environments.deployments.TESTNET - : environments.deployments.DEV; +const CURRENT_MODE = ({ + production: 'MAINNET', + testnet: 'TESTNET', + staging: 'DEV', + development: 'DEV', +}[import.meta.env.MODE] ?? 'MAINNET') as 'MAINNET' | 'TESTNET' | 'DEV'; -export const CURRENT_ABACUS_DEPLOYMENT = import.meta.env.MODE === 'production' ? 'TESTNET' : 'DEV'; +export const isMainnet = CURRENT_MODE === 'MAINNET'; +export const isTestnet = CURRENT_MODE === 'TESTNET'; +export const isDev = CURRENT_MODE === 'DEV'; + +export const AVAILABLE_ENVIRONMENTS = environments.deployments[CURRENT_MODE]; +export const CURRENT_ABACUS_DEPLOYMENT = CURRENT_MODE; export const ENVIRONMENT_CONFIG_MAP = environments.environments; export type DydxNetwork = keyof typeof ENVIRONMENT_CONFIG_MAP; export const DEFAULT_APP_ENVIRONMENT = AVAILABLE_ENVIRONMENTS.default as DydxNetwork; diff --git a/src/hooks/useDisplayedWallets.ts b/src/hooks/useDisplayedWallets.ts index 0627be9..38de2a5 100644 --- a/src/hooks/useDisplayedWallets.ts +++ b/src/hooks/useDisplayedWallets.ts @@ -1,3 +1,4 @@ +import { isDev } from '@/constants/networks'; import { WalletType } from '@/constants/wallets'; import { isTruthy } from '@/lib/isTruthy'; @@ -6,7 +7,7 @@ export const useDisplayedWallets = () => { return [ WalletType.MetaMask, - import.meta.env.MODE !== 'production' && WalletType.Keplr, + isDev && WalletType.Keplr, WalletType.WalletConnect2, diff --git a/src/layout/Footer/FooterDesktop.tsx b/src/layout/Footer/FooterDesktop.tsx index 226fab4..b3456be 100644 --- a/src/layout/Footer/FooterDesktop.tsx +++ b/src/layout/Footer/FooterDesktop.tsx @@ -3,7 +3,7 @@ import styled, { type AnyStyledComponent, css } from 'styled-components'; import { AbacusApiStatus } from '@/constants/abacus'; import { ButtonSize } from '@/constants/buttons'; import { STRING_KEYS } from '@/constants/localization'; -import { ENVIRONMENT_CONFIG_MAP } from '@/constants/networks'; +import { ENVIRONMENT_CONFIG_MAP, isDev } from '@/constants/networks'; import { useApiState, useSelectedNetwork, useStringGetter } from '@/hooks'; import { ChatIcon, LinkOutIcon } from '@/icons'; @@ -75,7 +75,7 @@ export const FooterDesktop = () => { )} - {import.meta.env.MODE !== 'production' && ( + {isDev && ( { return null; diff --git a/src/lib/abacus/index.ts b/src/lib/abacus/index.ts index 8faafce..b3d74b6 100644 --- a/src/lib/abacus/index.ts +++ b/src/lib/abacus/index.ts @@ -41,7 +41,7 @@ import AbacusStateNotifier from './stateNotification'; import AbacusLocalizer from './localizer'; import AbacusFormatter from './formatter'; import AbacusThreading from './threading'; -import AbacusFileSystem, { ENDPOINTS_PATH } from './filesystem'; +import AbacusFileSystem from './filesystem'; import { LocaleSeparators } from '../numbers'; class AbacusStateManager { private store: RootStore | undefined; diff --git a/src/lib/abacus/websocket.ts b/src/lib/abacus/websocket.ts index d206418..7bd41de 100644 --- a/src/lib/abacus/websocket.ts +++ b/src/lib/abacus/websocket.ts @@ -1,5 +1,6 @@ import type { AbacusWebsocketProtocol } from '@/constants/abacus'; import type { TradingViewBar } from '@/constants/candles'; +import { isDev } from '@/constants/networks'; import { PING_INTERVAL_MS, @@ -161,13 +162,13 @@ class AbacusWebsocket implements Omit { this.connectedCallback?.(false); - if (import.meta.env.MODE === 'production') return; + if (!isDev) return; console.warn('AbacusStateManager > WS > close > ', e); }; this.socket.onerror = (e) => { this.connectedCallback?.(false); - if (import.meta.env.MODE === 'production') return; + if (!isDev) return; console.error('AbacusStateManager > WS > error > ', e); }; }; diff --git a/src/lib/telemetry.ts b/src/lib/telemetry.ts index 44298a1..339834b 100644 --- a/src/lib/telemetry.ts +++ b/src/lib/telemetry.ts @@ -1,5 +1,7 @@ +import { isDev } from "@/constants/networks"; + export const log = (location: string, error: Error, metadata?: any) => { - if (import.meta.env.MODE !== 'production') { + if (isDev) { console.warn('telemetry/log:', { location, error, metadata }); } diff --git a/src/state/appMiddleware.ts b/src/state/appMiddleware.ts index c48c494..61ff70b 100644 --- a/src/state/appMiddleware.ts +++ b/src/state/appMiddleware.ts @@ -2,6 +2,7 @@ import type { PayloadAction } from '@reduxjs/toolkit'; import { AbacusApiStatus } from '@/constants/abacus'; import { DialogTypes } from '@/constants/dialogs'; +import { isDev } from '@/constants/networks'; import { setApiState, setSelectedNetwork } from '@/state/app'; import { resetPerpetualsState } from '@/state/perpetuals'; @@ -30,7 +31,7 @@ export default (store: any) => (next: any) => async (action: PayloadAction) store.dispatch( openDialog({ type: DialogTypes.ExchangeOffline, - dialogProps: { preventClose: import.meta.env.MODE === 'production' }, + dialogProps: { preventClose: !isDev }, }) ); } diff --git a/src/views/dialogs/DepositDialog.tsx b/src/views/dialogs/DepositDialog.tsx index c79d7d0..7449e13 100644 --- a/src/views/dialogs/DepositDialog.tsx +++ b/src/views/dialogs/DepositDialog.tsx @@ -1,6 +1,7 @@ import { useState } from 'react'; import styled, { type AnyStyledComponent } from 'styled-components'; +import { isMainnet } from '@/constants/networks'; import { STRING_KEYS } from '@/constants/localization'; import { useBreakpoints, useStringGetter } from '@/hooks'; @@ -27,14 +28,22 @@ export const DepositDialog = ({ setIsOpen }: ElementProps) => { isOpen setIsOpen={setIsOpen} title={stringGetter({ key: STRING_KEYS.DEPOSIT })} - description={showTestDeposit && 'Test funds will be sent directly to your dYdX account.'} + description={ + !isMainnet && showTestDeposit && 'Test funds will be sent directly to your dYdX account.' + } placement={isMobile ? DialogPlacement.FullScreen : DialogPlacement.Default} > - {showTestDeposit ? : } - setShowTestDeposit(!showTestDeposit)}> - {showTestDeposit ? 'Show deposit form (Under Construction)' : 'Show test faucet'} - + {!isMainnet && showTestDeposit ? ( + + ) : ( + + )} + {!isMainnet && ( + setShowTestDeposit(!showTestDeposit)}> + {showTestDeposit ? 'Show deposit form (Under Construction)' : 'Show test faucet'} + + )} ); diff --git a/src/views/dialogs/ExchangeOfflineDialog.tsx b/src/views/dialogs/ExchangeOfflineDialog.tsx index 5481e34..d25a8f3 100644 --- a/src/views/dialogs/ExchangeOfflineDialog.tsx +++ b/src/views/dialogs/ExchangeOfflineDialog.tsx @@ -5,6 +5,7 @@ import { shallowEqual, useDispatch, useSelector } from 'react-redux'; import { AbacusApiStatus } from '@/constants/abacus'; import { DialogTypes } from '@/constants/dialogs'; import { STRING_KEYS } from '@/constants/localization'; +import { isDev } from '@/constants/networks'; import { useApiState, useStringGetter } from '@/hooks'; import { layoutMixins } from '@/styles/layoutMixins'; @@ -45,7 +46,7 @@ export const ExchangeOfflineDialog = ({ preventClose, setIsOpen }: ElementProps) >

{statusErrorMessage}

- {import.meta.env.MODE !== 'production' && } + {isDev && }
);