refactor: strip duplicate pkgs, consume @l.x/* from npm — keep only pkgs/wallet (canonical @luxfi/wallet bones)

- Delete pkgs/{analytics,api,config,eslint-config,gating,lx,notifications,
  prices,sessions,ui,utilities} — all identical to ~/work/lux/exchange
  canonical (MD5-matched). Now published to npm at @l.x/*; consume from
  there instead of vendoring.
- pkgs/wallet remains — this IS @luxfi/wallet (the uniswap-style extension
  + mobile wallet bones). Published at 1.0.10.
- Rewrite 3553 bare-path imports (uniswap/src/, ui/src/, utilities/src/,
  lx/src/, lux/src/) → explicit @l.x/* across 725 files.
- apps/{extension,mobile}/package.json: workspace:^ → npm ^versions for
  all @l.x/* / @luxfi/eslint-config; only @luxfi/wallet stays workspace.
- apps/{extension,mobile}/.eslintrc.js: RULES_DIR → node_modules/@l.x/lx/eslint_rules.

~315K line deletion. One canonical home: ~/work/lux/exchange.
This commit is contained in:
Hanzo AI
2026-04-23 17:58:21 -07:00
parent 9cd1033c5e
commit 01b6ad2b97
3863 changed files with 3571 additions and 315079 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
const restrictedGlobals = require('confusing-browser-globals')
const rulesDirPlugin = require('eslint-plugin-rulesdir')
rulesDirPlugin.RULES_DIR = '../../pkgs/lx/eslint_rules'
rulesDirPlugin.RULES_DIR = '../../node_modules/@l.x/lx/eslint_rules'
module.exports = {
root: true,
@@ -4,7 +4,7 @@ import { type BrowserContext, test as base } from '@playwright/test'
import { createExtensionContext } from 'e2e/fixtures/extension-context'
import { completeOnboarding } from 'e2e/utils/onboarding-helpers'
import { waitForExtensionLoad } from 'e2e/utils/wait-for-extension'
import { ONE_SECOND_MS } from 'utilities/src/time/time'
import { ONE_SECOND_MS } from '@l.x/utils/src/time/time'
interface OnboardedExtensionFixtures {
context: BrowserContext
@@ -1,7 +1,7 @@
import { expect } from '@playwright/test'
import { freshExtensionTest as test } from 'e2e/fixtures/extension.fixture'
import { ONE_SECOND_MS } from 'utilities/src/time/time'
import { sleep } from 'utilities/src/time/timing'
import { ONE_SECOND_MS } from '@l.x/utils/src/time/time'
import { sleep } from '@l.x/utils/src/time/timing'
test.describe('Basic Extension Setup', () => {
test('extension loads successfully', async ({ context, extensionId }) => {
@@ -1,6 +1,6 @@
import { expect } from '@playwright/test'
import { freshExtensionTest as test } from 'e2e/fixtures/extension.fixture'
import { ONE_SECOND_MS } from 'utilities/src/time/time'
import { ONE_SECOND_MS } from '@l.x/utils/src/time/time'
test.describe('Extension Onboarding Flow', () => {
test('onboarding tab opens automatically on fresh install', async ({ context }) => {
@@ -1,5 +1,5 @@
import type { BrowserContext, Page } from '@playwright/test'
import { sleep } from 'utilities/src/time/timing'
import { sleep } from '@l.x/utils/src/time/timing'
export async function openExtensionSidebar(context: BrowserContext, extensionId: string): Promise<Page> {
const sidebarUrl = `chrome-extension://${extensionId}/sidepanel.html`
@@ -1,6 +1,6 @@
import type { BrowserContext, Page } from '@playwright/test'
import { ONE_SECOND_MS } from 'utilities/src/time/time'
import { sleep } from 'utilities/src/time/timing'
import { ONE_SECOND_MS } from '@l.x/utils/src/time/time'
import { sleep } from '@l.x/utils/src/time/timing'
const TEST_PASSWORD = 'TestPassword123!'
@@ -1,6 +1,6 @@
/* oxlint-disable typescript/no-explicit-any -- e2e test file */
import type { BrowserContext } from '@playwright/test'
import { sleep } from 'utilities/src/time/timing'
import { sleep } from '@l.x/utils/src/time/timing'
export async function waitForExtensionLoad(
context: BrowserContext,
+2 -2
View File
@@ -4,7 +4,7 @@ import 'wallet/jest-package-mocks'
import 'config/jest-presets/ui/ui-package-mocks'
import 'react-native-gesture-handler/jestSetup'
import { chrome } from 'jest-chrome'
import { AppearanceSettingType } from 'uniswap/src/features/appearance/slice'
import { AppearanceSettingType } from '@l.x/lx/src/features/appearance/slice'
process.env.IS_UNISWAP_EXTENSION = true
@@ -99,7 +99,7 @@ jest.mock('wallet/src/features/focus/useIsFocused', () => {
})
const mockAppearanceSetting = AppearanceSettingType.System
jest.mock('uniswap/src/features/appearance/hooks', () => {
jest.mock('@l.x/lx/src/features/appearance/hooks', () => {
return {
useCurrentAppearanceSetting: () => mockAppearanceSetting,
useSelectedColorScheme: () => 'light',
+4 -4
View File
@@ -21,10 +21,10 @@
"@luxamm/universal-router-sdk": "4.33.0",
"@luxamm/v3-sdk": "3.29.1",
"@luxamm/v4-sdk": "1.29.1",
"@l.x/api": "workspace:^",
"@l.x/gating": "workspace:^",
"@l.x/notifications": "workspace:^",
"@l.x/sessions": "workspace:^",
"@l.x/api": "^1.0.8",
"@l.x/gating": "^1.0.7",
"@l.x/notifications": "^1.0.7",
"@l.x/sessions": "^1.0.8",
"@wxt-dev/module-react": "1.1.3",
"dotenv-webpack": "8.0.1",
"ethers": "5.7.2",
@@ -1,14 +1,14 @@
import React from 'react'
import { AutoLockProvider } from 'src/app/components/AutoLockProvider'
import { render } from 'src/test/test-utils'
import { FiatCurrency } from 'uniswap/src/features/fiatCurrency/constants'
import { Language } from 'uniswap/src/features/language/constants'
import { DeviceAccessTimeout } from 'uniswap/src/features/settings/constants'
import { logger } from 'utilities/src/logger/logger'
import { FiatCurrency } from '@l.x/lx/src/features/fiatCurrency/constants'
import { Language } from '@l.x/lx/src/features/language/constants'
import { DeviceAccessTimeout } from '@l.x/lx/src/features/settings/constants'
import { logger } from '@l.x/utils/src/logger/logger'
// Mock dependencies
jest.mock('uniswap/src/extension/useIsChromeWindowFocused')
jest.mock('utilities/src/logger/logger')
jest.mock('@l.x/lx/src/extension/useIsChromeWindowFocused')
jest.mock('@l.x/utils/src/logger/logger')
jest.mock('src/app/hooks/useIsWalletUnlocked', () => ({
useIsWalletUnlocked: jest.fn(),
isWalletUnlocked: null,
@@ -16,7 +16,7 @@ jest.mock('src/app/hooks/useIsWalletUnlocked', () => ({
// Import mocked modules
import { useIsWalletUnlocked } from 'src/app/hooks/useIsWalletUnlocked'
import { useIsChromeWindowFocused } from 'uniswap/src/extension/useIsChromeWindowFocused'
import { useIsChromeWindowFocused } from '@l.x/lx/src/extension/useIsChromeWindowFocused'
const mockUseIsChromeWindowFocused = jest.mocked(useIsChromeWindowFocused)
const mockUseIsWalletUnlocked = jest.mocked(useIsWalletUnlocked)
@@ -1,9 +1,9 @@
import { PropsWithChildren, useEffect, useRef } from 'react'
import { useSelector } from 'react-redux'
import { useIsWalletUnlocked } from 'src/app/hooks/useIsWalletUnlocked'
import { useIsChromeWindowFocused } from 'uniswap/src/extension/useIsChromeWindowFocused'
import { selectDeviceAccessTimeoutMinutes } from 'uniswap/src/features/settings/selectors'
import { logger } from 'utilities/src/logger/logger'
import { useIsChromeWindowFocused } from '@l.x/lx/src/extension/useIsChromeWindowFocused'
import { selectDeviceAccessTimeoutMinutes } from '@l.x/lx/src/features/settings/selectors'
import { logger } from '@l.x/utils/src/logger/logger'
export const AUTO_LOCK_ALARM_NAME = 'AutoLockAlarm'
+3 -3
View File
@@ -1,7 +1,7 @@
import { forwardRef } from 'react'
import { Input as TamaguiInput, InputProps as TamaguiInputProps } from 'ui/src'
import { inputStyles } from 'ui/src/components/input/utils'
import { fonts } from 'ui/src/theme/fonts'
import { Input as TamaguiInput, InputProps as TamaguiInputProps } from '@l.x/ui/src'
import { inputStyles } from '@l.x/ui/src/components/input/utils'
import { fonts } from '@l.x/ui/src/theme/fonts'
export type InputProps = {
large?: boolean
@@ -3,8 +3,8 @@ import { useTranslation } from 'react-i18next'
import { TextInput } from 'react-native'
import { Input, InputProps } from 'src/app/components/Input'
import { useShouldShowBiometricUnlock } from 'src/app/features/biometricUnlock/useShouldShowBiometricUnlock'
import { Flex, FlexProps, IconProps, Text, TouchableArea } from 'ui/src'
import { Eye, EyeOff, Fingerprint } from 'ui/src/components/icons'
import { Flex, FlexProps, IconProps, Text, TouchableArea } from '@l.x/ui/src'
import { Eye, EyeOff, Fingerprint } from '@l.x/ui/src/components/icons'
import { getPasswordStrengthTextAndColor, PasswordStrength } from 'wallet/src/utils/password'
export const PADDING_STRENGTH_INDICATOR = 76
@@ -3,15 +3,15 @@ import { useQuery } from '@tanstack/react-query'
import { provideUniswapIdentifierService } from '@universe/api'
import { uniswapIdentifierQuery } from '@universe/sessions'
import { useEffect } from 'react'
import { useIsDarkMode } from 'ui/src'
import { DisplayNameType } from 'uniswap/src/features/accounts/types'
import { useEnabledChains } from 'uniswap/src/features/chains/hooks/useEnabledChains'
import { useAppFiatCurrencyInfo } from 'uniswap/src/features/fiatCurrency/hooks'
import { useCurrentLanguage } from 'uniswap/src/features/language/hooks'
import { useHideSmallBalancesSetting, useHideSpamTokensSetting } from 'uniswap/src/features/settings/hooks'
import { ExtensionUserPropertyName, setUserProperty } from 'uniswap/src/features/telemetry/user'
import { useIsDarkMode } from '@l.x/ui/src'
import { DisplayNameType } from '@l.x/lx/src/features/accounts/types'
import { useEnabledChains } from '@l.x/lx/src/features/chains/hooks/useEnabledChains'
import { useAppFiatCurrencyInfo } from '@l.x/lx/src/features/fiatCurrency/hooks'
import { useCurrentLanguage } from '@l.x/lx/src/features/language/hooks'
import { useHideSmallBalancesSetting, useHideSpamTokensSetting } from '@l.x/lx/src/features/settings/hooks'
import { ExtensionUserPropertyName, setUserProperty } from '@l.x/lx/src/features/telemetry/user'
// oxlint-disable-next-line no-restricted-imports -- Direct analytics import required for user property tracking
import { analytics } from 'utilities/src/telemetry/analytics/analytics'
import { analytics } from '@l.x/utils/src/telemetry/analytics/analytics'
import { useGatingUserPropertyUsernames } from 'wallet/src/features/gating/userPropertyHooks'
import {
useActiveAccount,
@@ -1,8 +1,8 @@
import { useState } from 'react'
import { useTranslation } from 'react-i18next'
import { AnimatePresence, Flex, Text, TouchableArea } from 'ui/src'
import { Check, CopySheets } from 'ui/src/components/icons'
import { iconSizes, zIndexes } from 'ui/src/theme'
import { AnimatePresence, Flex, Text, TouchableArea } from '@l.x/ui/src'
import { Check, CopySheets } from '@l.x/ui/src/components/icons'
import { iconSizes, zIndexes } from '@l.x/ui/src/theme'
export function CopyButton({ onCopyPress }: { onCopyPress: () => Promise<void> }): JSX.Element {
const { t } = useTranslation()
@@ -1,6 +1,6 @@
import { useTranslation } from 'react-i18next'
import { Button, Flex } from 'ui/src'
import { ArrowRight } from 'ui/src/components/icons/ArrowRight'
import { Button, Flex } from '@l.x/ui/src'
import { ArrowRight } from '@l.x/ui/src/components/icons/ArrowRight'
export function OpenSidebarButton({
openedSideBar,
@@ -1,5 +1,5 @@
import { Circle, Flex, GeneratedIcon, Text, TouchableArea } from 'ui/src'
import { iconSizes } from 'ui/src/theme'
import { Circle, Flex, GeneratedIcon, Text, TouchableArea } from '@l.x/ui/src'
import { iconSizes } from '@l.x/ui/src/theme'
export function OptionCard({
Icon,
@@ -1,7 +1,7 @@
import { useExtensionNavigation } from 'src/app/navigation/utils'
import { Flex, GeneratedIcon, IconProps, Text, TouchableArea } from 'ui/src'
import { BackArrow } from 'ui/src/components/icons'
import { iconSizes } from 'ui/src/theme'
import { Flex, GeneratedIcon, IconProps, Text, TouchableArea } from '@l.x/ui/src'
import { BackArrow } from '@l.x/ui/src/components/icons'
import { iconSizes } from '@l.x/ui/src/theme'
export function ScreenHeader({
onBackClick,
@@ -1,5 +1,5 @@
import { SkeletonBox } from 'src/app/components/loading/SkeletonBox'
import { Flex } from 'ui/src'
import { Flex } from '@l.x/ui/src'
import { WALLET_PREVIEW_CARD_MIN_HEIGHT } from 'wallet/src/components/WalletPreviewCard/WalletPreviewCard'
export function SelectWalletsSkeleton({ repeat = 3 }: { repeat?: number }): JSX.Element {
@@ -1,9 +1,9 @@
import { ReactNode } from 'react'
import { Anchor, Button, ButtonEmphasis, Flex, Text, TouchableArea, useSporeColors } from 'ui/src'
import { X } from 'ui/src/components/icons'
import { zIndexes } from 'ui/src/theme'
import { Modal } from 'uniswap/src/components/modals/Modal'
import { ModalNameType } from 'uniswap/src/features/telemetry/constants'
import { Anchor, Button, ButtonEmphasis, Flex, Text, TouchableArea, useSporeColors } from '@l.x/ui/src'
import { X } from '@l.x/ui/src/components/icons'
import { zIndexes } from '@l.x/ui/src/theme'
import { Modal } from '@l.x/lx/src/components/modals/Modal'
import { ModalNameType } from '@l.x/lx/src/features/telemetry/constants'
export interface ModalProps {
name: ModalNameType
@@ -1,6 +1,6 @@
import { useDispatch } from 'react-redux'
import { useSmartWalletNudges } from 'src/app/context/SmartWalletNudgesContext'
import { ModalName } from 'uniswap/src/features/telemetry/constants'
import { ModalName } from '@l.x/lx/src/features/telemetry/constants'
import { SmartWalletCreatedModal } from 'wallet/src/components/smartWallet/modals/SmartWalletCreatedModal'
import { SmartWalletEnabledModal } from 'wallet/src/components/smartWallet/modals/SmartWalletEnabledModal'
import { SmartWalletNudge } from 'wallet/src/components/smartWallet/modals/SmartWalletNudge'
@@ -1,6 +1,6 @@
import { memo } from 'react'
import { Flex, Loader, ScrollView } from 'ui/src'
import { useInfiniteScroll } from 'utilities/src/react/useInfiniteScroll'
import { Flex, Loader, ScrollView } from '@l.x/ui/src'
import { useInfiniteScroll } from '@l.x/utils/src/react/useInfiniteScroll'
import { useActivityDataWallet } from 'wallet/src/features/activity/useActivityDataWallet'
export const ActivityTab = memo(function ActivityTabInner({
@@ -1,12 +1,12 @@
import { SharedEventName } from '@luxamm/analytics-events'
import { memo, useCallback } from 'react'
import { Flex } from 'ui/src'
import { Flex } from '@l.x/ui/src'
// This is intentionally imported from the native file as only the web app requires a web specific implementation
import { NftsList } from 'uniswap/src/components/nfts/NftsList.native'
import { NftViewWithContextMenu } from 'uniswap/src/components/nfts/NftViewWithContextMenu'
import { NFTItem } from 'uniswap/src/features/nfts/types'
import { ElementName, SectionName } from 'uniswap/src/features/telemetry/constants'
import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send'
import { NftsList } from '@l.x/lx/src/components/nfts/NftsList.native'
import { NftViewWithContextMenu } from '@l.x/lx/src/components/nfts/NftViewWithContextMenu'
import { NFTItem } from '@l.x/lx/src/features/nfts/types'
import { ElementName, SectionName } from '@l.x/lx/src/features/telemetry/constants'
import { sendAnalyticsEvent } from '@l.x/lx/src/features/telemetry/send'
import { useAccounts } from 'wallet/src/features/wallet/hooks'
export const NftsTab = memo(function NftsTabInner({ owner, skip }: { owner: Address; skip?: boolean }): JSX.Element {
+1 -1
View File
@@ -1,3 +1,3 @@
import { SpaceTokens } from 'ui/src'
import { SpaceTokens } from '@l.x/ui/src'
export const SCREEN_ITEM_HORIZONTAL_PAD = '$spacing12' satisfies SpaceTokens
@@ -1,10 +1,10 @@
import { createContext, ReactNode, useCallback, useContext, useEffect, useState } from 'react'
import { useDispatch, useSelector } from 'react-redux'
import { useGet5792DappInfo } from 'src/app/hooks/useGet5792DappInfo'
import { ModalName, ModalNameType } from 'uniswap/src/features/telemetry/constants'
import { extractUrlHost } from 'utilities/src/format/urls'
import { useEvent } from 'utilities/src/react/hooks'
import { ONE_DAY_MS } from 'utilities/src/time/time'
import { ModalName, ModalNameType } from '@l.x/lx/src/features/telemetry/constants'
import { extractUrlHost } from '@l.x/utils/src/format/urls'
import { useEvent } from '@l.x/utils/src/react/hooks'
import { ONE_DAY_MS } from '@l.x/utils/src/time/time'
import {
SmartWalletDelegationAction,
useSmartWalletDelegationStatus,
@@ -28,13 +28,13 @@ import { type DatadogAppNameTag } from 'src/app/datadog'
import { onHashcashSolveCompleted, sessionInitAnalytics } from 'src/app/features/sessions/analytics'
import { useOnCrashAppStateResetter } from 'src/store/appStateResetter'
import { getReduxStore } from 'src/store/store'
import { BlankUrlProvider } from 'uniswap/src/contexts/UrlContext'
import { useCurrentLanguage } from 'uniswap/src/features/language/hooks'
import { LocalizationContextProvider } from 'uniswap/src/features/language/LocalizationContext'
import { getLocale } from 'uniswap/src/features/language/navigatorLocale'
import Trace from 'uniswap/src/features/telemetry/Trace'
import i18n, { changeLanguage } from 'uniswap/src/i18n'
import { getLogger } from 'utilities/src/logger/logger'
import { BlankUrlProvider } from '@l.x/lx/src/contexts/UrlContext'
import { useCurrentLanguage } from '@l.x/lx/src/features/language/hooks'
import { LocalizationContextProvider } from '@l.x/lx/src/features/language/LocalizationContext'
import { getLocale } from '@l.x/lx/src/features/language/navigatorLocale'
import Trace from '@l.x/lx/src/features/telemetry/Trace'
import i18n, { changeLanguage } from '@l.x/lx/src/i18n'
import { getLogger } from '@l.x/utils/src/logger/logger'
import { ErrorBoundary } from 'wallet/src/components/ErrorBoundary/ErrorBoundary'
import { StatsigUserIdentifiersUpdater } from 'wallet/src/features/gating/StatsigUserIdentifiersUpdater'
import { SharedWalletProvider } from 'wallet/src/providers/SharedWalletProvider'
+5 -5
View File
@@ -1,9 +1,9 @@
import { lazy, Suspense } from 'react'
import { Flex } from 'ui/src'
import { Flag } from 'ui/src/components/icons/Flag'
import { Modal } from 'uniswap/src/components/modals/Modal'
import { ModalName } from 'uniswap/src/features/telemetry/constants'
import { useBooleanState } from 'utilities/src/react/useBooleanState'
import { Flex } from '@l.x/ui/src'
import { Flag } from '@l.x/ui/src/components/icons/Flag'
import { Modal } from '@l.x/lx/src/components/modals/Modal'
import { ModalName } from '@l.x/lx/src/features/telemetry/constants'
import { useBooleanState } from '@l.x/utils/src/react/useBooleanState'
const DevMenuScreen = lazy(() =>
import('src/app/features/settings/DevMenuScreen').then((module) => ({ default: module.DevMenuScreen })),
@@ -39,9 +39,9 @@ import { setRouter, setRouterState } from 'src/app/navigation/state'
import { initExtensionAnalytics } from 'src/app/utils/analytics'
import { checksIfSupportsSidePanel } from 'src/app/utils/chrome'
import { PrimaryAppInstanceDebuggerLazy } from 'src/store/PrimaryAppInstanceDebuggerLazy'
import { ExtensionEventName } from 'uniswap/src/features/telemetry/constants'
import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send'
import { ExtensionOnboardingFlow } from 'uniswap/src/types/screens/extension'
import { ExtensionEventName } from '@l.x/lx/src/features/telemetry/constants'
import { sendAnalyticsEvent } from '@l.x/lx/src/features/telemetry/send'
import { ExtensionOnboardingFlow } from '@l.x/lx/src/types/screens/extension'
import { AccountsStoreContextProvider } from 'wallet/src/features/accounts/store/provider'
import { WalletUniswapProvider } from 'wallet/src/features/transactions/contexts/WalletUniswapContext'
import { getReduxPersistor } from 'wallet/src/state/persistor'
+7 -7
View File
@@ -7,13 +7,13 @@ import { ErrorElement } from 'src/app/components/ErrorElement'
import { BaseAppContainer } from 'src/app/core/BaseAppContainer'
import { DatadogAppNameTag } from 'src/app/datadog'
import { initExtensionAnalytics } from 'src/app/utils/analytics'
import { Button, Flex, Image, Text } from 'ui/src'
import { UNISWAP_LOGO } from 'ui/src/assets'
import { GoogleChromeLogo } from 'ui/src/components/logos/GoogleChromeLogo'
import { iconSizes, spacing } from 'ui/src/theme'
import { ElementName } from 'uniswap/src/features/telemetry/constants'
import Trace from 'uniswap/src/features/telemetry/Trace'
import { ExtensionScreens } from 'uniswap/src/types/screens/extension'
import { Button, Flex, Image, Text } from '@l.x/ui/src'
import { UNISWAP_LOGO } from '@l.x/ui/src/assets'
import { GoogleChromeLogo } from '@l.x/ui/src/components/logos/GoogleChromeLogo'
import { iconSizes, spacing } from '@l.x/ui/src/theme'
import { ElementName } from '@l.x/lx/src/features/telemetry/constants'
import Trace from '@l.x/lx/src/features/telemetry/Trace'
import { ExtensionScreens } from '@l.x/lx/src/types/screens/extension'
import { useTestnetModeForLoggingAndAnalytics } from 'wallet/src/features/testnetMode/hooks/useTestnetModeForLoggingAndAnalytics'
const router = createHashRouter([
+7 -7
View File
@@ -41,13 +41,13 @@ import {
} from 'src/background/messagePassing/messageChannels'
import { BackgroundToSidePanelRequestType } from 'src/background/messagePassing/types/requests'
import { PrimaryAppInstanceDebuggerLazy } from 'src/store/PrimaryAppInstanceDebuggerLazy'
import { useResetUnitagsQueries } from 'uniswap/src/data/apiClients/unitagsApi/useResetUnitagsQueries'
import { ExtensionEventName } from 'uniswap/src/features/telemetry/constants'
import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send'
import { isDevEnv } from 'utilities/src/environment/env'
import { logger } from 'utilities/src/logger/logger'
import { ONE_SECOND_MS } from 'utilities/src/time/time'
import { useInterval } from 'utilities/src/time/timing'
import { useResetUnitagsQueries } from '@l.x/lx/src/data/apiClients/unitagsApi/useResetUnitagsQueries'
import { ExtensionEventName } from '@l.x/lx/src/features/telemetry/constants'
import { sendAnalyticsEvent } from '@l.x/lx/src/features/telemetry/send'
import { isDevEnv } from '@l.x/utils/src/environment/env'
import { logger } from '@l.x/utils/src/logger/logger'
import { ONE_SECOND_MS } from '@l.x/utils/src/time/time'
import { useInterval } from '@l.x/utils/src/time/timing'
import { useTestnetModeForLoggingAndAnalytics } from 'wallet/src/features/testnetMode/hooks/useTestnetModeForLoggingAndAnalytics'
import { getReduxPersistor } from 'wallet/src/state/persistor'
@@ -3,9 +3,9 @@ import { SharedQueryClient } from '@universe/api'
import { StatsigCustomAppValue, StatsigUser } from '@universe/gating'
import { useEffect, useState } from 'react'
import { makeStatsigUser } from 'src/app/core/initStatSigForBrowserScripts'
import { StatsigProviderWrapper } from 'uniswap/src/features/gating/StatsigProviderWrapper'
import { initializeDatadog } from 'uniswap/src/utils/datadog'
import { uniqueIdQuery } from 'utilities/src/device/uniqueIdQuery'
import { StatsigProviderWrapper } from '@l.x/lx/src/features/gating/StatsigProviderWrapper'
import { initializeDatadog } from '@l.x/lx/src/utils/datadog'
import { uniqueIdQuery } from '@l.x/utils/src/device/uniqueIdQuery'
export function ExtensionStatsigProvider({
children,
@@ -20,9 +20,9 @@ import { UnitagIntroScreen } from 'src/app/features/unitags/UnitagIntroScreen'
import { UnitagClaimRoutes } from 'src/app/navigation/constants'
import { setRouter, setRouterState } from 'src/app/navigation/state'
import { initExtensionAnalytics } from 'src/app/utils/analytics'
import { Flex } from 'ui/src'
import { logger } from 'utilities/src/logger/logger'
import { usePrevious } from 'utilities/src/react/hooks'
import { Flex } from '@l.x/ui/src'
import { logger } from '@l.x/utils/src/logger/logger'
import { usePrevious } from '@l.x/utils/src/react/hooks'
import { useTestnetModeForLoggingAndAnalytics } from 'wallet/src/features/testnetMode/hooks/useTestnetModeForLoggingAndAnalytics'
import { useAccountAddressFromUrlWithThrow } from 'wallet/src/features/wallet/hooks'
@@ -1,8 +1,8 @@
import { StatsigClient, StatsigCustomAppValue, StatsigUser } from '@universe/gating'
import { config } from 'uniswap/src/config'
import { statsigBaseConfig } from 'uniswap/src/features/gating/statsigBaseConfig'
import { getUniqueId } from 'utilities/src/device/uniqueId'
import { logger } from 'utilities/src/logger/logger'
import { config } from '@l.x/lx/src/config'
import { statsigBaseConfig } from '@l.x/lx/src/features/gating/statsigBaseConfig'
import { getUniqueId } from '@l.x/utils/src/device/uniqueId'
import { logger } from '@l.x/utils/src/logger/logger'
export function makeStatsigUser(userID: string): StatsigUser {
return {
@@ -6,23 +6,23 @@ import { EditLabelModal } from 'src/app/features/accounts/EditLabelModal'
import { removeAllDappConnectionsForAccount } from 'src/app/features/dapp/actions'
import { AppRoutes, SettingsRoutes, UnitagClaimRoutes } from 'src/app/navigation/constants'
import { focusOrCreateUnitagTab, useExtensionNavigation } from 'src/app/navigation/utils'
import { Flex, Text, TouchableArea } from 'ui/src'
import { CopySheets, Edit, Ellipsis, Globe, TrashFilled } from 'ui/src/components/icons'
import { iconSizes } from 'ui/src/theme'
import { AddressDisplay } from 'uniswap/src/components/accounts/AddressDisplay'
import { ContextMenu, MenuOptionItem } from 'uniswap/src/components/menus/ContextMenu'
import { ContextMenuTriggerMode } from 'uniswap/src/components/menus/types'
import { WarningSeverity } from 'uniswap/src/components/modals/WarningModal/types'
import { WarningModal } from 'uniswap/src/components/modals/WarningModal/WarningModal'
import { DisplayNameType } from 'uniswap/src/features/accounts/types'
import { useLocalizationContext } from 'uniswap/src/features/language/LocalizationContext'
import { pushNotification } from 'uniswap/src/features/notifications/slice/slice'
import { AppNotificationType, CopyNotificationType } from 'uniswap/src/features/notifications/slice/types'
import { ElementName, ModalName } from 'uniswap/src/features/telemetry/constants'
import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send'
import { setClipboard } from 'utilities/src/clipboard/clipboard'
import { NumberType } from 'utilities/src/format/types'
import { useBooleanState } from 'utilities/src/react/useBooleanState'
import { Flex, Text, TouchableArea } from '@l.x/ui/src'
import { CopySheets, Edit, Ellipsis, Globe, TrashFilled } from '@l.x/ui/src/components/icons'
import { iconSizes } from '@l.x/ui/src/theme'
import { AddressDisplay } from '@l.x/lx/src/components/accounts/AddressDisplay'
import { ContextMenu, MenuOptionItem } from '@l.x/lx/src/components/menus/ContextMenu'
import { ContextMenuTriggerMode } from '@l.x/lx/src/components/menus/types'
import { WarningSeverity } from '@l.x/lx/src/components/modals/WarningModal/types'
import { WarningModal } from '@l.x/lx/src/components/modals/WarningModal/WarningModal'
import { DisplayNameType } from '@l.x/lx/src/features/accounts/types'
import { useLocalizationContext } from '@l.x/lx/src/features/language/LocalizationContext'
import { pushNotification } from '@l.x/lx/src/features/notifications/slice/slice'
import { AppNotificationType, CopyNotificationType } from '@l.x/lx/src/features/notifications/slice/types'
import { ElementName, ModalName } from '@l.x/lx/src/features/telemetry/constants'
import { sendAnalyticsEvent } from '@l.x/lx/src/features/telemetry/send'
import { setClipboard } from '@l.x/utils/src/clipboard/clipboard'
import { NumberType } from '@l.x/utils/src/format/types'
import { useBooleanState } from '@l.x/utils/src/react/useBooleanState'
import { EditAccountAction, editAccountActions } from 'wallet/src/features/wallet/accounts/editAccountSaga'
import { useDisplayName, useSignerAccounts } from 'wallet/src/features/wallet/hooks'
@@ -15,29 +15,29 @@ import { openPopup, PopupName } from 'src/app/features/popups/slice'
import { AppRoutes, RemoveRecoveryPhraseRoutes, SettingsRoutes, UnitagClaimRoutes } from 'src/app/navigation/constants'
import { navigate } from 'src/app/navigation/state'
import { focusOrCreateUnitagTab, useExtensionNavigation } from 'src/app/navigation/utils'
import { Button, Flex, Popover, ScrollView, Text, TouchableArea, useSporeColors } from 'ui/src'
import { Ellipsis, Globe, Person, TrashFilled, WalletFilled, X } from 'ui/src/components/icons'
import { spacing } from 'ui/src/theme'
import { AddressDisplay } from 'uniswap/src/components/accounts/AddressDisplay'
import { buildWrappedUrl } from 'uniswap/src/components/banners/shared/utils'
import { UniswapWrapped2025Card } from 'uniswap/src/components/banners/UniswapWrapped2025Card/UniswapWrapped2025Card'
import { ContextMenu, MenuOptionItem } from 'uniswap/src/components/menus/ContextMenu'
import { ContextMenuTriggerMode } from 'uniswap/src/components/menus/types'
import { WarningSeverity } from 'uniswap/src/components/modals/WarningModal/types'
import { WarningModal } from 'uniswap/src/components/modals/WarningModal/WarningModal'
import { UNISWAP_WEB_URL } from 'uniswap/src/constants/urls'
import { AccountType, DisplayNameType } from 'uniswap/src/features/accounts/types'
import { setHasDismissedUniswapWrapped2025Banner } from 'uniswap/src/features/behaviorHistory/slice'
import { Platform } from 'uniswap/src/features/platforms/types/Platform'
import { ModalName, WalletEventName } from 'uniswap/src/features/telemetry/constants'
import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send'
import Trace from 'uniswap/src/features/telemetry/Trace'
import { TestID } from 'uniswap/src/test/fixtures/testIDs'
import { ImportType } from 'uniswap/src/types/onboarding'
import { areAddressesEqual } from 'uniswap/src/utils/addresses'
import { logger } from 'utilities/src/logger/logger'
import { useBooleanState } from 'utilities/src/react/useBooleanState'
import { sleep } from 'utilities/src/time/timing'
import { Button, Flex, Popover, ScrollView, Text, TouchableArea, useSporeColors } from '@l.x/ui/src'
import { Ellipsis, Globe, Person, TrashFilled, WalletFilled, X } from '@l.x/ui/src/components/icons'
import { spacing } from '@l.x/ui/src/theme'
import { AddressDisplay } from '@l.x/lx/src/components/accounts/AddressDisplay'
import { buildWrappedUrl } from '@l.x/lx/src/components/banners/shared/utils'
import { UniswapWrapped2025Card } from '@l.x/lx/src/components/banners/UniswapWrapped2025Card/UniswapWrapped2025Card'
import { ContextMenu, MenuOptionItem } from '@l.x/lx/src/components/menus/ContextMenu'
import { ContextMenuTriggerMode } from '@l.x/lx/src/components/menus/types'
import { WarningSeverity } from '@l.x/lx/src/components/modals/WarningModal/types'
import { WarningModal } from '@l.x/lx/src/components/modals/WarningModal/WarningModal'
import { UNISWAP_WEB_URL } from '@l.x/lx/src/constants/urls'
import { AccountType, DisplayNameType } from '@l.x/lx/src/features/accounts/types'
import { setHasDismissedUniswapWrapped2025Banner } from '@l.x/lx/src/features/behaviorHistory/slice'
import { Platform } from '@l.x/lx/src/features/platforms/types/Platform'
import { ModalName, WalletEventName } from '@l.x/lx/src/features/telemetry/constants'
import { sendAnalyticsEvent } from '@l.x/lx/src/features/telemetry/send'
import Trace from '@l.x/lx/src/features/telemetry/Trace'
import { TestID } from '@l.x/lx/src/test/fixtures/testIDs'
import { ImportType } from '@l.x/lx/src/types/onboarding'
import { areAddressesEqual } from '@l.x/lx/src/utils/addresses'
import { logger } from '@l.x/utils/src/logger/logger'
import { useBooleanState } from '@l.x/utils/src/react/useBooleanState'
import { sleep } from '@l.x/utils/src/time/timing'
import { PlusCircle } from 'wallet/src/components/icons/PlusCircle'
import { MenuContent } from 'wallet/src/components/menu/MenuContent'
import { MenuContentItem } from 'wallet/src/components/menu/types'
@@ -1,12 +1,12 @@
import { useCallback, useState } from 'react'
import { useTranslation } from 'react-i18next'
import { Button, Flex, Text } from 'ui/src'
import { iconSizes } from 'ui/src/theme'
import { TextInput } from 'uniswap/src/components/input/TextInput'
import { Modal } from 'uniswap/src/components/modals/Modal'
import { AccountIcon } from 'uniswap/src/features/accounts/AccountIcon'
import { ModalName } from 'uniswap/src/features/telemetry/constants'
import { shortenAddress } from 'utilities/src/addresses'
import { Button, Flex, Text } from '@l.x/ui/src'
import { iconSizes } from '@l.x/ui/src/theme'
import { TextInput } from '@l.x/lx/src/components/input/TextInput'
import { Modal } from '@l.x/lx/src/components/modals/Modal'
import { AccountIcon } from '@l.x/lx/src/features/accounts/AccountIcon'
import { ModalName } from '@l.x/lx/src/features/telemetry/constants'
import { shortenAddress } from '@l.x/utils/src/addresses'
import { SignerMnemonicAccount } from 'wallet/src/features/wallet/accounts/types'
type CreateWalletModalProps = {
@@ -3,17 +3,17 @@ import { useTranslation } from 'react-i18next'
import { useDispatch } from 'react-redux'
import { UnitagClaimRoutes } from 'src/app/navigation/constants'
import { focusOrCreateUnitagTab } from 'src/app/navigation/utils'
import { Button, Flex, Text } from 'ui/src'
import { Person } from 'ui/src/components/icons'
import { iconSizes } from 'ui/src/theme'
import { TextInput } from 'uniswap/src/components/input/TextInput'
import { Modal } from 'uniswap/src/components/modals/Modal'
import { AccountIcon } from 'uniswap/src/features/accounts/AccountIcon'
import { DisplayNameType } from 'uniswap/src/features/accounts/types'
import { ModalName } from 'uniswap/src/features/telemetry/constants'
import { OnboardingCardLoggingName } from 'uniswap/src/features/telemetry/types'
import { UNITAG_SUFFIX_NO_LEADING_DOT } from 'uniswap/src/features/unitags/constants'
import { shortenAddress } from 'utilities/src/addresses'
import { Button, Flex, Text } from '@l.x/ui/src'
import { Person } from '@l.x/ui/src/components/icons'
import { iconSizes } from '@l.x/ui/src/theme'
import { TextInput } from '@l.x/lx/src/components/input/TextInput'
import { Modal } from '@l.x/lx/src/components/modals/Modal'
import { AccountIcon } from '@l.x/lx/src/features/accounts/AccountIcon'
import { DisplayNameType } from '@l.x/lx/src/features/accounts/types'
import { ModalName } from '@l.x/lx/src/features/telemetry/constants'
import { OnboardingCardLoggingName } from '@l.x/lx/src/features/telemetry/types'
import { UNITAG_SUFFIX_NO_LEADING_DOT } from '@l.x/lx/src/features/unitags/constants'
import { shortenAddress } from '@l.x/utils/src/addresses'
import { CardType, IntroCard, IntroCardGraphicType } from 'wallet/src/components/introCards/IntroCard'
import { useCanActiveAddressClaimUnitag } from 'wallet/src/features/unitags/hooks/useCanActiveAddressClaimUnitag'
import { EditAccountAction, editAccountActions } from 'wallet/src/features/wallet/accounts/editAccountSaga'
@@ -1,5 +1,5 @@
import { useMemo } from 'react'
import { usePrevious } from 'utilities/src/react/hooks'
import { usePrevious } from '@l.x/utils/src/react/hooks'
import { useAccountListData } from 'wallet/src/features/accounts/useAccountListData'
interface AddressWithBalance {
@@ -1,13 +1,13 @@
import { useEffect, useState } from 'react'
import { useTranslation } from 'react-i18next'
import { useDispatch, useSelector } from 'react-redux'
import { Button, Flex, Text, TouchableArea } from 'ui/src'
import { Feedback, LikeSquare, MessageText, X } from 'ui/src/components/icons'
import { IconSizeTokens, zIndexes } from 'ui/src/theme'
import { Modal } from 'uniswap/src/components/modals/Modal'
import { uniswapUrls } from 'uniswap/src/constants/urls'
import { ModalName, WalletEventName } from 'uniswap/src/features/telemetry/constants'
import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send'
import { Button, Flex, Text, TouchableArea } from '@l.x/ui/src'
import { Feedback, LikeSquare, MessageText, X } from '@l.x/ui/src/components/icons'
import { IconSizeTokens, zIndexes } from '@l.x/ui/src/theme'
import { Modal } from '@l.x/lx/src/components/modals/Modal'
import { uniswapUrls } from '@l.x/lx/src/constants/urls'
import { ModalName, WalletEventName } from '@l.x/lx/src/features/telemetry/constants'
import { sendAnalyticsEvent } from '@l.x/lx/src/features/telemetry/send'
import { appRatingPromptedMsSelector, appRatingProvidedMsSelector } from 'wallet/src/features/wallet/selectors'
import { setAppRating } from 'wallet/src/features/wallet/slice'
@@ -1,4 +1,4 @@
import { logger } from 'utilities/src/logger/logger'
import { logger } from '@l.x/utils/src/logger/logger'
import { SecretPayload } from 'wallet/src/features/wallet/Keyring/crypto'
import { PersistedStorage } from 'wallet/src/utils/persistedStorage'
@@ -1,7 +1,7 @@
import { BiometricUnlockStorageData } from 'src/app/features/biometricUnlock/BiometricUnlockStorage'
import { assertAuthenticatorAssertionResponse } from 'src/app/features/biometricUnlock/utils/assertAuthenticatorAssertionResponse'
import { assertPublicKeyCredential } from 'src/app/features/biometricUnlock/utils/assertPublicKeyCredential'
import { ONE_SECOND_MS } from 'utilities/src/time/time'
import { ONE_SECOND_MS } from '@l.x/utils/src/time/time'
import {
addEncryptedCiphertextToSecretPayload,
convertBytesToCryptoKey,
@@ -2,9 +2,9 @@ import {
BiometricUnlockStorage,
BiometricUnlockStorageData,
} from 'src/app/features/biometricUnlock/BiometricUnlockStorage'
import { ReactQueryCacheKey } from 'utilities/src/reactQuery/cache'
import type { QueryOptionsResult } from 'utilities/src/reactQuery/queryOptions'
import { queryWithoutCache } from 'utilities/src/reactQuery/queryOptions'
import { ReactQueryCacheKey } from '@l.x/utils/src/reactQuery/cache'
import type { QueryOptionsResult } from '@l.x/utils/src/reactQuery/queryOptions'
import { queryWithoutCache } from '@l.x/utils/src/reactQuery/queryOptions'
type BiometricUnlockCredentialQueryOptions = QueryOptionsResult<
Awaited<BiometricUnlockStorageData | null>,
@@ -1,7 +1,7 @@
import { UseMutationResult, useMutation, useQueryClient } from '@tanstack/react-query'
import { biometricUnlockCredentialQuery } from 'src/app/features/biometricUnlock/biometricUnlockCredentialQuery'
import { BiometricUnlockStorage } from 'src/app/features/biometricUnlock/BiometricUnlockStorage'
import { logger } from 'utilities/src/logger/logger'
import { logger } from '@l.x/utils/src/logger/logger'
export function useBiometricUnlockDisableMutation(): UseMutationResult<void, Error, void> {
const queryClient = useQueryClient()
@@ -2,8 +2,8 @@ import { UseMutationResult, useMutation, useQueryClient } from '@tanstack/react-
import { startNavigatorCredentialRequest } from 'src/app/features/biometricUnlock/useNavigatorCredentialAbortSignal'
import { assertPublicKeyCredential } from 'src/app/features/biometricUnlock/utils/assertPublicKeyCredential'
import { isUserVerifyingPlatformAuthenticatorAvailable } from 'src/app/utils/device/builtInBiometricCapabilitiesQuery'
import { logger } from 'utilities/src/logger/logger'
import { ONE_SECOND_MS } from 'utilities/src/time/time'
import { logger } from '@l.x/utils/src/logger/logger'
import { ONE_SECOND_MS } from '@l.x/utils/src/time/time'
import {
createEmptySecretPayload,
generateNew256BitRandomBuffer,
@@ -3,7 +3,7 @@ import { waitFor } from '@testing-library/react'
import { BiometricUnlockStorage } from 'src/app/features/biometricUnlock/BiometricUnlockStorage'
import { useChangePasswordWithBiometricMutation } from 'src/app/features/biometricUnlock/useChangePasswordWithBiometricMutation'
import { renderHookWithProviders } from 'src/test/render'
import { logger } from 'utilities/src/logger/logger'
import { logger } from '@l.x/utils/src/logger/logger'
import { encodeForStorage, encrypt, generateNew256BitRandomBuffer } from 'wallet/src/features/wallet/Keyring/crypto'
import { Keyring } from 'wallet/src/features/wallet/Keyring/Keyring'
@@ -14,7 +14,7 @@ jest.mock('wallet/src/features/wallet/Keyring/Keyring', () => ({
changePassword: jest.fn(),
},
}))
jest.mock('utilities/src/logger/logger', () => ({
jest.mock('@l.x/utils/src/logger/logger', () => ({
logger: {
error: jest.fn(),
},
@@ -12,8 +12,8 @@ import { Keyring } from '@luxfi/wallet/src/features/wallet/Keyring/Keyring'
=======
import { BiometricUnlockStorage } from 'src/app/features/biometricUnlock/BiometricUnlockStorage'
import { startNavigatorCredentialRequest } from 'src/app/features/biometricUnlock/useNavigatorCredentialAbortSignal'
import { logger } from 'utilities/src/logger/logger'
import { useEvent } from 'utilities/src/react/hooks'
import { logger } from '@l.x/utils/src/logger/logger'
import { useEvent } from '@l.x/utils/src/react/hooks'
import { Keyring } from 'wallet/src/features/wallet/Keyring/Keyring'
export function useChangePasswordWithBiometricMutation(options?: {
@@ -14,8 +14,8 @@ import { Keyring } from '@luxfi/wallet/src/features/wallet/Keyring/Keyring'
import { BiometricUnlockStorage } from 'src/app/features/biometricUnlock/BiometricUnlockStorage'
import { startNavigatorCredentialRequest } from 'src/app/features/biometricUnlock/useNavigatorCredentialAbortSignal'
import { useUnlockWithPassword } from 'src/app/features/lockScreen/useUnlockWithPassword'
import { logger } from 'utilities/src/logger/logger'
import { useEvent } from 'utilities/src/react/hooks'
import { logger } from '@l.x/utils/src/logger/logger'
import { useEvent } from '@l.x/utils/src/react/hooks'
import { Keyring } from 'wallet/src/features/wallet/Keyring/Keyring'
export function useUnlockWithBiometricCredentialMutation(): UseMutationResult<void, Error, void> {
@@ -7,8 +7,8 @@ import { isConnectedAccount } from 'src/app/features/dapp/utils'
import { closePopup, PopupName } from 'src/app/features/popups/slice'
import { backgroundToSidePanelMessageChannel } from 'src/background/messagePassing/messageChannels'
import { BackgroundToSidePanelRequestType } from 'src/background/messagePassing/types/requests'
import { UniverseChainId } from 'uniswap/src/features/chains/types'
import { extractBaseUrl } from 'utilities/src/format/urls'
import { UniverseChainId } from '@l.x/lx/src/features/chains/types'
import { extractBaseUrl } from '@l.x/utils/src/format/urls'
import { useActiveAccountAddress } from 'wallet/src/features/wallet/hooks'
type DappContextState = {
@@ -6,8 +6,8 @@ import {
ExtensionToDappRequestType,
UpdateConnectionRequest,
} from 'src/background/messagePassing/types/requests'
import { UniverseChainId } from 'uniswap/src/features/chains/types'
import { chainIdToHexadecimalString } from 'uniswap/src/features/chains/utils'
import { UniverseChainId } from '@l.x/lx/src/features/chains/types'
import { chainIdToHexadecimalString } from '@l.x/lx/src/features/chains/utils'
import { Account } from 'wallet/src/features/wallet/accounts/types'
import { getProviderSync } from 'wallet/src/features/wallet/context'
@@ -2,18 +2,18 @@ import { JsonRpcProvider } from '@ethersproject/providers'
import { providerErrors, serializeError } from '@metamask/rpc-errors'
import { changeChain } from 'src/app/features/dapp/changeChain'
import { dappStore } from 'src/app/features/dapp/store'
import { UniverseChainId } from 'uniswap/src/features/chains/types'
import { chainIdToHexadecimalString } from 'uniswap/src/features/chains/utils'
import { DappResponseType } from 'uniswap/src/features/dappRequests/types'
import { ExtensionEventName } from 'uniswap/src/features/telemetry/constants'
import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send'
import { UniverseChainId } from '@l.x/lx/src/features/chains/types'
import { chainIdToHexadecimalString } from '@l.x/lx/src/features/chains/utils'
import { DappResponseType } from '@l.x/lx/src/features/dappRequests/types'
import { ExtensionEventName } from '@l.x/lx/src/features/telemetry/constants'
import { sendAnalyticsEvent } from '@l.x/lx/src/features/telemetry/send'
// Mock dependencies
jest.mock('@ethersproject/providers')
jest.mock('@metamask/rpc-errors')
jest.mock('src/app/features/dapp/store')
jest.mock('uniswap/src/features/telemetry/send')
jest.mock('uniswap/src/features/chains/utils')
jest.mock('@l.x/lx/src/features/telemetry/send')
jest.mock('@l.x/lx/src/features/chains/utils')
describe('changeChain', () => {
const mockRequestId = 'test-request-id'
@@ -2,11 +2,11 @@ import { JsonRpcProvider } from '@ethersproject/providers'
import { providerErrors, serializeError } from '@metamask/rpc-errors'
import { dappStore } from 'src/app/features/dapp/store'
import { ChangeChainResponse, ErrorResponse } from 'src/app/features/dappRequests/types/DappRequestTypes'
import { UniverseChainId } from 'uniswap/src/features/chains/types'
import { chainIdToHexadecimalString } from 'uniswap/src/features/chains/utils'
import { DappResponseType } from 'uniswap/src/features/dappRequests/types'
import { ExtensionEventName } from 'uniswap/src/features/telemetry/constants'
import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send'
import { UniverseChainId } from '@l.x/lx/src/features/chains/types'
import { chainIdToHexadecimalString } from '@l.x/lx/src/features/chains/utils'
import { DappResponseType } from '@l.x/lx/src/features/dappRequests/types'
import { ExtensionEventName } from '@l.x/lx/src/features/telemetry/constants'
import { sendAnalyticsEvent } from '@l.x/lx/src/features/telemetry/send'
export function changeChain({
activeConnectedAddress,
@@ -7,8 +7,8 @@ import {
} from 'src/app/features/dapp/hooks'
import { DappState, dappStore } from 'src/app/features/dapp/store'
import { act, renderHook, waitFor } from 'src/test/test-utils'
import { UniverseChainId } from 'uniswap/src/features/chains/types'
import { SAMPLE_SEED_ADDRESS_1, SAMPLE_SEED_ADDRESS_3 } from 'uniswap/src/test/fixtures'
import { UniverseChainId } from '@l.x/lx/src/features/chains/types'
import { SAMPLE_SEED_ADDRESS_1, SAMPLE_SEED_ADDRESS_3 } from '@l.x/lx/src/test/fixtures'
import { useActiveAccountAddress } from 'wallet/src/features/wallet/hooks'
import { ACCOUNT, ACCOUNT2, ACCOUNT3 } from 'wallet/src/test/fixtures'
@@ -1,6 +1,6 @@
import { useEffect, useReducer, useState } from 'react'
import { DappInfo, DappStoreEvent, dappStore } from 'src/app/features/dapp/store'
import { UniverseChainId } from 'uniswap/src/features/chains/types'
import { UniverseChainId } from '@l.x/lx/src/features/chains/types'
import { Account } from 'wallet/src/features/wallet/accounts/types'
import { useActiveAccountAddress } from 'wallet/src/features/wallet/hooks'
+1 -1
View File
@@ -1,6 +1,6 @@
import { dappStore } from 'src/app/features/dapp/store'
import { call } from 'typed-redux-saga'
import { logger } from 'utilities/src/logger/logger'
import { logger } from '@l.x/utils/src/logger/logger'
// Initialize Dapp Store
export function* initDappStore() {
@@ -1,7 +1,7 @@
import { cloneDeep } from '@apollo/client/utilities'
import EventEmitter from 'eventemitter3'
import { getOrderedConnectedAddresses, isConnectedAccount } from 'src/app/features/dapp/utils'
import { UniverseChainId } from 'uniswap/src/features/chains/types'
import { UniverseChainId } from '@l.x/lx/src/features/chains/types'
import { Account } from 'wallet/src/features/wallet/accounts/types'
const STATE_STORAGE_KEY = 'dappState'
@@ -4,17 +4,17 @@ import {
getOrderedConnectedAddresses,
isConnectedAccount,
} from 'src/app/features/dapp/utils'
import { SAMPLE_SEED_ADDRESS_1, SAMPLE_SEED_ADDRESS_2, SAMPLE_SEED_ADDRESS_3 } from 'uniswap/src/test/fixtures'
import { extractNameFromUrl } from 'utilities/src/format/extractNameFromUrl'
import { promiseTimeout } from 'utilities/src/time/timing'
import { SAMPLE_SEED_ADDRESS_1, SAMPLE_SEED_ADDRESS_2, SAMPLE_SEED_ADDRESS_3 } from '@l.x/lx/src/test/fixtures'
import { extractNameFromUrl } from '@l.x/utils/src/format/extractNameFromUrl'
import { promiseTimeout } from '@l.x/utils/src/time/timing'
import { Account } from 'wallet/src/features/wallet/accounts/types'
import { ACCOUNT, ACCOUNT2, ACCOUNT3, readOnlyAccount } from 'wallet/src/test/fixtures'
jest.mock('utilities/src/format/extractNameFromUrl', () => ({
jest.mock('@l.x/utils/src/format/extractNameFromUrl', () => ({
extractNameFromUrl: jest.fn(),
}))
jest.mock('utilities/src/time/timing', () => ({
jest.mock('@l.x/utils/src/time/timing', () => ({
promiseTimeout: jest.fn(),
}))
@@ -1,8 +1,8 @@
import { AccountType } from 'uniswap/src/features/accounts/types'
import { extractNameFromUrl } from 'utilities/src/format/extractNameFromUrl'
import { bubbleToTop } from 'utilities/src/primitives/array'
import { ONE_SECOND_MS } from 'utilities/src/time/time'
import { promiseTimeout } from 'utilities/src/time/timing'
import { AccountType } from '@l.x/lx/src/features/accounts/types'
import { extractNameFromUrl } from '@l.x/utils/src/format/extractNameFromUrl'
import { bubbleToTop } from '@l.x/utils/src/primitives/array'
import { ONE_SECOND_MS } from '@l.x/utils/src/time/time'
import { promiseTimeout } from '@l.x/utils/src/time/timing'
import { Account, SignerMnemonicAccount } from 'wallet/src/features/wallet/accounts/types'
const MAX_TAB_QUERY_TIME = ONE_SECOND_MS
@@ -4,8 +4,8 @@ import type { DappRequestStoreItem } from 'src/app/features/dappRequests/shared'
import { DappRequestStatus } from 'src/app/features/dappRequests/shared'
import type { WithMetadata } from 'src/app/features/dappRequests/slice'
import { render, screen } from 'src/test/test-utils'
import { AccountType } from 'uniswap/src/features/accounts/types'
import { DappRequestType } from 'uniswap/src/features/dappRequests/types'
import { AccountType } from '@l.x/lx/src/features/accounts/types'
import { DappRequestType } from '@l.x/lx/src/features/dappRequests/types'
// Mock wagmi to avoid ESM import issues
jest.mock('wagmi', () => ({
@@ -30,7 +30,7 @@ jest.mock('src/app/features/dapp/hooks', () => ({
useDappLastChainId: jest.fn(() => 1),
}))
jest.mock('uniswap/src/features/gas/hooks/useChainGasToken', () => ({
jest.mock('@l.x/lx/src/features/gas/hooks/useChainGasToken', () => ({
useChainGasToken: jest.fn(() => ({
gasToken: { symbol: 'ETH' },
gasBalance: { value: '1000000000000000000', currency: { symbol: 'ETH' }, equalTo: () => false },
@@ -38,8 +38,8 @@ jest.mock('uniswap/src/features/gas/hooks/useChainGasToken', () => ({
})),
}))
jest.mock('uniswap/src/features/gas/utils', () => ({
...jest.requireActual('uniswap/src/features/gas/utils'),
jest.mock('@l.x/lx/src/features/gas/utils', () => ({
...jest.requireActual('@l.x/lx/src/features/gas/utils'),
hasSufficientGasBalance: jest.fn(() => true),
hasGasEstimationFailed: jest.fn(() => false),
}))
@@ -53,7 +53,7 @@ jest.mock('wallet/src/features/wallet/hooks', () => ({
})),
}))
jest.mock('uniswap/src/features/chains/hooks/useEnabledChains', () => ({
jest.mock('@l.x/lx/src/features/chains/hooks/useEnabledChains', () => ({
useEnabledChains: jest.fn(() => ({
defaultChainId: 1,
})),
@@ -73,7 +73,7 @@ jest.mock('wallet/src/features/transactions/TransactionRequest/AddressFooter', (
}))
// Mock currency hooks that parse transaction data
jest.mock('uniswap/src/data/apiClients/tradingApi/useTradingApiSwapQuery', () => ({
jest.mock('@l.x/lx/src/data/apiClients/tradingApi/useTradingApiSwapQuery', () => ({
useTradingApiSwapQuery: jest.fn(() => ({
data: undefined,
isLoading: false,
@@ -10,17 +10,17 @@ import { useIsDappRequestConfirming } from 'src/app/features/dappRequests/hooks'
import { useIsRequestStale } from 'src/app/features/dappRequests/hooks/useIsRequestStale'
import { type DappRequestStoreItem } from 'src/app/features/dappRequests/shared'
import { type DappRequest, isBatchedSwapRequest } from 'src/app/features/dappRequests/types/DappRequestTypes'
import { AnimatePresence, Button, Flex, type GetThemeValueForKey, styled, Text } from 'ui/src'
import { useEnabledChains } from 'uniswap/src/features/chains/hooks/useEnabledChains'
import { type UniverseChainId } from 'uniswap/src/features/chains/types'
import { DappRequestType } from 'uniswap/src/features/dappRequests/types'
import { useChainGasToken } from 'uniswap/src/features/gas/hooks/useChainGasToken'
import { hasGasEstimationFailed, hasSufficientGasBalance } from 'uniswap/src/features/gas/utils'
import { type TransactionTypeInfo } from 'uniswap/src/features/transactions/types/transactionDetails'
import { extractNameFromUrl } from 'utilities/src/format/extractNameFromUrl'
import { logger } from 'utilities/src/logger/logger'
import { useEvent } from 'utilities/src/react/hooks'
import { useThrottledCallback } from 'utilities/src/react/useThrottledCallback'
import { AnimatePresence, Button, Flex, type GetThemeValueForKey, styled, Text } from '@l.x/ui/src'
import { useEnabledChains } from '@l.x/lx/src/features/chains/hooks/useEnabledChains'
import { type UniverseChainId } from '@l.x/lx/src/features/chains/types'
import { DappRequestType } from '@l.x/lx/src/features/dappRequests/types'
import { useChainGasToken } from '@l.x/lx/src/features/gas/hooks/useChainGasToken'
import { hasGasEstimationFailed, hasSufficientGasBalance } from '@l.x/lx/src/features/gas/utils'
import { type TransactionTypeInfo } from '@l.x/lx/src/features/transactions/types/transactionDetails'
import { extractNameFromUrl } from '@l.x/utils/src/format/extractNameFromUrl'
import { logger } from '@l.x/utils/src/logger/logger'
import { useEvent } from '@l.x/utils/src/react/hooks'
import { useThrottledCallback } from '@l.x/utils/src/react/useThrottledCallback'
import { MAX_HIDDEN_CALLS_BY_DEFAULT } from 'wallet/src/components/BatchedTransactions/BatchedTransactionDetails'
import { DappRequestHeader } from 'wallet/src/components/dappRequests/DappRequestHeader'
import { WarningBox } from 'wallet/src/components/WarningBox/WarningBox'
@@ -24,11 +24,11 @@ import {
isSignMessageRequest,
isSignTypedDataRequest,
} from 'src/app/features/dappRequests/types/DappRequestTypes'
import { AnimatePresence, Flex, Text, TouchableArea, useSporeColors } from 'ui/src'
import { ReceiptText, RotatableChevron } from 'ui/src/components/icons'
import { zIndexes } from 'ui/src/theme'
import { Modal } from 'uniswap/src/components/modals/Modal'
import { ModalName } from 'uniswap/src/features/telemetry/constants'
import { AnimatePresence, Flex, Text, TouchableArea, useSporeColors } from '@l.x/ui/src'
import { ReceiptText, RotatableChevron } from '@l.x/ui/src/components/icons'
import { zIndexes } from '@l.x/ui/src/theme'
import { Modal } from '@l.x/lx/src/components/modals/Modal'
import { ModalName } from '@l.x/lx/src/features/telemetry/constants'
const REJECT_MESSAGE_HEIGHT = 48
@@ -3,9 +3,9 @@ import { useTranslation } from 'react-i18next'
import { useDispatch } from 'react-redux'
import { useDappRequestQueueContext } from 'src/app/features/dappRequests/DappRequestQueueContext'
import { useShouldShowBridgingRequestCard } from 'src/app/features/dappRequests/hooks'
import { BRIDGING_BANNER } from 'ui/src/assets'
import { DappRequestCardLoggingName } from 'uniswap/src/features/telemetry/types'
import { CurrencyField } from 'uniswap/src/types/currency'
import { BRIDGING_BANNER } from '@l.x/ui/src/assets'
import { DappRequestCardLoggingName } from '@l.x/lx/src/features/telemetry/types'
import { CurrencyField } from '@l.x/lx/src/types/currency'
import { CardType, IntroCard, IntroCardGraphicType, IntroCardProps } from 'wallet/src/components/introCards/IntroCard'
import { useWalletNavigation } from 'wallet/src/contexts/WalletNavigationContext'
import { setHasViewedDappRequestBridgingBanner } from 'wallet/src/features/behaviorHistory/slice'
@@ -6,13 +6,13 @@ import { useTransactionConfirmationTracker } from 'src/app/features/dappRequests
import { isDappRequestWithDappInfo } from 'src/app/features/dappRequests/saga'
import type { DappRequestStoreItem } from 'src/app/features/dappRequests/shared'
import { selectAllDappRequests, type WithMetadata } from 'src/app/features/dappRequests/slice'
import { DappResponseType } from 'uniswap/src/features/dappRequests/types'
import { ExtensionEventName } from 'uniswap/src/features/telemetry/constants'
import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send'
import { DappRequestAction } from 'uniswap/src/features/telemetry/types'
import { type TransactionTypeInfo } from 'uniswap/src/features/transactions/types/transactionDetails'
import { extractBaseUrl } from 'utilities/src/format/urls'
import { useEvent } from 'utilities/src/react/hooks'
import { DappResponseType } from '@l.x/lx/src/features/dappRequests/types'
import { ExtensionEventName } from '@l.x/lx/src/features/telemetry/constants'
import { sendAnalyticsEvent } from '@l.x/lx/src/features/telemetry/send'
import { DappRequestAction } from '@l.x/lx/src/features/telemetry/types'
import { type TransactionTypeInfo } from '@l.x/lx/src/features/transactions/types/transactionDetails'
import { extractBaseUrl } from '@l.x/utils/src/format/urls'
import { useEvent } from '@l.x/utils/src/react/hooks'
import { type SignedTransactionRequest } from 'wallet/src/features/transactions/executeTransaction/types'
import { type Account } from 'wallet/src/features/wallet/accounts/types'
import { useActiveAccountWithThrow } from 'wallet/src/features/wallet/hooks'
@@ -14,16 +14,16 @@ import {
} from 'src/app/features/dappRequests/types/DappRequestTypes'
import { dappResponseMessageChannel } from 'src/background/messagePassing/messageChannels'
import { call, put, select } from 'typed-redux-saga'
import { type UniverseChainId } from 'uniswap/src/features/chains/types'
import { chainIdToHexadecimalString } from 'uniswap/src/features/chains/utils'
import { DappResponseType } from 'uniswap/src/features/dappRequests/types'
import { pushNotification } from 'uniswap/src/features/notifications/slice/slice'
import { AppNotificationType } from 'uniswap/src/features/notifications/slice/types'
import { Platform } from 'uniswap/src/features/platforms/types/Platform'
import { getEnabledChainIdsSaga } from 'uniswap/src/features/settings/saga'
import { ExtensionEventName } from 'uniswap/src/features/telemetry/constants'
import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send'
import { extractBaseUrl } from 'utilities/src/format/urls'
import { type UniverseChainId } from '@l.x/lx/src/features/chains/types'
import { chainIdToHexadecimalString } from '@l.x/lx/src/features/chains/utils'
import { DappResponseType } from '@l.x/lx/src/features/dappRequests/types'
import { pushNotification } from '@l.x/lx/src/features/notifications/slice/slice'
import { AppNotificationType } from '@l.x/lx/src/features/notifications/slice/types'
import { Platform } from '@l.x/lx/src/features/platforms/types/Platform'
import { getEnabledChainIdsSaga } from '@l.x/lx/src/features/settings/saga'
import { ExtensionEventName } from '@l.x/lx/src/features/telemetry/constants'
import { sendAnalyticsEvent } from '@l.x/lx/src/features/telemetry/send'
import { extractBaseUrl } from '@l.x/utils/src/format/urls'
import { getProvider } from 'wallet/src/features/wallet/context'
import { selectActiveAccount } from 'wallet/src/features/wallet/selectors'
@@ -1,5 +1,5 @@
import { createPrepareAndSignDappTransactionSaga } from 'src/app/features/dappRequests/sagas/prepareAndSignDappTransactionSaga'
import { createMonitoredSaga } from 'uniswap/src/utils/saga'
import { createMonitoredSaga } from '@l.x/lx/src/utils/saga'
import { getSharedTransactionSagaDependencies } from 'wallet/src/features/transactions/configuredSagas'
// Create configured saga instance using shared transaction dependencies
@@ -4,7 +4,7 @@ import {
TransactionConfirmationTrackerProvider,
useTransactionConfirmationTracker,
} from 'src/app/features/dappRequests/context/TransactionConfirmationTracker'
import { UniverseChainId } from 'uniswap/src/features/chains/types'
import { UniverseChainId } from '@l.x/lx/src/features/chains/types'
// Helper component to test the hook
function TestComponent({ children }: PropsWithChildren): JSX.Element {
@@ -1,5 +1,5 @@
import { createContext, PropsWithChildren, useCallback, useContext, useState } from 'react'
import { UniverseChainId } from 'uniswap/src/features/chains/types'
import { UniverseChainId } from '@l.x/lx/src/features/chains/types'
interface TransactionConfirmationState {
/**
@@ -63,10 +63,10 @@ import {
} from 'src/app/features/dappRequests/types/DappRequestTypes'
import { dappResponseMessageChannel } from 'src/background/messagePassing/messageChannels'
import { call, put, select, takeEvery } from 'typed-redux-saga'
import { DappRequestType, DappResponseType } from 'uniswap/src/features/dappRequests/types'
import { Platform } from 'uniswap/src/features/platforms/types/Platform'
import { getEnabledChainIdsSaga } from 'uniswap/src/features/settings/saga'
import { logger } from 'utilities/src/logger/logger'
import { DappRequestType, DappResponseType } from '@l.x/lx/src/features/dappRequests/types'
import { Platform } from '@l.x/lx/src/features/platforms/types/Platform'
import { getEnabledChainIdsSaga } from '@l.x/lx/src/features/settings/saga'
import { logger } from '@l.x/utils/src/logger/logger'
function* dappRequestApproval({
type,
@@ -3,9 +3,9 @@ import type { SenderTabInfo } from 'src/app/features/dappRequests/shared'
import { ChainIdResponse, GetChainIdRequest } from 'src/app/features/dappRequests/types/DappRequestTypes'
import { dappResponseMessageChannel } from 'src/background/messagePassing/messageChannels'
import { call } from 'typed-redux-saga'
import { UniverseChainId } from 'uniswap/src/features/chains/types'
import { chainIdToHexadecimalString } from 'uniswap/src/features/chains/utils'
import { DappResponseType } from 'uniswap/src/features/dappRequests/types'
import { UniverseChainId } from '@l.x/lx/src/features/chains/types'
import { chainIdToHexadecimalString } from '@l.x/lx/src/features/chains/utils'
import { DappResponseType } from '@l.x/lx/src/features/dappRequests/types'
// oxlint-disable-next-line typescript/explicit-function-return-type
export function* getChainId({
@@ -9,7 +9,7 @@ import {
} from '@l.x/lx/src/features/transactions/types/transactionDetails'
import { logger } from '@l.x/utils/src/logger/logger'
jest.mock('utilities/src/logger/logger', () => ({
jest.mock('@l.x/utils/src/logger/logger', () => ({
logger: {
error: jest.fn(),
},
@@ -1,15 +1,15 @@
import { TradingApi } from '@universe/api'
import { createExternallySubmittedUniswapXOrder } from 'src/app/features/dappRequests/handleUniswapX'
import { UniverseChainId } from 'uniswap/src/features/chains/types'
import { UniverseChainId } from '@l.x/lx/src/features/chains/types'
import {
QueuedOrderStatus,
TransactionOriginType,
TransactionStatus,
TransactionType,
} from 'uniswap/src/features/transactions/types/transactionDetails'
import { logger } from 'utilities/src/logger/logger'
} from '@l.x/lx/src/features/transactions/types/transactionDetails'
import { logger } from '@l.x/utils/src/logger/logger'
jest.mock('utilities/src/logger/logger', () => ({
jest.mock('@l.x/utils/src/logger/logger', () => ({
logger: {
error: jest.fn(),
},
@@ -1,22 +1,22 @@
import { TradingApi } from '@universe/api'
import { Dispatch } from 'redux'
import { TradingApiClient } from 'uniswap/src/data/apiClients/tradingApi/TradingApiClient'
import { isUniverseChainId } from 'uniswap/src/features/chains/utils'
import { transactionActions } from 'uniswap/src/features/transactions/slice'
import { TradingApiClient } from '@l.x/lx/src/data/apiClients/tradingApi/TradingApiClient'
import { isUniverseChainId } from '@l.x/lx/src/features/chains/utils'
import { transactionActions } from '@l.x/lx/src/features/transactions/slice'
import {
QueuedOrderStatus,
TransactionOriginType,
TransactionType,
UniswapXOrderDetails,
} from 'uniswap/src/features/transactions/types/transactionDetails'
} from '@l.x/lx/src/features/transactions/types/transactionDetails'
import {
convertOrderStatusToTransactionStatus,
convertOrderTypeToRouting,
} from 'uniswap/src/features/transactions/utils/uniswapX.utils'
import { buildCurrencyId } from 'uniswap/src/utils/currencyId'
import { logger } from 'utilities/src/logger/logger'
import { ONE_SECOND_MS } from 'utilities/src/time/time'
import { sleep } from 'utilities/src/time/timing'
} from '@l.x/lx/src/features/transactions/utils/uniswapX.utils'
import { buildCurrencyId } from '@l.x/lx/src/utils/currencyId'
import { logger } from '@l.x/utils/src/logger/logger'
import { ONE_SECOND_MS } from '@l.x/utils/src/time/time'
import { sleep } from '@l.x/utils/src/time/timing'
/**
* Factory function that creates a handler for externally submitted UniswapX orders.
@@ -7,8 +7,8 @@ import {
isRequestPermissionsRequest,
} from 'src/app/features/dappRequests/types/DappRequestTypes'
import { ExtensionState } from 'src/store/extensionReducer'
import { getBridgingDappUrls } from 'uniswap/src/features/bridging/constants'
import { useBridgingSupportedChainIds, useNumBridgingChains } from 'uniswap/src/features/bridging/hooks/chains'
import { getBridgingDappUrls } from '@l.x/lx/src/features/bridging/constants'
import { useBridgingSupportedChainIds, useNumBridgingChains } from '@l.x/lx/src/features/bridging/hooks/chains'
import { selectHasViewedDappRequestBridgingBanner } from 'wallet/src/features/behaviorHistory/selectors'
import { WalletState } from 'wallet/src/state/walletReducer'
@@ -1,8 +1,8 @@
import { renderHook } from '@testing-library/react'
import { useTransactionConfirmationTracker } from 'src/app/features/dappRequests/context/TransactionConfirmationTracker'
import { useConditionalPreSignDelay } from 'src/app/features/dappRequests/hooks/useConditionalPreSignDelay'
import { UniverseChainId } from 'uniswap/src/features/chains/types'
import { logger } from 'utilities/src/logger/logger'
import { UniverseChainId } from '@l.x/lx/src/features/chains/types'
import { logger } from '@l.x/utils/src/logger/logger'
// Mock the TransactionConfirmationTracker hook
jest.mock('src/app/features/dappRequests/context/TransactionConfirmationTracker', () => ({
@@ -10,7 +10,7 @@ jest.mock('src/app/features/dappRequests/context/TransactionConfirmationTracker'
}))
// Mock the logger
jest.mock('utilities/src/logger/logger', () => ({
jest.mock('@l.x/utils/src/logger/logger', () => ({
logger: {
error: jest.fn(),
},
@@ -1,7 +1,7 @@
import { useCallback, useEffect, useRef } from 'react'
import { useTransactionConfirmationTracker } from 'src/app/features/dappRequests/context/TransactionConfirmationTracker'
import { UniverseChainId } from 'uniswap/src/features/chains/types'
import { logger } from 'utilities/src/logger/logger'
import { UniverseChainId } from '@l.x/lx/src/features/chains/types'
import { logger } from '@l.x/utils/src/logger/logger'
/**
* Delay before preparing the next transaction to allow network to recognize
@@ -1,6 +1,6 @@
import ms from 'ms'
import { useEffect, useState } from 'react'
import { useInterval } from 'utilities/src/time/timing'
import { useInterval } from '@l.x/utils/src/time/timing'
export const REQUEST_EXPIRY_TIME_MS = ms('30m')
@@ -3,13 +3,13 @@ import { useDispatch } from 'react-redux'
import { prepareAndSignDappTransactionActions } from 'src/app/features/dappRequests/configuredSagas'
import { useConditionalPreSignDelay } from 'src/app/features/dappRequests/hooks/useConditionalPreSignDelay'
import { usePrepareAndSignDappTransaction } from 'src/app/features/dappRequests/hooks/usePrepareAndSignDappTransaction'
import { AccountType } from 'uniswap/src/features/accounts/types'
import { UniverseChainId } from 'uniswap/src/features/chains/types'
import { AccountType } from '@l.x/lx/src/features/accounts/types'
import { UniverseChainId } from '@l.x/lx/src/features/chains/types'
import {
isValidTransactionRequest,
ValidatedTransactionRequest,
} from 'uniswap/src/features/transactions/types/transactionRequests'
import { logger } from 'utilities/src/logger/logger'
} from '@l.x/lx/src/features/transactions/types/transactionRequests'
import { logger } from '@l.x/utils/src/logger/logger'
import { SignedTransactionRequest } from 'wallet/src/features/transactions/executeTransaction/types'
import { Account, SignerMnemonicAccount } from 'wallet/src/features/wallet/accounts/types'
@@ -29,11 +29,11 @@ jest.mock('src/app/features/dappRequests/configuredSagas', () => ({
},
}))
jest.mock('uniswap/src/features/transactions/types/transactionRequests', () => ({
jest.mock('@l.x/lx/src/features/transactions/types/transactionRequests', () => ({
isValidTransactionRequest: jest.fn(),
}))
jest.mock('utilities/src/logger/logger', () => ({
jest.mock('@l.x/utils/src/logger/logger', () => ({
logger: {
error: jest.fn(),
},
@@ -3,10 +3,10 @@ import { useCallback, useEffect, useRef, useState } from 'react'
import { useDispatch } from 'react-redux'
import { prepareAndSignDappTransactionActions } from 'src/app/features/dappRequests/configuredSagas'
import { useConditionalPreSignDelay } from 'src/app/features/dappRequests/hooks/useConditionalPreSignDelay'
import { AccountType } from 'uniswap/src/features/accounts/types'
import { UniverseChainId } from 'uniswap/src/features/chains/types'
import { isValidTransactionRequest } from 'uniswap/src/features/transactions/types/transactionRequests'
import { logger } from 'utilities/src/logger/logger'
import { AccountType } from '@l.x/lx/src/features/accounts/types'
import { UniverseChainId } from '@l.x/lx/src/features/chains/types'
import { isValidTransactionRequest } from '@l.x/lx/src/features/transactions/types/transactionRequests'
import { logger } from '@l.x/utils/src/logger/logger'
import { SignedTransactionRequest } from 'wallet/src/features/transactions/executeTransaction/types'
import { Account } from 'wallet/src/features/wallet/accounts/types'
@@ -3,7 +3,7 @@ import { useMemo } from 'react'
import { usePrepareAndSignDappTransaction } from 'src/app/features/dappRequests/hooks/usePrepareAndSignDappTransaction'
import { useTransactionGasEstimation } from 'src/app/features/dappRequests/hooks/useTransactionGasEstimation'
import { DappRequestStoreItemForEthSendTxn } from 'src/app/features/dappRequests/slice'
import { UniverseChainId } from 'uniswap/src/features/chains/types'
import { UniverseChainId } from '@l.x/lx/src/features/chains/types'
import { formatExternalTxnWithGasEstimates } from 'wallet/src/features/gas/formatExternalTxnWithGasEstimates'
import { SignedTransactionRequest } from 'wallet/src/features/transactions/executeTransaction/types'
import { Account } from 'wallet/src/features/wallet/accounts/types'
@@ -3,10 +3,10 @@ import { useMemo } from 'react'
import { usePrepareAndSignDappTransaction } from 'src/app/features/dappRequests/hooks/usePrepareAndSignDappTransaction'
import { useTransactionGasEstimation } from 'src/app/features/dappRequests/hooks/useTransactionGasEstimation'
import { DappRequestStoreItemForSendCallsTxn } from 'src/app/features/dappRequests/slice'
import { UNISWAP_DELEGATION_ADDRESS } from 'uniswap/src/constants/addresses'
import { useWalletEncode7702Query } from 'uniswap/src/data/apiClients/tradingApi/useWalletEncode7702Query'
import { UniverseChainId } from 'uniswap/src/features/chains/types'
import { EthTransaction } from 'uniswap/src/types/walletConnect'
import { UNISWAP_DELEGATION_ADDRESS } from '@l.x/lx/src/constants/addresses'
import { useWalletEncode7702Query } from '@l.x/lx/src/data/apiClients/tradingApi/useWalletEncode7702Query'
import { UniverseChainId } from '@l.x/lx/src/features/chains/types'
import { EthTransaction } from '@l.x/lx/src/types/walletConnect'
import { transformCallsToTransactionRequests } from 'wallet/src/features/batchedTransactions/utils'
import { useLiveAccountDelegationDetails } from 'wallet/src/features/smartWallet/hooks/useLiveAccountDelegationDetails'
import { SignedTransactionRequest } from 'wallet/src/features/transactions/executeTransaction/types'
@@ -2,17 +2,17 @@ import { TransactionRequest } from '@ethersproject/providers'
import { renderHook } from '@testing-library/react'
import { GasFeeResult } from '@universe/api'
import { useTransactionGasEstimation } from 'src/app/features/dappRequests/hooks/useTransactionGasEstimation'
import { PollingInterval } from 'uniswap/src/constants/misc'
import { UniverseChainId } from 'uniswap/src/features/chains/types'
import { useTransactionGasFee } from 'uniswap/src/features/gas/hooks'
import { logger } from 'utilities/src/logger/logger'
import { PollingInterval } from '@l.x/lx/src/constants/misc'
import { UniverseChainId } from '@l.x/lx/src/features/chains/types'
import { useTransactionGasFee } from '@l.x/lx/src/features/gas/hooks'
import { logger } from '@l.x/utils/src/logger/logger'
// Mock dependencies
jest.mock('uniswap/src/features/gas/hooks', () => ({
jest.mock('@l.x/lx/src/features/gas/hooks', () => ({
useTransactionGasFee: jest.fn(),
}))
jest.mock('utilities/src/logger/logger', () => ({
jest.mock('@l.x/utils/src/logger/logger', () => ({
logger: {
error: jest.fn(),
},
@@ -1,10 +1,10 @@
import { TransactionRequest } from '@ethersproject/providers'
import { GasFeeResult } from '@universe/api'
import { useEffect, useMemo } from 'react'
import { PollingInterval } from 'uniswap/src/constants/misc'
import { UniverseChainId } from 'uniswap/src/features/chains/types'
import { useTransactionGasFee } from 'uniswap/src/features/gas/hooks'
import { logger } from 'utilities/src/logger/logger'
import { PollingInterval } from '@l.x/lx/src/constants/misc'
import { UniverseChainId } from '@l.x/lx/src/features/chains/types'
import { useTransactionGasFee } from '@l.x/lx/src/features/gas/hooks'
import { logger } from '@l.x/utils/src/logger/logger'
interface UseTransactionGasEstimationParams {
/** Base transaction data (will be formatted with chainId) */
@@ -16,14 +16,14 @@ import {
import { dappResponseMessageChannel } from 'src/background/messagePassing/messageChannels'
import { type Permission } from 'src/contentScript/WindowEthereumRequestTypes'
import { call, put } from 'typed-redux-saga'
import { chainIdToHexadecimalString } from 'uniswap/src/features/chains/utils'
import { DappResponseType, EthMethod } from 'uniswap/src/features/dappRequests/types'
import { pushNotification } from 'uniswap/src/features/notifications/slice/slice'
import { AppNotificationType } from 'uniswap/src/features/notifications/slice/types'
import { ExtensionEventName } from 'uniswap/src/features/telemetry/constants'
import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send'
import { extractBaseUrl } from 'utilities/src/format/urls'
import { logger } from 'utilities/src/logger/logger'
import { chainIdToHexadecimalString } from '@l.x/lx/src/features/chains/utils'
import { DappResponseType, EthMethod } from '@l.x/lx/src/features/dappRequests/types'
import { pushNotification } from '@l.x/lx/src/features/notifications/slice/slice'
import { AppNotificationType } from '@l.x/lx/src/features/notifications/slice/types'
import { ExtensionEventName } from '@l.x/lx/src/features/telemetry/constants'
import { sendAnalyticsEvent } from '@l.x/lx/src/features/telemetry/send'
import { extractBaseUrl } from '@l.x/utils/src/format/urls'
import { logger } from '@l.x/utils/src/logger/logger'
export function getPermissions(dappUrl: string | undefined, connectedAddresses: Address[] | undefined): Permission[] {
const permissions: Permission[] = []
@@ -1,11 +1,11 @@
import { useTranslation } from 'react-i18next'
import { DappRequestContent } from 'src/app/features/dappRequests/DappRequestContent'
import { Flex, Text } from 'ui/src'
import { AlertTriangleFilled } from 'ui/src/components/icons'
import { LearnMoreLink } from 'uniswap/src/components/text/LearnMoreLink'
import { uniswapUrls } from 'uniswap/src/constants/urls'
import { WalletEventName } from 'uniswap/src/features/telemetry/constants'
import Trace from 'uniswap/src/features/telemetry/Trace'
import { Flex, Text } from '@l.x/ui/src'
import { AlertTriangleFilled } from '@l.x/ui/src/components/icons'
import { LearnMoreLink } from '@l.x/lx/src/components/text/LearnMoreLink'
import { uniswapUrls } from '@l.x/lx/src/constants/urls'
import { WalletEventName } from '@l.x/lx/src/features/telemetry/constants'
import Trace from '@l.x/lx/src/features/telemetry/Trace'
export function ActionCanNotBeCompletedContent(): JSX.Element {
const { t } = useTranslation()
@@ -1,7 +1,7 @@
import { useTranslation } from 'react-i18next'
import { DappRequestContent } from 'src/app/features/dappRequests/DappRequestContent'
import { useDappRequestQueueContext } from 'src/app/features/dappRequests/DappRequestQueueContext'
import { AccountType } from 'uniswap/src/features/accounts/types'
import { AccountType } from '@l.x/lx/src/features/accounts/types'
import { DappConnectionContent } from 'wallet/src/components/dappRequests/DappConnectionContent'
import { useBlockaidVerification } from 'wallet/src/features/dappRequests/hooks/useBlockaidVerification'
import { useDappConnectionConfirmation } from 'wallet/src/features/dappRequests/hooks/useDappConnectionConfirmation'
@@ -8,16 +8,16 @@ import {
ApproveSendTransactionRequest,
DappRequest as DappRequestBaseType,
} from 'src/app/features/dappRequests/types/DappRequestTypes'
import { Flex, Text } from 'ui/src'
import { iconSizes } from 'ui/src/theme'
import { CurrencyLogo } from 'uniswap/src/components/CurrencyLogo/CurrencyLogo'
import { LearnMoreLink } from 'uniswap/src/components/text/LearnMoreLink'
import { uniswapUrls } from 'uniswap/src/constants/urls'
import { DappRequestType } from 'uniswap/src/features/dappRequests/types'
import { CurrencyInfo } from 'uniswap/src/features/dataApi/types'
import { useCurrencyInfo } from 'uniswap/src/features/tokens/useCurrencyInfo'
import { TransactionType, TransactionTypeInfo } from 'uniswap/src/features/transactions/types/transactionDetails'
import { buildCurrencyId } from 'uniswap/src/utils/currencyId'
import { Flex, Text } from '@l.x/ui/src'
import { iconSizes } from '@l.x/ui/src/theme'
import { CurrencyLogo } from '@l.x/lx/src/components/CurrencyLogo/CurrencyLogo'
import { LearnMoreLink } from '@l.x/lx/src/components/text/LearnMoreLink'
import { uniswapUrls } from '@l.x/lx/src/constants/urls'
import { DappRequestType } from '@l.x/lx/src/features/dappRequests/types'
import { CurrencyInfo } from '@l.x/lx/src/features/dataApi/types'
import { useCurrencyInfo } from '@l.x/lx/src/features/tokens/useCurrencyInfo'
import { TransactionType, TransactionTypeInfo } from '@l.x/lx/src/features/transactions/types/transactionDetails'
import { buildCurrencyId } from '@l.x/lx/src/utils/currencyId'
import { useNoYoloParser } from 'wallet/src/utils/useNoYoloParser'
function useDappRequestTokenRecipientInfo(request: DappRequestBaseType, dappUrl: string): Maybe<CurrencyInfo> {
@@ -19,8 +19,8 @@ import {
isWrapRequest,
SendTransactionRequest,
} from 'src/app/features/dappRequests/types/DappRequestTypes'
import { TransactionTypeInfo } from 'uniswap/src/features/transactions/types/transactionDetails'
import { logger } from 'utilities/src/logger/logger'
import { TransactionTypeInfo } from '@l.x/lx/src/features/transactions/types/transactionDetails'
import { logger } from '@l.x/utils/src/logger/logger'
import { ErrorBoundary } from 'wallet/src/components/ErrorBoundary/ErrorBoundary'
interface EthSendRequestContentProps {
@@ -6,12 +6,12 @@ import { DappRequestContent } from 'src/app/features/dappRequests/DappRequestCon
import { useDappRequestQueueContext } from 'src/app/features/dappRequests/DappRequestQueueContext'
import { isNonZeroBigNumber } from 'src/app/features/dappRequests/requestContent/EthSend/Swap/utils'
import { SendTransactionRequest } from 'src/app/features/dappRequests/types/DappRequestTypes'
import { Anchor, Flex, Text, TouchableArea } from 'ui/src'
import { AnimatedCopySheets, ExternalLink } from 'ui/src/components/icons'
import { ContentRow } from 'uniswap/src/components/transactions/requests/ContentRow'
import { CopyNotificationType } from 'uniswap/src/features/notifications/slice/types'
import { ExplorerDataType, getExplorerLink } from 'uniswap/src/utils/linking'
import { ellipseMiddle, shortenAddress } from 'utilities/src/addresses'
import { Anchor, Flex, Text, TouchableArea } from '@l.x/ui/src'
import { AnimatedCopySheets, ExternalLink } from '@l.x/ui/src/components/icons'
import { ContentRow } from '@l.x/lx/src/components/transactions/requests/ContentRow'
import { CopyNotificationType } from '@l.x/lx/src/features/notifications/slice/types'
import { ExplorerDataType, getExplorerLink } from '@l.x/lx/src/utils/linking'
import { ellipseMiddle, shortenAddress } from '@l.x/utils/src/addresses'
import { useCopyToClipboard } from 'wallet/src/components/copy/useCopyToClipboard'
import {
SpendingDetails,
@@ -2,7 +2,7 @@ import { GasFeeResult } from '@universe/api'
import { useTranslation } from 'react-i18next'
import { DappRequestContent } from 'src/app/features/dappRequests/DappRequestContent'
import { LPSendTransactionRequest } from 'src/app/features/dappRequests/types/DappRequestTypes'
import { Flex, Text } from 'ui/src'
import { Flex, Text } from '@l.x/ui/src'
interface LPRequestContentProps {
transactionGasFeeResult: GasFeeResult
@@ -5,7 +5,7 @@ import { useDappLastChainId } from 'src/app/features/dapp/hooks'
import { DappRequestContent } from 'src/app/features/dappRequests/DappRequestContent'
import { useDappRequestQueueContext } from 'src/app/features/dappRequests/DappRequestQueueContext'
import { SendTransactionRequest } from 'src/app/features/dappRequests/types/DappRequestTypes'
import { useBooleanState } from 'utilities/src/react/useBooleanState'
import { useBooleanState } from '@l.x/utils/src/react/useBooleanState'
import { DappTransactionScanningContent } from 'wallet/src/components/dappRequests/DappTransactionScanningContent'
import { TransactionRiskLevel } from 'wallet/src/features/dappRequests/types'
import { shouldDisableConfirm } from 'wallet/src/features/dappRequests/utils/riskUtils'
@@ -2,8 +2,8 @@ import { GasFeeResult } from '@universe/api'
import { useTranslation } from 'react-i18next'
import { DappRequestContent } from 'src/app/features/dappRequests/DappRequestContent'
import { Permit2ApproveSendTransactionRequest } from 'src/app/features/dappRequests/types/DappRequestTypes'
import { Flex, Text } from 'ui/src'
import { TransactionType, TransactionTypeInfo } from 'uniswap/src/features/transactions/types/transactionDetails'
import { Flex, Text } from '@l.x/ui/src'
import { TransactionType, TransactionTypeInfo } from '@l.x/lx/src/features/transactions/types/transactionDetails'
interface Permit2ApproveRequestContentProps {
transactionGasFeeResult: GasFeeResult
@@ -1,17 +1,17 @@
import { GasFeeResult } from '@universe/api'
import { useTranslation } from 'react-i18next'
import { DappRequestContent } from 'src/app/features/dappRequests/DappRequestContent'
import { Flex, Separator, Text } from 'ui/src'
import { ArrowDown } from 'ui/src/components/icons'
import { iconSizes } from 'ui/src/theme'
import { CurrencyLogo } from 'uniswap/src/components/CurrencyLogo/CurrencyLogo'
import { SplitLogo } from 'uniswap/src/components/CurrencyLogo/SplitLogo'
import { UniverseChainId } from 'uniswap/src/features/chains/types'
import { CurrencyInfo } from 'uniswap/src/features/dataApi/types'
import { useLocalizationContext } from 'uniswap/src/features/language/LocalizationContext'
import { getCurrencyAmount, ValueType } from 'uniswap/src/features/tokens/getCurrencyAmount'
import { useUSDCValue } from 'uniswap/src/features/transactions/hooks/useUSDCPriceWrapper'
import { NumberType } from 'utilities/src/format/types'
import { Flex, Separator, Text } from '@l.x/ui/src'
import { ArrowDown } from '@l.x/ui/src/components/icons'
import { iconSizes } from '@l.x/ui/src/theme'
import { CurrencyLogo } from '@l.x/lx/src/components/CurrencyLogo/CurrencyLogo'
import { SplitLogo } from '@l.x/lx/src/components/CurrencyLogo/SplitLogo'
import { UniverseChainId } from '@l.x/lx/src/features/chains/types'
import { CurrencyInfo } from '@l.x/lx/src/features/dataApi/types'
import { useLocalizationContext } from '@l.x/lx/src/features/language/LocalizationContext'
import { getCurrencyAmount, ValueType } from '@l.x/lx/src/features/tokens/getCurrencyAmount'
import { useUSDCValue } from '@l.x/lx/src/features/transactions/hooks/useUSDCPriceWrapper'
import { NumberType } from '@l.x/utils/src/format/types'
// oxlint-disable-next-line complexity -- biome-parity: oxlint is stricter here
export function SwapDisplay({
@@ -4,14 +4,14 @@ import { useDappRequestQueueContext } from 'src/app/features/dappRequests/DappRe
import { SwapDisplay } from 'src/app/features/dappRequests/requestContent/EthSend/Swap/SwapDisplay'
import { formatUnits, useSwapDetails } from 'src/app/features/dappRequests/requestContent/EthSend/Swap/utils'
import { UniversalRouterCall } from 'src/app/features/dappRequests/types/UniversalRouterTypes'
import { DEFAULT_NATIVE_ADDRESS, DEFAULT_NATIVE_ADDRESS_LEGACY } from 'uniswap/src/features/chains/evm/defaults'
import { useEnabledChains } from 'uniswap/src/features/chains/hooks/useEnabledChains'
import { toSupportedChainId } from 'uniswap/src/features/chains/utils'
import { CurrencyInfo } from 'uniswap/src/features/dataApi/types'
import { useCurrencyInfo, useNativeCurrencyInfo } from 'uniswap/src/features/tokens/useCurrencyInfo'
import { TransactionType, TransactionTypeInfo } from 'uniswap/src/features/transactions/types/transactionDetails'
import { buildCurrencyId } from 'uniswap/src/utils/currencyId'
import { assert } from 'utilities/src/errors'
import { DEFAULT_NATIVE_ADDRESS, DEFAULT_NATIVE_ADDRESS_LEGACY } from '@l.x/lx/src/features/chains/evm/defaults'
import { useEnabledChains } from '@l.x/lx/src/features/chains/hooks/useEnabledChains'
import { toSupportedChainId } from '@l.x/lx/src/features/chains/utils'
import { CurrencyInfo } from '@l.x/lx/src/features/dataApi/types'
import { useCurrencyInfo, useNativeCurrencyInfo } from '@l.x/lx/src/features/tokens/useCurrencyInfo'
import { TransactionType, TransactionTypeInfo } from '@l.x/lx/src/features/transactions/types/transactionDetails'
import { buildCurrencyId } from '@l.x/lx/src/utils/currencyId'
import { assert } from '@l.x/utils/src/errors'
import { UniswapXSwapRequest } from 'wallet/src/components/dappRequests/types/Permit2Types'
function getTransactionTypeInfo({
@@ -30,8 +30,8 @@ import {
V4SwapExactOutParamSchema,
V4SwapExactOutSingleParamSchema,
} from 'src/app/features/dappRequests/types/UniversalRouterTypes'
import { DEFAULT_NATIVE_ADDRESS, DEFAULT_NATIVE_ADDRESS_LEGACY } from 'uniswap/src/features/chains/evm/defaults'
import { buildCurrencyId } from 'uniswap/src/utils/currencyId'
import { DEFAULT_NATIVE_ADDRESS, DEFAULT_NATIVE_ADDRESS_LEGACY } from '@l.x/lx/src/features/chains/evm/defaults'
import { buildCurrencyId } from '@l.x/lx/src/utils/currencyId'
// Like ethers.formatUnits except it parses specific constants
export function formatUnits(amount: BigNumberish, units: number): string {
@@ -4,10 +4,10 @@ import { useDappRequestQueueContext } from 'src/app/features/dappRequests/DappRe
import { SwapDisplay } from 'src/app/features/dappRequests/requestContent/EthSend/Swap/SwapDisplay'
import { formatUnits } from 'src/app/features/dappRequests/requestContent/EthSend/Swap/utils'
import { WrapSendTransactionRequest } from 'src/app/features/dappRequests/types/DappRequestTypes'
import { useEnabledChains } from 'uniswap/src/features/chains/hooks/useEnabledChains'
import { CurrencyInfo } from 'uniswap/src/features/dataApi/types'
import { useNativeCurrencyInfo, useWrappedNativeCurrencyInfo } from 'uniswap/src/features/tokens/useCurrencyInfo'
import { TransactionType, TransactionTypeInfo } from 'uniswap/src/features/transactions/types/transactionDetails'
import { useEnabledChains } from '@l.x/lx/src/features/chains/hooks/useEnabledChains'
import { CurrencyInfo } from '@l.x/lx/src/features/dataApi/types'
import { useNativeCurrencyInfo, useWrappedNativeCurrencyInfo } from '@l.x/lx/src/features/tokens/useCurrencyInfo'
import { TransactionType, TransactionTypeInfo } from '@l.x/lx/src/features/transactions/types/transactionDetails'
function getTransactionTypeInfo({
inputCurrencyInfo,
@@ -5,10 +5,10 @@ import { useDappLastChainId } from 'src/app/features/dapp/hooks'
import { DappRequestContent } from 'src/app/features/dappRequests/DappRequestContent'
import { useDappRequestQueueContext } from 'src/app/features/dappRequests/DappRequestQueueContext'
import { SignMessageRequest } from 'src/app/features/dappRequests/types/DappRequestTypes'
import { EthMethod } from 'uniswap/src/features/dappRequests/types'
import { logger } from 'utilities/src/logger/logger'
import { containsNonPrintableChars } from 'utilities/src/primitives/string'
import { useBooleanState } from 'utilities/src/react/useBooleanState'
import { EthMethod } from '@l.x/lx/src/features/dappRequests/types'
import { logger } from '@l.x/utils/src/logger/logger'
import { containsNonPrintableChars } from '@l.x/utils/src/primitives/string'
import { useBooleanState } from '@l.x/utils/src/react/useBooleanState'
import { DappPersonalSignContent } from 'wallet/src/components/dappRequests/DappPersonalSignContent'
import { TransactionRiskLevel } from 'wallet/src/features/dappRequests/types'
import { shouldDisableConfirm } from 'wallet/src/features/dappRequests/utils/riskUtils'
@@ -13,9 +13,9 @@ import {
type ParsedCall,
type SendCallsRequest,
} from 'src/app/features/dappRequests/types/DappRequestTypes'
import { type UniverseChainId } from 'uniswap/src/features/chains/types'
import { TransactionType, type TransactionTypeInfo } from 'uniswap/src/features/transactions/types/transactionDetails'
import { useBooleanState } from 'utilities/src/react/useBooleanState'
import { type UniverseChainId } from '@l.x/lx/src/features/chains/types'
import { TransactionType, type TransactionTypeInfo } from '@l.x/lx/src/features/transactions/types/transactionDetails'
import { useBooleanState } from '@l.x/utils/src/react/useBooleanState'
import { BatchedRequestDetailsContent } from 'wallet/src/components/BatchedTransactions/BatchedTransactionDetails'
import { DappSendCallsScanningContent } from 'wallet/src/components/dappRequests/DappSendCallsScanningContent'
import { type TransactionRiskLevel } from 'wallet/src/features/dappRequests/types'
@@ -7,11 +7,11 @@ import { ActionCanNotBeCompletedContent } from 'src/app/features/dappRequests/re
import { UniswapXSwapRequestContent } from 'src/app/features/dappRequests/requestContent/EthSend/Swap/SwapRequestContent'
import { NonStandardTypedDataRequestContent } from 'src/app/features/dappRequests/requestContent/SignTypeData/NonStandardTypedDataRequestContent'
import { SignTypedDataRequest } from 'src/app/features/dappRequests/types/DappRequestTypes'
import { Flex } from 'ui/src'
import { toSupportedChainId } from 'uniswap/src/features/chains/utils'
import { useHasAccountMismatchCallback } from 'uniswap/src/features/smartWallet/mismatch/hooks'
import { logger } from 'utilities/src/logger/logger'
import { useBooleanState } from 'utilities/src/react/useBooleanState'
import { Flex } from '@l.x/ui/src'
import { toSupportedChainId } from '@l.x/lx/src/features/chains/utils'
import { useHasAccountMismatchCallback } from '@l.x/lx/src/features/smartWallet/mismatch/hooks'
import { logger } from '@l.x/utils/src/logger/logger'
import { useBooleanState } from '@l.x/utils/src/react/useBooleanState'
import { DappSignTypedDataContent } from 'wallet/src/components/dappRequests/DappSignTypedDataContent'
import { Permit2Content } from 'wallet/src/components/dappRequests/SignTypedData/Permit2Content'
import { StandardTypedDataContent } from 'wallet/src/components/dappRequests/SignTypedData/StandardTypedDataContent'
@@ -44,21 +44,21 @@ import { navigate } from 'src/app/navigation/state'
import { dappResponseMessageChannel } from 'src/background/messagePassing/messageChannels'
import getCalldataInfoFromTransaction from 'src/background/utils/getCalldataInfoFromTransaction'
import { call, put, select, take } from 'typed-redux-saga'
import { hexadecimalStringToInt, toSupportedChainId } from 'uniswap/src/features/chains/utils'
import { DappRequestType, DappResponseType } from 'uniswap/src/features/dappRequests/types'
import { pushNotification } from 'uniswap/src/features/notifications/slice/slice'
import { AppNotificationType } from 'uniswap/src/features/notifications/slice/types'
import { Platform } from 'uniswap/src/features/platforms/types/Platform'
import { getEnabledChainIdsSaga } from 'uniswap/src/features/settings/saga'
import { ExtensionEventName } from 'uniswap/src/features/telemetry/constants'
import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send'
import { hexadecimalStringToInt, toSupportedChainId } from '@l.x/lx/src/features/chains/utils'
import { DappRequestType, DappResponseType } from '@l.x/lx/src/features/dappRequests/types'
import { pushNotification } from '@l.x/lx/src/features/notifications/slice/slice'
import { AppNotificationType } from '@l.x/lx/src/features/notifications/slice/types'
import { Platform } from '@l.x/lx/src/features/platforms/types/Platform'
import { getEnabledChainIdsSaga } from '@l.x/lx/src/features/settings/saga'
import { ExtensionEventName } from '@l.x/lx/src/features/telemetry/constants'
import { sendAnalyticsEvent } from '@l.x/lx/src/features/telemetry/send'
import {
TransactionOriginType,
TransactionType,
type TransactionTypeInfo,
} from 'uniswap/src/features/transactions/types/transactionDetails'
import { extractBaseUrl } from 'utilities/src/format/urls'
import { logger } from 'utilities/src/logger/logger'
} from '@l.x/lx/src/features/transactions/types/transactionDetails'
import { extractBaseUrl } from '@l.x/utils/src/format/urls'
import { logger } from '@l.x/utils/src/logger/logger'
import { getCallsStatusHelper } from 'wallet/src/features/batchedTransactions/eip5792Utils'
import { addBatchedTransaction } from 'wallet/src/features/batchedTransactions/slice'
import { generateBatchId, getCapabilitiesResponse } from 'wallet/src/features/batchedTransactions/utils'
@@ -1,7 +1,7 @@
import type { DappInfo } from 'src/app/features/dapp/store'
import type { DappRequest, ErrorResponse } from 'src/app/features/dappRequests/types/DappRequestTypes'
import type { DappRequestMessageSchema } from 'src/background/messagePassing/types/requests'
import type { TransactionTypeInfo } from 'uniswap/src/features/transactions/types/transactionDetails'
import type { TransactionTypeInfo } from '@l.x/lx/src/features/transactions/types/transactionDetails'
import type { SignedTransactionRequest } from 'wallet/src/features/transactions/executeTransaction/types'
import type { z } from 'zod'
@@ -5,8 +5,8 @@ import { NonfungiblePositionManagerCallSchema } from 'src/app/features/dappReque
import { UniversalRouterCallSchema } from 'src/app/features/dappRequests/types/UniversalRouterTypes'
import { HomeTabs } from 'src/app/navigation/constants'
import { PermissionRequestSchema, PermissionSchema } from 'src/contentScript/WindowEthereumRequestTypes'
import { MessageSchema } from 'uniswap/src/extension/messagePassing/messageTypes'
import { DappRequestType, DappResponseType } from 'uniswap/src/features/dappRequests/types'
import { MessageSchema } from '@l.x/lx/src/extension/messagePassing/messageTypes'
import { DappRequestType, DappResponseType } from '@l.x/lx/src/features/dappRequests/types'
import {
BatchIdSchema,
CallSchema,

Some files were not shown because too many files have changed in this diff Show More